diff options
author | Som Snytt <som.snytt@gmail.com> | 2017-02-17 16:29:41 -0800 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2017-02-18 11:51:20 -0800 |
commit | f3d271b514f08761385991734d66664f25024e50 (patch) | |
tree | 4cf9ebc8dedefe9c782bffcdd6516919ee531a18 /src/compiler/scala/tools/nsc/ast/parser/Scanners.scala | |
parent | db8520e5c45d9ce24912849fad16a5c1b54a09b9 (diff) | |
download | scala-f3d271b514f08761385991734d66664f25024e50.tar.gz scala-f3d271b514f08761385991734d66664f25024e50.tar.bz2 scala-f3d271b514f08761385991734d66664f25024e50.zip |
SI-10148 Accept verbose zero
The test for non-zero must recognize `-0e+00f` and variants.
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/parser/Scanners.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Scanners.scala | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala index 226c49ec07..3ed1570c1c 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala @@ -983,6 +983,8 @@ trait Scanners extends ScannersCommon { def intVal: Long = intVal(negated = false) + private val zeroFloat = raw"[0.]+(?:[eE][+-]?[0-9]+)?[fFdD]?".r + /** Convert current strVal, base to float value. */ def floatVal(negated: Boolean): Float = { @@ -990,8 +992,7 @@ trait Scanners extends ScannersCommon { val value: Float = java.lang.Float.parseFloat(strVal) if (value > Float.MaxValue) syntaxError("floating point number too large") - val zeroly = "0.fF" - if (value == 0.0f && strVal.exists(c => !zeroly.contains(c))) + if (value == 0.0f && !zeroFloat.pattern.matcher(strVal).matches) syntaxError("floating point number too small") if (negated) -value else value } catch { @@ -1010,8 +1011,7 @@ trait Scanners extends ScannersCommon { val value: Double = java.lang.Double.parseDouble(strVal) if (value > Double.MaxValue) syntaxError("double precision floating point number too large") - val zeroly = "0.dD" - if (value == 0.0d && strVal.exists(c => !zeroly.contains(c))) + if (value == 0.0d && !zeroFloat.pattern.matcher(strVal).matches) syntaxError("double precision floating point number too small") if (negated) -value else value } catch { |