diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2011-01-26 07:34:03 +0000 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2011-01-26 07:34:03 +0000 |
commit | 78007ac467c9d6e88ae183a9126772829072704c (patch) | |
tree | 25a9e8060fc295a523f018565e1f0c5ceac3f356 /test/files/run | |
parent | f9b1917e8be7a178282514429f494a3905055aab (diff) | |
download | scala-78007ac467c9d6e88ae183a9126772829072704c.tar.gz scala-78007ac467c9d6e88ae183a9126772829072704c.tar.bz2 scala-78007ac467c9d6e88ae183a9126772829072704c.zip |
closes #3619, #4141.
replaced the epic outer.outer.outer by something more robust that goes
to the context corresponding to the enclosing class
nextOuter determines which context is searched next for implicits (after
`this`, which contributes `newImplicits` below) in most cases, it is
simply the outer context if we're owned by a constructor, the actual
current context and the conceptual context are different when it comes
to scoping: the current conceptual scope is the context enclosing the
blocks that represent the constructor body (TODO: why is there more than
one such block in the outer chain?)
review by odersky, extempore
Diffstat (limited to 'test/files/run')
-rw-r--r-- | test/files/run/t3619.scala | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/files/run/t3619.scala b/test/files/run/t3619.scala new file mode 100644 index 0000000000..0aef17dfdf --- /dev/null +++ b/test/files/run/t3619.scala @@ -0,0 +1,34 @@ +class Dep(x: Int)(implicit val nameClash: String) + +object Test extends Application { + implicit val nameClash: String = "meh" + + def meth(implicit w: String) = 1 + + // when typing Meh's default constructor Meh.this.nameClash (inherited from Dep) + // shadows Test.nameClash, thus, when inferring the argument `w` in the call to meth, + // Test.nameClash is not eligible statically, Meh.this.nameClash is picked (which then causes the VerifyError) + // BUG: Meth.this.nameClash should not be in (the implicit) scope during the super constructor call in the first place + class Meh extends Dep(meth) + /* + class Meh extends Dep { + def this() { + this(Test.this.meth(Meh.this.nameClash))(Test.this.nameClash) + } + } + */ + + new Meh +} + + +/* + { + def this(a: String, b: Int) { + this() + } + def this(x: String) { + this(Meh.this.nameClash, 1) + } + } +*/
\ No newline at end of file |