Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 74429df

Browse files
committed
Inline the cas method and remove the change from stdlib
1 parent 351ce57 commit 74429df

File tree

2 files changed

+13
-16
lines changed

2 files changed

+13
-16
lines changed

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,11 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
350350
val controlState = ref(defn.LazyValsControlState)
351351
val evaluating = Select(ref(defn.LazyValsModule), lazyNme.RLazyVals.evaluating)
352352
val nullValue = Select(ref(defn.LazyValsModule), lazyNme.RLazyVals.nullValue)
353-
val objCas2Flag = Select(ref(defn.LazyValsModule), lazyNme.RLazyVals.objCas2)
353+
val casFlag =
354+
typer.Applications.retypeSignaturePolymorphicFn( // must be retyped to avoid wrapping into Array[Object]
355+
Select(varHandle, lazyNme.compareAndSet),
356+
MethodType(List(defn.ObjectType,defn.ObjectType,defn.ObjectType), defn.BooleanType)
357+
)
354358
val accessorMethodSymbol = memberDef.symbol.asTerm
355359
val lazyInitMethodName = LazyLocalInitName.fresh(memberDef.name.asTermName)
356360
val lazyInitMethodSymbol = newSymbol(claz, lazyInitMethodName, Synthetic | Method | Private, MethodType(Nil)(_ => Nil, _ => defn.ObjectType))
@@ -392,12 +396,12 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
392396
val lockRel = {
393397
val lockSymb = newSymbol(lazyInitMethodSymbol, lazyNme.lock, Synthetic, waiting.typeOpt)
394398
Block(ValDef(lockSymb, ref(target).cast(waiting.typeOpt))
395-
:: objCas2Flag.appliedTo(thiz, varHandle, ref(lockSymb), ref(resSymb)) :: Nil,
399+
:: casFlag.appliedTo(thiz, ref(lockSymb), ref(resSymb)) :: Nil,
396400
ref(lockSymb).select(lazyNme.RLazyVals.waitingRelease).ensureApplied)
397401
}
398402
// finally block
399403
val fin = If(
400-
objCas2Flag.appliedTo(thiz, varHandle, evaluating, ref(resSymb)).select(nme.UNARY_!).appliedToNone,
404+
casFlag.appliedTo(thiz, evaluating, ref(resSymb)).select(nme.UNARY_!).appliedToNone,
401405
lockRel,
402406
unitLiteral
403407
)
@@ -418,7 +422,7 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
418422
)
419423
// if CAS(_, null, Evaluating)
420424
If(
421-
objCas2Flag.appliedTo(thiz, varHandle, nullLiteral, evaluating),
425+
casFlag.appliedTo(thiz, nullLiteral, evaluating),
422426
Block(ValDef(resSymb, nullLiteral) :: ValDef(resSymbNullable, nullLiteral) :: evaluate :: Nil, // var result: AnyRef = null
423427
Return(ref(resSymbNullable), lazyInitMethodSymbol)),
424428
unitLiteral
@@ -434,7 +438,7 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
434438
ref(current).select(defn.Object_eq).appliedTo(evaluating),
435439
// if is Evaluating then CAS(_, Evaluating, new Waiting)
436440
Block(
437-
objCas2Flag.appliedTo(thiz, varHandle, ref(current), Select(New(waiting), StdNames.nme.CONSTRUCTOR).ensureApplied) :: Nil,
441+
casFlag.appliedTo(thiz, ref(current), Select(New(waiting), StdNames.nme.CONSTRUCTOR).ensureApplied) :: Nil,
438442
unitLiteral
439443
),
440444
// if not Evaluating
@@ -480,7 +484,7 @@ class LazyVals extends MiniPhase with IdentityDenotTransformer {
480484
val varHandleInfo = appendVarHandleDefs.getOrElseUpdate(claz, new VarHandleInfo(EmptyTree, Nil))
481485
varHandleInfo.methodHandlesLookupDef match
482486
case EmptyTree =>
483-
val lookupSym: TermSymbol = newSymbol(claz, (s"${claz.name}${lazyNme.methodHandleLookup}").toTermName, Synthetic, defn.MethodHandlesLookupClass.typeRef).enteredAfter(this)
487+
val lookupSym: TermSymbol = newSymbol(claz, (s"${claz.name}${lazyNme.methodHandleLookupSuffix}").toTermName, Synthetic, defn.MethodHandlesLookupClass.typeRef).enteredAfter(this)
484488
lookupSym.addAnnotation(Annotation(defn.ScalaStaticAnnot, lookupSym.span))
485489
varHandleInfo.methodHandlesLookupDef =
486490
ValDef(lookupSym, Apply(Select(ref(defn.MethodHandlesClass), defn.MethodHandles_lookup.name), Nil))
@@ -679,8 +683,6 @@ object LazyVals {
679683
val waitingRelease: TermName = "countDown".toTermName
680684
val evaluating: TermName = "Evaluating".toTermName
681685
val nullValue: TermName = "NullValue".toTermName
682-
val objCas: TermName = "objCAS".toTermName
683-
val objCas2: TermName = "objCAS2".toTermName
684686
val get: TermName = N.get.toTermName
685687
val setFlag: TermName = N.setFlag.toTermName
686688
val wait4Notification: TermName = N.wait4Notification.toTermName
@@ -701,12 +703,13 @@ object LazyVals {
701703
val current: TermName = "current".toTermName
702704
val lock: TermName = "lock".toTermName
703705
val discard: TermName = "discard".toTermName
706+
val compareAndSet: TermName = "compareAndSet".toTermName
704707
val lzyHandleSuffix: String = "$$lzyHandle"
705-
val methodHandleLookup: String = "$$methodHandleLookup"
708+
val methodHandleLookupSuffix: String = "$$methodHandleLookup"
706709
}
707710

708711
extension (sym: Symbol) def isVarHandleForLazy(using Context) =
709712
sym.name.endsWith(lazyNme.lzyHandleSuffix)
710713
extension (sym: Symbol) def isMethodLookupForLazy(using Context) =
711-
sym.name.endsWith(lazyNme.methodHandleLookup)
714+
sym.name.endsWith(lazyNme.methodHandleLookupSuffix)
712715
}

‎library/src/scala/runtime/LazyVals.scala‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,6 @@ object LazyVals {
107107
unsafe.compareAndSwapObject(t, offset, exp, n): @nowarn("cat=deprecation")
108108
}
109109

110-
def objCAS2(t: Object, handle: VarHandle, exp: Object, n: Object): Boolean = {
111-
if (debug)
112-
println(s"objCAS2($t, $exp, $n)")
113-
handle.compareAndSet(t, exp, n)
114-
}
115-
116110
def setFlag(t: Object, offset: Long, v: Int, ord: Int): Unit = {
117111
if (debug)
118112
println(s"setFlag($t, $offset, $v, $ord)")

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /