Ruben Ayrapetyan
ba348831ca
Reverting changes related to on-stack GC-root introduction (except of passing ecma_value_t by const reference).
...
This reverts commits:
31e1405f39d72f8b885e92256b0dc29ecab1a99,
7cb43840b59c539d9b043990ed658ae15a9defc3,
1ab57a4493689806035a9853b0030cc6fea65590,
c24b511ca60587e0db12d46a7e7567c86c3649bc,
b2caf3e8b31b4b6b16499108ee3aabdcb94f0717,
44f9c307fb6204bfd2181b19a9d94cabddf04de9.
2015-02-09 17:43:29 +03:00
Ruben Ayrapetyan
fb6e205d0d
Moving to replacement of on-stack ecma_object_t* with managed ecma_object_ptr_t.
2015-02-04 18:14:04 +03:00
Ruben Ayrapetyan
f37a5085f6
Converting ecma_completion_value_t to class derived from ecma_value_t with additional field with for completion type and related operations.
...
Completion value are now returned through ecma_completion_value_t &ret_value argument.
2015-01-30 23:16:45 +03:00
Ruben Ayrapetyan
00afd4e0e2
Converting ecma_value_t to class that is used for on-stack storage of ecma-values.
...
Original ecma_value_t is renamed to ecma_value_packed_t and is used for on-heap storage.
Copy and move constructors, move assignment operator of ecma_value_t are not created.
New ecma-value return convention is introduced: ecma-values are now returned through ecma_value_t &ret_val argument.
2015-01-30 22:53:06 +03:00
Ruben Ayrapetyan
005b5370fc
Switching to g++ and corresponding changes according to C++ requirements.
2015-01-16 17:27:02 +03:00
Ruben Ayrapetyan
557df54f9d
Registering temporary variables arrays in ecma-stack frames, starting mark traverse from them during GC.
2015-01-15 18:45:37 +03:00
Ruben Ayrapetyan
917ebe4a83
Creating ecma-stack frames in run_int_from_pos.
2015-01-12 20:52:04 +03:00
Ilmir Usmanov
dc8ab27900
Split parser into parser itself, opcodes dumper and syntax errors checker.
...
Add internal hash map of literal indexes:
In this hash map key is pair of block number and literal's unique identifier in the block, and the value is a literal index that unique in the whole program.
Block is a continues array of opcodes. So, bytecode is splitted into blocks.
Each block has its own uid counter. To get literal index the interpreter looks up it in the hash map.
Thus, now JS program is able to have more than 255 identifiers/string literals.
The first 128 (0-127) uids are reserved for block's uid counter, the other 128 (128-255) are reserved for tmp variables.
2014-12-10 18:31:59 +03:00
Ruben Ayrapetyan
2c86712e21
Introducing number chunk for storage of temporary (stack-only) number operands.
2014-12-09 18:24:16 +03:00
Ilmir Usmanov
a55517f57a
Remove 'logical_or' and 'logical_and' opcodes
2014-10-27 14:55:02 +04:00
Ilmir Usmanov
032031a861
Add unary_plus and unary_minus opcodes
2014-10-15 15:20:49 +04:00
Ilmir Usmanov
18618c6501
Freaking FINALLY: postparser
2014-10-12 20:34:23 +04:00
Ilmir Usmanov
0a4616b65f
Remove call_0, call_1, func_decl_0, func_decl_1, func_decl_2 opcodes.
2014-09-24 16:33:28 +04:00
Ilmir Usmanov
d4cd8be349
Fix asserts in opfunc_*jmp_down functions.
2014-09-16 22:36:26 +04:00
Ilmir Usmanov
e77bd4f4e5
Add try-catch-finally support: parse and generate opcodes for this construct
...
Fix varg generation: generate *_n opcodes with parameters in following meta opcodes
Add stack internal structure: dimanically allocated stack.
Use dynamically allocated memory in parser: every local and global variables are stored in dinamically allocated stacks.
Use dynamically allocated memory in serializer: opcodes are also stored in stack.
Change is_true_jmp and is_false_jmp opcodes to relative.
Change *jmp* opcodes to be able to store opcode_counter_t instead of idx_t.
2014-09-16 21:32:59 +04:00
Ruben Ayrapetyan
cd41b236d9
Statistics of memory usage during interpretation.
2014-09-16 21:19:07 +04:00
Ruben Ayrapetyan
b529fc2da9
Processing unhandled exception by exiting engine with ERR_UNHANDLED_EXCEPTION; determining if function's code is strict by checking for appearance of 'meta' opcode of OPCODE_META_TYPE_STRICT_CODE type at the beginning of the function's code.
2014-08-28 20:21:47 +04:00
Ruben Ayrapetyan
ddb2e6e9d5
Introducing and implementing 'throw' and 'try' opcode handlers.
2014-08-28 18:57:34 +04:00
Ruben Ayrapetyan
647f6b3c67
Renaming OPCODE_META_TYPE_OPCODE_COUNTER -> OPCODE_META_TYPE_FUNCTION_END.
2014-08-28 16:49:03 +04:00
Ruben Ayrapetyan
9d45f68370
Introducing 'opcode counter' type for 'meta' opcode; replacing 'jmp_down' opcodes that are used as pointers only with 'meta' opcodes of the introduced type.
2014-08-28 15:17:49 +04:00
Ruben Ayrapetyan
5d2b535cec
Implementing 'with' opcode; replacing 'end_with' opcode with 'meta' opcode of corresponding type.
2014-08-27 21:38:53 +04:00
Ruben Ayrapetyan
f08c242156
Implementing 'obj_decl' opcode; replacing 'prop', 'prop_get_decl', 'prop_set_decl' with 'meta' opcodes of corresponding types.
2014-08-27 20:43:31 +04:00
Ruben Ayrapetyan
d286a93e2c
Replacing 'varg' opcode with 'meta' opcode with corresponding type.
2014-08-27 19:35:56 +04:00
Ruben Ayrapetyan
76121926d1
Splitting 'delete' opcode to 'delete_var' and 'delete_prop'. Implementing corresponding opcode handlers.
2014-08-27 17:12:59 +04:00
Ruben Ayrapetyan
6f58335f23
Replacing 'varg_list' (3 args) with 'varg' (1 arg).
2014-08-26 20:50:41 +04:00
Ruben Ayrapetyan
9573b7234d
Implementing 'func_decl_n' and 'func_call_n' opcodes' handlers.
2014-08-26 17:30:23 +04:00
Ruben Ayrapetyan
02f31fbcfb
Adding 'func_expr_n' opcode; replacing arg1 and arg2 of 'func_decl_n' opcode with arg_list.
2014-08-26 15:58:57 +04:00
Ruben Ayrapetyan
7a80b7f4f1
Renaming 'construct_decl' opcode to 'construct_n'.
2014-08-26 12:50:23 +04:00
e.gavrin
4ffbdd2c3f
__opcode -> opcode_t
2014-08-23 02:01:56 +04:00
e.gavrin
a99907670b
OPCODE define replaced with opcode_t. T_IDX define replaced with idx_t.
2014-08-23 00:53:41 +04:00
e.gavrin
0eece0be5a
Remove not needed opcode-support.[c,h]
2014-08-23 00:24:49 +04:00
e.gavrin
d80cb10361
Refine opcodes OP_LIST macro. Removed ambiguous lists of opcodes in several files. The only list is in opcodes.h
2014-08-23 00:16:56 +04:00
e.gavrin
d4a9d9430e
Refactoring of libcoreint part1
2014-08-23 00:16:56 +04:00
e.gavrin
c6a41c167e
Add native_call opcode.
2014-08-21 17:30:52 +04:00
e.gavrin
1261820838
Add meta opcode.
2014-08-21 16:07:05 +04:00
e.gavrin
5b2b04f5f9
Various opcode's refinements: obj[0,1, 2, n]->obj_decl, array[0, 1, 2, n]->array_decl, func_expr[0, 1, n]->removed, varg[1_end, 2_end, 3_end, 3]->varg_list.
2014-08-21 15:49:10 +04:00
Ruben Ayrapetyan
284e7fc91b
Renaming prop_access opcode to prop_getter; introducing prop_setter opcode; implementing property getter/setter opcode handlers.
2014-08-20 16:34:03 +04:00
e.gavrin
b3b1ba0206
Formatting fixes in libcoreint
2014-08-12 01:13:32 +04:00
Ilmir Usmanov
5373b60955
Reformat
2014-08-11 23:17:45 +04:00
Ilmir Usmanov
1f3b5a4c29
Merge
2014-07-24 19:50:37 +04:00
Ilmir Usmanov
1790739b93
Add 'reg_var_decl' opcode
2014-07-24 15:45:55 +04:00
Ilmir Usmanov
764efa41b8
Fix parsing of for-loops.
2014-07-23 20:47:31 +04:00
Ruben Ayrapetyan
bc0c7824c2
Renaming ecma_* identifiers from 'camelCase' to 'underscore_naming'.
2014-07-23 12:54:56 +04:00
Ilmir Usmanov
18fcf4bd77
Merge with 'geppetto': Generate bytecode while parsing
2014-07-22 21:18:19 +04:00
Ilmir Usmanov
efb7009cfb
Generate bytecode while parsing
2014-07-22 20:49:51 +04:00
Ruben Ayrapetyan
98a0c0f933
Introducing type argument in 'assignment' opcode handler.
2014-07-21 15:57:15 +04:00
Ruben Ayrapetyan
0209acad65
Introducing exitval opcode for end of script and assertions in unit tests. The opcode finishes interpretation with status code 0 (success) or 1 (failure).
2014-07-17 21:32:29 +04:00
Ruben Ayrapetyan
dd5c9dfb39
Changing return type of opcode handlers to ecma_CompletionValue_t.
2014-07-17 20:53:48 +04:00
e.gavrin
0c9f81dbf9
add var_decl
2014-07-17 15:19:55 +04:00
e.gavrin
9a0b54313d
remove opcodes
2014-07-17 13:08:43 +04:00