summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sources/scala/tools/scalac/ast/parser/MarkupParser.scala12
-rw-r--r--sources/scala/tools/scalac/ast/parser/Scanner.scala13
-rw-r--r--test/files/jvm/xmlLiterals.scala10
3 files changed, 21 insertions, 14 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) = {
diff --git a/test/files/jvm/xmlLiterals.scala b/test/files/jvm/xmlLiterals.scala
index 13b2591790..f3ee124d33 100644
--- a/test/files/jvm/xmlLiterals.scala
+++ b/test/files/jvm/xmlLiterals.scala
@@ -157,14 +157,14 @@ object Test03Servlet {
<body>
<h2>Welcome</h2>
<p>
- { headerMsg }
+ {headerMsg }
</p>
<p>
{ ns:_* }
</p>
<hr/>
<p>
- { footerMsg }
+ {footerMsg}
</p>
<h2>Bye!</h2>
</body>
@@ -178,11 +178,11 @@ object Test03Servlet {
/** this is a recursive procedure that adds some attributes to the tree
*/
def beautify( n:Node ):Node = n match {
- case <td>{ xs @ _* }</td> =>
+ case <td>{xs @ _* }</td> =>
<td bgcolor="#AAAAFF" color="#222255">{ xs:_* }</td>
case <table>{ xs @ _* }</table> =>
- <table align="center">{ beautify( xs ):_* }</table>
+ <table align="center">{ beautify( xs ):_*}</table>
case Elem( label, _, xs @ _* ) =>
new Elem( label, beautify( xs ):_*)
@@ -241,7 +241,7 @@ object Test03Servlet {
val tryBrace = <try>Now escaped {{ braces } </try>;
assertEquals( tryBrace, Elem("try",e,Text("Now escaped { braces }")));
- val tryBrace2 = <try myAttrib={ (3+4).toString() }> cool ?</try>;
+ val tryBrace2 = <try myAttrib={(3+4).toString() }> cool ?</try>;
assertEquals( tryBrace2.attribute("myAttrib"), "7" );
/* Scala comments are not allowed in XML literals. see neg(2) */