diff options
5 files changed, 20 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala index a6c3d85d71..3753f8abb9 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/MarkupParsers.scala @@ -599,7 +599,9 @@ trait MarkupParsers {self: Parsers => def xEmbeddedExpr: Tree = { xEmbeddedBlock = false parser.in.resume(LBRACE) + parser.in.sepRegions = RBRACE :: parser.in.sepRegions val b = parser.block() //p.expr(true,false); + parser.in.sepRegions = parser.in.sepRegions.tail if (parser.in.token != RBRACE) { input = parser.in.flush reportSyntaxError(" expected end of Scala block") diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index 582d4646e6..bcbb26ad5c 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -77,13 +77,13 @@ trait Parsers extends NewScanners with MarkupParsers { xmlp0 = new MarkupParser(this, true) xmlp0 } - private var xmlp0: MarkupParser = null - def xmlLiteral : Tree = xmlp.xLiteral - def xmlLiteralPattern : Tree = xmlp.xLiteralPattern - object symbXMLBuilder extends SymbolicXMLBuilder(treeBuilder, UnitParser.this, true) { // DEBUG choices + object symbXMLBuilder extends SymbolicXMLBuilder(treeBuilder, this, true) { // DEBUG choices val global: Parsers.this.global.type = Parsers.this.global def freshName(prefix: String): Name = UnitParser.this.freshName(NoPosition, prefix) } + private var xmlp0: MarkupParser = null + def xmlLiteral : Tree = xmlp.xLiteral + def xmlLiteralPattern : Tree = xmlp.xLiteralPattern } // parser constants, here so they don't pollute parser debug listing private object ParserConfiguration { diff --git a/src/compiler/scala/tools/nsc/symtab/GenerateIdeMaps.scala b/src/compiler/scala/tools/nsc/symtab/GenerateIdeMaps.scala index 73522c26b3..09fbf6111a 100644 --- a/src/compiler/scala/tools/nsc/symtab/GenerateIdeMaps.scala +++ b/src/compiler/scala/tools/nsc/symtab/GenerateIdeMaps.scala @@ -383,7 +383,7 @@ abstract class GenerateIdeMaps extends SubComponent { }) } - def sym2url(sym : Symbol) : String = { + def sym2url(sym : Symbol) : String = try { assert(!isRoot(sym)) assert(sym != sym.owner) if (sym.isModuleClass) { @@ -401,7 +401,12 @@ abstract class GenerateIdeMaps extends SubComponent { if (sym.isMethod) methodSig(sym.info) else if (!sym.name.isTypeName) ";" else "" } + } catch { + case e : Throwable => + e.printStackTrace + throw new Error("Could not convert " + sym.fullNameString + " to URL") } + def url2sym(paths : List[String], owner : Symbol) : Symbol = { if (paths.isEmpty) owner else { diff --git a/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala b/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala index 9fe67341cb..f341452095 100644 --- a/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala +++ b/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala @@ -270,6 +270,11 @@ abstract class SymbolLoaders { protected def completeSourcefile(root : Symbol, loader : SourcefileLoader)(f : => Unit) : Unit = f class ClassfileLoader(val classFile: AbstractFile, override val sourceFile: AbstractFile, sourcePath0: AbstractFile) extends SymbolLoader { + if (sourcePath0 == null) { + assert(true) + assert(true) + } + private object classfileParser extends ClassfileParser { val global: SymbolLoaders.this.global.type = SymbolLoaders.this.global override def sourcePath = sourcePath0 /* could be null */ diff --git a/src/compiler/scala/tools/nsc/util/SourceFile.scala b/src/compiler/scala/tools/nsc/util/SourceFile.scala index 4f4694b6b7..df74995d64 100644 --- a/src/compiler/scala/tools/nsc/util/SourceFile.scala +++ b/src/compiler/scala/tools/nsc/util/SourceFile.scala @@ -70,7 +70,9 @@ class BatchSourceFile(val file : AbstractFile, _content : Array[Char]) extends S compiler.syntaxAnalyzer.isIdentifierPart(content(i)))) i = i + 1 assert(i > offset) - Some(new String(content, offset, i - offset)) + if (i <= content.length) + Some(new String(content, offset, i - offset)) + else None case _ => super.identifier(pos, compiler) } |