Merge branch 'master' into harmony-v3.3.2

This commit is contained in:
alexlamsl
2017-12-26 01:46:22 +08:00
3 changed files with 49 additions and 11 deletions

View File

@@ -934,10 +934,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 is_in_generator() {
@@ -985,10 +990,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;
@@ -1111,7 +1116,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();
@@ -1287,7 +1292,7 @@ function parse($TEXT, options) {
};
var arrow_function = function(start, argnames, is_async) {
if (S.token.nlb) {
if (has_newline_before(S.token)) {
croak("Unexpected newline before arrow (=>)");
}
@@ -2738,7 +2743,7 @@ function parse($TEXT, options) {
return ex;
}
var val = expr_atom(allow_calls, allow_arrows);
while (is("operator") && UNARY_POSTFIX(S.token.value) && !S.token.nlb) {
while (is("operator") && UNARY_POSTFIX(S.token.value) && !has_newline_before(S.token)) {
if (val instanceof AST_Arrow) unexpected();
val = make_unary(AST_UnaryPostfix, S.token, val);
val.start = start;