From 78007ac467c9d6e88ae183a9126772829072704c Mon Sep 17 00:00:00 2001 From: Adriaan Moors Date: Wed, 26 Jan 2011 07:34:03 +0000 Subject: 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 --- test/files/run/t3619.scala | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 test/files/run/t3619.scala (limited to 'test') 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 -- cgit v1.2.3