summaryrefslogtreecommitdiff
path: root/test/files/neg/literals.scala
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2014-11-28 13:11:48 -0800
committerSom Snytt <som.snytt@gmail.com>2014-12-05 12:13:31 -0800
commitbe553aaa5a765b1d1511688d58f01ec675549412 (patch)
treebbaf5500619b08c55a35a296db36962822d3a7a7 /test/files/neg/literals.scala
parent028420cd80a2cf1127790fdd28088f6db575e8dd (diff)
downloadscala-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.scala36
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.
+}