diff --git a/compiler/java/com/google/dart/compiler/parser/DartParser.java b/compiler/java/com/google/dart/compiler/parser/DartParser.java index ee69b4128fa..83482536987 100644 --- a/compiler/java/com/google/dart/compiler/parser/DartParser.java +++ b/compiler/java/com/google/dart/compiler/parser/DartParser.java @@ -974,7 +974,7 @@ public class DartParser extends CompletionHooksParserBase { private DartNode parseFieldOrMethod(boolean allowStatic) { beginClassMember(); Modifiers modifiers = Modifiers.NONE; - if (optionalPseudoKeyword(STATIC_KEYWORD)) { + if (peek(1) != Token.LPAREN && optionalPseudoKeyword(STATIC_KEYWORD)) { if (!allowStatic) { reportError(position(), ParserErrorCode.TOP_LEVEL_CANNOT_BE_STATIC); } else { diff --git a/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java b/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java index 78510d7d6e2..e3178944b56 100644 --- a/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java +++ b/compiler/javatests/com/google/dart/compiler/parser/SyntaxTest.java @@ -576,6 +576,24 @@ public class SyntaxTest extends AbstractParserTest { " typedef();", "}")); } + + /** + * We should be able to parse "static(abstract) => 42" top-level function. + *
+ * http://code.google.com/p/dart/issues/detail?id=1197 + */ + public void test_staticAsFunctionName() { + DartUnit unit = parseUnit( + getName(), + Joiner.on("\n").join( + "// filler filler filler filler filler filler filler filler filler filler", + "static(abstract) => 42;", + "")); + assertEquals(1, unit.getTopLevelNodes().size()); + DartMethodDefinition method = (DartMethodDefinition) unit.getTopLevelNodes().get(0); + assertEquals("static", method.getName().toSource()); + assertEquals("abstract", method.getFunction().getParameters().get(0).getName().toSource()); + } /** * The token 'super' is valid by itself (not as a qualifier or assignment selector) in only some diff --git a/tests/language/language.status b/tests/language/language.status index 837bf764755..f4a9a2ee899 100644 --- a/tests/language/language.status +++ b/tests/language/language.status @@ -100,7 +100,6 @@ private_member3_negative_test: Fail # Issue 2383 pseudo_kw_illegal_test/08: Fail # Issue 356 pseudo_kw_illegal_test/10: Fail # Issue 356 pseudo_kw_illegal_test/14: Fail # Issue 356 -pseudo_kw_test: Fail # Issue 356 scope_negative_test: Fail # Runtime only test, rewrite as multitest static_call_wrong_argument_count_negative_test: Fail # Runtime only test, rewrite as multitest switch7_negative_test: Fail # Issue 3658