summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala7
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala7
-rw-r--r--test/files/neg/bug2275b.check5
-rw-r--r--test/files/neg/t3769.check5
-rw-r--r--test/files/neg/xmltruncated7.check7
-rw-r--r--test/files/neg/xmltruncated7.scala3
6 files changed, 15 insertions, 19 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
index 49c6b2ffba..d0265ac95c 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala
@@ -30,8 +30,7 @@ import util.Chars.{ SU, LF }
* @author Burak Emir
* @version 1.0
*/
-trait MarkupParsers
-{
+trait MarkupParsers {
self: Parsers =>
case object MissingEndTagControl extends ControlThrowable {
@@ -294,7 +293,7 @@ trait MarkupParsers
while (ch != SU) {
if (ch == '}') {
if (charComingAfter(nextch) == '}') nextch
- else errorBraces
+ else errorBraces()
}
buf append ch
@@ -318,7 +317,7 @@ trait MarkupParsers
}
finally parser.in resume Tokens.XMLSTART
- EmptyTree
+ parser.errorTermTree
}
/** Use a lookahead parser to run speculative body, and return the first char afterward. */
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index 622c4054e8..071926e7c6 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -1309,10 +1309,6 @@ self =>
def postfixExpr(): Tree = {
val base = opstack
var top = prefixExpr()
- // Various errors in XML literals can cause xmlLiteral to propagate
- // EmptyTree's. Watch out for them here.
- if (top == EmptyTree)
- return EmptyTree
while (isIdent) {
top = reduceStack(true, base, top, precedence(in.name), treeInfo.isLeftAssoc(in.name))
@@ -1400,9 +1396,6 @@ self =>
}
def simpleExprRest(t: Tree, canApply: Boolean): Tree = {
- // Various errors in XML literals can cause xmlLiteral to propagate
- // EmptyTree's. Watch out for them here (see also postfixExpr).
- if (EmptyTree == t) return EmptyTree // #3604 (mics)
if (canApply) newLineOptWhenFollowedBy(LBRACE)
in.token match {
case DOT =>
diff --git a/test/files/neg/bug2275b.check b/test/files/neg/bug2275b.check
index 4b61f242d0..0db3eb8ff1 100644
--- a/test/files/neg/bug2275b.check
+++ b/test/files/neg/bug2275b.check
@@ -4,10 +4,7 @@ bug2275b.scala:2: error: in XML literal: in XML content, please use '}}' to expr
bug2275b.scala:2: error: I encountered a '}' where I didn't expect one, maybe this tag isn't closed <br>
{<br>}xx
^
-bug2275b.scala:2: error: ';' expected but identifier found.
- {<br>}xx
- ^
bug2275b.scala:3: error: '}' expected but eof found.
}
^
-four errors found
+three errors found
diff --git a/test/files/neg/t3769.check b/test/files/neg/t3769.check
index 7537ed2ddf..40ccf05ff3 100644
--- a/test/files/neg/t3769.check
+++ b/test/files/neg/t3769.check
@@ -4,7 +4,4 @@ t3769.scala:2: error: in XML literal: expected closing tag of a
t3769.scala:2: error: start tag was here: a>
val x = <b> <c><a></c> {"text"} </b>
^
-t3769.scala:2: error: ';' expected but '{' found.
- val x = <b> <c><a></c> {"text"} </b>
- ^
-three errors found
+two errors found
diff --git a/test/files/neg/xmltruncated7.check b/test/files/neg/xmltruncated7.check
new file mode 100644
index 0000000000..67e7bd4b18
--- /dev/null
+++ b/test/files/neg/xmltruncated7.check
@@ -0,0 +1,7 @@
+xmltruncated7.scala:2: error: in XML literal: in XML content, please use '}}' to express '}'
+ <p>foo}: </p>
+ ^
+xmltruncated7.scala:2: error: I encountered a '}' where I didn't expect one, maybe this tag isn't closed <p>
+ <p>foo}: </p>
+ ^
+two errors found
diff --git a/test/files/neg/xmltruncated7.scala b/test/files/neg/xmltruncated7.scala
new file mode 100644
index 0000000000..7e296a910d
--- /dev/null
+++ b/test/files/neg/xmltruncated7.scala
@@ -0,0 +1,3 @@
+object Test {
+ <p>foo}: </p>
+} \ No newline at end of file