diff options
author | Som Snytt <som.snytt@gmail.com> | 2014-11-28 13:11:48 -0800 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2014-12-05 12:13:31 -0800 |
commit | be553aaa5a765b1d1511688d58f01ec675549412 (patch) | |
tree | bbaf5500619b08c55a35a296db36962822d3a7a7 /test/files/neg/literals.scala | |
parent | 028420cd80a2cf1127790fdd28088f6db575e8dd (diff) | |
download | scala-be553aaa5a765b1d1511688d58f01ec675549412.tar.gz scala-be553aaa5a765b1d1511688d58f01ec675549412.tar.bz2 scala-be553aaa5a765b1d1511688d58f01ec675549412.zip |
SI-9015 Reject 0x and minor parser cleanup
Only print error results. Show deprecated forms.
Test for rejected literals and clean up parser
There was no negative test for what constitutes a legal literal.
The ultimate goal is for the test to report all errors in
one compilation.
This commit follows up the removal of "1." syntax to simplify
number parsing. It removes previous paulp code to contain the
erstwhile complexity.
Leading zero is not immediately put to the buffer. Instead,
the empty buffer is handled on evaluation. In particular, an
empty buffer due to `0x` is a syntax error.
The message for obsolete octal syntax is nuanced and deferred
until evaluation by the parser, which is slightly simpler to
reason about.
Improve comment on usage of base
The slice-and-dicey usage of base deserves a better
comment. The difference is that `intVal` sees an empty
char buffer for input `"0"`.
Diffstat (limited to 'test/files/neg/literals.scala')
-rw-r--r-- | test/files/neg/literals.scala | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/test/files/neg/literals.scala b/test/files/neg/literals.scala new file mode 100644 index 0000000000..3df7f0b408 --- /dev/null +++ b/test/files/neg/literals.scala @@ -0,0 +1,36 @@ + +/* This took me literally all day. +*/ +trait RejectedLiterals { + + def missingHex: Int = { 0x } // line 4: was: not reported, taken as zero + + def leadingZeros: Int = { 01 } // line 6: no leading zero + + def tooManyZeros: Int = { 00 } // line 8: no leading zero + + def zeroOfNine: Int = { 09 } // line 10: no leading zero + + def orphanDot: Int = { 9. } // line 12: ident expected + + def zeroOfNineDot: Int = { 09. } // line 14: malformed integer, ident expected + + def noHexFloat: Double = { 0x1.2 } // line 16: ';' expected but double literal found. +} + +trait Braceless { + + def missingHex: Int = 0x // line 22: was: not reported, taken as zero + + def leadingZeros: Int = 01 // line 24: no leading zero + + def tooManyZeros: Int = 00 // line 26: no leading zero + + def zeroOfNine: Int = 09 // line 28: no leading zero + + def orphanDot: Int = 9. // line 30: ident expected + + def zeroOfNineDot: Int = 09. // line 32: malformed integer, ident expected + + def noHexFloat: Double = 0x1.2 // line 34: ';' expected but double literal found. +} |