diff --git a/src/libjsparser/lexer.c b/src/libjsparser/lexer.c index 56b1d77f6..1f98db206 100644 --- a/src/libjsparser/lexer.c +++ b/src/libjsparser/lexer.c @@ -889,13 +889,6 @@ lexer_next_token_private (void) { char c = LA (0); - if (!is_empty (saved_token)) - { - token res = saved_token; - saved_token = empty_token; - return res; - } - JERRY_ASSERT (token_start == NULL); if (__isalpha (c) || c == '$' || c == '_') @@ -1043,20 +1036,29 @@ lexer_next_token (void) dump_current_line (); } + if (!is_empty (saved_token)) + { + sent_token = saved_token; + saved_token = empty_token; + goto end; + } + prev_token = sent_token; sent_token = lexer_next_token_private (); if (sent_token.type == TOK_NEWLINE) { dump_current_line (); - return sent_token; } + +end: return sent_token; } void lexer_save_token (token tok) { + JERRY_ASSERT (is_empty (saved_token)); saved_token = tok; } diff --git a/src/libjsparser/parser.c b/src/libjsparser/parser.c index 5aa0224d3..7516f905f 100644 --- a/src/libjsparser/parser.c +++ b/src/libjsparser/parser.c @@ -1132,7 +1132,7 @@ parse_function_expression (void) parse_source_element_list (false); pop_nesting (NESTING_FUNCTION); - token_after_newlines_must_be (TOK_CLOSE_BRACE); + next_token_must_be (TOK_CLOSE_BRACE); DUMP_VOID_OPCODE (ret); rewrite_meta_opcode_counter (STACK_TOP (U16), OPCODE_META_TYPE_FUNCTION_END); @@ -3001,8 +3001,9 @@ insert_semicolon (void) { // We cannot use TOK (), since we may use lexer_save_token skip_token (); - if (lexer_prev_token ().type == TOK_NEWLINE) + if (token_is (TOK_NEWLINE) || lexer_prev_token ().type == TOK_NEWLINE) { + lexer_save_token (TOK ()); return; } if (!token_is (TOK_SEMICOLON)) diff --git a/src/liboptimizer/pretty-printer.c b/src/liboptimizer/pretty-printer.c index f602d2aa6..47e9a76ea 100644 --- a/src/liboptimizer/pretty-printer.c +++ b/src/liboptimizer/pretty-printer.c @@ -439,9 +439,7 @@ pp_opcode (opcode_counter_t oc, opcode_t opcode, bool is_rewrite) CASE_SINGLE_ADDRESS (retval, "return", ret_value) CASE_ZERO_ADDRESS (ret, "return") CASE_ZERO_ADDRESS (nop, "") - TODO (Refine to match new opcodes) CASE_VARG_1_LHS (array_decl, lhs, "=", "[", list, "]") - TODO (Refine to match new opcodes) CASE_VARG_0_LHS (obj_decl, lhs, "=", "{", "}") CASE_VARG_1_NAME_LHS (prop_getter, lhs, "=", "", obj, "[", prop, "]") CASE_VARG_1_NAME_LHS (prop_setter, obj, "", "[", prop, " ] = ", rhs, "") @@ -453,6 +451,14 @@ pp_opcode (opcode_counter_t oc, opcode_t opcode, bool is_rewrite) CASE_VARG_0_NAME (var_decl, "var", variable_name, "", "") CASE_REG_VAR_DECL (reg_var_decl, min, max) CASE_NATIVE_CALL (native_call, lhs, "=", "", name, arg_list) + case NAME_TO_ID (func_expr_n): + { + dump_variable (opcode.data.func_expr_n.lhs); + __printf (" = function "); + dump_variable (opcode.data.func_expr_n.name_lit_idx); + __printf (" (%d args);", opcode.data.func_expr_n.arg_list); + break; + } } if (is_rewrite)