diff options
author | Paul Phillips <paulp@improving.org> | 2012-08-31 08:43:33 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-08-31 16:57:20 -0700 |
commit | 7206df0374add1bcf73e15f61a024852463f6fc9 (patch) | |
tree | 0d8e7d36f0828d0cff2bc8cc10ba6adf4143097f /src/compiler/scala/tools | |
parent | a3680be29ccd5314c5d027d473b37940eaecd530 (diff) | |
download | scala-7206df0374add1bcf73e15f61a024852463f6fc9.tar.gz scala-7206df0374add1bcf73e15f61a024852463f6fc9.tar.bz2 scala-7206df0374add1bcf73e15f61a024852463f6fc9.zip |
Don't synthesize trees with overloaded calls.
Finding call sites where we would generate (and get away with)
an overloaded constructor call after overloading resolution is
already done.
Diffstat (limited to 'src/compiler/scala/tools')
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/TreeGen.scala | 5 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Constructors.scala | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/TreeGen.scala b/src/compiler/scala/tools/nsc/ast/TreeGen.scala index 3ccd8ec4ae..0e65bfca6d 100644 --- a/src/compiler/scala/tools/nsc/ast/TreeGen.scala +++ b/src/compiler/scala/tools/nsc/ast/TreeGen.scala @@ -52,7 +52,10 @@ abstract class TreeGen extends reflect.internal.TreeGen with TreeDSL { } // wrap the given expression in a SoftReference so it can be gc-ed - def mkSoftRef(expr: Tree): Tree = atPos(expr.pos)(New(SoftReferenceClass.tpe, expr)) + def mkSoftRef(expr: Tree): Tree = atPos(expr.pos) { + val constructor = SoftReferenceClass.info.nonPrivateMember(nme.CONSTRUCTOR).suchThat(_.paramss.flatten.size == 1) + NewFromConstructor(constructor, List(expr)) + } // annotate the expression with @unchecked def mkUnchecked(expr: Tree): Tree = atPos(expr.pos) { diff --git a/src/compiler/scala/tools/nsc/transform/Constructors.scala b/src/compiler/scala/tools/nsc/transform/Constructors.scala index afc109c47a..283b923bc5 100644 --- a/src/compiler/scala/tools/nsc/transform/Constructors.scala +++ b/src/compiler/scala/tools/nsc/transform/Constructors.scala @@ -129,7 +129,7 @@ abstract class Constructors extends Transform with ast.TreeDSL { if (from.name != nme.OUTER) result else localTyper.typedPos(to.pos) { - IF (from OBJ_EQ NULL) THEN Throw(NullPointerExceptionClass.tpe) ELSE result + IF (from OBJ_EQ NULL) THEN Throw(NewFromConstructor(NPEConstructor, Nil)) ELSE result } } |