Commit Graph

167 Commits

Author SHA1 Message Date
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 dafbaa742e Adding configuration option for ECMA exception support. 2014-09-08 19:09:34 +04:00
Ruben Ayrapetyan c5dd81cf76 Fixing memory leak in opfunc_throw. 2014-09-05 20:28:02 +04:00
Ruben Ayrapetyan b9fd80ce36 Fixing object declaration and function expression opcode handlers; adding unit test that declares object and operates on the object's properties. 2014-09-04 21:02:29 +04:00
Ruben Ayrapetyan 50371ddf20 Implementing Array construction routine; adding unit test on array operations. 2014-09-03 17:30:03 +04:00
Ruben Ayrapetyan 0a6e1a83f8 Renaming ecma_compare_ecma_string_to_ecma_string to ecma_compare_ecma_strings. 2014-09-02 20:16:41 +04:00
Ruben Ayrapetyan c581f10b94 Changing return value of ecma_op_abstract_equality_compare to ecma_completion_value_t. 2014-09-02 19:07:43 +04:00
Ruben Ayrapetyan 8e14f32806 Introducing getters/setters for ecma_object_t structure. 2014-08-29 15:53:07 +04:00
Ruben Ayrapetyan f7968e617d Adding several completion value construction and comparison helpers. 2014-08-29 12:51:06 +04:00
Ruben Ayrapetyan 227c09fb3e Adding target counter and depth level to 'break' and 'continue' completion values. 2014-08-28 22:56:29 +04:00
Ruben Ayrapetyan 16cbe0c63b Removing try_get_string_by_idx and get_number_by_idx. 2014-08-28 21:19:44 +04:00
Ruben Ayrapetyan b36f997ef2 Determining if global code is strict code by checking if first opcode is 'meta' opcode of OPCODE_META_TYPE_STRICT_CODE type; setting 'configurableBindings' in 'var_decl' opcode to true if current code is eval code. 2014-08-28 20:29:42 +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 2feb159fd8 Implementing 'array_decl' opcode handler. 2014-08-27 18:28:26 +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 05185bb2e9 Implementing 'native_call' opcode handler. 2014-08-27 15:38:31 +04:00
Ruben Ayrapetyan bc2f827447 Implementing 'unreachable' handler for 'meta' opcode. 2014-08-27 13:45:27 +04:00
Ruben Ayrapetyan f8907573dd Implementing 'func_expr_n' opcode handler. 2014-08-26 22:15:40 +04:00
Ruben Ayrapetyan 6cfcedb053 Evaluation of expressions passed in arguments lists just before corresponding 'varg' opcodes. 2014-08-26 21:39:54 +04:00
Ruben Ayrapetyan 6f58335f23 Replacing 'varg_list' (3 args) with 'varg' (1 arg). 2014-08-26 20:50:41 +04:00
Ruben Ayrapetyan 32ba30ddef Extracting interpreter loop from run_int_from_pos. 2014-08-26 20:20:33 +04:00
Ruben Ayrapetyan bf5bda11ed Implementing 'construct_n' opcode handler. 2014-08-26 17:47:14 +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
Ruben Ayrapetyan dc3f529307 Implementing 'typeof' opcode handler. 2014-08-26 12:43:13 +04:00
Ruben Ayrapetyan 704c26ff80 Setting ThisBinding of the Global Environment to the Global Object. 2014-08-26 12:43:10 +04:00
Ruben Ayrapetyan 9a203c580e Implementing 'this' opcode handler. 2014-08-26 12:17:29 +04:00
Ruben Ayrapetyan 38fdcba69c Implementing opfunc_addition with a string-operand. 2014-08-26 11:26:47 +04:00
Ruben Ayrapetyan 57965bf160 Moving {get,set}_variable_value and do_strict_eval_arguments_check from opcodes-ecma-support.h to opcodes-helpers-variables.c. loop_arithmetics_1kk.js: 3.0848 -> 2.9584. 2014-08-25 18:54:46 +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
Ruben Ayrapetyan a341fe044b call_0, call_1 opcode handlers: wrapping function calls using ECMA_FUNCTION_CALL helper 2014-08-22 20:50:40 +04:00
Ruben Ayrapetyan 50a1532801 Implementing opfunc_instanceof using ecma_op_has_instance for [[HasInstance]] call 2014-08-22 15:39:23 +04:00
Ruben Ayrapetyan 7a20454047 Using ToString for property name conversion in opfunc_in 2014-08-22 15:26:05 +04:00
Ruben Ayrapetyan 9cc27115fa Using ToString for property name conversion in opfunc_getter, opfunc_setter 2014-08-22 15:07:21 +04:00
e.gavrin 7bda6e9d01 Add opcode handlers for logical_[not, or, and]] 2014-08-22 01:27:37 +04:00
e.gavrin 8e4ff93436 Add instanceof opcode handler. Untested. 2014-08-22 00:29:42 +04:00
e.gavrin 3dc1f8df77 Add in opcode handler. Untested. 2014-08-21 23:59:58 +04:00
e.gavrin b822c704e5 Add b_not opcode handler. Fixes in shift opcodes and in test 2014-08-21 22:52:34 +04:00