summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2004-06-11 09:35:32 +0000
committerburaq <buraq@epfl.ch>2004-06-11 09:35:32 +0000
commitd03b5fd70e6514cd87e15de1fb49b63967857a8d (patch)
treedd1d9101e712c7f4cfb8c8f00852022ac93728fe /sources
parentaa86bdc4153bc7fec3d04dd3999a1a43742d22e8 (diff)
downloadscala-d03b5fd70e6514cd87e15de1fb49b63967857a8d.tar.gz
scala-d03b5fd70e6514cd87e15de1fb49b63967857a8d.tar.bz2
scala-d03b5fd70e6514cd87e15de1fb49b63967857a8d.zip
bugfix in XML literal parsing
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/scalac/ast/parser/MarkupParser.scala12
-rw-r--r--sources/scala/tools/scalac/ast/parser/Scanner.scala13
2 files changed, 16 insertions, 9 deletions
diff --git a/sources/scala/tools/scalac/ast/parser/MarkupParser.scala b/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
index 6b0894abe4..a33e7fc810 100644
--- a/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
+++ b/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
@@ -378,6 +378,7 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser, preserveWS:boolean ) {
s.xNext;
gen.mkStringLit( pos, tmp )
case '{' =>
+ s.xNext;
xScalaExpr;
case _ =>
s.xSyntaxError( "' or \" delimited attribute value or '{' scala-expr '}' expected" );
@@ -411,7 +412,7 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser, preserveWS:boolean ) {
/* [42] '<' xmlEndTag ::= '<' '/' Name S? '>' */
def xEndTag( n:Name ) = {
s.xToken('/');
- if( n != s.xName ) s.xSyntaxError( "expected closing tag of " + n );
+ if(n != s.xName) s.xSyntaxError( "expected closing tag of " + n );
s.xSpaceOpt;
s.xToken('>')
}
@@ -419,7 +420,7 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser, preserveWS:boolean ) {
def xScalaExpr:Tree = {
s.xSync;
val b = p.expr(true,false);
- if( s.token != RBRACE )
+ if(s.token != RBRACE)
s.xSyntaxError(" expected end of Scala block");
return b
}
@@ -430,8 +431,8 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser, preserveWS:boolean ) {
*/
def xExpr:Tree = {
var pos = s.pos;
- val Tuple2( elemName, attrMap ) = xTag;
- if( s.ch == '/' ) { // empty element
+ val Tuple2(elemName, attrMap) = xTag;
+ if(s.ch == '/') { // empty element
s.xToken('/');
s.xToken('>');
makeXML( pos, elemName, Tree.EMPTY_ARRAY, attrMap );
@@ -523,6 +524,8 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser, preserveWS:boolean ) {
}
+ /** xScalaPatterns ::= patterns
+ */
def xScalaPatterns:Array[Tree] = {
s.xSync;
val b = p.patterns();
@@ -565,6 +568,7 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser, preserveWS:boolean ) {
}
case '{' => // embedded Scala patterns
while( s.ch == '{' ) {
+ s.nextch();
ts.append( xScalaPatterns );
}
// postcond: s.xScalaBlock = false;
diff --git a/sources/scala/tools/scalac/ast/parser/Scanner.scala b/sources/scala/tools/scalac/ast/parser/Scanner.scala
index 8acc2d78b2..bf5a7c6100 100644
--- a/sources/scala/tools/scalac/ast/parser/Scanner.scala
+++ b/sources/scala/tools/scalac/ast/parser/Scanner.scala
@@ -888,15 +888,18 @@ class Scanner(_unit: Unit) extends TokenData {
}
}
- // start XML tokenizing.
+ // start XML tokenizing methods
// prod. [i] refers to productions in http://www.w3.org/TR/REC-xml
+ /** calls nextToken, starting the scanning of Scala tokens,
+ * after XML tokens.
+ */
+
def xSync = {
- token = SEMI; // last token might have been RBRACE, avoid SEMI
- pos = Position.encode( cline,ccol );
- nextch();
- nextToken();
+ token = SEMI; // avoid getting SEMI from nextToken if last was RBRACE
xScalaBlock = false;
+ //nextch();
+ nextToken();
}
def xSyntaxError(s:String) = {