Skip to content

Commit daa4643

Browse files
committed
Use pattern matching in transformTemplate.
1 parent df50376 commit daa4643

File tree

1 file changed

+30
-28
lines changed

1 file changed

+30
-28
lines changed

compiler/src/dotty/tools/dotc/transform/sjs/ExplicitJSClasses.scala

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)