aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/Memoize.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2015-09-14 13:40:57 +0200
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-09-14 13:40:57 +0200
commitea6de3869d2cee752f9a616b17ef4bb45a6288d1 (patch)
tree16adff5ea95107b67d7ec3d67a76e283fa2199ec /src/dotty/tools/dotc/transform/Memoize.scala
parent3ff309751d2fd30d1a63eac306b6d871f840b505 (diff)
downloaddotty-ea6de3869d2cee752f9a616b17ef4bb45a6288d1.tar.gz
dotty-ea6de3869d2cee752f9a616b17ef4bb45a6288d1.tar.bz2
dotty-ea6de3869d2cee752f9a616b17ef4bb45a6288d1.zip
Memoize: bring back comment about how final vals are compiled
Diffstat (limited to 'src/dotty/tools/dotc/transform/Memoize.scala')
-rw-r--r--src/dotty/tools/dotc/transform/Memoize.scala4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/transform/Memoize.scala b/src/dotty/tools/dotc/transform/Memoize.scala
index 53f40044f..fbf8ed763 100644
--- a/src/dotty/tools/dotc/transform/Memoize.scala
+++ b/src/dotty/tools/dotc/transform/Memoize.scala
@@ -76,6 +76,10 @@ import Decorators._
}
skipBlocks(tree.rhs) match {
case lit: Literal if sym.is(Final) && isIdempotentExpr(tree.rhs) =>
+ // duplicating scalac behavior: for final vals that have rhs as constant, we do not create a field
+ // and instead return the value. This seemingly minor optimization has huge effect on initialization
+ // order and the values that can be observed during superconstructor call
+
// see remark about idempotency in PostTyper#normalizeTree
cpy.DefDef(tree)(rhs = lit)
case _ =>