File tree 3 files changed +25
-2
lines changed
compiler/src/dotty/tools/dotc/transform
3 files changed +25
-2
lines changed Original file line number Diff line number Diff line change @@ -36,7 +36,7 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
36
36
class OffsetInfo (var defs : List [Tree ], var ord : Int )
37
37
val appendOffsetDefs = mutable.Map .empty[Symbol , OffsetInfo ]
38
38
39
- override def phaseName : String = " LazyVals "
39
+ override def phaseName : String = " lazyVals "
40
40
41
41
/** List of names of phases that should have finished processing of tree
42
42
* before this phase starts processing same tree */
@@ -61,7 +61,10 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
61
61
62
62
def transformLazyVal (tree : ValOrDefDef )(implicit ctx : Context ): Tree = {
63
63
val sym = tree.symbol
64
- if (! (sym is Flags .Lazy ) || sym.owner.is(Flags .Trait ) || (sym.isStatic && sym.is(Flags .Module ))) tree
64
+ if (! (sym is Flags .Lazy ) ||
65
+ sym.owner.is(Flags .Trait ) || // val is accessor, lazy field will be implemented in subclass
66
+ (sym.isStatic && sym.is(Flags .Module , butNot = Flags .Method ))) // static module vals are implemented in the JVM by lazy loading
67
+ tree
65
68
else {
66
69
val isField = sym.owner.isClass
67
70
if (isField) {
Original file line number Diff line number Diff line change
1
+ object Test extends App {
2
+
3
+ implicit def _1 : Long = 1L
4
+ implicit def _2 : Int = 0
5
+
6
+ println(implicitly[AnyVal ])
7
+ }
Original file line number Diff line number Diff line change
1
+ trait T {
2
+ case object Foo
3
+ }
4
+
5
+ object Bar extends T
6
+ object Baz extends T
7
+
8
+ object Test {
9
+ def main (args : Array [String ]): Unit = {
10
+ assert(Bar .Foo eq Bar .Foo )
11
+ assert(Bar .Foo ne Baz .Foo )
12
+ }
13
+ }
You can’t perform that action at this time.
0 commit comments