JS backend: removed adding '$' to label suffix

This commit is contained in:
Alexey Tsvetkov
2014-10-23 20:07:42 +04:00
parent 78e12f7cfa
commit fb8918bbe6
11 changed files with 38 additions and 22 deletions
@@ -49,14 +49,30 @@ public class JsFunctionScope(parent: JsScope, description: String) : JsScope(par
topLabelScope?.findName(label)
private inner class LabelScope(parent: LabelScope?, val ident: String) : JsScope(parent, "Label scope for $ident", null) {
val labelName = JsName(this@JsFunctionScope, parent?.getFreshIdent(ident) ?: ident)
val labelName: JsName
{
val freshIdent = when {
ident in RESERVED_WORDS -> getFreshIdent(ident)
parent != null -> parent.getFreshIdent(ident)
else -> ident
}
labelName = JsName(this@JsFunctionScope, freshIdent)
}
override fun findOwnName(name: String): JsName? =
if (name == ident) labelName else null
/**
* Safe call is necessary, because hasOwnName can be called
* in constructor before labelName is initialized (see KT-4394)
*/
[suppress("UNNECESSARY_SAFE_CALL")]
override fun hasOwnName(name: String): Boolean =
name == ident
|| name == labelName.getIdent()
name in RESERVED_WORDS
|| name == ident
|| name == labelName?.getIdent()
|| getParent()?.hasOwnName(name) ?: false
}