Creating ecma-stack frames in run_int_from_pos.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2014 Samsung Electronics Co., Ltd.
|
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -20,6 +20,7 @@
|
|||||||
#include "ecma-helpers.h"
|
#include "ecma-helpers.h"
|
||||||
#include "ecma-lex-env.h"
|
#include "ecma-lex-env.h"
|
||||||
#include "ecma-operations.h"
|
#include "ecma-operations.h"
|
||||||
|
#include "ecma-stack.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
#include "interpreter.h"
|
#include "interpreter.h"
|
||||||
#include "jerry-libc.h"
|
#include "jerry-libc.h"
|
||||||
@@ -461,6 +462,9 @@ run_int_from_pos (opcode_counter_t start_pos,
|
|||||||
__memset (regs, 0, regs_num * sizeof (ecma_value_t));
|
__memset (regs, 0, regs_num * sizeof (ecma_value_t));
|
||||||
JERRY_ASSERT (ecma_is_value_empty (regs[0]));
|
JERRY_ASSERT (ecma_is_value_empty (regs[0]));
|
||||||
|
|
||||||
|
ecma_stack_frame_t frame;
|
||||||
|
ecma_stack_add_frame (&frame);
|
||||||
|
|
||||||
int_data_t int_data;
|
int_data_t int_data;
|
||||||
int_data.pos = (opcode_counter_t) (start_pos + 1);
|
int_data.pos = (opcode_counter_t) (start_pos + 1);
|
||||||
int_data.this_binding = this_binding_value;
|
int_data.this_binding = this_binding_value;
|
||||||
@@ -471,6 +475,7 @@ run_int_from_pos (opcode_counter_t start_pos,
|
|||||||
int_data.max_reg_num = max_reg_num;
|
int_data.max_reg_num = max_reg_num;
|
||||||
int_data.regs_p = regs;
|
int_data.regs_p = regs;
|
||||||
int_data.tmp_num_p = ecma_alloc_number ();
|
int_data.tmp_num_p = ecma_alloc_number ();
|
||||||
|
int_data.stack_frame_p = &frame;
|
||||||
|
|
||||||
#ifdef MEM_STATS
|
#ifdef MEM_STATS
|
||||||
interp_mem_stats_context_enter (&int_data, start_pos);
|
interp_mem_stats_context_enter (&int_data, start_pos);
|
||||||
@@ -483,6 +488,8 @@ run_int_from_pos (opcode_counter_t start_pos,
|
|||||||
|| ecma_is_completion_value_return (completion)
|
|| ecma_is_completion_value_return (completion)
|
||||||
|| ecma_is_completion_value_exit (completion));
|
|| ecma_is_completion_value_exit (completion));
|
||||||
|
|
||||||
|
ecma_stack_free_frame (&frame);
|
||||||
|
|
||||||
ecma_dealloc_number (int_data.tmp_num_p);
|
ecma_dealloc_number (int_data.tmp_num_p);
|
||||||
|
|
||||||
for (uint32_t reg_index = 0;
|
for (uint32_t reg_index = 0;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2014 Samsung Electronics Co., Ltd.
|
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
#define OPCODES_H
|
#define OPCODES_H
|
||||||
|
|
||||||
#include "ecma-globals.h"
|
#include "ecma-globals.h"
|
||||||
|
#include "ecma-stack.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
/* Maximum opcodes number in bytecode. */
|
/* Maximum opcodes number in bytecode. */
|
||||||
@@ -83,6 +84,7 @@ typedef struct
|
|||||||
idx_t max_reg_num; /**< maximum idx used for register identification */
|
idx_t max_reg_num; /**< maximum idx used for register identification */
|
||||||
ecma_value_t *regs_p; /**< register variables */
|
ecma_value_t *regs_p; /**< register variables */
|
||||||
ecma_number_t* tmp_num_p; /**< an allocated number (to reduce temporary allocations) */
|
ecma_number_t* tmp_num_p; /**< an allocated number (to reduce temporary allocations) */
|
||||||
|
ecma_stack_frame_t *stack_frame_p; /**< ecma-stack frame associated with the context */
|
||||||
|
|
||||||
#ifdef MEM_STATS
|
#ifdef MEM_STATS
|
||||||
size_t context_peak_allocated_heap_bytes;
|
size_t context_peak_allocated_heap_bytes;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright 2014 Samsung Electronics Co., Ltd.
|
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
#include "ecma-gc.h"
|
#include "ecma-gc.h"
|
||||||
#include "ecma-lcache.h"
|
#include "ecma-lcache.h"
|
||||||
#include "ecma-operations.h"
|
#include "ecma-operations.h"
|
||||||
|
#include "ecma-stack.h"
|
||||||
#include "mem-allocator.h"
|
#include "mem-allocator.h"
|
||||||
|
|
||||||
/** \addtogroup ecma ECMA
|
/** \addtogroup ecma ECMA
|
||||||
@@ -36,6 +37,7 @@ ecma_init (void)
|
|||||||
ecma_strings_init ();
|
ecma_strings_init ();
|
||||||
ecma_init_builtins ();
|
ecma_init_builtins ();
|
||||||
ecma_lcache_init ();
|
ecma_lcache_init ();
|
||||||
|
ecma_stack_init ();
|
||||||
|
|
||||||
mem_register_a_try_give_memory_back_callback (ecma_try_to_give_back_some_memory);
|
mem_register_a_try_give_memory_back_callback (ecma_try_to_give_back_some_memory);
|
||||||
} /* ecma_init */
|
} /* ecma_init */
|
||||||
@@ -48,6 +50,7 @@ ecma_finalize (void)
|
|||||||
{
|
{
|
||||||
mem_unregister_a_try_give_memory_back_callback (ecma_try_to_give_back_some_memory);
|
mem_unregister_a_try_give_memory_back_callback (ecma_try_to_give_back_some_memory);
|
||||||
|
|
||||||
|
ecma_stack_finalize ();
|
||||||
ecma_finalize_builtins ();
|
ecma_finalize_builtins ();
|
||||||
ecma_lcache_invalidate_all ();
|
ecma_lcache_invalidate_all ();
|
||||||
ecma_gc_run (ECMA_GC_GEN_COUNT - 1);
|
ecma_gc_run (ECMA_GC_GEN_COUNT - 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user