@@ -179,19 +179,19 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
179
179
180
180
// Per method body
181
181
private val currentMethodSym = new ScopedVar [Symbol ]
182
- private val thisLocalVarIdent = new ScopedVar [Option [js. LocalIdent ]]
182
+ private val thisLocalVarName = new ScopedVar [Option [LocalName ]]
183
183
private val enclosingLabelDefInfos = new ScopedVar [Map [Symbol , EnclosingLabelDefInfo ]]
184
184
private val isModuleInitialized = new ScopedVar [VarBox [Boolean ]]
185
185
private val undefinedDefaultParams = new ScopedVar [mutable.Set [Symbol ]]
186
186
private val mutableLocalVars = new ScopedVar [mutable.Set [Symbol ]]
187
187
private val mutatedLocalVars = new ScopedVar [mutable.Set [Symbol ]]
188
188
189
189
private def withPerMethodBodyState [A ](methodSym : Symbol ,
190
- initThisLocalVarIdent : Option [js. LocalIdent ] = None )(body : => A ): A = {
190
+ initThisLocalVarName : Option [LocalName ] = None )(body : => A ): A = {
191
191
192
192
withScopedVars(
193
193
currentMethodSym := methodSym,
194
- thisLocalVarIdent := initThisLocalVarIdent ,
194
+ thisLocalVarName := initThisLocalVarName ,
195
195
enclosingLabelDefInfos := Map .empty,
196
196
isModuleInitialized := new VarBox (false ),
197
197
undefinedDefaultParams := mutable.Set .empty,
@@ -241,7 +241,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
241
241
generatedSAMWrapperCount := new VarBox (0 ),
242
242
delambdafyTargetDefDefs := mutable.Map .empty,
243
243
currentMethodSym := null ,
244
- thisLocalVarIdent := null ,
244
+ thisLocalVarName := null ,
245
245
enclosingLabelDefInfos := null ,
246
246
isModuleInitialized := null ,
247
247
undefinedDefaultParams := null ,
@@ -999,9 +999,9 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
999
999
* FIXME This could clash with a local variable of the constructor or a JS
1000
1000
* class capture. How do we avoid this?
1001
1001
*/
1002
- val selfName = freshLocalIdent(" this" )(pos)
1002
+ val selfIdent = freshLocalIdent(" this" )(pos)
1003
1003
def selfRef (implicit pos : ir.Position ) =
1004
- js.VarRef (selfName )(jstpe.AnyType )
1004
+ js.VarRef (selfIdent.name )(jstpe.AnyType )
1005
1005
1006
1006
def memberLambda (params : List [js.ParamDef ], restParam : Option [js.ParamDef ],
1007
1007
body : js.Tree )(implicit pos : ir.Position ) = {
@@ -1101,7 +1101,8 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
1101
1101
js.JSNew (jsSuperClassRef, args)
1102
1102
}
1103
1103
1104
- val selfVarDef = js.VarDef (selfName, thisOriginalName, jstpe.AnyType , mutable = false , newTree)
1104
+ val selfVarDef = js.VarDef (selfIdent.copy(), // copy for the correct `pos`
1105
+ thisOriginalName, jstpe.AnyType , mutable = false , newTree)
1105
1106
selfVarDef :: memberDefinitions
1106
1107
}
1107
1108
@@ -2040,12 +2041,12 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
2040
2041
* Other (normal) methods are emitted with `genMethodDef()`.
2041
2042
*/
2042
2043
def genMethodWithCurrentLocalNameScope (dd : DefDef ,
2043
- initThisLocalVarIdent : Option [js. LocalIdent ] = None ): js.MethodDef = {
2044
+ initThisLocalVarName : Option [LocalName ] = None ): js.MethodDef = {
2044
2045
2045
2046
implicit val pos = dd.pos
2046
2047
val sym = dd.symbol
2047
2048
2048
- withPerMethodBodyState(sym, initThisLocalVarIdent ) {
2049
+ withPerMethodBodyState(sym, initThisLocalVarName ) {
2049
2050
val methodName = encodeMethodSym(sym)
2050
2051
val originalName = originalNameOfMethod(sym)
2051
2052
@@ -2112,8 +2113,8 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
2112
2113
methodDef
2113
2114
} else {
2114
2115
val patches = (
2115
- unmutatedMutableLocalVars.map(encodeLocalSym (_).name -> false ) :::
2116
- mutatedImmutableLocalVals.map(encodeLocalSym (_).name -> true )
2116
+ unmutatedMutableLocalVars.map(encodeLocalSymName (_) -> false ) :::
2117
+ mutatedImmutableLocalVals.map(encodeLocalSymName (_) -> true )
2117
2118
).toMap
2118
2119
patchMutableFlagOfLocals(methodDef, patches)
2119
2120
}
@@ -2195,15 +2196,15 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
2195
2196
private def patchTypeOfParamDefs (methodDef : js.MethodDef ,
2196
2197
patches : Map [LocalName , jstpe.Type ]): js.MethodDef = {
2197
2198
2198
- def newType (name : js. LocalIdent , oldType : jstpe.Type ): jstpe.Type =
2199
- patches.getOrElse(name.name , oldType)
2199
+ def newType (name : LocalName , oldType : jstpe.Type ): jstpe.Type =
2200
+ patches.getOrElse(name, oldType)
2200
2201
2201
2202
val js .MethodDef (flags, methodName, originalName, params, resultType, body) =
2202
2203
methodDef
2203
2204
val newParams = for {
2204
2205
p @ js.ParamDef (name, originalName, ptpe, mutable) <- params
2205
2206
} yield {
2206
- js.ParamDef (name, originalName, newType(name, ptpe), mutable)(p.pos)
2207
+ js.ParamDef (name, originalName, newType(name.name , ptpe), mutable)(p.pos)
2207
2208
}
2208
2209
val transformer = new ir.Transformers .Transformer {
2209
2210
override def transform (tree : js.Tree ): js.Tree = tree match {
@@ -2292,7 +2293,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
2292
2293
2293
2294
val innerBody = {
2294
2295
withScopedVars(
2295
- thisLocalVarIdent := Some (thisLocalIdent)
2296
+ thisLocalVarName := Some (thisLocalIdent.name )
2296
2297
) {
2297
2298
js.Block (otherStats.map(genStat) :+ (
2298
2299
if (bodyIsStat) genStat(rhs)
@@ -2371,7 +2372,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
2371
2372
2372
2373
val thisLocalIdent = freshLocalIdent(" this" )
2373
2374
withScopedVars(
2374
- thisLocalVarIdent := Some (thisLocalIdent)
2375
+ thisLocalVarName := Some (thisLocalIdent.name )
2375
2376
) {
2376
2377
val staticNamespace =
2377
2378
if (namespace.isPrivate) js.MemberNamespace .PrivateStatic
@@ -2782,7 +2783,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
2782
2783
case _ =>
2783
2784
mutatedLocalVars += sym
2784
2785
js.Assign (
2785
- js.VarRef (encodeLocalSym (sym))(toIRType(sym.tpe)),
2786
+ js.VarRef (encodeLocalSymName (sym))(toIRType(sym.tpe)),
2786
2787
genRhs)
2787
2788
}
2788
2789
@@ -2832,15 +2833,14 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
2832
2833
* is one.
2833
2834
*/
2834
2835
private def genThis ()(implicit pos : Position ): js.Tree = {
2835
- thisLocalVarIdent .fold[js.Tree ] {
2836
+ thisLocalVarName .fold[js.Tree ] {
2836
2837
if (tryingToGenMethodAsJSFunction) {
2837
2838
throw new CancelGenMethodAsJSFunction (
2838
2839
" Trying to generate `this` inside the body" )
2839
2840
}
2840
2841
js.This ()(currentThisType)
2841
- } { thisLocalIdent =>
2842
- // .copy() to get the correct position
2843
- js.VarRef (thisLocalIdent.copy())(currentThisTypeNullable)
2842
+ } { thisLocalName =>
2843
+ js.VarRef (thisLocalName)(currentThisTypeNullable)
2844
2844
}
2845
2845
}
2846
2846
@@ -3093,7 +3093,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
3093
3093
implicit pos : Position ): js.Tree = {
3094
3094
3095
3095
val exceptIdent = freshLocalIdent(" e" )
3096
- val origExceptVar = js.VarRef (exceptIdent)(jstpe.AnyType )
3096
+ val origExceptVar = js.VarRef (exceptIdent.name )(jstpe.AnyType )
3097
3097
3098
3098
val mightCatchJavaScriptException = catches.exists { caseDef =>
3099
3099
caseDef.pat match {
@@ -3486,7 +3486,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
3486
3486
List .newBuilder[(js.VarRef , jstpe.Type , js.LocalIdent , js.Tree )]
3487
3487
3488
3488
for ((formalArgSym, arg) <- targetSyms.zip(values)) {
3489
- val formalArg = encodeLocalSym (formalArgSym)
3489
+ val formalArgName = encodeLocalSymName (formalArgSym)
3490
3490
val actualArg = genExpr(arg)
3491
3491
3492
3492
/* #3267 The formal argument representing the special `this` of a
@@ -3511,13 +3511,13 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
3511
3511
else actualArg
3512
3512
3513
3513
actualArg match {
3514
- case js.VarRef (`formalArg `) =>
3514
+ case js.VarRef (`
F438
formalArgName `) =>
3515
3515
// This is trivial assignment, we don't need it
3516
3516
3517
3517
case _ =>
3518
3518
mutatedLocalVars += formalArgSym
3519
- quadruplets += ((js.VarRef (formalArg )(tpe), tpe,
3520
- freshLocalIdent(formalArg.name .withPrefix(" temp$" )),
3519
+ quadruplets += ((js.VarRef (formalArgName )(tpe), tpe,
3520
+ freshLocalIdent(formalArgName .withPrefix(" temp$" )),
3521
3521
fixedActualArg))
3522
3522
}
3523
3523
}
@@ -3538,7 +3538,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
3538
3538
yield js.VarDef (tempArg, NoOriginalName , argType, mutable = false , actualArg)
3539
3539
val trueAssignments =
3540
3540
for ((formalArg, argType, tempArg, _) <- quadruplets)
3541
- yield js.Assign (formalArg, js.VarRef (tempArg)(argType))
3541
+ yield js.Assign (formalArg, js.VarRef (tempArg.name )(argType))
3542
3542
tempAssignments ::: trueAssignments
3543
3543
}
3544
3544
}
@@ -5002,7 +5002,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
5002
5002
val callTrgIdent = freshLocalIdent()
5003
5003
val callTrgVarDef = js.VarDef (callTrgIdent, NoOriginalName , receiverType,
5004
5004
mutable = false , genExpr(receiver))
5005
- val callTrg = js.VarRef (callTrgIdent)(receiverType)
5005
+ val callTrg = js.VarRef (callTrgIdent.name )(receiverType)
5006
5006
5007
5007
val arguments = args zip sym.tpe.params map { case (arg, param) =>
5008
5008
/* No need for enteringPosterasure, because value classes are not
@@ -5453,7 +5453,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
5453
5453
val fVarDef = js.VarDef (freshLocalIdent(" f" ), NoOriginalName ,
5454
5454
jstpe.AnyType , mutable = false , arg2)
5455
5455
val keyVarIdent = freshLocalIdent(" key" )
5456
- val keyVarRef = js.VarRef (keyVarIdent)(jstpe.AnyType )
5456
+ val keyVarRef = js.VarRef (keyVarIdent.name )(jstpe.AnyType )
5457
5457
js.Block (
5458
5458
objVarDef,
5459
5459
fVarDef,
@@ -5488,7 +5488,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
5488
5488
val handlerVarDef = js.VarDef (freshLocalIdent(" handler" ), NoOriginalName ,
5489
5489
jstpe.AnyType , mutable = false , arg2)
5490
5490
val exceptionVarIdent = freshLocalIdent(" e" )
5491
- val exceptionVarRef = js.VarRef (exceptionVarIdent)(jstpe.AnyType )
5491
+ val exceptionVarRef = js.VarRef (exceptionVarIdent.name )(jstpe.AnyType )
5492
5492
js.Block (
5493
5493
bodyVarDef,
5494
5494
handlerVarDef,
@@ -6465,7 +6465,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
6465
6465
// Gen the inlined target method body
6466
6466
val genMethodDef = {
6467
6467
genMethodWithCurrentLocalNameScope(consumeDelambdafyTarget(target),
6468
- initThisLocalVarIdent = thisFormalCapture.map(_.name))
6468
+ initThisLocalVarName = thisFormalCapture.map(_.name .name))
6469
6469
}
6470
6470
val js .MethodDef (methodFlags, _, _, methodParams, _, methodBody) = genMethodDef
6471
6471
@@ -6777,7 +6777,7 @@ abstract class GenJSCode[G <: Global with Singleton](val global: G)
6777
6777
// Utilities ---------------------------------------------------------------
6778
6778
6779
6779
def genVarRef (sym : Symbol )(implicit pos : Position ): js.VarRef =
6780
- js.VarRef (encodeLocalSym (sym))(toIRType(sym.tpe))
6780
+ js.VarRef (encodeLocalSymName (sym))(toIRType(sym.tpe))
6781
6781
6782
6782
def genParamDef (sym : Symbol ): js.ParamDef =
6783
6783
genParamDef(sym, toIRType(sym.tpe))
0 commit comments