summaryrefslogtreecommitdiff
path: root/src
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 /src
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)
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala19
1 files changed, 12 insertions, 7 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;