Skip to content

Commit a6b7a9d

Browse files
committed
Refactoring: Restrict responsibility of gen member idents to SJSGen.
Previously, `SJSGen` generated `Ident`s for field members, but only names for method members. Generating the `Ident`s for methods was left in `ClassEmitter` and `Function`. Now, we concentrate that responsibility in `SJSGen` only. In addition, we make a clear distinction between idents generated for *definitions*, which receive an `OriginalName`, and those used for *use sites*, which never receive one.
1 parent 298c60a commit a6b7a9d

File tree

4 files changed

+32
-29
lines changed

4 files changed

+32
-29
lines changed

linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/ClassEmitter.scala

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ private[emitter] final class ClassEmitter(sjsGen: SJSGen) {
355355
} yield {
356356
val field = anyField.asInstanceOf[FieldDef]
357357
implicit val pos = field.pos
358-
js.Assign(genSelect(js.This(), field.name, field.originalName),
358+
js.Assign(genSelectForDef(js.This(), field.name, field.originalName),
359359
genZeroOf(field.ftpe))
360360
}
361361
}
@@ -422,8 +422,11 @@ private[emitter] final class ClassEmitter(sjsGen: SJSGen) {
422422
val zero = genBoxedZeroOf(field.ftpe)
423423
field match {
424424
case FieldDef(_, name, originalName, _) =>
425+
/* TODO This seems to be dead code, which is somehow reassuring
426+
* because I don't know what it is supposed to achieve.
427+
*/
425428
WithGlobals(
426-
js.Assign(js.DotSelect(classVarRef, genMemberFieldIdent(name, originalName)), zero))
429+
js.Assign(genSelectForDef(classVarRef, name, originalName), zero))
427430
case JSFieldDef(_, name, _) =>
428431
for (propName <- genMemberNameTree(name))
429432
yield js.Assign(genPropSelect(classVarRef, propName), zero)
@@ -472,7 +475,7 @@ private[emitter] final class ClassEmitter(sjsGen: SJSGen) {
472475
for {
473476
methodFun <- desugarToFunction(className, method.args, method.body.get, method.resultType)
474477
} yield {
475-
val jsMethodName = genMemberMethodIdent(method.name, method.originalName)
478+
val jsMethodName = genMethodIdentForDef(method.name, method.originalName)
476479

477480
if (useESClass) {
478481
js.MethodDef(static = false, jsMethodName, methodFun.args, methodFun.restParam, methodFun.body)
@@ -659,20 +662,6 @@ private[emitter] final class ClassEmitter(sjsGen: SJSGen) {
659662
}
660663
}
661664

662-
private def genMemberFieldIdent(ident: FieldIdent,
663-
originalName: OriginalName): js.Ident = {
664-
val jsName = genName(ident.name)
665-
js.Ident(jsName, genOriginalName(ident.name, originalName, jsName))(
666-
ident.pos)
667-
}
668-
669-
private def genMemberMethodIdent(ident: MethodIdent,
670-
originalName: OriginalName): js.Ident = {
671-
val jsName = genMethodName(ident.name)
672-
js.Ident(jsName, genOriginalName(ident.name, originalName, jsName))(
673-
ident.pos)
674-
}
675-
676665
def needInstanceTests(tree: LinkedClass)(
677666
implicit globalKnowledge: GlobalKnowledge): Boolean = {
678667
tree.hasInstanceTests || (tree.hasRuntimeTypeInfo &&

linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/CoreJSLib.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -877,7 +877,7 @@ private[emitter] object CoreJSLib {
877877

878878
if (implementedInObject) {
879879
val staticObjectCall: Tree = {
880-
val fun = globalVar(VarField.c, ObjectClass).prototype DOT genMethodName(methodName)
880+
val fun = globalVar(VarField.c, ObjectClass).prototype DOT genMethodIdent(methodName)
881881
Return(Apply(fun DOT "call", instance :: args))
882882
}
883883

@@ -1504,7 +1504,8 @@ private[emitter] object CoreJSLib {
15041504
Nil
15051505
}
15061506

1507-
val clone = MethodDef(static = false, Ident(genMethodName(cloneMethodName)), Nil, None, {
1507+
val cloneMethodIdent = genMethodIdentForDef(cloneMethodName, NoOriginalName)
1508+
val clone = MethodDef(static = false, cloneMethodIdent, Nil, None, {
15081509
Return(New(ArrayClass,
15091510
Apply(genIdentBracketSelect(This().u, "slice"), Nil) :: Nil))
15101511
})
@@ -1809,7 +1810,8 @@ private[emitter] object CoreJSLib {
18091810
Nil
18101811
}
18111812

1812-
val clone = MethodDef(static = false, Ident(genMethodName(cloneMethodName)), Nil, None, {
1813+
val cloneMethodIdent = genMethodIdentForDef(cloneMethodName, NoOriginalName)
1814+
val clone = MethodDef(static = false, cloneMethodIdent, Nil, None, {
18131815
Return(New(ArrayClass,
18141816
Apply(genIdentBracketSelect(This().u, "slice"), Nil) :: Nil))
18151817
})

linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/FunctionEmitter.scala

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2252,7 +2252,7 @@ private[emitter] class FunctionEmitter(sjsGen: SJSGen) {
22522252
val newArgs = transformTypedArgs(method.name, args)
22532253

22542254
def genNormalApply(): js.Tree =
2255-
js.Apply(newReceiver(false) DOT transformMethodIdent(method), newArgs)
2255+
js.Apply(newReceiver(false) DOT genMethodIdent(method), newArgs)
22562256

22572257
def genDispatchApply(): js.Tree =
22582258
js.Apply(globalVar(VarField.dp, methodName), newReceiver(false) :: newArgs)
@@ -2315,7 +2315,7 @@ private[emitter] class FunctionEmitter(sjsGen: SJSGen) {
23152315
genApplyStaticLike(VarField.f, className, method, transformedArgs)
23162316
} else {
23172317
val fun =
2318-
globalVar(VarField.c, className).prototype DOT transformMethodIdent(method)
2318+
globalVar(VarField.c, className).prototype DOT genMethodIdent(method)
23192319
js.Apply(fun DOT "call", transformedArgs)
23202320
}
23212321

@@ -3207,9 +3207,6 @@ private[emitter] class FunctionEmitter(sjsGen: SJSGen) {
32073207
private def transformLabelIdent(ident: LabelIdent): js.Ident =
32083208
js.Ident(genName(ident.name))(ident.pos)
32093209

3210-
private def transformMethodIdent(ident: MethodIdent): js.Ident =
3211-
js.Ident(genMethodName(ident.name))(ident.pos)
3212-
32133210
private def transformLocalVarIdent(ident: LocalIdent): js.Ident =
32143211
js.Ident(transformLocalName(ident.name))(ident.pos)
32153212

linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/SJSGen.scala

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ private[emitter] final class SJSGen(
154154
DotSelect(receiver, Ident(genName(field.name))(field.pos))
155155
}
156156

157-
def genSelect(receiver: Tree, field: irt.FieldIdent,
157+
def genSelectForDef(receiver: Tree, field: irt.FieldIdent,
158158
originalName: OriginalName)(
159159
implicit pos: Position): Tree = {
160160
val jsName = genName(field.name)
@@ -164,16 +164,31 @@ private[emitter] final class SJSGen(
164164

165165
def genApply(receiver: Tree, methodName: MethodName, args: List[Tree])(
166166
implicit pos: Position): Tree = {
167-
Apply(DotSelect(receiver, Ident(genMethodName(methodName))), args)
167+
Apply(DotSelect(receiver, genMethodIdent(methodName)), args)
168168
}
169169

170170
def genApply(receiver: Tree, methodName: MethodName, args: Tree*)(
171171
implicit pos: Position): Tree = {
172172
genApply(receiver, methodName, args.toList)
173173
}
174174

175-
def genMethodName(methodName: MethodName): String =
176-
genName(methodName)
175+
def genMethodIdent(methodIdent: irt.MethodIdent): Ident =
176+
genMethodIdent(methodIdent.name)(methodIdent.pos)
177+
178+
def genMethodIdentForDef(methodIdent: irt.MethodIdent,
179+
originalName: OriginalName): Ident = {
180+
genMethodIdentForDef(methodIdent.name, originalName)(methodIdent.pos)
181+
}
182+
183+
def genMethodIdent(methodName: MethodName)(implicit pos: Position): Ident =
184+
Ident(genName(methodName))
185+
186+
def genMethodIdentForDef(methodName: MethodName, originalName: OriginalName)(
187+
implicit pos: Position): Ident = {
188+
val jsName = genName(methodName)
189+
val jsOrigName = genOriginalName(methodName, originalName, jsName)
190+
Ident(jsName, jsOrigName)
191+
}
177192

178193
def genJSPrivateSelect(receiver: Tree, field: irt.FieldIdent)(
179194
implicit moduleContext: ModuleContext, globalKnowledge: GlobalKnowledge,

0 commit comments

Comments
 (0)