aboutsummaryrefslogtreecommitdiff
path: root/tests/pos
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-03-13 21:41:40 +0100
committerMartin Odersky <odersky@gmail.com>2014-03-13 21:43:39 +0100
commit163b16014331ab909aa719b035dbc9491630edae (patch)
tree9cc6c4622a92a2a7547af6ac730a7dbee57facf7 /tests/pos
parentdb950e5e168f6fd71a367da343e352139e8d653e (diff)
downloaddotty-163b16014331ab909aa719b035dbc9491630edae.tar.gz
dotty-163b16014331ab909aa719b035dbc9491630edae.tar.bz2
dotty-163b16014331ab909aa719b035dbc9491630edae.zip
Bullet-proofing companion objects
Companion class/module computations now also work for local classes and modules. For this to work, either one of two conditions must be met: (1) some enclosing context refers to a scope that contains the companions. (2) the context's compilation unit has a typed tree that contains the companions. (1) is usually true when type-checking, (2) when transforming trees. Local companions are searched as follows: If (2) holds, we locate the statement sequence containing the companions by searching down from the root stored in the compilation unit. Otherwise, we search outwards in the enclosing contexts for a scope containing the companions.
Diffstat (limited to 'tests/pos')
-rw-r--r--tests/pos/companions.scala28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/pos/companions.scala b/tests/pos/companions.scala
new file mode 100644
index 000000000..6821ad768
--- /dev/null
+++ b/tests/pos/companions.scala
@@ -0,0 +1,28 @@
+object companions {
+
+ def foo() = {
+
+ class C {
+ println(C.p)
+ private val q = 2
+ }
+
+ object C {
+ private val p = 1
+ println(new C().q)
+ }
+ }
+
+}
+object companions2 {
+ def foo() = {
+ {
+ class C {
+ println(C.p)
+ }
+ object C {
+ private val p = 1
+ }
+ }
+ }
+}