summaryrefslogtreecommitdiff
path: root/test/files/run/t3619.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2011-01-26 07:34:03 +0000
committerAdriaan Moors <adriaan.moors@epfl.ch>2011-01-26 07:34:03 +0000
commit78007ac467c9d6e88ae183a9126772829072704c (patch)
tree25a9e8060fc295a523f018565e1f0c5ceac3f356 /test/files/run/t3619.scala
parentf9b1917e8be7a178282514429f494a3905055aab (diff)
downloadscala-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/t3619.scala')
-rw-r--r--test/files/run/t3619.scala34
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