Lables: break and continue accept only string literals

This commit is contained in:
Andrey Breslav
2011-01-12 19:17:27 +03:00
parent 78b5f0f2b8
commit 06a70a8a40
4 changed files with 28 additions and 17 deletions
+7 -2
View File
@@ -191,11 +191,16 @@ infixFunctionCall
jump
: "throw" expression
: "return" expression?
: "continue" SimpleName
: "break" SimpleName
: "continue" stringLiteral?
: "break" stringLiteral?
// yield ?
;
stringLiteral
: StringWithTemplates
: NoEscapeString
;
tupleLiteral // Ambiguity when after a SimpleName (infix call). In this case (e) is treated as an expression in parentheses
// to put a tuple, write write ((e))
: "(" ((SimpleName "=")? expression){","} ")"
@@ -957,8 +957,13 @@ public class JetExpressionParsing extends AbstractJetParsing {
}
/*
* : "continue" SimpleName
* : "break" SimpleName
* : "continue" stringLiteral?
* : "break" stringLiteral?
*
* stringLiteral
* : StringWithTemplates
* : NoEscapeString
* ;
*/
private void parseJump(JetNodeType type) {
assert _at(BREAK_KEYWORD) || _at(CONTINUE_KEYWORD);
@@ -967,7 +972,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
advance(); // BREAK_KEYWORD or CONTINUE_KEYWORD
if (!eol() && at(IDENTIFIER)) advance(); // IDENTIFIER
if (!eol() && (at(RAW_STRING_LITERAL) || at(STRING_LITERAL))) advance(); // RAW_STRING_LITERAL or STRING_LITERAL
marker.done(type);
}
+7 -6
View File
@@ -3,9 +3,9 @@ fun a(
a : foo = throw new Foo,
a : foo = return 10,
a : foo = break,
a : foo = break la,
a : foo = break "la",
a : foo = continue,
a : foo = continue la,
a : foo = continue "la",
a : foo = if (10) foo else bar,
a : foo = if (10) foo
) {
@@ -13,11 +13,11 @@ fun a(
return
10
break
la
break la
"la"
break "la"
continue
la
continue la
"la"
continue "la"
if (foo)
if (foo)
bar
@@ -75,6 +75,7 @@ fun a(
do {
} while (false)
}
fun foo() {
for (a in b)
+6 -6
View File
@@ -27,9 +27,9 @@ fun a(
a : foo = throw new Foo,
a : foo = return 10,
a : foo = break,
a : foo = break la,
a : foo = break "la",
a : foo = continue,
a : foo = continue la,
a : foo = continue "la",
a : foo = 10,
a : foo = 10,
a : foo = 10,
@@ -39,9 +39,9 @@ fun a(
return
10
break
la
break la
"la"
break "la"
continue
la
continue la
"la"
continue "la"
}