From 2637911b3ec81769eaa36b77f0dfd03a86305781 Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov Date: Thu, 16 Oct 2014 16:05:48 +0400 Subject: [PATCH] Fix 'this_arg' --- src/libjsparser/parser.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/src/libjsparser/parser.c b/src/libjsparser/parser.c index 142117089..03fb4ff30 100644 --- a/src/libjsparser/parser.c +++ b/src/libjsparser/parser.c @@ -958,10 +958,18 @@ parse_argument_list (argument_list_type alt, idx_t obj, idx_t this_arg) current_token_must_be (STACK_HEAD (U8, 3)); - if (alt == AL_CALL_EXPR && this_arg != INVALID_VALUE) + switch (alt) { - DUMP_OPCODE_3 (meta, OPCODE_META_TYPE_THIS_ARG, this_arg, INVALID_VALUE); - STACK_INCR_HEAD (U8, 1); + case AL_CALL_EXPR: + { + if (this_arg != INVALID_VALUE) + { + DUMP_OPCODE_3 (meta, OPCODE_META_TYPE_THIS_ARG, this_arg, INVALID_VALUE); + STACK_INCR_HEAD (U8, 1); + } + break; + } + default: break; } STACK_PUSH (temp_names, TEMP_NAME ()); @@ -1410,33 +1418,18 @@ parse_member_expression (idx_t *this_arg) else if (is_keyword (KW_NEW)) { skip_newlines (); - parse_member_expression (this_arg); + parse_member_expression (NULL); skip_newlines (); if (token_is (TOK_OPEN_PAREN)) { - if (this_arg) - { - parse_argument_list (AL_CONSTRUCT_EXPR, ID(1), *this_arg); // push obj - } - else - { - parse_argument_list (AL_CONSTRUCT_EXPR, ID(1), INVALID_VALUE); // push obj - } + parse_argument_list (AL_CONSTRUCT_EXPR, ID(1), INVALID_VALUE); // push obj } else { lexer_save_token (TOK ()); STACK_PUSH (IDX, next_temp_name ()); - if (this_arg) - { - DUMP_OPCODE_3 (construct_n, ID (1), ID (2), 1); - DUMP_OPCODE_3 (meta, OPCODE_META_TYPE_THIS_ARG, *this_arg, INVALID_VALUE); - } - else - { - DUMP_OPCODE_3 (construct_n, ID (1), ID (2), 0); - } + DUMP_OPCODE_3 (construct_n, ID (1), ID (2), 0); } STACK_SWAP (IDX); @@ -1511,7 +1504,7 @@ parse_call_expression (void) STACK_DECLARE_USAGE (IDX) idx_t this_arg = INVALID_VALUE; - parse_member_expression (NULL); + parse_member_expression (&this_arg); skip_newlines (); if (!token_is (TOK_OPEN_PAREN))