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
e.gavrin
a61d31e9bf
fix style error: Variable xxx hides enumerator with same name
2014-07-16 23:20:27 +04:00
e.gavrin
73bf0f9be1
remove unused gen_bytecode and save_op_data
2014-07-16 23:03:58 +04:00
Ilmir Usmanov
270ee301b4
Start dumping assignment expressions to bytecode; revise bytecode instructions
2014-07-16 22:23:55 +04:00
Ruben Ayrapetyan
76e579d4e1
Remove inclusion of std headers to our headers; move fatal from src/error.h to src/libjsparser/parser.c.
2014-07-10 19:46:24 +04:00
Ilmir Usmanov
f46d5b440c
Merge line-by-line parser
2014-07-09 16:17:42 +04:00
e.gavrin
f18a5f5e31
opcodes + refined int structure
2014-07-08 13:18:00 +04:00
e.gavrin
21db33fa97
added opcodes
2014-07-07 23:18:49 +04:00