This is an automated email from the ASF dual-hosted git repository. paulk pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push: new 80895bc GROOVY-8678: allow floating point literals without leading zeroes new 8ad3f0e Merge pull request #1588 from nineninesevenfour/GROOVY-8678 80895bc is described below commit 80895bc72a3706454de294be75ee8b183b2b65f8 Author: Harald Fassler <harald.fassler+9...@gmail.com> AuthorDate: Sat Jun 5 11:13:37 2021 +0200 GROOVY-8678: allow floating point literals without leading zeroes fixes https://issues.apache.org/jira/browse/GROOVY-8678 Signed-off-by: Harald Fassler <harald.fassler+9...@gmail.com> --- src/antlr/GroovyLexer.g4 | 2 +- src/spec/test/SyntaxTest.groovy | 1 + src/test/groovy/bugs/Groovy8678.groovy | 38 ++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/antlr/GroovyLexer.g4 b/src/antlr/GroovyLexer.g4 index 6eda984..e74acac 100644 --- a/src/antlr/GroovyLexer.g4 +++ b/src/antlr/GroovyLexer.g4 @@ -633,7 +633,7 @@ FloatingPointLiteral fragment DecimalFloatingPointLiteral - : Digits Dot Digits ExponentPart? FloatTypeSuffix? + : Digits? Dot Digits ExponentPart? FloatTypeSuffix? | Digits ExponentPart FloatTypeSuffix? | Digits FloatTypeSuffix ; diff --git a/src/spec/test/SyntaxTest.groovy b/src/spec/test/SyntaxTest.groovy index 694d74c..be9b661 100644 --- a/src/spec/test/SyntaxTest.groovy +++ b/src/spec/test/SyntaxTest.groovy @@ -111,6 +111,7 @@ class SyntaxTest extends CompilableTestSupport { assert 456G == new BigInteger('456') assert 456g == new BigInteger('456') assert 123.45 == new BigDecimal('123.45') // default BigDecimal type used + assert .321 == new BigDecimal('.321') assert 1.200065D == new Double('1.200065') assert 1.234F == new Float('1.234') assert 1.23E23D == new Double('1.23E23') diff --git a/src/test/groovy/bugs/Groovy8678.groovy b/src/test/groovy/bugs/Groovy8678.groovy new file mode 100644 index 0000000..71975f1 --- /dev/null +++ b/src/test/groovy/bugs/Groovy8678.groovy @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package groovy.bugs + +import groovy.transform.CompileStatic +import org.junit.Test + +import static groovy.test.GroovyAssert.assertScript + +@CompileStatic +final class Groovy8678 { + + @Test + void testFloatingPointLiteralWithoutLeadingZero() { + assertScript ''' + def aFloat = .42 + assert (aFloat as String) == '0.42' + assert aFloat / .21 == 2 + assert aFloat / 2 == .21 + ''' + } +}