Skip to content

Commit 9abfef8

Browse files
Make enums compatible with the new constructor hijack
1 parent 857549f commit 9abfef8

File tree

5 files changed

+14
-16
lines changed

5 files changed

+14
-16
lines changed

compiler/src/dotty/tools/backend/jvm/BTypesFromSymbols.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ class BTypesFromSymbols[I <: BackendInterface](val int: I) extends BTypes {
224224
if (sym.isVarargsMethod) ACC_VARARGS else 0,
225225
if (sym.isSynchronized) ACC_SYNCHRONIZED else 0,
226226
if (sym.isDeprecated) asm.Opcodes.ACC_DEPRECATED else 0,
227-
if (sym.isEnum) asm.Opcodes.ACC_ENUM else 0
227+
if (sym.isJavaEnum) asm.Opcodes.ACC_ENUM else 0
228228
)
229229
}
230230

compiler/src/dotty/tools/backend/jvm/BackendInterface.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ abstract class BackendInterface extends BackendInterfaceDefinitions {
512512
def isJavaDefaultMethod: Boolean
513513
def isClassConstructor: Boolean
514514
def isSerializable: Boolean
515-
def isEnum: Boolean
515+
def isJavaEnum: Boolean
516516

517517
/**
518518
* True for module classes of modules that are top-level or owned only by objects. Module classes

compiler/src/dotty/tools/backend/jvm/DottyBackendInterface.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
703703
def shouldEmitForwarders: Boolean =
704704
(sym is Flags.Module) && sym.isStatic
705705
def isJavaEntryPoint: Boolean = CollectEntryPoints.isJavaEntryPoint(sym)
706-
def isEnum = sym.is(Flags.Enum, butNot = Flags.Case) && sym.info.parents.exists(p => p.typeSymbol == defn.JEnumClass)
706+
def isJavaEnum = sym.is(Flags.Enum, butNot = Flags.Case) && sym.info.parents.exists(p => p.typeSymbol == defn.JavaEnumClass)
707707

708708
def isClassConstructor: Boolean = toDenot(sym).isClassConstructor
709709
def isSerializable: Boolean = toDenot(sym).isSerializable

compiler/src/dotty/tools/dotc/ast/DesugarEnums.scala

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,16 +101,16 @@ object DesugarEnums {
101101
.withFlags(Private)
102102

103103
val valuesOfExnMessage = Apply(
104-
Select(Literal(Constant("key not found: ")), "concat".toTermName)
105-
, Ident(nme.nameDollar) :: Nil)
104+
Select(Literal(Constant("key not found: ")), "concat".toTermName),
105+
Ident(nme.nameDollar) :: Nil)
106106
val valuesOfBody = Try(
107-
expr = Apply(valuesDot("fromName"), Ident(nme.nameDollar) :: Nil)
108-
, cases = CaseDef(
109-
pat = Typed(Ident(nme.DEFAULT_EXCEPTION_NAME), TypeTree(defn.NoSuchElementExceptionType))
110-
, guard = EmptyTree
111-
, body = Throw(New(TypeTree(defn.IllegalArgumentExceptionType), List(valuesOfExnMessage :: Nil)))
112-
) :: Nil
113-
, finalizer = EmptyTree
107+
expr = Apply(valuesDot("fromName"), Ident(nme.nameDollar) :: Nil),
108+
cases = CaseDef(
109+
pat = Typed(Ident(nme.DEFAULT_EXCEPTION_NAME), TypeTree(defn.NoSuchElementExceptionType)),
110+
guard = EmptyTree,
111+
body = Throw(New(TypeTree(defn.IllegalArgumentExceptionType), List(valuesOfExnMessage :: Nil)))
112+
) :: Nil,
113+
finalizer = EmptyTree
114114
)
115115
val valueOfDef = DefDef(nme.valueOf, Nil, List(param(nme.nameDollar, defn.StringType) :: Nil),
116116
TypeTree(), valuesOfBody)

compiler/src/dotty/tools/dotc/core/Definitions.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -605,9 +605,9 @@ class Definitions {
605605
@threadUnsafe lazy val SystemClass: ClassSymbol = ctx.requiredClass("java.lang.System")
606606
@threadUnsafe lazy val SystemModule: Symbol = SystemClass.linkedClass
607607

608-
lazy val NoSuchElementExceptionClass = ctx.requiredClass("java.util.NoSuchElementException")
608+
@threadUnsafe lazy val NoSuchElementExceptionClass = ctx.requiredClass("java.util.NoSuchElementException")
609609
def NoSuchElementExceptionType = NoSuchElementExceptionClass.typeRef
610-
lazy val IllegalArgumentExceptionClass = ctx.requiredClass("java.lang.IllegalArgumentException")
610+
@threadUnsafe lazy val IllegalArgumentExceptionClass = ctx.requiredClass("java.lang.IllegalArgumentException")
611611
def IllegalArgumentExceptionType = IllegalArgumentExceptionClass.typeRef
612612

613613
// in scalac modified to have Any as parent
@@ -708,8 +708,6 @@ class Definitions {
708708
def EnumClass(implicit ctx: Context): ClassSymbol = EnumType.symbol.asClass
709709
@threadUnsafe lazy val Enum_ordinalR: TermRef = EnumClass.requiredMethodRef(nme.ordinal)
710710
def Enum_ordinal(implicit ctx: Context): Symbol = Enum_ordinalR.symbol
711-
@threadUnsafe lazy val JEnumType: TypeRef = ctx.requiredClassRef("scala.compat.JEnum")
712-
def JEnumClass(implicit ctx: Context): ClassSymbol = JEnumType.symbol.asClass
713711
@threadUnsafe lazy val EnumValuesType: TypeRef = ctx.requiredClassRef("scala.runtime.EnumValues")
714712
def EnumValuesClass(implicit ctx: Context): ClassSymbol = EnumValuesType.symbol.asClass
715713
@threadUnsafe lazy val ProductType: TypeRef = ctx.requiredClassRef("scala.Product")

0 commit comments

Comments
 (0)