@@ -60,24 +60,15 @@ impl<'a> PromiseGroup<'a> {
6060 self . on_promise_all_rejected ( agent, value. unbind ( ) , gc. nogc ( ) ) ;
6161 }
6262 } ,
63- PromiseGroupType :: PromiseAllSettled => match reaction_type {
64- PromiseReactionType :: Fulfill => {
65- self . on_promise_all_settled_fulfilled (
66- agent,
67- index,
68- value. unbind ( ) ,
69- gc. reborrow ( ) ,
70- ) ;
71- }
72- PromiseReactionType :: Reject => {
73- self . on_promise_all_settled_rejected (
74- agent,
75- index,
76- value. unbind ( ) ,
77- gc. reborrow ( ) ,
78- ) ;
79- }
80- } ,
63+ PromiseGroupType :: PromiseAllSettled => {
64+ self . on_promise_all_settled (
65+ agent,
66+ reaction_type,
67+ index,
68+ value. unbind ( ) ,
69+ gc. reborrow ( ) ,
70+ ) ;
71+ }
8172 }
8273 }
8374
@@ -124,9 +115,10 @@ impl<'a> PromiseGroup<'a> {
124115 capability. reject ( agent, value. unbind ( ) , gc) ;
125116 }
126117
127- pub ( crate ) fn on_promise_all_settled_fulfilled (
118+ pub ( crate ) fn on_promise_all_settled (
128119 self ,
129120 agent : & mut Agent ,
121+ reaction_type : PromiseReactionType ,
130122 index : u32 ,
131123 value : Value < ' a > ,
132124 gc : GcScope < ' a , ' _ > ,
@@ -136,78 +128,47 @@ impl<'a> PromiseGroup<'a> {
136128
137129 let result_array = promise_all. get_result_array ( agent, gc. nogc ( ) ) ;
138130
139- // Let obj be OrdinaryObjectCreate(%Object.prototype%).
140- // 10. Perform ! CreateDataPropertyOrThrow(obj, "status", "fulfilled").
141- // 11. Perform ! CreateDataPropertyOrThrow(obj, "value", x).
142- let obj = OrdinaryObject :: create_object (
143- agent,
144- Some (
145- agent
146- . current_realm_record ( )
147- . intrinsics ( )
148- . object_prototype ( )
149- . into ( ) ,
150- ) ,
151- & [
152- ObjectEntry :: new_data_entry (
153- BUILTIN_STRING_MEMORY . status . into ( ) ,
154- BUILTIN_STRING_MEMORY . fulfilled . into ( ) ,
131+ let obj = match reaction_type {
132+ PromiseReactionType :: Fulfill => OrdinaryObject :: create_object (
133+ agent,
134+ Some (
135+ agent
136+ . current_realm_record ( )
137+ . intrinsics ( )
138+ . object_prototype ( )
139+ . into ( ) ,
155140 ) ,
156- ObjectEntry :: new_data_entry ( BUILTIN_STRING_MEMORY . value . into ( ) , value. unbind ( ) ) ,
157- ] ,
158- )
159- . bind ( gc. nogc ( ) ) ;
160-
161- let elements = result_array. as_mut_slice ( agent) ;
162- elements[ index as usize ] = Some ( obj. unbind ( ) . into_value ( ) ) ;
163-
164- let data = promise_all. get_mut ( agent) ;
165-
166- // 13. Set remainingElementsCount.[[Value]] to remainingElementsCount.[[Value]] - 1.
167- data. remaining_elements_count = data. remaining_elements_count . saturating_sub ( 1 ) ;
168-
169- // 14. If remainingElementsCount.[[Value]] = 0, then
170- if data. remaining_elements_count == 0 {
171- // a. Let valuesArray be CreateArrayFromList(values).
172- // b. Return ? Call(promiseCapability.[[Resolve]], undefined, « valuesArray »).
173- let capability = PromiseCapability :: from_promise ( data. promise , true ) ;
174- capability. resolve ( agent, result_array. into_value ( ) . unbind ( ) , gc) ;
175- }
176- }
177-
178- pub ( crate ) fn on_promise_all_settled_rejected (
179- self ,
180- agent : & mut Agent ,
181- index : u32 ,
182- value : Value < ' a > ,
183- gc : GcScope < ' a , ' _ > ,
184- ) {
185- let promise_all = self . bind ( gc. nogc ( ) ) ;
186- let value = value. bind ( gc. nogc ( ) ) ;
187-
188- let result_array = promise_all. get_result_array ( agent, gc. nogc ( ) ) ;
189-
190- // Let obj be OrdinaryObjectCreate(%Object.prototype%).
191- // 10. Perform ! CreateDataPropertyOrThrow(obj, "status", "rejected").
192- // 11. Perform ! CreateDataPropertyOrThrow(obj, "reason", x).
193- let obj = OrdinaryObject :: create_object (
194- agent,
195- Some (
196- agent
197- . current_realm_record ( )
198- . intrinsics ( )
199- . object_prototype ( )
200- . into ( ) ,
201- ) ,
202- & [
203- ObjectEntry :: new_data_entry (
204- BUILTIN_STRING_MEMORY . status . into ( ) ,
205- BUILTIN_STRING_MEMORY . rejected . into ( ) ,
141+ & [
142+ ObjectEntry :: new_data_entry (
143+ BUILTIN_STRING_MEMORY . status . into ( ) ,
144+ BUILTIN_STRING_MEMORY . fulfilled . into ( ) ,
145+ ) ,
146+ ObjectEntry :: new_data_entry ( BUILTIN_STRING_MEMORY . value . into ( ) , value. unbind ( ) ) ,
147+ ] ,
148+ )
149+ . bind ( gc. nogc ( ) ) ,
150+ PromiseReactionType :: Reject => OrdinaryObject :: create_object (
151+ agent,
152+ Some (
153+ agent
154+ . current_realm_record ( )
155+ . intrinsics ( )
156+ . object_prototype ( )
157+ . into ( ) ,
206158 ) ,
207- ObjectEntry :: new_data_entry ( BUILTIN_STRING_MEMORY . reason . into ( ) , value. unbind ( ) ) ,
208- ] ,
209- )
210- . bind ( gc. nogc ( ) ) ;
159+ & [
160+ ObjectEntry :: new_data_entry (
161+ BUILTIN_STRING_MEMORY . status . into ( ) ,
162+ BUILTIN_STRING_MEMORY . rejected . into ( ) ,
163+ ) ,
164+ ObjectEntry :: new_data_entry (
165+ BUILTIN_STRING_MEMORY . reason . into ( ) ,
166+ value. unbind ( ) ,
167+ ) ,
168+ ] ,
169+ )
170+ . bind ( gc. nogc ( ) ) ,
171+ } ;
211172
212173 let elements = result_array. as_mut_slice ( agent) ;
213174 elements[ index as usize ] = Some ( obj. unbind ( ) . into_value ( ) ) ;
0 commit comments