Improve destructuring patterns (#4527)
- Fix evaluation order of the operands - Implement proper iterator closing of array destructuring - Support next method caching JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
@@ -202,6 +202,12 @@
|
||||
#define PARSER_WITH_CONTEXT_STACK_ALLOCATION 1
|
||||
/* PARSER_BLOCK_CONTEXT_STACK_ALLOCATION must be <= 3 */
|
||||
#define PARSER_BLOCK_CONTEXT_STACK_ALLOCATION 1
|
||||
/* PARSER_ITERATOR_CONTEXT_STACK_ALLOCATION must be <= 3 */
|
||||
#define PARSER_ITERATOR_CONTEXT_STACK_ALLOCATION 3
|
||||
/* PARSER_OBJECT_INITIALIZER_CONTEXT_STACK_ALLOCATION must be <= 2 */
|
||||
#define PARSER_OBJ_INIT_CONTEXT_STACK_ALLOCATION 1
|
||||
/* PARSER_OBJECT_INITIALIZER_CONTEXT_STACK_ALLOCATION must be <= 2 */
|
||||
#define PARSER_OBJ_INIT_REST_CONTEXT_STACK_ALLOCATION 2
|
||||
|
||||
/**
|
||||
* Extra stack consumption for finally context.
|
||||
@@ -573,7 +579,7 @@
|
||||
CBC_FORWARD_BRANCH (CBC_EXT_FINALLY, PARSER_FINALLY_CONTEXT_EXTRA_STACK_ALLOCATION, \
|
||||
VM_OC_FINALLY) \
|
||||
CBC_OPCODE (CBC_EXT_INITIALIZER_PUSH_PROP, CBC_NO_FLAG, 0, \
|
||||
VM_OC_INITIALIZER_PUSH_PROP | VM_OC_GET_STACK) \
|
||||
VM_OC_INITIALIZER_PUSH_PROP) \
|
||||
CBC_FORWARD_BRANCH (CBC_EXT_DEFAULT_INITIALIZER, -1, \
|
||||
VM_OC_DEFAULT_INITIALIZER) \
|
||||
CBC_OPCODE (CBC_EXT_ERROR, CBC_NO_FLAG, 0, \
|
||||
@@ -746,26 +752,24 @@
|
||||
VM_OC_INITIALIZER_PUSH_PROP | VM_OC_GET_LITERAL) \
|
||||
CBC_OPCODE (CBC_EXT_SPREAD_NEW, CBC_HAS_POP_STACK_BYTE_ARG, 0, \
|
||||
VM_OC_SPREAD_ARGUMENTS | VM_OC_PUT_STACK) \
|
||||
CBC_OPCODE (CBC_EXT_MOVE, CBC_NO_FLAG, 0, \
|
||||
VM_OC_MOVE) \
|
||||
CBC_OPCODE (CBC_EXT_MOVE_2, CBC_NO_FLAG, 0, \
|
||||
VM_OC_MOVE) \
|
||||
CBC_OPCODE (CBC_EXT_MOVE_3, CBC_NO_FLAG, 0, \
|
||||
VM_OC_MOVE) \
|
||||
\
|
||||
/* Iterator related opcodes. */ \
|
||||
CBC_OPCODE (CBC_EXT_GET_ITERATOR, CBC_NO_FLAG, 1, \
|
||||
VM_OC_GET_ITERATOR) \
|
||||
CBC_OPCODE (CBC_EXT_ITERATOR_CONTEXT_CREATE, CBC_NO_FLAG, PARSER_ITERATOR_CONTEXT_STACK_ALLOCATION, \
|
||||
VM_OC_ITERATOR_CONTEXT_CREATE) \
|
||||
CBC_OPCODE (CBC_EXT_ITERATOR_CONTEXT_END, CBC_NO_FLAG, -PARSER_ITERATOR_CONTEXT_STACK_ALLOCATION, \
|
||||
VM_OC_ITERATOR_CONTEXT_END) \
|
||||
CBC_OPCODE (CBC_EXT_ITERATOR_STEP, CBC_NO_FLAG, 1, \
|
||||
VM_OC_ITERATOR_STEP) \
|
||||
CBC_OPCODE (CBC_EXT_ITERATOR_CLOSE, CBC_NO_FLAG, -1, \
|
||||
VM_OC_ITERATOR_CLOSE | VM_OC_GET_STACK) \
|
||||
\
|
||||
/* Object initializer related opcodes. */ \
|
||||
CBC_OPCODE (CBC_EXT_INITIALIZER_PUSH_LIST, CBC_NO_FLAG, 1, \
|
||||
VM_OC_INITIALIZER_PUSH_LIST) \
|
||||
CBC_OPCODE (CBC_EXT_INITIALIZER_PUSH_REST, CBC_NO_FLAG, 0, \
|
||||
VM_OC_INITIALIZER_PUSH_REST) \
|
||||
CBC_OPCODE (CBC_EXT_OBJ_INIT_CONTEXT_CREATE, CBC_NO_FLAG, PARSER_OBJ_INIT_CONTEXT_STACK_ALLOCATION, \
|
||||
VM_OC_OBJ_INIT_CONTEXT_CREATE) \
|
||||
CBC_OPCODE (CBC_EXT_OBJ_INIT_REST_CONTEXT_CREATE, CBC_NO_FLAG, PARSER_OBJ_INIT_REST_CONTEXT_STACK_ALLOCATION, \
|
||||
VM_OC_OBJ_INIT_CONTEXT_CREATE) \
|
||||
CBC_OPCODE (CBC_EXT_OBJ_INIT_PUSH_REST, CBC_NO_FLAG, 1, \
|
||||
VM_OC_OBJ_INIT_PUSH_REST) \
|
||||
CBC_OPCODE (CBC_EXT_OBJ_INIT_CONTEXT_END, CBC_NO_FLAG, -PARSER_OBJ_INIT_CONTEXT_STACK_ALLOCATION, \
|
||||
VM_OC_OBJ_INIT_CONTEXT_END) \
|
||||
CBC_OPCODE (CBC_EXT_INITIALIZER_PUSH_NAME, CBC_NO_FLAG, 0, \
|
||||
VM_OC_INITIALIZER_PUSH_NAME | VM_OC_GET_STACK) \
|
||||
CBC_OPCODE (CBC_EXT_INITIALIZER_PUSH_NAME_LITERAL, CBC_HAS_LITERAL_ARG, 1, \
|
||||
|
||||
Reference in New Issue
Block a user