@@ -802,20 +802,25 @@ class JSCodeGen()(using genCtx: Context) {
802
802
if (isJSClass && f.isJSExposed)
803
803
js.JSFieldDef (flags, genExpr(f.jsName)(f.sourcePos), irTpe) :: Nil
804
804
else
805
- val fieldDef = js.FieldDef (flags, encodeFieldSym(f), originalNameOfField(f), irTpe)
806
- val rest =
805
+ val fieldIdent = encodeFieldSym(f)
806
+ val originalName = originalNameOfField(f)
807
+ val fieldDef = js.FieldDef (flags, fieldIdent, originalName, irTpe)
808
+ val optionalStaticFieldGetter =
807
809
if isStaticField then
810
+ // Here we are generating a public static getter for the static field,
811
+ // this is its API for other units. This is necessary for singleton
812
+ // enum values, which are backed by static fields.
808
813
val className = encodeClassName(classSym)
809
814
val body = js.Block (
810
- js.LoadModule (className),
811
- js.SelectStatic (className, encodeFieldSym(f))(toIRType(f.info) ))
815
+ js.LoadModule (className),
816
+ js.SelectStatic (className, fieldIdent)(irTpe ))
812
817
js.MethodDef (js.MemberFlags .empty.withNamespace(js.MemberNamespace .PublicStatic ),
813
- encodeStaticMemberSym(f), originalNameOfField(f) , Nil , toIRType(f.info) ,
818
+ encodeStaticMemberSym(f), originalName , Nil , irTpe ,
814
819
Some (body))(
815
- OptimizerHints .empty, None ) :: Nil
820
+ OptimizerHints .empty, None ) :: Nil
816
821
else
817
822
Nil
818
- fieldDef :: rest
823
+ fieldDef :: optionalStaticFieldGetter
819
824
}).toList
820
825
}
821
826
@@ -1451,6 +1456,8 @@ class JSCodeGen()(using genCtx: Context) {
1451
1456
1452
1457
case Assign (lhs0, rhs) =>
1453
1458
val sym = lhs0.symbol
1459
+ if (sym.is(JavaStaticTerm ) && sym.source != ctx.compilationUnit.source)
1460
+ throw new FatalError (s " Assignment to static member ${sym.fullName} not supported " )
1454
1461
def genRhs = genExpr(rhs)
1455
1462
val lhs = lhs0 match {
1456
1463
case lhs : Ident => desugarIdent(lhs).getOrElse(lhs)
@@ -3916,12 +3923,14 @@ class JSCodeGen()(using genCtx: Context) {
3916
3923
(f, true)
3917
3924
} else*/ {
3918
3925
val f =
3926
+ val className = encodeClassName(sym.owner)
3927
+ val fieldIdent = encodeFieldSym(sym)
3928
+ val irType = toIRType(sym.info)
3929
+
3919
3930
if sym.is(JavaStatic ) then
3920
- js.SelectStatic (encodeClassName(sym.owner),
3921
- encodeFieldSym(sym))(toIRType(sym.info))
3931
+ js.SelectStatic (className, fieldIdent)(irType)
3922
3932
else
3923
- js.Select (qual, encodeClassName(sym.owner),
3924
- encodeFieldSym(sym))(toIRType(sym.info))
3933
+ js.Select (qual, className, fieldIdent)(irType)
3925
3934
3926
3935
(f, false )
3927
3936
}
0 commit comments