diff options
Diffstat (limited to 'lib/parse.js')
-rw-r--r-- | lib/parse.js | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/lib/parse.js b/lib/parse.js index c042a60b..5eb75441 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -774,10 +774,15 @@ function parse($TEXT, options) { function expect(punc) { return expect_token("punc", punc); }; + function has_newline_before(token) { + return token.nlb || !all(token.comments_before, function(comment) { + return !comment.nlb; + }); + } + function can_insert_semicolon() { - return !options.strict && ( - S.token.nlb || is("eof") || is("punc", "}") - ); + return !options.strict + && (is("eof") || is("punc", "}") || has_newline_before(S.token)); }; function semicolon(optional) { @@ -817,10 +822,10 @@ function parse($TEXT, options) { if (S.in_directives) { var token = peek(); if (S.token.raw.indexOf("\\") == -1 - && (token.nlb - || is_token(token, "eof") - || is_token(token, "punc", ";") - || is_token(token, "punc", "}"))) { + && (is_token(token, "punc", ";") + || is_token(token, "punc", "}") + || has_newline_before(token) + || is_token(token, "eof"))) { S.input.add_directive(S.token.value); } else { S.in_directives = false; @@ -927,7 +932,7 @@ function parse($TEXT, options) { case "throw": next(); - if (S.token.nlb) + if (has_newline_before(S.token)) croak("Illegal newline after 'throw'"); var value = expression(true); semicolon(); @@ -1503,7 +1508,7 @@ function parse($TEXT, options) { return ex; } var val = expr_atom(allow_calls); - while (is("operator") && UNARY_POSTFIX(S.token.value) && !S.token.nlb) { + while (is("operator") && UNARY_POSTFIX(S.token.value) && !has_newline_before(S.token)) { val = make_unary(AST_UnaryPostfix, S.token, val); val.start = start; val.end = S.token; |