You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/07/11 20:36:43 UTC
[groovy] branch GROOVY-8965 updated: retain primitive semantics for negative number literal
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY-8965
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY-8965 by this push:
new 838c6f4eab retain primitive semantics for negative number literal
838c6f4eab is described below
commit 838c6f4eab401c5da0221497a006238786675fa0
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon Jul 11 15:29:21 2022 -0500
retain primitive semantics for negative number literal
---
.../apache/groovy/parser/antlr4/AstBuilder.java | 72 +++++++++-------------
.../classgen/asm/sc/BugsStaticCompileTest.groovy | 2 +-
2 files changed, 31 insertions(+), 43 deletions(-)
diff --git a/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 801d0dd1cb..ab181843c9 100644
--- a/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -3257,56 +3257,44 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
@Override
public Expression visitUnaryAddExprAlt(final UnaryAddExprAltContext ctx) {
- ExpressionContext expressionCtx = ctx.expression();
- Expression expression = (Expression) this.visit(expressionCtx);
-
+ Expression expression = (Expression) this.visit(ctx.expression());
switch (ctx.op.getType()) {
- case ADD: {
- if (isNonStringConstantOutsideParentheses(expression)) {
- return configureAST(expression, ctx);
- }
-
- return configureAST(new UnaryPlusExpression(expression), ctx);
+ case ADD:
+ if (this.isNonStringConstantOutsideParentheses(expression)) {
+ return configureAST(expression, ctx);
}
- case SUB: {
- if (isNonStringConstantOutsideParentheses(expression)) {
- ConstantExpression constantExpression = (ConstantExpression) expression;
-
- try {
- String integerLiteralText = constantExpression.getNodeMetaData(INTEGER_LITERAL_TEXT);
- if (null != integerLiteralText) {
-
- ConstantExpression result = new ConstantExpression(Numbers.parseInteger(SUB_STR + integerLiteralText));
-
- this.numberFormatError = null; // reset the numberFormatError
-
- return configureAST(result, ctx);
- }
-
- String floatingPointLiteralText = constantExpression.getNodeMetaData(FLOATING_POINT_LITERAL_TEXT);
- if (null != floatingPointLiteralText) {
- ConstantExpression result = new ConstantExpression(Numbers.parseDecimal(SUB_STR + floatingPointLiteralText));
-
- this.numberFormatError = null; // reset the numberFormatError
-
- return configureAST(result, ctx);
- }
- } catch (Exception e) {
- throw createParsingFailedException(e.getMessage(), ctx);
+ return configureAST(new UnaryPlusExpression(expression), ctx);
+
+ case SUB:
+ if (this.isNonStringConstantOutsideParentheses(expression)) {
+ ConstantExpression constantExpression = (ConstantExpression) expression;
+ try {
+ String integerLiteralText = constantExpression.getNodeMetaData(INTEGER_LITERAL_TEXT);
+ if (integerLiteralText != null) {
+ ConstantExpression result = new ConstantExpression(Numbers.parseInteger(SUB_STR + integerLiteralText), true);
+ this.numberFormatError = null; // reset
+ return configureAST(result, ctx);
}
- throw new GroovyBugError("Failed to find the original number literal text: " + constantExpression.getText());
+ String floatingPointLiteralText = constantExpression.getNodeMetaData(FLOATING_POINT_LITERAL_TEXT);
+ if (floatingPointLiteralText != null) {
+ ConstantExpression result = new ConstantExpression(Numbers.parseDecimal(SUB_STR + floatingPointLiteralText), true);
+ this.numberFormatError = null; // reset
+ return configureAST(result, ctx);
+ }
+ } catch (Exception e) {
+ throw this.createParsingFailedException(e.getMessage(), ctx);
}
-
- return configureAST(new UnaryMinusExpression(expression), ctx);
+ throw new GroovyBugError("Failed to find the original number literal text: " + constantExpression.getText());
}
+ return configureAST(new UnaryMinusExpression(expression), ctx);
- case INC:
- case DEC:
- return configureAST(new PrefixExpression(this.createGroovyToken(ctx.op), expression), ctx);
+ case INC:
+ case DEC:
+ return configureAST(new PrefixExpression(this.createGroovyToken(ctx.op), expression), ctx);
- default:
- throw createParsingFailedException("Unsupported unary operation: " + ctx.getText(), ctx);
+ default:
+ throw this.createParsingFailedException("Unsupported unary operation: " + ctx.getText(), ctx);
}
}
diff --git a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
index c78f02a04a..b608b6879c 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
@@ -1355,7 +1355,7 @@ println someInt
class Foo {
long rankOrderingOrId
void setRankOrderingOrId(long rankOrderingOrId) {
- this.rankOrderingOrId = rankOrderingOrId < 0 ? -1L : rankOrderingOrId
+ this.rankOrderingOrId = rankOrderingOrId < 0 ? -1 : rankOrderingOrId
}
}
def f = new Foo()