@@ -455,41 +455,43 @@ class ExplicitJSClasses extends MiniPhase with InfoTransformer { thisPhase =>
455455 if (fixedParents eq tree.parents) tree
456456 else cpy.Template (tree)(parents = fixedParents)
457457 } else {
458- val newDecls = List .newBuilder[Tree ]
459- for (decl <- tree.body) {
460- val declSym = decl.symbol
461- if (declSym eq null ) {
462- // not a member def, do nothing
463- } else if (isJSClass(declSym)) {
464- val jsclassAccessor = jsclassAccessorFor(declSym)
465-
466- val rhs = if (cls.hasAnnotation(jsdefn.JSNativeAnnot )) {
467- ref(jsdefn.JSPackage_native )
468- } else {
469- val clazzValue = clsOf(declSym.typeRef)
470- if (cls.isStaticOwner) {
471- // #4086
472- ref(jsdefn.Runtime_constructorOf ).appliedTo(clazzValue)
458+ val newStats = List .newBuilder[Tree ]
459+ for (stat <- tree.body) {
460+ stat match {
461+ case stat : TypeDef if stat.isClassDef && isJSClass(stat.symbol) =>
462+ val innerClassSym = stat.symbol.asClass
463+ val jsclassAccessor = jsclassAccessorFor(innerClassSym)
464+
465+ val rhs = if (cls.hasAnnotation(jsdefn.JSNativeAnnot )) {
466+ ref(jsdefn.JSPackage_native )
473467 } else {
474- val parentTpe = extractSuperTpeFromImpl(decl.asInstanceOf [TypeDef ].rhs.asInstanceOf [Template ])
475- val superClassCtor = genJSConstructorOf(tree, parentTpe)
476- ref(jsdefn.Runtime_createInnerJSClass ).appliedTo(clazzValue, superClassCtor)
468+ val clazzValue = clsOf(innerClassSym.typeRef)
469+ if (cls.isStaticOwner) {
470+ // scala-js/scala-js#4086
471+ ref(jsdefn.Runtime_constructorOf ).appliedTo(clazzValue)
472+ } else {
473+ val parentTpe = extractSuperTpeFromImpl(stat.rhs.asInstanceOf [Template ])
474+ val superClassCtor = genJSConstructorOf(tree, parentTpe)
475+ ref(jsdefn.Runtime_createInnerJSClass ).appliedTo(clazzValue, superClassCtor)
476+ }
477477 }
478- }
479478
480- newDecls += ValDef (jsclassAccessor, rhs)
481- } else if (cls.isStaticOwner) {
482- // #4086
483- if (isExposedModule(declSym)) {
484- val getter = cls.info.decls.lookup(jsobjectGetterNameFor(declSym)).asTerm
485- newDecls += DefDef (getter, ref(declSym))
486- }
479+ newStats += ValDef (jsclassAccessor, rhs)
480+
481+ case stat : ValDef if cls.isStaticOwner && isExposedModule(stat.symbol) =>
482+ // scala-js/scala-js#4086
483+ val moduleSym = stat.symbol
484+ val getter = cls.info.decls.lookup(jsobjectGetterNameFor(moduleSym)).asTerm
485+ newStats += DefDef (getter, ref(moduleSym))
486+
487+ case _ =>
488+ () // nothing to do
487489 }
488490
489- newDecls += decl
491+ newStats += stat
490492 }
491493
492- cpy.Template (tree)(tree.constr, fixedParents, Nil , tree.self, newDecls .result())
494+ cpy.Template (tree)(tree.constr, fixedParents, Nil , tree.self, newStats .result())
493495 }
494496 }
495497
0 commit comments