summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2007-03-03 01:57:21 +0000
committerBurak Emir <emir@epfl.ch>2007-03-03 01:57:21 +0000
commitc5455747a9e2e840668b333e31fadcee5a85318a (patch)
tree5b9112a5762035f50c2145c2ee9cfe036de7ed41
parente46e66a0196d0ee950b08d5946fcee44cfddeef3 (diff)
downloadscala-c5455747a9e2e840668b333e31fadcee5a85318a.tar.gz
scala-c5455747a9e2e840668b333e31fadcee5a85318a.tar.bz2
scala-c5455747a9e2e840668b333e31fadcee5a85318a.zip
HasKeyValue does not work? added pending/jvm/ba...
HasKeyValue does not work? added pending/jvm/backendBugUnapply fixed xml parsing, supports the ever-growing stateful scanner hacks now (sepRegions)
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala19
-rw-r--r--test/files/jvm/unittest_xml.scala6
-rw-r--r--test/files/neg/xmlcorner.scala16
-rw-r--r--test/pending/jvm/backendBugUnapply.scala9
4 files changed, 41 insertions, 9 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
index 3c1a7f3dd1..c63b701f85 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
@@ -31,10 +31,6 @@ class MarkupParser(unit: CompilationUnit, s: Scanner, p: Parser, presWS: boolean
import p.{symbXMLBuilder => handle}
import s.token
- /** the XML tree factory */
- //final val handle: SymbolicXMLBuilder = p.symbXMLBuilder;
- //new SymbolicXMLBuilder(unit.global.make, unit.global.treeGen, p, presWS);
-
/** holds the position in the source file */
/*[Duplicate]*/ var pos: Int = _
@@ -497,7 +493,7 @@ class MarkupParser(unit: CompilationUnit, s: Scanner, p: Parser, presWS: boolean
*/
def xLiteral: Tree = try {
//Console.println("entering xLiteral!!")
- init
+ init; pushScannerState
handle.isPattern = false
val pos = s.currentPos
var lastend = 0
@@ -536,7 +532,8 @@ class MarkupParser(unit: CompilationUnit, s: Scanner, p: Parser, presWS: boolean
//}
//Console.println("out of xLiteral, parsed:"+tree.toString());
s.next.token = Tokens.EMPTY;
- s.nextToken(); /* s.fetchToken(); */
+ s.nextToken()
+ popScannerState
tree
}
catch {
@@ -552,13 +549,14 @@ class MarkupParser(unit: CompilationUnit, s: Scanner, p: Parser, presWS: boolean
* precondition: s.xStartsXML == true
*/
def xLiteralPattern:Tree = try {
- init;
+ init; pushScannerState
val oldMode = handle.isPattern;
handle.isPattern = true;
var tree = xPattern; xSpaceOpt;
handle.isPattern = oldMode;
s.next.token = Tokens.EMPTY;
s.nextToken()
+ popScannerState
tree
} catch {
case _:ArrayIndexOutOfBoundsException =>
@@ -596,6 +594,13 @@ class MarkupParser(unit: CompilationUnit, s: Scanner, p: Parser, presWS: boolean
def nextch: Unit = { s.in.next; /*s.xNext;*/ ch = s.in.ch ; pos = s.in.cpos; }
//def lookahead = { s.xLookahead }
+ var scannerState: List[List[Int]] = Nil
+
+ def pushScannerState { scannerState = s.sepRegions::scannerState }
+ def popScannerState {
+ s.sepRegions = scannerState.head;
+ scannerState = scannerState.tail
+ }
def init: Unit = {
ch = s.in.ch;
diff --git a/test/files/jvm/unittest_xml.scala b/test/files/jvm/unittest_xml.scala
index b6d3da00f5..312b69d529 100644
--- a/test/files/jvm/unittest_xml.scala
+++ b/test/files/jvm/unittest_xml.scala
@@ -7,7 +7,7 @@ object Test {
class ParsingTest extends TestCase("scala.xml.Parsing") with Assert {
override def runTest = {
assertTrue(Parsing.isNameStart('b'))
- assertTrue(Parsing.isNameStart(':'))
+ assertFalse(Parsing.isNameStart(':'))
}
}
class MetaDataTest extends TestCase("scala.xml.MetaData") with Assert {
@@ -17,7 +17,9 @@ object Test {
def domatch(x:Node): Node = {
val hasBar = new HasKeyValue("bar")
x match {
- case Node("foo", hasBar(z), _*) => z
+ //case Node("foo", hasBar(z), _*) => z
+ case Node("foo", md, _*) if !hasBar.unapplySeq(md).isEmpty =>
+ md("bar")(0)
case _ => new Atom(3)
}
}
diff --git a/test/files/neg/xmlcorner.scala b/test/files/neg/xmlcorner.scala
index 9f1c55bce4..042ec05e68 100644
--- a/test/files/neg/xmlcorner.scala
+++ b/test/files/neg/xmlcorner.scala
@@ -4,3 +4,19 @@ class foo {
class bar {
val wrong = <bla: />
}
+
+// this "pos" test is only included as a parser test
+object pos
+{
+ def wrap(f : Int => Unit) = f(5)
+
+ wrap({ v =>
+ if(v == 5) {
+ val n = {
+ val m = (<a>{}</a>)
+ <div>{ v }</div>
+ }
+ ()
+ }
+ })
+}
diff --git a/test/pending/jvm/backendBugUnapply.scala b/test/pending/jvm/backendBugUnapply.scala
new file mode 100644
index 0000000000..f8abfeb713
--- /dev/null
+++ b/test/pending/jvm/backendBugUnapply.scala
@@ -0,0 +1,9 @@
+object Test { import scala.xml.{Node,HasKeyValue}
+ def domatch(x:Node): Node = {
+ val hasBar = new HasKeyValue("bar")
+ x match {
+ case Node("foo", hasBar(z), _*) => z
+ case _ => null
+ }
+ }
+}