Skip to content

Commit c16ead8

Browse files
committed
Abstract out lazy local names somewhat
Add operations to NameOps to detect and produce names for lazy locals. @DarkDimius Maybe there is already another way to do this? I could not find it.
1 parent 13b6165 commit c16ead8

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

src/dotty/tools/dotc/core/NameOps.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ object NameOps {
8282
def isModuleVarName(name: Name): Boolean =
8383
name.stripAnonNumberSuffix endsWith MODULE_VAR_SUFFIX
8484
def isSelectorName = name.startsWith(" ") && name.tail.forall(_.isDigit)
85+
def isLazyLocal = name.endsWith(nme.LAZY_LOCAL)
8586

8687
/** Is name a variable name? */
8788
def isVariableName: Boolean = name.length > 0 && {
@@ -423,5 +424,11 @@ object NameOps {
423424
case NO_NAME => primitivePostfixMethodName
424425
case name => name
425426
}
427+
428+
def lazyLocalName = name ++ nme.LAZY_LOCAL
429+
def nonLazyName = {
430+
assert(name.isLazyLocal)
431+
name.dropRight(nme.LAZY_LOCAL.length)
432+
}
426433
}
427434
}

src/dotty/tools/dotc/transform/LazyVals.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
6363

6464
if (isField) {
6565
if (sym.isVolatile ||
66-
(sym.is(Flags.Module) && !sym.is(Flags.Synthetic)))
67-
// module class is user-defined.
66+
(sym.is(Flags.Module) && !sym.is(Flags.Synthetic)))
67+
// module class is user-defined.
6868
// Should be threadsafe, to mimic safety guaranteed by global object
6969
transformMemberDefVolatile(tree)
7070
else if (sym.is(Flags.Module)) { // synthetic module
@@ -101,7 +101,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
101101
*/
102102
def transformSyntheticModule(tree: ValOrDefDef)(implicit ctx: Context) = {
103103
val sym = tree.symbol
104-
val holderSymbol = ctx.newSymbol(sym.owner, sym.asTerm.name ++ nme.LAZY_LOCAL,
104+
val holderSymbol = ctx.newSymbol(sym.owner, sym.asTerm.name.lazyLocalName,
105105
Flags.Synthetic, sym.info.widen.resultType).enteredAfter(this)
106106
val field = ValDef(holderSymbol, tree.rhs.changeOwnerAfter(sym, holderSymbol, this))
107107
val getter = DefDef(sym.asTerm, ref(holderSymbol))
@@ -114,7 +114,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
114114
*/
115115
def transformLocalDef(x: ValOrDefDef)(implicit ctx: Context) = {
116116
val valueInitter = x.rhs
117-
val holderName = ctx.freshName(x.name ++ StdNames.nme.LAZY_LOCAL).toTermName
117+
val holderName = ctx.freshName(x.name.asTermName.lazyLocalName).toTermName
118118
val initName = ctx.freshName(x.name ++ StdNames.nme.LAZY_LOCAL_INIT).toTermName
119119
val tpe = x.tpe.widen.resultType.widen
120120

@@ -206,7 +206,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
206206
val claz = x.symbol.owner.asClass
207207
val tpe = x.tpe.widen.resultType.widen
208208
assert(!(x.mods is Flags.Mutable))
209-
val containerName = ctx.freshName(x.name ++ StdNames.nme.LAZY_LOCAL).toTermName
209+
val containerName = ctx.freshName(x.name.asTermName.lazyLocalName).toTermName
210210
val containerSymbol = ctx.newSymbol(claz, containerName,
211211
x.symbol.flags &~ containerFlagsMask | containerFlags | Flags.Private,
212212
tpe, coord = x.symbol.coord
@@ -367,7 +367,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
367367
appendOffsetDefs += (companion.moduleClass -> new OffsetInfo(List(offsetTree), ord))
368368
}
369369

370-
val containerName = ctx.freshName(x.name ++ StdNames.nme.LAZY_LOCAL).toTermName
370+
val containerName = ctx.freshName(x.name.asTermName.lazyLocalName).toTermName
371371
val containerSymbol = ctx.newSymbol(claz, containerName, (x.mods &~ containerFlagsMask | containerFlags).flags, tpe, coord = x.symbol.coord).enteredAfter(this)
372372
val containerTree = ValDef(containerSymbol, defaultValue(tpe))
373373

0 commit comments

Comments
 (0)