From 228cbca9bef303fa5123346d7e3bd32d74e37eef Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Fri, 10 Jan 2014 11:23:45 +0100 Subject: [PATCH] Reorder statement cases to align with spec text. --- js-parse.c | 134 ++++++++++++++++++++++++++--------------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/js-parse.c b/js-parse.c index ec56c11..af87134 100644 --- a/js-parse.c +++ b/js-parse.c @@ -557,67 +557,17 @@ static js_Ast *statement(js_State *J) return block(J); } + if (accept(J, TK_VAR)) { + a = vardeclist(J, 0); + semicolon(J); + return STM1(VAR, a); + } + + /* empty statement */ if (accept(J, ';')) { return STM0(NOP); } - if (accept(J, TK_CONTINUE)) { - a = identifieropt(J); - semicolon(J); - return STM1(CONTINUE, a); - } - - if (accept(J, TK_BREAK)) { - a = identifieropt(J); - semicolon(J); - return STM1(BREAK, a); - } - - if (accept(J, TK_RETURN)) { - if (J->lookahead != ';' && J->lookahead != '}' && J->lookahead != 0) - a = expression(J, 0); - else - a = NULL; - semicolon(J); - return STM1(RETURN, a); - } - - if (accept(J, TK_WITH)) { - expect(J, '('); - a = expression(J, 0); - expect(J, ')'); - b = statement(J); - return STM2(WITH, a, b); - } - - if (accept(J, TK_THROW)) { - a = expression(J, 0); - semicolon(J); - return STM1(THROW, a); - } - - if (accept(J, TK_TRY)) { - a = block(J); - b = c = d = NULL; - if (accept(J, TK_CATCH)) { - expect(J, '('); - b = identifier(J); - expect(J, ')'); - c = block(J); - } - if (accept(J, TK_FINALLY)) { - d = block(J); - } - if (!b && !d) - jsP_error(J, "unexpected token in try: %s (expected 'catch' or 'finally')", TOKSTR); - return STM4(TRY, a, b, c, d); - } - - if (accept(J, TK_DEBUGGER)) { - semicolon(J); - return STM0(DEBUGGER); - } - if (accept(J, TK_IF)) { expect(J, '('); a = expression(J, 0); @@ -648,16 +598,39 @@ static js_Ast *statement(js_State *J) return STM2(WHILE, a, b); } - if (accept(J, TK_VAR)) { - a = vardeclist(J, 0); - semicolon(J); - return STM1(VAR, a); - } - if (accept(J, TK_FOR)) { return forstatement(J); } + if (accept(J, TK_CONTINUE)) { + a = identifieropt(J); + semicolon(J); + return STM1(CONTINUE, a); + } + + if (accept(J, TK_BREAK)) { + a = identifieropt(J); + semicolon(J); + return STM1(BREAK, a); + } + + if (accept(J, TK_RETURN)) { + if (J->lookahead != ';' && J->lookahead != '}' && J->lookahead != 0) + a = expression(J, 0); + else + a = NULL; + semicolon(J); + return STM1(RETURN, a); + } + + if (accept(J, TK_WITH)) { + expect(J, '('); + a = expression(J, 0); + expect(J, ')'); + b = statement(J); + return STM2(WITH, a, b); + } + if (accept(J, TK_SWITCH)) { expect(J, '('); a = expression(J, 0); @@ -668,8 +641,35 @@ static js_Ast *statement(js_State *J) return STM2(SWITCH, a, b); } - /* LabelledStatement : Identifier ':' Statement */ - /* ExpressionStatement : Expression ';' */ + if (accept(J, TK_THROW)) { + a = expression(J, 0); + semicolon(J); + return STM1(THROW, a); + } + + if (accept(J, TK_TRY)) { + a = block(J); + b = c = d = NULL; + if (accept(J, TK_CATCH)) { + expect(J, '('); + b = identifier(J); + expect(J, ')'); + c = block(J); + } + if (accept(J, TK_FINALLY)) { + d = block(J); + } + if (!b && !d) + jsP_error(J, "unexpected token in try: %s (expected 'catch' or 'finally')", TOKSTR); + return STM4(TRY, a, b, c, d); + } + + if (accept(J, TK_DEBUGGER)) { + semicolon(J); + return STM0(DEBUGGER); + } + + /* labelled statement or expression statement */ if (J->lookahead == TK_IDENTIFIER) { a = expression(J, 0); if (a->type == AST_IDENTIFIER && accept(J, ':')) { @@ -680,8 +680,8 @@ static js_Ast *statement(js_State *J) return a; } - /* ExpressionStatement : [lookahead not 'function' or '{'] Expression ';' */ - if (J->lookahead != TK_FUNCTION && J->lookahead != '{') { + /* expression statement */ + if (J->lookahead != TK_FUNCTION) { a = expression(J, 0); semicolon(J); return a;