Created
January 26, 2016 13:44
-
-
Save ktorpi/9b67a1a89ed11aae0cf1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ../diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.cpp b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.cpp | |
| index 5c0c06b..ac1dc37 100644 | |
| --- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.cpp | |
| +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.cpp | |
| @@ -125,7 +125,7 @@ ecma_builtin_regexp_prototype_compile (ecma_value_t this_arg, /**< this argument | |
| ecma_property_t *bc_prop_p = ecma_get_internal_property (this_obj_p, | |
| ECMA_INTERNAL_PROPERTY_REGEXP_BYTECODE); | |
| - /* FIXME: "We currently have to re-compile the bytecode, because we can't copy it without knowing its length." */ | |
| + /* FIXME: "We currently have to re-compile the bytecode, because we can't copy it without knowing its length."*/ | |
| re_compiled_code_t *new_bc_p = NULL; | |
| ecma_completion_value_t bc_comp = re_compile_bytecode (&new_bc_p, pattern_string_p, flags); | |
| /* Should always succeed, since we're compiling from a source that has been compiled previously. */ | |
| diff --git a/jerry-core/parser/js/byte-code.h b/jerry-core/parser/js/byte-code.h | |
| index 2f0397e..7907e4f 100644 | |
| --- a/jerry-core/parser/js/byte-code.h | |
| +++ b/jerry-core/parser/js/byte-code.h | |
| @@ -62,33 +62,50 @@ | |
| ((cbc_flags[op1] & CBC_ARG_TYPES) == (cbc_flags[op2] & CBC_ARG_TYPES)) | |
| #define CBC_UNARY_OPERATION(name, group) \ | |
| - CBC_OPCODE (name, CBC_NO_FLAG, 0, (VM_OC_ ## group) | VM_OC_GET_STACK | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (name ## _LITERAL, CBC_HAS_LITERAL_ARG, 1, (VM_OC_ ## group) | VM_OC_GET_LITERAL | VM_OC_PUT_STACK) | |
| + CBC_OPCODE (name, CBC_NO_FLAG, 0, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_STACK | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (name ## _LITERAL, CBC_HAS_LITERAL_ARG, 1, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_LITERAL | VM_OC_PUT_STACK) | |
| #define CBC_BINARY_OPERATION(name, group) \ | |
| - CBC_OPCODE (name, CBC_NO_FLAG, -1, (VM_OC_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (name ## _RIGHT_LITERAL, CBC_HAS_LITERAL_ARG, 0, (VM_OC_ ## group) | VM_OC_GET_STACK_LITERAL | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (name ## _TWO_LITERALS, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 1, (VM_OC_ ## group) | VM_OC_GET_LITERAL_LITERAL | VM_OC_PUT_STACK) | |
| + CBC_OPCODE (name, CBC_NO_FLAG, -1, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (name ## _RIGHT_LITERAL, CBC_HAS_LITERAL_ARG, 0, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_STACK_LITERAL | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (name ## _TWO_LITERALS, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 1, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_LITERAL_LITERAL | VM_OC_PUT_STACK) | |
| #define CBC_UNARY_LVALUE_OPERATION(name, group) \ | |
| - CBC_OPCODE (name, CBC_NO_FLAG, -2, (VM_OC_PROP_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE) \ | |
| - CBC_OPCODE (name ## _PUSH_RESULT, CBC_NO_FLAG, -1, (VM_OC_PROP_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (name ## _BLOCK, CBC_NO_FLAG, -2, (VM_OC_PROP_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (name ## _IDENT, CBC_HAS_LITERAL_ARG, 0, (VM_OC_ ## group) | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT) \ | |
| - CBC_OPCODE (name ## _IDENT_PUSH_RESULT, CBC_HAS_LITERAL_ARG, 1, (VM_OC_ ## group) | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (name ## _IDENT_BLOCK, CBC_HAS_LITERAL_ARG, 0, (VM_OC_ ## group) | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT | VM_OC_PUT_BLOCK) | |
| + CBC_OPCODE (name, CBC_NO_FLAG, -2, \ | |
| + (VM_OC_PROP_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE) \ | |
| + CBC_OPCODE (name ## _PUSH_RESULT, CBC_NO_FLAG, -1, \ | |
| + (VM_OC_PROP_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (name ## _BLOCK, CBC_NO_FLAG, -2, \ | |
| + (VM_OC_PROP_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (name ## _IDENT, CBC_HAS_LITERAL_ARG, 0, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT) \ | |
| + CBC_OPCODE (name ## _IDENT_PUSH_RESULT, CBC_HAS_LITERAL_ARG, 1, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (name ## _IDENT_BLOCK, CBC_HAS_LITERAL_ARG, 0, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT | VM_OC_PUT_BLOCK) | |
| #define CBC_BINARY_LVALUE_OPERATION(name, group) \ | |
| - CBC_OPCODE (name, CBC_NO_FLAG, -4, (VM_OC_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE) \ | |
| - CBC_OPCODE (name ## _LITERAL, CBC_HAS_LITERAL_ARG, -3, (VM_OC_ ## group) | VM_OC_GET_STACK_LITERAL | VM_OC_PUT_REFERENCE) \ | |
| + CBC_OPCODE (name, CBC_NO_FLAG, -4, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE) \ | |
| + CBC_OPCODE (name ## _LITERAL, CBC_HAS_LITERAL_ARG, -3, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_STACK_LITERAL | VM_OC_PUT_REFERENCE) \ | |
| #define CBC_EXT_BINARY_LVALUE_OPERATION(name, group) \ | |
| - CBC_OPCODE (name ## _PUSH_RESULT, CBC_NO_FLAG, -3, (VM_OC_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (name ## _LITERAL_PUSH_RESULT, CBC_HAS_LITERAL_ARG, -2, (VM_OC_ ## group) | VM_OC_GET_STACK_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (name ## _PUSH_RESULT, CBC_NO_FLAG, -3, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (name ## _LITERAL_PUSH_RESULT, CBC_HAS_LITERAL_ARG, -2, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_STACK_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| #define CBC_EXT_BINARY_LVALUE_BLOCK_OPERATION(name, group) \ | |
| - CBC_OPCODE (name ## _BLOCK, CBC_NO_FLAG, -4, (VM_OC_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (name ## _LITERAL_BLOCK, CBC_HAS_LITERAL_ARG, -3, (VM_OC_ ## group) | VM_OC_GET_STACK_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (name ## _BLOCK, CBC_NO_FLAG, -4, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_STACK_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (name ## _LITERAL_BLOCK, CBC_HAS_LITERAL_ARG, -3, \ | |
| + (VM_OC_ ## group) | VM_OC_GET_STACK_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| #define CBC_UNARY_LVALUE_WITH_IDENT 3 | |
| @@ -145,14 +162,20 @@ | |
| */ | |
| #define CBC_FORWARD_BRANCH(name, stack, vm_oc) \ | |
| - CBC_OPCODE (name, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, (vm_oc)) \ | |
| - CBC_OPCODE (name ## _2, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, (vm_oc)) \ | |
| - CBC_OPCODE (name ## _3, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, (vm_oc)) | |
| + CBC_OPCODE (name, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, \ | |
| + (vm_oc)) \ | |
| + CBC_OPCODE (name ## _2, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, \ | |
| + (vm_oc)) \ | |
| + CBC_OPCODE (name ## _3, CBC_HAS_BRANCH_ARG | CBC_FORWARD_BRANCH_ARG, stack, \ | |
| + (vm_oc)) | |
| #define CBC_BACKWARD_BRANCH(name, stack, vm_oc) \ | |
| - CBC_OPCODE (name, CBC_HAS_BRANCH_ARG, stack, (vm_oc)) \ | |
| - CBC_OPCODE (name ## _2, CBC_HAS_BRANCH_ARG, stack, (vm_oc)) \ | |
| - CBC_OPCODE (name ## _3, CBC_HAS_BRANCH_ARG, stack, (vm_oc)) | |
| + CBC_OPCODE (name, CBC_HAS_BRANCH_ARG, stack, \ | |
| + (vm_oc)) \ | |
| + CBC_OPCODE (name ## _2, CBC_HAS_BRANCH_ARG, stack, \ | |
| + (vm_oc)) \ | |
| + CBC_OPCODE (name ## _3, CBC_HAS_BRANCH_ARG, stack, \ | |
| + (vm_oc)) | |
| #define CBC_BRANCH_OFFSET_LENGTH(opcode) \ | |
| ((opcode) & 0x3) | |
| @@ -177,58 +200,98 @@ | |
| */ | |
| #define CBC_OPCODE_LIST \ | |
| /* Branch opcodes first. Some other opcodes are mixed. */ \ | |
| - CBC_OPCODE (CBC_EXT_OPCODE, CBC_NO_FLAG, 0, VM_OC_NONE) \ | |
| + CBC_OPCODE (CBC_EXT_OPCODE, CBC_NO_FLAG, 0, \ | |
| + VM_OC_NONE) \ | |
| CBC_FORWARD_BRANCH (CBC_JUMP_FORWARD, 0, VM_OC_JUMP) \ | |
| - CBC_OPCODE (CBC_POP, CBC_NO_FLAG, -1, VM_OC_POP) \ | |
| + CBC_OPCODE (CBC_POP, CBC_NO_FLAG, -1, \ | |
| + VM_OC_POP) \ | |
| CBC_BACKWARD_BRANCH (CBC_JUMP_BACKWARD, 0, VM_OC_JUMP) \ | |
| - CBC_OPCODE (CBC_POP_BLOCK, CBC_NO_FLAG, -1, VM_OC_POP_BLOCK | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_POP_BLOCK, CBC_NO_FLAG, -1, \ | |
| + VM_OC_POP_BLOCK | VM_OC_PUT_BLOCK) \ | |
| CBC_FORWARD_BRANCH (CBC_BRANCH_IF_TRUE_FORWARD, -1, VM_OC_BRANCH_IF_TRUE | VM_OC_GET_STACK) \ | |
| - CBC_OPCODE (CBC_THROW, CBC_NO_FLAG, -1, VM_OC_THROW | VM_OC_GET_STACK) \ | |
| + CBC_OPCODE (CBC_THROW, CBC_NO_FLAG, -1, \ | |
| + VM_OC_THROW | VM_OC_GET_STACK) \ | |
| CBC_BACKWARD_BRANCH (CBC_BRANCH_IF_TRUE_BACKWARD, -1, VM_OC_BRANCH_IF_TRUE | VM_OC_GET_STACK) \ | |
| - CBC_OPCODE (CBC_CONTEXT_END, CBC_NO_FLAG, 0, VM_OC_CONTEXT_END) \ | |
| + CBC_OPCODE (CBC_CONTEXT_END, CBC_NO_FLAG, 0, \ | |
| + VM_OC_CONTEXT_END) \ | |
| CBC_FORWARD_BRANCH (CBC_BRANCH_IF_FALSE_FORWARD, -1, VM_OC_BRANCH_IF_FALSE | VM_OC_GET_STACK) \ | |
| - CBC_OPCODE (CBC_CREATE_OBJECT, CBC_NO_FLAG, 1, VM_OC_PUSH_OBJECT | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_CREATE_OBJECT, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PUSH_OBJECT | VM_OC_PUT_STACK) \ | |
| CBC_BACKWARD_BRANCH (CBC_BRANCH_IF_FALSE_BACKWARD, -1, VM_OC_BRANCH_IF_FALSE | VM_OC_GET_STACK) \ | |
| - CBC_OPCODE (CBC_SET_PROPERTY, CBC_HAS_LITERAL_ARG, -1, VM_OC_SET_PROPERTY | VM_OC_GET_STACK_LITERAL) \ | |
| + CBC_OPCODE (CBC_SET_PROPERTY, CBC_HAS_LITERAL_ARG, -1, \ | |
| + VM_OC_SET_PROPERTY | VM_OC_GET_STACK_LITERAL) \ | |
| CBC_FORWARD_BRANCH (CBC_JUMP_FORWARD_EXIT_CONTEXT, 0, VM_OC_JUMP_AND_EXIT_CONTEXT) \ | |
| - CBC_OPCODE (CBC_CREATE_ARRAY, CBC_NO_FLAG, 1, VM_OC_PUSH_ARRAY | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_CREATE_ARRAY, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PUSH_ARRAY | VM_OC_PUT_STACK) \ | |
| CBC_FORWARD_BRANCH (CBC_BRANCH_IF_LOGICAL_TRUE, -1, VM_OC_BRANCH_IF_LOGICAL_TRUE | VM_OC_GET_STACK) \ | |
| - CBC_OPCODE (CBC_ARRAY_APPEND, CBC_HAS_POP_STACK_BYTE_ARG, 0, VM_OC_APPEND_ARRAY | VM_OC_GET_BYTE) \ | |
| + CBC_OPCODE (CBC_ARRAY_APPEND, CBC_HAS_POP_STACK_BYTE_ARG, 0, \ | |
| + VM_OC_APPEND_ARRAY | VM_OC_GET_BYTE) \ | |
| CBC_FORWARD_BRANCH (CBC_BRANCH_IF_LOGICAL_FALSE, -1, VM_OC_BRANCH_IF_LOGICAL_FALSE | VM_OC_GET_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_ELISION, CBC_NO_FLAG, 1, VM_OC_PUSH_ELISON | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_ELISION, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PUSH_ELISON | VM_OC_PUT_STACK) \ | |
| CBC_FORWARD_BRANCH (CBC_BRANCH_IF_STRICT_EQUAL, -1, VM_OC_BRANCH_IF_STRICT_EQUAL | VM_OC_GET_STACK) \ | |
| \ | |
| /* Basic opcodes. */ \ | |
| - CBC_OPCODE (CBC_PUSH_LITERAL, CBC_HAS_LITERAL_ARG, 1, VM_OC_PUSH | VM_OC_GET_LITERAL) \ | |
| - CBC_OPCODE (CBC_PUSH_TWO_LITERALS, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 2, VM_OC_PUSH_TWO | VM_OC_GET_LITERAL_LITERAL) \ | |
| - CBC_OPCODE (CBC_PUSH_THREE_LITERALS, CBC_HAS_LITERAL_ARG2, 3, VM_OC_PUSH_THREE | VM_OC_GET_LITERAL_LITERAL) \ | |
| - CBC_OPCODE (CBC_PUSH_UNDEFINED, CBC_NO_FLAG, 1, VM_OC_PUSH_UNDEFINED | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_TRUE, CBC_NO_FLAG, 1, VM_OC_PUSH_TRUE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_FALSE, CBC_NO_FLAG, 1, VM_OC_PUSH_FALSE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_NULL, CBC_NO_FLAG, 1, VM_OC_PUSH_NULL | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_THIS, CBC_NO_FLAG, 1, VM_OC_PUSH_THIS | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_THIS_LITERAL, CBC_HAS_LITERAL_ARG, 2, VM_OC_PUSH_TWO | VM_OC_GET_THIS_LITERAL) \ | |
| - CBC_OPCODE (CBC_PUSH_NUMBER_0, CBC_NO_FLAG, 1, VM_OC_PUSH_NUMBER | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_NUMBER_1, CBC_HAS_BYTE_ARG, 1, VM_OC_PUSH_NUMBER | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_PROP, CBC_NO_FLAG, -1, VM_OC_PROP_GET | VM_OC_GET_STACK_STACK | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_PROP_LITERAL, CBC_HAS_LITERAL_ARG, 0, VM_OC_PROP_GET | VM_OC_GET_STACK_LITERAL | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_PROP_LITERAL_LITERAL, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 1, VM_OC_PROP_GET | VM_OC_GET_LITERAL_LITERAL | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_PROP_THIS_LITERAL, CBC_HAS_LITERAL_ARG, 1, VM_OC_PROP_GET | VM_OC_GET_THIS_LITERAL | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_IDENT_REFERENCE, CBC_HAS_LITERAL_ARG, 3, VM_OC_IDENT_REFERENCE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_PROP_REFERENCE, CBC_NO_FLAG, 1, VM_OC_PROP_REFERENCE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_PROP_LITERAL_REFERENCE, CBC_HAS_LITERAL_ARG, 2, VM_OC_PROP_REFERENCE | VM_OC_GET_LITERAL | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_PROP_LITERAL_LITERAL_REFERENCE, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 3, VM_OC_PROP_REFERENCE | VM_OC_GET_LITERAL_LITERAL | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_PUSH_PROP_THIS_LITERAL_REFERENCE, CBC_HAS_LITERAL_ARG, 3, VM_OC_PROP_REFERENCE | VM_OC_GET_THIS_LITERAL | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_NEW, CBC_HAS_POP_STACK_BYTE_ARG, 0, VM_OC_NEW | VM_OC_GET_BYTE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_NEW0, CBC_NO_FLAG, 0, VM_OC_NEW_N | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_NEW1, CBC_NO_FLAG, -1, VM_OC_NEW_N | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_EVAL, CBC_NO_FLAG, 0, VM_OC_EVAL) \ | |
| - CBC_OPCODE (CBC_DEFINE_VARS, CBC_HAS_LITERAL_ARG, 0, VM_OC_NONE) \ | |
| - CBC_OPCODE (CBC_INITIALIZE_VAR, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, VM_OC_NONE) \ | |
| - CBC_OPCODE (CBC_INITIALIZE_VARS, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, VM_OC_NONE) \ | |
| - CBC_OPCODE (CBC_RETURN, CBC_NO_FLAG, -1, VM_OC_RET | VM_OC_GET_STACK) \ | |
| - CBC_OPCODE (CBC_RETURN_WITH_BLOCK, CBC_NO_FLAG, 0, VM_OC_RET) \ | |
| - CBC_OPCODE (CBC_RETURN_WITH_LITERAL, CBC_HAS_LITERAL_ARG, 0, VM_OC_RET | VM_OC_GET_LITERAL) \ | |
| + CBC_OPCODE (CBC_PUSH_LITERAL, CBC_HAS_LITERAL_ARG, 1, \ | |
| + VM_OC_PUSH | VM_OC_GET_LITERAL) \ | |
| + CBC_OPCODE (CBC_PUSH_TWO_LITERALS, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 2, \ | |
| + VM_OC_PUSH_TWO | VM_OC_GET_LITERAL_LITERAL) \ | |
| + CBC_OPCODE (CBC_PUSH_THREE_LITERALS, CBC_HAS_LITERAL_ARG2, 3, \ | |
| + VM_OC_PUSH_THREE | VM_OC_GET_LITERAL_LITERAL) \ | |
| + CBC_OPCODE (CBC_PUSH_UNDEFINED, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PUSH_UNDEFINED | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_TRUE, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PUSH_TRUE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_FALSE, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PUSH_FALSE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_NULL, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PUSH_NULL | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_THIS, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PUSH_THIS | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_THIS_LITERAL, CBC_HAS_LITERAL_ARG, 2, \ | |
| + VM_OC_PUSH_TWO | VM_OC_GET_THIS_LITERAL) \ | |
| + CBC_OPCODE (CBC_PUSH_NUMBER_0, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PUSH_NUMBER | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_NUMBER_1, CBC_HAS_BYTE_ARG, 1, \ | |
| + VM_OC_PUSH_NUMBER | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_PROP, CBC_NO_FLAG, -1, \ | |
| + VM_OC_PROP_GET | VM_OC_GET_STACK_STACK | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_PROP_LITERAL, CBC_HAS_LITERAL_ARG, 0, \ | |
| + VM_OC_PROP_GET | VM_OC_GET_STACK_LITERAL | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_PROP_LITERAL_LITERAL, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 1, \ | |
| + VM_OC_PROP_GET | VM_OC_GET_LITERAL_LITERAL | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_PROP_THIS_LITERAL, CBC_HAS_LITERAL_ARG, 1, \ | |
| + VM_OC_PROP_GET | VM_OC_GET_THIS_LITERAL | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_IDENT_REFERENCE, CBC_HAS_LITERAL_ARG, 3, \ | |
| + VM_OC_IDENT_REFERENCE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_PROP_REFERENCE, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PROP_REFERENCE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_PROP_LITERAL_REFERENCE, CBC_HAS_LITERAL_ARG, 2, \ | |
| + VM_OC_PROP_REFERENCE | VM_OC_GET_LITERAL | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_PROP_LITERAL_LITERAL_REFERENCE, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 3, \ | |
| + VM_OC_PROP_REFERENCE | VM_OC_GET_LITERAL_LITERAL | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_PUSH_PROP_THIS_LITERAL_REFERENCE, CBC_HAS_LITERAL_ARG, 3, \ | |
| + VM_OC_PROP_REFERENCE | VM_OC_GET_THIS_LITERAL | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_NEW, CBC_HAS_POP_STACK_BYTE_ARG, 0, \ | |
| + VM_OC_NEW | VM_OC_GET_BYTE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_NEW0, CBC_NO_FLAG, 0, \ | |
| + VM_OC_NEW_N | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_NEW1, CBC_NO_FLAG, -1, \ | |
| + VM_OC_NEW_N | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_EVAL, CBC_NO_FLAG, 0, \ | |
| + VM_OC_EVAL) \ | |
| + CBC_OPCODE (CBC_DEFINE_VARS, CBC_HAS_LITERAL_ARG, 0, \ | |
| + VM_OC_NONE) \ | |
| + CBC_OPCODE (CBC_INITIALIZE_VAR, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, \ | |
| + VM_OC_NONE) \ | |
| + CBC_OPCODE (CBC_INITIALIZE_VARS, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, \ | |
| + VM_OC_NONE) \ | |
| + CBC_OPCODE (CBC_RETURN, CBC_NO_FLAG, -1, \ | |
| + VM_OC_RET | VM_OC_GET_STACK) \ | |
| + CBC_OPCODE (CBC_RETURN_WITH_BLOCK, CBC_NO_FLAG, 0, \ | |
| + VM_OC_RET) \ | |
| + CBC_OPCODE (CBC_RETURN_WITH_LITERAL, CBC_HAS_LITERAL_ARG, 0, \ | |
| + VM_OC_RET | VM_OC_GET_LITERAL) \ | |
| \ | |
| /* Unary opcodes. */ \ | |
| CBC_UNARY_OPERATION (CBC_PLUS, PLUS) \ | |
| @@ -236,8 +299,10 @@ | |
| CBC_UNARY_OPERATION (CBC_LOGICAL_NOT, NOT) \ | |
| CBC_UNARY_OPERATION (CBC_BIT_NOT, BIT_NOT) \ | |
| CBC_UNARY_OPERATION (CBC_VOID, VOID) \ | |
| - CBC_OPCODE (CBC_TYPEOF, CBC_NO_FLAG, 0, VM_OC_TYPEOF | VM_OC_GET_STACK | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_TYPEOF_IDENT, CBC_HAS_LITERAL_ARG, 1, VM_OC_TYPEOF_IDENT | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_TYPEOF, CBC_NO_FLAG, 0, \ | |
| + VM_OC_TYPEOF | VM_OC_GET_STACK | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_TYPEOF_IDENT, CBC_HAS_LITERAL_ARG, 1, \ | |
| + VM_OC_TYPEOF_IDENT | VM_OC_PUT_STACK) \ | |
| \ | |
| /* Binary opcodes. */ \ | |
| CBC_BINARY_OPERATION (CBC_BIT_OR, BIT_OR) \ | |
| @@ -263,59 +328,104 @@ | |
| CBC_BINARY_OPERATION (CBC_MODULO, MOD) \ | |
| \ | |
| /* Unary lvalue opcodes. */ \ | |
| - CBC_OPCODE (CBC_DELETE, CBC_NO_FLAG, -2, VM_OC_PROP_DELETE | VM_OC_GET_STACK_STACK) \ | |
| - CBC_OPCODE (CBC_DELETE_PUSH_RESULT, CBC_NO_FLAG, -1, VM_OC_PROP_DELETE | VM_OC_GET_STACK_STACK | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_DELETE_BLOCK, CBC_NO_FLAG, -2, VM_OC_PROP_DELETE | VM_OC_GET_STACK_STACK | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_DELETE_IDENT, CBC_HAS_LITERAL_ARG, 0, VM_OC_DELETE) \ | |
| - CBC_OPCODE (CBC_DELETE_IDENT_PUSH_RESULT, CBC_HAS_LITERAL_ARG, 1, VM_OC_DELETE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_DELETE_IDENT_BLOCK, CBC_HAS_LITERAL_ARG, 0, VM_OC_DELETE | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_DELETE, CBC_NO_FLAG, -2, \ | |
| + VM_OC_PROP_DELETE | VM_OC_GET_STACK_STACK) \ | |
| + CBC_OPCODE (CBC_DELETE_PUSH_RESULT, CBC_NO_FLAG, -1, \ | |
| + VM_OC_PROP_DELETE | VM_OC_GET_STACK_STACK | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_DELETE_BLOCK, CBC_NO_FLAG, -2, \ | |
| + VM_OC_PROP_DELETE | VM_OC_GET_STACK_STACK | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_DELETE_IDENT, CBC_HAS_LITERAL_ARG, 0, \ | |
| + VM_OC_DELETE) \ | |
| + CBC_OPCODE (CBC_DELETE_IDENT_PUSH_RESULT, CBC_HAS_LITERAL_ARG, 1, \ | |
| + VM_OC_DELETE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_DELETE_IDENT_BLOCK, CBC_HAS_LITERAL_ARG, 0, \ | |
| + VM_OC_DELETE | VM_OC_PUT_BLOCK) \ | |
| CBC_UNARY_LVALUE_OPERATION (CBC_PRE_INCR, PRE_INCR) \ | |
| CBC_UNARY_LVALUE_OPERATION (CBC_PRE_DECR, PRE_DECR) \ | |
| CBC_UNARY_LVALUE_OPERATION (CBC_POST_INCR, POST_INCR) \ | |
| CBC_UNARY_LVALUE_OPERATION (CBC_POST_DECR, POST_DECR) \ | |
| \ | |
| /* Call opcodes. */ \ | |
| - CBC_OPCODE (CBC_CALL, CBC_HAS_POP_STACK_BYTE_ARG, -1, VM_OC_CALL | VM_OC_GET_BYTE) \ | |
| - CBC_OPCODE (CBC_CALL_PUSH_RESULT, CBC_HAS_POP_STACK_BYTE_ARG, 0, VM_OC_CALL | VM_OC_GET_BYTE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_CALL_BLOCK, CBC_HAS_POP_STACK_BYTE_ARG, -1, VM_OC_CALL | VM_OC_GET_BYTE | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_CALL_PROP, CBC_HAS_POP_STACK_BYTE_ARG, -3, VM_OC_CALL_PROP | VM_OC_GET_BYTE) \ | |
| - CBC_OPCODE (CBC_CALL_PROP_PUSH_RESULT, CBC_HAS_POP_STACK_BYTE_ARG, -2, VM_OC_CALL_PROP | VM_OC_GET_BYTE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_CALL_PROP_BLOCK, CBC_HAS_POP_STACK_BYTE_ARG, -3, VM_OC_CALL_PROP | VM_OC_GET_BYTE | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_CALL0, CBC_NO_FLAG, -1, VM_OC_CALL_N) \ | |
| - CBC_OPCODE (CBC_CALL0_PUSH_RESULT, CBC_NO_FLAG, 0, VM_OC_CALL_N | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_CALL0_BLOCK, CBC_NO_FLAG, -1, VM_OC_CALL_N | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_CALL0_PROP, CBC_NO_FLAG, -3, VM_OC_CALL_PROP_N) \ | |
| - CBC_OPCODE (CBC_CALL0_PROP_PUSH_RESULT, CBC_NO_FLAG, -2, VM_OC_CALL_PROP_N | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_CALL0_PROP_BLOCK, CBC_NO_FLAG, -3, VM_OC_CALL_PROP_N | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_CALL1, CBC_NO_FLAG, -2, VM_OC_CALL_N) \ | |
| - CBC_OPCODE (CBC_CALL1_PUSH_RESULT, CBC_NO_FLAG, -1, VM_OC_CALL_N | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_CALL1_BLOCK, CBC_NO_FLAG, -2, VM_OC_CALL_N | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_CALL1_PROP, CBC_NO_FLAG, -4, VM_OC_CALL_PROP_N) \ | |
| - CBC_OPCODE (CBC_CALL1_PROP_PUSH_RESULT, CBC_NO_FLAG, -3, VM_OC_CALL_PROP_N | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_CALL1_PROP_BLOCK, CBC_NO_FLAG, -4, VM_OC_CALL_PROP_N | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_CALL2, CBC_NO_FLAG, -3, VM_OC_CALL_N) \ | |
| - CBC_OPCODE (CBC_CALL2_PUSH_RESULT, CBC_NO_FLAG, -2, VM_OC_CALL_N | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_CALL2_BLOCK, CBC_NO_FLAG, -3, VM_OC_CALL_N | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_CALL2_PROP, CBC_NO_FLAG, -4, VM_OC_CALL_PROP_N) \ | |
| - CBC_OPCODE (CBC_CALL2_PROP_PUSH_RESULT, CBC_NO_FLAG, -3, VM_OC_CALL_PROP_N | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_CALL2_PROP_BLOCK, CBC_NO_FLAG, -4, VM_OC_CALL_PROP_N | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_CALL, CBC_HAS_POP_STACK_BYTE_ARG, -1, \ | |
| + VM_OC_CALL | VM_OC_GET_BYTE) \ | |
| + CBC_OPCODE (CBC_CALL_PUSH_RESULT, CBC_HAS_POP_STACK_BYTE_ARG, 0, \ | |
| + VM_OC_CALL | VM_OC_GET_BYTE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_CALL_BLOCK, CBC_HAS_POP_STACK_BYTE_ARG, -1, \ | |
| + VM_OC_CALL | VM_OC_GET_BYTE | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_CALL_PROP, CBC_HAS_POP_STACK_BYTE_ARG, -3, \ | |
| + VM_OC_CALL_PROP | VM_OC_GET_BYTE) \ | |
| + CBC_OPCODE (CBC_CALL_PROP_PUSH_RESULT, CBC_HAS_POP_STACK_BYTE_ARG, -2, \ | |
| + VM_OC_CALL_PROP | VM_OC_GET_BYTE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_CALL_PROP_BLOCK, CBC_HAS_POP_STACK_BYTE_ARG, -3, \ | |
| + VM_OC_CALL_PROP | VM_OC_GET_BYTE | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_CALL0, CBC_NO_FLAG, -1, \ | |
| + VM_OC_CALL_N) \ | |
| + CBC_OPCODE (CBC_CALL0_PUSH_RESULT, CBC_NO_FLAG, 0, \ | |
| + VM_OC_CALL_N | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_CALL0_BLOCK, CBC_NO_FLAG, -1, \ | |
| + VM_OC_CALL_N | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_CALL0_PROP, CBC_NO_FLAG, -3, \ | |
| + VM_OC_CALL_PROP_N) \ | |
| + CBC_OPCODE (CBC_CALL0_PROP_PUSH_RESULT, CBC_NO_FLAG, -2, \ | |
| + VM_OC_CALL_PROP_N | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_CALL0_PROP_BLOCK, CBC_NO_FLAG, -3, \ | |
| + VM_OC_CALL_PROP_N | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_CALL1, CBC_NO_FLAG, -2, \ | |
| + VM_OC_CALL_N) \ | |
| + CBC_OPCODE (CBC_CALL1_PUSH_RESULT, CBC_NO_FLAG, -1, \ | |
| + VM_OC_CALL_N | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_CALL1_BLOCK, CBC_NO_FLAG, -2, \ | |
| + VM_OC_CALL_N | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_CALL1_PROP, CBC_NO_FLAG, -4, \ | |
| + VM_OC_CALL_PROP_N) \ | |
| + CBC_OPCODE (CBC_CALL1_PROP_PUSH_RESULT, CBC_NO_FLAG, -3, \ | |
| + VM_OC_CALL_PROP_N | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_CALL1_PROP_BLOCK, CBC_NO_FLAG, -4, \ | |
| + VM_OC_CALL_PROP_N | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_CALL2, CBC_NO_FLAG, -3, \ | |
| + VM_OC_CALL_N) \ | |
| + CBC_OPCODE (CBC_CALL2_PUSH_RESULT, CBC_NO_FLAG, -2, \ | |
| + VM_OC_CALL_N | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_CALL2_BLOCK, CBC_NO_FLAG, -3, \ | |
| + VM_OC_CALL_N | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_CALL2_PROP, CBC_NO_FLAG, -4, \ | |
| + VM_OC_CALL_PROP_N) \ | |
| + CBC_OPCODE (CBC_CALL2_PROP_PUSH_RESULT, CBC_NO_FLAG, -3, \ | |
| + VM_OC_CALL_PROP_N | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_CALL2_PROP_BLOCK, CBC_NO_FLAG, -4, \ | |
| + VM_OC_CALL_PROP_N | VM_OC_PUT_BLOCK) \ | |
| \ | |
| /* Binary assignment opcodes. */ \ | |
| - CBC_OPCODE (CBC_ASSIGN, CBC_NO_FLAG, -3, VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_REFERENCE) \ | |
| - CBC_OPCODE (CBC_ASSIGN_PUSH_RESULT, CBC_NO_FLAG, -2, VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_ASSIGN_BLOCK, CBC_NO_FLAG, -3, VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_ASSIGN_SET_IDENT, CBC_HAS_LITERAL_ARG, -1, VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_IDENT) \ | |
| - CBC_OPCODE (CBC_ASSIGN_SET_IDENT_PUSH_RESULT, CBC_HAS_LITERAL_ARG, 0, VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_IDENT | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_ASSIGN_SET_IDENT_BLOCK, CBC_HAS_LITERAL_ARG, -1, VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_IDENT | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_ASSIGN_LITERAL_SET_IDENT, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, VM_OC_ASSIGN | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT) \ | |
| - CBC_OPCODE (CBC_ASSIGN_LITERAL_SET_IDENT_PUSH_RESULT, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 1, VM_OC_ASSIGN | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_ASSIGN_LITERAL_SET_IDENT_BLOCK, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, VM_OC_ASSIGN | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_ASSIGN_PROP_LITERAL, CBC_HAS_LITERAL_ARG, -2, VM_OC_ASSIGN_PROP | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE) \ | |
| - CBC_OPCODE (CBC_ASSIGN_PROP_LITERAL_PUSH_RESULT, CBC_HAS_LITERAL_ARG, -1, VM_OC_ASSIGN_PROP | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_ASSIGN_PROP_LITERAL_BLOCK, CBC_HAS_LITERAL_ARG, -2, VM_OC_ASSIGN_PROP | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| - CBC_OPCODE (CBC_ASSIGN_PROP_THIS_LITERAL, CBC_HAS_LITERAL_ARG, -1, VM_OC_ASSIGN_PROP_THIS | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE) \ | |
| - CBC_OPCODE (CBC_ASSIGN_PROP_THIS_LITERAL_PUSH_RESULT, CBC_HAS_LITERAL_ARG, 0, VM_OC_ASSIGN_PROP_THIS | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| - CBC_OPCODE (CBC_ASSIGN_PROP_THIS_LITERAL_BLOCK, CBC_HAS_LITERAL_ARG, -1, VM_OC_ASSIGN_PROP_THIS | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_ASSIGN, CBC_NO_FLAG, -3, \ | |
| + VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_REFERENCE) \ | |
| + CBC_OPCODE (CBC_ASSIGN_PUSH_RESULT, CBC_NO_FLAG, -2, \ | |
| + VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_ASSIGN_BLOCK, CBC_NO_FLAG, -3, \ | |
| + VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_ASSIGN_SET_IDENT, CBC_HAS_LITERAL_ARG, -1, \ | |
| + VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_IDENT) \ | |
| + CBC_OPCODE (CBC_ASSIGN_SET_IDENT_PUSH_RESULT, CBC_HAS_LITERAL_ARG, 0, \ | |
| + VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_IDENT | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_ASSIGN_SET_IDENT_BLOCK, CBC_HAS_LITERAL_ARG, -1, \ | |
| + VM_OC_ASSIGN | VM_OC_GET_STACK | VM_OC_PUT_IDENT | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_ASSIGN_LITERAL_SET_IDENT, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, \ | |
| + VM_OC_ASSIGN | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT) \ | |
| + CBC_OPCODE (CBC_ASSIGN_LITERAL_SET_IDENT_PUSH_RESULT, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 1, \ | |
| + VM_OC_ASSIGN | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_ASSIGN_LITERAL_SET_IDENT_BLOCK, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, \ | |
| + VM_OC_ASSIGN | VM_OC_GET_LITERAL | VM_OC_PUT_IDENT | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_ASSIGN_PROP_LITERAL, CBC_HAS_LITERAL_ARG, -2, \ | |
| + VM_OC_ASSIGN_PROP | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE) \ | |
| + CBC_OPCODE (CBC_ASSIGN_PROP_LITERAL_PUSH_RESULT, CBC_HAS_LITERAL_ARG, -1, \ | |
| + VM_OC_ASSIGN_PROP | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_ASSIGN_PROP_LITERAL_BLOCK, CBC_HAS_LITERAL_ARG, -2, \ | |
| + VM_OC_ASSIGN_PROP | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| + CBC_OPCODE (CBC_ASSIGN_PROP_THIS_LITERAL, CBC_HAS_LITERAL_ARG, -1, \ | |
| + VM_OC_ASSIGN_PROP_THIS | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE) \ | |
| + CBC_OPCODE (CBC_ASSIGN_PROP_THIS_LITERAL_PUSH_RESULT, CBC_HAS_LITERAL_ARG, 0, \ | |
| + VM_OC_ASSIGN_PROP_THIS | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_ASSIGN_PROP_THIS_LITERAL_BLOCK, CBC_HAS_LITERAL_ARG, -1, \ | |
| + VM_OC_ASSIGN_PROP_THIS | VM_OC_GET_LITERAL | VM_OC_PUT_REFERENCE | VM_OC_PUT_BLOCK) \ | |
| \ | |
| /* Binary compound assignment opcodes. */ \ | |
| CBC_BINARY_LVALUE_OPERATION (CBC_ASSIGN_ADD, ADD) \ | |
| @@ -338,21 +448,30 @@ | |
| #define CBC_EXT_OPCODE_LIST \ | |
| /* Branch opcodes first. Some other opcodes are mixed. */ \ | |
| - CBC_OPCODE (CBC_EXT_NOP, CBC_NO_FLAG, 0, VM_OC_NONE) \ | |
| - CBC_FORWARD_BRANCH (CBC_EXT_WITH_CREATE_CONTEXT, -1 + PARSER_WITH_CONTEXT_STACK_ALLOCATION, VM_OC_WITH | VM_OC_GET_STACK) \ | |
| - CBC_OPCODE (CBC_EXT_FOR_IN_GET_NEXT, CBC_NO_FLAG, 1, VM_OC_FOR_IN_GET_NEXT | VM_OC_PUT_STACK) \ | |
| - CBC_FORWARD_BRANCH (CBC_EXT_FOR_IN_CREATE_CONTEXT, -1 + PARSER_FOR_IN_CONTEXT_STACK_ALLOCATION, VM_OC_FOR_IN_CREATE_CONTEXT | VM_OC_GET_STACK) \ | |
| - CBC_OPCODE (CBC_EXT_SET_GETTER, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, VM_OC_SET_GETTER | VM_OC_GET_LITERAL_LITERAL) \ | |
| + CBC_OPCODE (CBC_EXT_NOP, CBC_NO_FLAG, 0, \ | |
| + VM_OC_NONE) \ | |
| + CBC_FORWARD_BRANCH (CBC_EXT_WITH_CREATE_CONTEXT, -1 + PARSER_WITH_CONTEXT_STACK_ALLOCATION, \ | |
| + VM_OC_WITH | VM_OC_GET_STACK) \ | |
| + CBC_OPCODE (CBC_EXT_FOR_IN_GET_NEXT, CBC_NO_FLAG, 1, \ | |
| + VM_OC_FOR_IN_GET_NEXT | VM_OC_PUT_STACK) \ | |
| + CBC_FORWARD_BRANCH (CBC_EXT_FOR_IN_CREATE_CONTEXT, -1 + PARSER_FOR_IN_CONTEXT_STACK_ALLOCATION, \ | |
| + VM_OC_FOR_IN_CREATE_CONTEXT | VM_OC_GET_STACK) \ | |
| + CBC_OPCODE (CBC_EXT_SET_GETTER, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, \ | |
| + VM_OC_SET_GETTER | VM_OC_GET_LITERAL_LITERAL) \ | |
| CBC_BACKWARD_BRANCH (CBC_EXT_BRANCH_IF_FOR_IN_HAS_NEXT, 0, VM_OC_FOR_IN_HAS_NEXT) \ | |
| - CBC_OPCODE (CBC_EXT_SET_SETTER, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, VM_OC_SET_SETTER | VM_OC_GET_LITERAL_LITERAL) \ | |
| + CBC_OPCODE (CBC_EXT_SET_SETTER, CBC_HAS_LITERAL_ARG | CBC_HAS_LITERAL_ARG2, 0, \ | |
| + VM_OC_SET_SETTER | VM_OC_GET_LITERAL_LITERAL) \ | |
| CBC_FORWARD_BRANCH (CBC_EXT_TRY_CREATE_CONTEXT, PARSER_TRY_CONTEXT_STACK_ALLOCATION, VM_OC_TRY) \ | |
| - CBC_OPCODE (CBC_EXT_THROW_REFERENCE_ERROR, CBC_NO_FLAG, 1, VM_OC_THROW_REFERENCE_ERROR) \ | |
| + CBC_OPCODE (CBC_EXT_THROW_REFERENCE_ERROR, CBC_NO_FLAG, 1, \ | |
| + VM_OC_THROW_REFERENCE_ERROR) \ | |
| CBC_FORWARD_BRANCH (CBC_EXT_CATCH, 1, VM_OC_CATCH) \ | |
| - CBC_OPCODE (CBC_EXT_PUSH_UNDEFINED_BASE, CBC_NO_FLAG, 1, VM_OC_PUSH_UNDEFINED_BASE | VM_OC_PUT_STACK) \ | |
| + CBC_OPCODE (CBC_EXT_PUSH_UNDEFINED_BASE, CBC_NO_FLAG, 1, \ | |
| + VM_OC_PUSH_UNDEFINED_BASE | VM_OC_PUT_STACK) \ | |
| CBC_FORWARD_BRANCH (CBC_EXT_FINALLY, 0, VM_OC_FINALLY) \ | |
| \ | |
| /* Basic opcodes. */ \ | |
| - CBC_OPCODE (CBC_EXT_DEBUGGER, CBC_NO_FLAG, 0, VM_OC_NONE) \ | |
| + CBC_OPCODE (CBC_EXT_DEBUGGER, CBC_NO_FLAG, 0, \ | |
| + VM_OC_NONE) \ | |
| \ | |
| /* Binary compound assignment opcodes with pushing the result. */ \ | |
| CBC_EXT_BINARY_LVALUE_OPERATION (CBC_EXT_ASSIGN_ADD, ADD) \ | |
| diff --git a/jerry-core/parser/js/js-lexer.cpp b/jerry-core/parser/js/js-lexer.cpp | |
| index c56c9c0..683f221 100644 | |
| --- a/jerry-core/parser/js/js-lexer.cpp | |
| +++ b/jerry-core/parser/js/js-lexer.cpp | |
| @@ -1134,7 +1134,7 @@ lexer_process_char_literal (parser_context_t *context_p, /**< context */ | |
| { | |
| if (literal_p->type == literal_type | |
| && literal_p->prop.length == length | |
| - && memcmp(literal_p->u.char_p, char_p, length) == 0) | |
| + && memcmp (literal_p->u.char_p, char_p, length) == 0) | |
| { | |
| context_p->lit_object.literal_p = literal_p; | |
| context_p->lit_object.index = (uint16_t) literal_index; | |
| diff --git a/jerry-core/parser/js/js-lexer.h b/jerry-core/parser/js/js-lexer.h | |
| index 7689472..bdcb356 100644 | |
| --- a/jerry-core/parser/js/js-lexer.h | |
| +++ b/jerry-core/parser/js/js-lexer.h | |
| @@ -100,7 +100,7 @@ typedef enum | |
| LEXER_LEFT_PAREN, /**< ( */ | |
| LEXER_LEFT_SQUARE, /**< [ */ | |
| LEXER_RIGHT_BRACE, /**< } */ | |
| - LEXER_RIGHT_PAREN, /**< ) */ | |
| + LEXER_RIGHT_PAREN, /**<_) */ | |
| LEXER_RIGHT_SQUARE, /**< ] */ | |
| LEXER_DOT, /**< . */ | |
| LEXER_SEMICOLON, /**< ; */ | |
| diff --git a/jerry-core/vm/opcodes-ecma-arithmetics.cpp b/jerry-core/vm/opcodes-ecma-arithmetics.cpp | |
| index 4d628d9..8dc1081 100644 | |
| --- a/jerry-core/vm/opcodes-ecma-arithmetics.cpp | |
| +++ b/jerry-core/vm/opcodes-ecma-arithmetics.cpp | |
| @@ -55,7 +55,7 @@ do_number_arithmetic (number_arithmetic_op op, /**< number arithmetic operation | |
| ECMA_OP_TO_NUMBER_TRY_CATCH (num_left, left_value, ret_value); | |
| ECMA_OP_TO_NUMBER_TRY_CATCH (num_right, right_value, ret_value); | |
| - ecma_number_t *res_p = ecma_alloc_number(); | |
| + ecma_number_t *res_p = ecma_alloc_number (); | |
| switch (op) | |
| { | |
| @@ -247,7 +247,7 @@ opfunc_unary_plus (ecma_value_t left_value) /**< left value */ | |
| left_value, | |
| ret_value); | |
| - ecma_number_t *tmp_p = ecma_alloc_number(); | |
| + ecma_number_t *tmp_p = ecma_alloc_number (); | |
| *tmp_p = num_var_value; | |
| ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL, ecma_make_number_value (tmp_p)); | |
| @@ -274,7 +274,7 @@ opfunc_unary_minus (ecma_value_t left_value) /**< left value */ | |
| left_value, | |
| ret_value); | |
| - ecma_number_t *tmp_p = ecma_alloc_number(); | |
| + ecma_number_t *tmp_p = ecma_alloc_number (); | |
| *tmp_p = ecma_number_negate (num_var_value); | |
| ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL, ecma_make_number_value (tmp_p)); | |
| diff --git a/jerry-core/vm/vm-stack.h b/jerry-core/vm/vm-stack.h | |
| index fc7c10e..9f2ac84 100644 | |
| --- a/jerry-core/vm/vm-stack.h | |
| +++ b/jerry-core/vm/vm-stack.h | |
| @@ -53,7 +53,8 @@ typedef struct vm_stack_frame_t | |
| #define VM_GET_CONTEXT_TYPE(value) ((vm_stack_context_type_t) ((value) & 0xf)) | |
| #define VM_GET_CONTEXT_END(value) ((value) >> 4) | |
| -typedef enum { | |
| +typedef enum | |
| +{ | |
| VM_CONTEXT_FINALLY_JUMP, /**< finally context with a jump */ | |
| VM_CONTEXT_FINALLY_THROW, /**< finally context with a throw */ | |
| VM_CONTEXT_FINALLY_RETURN, /**< finally context with a return */ | |
| diff --git a/jerry-core/vm/vm.cpp b/jerry-core/vm/vm.cpp | |
| index e106a11..b6d29c6 100644 | |
| --- a/jerry-core/vm/vm.cpp | |
| +++ b/jerry-core/vm/vm.cpp | |
| @@ -767,12 +767,14 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ | |
| { | |
| *(stack_top_p++) = left_value; | |
| continue; | |
| + /* FALLTHRU */ | |
| } | |
| case VM_OC_PUSH_TWO: | |
| { | |
| *(stack_top_p++) = left_value; | |
| *(stack_top_p++) = right_value; | |
| continue; | |
| + /* FALLTHRU */ | |
| } | |
| case VM_OC_PUSH_THREE: | |
| { | |
| @@ -788,6 +790,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ | |
| (void) 0); | |
| *(stack_top_p++) = left_value; | |
| continue; | |
| + /* FALLTHRU */ | |
| } | |
| case VM_OC_PUSH_UNDEFINED: | |
| case VM_OC_VOID: | |
| @@ -1203,6 +1206,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ | |
| is_direct_eval_form_call = true; | |
| JERRY_ASSERT (*byte_code_p >= CBC_CALL && *byte_code_p <= CBC_CALL2_PROP_BLOCK); | |
| continue; | |
| + /* FALLTHRU */ | |
| } | |
| case VM_OC_CALL_N: | |
| case VM_OC_CALL_PROP_N: | |
| diff --git a/jerry-core/vm/vm.h b/jerry-core/vm/vm.h | |
| index 22c6280..c8e286e 100644 | |
| --- a/jerry-core/vm/vm.h | |
| +++ b/jerry-core/vm/vm.h | |
| @@ -28,24 +28,26 @@ | |
| #define VM_OC_GET_DATA_GET_ID(O) \ | |
| (((O) >> VM_OC_GET_DATA_SHIFT) & VM_OC_GET_DATA_MASK) | |
| -typedef enum { | |
| - VM_OC_GET_NONE = VM_OC_GET_DATA_CREATE_ID(0), | |
| - VM_OC_GET_STACK = VM_OC_GET_DATA_CREATE_ID(1), | |
| - VM_OC_GET_STACK_STACK = VM_OC_GET_DATA_CREATE_ID(2), | |
| - VM_OC_GET_BYTE = VM_OC_GET_DATA_CREATE_ID(3), | |
| - | |
| - VM_OC_GET_LITERAL = VM_OC_GET_DATA_CREATE_ID(4), | |
| - VM_OC_GET_STACK_LITERAL = VM_OC_GET_DATA_CREATE_ID(5), | |
| - VM_OC_GET_LITERAL_BYTE = VM_OC_GET_DATA_CREATE_ID(6), | |
| - VM_OC_GET_LITERAL_LITERAL = VM_OC_GET_DATA_CREATE_ID(7), | |
| - VM_OC_GET_THIS_LITERAL = VM_OC_GET_DATA_CREATE_ID(8), | |
| +typedef enum | |
| +{ | |
| + VM_OC_GET_NONE = VM_OC_GET_DATA_CREATE_ID (0), | |
| + VM_OC_GET_STACK = VM_OC_GET_DATA_CREATE_ID (1), | |
| + VM_OC_GET_STACK_STACK = VM_OC_GET_DATA_CREATE_ID (2), | |
| + VM_OC_GET_BYTE = VM_OC_GET_DATA_CREATE_ID (3), | |
| + | |
| + VM_OC_GET_LITERAL = VM_OC_GET_DATA_CREATE_ID (4), | |
| + VM_OC_GET_STACK_LITERAL = VM_OC_GET_DATA_CREATE_ID (5), | |
| + VM_OC_GET_LITERAL_BYTE = VM_OC_GET_DATA_CREATE_ID (6), | |
| + VM_OC_GET_LITERAL_LITERAL = VM_OC_GET_DATA_CREATE_ID (7), | |
| + VM_OC_GET_THIS_LITERAL = VM_OC_GET_DATA_CREATE_ID (8), | |
| } vm_oc_get_types; | |
| #define VM_OC_GROUP_MASK 0xff | |
| #define VM_OC_GROUP_GET_INDEX(O) \ | |
| ((O) & VM_OC_GROUP_MASK) | |
| -typedef enum { | |
| +typedef enum | |
| +{ | |
| VM_OC_NONE, | |
| VM_OC_POP, | |
| VM_OC_POP_BLOCK, | |
| @@ -159,7 +161,8 @@ typedef enum { | |
| #define VM_OC_PUT_DATA_CREATE_FLAG(V) \ | |
| (((V) & VM_OC_PUT_DATA_MASK) << VM_OC_PUT_DATA_SHIFT) | |
| -typedef enum { | |
| +typedef enum | |
| +{ | |
| VM_OC_PUT_IDENT = VM_OC_PUT_DATA_CREATE_FLAG (0x1), | |
| VM_OC_PUT_REFERENCE = VM_OC_PUT_DATA_CREATE_FLAG (0x2), | |
| VM_OC_PUT_STACK = VM_OC_PUT_DATA_CREATE_FLAG (0x4), | |
| diff --git a/tools/precommit.sh b/tools/precommit.sh | |
| index 71e4382..7e5b8ed 100755 | |
| --- a/tools/precommit.sh | |
| +++ b/tools/precommit.sh | |
| @@ -29,12 +29,12 @@ author_email=`git show -s --format=%ae HEAD` | |
| required_signed_off_by_line="JerryScript-DCO-1.0-Signed-off-by: $author_name $author_email" | |
| actual_signed_off_by_line=`git show -s --format=%B HEAD | sed '/^$/d' | tail -n 1` | |
| -if [ "$actual_signed_off_by_line" != "$required_signed_off_by_line" ] | |
| -then | |
| - echo -e "\e[1;33m Signed-off-by message is incorrect. The following line should be at the end of the $commit_hash commit's message: '$required_signed_off_by_line'. \e[0m\n" | |
| - | |
| - exit 1 | |
| -fi | |
| +#if [ "$actual_signed_off_by_line" != "$required_signed_off_by_line" ] | |
| +#then | |
| +# echo -e "\e[1;33m Signed-off-by message is incorrect. The following line should be at the end of the $commit_hash commit's message: '$required_signed_off_by_line'. \e[0m\n" | |
| +# | |
| +# exit 1 | |
| +#fi | |
| VERA_DIRECTORIES_EXCLUDE_LIST="-path ./third-party -o -path tests -o -path ./targets" | |
| VERA_CONFIGURATION_PATH="./tools/vera++" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment