@@ -353,14 +353,17 @@ class JSCodeGen()(using genCtx: Context) {
353
353
tree match {
354
354
case EmptyTree => ()
355
355
356
- case _ : ValDef =>
357
- () // fields are added via genClassFields()
356
+ case vd : ValDef =>
357
+ // fields are added via genClassFields(), but we need to generate the JS native members
358
+ val sym = vd.symbol
359
+ if (! sym.is(Module ) && sym.hasAnnotation(jsdefn.JSNativeAnnot ))
360
+ generatedNonFieldMembers += genJSNativeMemberDef(vd)
358
361
359
362
case dd : DefDef =>
360
363
val sym = dd.symbol
361
-
362
- if ( sym.hasAnnotation(jsdefn. JSNativeAnnot ))
363
- generatedNonFieldMembers += genJSNativeMemberDef(dd)
364
+ if sym.hasAnnotation(jsdefn. JSNativeAnnot ) then
365
+ if ! sym.is( Accessor ) then
366
+ generatedNonFieldMembers += genJSNativeMemberDef(dd)
364
367
else
365
368
generatedNonFieldMembers ++= genMethod(dd)
366
369
@@ -1379,12 +1382,12 @@ class JSCodeGen()(using genCtx: Context) {
1379
1382
// Generate a method -------------------------------------------------------
1380
1383
1381
1384
/** Generates the JSNativeMemberDef. */
1382
- def genJSNativeMemberDef (tree : DefDef ): js.JSNativeMemberDef = {
1385
+ def genJSNativeMemberDef (tree : ValOrDefDef ): js.JSNativeMemberDef = {
1383
1386
implicit val pos = tree.span
1384
1387
1385
1388
val sym = tree.symbol
1386
1389
val flags = js.MemberFlags .empty.withNamespace(js.MemberNamespace .PublicStatic )
1387
- val methodName = encodeMethodSym (sym)
1390
+ val methodName = encodeJSNativeMemberSym (sym)
1388
1391
val jsNativeLoadSpec = computeJSNativeLoadSpecOfValDef(sym)
1389
1392
js.JSNativeMemberDef (flags, methodName, jsNativeLoadSpec)
1390
1393
}
@@ -1782,6 +1785,8 @@ class JSCodeGen()(using genCtx: Context) {
1782
1785
genLoadModule(sym)
1783
1786
} else if (sym.is(JavaStatic )) {
1784
1787
genLoadStaticField(sym)
1788
+ } else if (sym.hasAnnotation(jsdefn.JSNativeAnnot )) {
1789
+ genJSNativeMemberSelect(tree)
1785
1790
} else {
1786
1791
val (field, boxed) = genAssignableField(sym, qualifier)
1787
1792
if (boxed) unbox(field, atPhase(elimErasedValueTypePhase)(sym.info))
@@ -3030,7 +3035,7 @@ class JSCodeGen()(using genCtx: Context) {
3030
3035
else
3031
3036
genApplyJSClassMethod(genExpr(receiver), sym, genActualArgs(sym, args))
3032
3037
} else if (sym.hasAnnotation(jsdefn.JSNativeAnnot )) {
3033
- genJSNativeMemberCall(tree, isStat )
3038
+ genJSNativeMemberCall(tree)
3034
3039
} else {
3035
3040
genApplyMethodMaybeStatically(genExpr(receiver), sym, genActualArgs(sym, args))
3036
3041
}
@@ -3161,14 +3166,21 @@ class JSCodeGen()(using genCtx: Context) {
3161
3166
}
3162
3167
3163
3168
/** Gen JS code for a call to a native JS def or val. */
3164
- private def genJSNativeMemberCall (tree : Apply , isStat : Boolean ): js.Tree = {
3169
+ private def genJSNativeMemberSelect (tree : Tree ): js.Tree =
3170
+ genJSNativeMemberSelectOrCall(tree, Nil )
3171
+
3172
+ /** Gen JS code for a call to a native JS def or val. */
3173
+ private def genJSNativeMemberCall (tree : Apply ): js.Tree =
3174
+ genJSNativeMemberSelectOrCall(tree, tree.args)
3175
+
3176
+ /** Gen JS code for a call to a native JS def or val. */
3177
+ private def genJSNativeMemberSelectOrCall (tree : Tree , args : List [Tree ]): js.Tree = {
3165
3178
val sym = tree.symbol
3166
- val Apply (_, args) = tree
3167
3179
3168
3180
implicit val pos = tree.span
3169
3181
3170
3182
val jsNativeMemberValue =
3171
- js.SelectJSNativeMember (encodeClassName(sym.owner), encodeMethodSym (sym))
3183
+ js.SelectJSNativeMember (encodeClassName(sym.owner), encodeJSNativeMemberSym (sym))
3172
3184
3173
3185
val boxedResult =
3174
3186
if (sym.isJSGetter) jsNativeMemberValue
0 commit comments