@@ -2255,7 +2255,6 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
22552255 }
22562256 case VM_OC_ASYNC_EXIT :
22572257 {
2258- JERRY_ASSERT (frame_ctx_p -> context_depth == PARSER_TRY_CONTEXT_STACK_ALLOCATION );
22592258 JERRY_ASSERT (VM_GET_REGISTERS (frame_ctx_p ) + register_end + frame_ctx_p -> context_depth == stack_top_p );
22602259
22612260 result = frame_ctx_p -> block_result ;
@@ -2271,22 +2270,26 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
22712270 JERRY_CONTEXT (current_new_target ) = old_new_target_p ;
22722271 }
22732272
2274- left_value = stack_top_p [-2 ] ;
2273+ vm_stack_context_type_t context_type = VM_GET_CONTEXT_TYPE ( stack_top_p [-1 ]) ;
22752274
2276- if (VM_GET_CONTEXT_TYPE ( stack_top_p [ -1 ]) == VM_CONTEXT_FINALLY_THROW )
2275+ if (context_type == VM_CONTEXT_TRY )
22772276 {
2278- ecma_reject_promise (result , left_value );
2277+ JERRY_ASSERT (frame_ctx_p -> context_depth == PARSER_TRY_CONTEXT_STACK_ALLOCATION );
2278+ left_value = ECMA_VALUE_UNDEFINED ;
22792279 }
22802280 else
22812281 {
2282- JERRY_ASSERT (VM_GET_CONTEXT_TYPE (stack_top_p [-1 ]) == VM_CONTEXT_TRY
2283- || VM_GET_CONTEXT_TYPE (stack_top_p [-1 ]) == VM_CONTEXT_FINALLY_RETURN );
2284-
2285- if (VM_GET_CONTEXT_TYPE (stack_top_p [-1 ]) == VM_CONTEXT_TRY )
2286- {
2287- left_value = ECMA_VALUE_UNDEFINED ;
2288- }
2282+ JERRY_ASSERT (frame_ctx_p -> context_depth == PARSER_FINALLY_CONTEXT_STACK_ALLOCATION );
2283+ left_value = stack_top_p [-2 ];
2284+ }
22892285
2286+ if (context_type == VM_CONTEXT_FINALLY_THROW )
2287+ {
2288+ ecma_reject_promise (result , left_value );
2289+ }
2290+ else
2291+ {
2292+ JERRY_ASSERT (context_type == VM_CONTEXT_TRY || context_type == VM_CONTEXT_FINALLY_RETURN );
22902293 ecma_fulfill_promise (result , left_value );
22912294 }
22922295
@@ -3835,10 +3838,11 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
38353838 JERRY_ASSERT (lex_env_p -> u2 .outer_reference_cp != JMEM_CP_NULL );
38363839 frame_ctx_p -> lex_env_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t , lex_env_p -> u2 .outer_reference_cp );
38373840 ecma_deref_object (lex_env_p );
3838-
3839- stack_top_p [-1 ] &= (ecma_value_t ) ~VM_CONTEXT_HAS_LEX_ENV ;
38403841 }
38413842
3843+ VM_PLUS_EQUAL_U16 (frame_ctx_p -> context_depth , PARSER_FINALLY_CONTEXT_EXTRA_STACK_ALLOCATION );
3844+ stack_top_p += PARSER_FINALLY_CONTEXT_EXTRA_STACK_ALLOCATION ;
3845+
38423846 stack_top_p [-1 ] = VM_CREATE_CONTEXT (VM_CONTEXT_FINALLY_JUMP , branch_offset );
38433847 stack_top_p [-2 ] = (ecma_value_t ) branch_offset ;
38443848 continue ;
@@ -3869,8 +3873,8 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
38693873#endif /* ENABLED (JERRY_ESNEXT) */
38703874
38713875 VM_MINUS_EQUAL_U16 (frame_ctx_p -> context_depth ,
3872- PARSER_TRY_CONTEXT_STACK_ALLOCATION );
3873- stack_top_p -= PARSER_TRY_CONTEXT_STACK_ALLOCATION ;
3876+ PARSER_FINALLY_CONTEXT_STACK_ALLOCATION );
3877+ stack_top_p -= PARSER_FINALLY_CONTEXT_STACK_ALLOCATION ;
38743878
38753879 if (context_type == VM_CONTEXT_FINALLY_RETURN )
38763880 {
0 commit comments