[JS IR] make using the original parameter names possible

This commit is contained in:
Anton Bannykh
2021-11-12 13:50:38 +03:00
committed by TeamCityServer
parent e342ade00a
commit f413d7fd75
2 changed files with 13 additions and 8 deletions
@@ -12,12 +12,13 @@ import org.jetbrains.kotlin.ir.declarations.IrPackageFragment
import org.jetbrains.kotlin.js.backend.ast.JsBlock
import org.jetbrains.kotlin.js.backend.ast.JsGlobalBlock
class IrFileToJsTransformer : BaseIrElementToJsNodeTransformer<JsBlock, JsStaticContext> {
class IrFileToJsTransformer(private val useBareParameterNames: Boolean = false) : BaseIrElementToJsNodeTransformer<JsBlock, JsStaticContext> {
override fun visitFile(declaration: IrFile, data: JsStaticContext): JsBlock {
val fileContext = JsGenerationContext(
currentFile = declaration,
currentFunction = null,
staticContext = data,
useBareParameterNames = useBareParameterNames
)
val block = JsGlobalBlock()
@@ -10,11 +10,8 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrLoop
import org.jetbrains.kotlin.ir.expressions.IrReturnableBlock
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.util.isSuspend
import org.jetbrains.kotlin.js.backend.ast.JsName
import org.jetbrains.kotlin.js.backend.ast.JsNameRef
import org.jetbrains.kotlin.js.backend.ast.JsScope
import org.jetbrains.kotlin.js.backend.ast.JsThisRef
val emptyScope: JsScope
get() = object : JsScope("nil") {
@@ -28,7 +25,8 @@ class JsGenerationContext(
val currentFunction: IrFunction?,
val staticContext: JsStaticContext,
val localNames: LocalNameGenerator? = null,
private val nameCache: MutableMap<IrElement, JsName> = mutableMapOf()
private val nameCache: MutableMap<IrElement, JsName> = mutableMapOf(),
private val useBareParameterNames: Boolean = false,
): IrNamer by staticContext {
fun newFile(file: IrFile, func: IrFunction? = null, localNames: LocalNameGenerator? = null): JsGenerationContext {
return JsGenerationContext(
@@ -37,6 +35,7 @@ class JsGenerationContext(
staticContext = staticContext,
localNames = localNames,
nameCache = nameCache,
useBareParameterNames = useBareParameterNames,
)
}
@@ -47,14 +46,19 @@ class JsGenerationContext(
staticContext = staticContext,
localNames = localNames,
nameCache = nameCache,
useBareParameterNames = useBareParameterNames,
)
}
fun getNameForValueDeclaration(declaration: IrDeclarationWithName): JsName {
return nameCache.getOrPut(declaration) {
val name = localNames!!.variableNames.names[declaration]
?: error("Variable name is not found ${declaration.name}")
JsName(name, true)
if (useBareParameterNames) {
JsName(sanitizeName(declaration.name.asString()), true)
} else {
val name = localNames!!.variableNames.names[declaration]
?: error("Variable name is not found ${declaration.name}")
JsName(name, true)
}
}
}