diff options
author | 2015-03-17 19:29:13 +0000 | |
---|---|---|
committer | 2015-03-18 13:45:21 +0000 | |
commit | 5f6744550a98506ed680b389cfdc872fe07daed5 (patch) | |
tree | 4310f649a03a24da973e1f0090b7cf392589d731 | |
parent | 6683d645ff3a1f3aedc4b7d559b9fbe4d7bcafc4 (diff) |
Parser: allow multiple statements on the same line as the colon
e.g. def foo(x, y): print(x); print(y)
Bug found when adding the pass statement.
--
MOS_MIGRATED_REVID=88852710
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/Parser.java | 5 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java | 8 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java index 56a32e937d..6a856f65e8 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java @@ -1210,6 +1210,7 @@ class Parser { return ImmutableList.copyOf(arguments); } + // suite is typically what follows a colon (e.g. after def or for). // suite ::= simple_stmt // | NEWLINE INDENT stmt+ OUTDENT private List<Statement> parseSuite() { @@ -1227,9 +1228,7 @@ class Parser { } expect(TokenKind.OUTDENT); } else { - Statement stmt = parseSmallStatement(); - list.add(stmt); - expect(TokenKind.NEWLINE); + parseSimpleStatement(list); } return list; } diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java index 51da72ce45..b6741c4c78 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java @@ -756,6 +756,14 @@ public class ParserTest extends AbstractParserTestCase { } @Test + public void testDefSingleLine() throws Exception { + List<Statement> statements = parseFileForSkylark( + "def foo(): x = 1; y = 2\n"); + FunctionDefStatement stmt = (FunctionDefStatement) statements.get(0); + assertThat(stmt.getStatements()).hasSize(2); + } + + @Test public void testSkipIfBlock() throws Exception { // Skip over 'if' blocks, when parsePython is set List<Statement> stmts = parseFile( |