Skip to content

Commit

Permalink
Merge pull request #431 from sjrd/fix-anyval-equals-corner-case
Browse files Browse the repository at this point in the history
Fix #428: Work around scala/scala3#19307
  • Loading branch information
sjrd committed Dec 20, 2023
2 parents 0861c60 + 038e768 commit 3346833
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 2 deletions.
13 changes: 12 additions & 1 deletion tasty-query/shared/src/main/scala/tastyquery/Symbols.scala
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,8 @@ object Symbols {
/** Is this symbol generated by the compiler? */
final def isSynthetic: Boolean = flags.is(Synthetic)

private[Symbols] def isCaseSynthetic: Boolean = flags.isAllOf(Case | Synthetic)

/** Does this symbol have the `infix` modifier? */
final def isInfix: Boolean = flags.is(Infix)

Expand Down Expand Up @@ -1528,8 +1530,17 @@ object Symbols {
case pre: ThisType if pre.cls == this => true
case _ => false

// Workaround for https://github.com/lampepfl/dotty/issues/19307
def isAnyValEqualsWorkaround(sym: Symbol): Boolean = sym match
case sym: TermSymbol if sym.owner.isClass && sym.owner.asClass.isDerivedValueClass =>
pre match
case pre: TermRef => pre.prefix == NoPrefix && pre.symbol.isCaseSynthetic
case _ => false
case _ =>
false

getDecl(name) match
case some @ Some(sym) if !sym.isPrivateParamAccessor || isOwnThis =>
case some @ Some(sym) if !sym.isPrivateParamAccessor || isOwnThis || isAnyValEqualsWorkaround(sym) =>
some
case _ =>
if name == nme.Constructor then None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ private[tasties] class TreeUnpickler private (
if tagFollowShared == TYPEBOUNDS then LocalTypeParamSymbol.create(toTypeName(name), owner)
else TermSymbol.create(name, owner)
caches.registerSym(start, sym)
sym.setFlags(Case)
readSymbolModifiers(sym, tag, end)
// bind is never an owner
reader.until(end)(createSymbols(owner))
case REFINEDtpt =>
Expand Down Expand Up @@ -185,6 +185,7 @@ private[tasties] class TreeUnpickler private (
private def normalizeFlags(sym: Symbol, tag: Int, givenFlags: FlagSet, rhsIsEmpty: Boolean): FlagSet =
var flags = givenFlags
if tag == DEFDEF then flags |= Method
else if tag == BIND then flags |= Case
if rhsIsEmpty && (tag == VALDEF || tag == DEFDEF) then flags |= Abstract
if givenFlags.is(Module) then flags |= (if tag == VALDEF then ModuleValCreationFlags else ModuleClassCreationFlags)
if flags.is(Enum) && !flags.is(Method) && sym.isTerm then flags |= StableRealizable
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package simple_trees

class ValueClassNonVal(self: String) extends AnyVal:
def get: String = self

def getThroughThis: String = this.self
end ValueClassNonVal

0 comments on commit 3346833

Please sign in to comment.