From 81091404c95cb45647add7782c3ee9d26ad37212 Mon Sep 17 00:00:00 2001 From: buraq Date: Mon, 24 May 2004 10:39:04 +0000 Subject: fixed bug in xml parsing, cleanup --- .../tools/scalac/ast/parser/MarkupParser.scala | 22 +++++++--------------- .../scala/tools/scalac/ast/parser/Scanner.scala | 10 +++++++++- 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'sources') 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, "" ) @@ -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 { -- cgit v1.2.3