DSL is a key use case, so let's not reduce groovy's capabilities in this area, indeed.
Le 16 sept. 2017 04:23, "Paul King" <pa...@asert.com.au> a écrit : > I think this is worthy of further discussion on the mailing list. I know > it's a parrot only feature so far but supporting > command expressions in parentheses seems like a worthy feature for DSLs. > > Cheers, Paul. > > On Sat, Sep 16, 2017 at 2:02 AM, <sun...@apache.org> wrote: > >> Refine the grammar: 1)`def` is still required for performance when >> declaring tuple; 2)Stop supporting command expression in parentheses >> >> (cherry picked from commit 7c77392) >> >> >> Project: http://git-wip-us.apache.org/repos/asf/groovy/repo >> Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/21bae556 >> Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/21bae556 >> Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/21bae556 >> >> Branch: refs/heads/GROOVY_2_6_X >> Commit: 21bae556d29c2f879f92d6b00ea771deda0882ee >> Parents: b3f386a >> Author: sunlan <sun...@apache.org> >> Authored: Fri Sep 15 23:53:49 2017 +0800 >> Committer: sunlan <sun...@apache.org> >> Committed: Sat Sep 16 00:02:42 2017 +0800 >> >> ---------------------------------------------------------------------- >> src/antlr/GroovyParser.g4 | 7 ++++++- >> .../apache/groovy/parser/antlr4/AstBuilder.java | 18 >> +++++++++++++++++- >> .../groovy/parser/antlr4/GroovyParserTest.groovy | 4 +++- >> .../core/LocalVariableDeclaration_02x.groovy | 3 +++ >> 4 files changed, 29 insertions(+), 3 deletions(-) >> ---------------------------------------------------------------------- >> >> >> http://git-wip-us.apache.org/repos/asf/groovy/blob/21bae556/ >> src/antlr/GroovyParser.g4 >> ---------------------------------------------------------------------- >> diff --git a/src/antlr/GroovyParser.g4 b/src/antlr/GroovyParser.g4 >> index a03da00..3ae8366 100644 >> --- a/src/antlr/GroovyParser.g4 >> +++ b/src/antlr/GroovyParser.g4 >> @@ -812,7 +812,7 @@ parExpression >> ; >> >> expressionInPar >> - : LPAREN enhancedStatementExpression rparen >> + : LPAREN enhancedExpression rparen >> ; >> >> expressionList[boolean canSpread] >> @@ -948,6 +948,11 @@ expression >> enhancedStatementExpression >> #assignmentExprAlt >> ; >> >> +enhancedExpression >> + : expression >> + | standardLambdaExpression >> + ; >> + >> commandExpression >> : pathExpression >> ( >> >> http://git-wip-us.apache.org/repos/asf/groovy/blob/21bae556/ >> subprojects/parser-antlr4/src/main/java/org/apache/groovy/ >> parser/antlr4/AstBuilder.java >> ---------------------------------------------------------------------- >> diff --git >> a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java >> b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/ >> parser/antlr4/AstBuilder.java >> index a9a29fc..4239300 100644 >> --- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/ >> parser/antlr4/AstBuilder.java >> +++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/ >> parser/antlr4/AstBuilder.java >> @@ -1806,6 +1806,22 @@ public class AstBuilder extends >> GroovyParserBaseVisitor<Object> implements Groov >> } >> >> @Override >> + public Expression visitEnhancedExpression(EnhancedExpressionContext >> ctx) { >> + Expression expression; >> + >> + if (asBoolean(ctx.expression())) { >> + expression = (Expression) this.visit(ctx.expression()); >> + } else if (asBoolean(ctx.standardLambdaExpression())) { >> + expression = this.visitStandardLambdaExpression(ctx. >> standardLambdaExpression()); >> + } else { >> + throw createParsingFailedException("Unsupported enhanced >> expression: " + ctx.getText(), ctx); >> + } >> + >> + return configureAST(expression, ctx); >> + } >> + >> + >> + @Override >> public ExpressionStatement visitCommandExprAlt(CommandExprAltContext >> ctx) { >> return configureAST(new ExpressionStatement(this.visit >> CommandExpression(ctx.commandExpression())), ctx); >> } >> @@ -1929,7 +1945,7 @@ public class AstBuilder extends >> GroovyParserBaseVisitor<Object> implements Groov >> >> @Override >> public Expression visitExpressionInPar(ExpressionInParContext ctx) { >> - return this.visitEnhancedStatementExp >> ression(ctx.enhancedStatementExpression()); >> + return this.visitEnhancedExpression(ctx.enhancedExpression()); >> } >> >> @Override >> >> http://git-wip-us.apache.org/repos/asf/groovy/blob/21bae556/ >> subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/ >> parser/antlr4/GroovyParserTest.groovy >> ---------------------------------------------------------------------- >> diff --git a/subprojects/parser-antlr4/src/test/groovy/org/apache/groov >> y/parser/antlr4/GroovyParserTest.groovy b/subprojects/parser-antlr4/sr >> c/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy >> index 4ff6ad3..5b3fb7b 100644 >> --- a/subprojects/parser-antlr4/src/test/groovy/org/apache/groov >> y/parser/antlr4/GroovyParserTest.groovy >> +++ b/subprojects/parser-antlr4/src/test/groovy/org/apache/groov >> y/parser/antlr4/GroovyParserTest.groovy >> @@ -290,6 +290,8 @@ class GroovyParserTest extends GroovyTestCase { >> >> void "test groovy core - LocalVariableDeclaration"() { >> doTest('core/LocalVariableDeclaration_01.groovy', [Token]); // >> [class org.codehaus.groovy.syntax.Token][startLine]:: 9 != 8 >> + doRunAndTest('core/LocalVariableDeclaration_02x.groovy') >> + >> } >> >> void "test groovy core - MethodDeclaration"() { >> @@ -339,7 +341,7 @@ class GroovyParserTest extends GroovyTestCase { >> doTest('core/Command_03.groovy', [ExpressionStatement, >> Parameter]); >> doTest('core/Command_04.groovy', [ExpressionStatement]); >> doTest('core/Command_05.groovy'); >> - doRunAndTest('core/Command_06x.groovy') >> +// doRunAndTest('core/Command_06x.groovy') >> } >> >> /* >> >> http://git-wip-us.apache.org/repos/asf/groovy/blob/21bae556/ >> subprojects/parser-antlr4/src/test/resources/core/ >> LocalVariableDeclaration_02x.groovy >> ---------------------------------------------------------------------- >> diff --git >> a/subprojects/parser-antlr4/src/test/resources/core/LocalVariableDeclaration_02x.groovy >> b/subprojects/parser-antlr4/src/test/resources/core/LocalVar >> iableDeclaration_02x.groovy >> new file mode 100644 >> index 0000000..1e3a2ba >> --- /dev/null >> +++ b/subprojects/parser-antlr4/src/test/resources/core/LocalVar >> iableDeclaration_02x.groovy >> @@ -0,0 +1,3 @@ >> +def (int x, int y) = [1, 2] >> +assert 1 == x >> +assert 2 == y >> >> >