diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-12-15 14:22:14 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-01-26 15:41:07 +0100 |
commit | f21b1ce7fda9022d6d805a708882c5a2ab241f41 (patch) | |
tree | 8b8de4a28a0dcc6e4118e2986708074c55a42055 /src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | |
parent | eb4b06544a4362231357686c39beef9dbe00d932 (diff) | |
download | scala-f21b1ce7fda9022d6d805a708882c5a2ab241f41.tar.gz scala-f21b1ce7fda9022d6d805a708882c5a2ab241f41.tar.bz2 scala-f21b1ce7fda9022d6d805a708882c5a2ab241f41.zip |
SI-4859 Don't elide qualifiers when selecting nested modules.
Otherwise we fail to throw in:
{???; Predef}.DummyImplicit.dummyImplicit
We still elide the initialization of `Outer` in `Outer.Inner.foo`
as before, although that seems a little dubious to me.
In total, we had to change RefChecks, Flatten, and GenICode
to effect this change. A recently fixed bug in tail call elimination
was also due to assuming that the the qualifier of a Select node
wasn't worthy of traversal. Let's keep a close eye out for more
instances of this problem.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/RefChecks.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index c316955a02..b820d8a386 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -1389,7 +1389,8 @@ abstract class RefChecks extends InfoTransform with scala.reflect.internal.trans case TypeApply(fun, targs) => isClassTypeAccessible(fun) case Select(module, apply) => - ( // SI-4859 `CaseClass1().InnerCaseClass2()` must not be rewritten to `new InnerCaseClass2()` + ( // SI-4859 `CaseClass1().InnerCaseClass2()` must not be rewritten to `new InnerCaseClass2()`; + // {expr; Outer}.Inner() must not be rewritten to `new Outer.Inner()`. treeInfo.isExprSafeToInline(module) && // SI-5626 Classes in refinement types cannot be constructed with `new`. In this case, // the companion class is actually not a ClassSymbol, but a reference to an abstract type. |