summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2004-05-24 10:39:04 +0000
committerburaq <buraq@epfl.ch>2004-05-24 10:39:04 +0000
commit81091404c95cb45647add7782c3ee9d26ad37212 (patch)
treeaa1267bde05ef9c4fa20dd8feb65b83a4cfca2ec /sources
parentde2f5cdf5784c63e5f30e69c777c65881e6d1266 (diff)
downloadscala-81091404c95cb45647add7782c3ee9d26ad37212.tar.gz
scala-81091404c95cb45647add7782c3ee9d26ad37212.tar.bz2
scala-81091404c95cb45647add7782c3ee9d26ad37212.zip
fixed bug in xml parsing, cleanup
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/scalac/ast/parser/MarkupParser.scala22
-rw-r--r--sources/scala/tools/scalac/ast/parser/Scanner.scala10
2 files changed, 16 insertions, 16 deletions
diff --git a/sources/scala/tools/scalac/ast/parser/MarkupParser.scala b/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
index d4fa1be604..24c2b055b7 100644
--- a/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
+++ b/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
@@ -242,13 +242,7 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser ) {
s.xNext;
gen.mkStringLit( pos, tmp )
case '{' =>
- s.xNext;
- s.nextToken();
- val tmp = p.expr(false,false);
- if( s.token != RBRACE ) {
- s.xSyntaxError("expected end of Scala block");
- };
- tmp
+ xScalaExpr;
case _ =>
s.xSyntaxError( "' or \" delimited attribute value or '{' scala-expr '}' expected" );
gen.mkStringLit( s.pos, "<syntax-error>" )
@@ -286,14 +280,12 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser ) {
s.xToken('>')
}
- def xScalaExpr( ts:myTreeList ) = {
- s.nextToken();
- s.xScalaBlock = false;
+ 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");
- }
- ts.append( b );
+ return b
}
/** '<' xExpr ::= xmlTag1 '>' { xmlExpr | '{' simpleExpr '}' } ETag
@@ -312,7 +304,7 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser ) {
var exit = false;
while( !exit ) {
if( s.xScalaBlock ) {
- xScalaExpr( ts );
+ ts.append( xScalaExpr );
} else {
s.ch match {
@@ -326,7 +318,7 @@ class MarkupParser( unit:Unit, s:Scanner, p:Parser ) {
case '{' =>
if( s.xCheckScalaBlock ) {
- xScalaExpr( ts );
+ ts.append( xScalaExpr );
} else {
val str = new StringBuffer("{");
str.append( s.xText );
diff --git a/sources/scala/tools/scalac/ast/parser/Scanner.scala b/sources/scala/tools/scalac/ast/parser/Scanner.scala
index 8b3f320209..cbcbe48bd6 100644
--- a/sources/scala/tools/scalac/ast/parser/Scanner.scala
+++ b/sources/scala/tools/scalac/ast/parser/Scanner.scala
@@ -891,6 +891,14 @@ class Scanner(_unit: Unit) extends TokenData {
// start XML tokenizing.
// prod. [i] refers to productions in http://www.w3.org/TR/REC-xml
+ def xSync = {
+ token = SEMI; // last token might have been RBRACE, avoid SEMI
+ pos = Position.encode( cline,ccol );
+ nextch();
+ nextToken();
+ xScalaBlock = false;
+ }
+
def xSyntaxError(s:String) = {
syntaxError("in XML literal: "+s);
xNext;
@@ -931,7 +939,7 @@ class Scanner(_unit: Unit) extends TokenData {
final val LT = Name.fromString("<");
def xStartsXML = {
- unit.global.xmlMarkup && ( token == IDENTIFIER )&&( name == LT );
+ /* unit.global.xmlMarkup && */ ( token == IDENTIFIER )&&( name == LT );
}
def xIsSpace = ch match {