@@ -2314,14 +2314,12 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
23142314 object_p = ecma_get_object_from_value (result );
23152315
23162316 with_env_p = ecma_create_object_lex_env (frame_ctx_p -> lex_env_p , object_p );
2317-
23182317 ecma_deref_object (object_p );
23192318
23202319 VM_PLUS_EQUAL_U16 (frame_ctx_p -> context_depth , PARSER_WITH_CONTEXT_STACK_ALLOCATION );
23212320 stack_top_p += PARSER_WITH_CONTEXT_STACK_ALLOCATION ;
23222321
23232322 stack_top_p [-1 ] = VM_CREATE_CONTEXT (VM_CONTEXT_WITH , branch_offset );
2324- stack_top_p [-2 ] = ecma_make_object_value (frame_ctx_p -> lex_env_p );
23252323
23262324 frame_ctx_p -> lex_env_p = with_env_p ;
23272325 continue ;
@@ -2468,8 +2466,9 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
24682466
24692467 if (VM_GET_CONTEXT_TYPE (stack_top_p [-1 ]) == VM_CONTEXT_CATCH )
24702468 {
2471- ecma_deref_object (frame_ctx_p -> lex_env_p );
2472- frame_ctx_p -> lex_env_p = ecma_get_object_from_value (stack_top_p [-2 ]);
2469+ ecma_object_t * lex_env_p = frame_ctx_p -> lex_env_p ;
2470+ frame_ctx_p -> lex_env_p = ecma_get_lex_env_outer_reference (lex_env_p );
2471+ ecma_deref_object (lex_env_p );
24732472 }
24742473
24752474 stack_top_p [-1 ] = (ecma_value_t ) VM_CREATE_CONTEXT (VM_CONTEXT_FINALLY_JUMP , branch_offset );
@@ -2903,7 +2902,6 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
29032902 ecma_string_t * catch_name_p = ecma_get_string_from_value (literal_start_p [literal_index ]);
29042903 ecma_op_create_mutable_binding (catch_env_p , catch_name_p , false);
29052904
2906- stack_top_p [-2 - 1 ] = ecma_make_object_value (frame_ctx_p -> lex_env_p );
29072905 frame_ctx_p -> lex_env_p = catch_env_p ;
29082906 }
29092907 else
0 commit comments