summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2013-08-08 08:15:56 -0700
committerEugene Burmako <xeno.by@gmail.com>2013-08-08 08:15:56 -0700
commited5c1abbfca18a880c79048cc7e9578ae932101d (patch)
tree7f4dd7f6ea5aaa42b2d473f5095d5134924f7c66 /src
parente9ccb416b307d853120411572a57cb57867a9afc (diff)
parent36524c21964696ec71170970c6a65f9bb7aec8f0 (diff)
downloadscala-ed5c1abbfca18a880c79048cc7e9578ae932101d.tar.gz
scala-ed5c1abbfca18a880c79048cc7e9578ae932101d.tar.bz2
scala-ed5c1abbfca18a880c79048cc7e9578ae932101d.zip
Merge pull request #2800 from densh/topic/toolbox-positions
SI-7331 tb.parse returns unpositioned trees
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/reflect/ToolBoxFactory.scala10
-rw-r--r--src/reflect/scala/reflect/internal/Importers.scala7
2 files changed, 11 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/reflect/ToolBoxFactory.scala b/src/compiler/scala/tools/reflect/ToolBoxFactory.scala
index 64b8870619..ec61f7a945 100644
--- a/src/compiler/scala/tools/reflect/ToolBoxFactory.scala
+++ b/src/compiler/scala/tools/reflect/ToolBoxFactory.scala
@@ -8,6 +8,7 @@ import scala.tools.nsc.typechecker.Modes
import scala.tools.nsc.io.VirtualDirectory
import scala.tools.nsc.interpreter.AbstractFileClassLoader
import scala.tools.nsc.util.FreshNameCreator
+import scala.tools.nsc.ast.parser.Tokens.EOF
import scala.reflect.internal.Flags._
import scala.reflect.internal.util.{BatchSourceFile, NoSourceFile, NoFile}
import java.lang.{Class => jClass}
@@ -273,14 +274,13 @@ abstract class ToolBoxFactory[U <: JavaUniverse](val u: U) { factorySelf =>
def parse(code: String): Tree = {
val run = new Run
reporter.reset()
- val wrappedCode = "object wrapper {" + EOL + code + EOL + "}"
- val file = new BatchSourceFile("<toolbox>", wrappedCode)
+ val file = new BatchSourceFile("<toolbox>", code)
val unit = new CompilationUnit(file)
phase = run.parserPhase
val parser = new syntaxAnalyzer.UnitParser(unit)
- val wrappedTree = parser.parse()
+ val parsed = parser.templateStats()
+ parser.accept(EOF)
throwIfErrors()
- val PackageDef(_, List(ModuleDef(_, _, Template(_, _, _ :: parsed)))) = wrappedTree
parsed match {
case expr :: Nil => expr
case stats :+ expr => Block(stats, expr)
@@ -402,7 +402,7 @@ abstract class ToolBoxFactory[U <: JavaUniverse](val u: U) { factorySelf =>
def compile(tree: u.Tree): () => Any = {
if (compiler.settings.verbose.value) println("importing "+tree)
- var ctree: compiler.Tree = importer.importTree(tree)
+ val ctree: compiler.Tree = importer.importTree(tree)
if (compiler.settings.verbose.value) println("compiling "+ctree)
compiler.compile(ctree)
diff --git a/src/reflect/scala/reflect/internal/Importers.scala b/src/reflect/scala/reflect/internal/Importers.scala
index 43902c1930..9a8dee1f15 100644
--- a/src/reflect/scala/reflect/internal/Importers.scala
+++ b/src/reflect/scala/reflect/internal/Importers.scala
@@ -443,7 +443,12 @@ trait Importers extends api.Importers { self: SymbolTable =>
}
})
tryFixup()
- mytree
+ // we have to be careful with position import as some shared trees
+ // like EmptyTree, emptyValDef don't support position assignment
+ if (tree.pos != NoPosition)
+ mytree.setPos(importPosition(tree.pos))
+ else
+ mytree
}
def importValDef(tree: from.ValDef): ValDef = importTree(tree).asInstanceOf[ValDef]