summaryrefslogtreecommitdiff
path: root/test/files/neg/t5702-neg-bad-xbrace.scala
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2012-04-22 02:58:26 -0700
committerSom Snytt <som.snytt@gmail.com>2012-04-26 11:44:39 -0700
commit9d925a30c73ee5856c83d3caab124f7dbeaa85a8 (patch)
treed7a14c7d0466435523452ed2cc88fe3d82c9e9b6 /test/files/neg/t5702-neg-bad-xbrace.scala
parent3c9c18ddccc17c2b0e62195315ba2abb72d3b761 (diff)
downloadscala-9d925a30c73ee5856c83d3caab124f7dbeaa85a8.tar.gz
scala-9d925a30c73ee5856c83d3caab124f7dbeaa85a8.tar.bz2
scala-9d925a30c73ee5856c83d3caab124f7dbeaa85a8.zip
SI-5702 Pattern parser halts on star
In patterns, the parser halts when it sees stars. This means it does not handle infix notation for a case class named "*". This patch uses lookahead to decide whether to parse '_' '*' as a sequence pattern or as the start of infix. (For both normal and error cases, the tokens are always consumed immediately.) Error messages are improved for _* (as a help to learners) and slightly improved recovery helps the parse continue. The entry point for XML patterns is now distinct; otherwise, the change is local to pattern3-simplepattern; the entry point for simplepattern() is unchanged because it is commented "hook for IDE."
Diffstat (limited to 'test/files/neg/t5702-neg-bad-xbrace.scala')
-rw-r--r--test/files/neg/t5702-neg-bad-xbrace.scala31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/files/neg/t5702-neg-bad-xbrace.scala b/test/files/neg/t5702-neg-bad-xbrace.scala
new file mode 100644
index 0000000000..64bbdb18be
--- /dev/null
+++ b/test/files/neg/t5702-neg-bad-xbrace.scala
@@ -0,0 +1,31 @@
+
+object Test {
+ def main(args: Array[String]) {
+ /* PiS example, minus a brace
+ val yearMade = 1965
+ val old =
+ <a>{ if (yearMade < 2000) <old>yearMade}</old>
+ else xml.NodeSeq.Empty } </a>
+ println(old)
+ */
+
+ // bad brace or paren after _*
+ // actually, we know it's a bad paren...
+ // we skip it because not in a context looking for rparen
+ val xyear = <year>1965</year>
+ val ancient =
+ <b>{
+ val when = xyear match {
+ case <year>{_*)}</year> => y
+ case _ => "2035"
+ }
+ <old>{when}</old>
+ }</b>
+ println(ancient)
+
+ val xml = <top><a>apple</a><b>boy</b><c>child</c></top>
+ // bad brace or paren after _*
+ val <top>{a, z@_*)}</top> = xml
+ println("A for "+ a +", ending with "+ z)
+ }
+}