[IR] create IrScript, infrastructure for it and update visitors
This commit is contained in:
committed by
romanart
parent
f13e05de7d
commit
14510c1da3
+11
-1
@@ -7,7 +7,10 @@ package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs
|
||||
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.js.backend.ast.*
|
||||
import org.jetbrains.kotlin.js.backend.ast.JsEmpty
|
||||
import org.jetbrains.kotlin.js.backend.ast.JsGlobalBlock
|
||||
import org.jetbrains.kotlin.js.backend.ast.JsStatement
|
||||
import org.jetbrains.kotlin.js.backend.ast.JsVars
|
||||
|
||||
@Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
|
||||
class IrDeclarationToJsTransformer : BaseIrElementToJsNodeTransformer<JsStatement, JsGenerationContext> {
|
||||
@@ -44,4 +47,11 @@ class IrDeclarationToJsTransformer : BaseIrElementToJsNodeTransformer<JsStatemen
|
||||
override fun visitVariable(declaration: IrVariable, context: JsGenerationContext): JsStatement {
|
||||
return declaration.accept(IrElementToJsStatementTransformer(), context)
|
||||
}
|
||||
|
||||
override fun visitScript(irScript: IrScript, context: JsGenerationContext): JsStatement {
|
||||
return JsGlobalBlock().apply {
|
||||
statements += irScript.declarations.map { it.accept(this@IrDeclarationToJsTransformer, context) }
|
||||
statements += irScript.statements.map { it.accept(IrElementToJsStatementTransformer(), context) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -8,11 +8,12 @@ package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.js.backend.ast.JsBlock
|
||||
import org.jetbrains.kotlin.js.backend.ast.JsGlobalBlock
|
||||
|
||||
class IrFileToJsTransformer : BaseIrElementToJsNodeTransformer<JsBlock, JsGenerationContext> {
|
||||
override fun visitFile(declaration: IrFile, data: JsGenerationContext): JsBlock {
|
||||
val fileContext = data.newDeclaration()
|
||||
val block = JsBlock()
|
||||
val block = JsGlobalBlock()
|
||||
|
||||
declaration.declarations.forEach {
|
||||
block.statements.add(it.accept(IrDeclarationToJsTransformer(), fileContext))
|
||||
|
||||
+6
-4
@@ -25,15 +25,17 @@ import org.jetbrains.kotlin.utils.DFS
|
||||
class IrModuleToJsTransformer(
|
||||
private val backendContext: JsIrBackendContext,
|
||||
private val mainFunction: IrSimpleFunction?,
|
||||
private val mainArguments: List<String>?
|
||||
private val mainArguments: List<String>?,
|
||||
private val generateScriptModule: Boolean = false,
|
||||
var namer: NameTables = NameTables(emptyList())
|
||||
) {
|
||||
val moduleName = backendContext.configuration[CommonConfigurationKeys.MODULE_NAME]!!
|
||||
private val moduleKind = backendContext.configuration[JSConfigurationKeys.MODULE_KIND]!!
|
||||
|
||||
private fun generateModuleBody(module: IrModuleFragment, context: JsGenerationContext): List<JsStatement> {
|
||||
val statements = mutableListOf(
|
||||
JsStringLiteral("use strict").makeStmt()
|
||||
)
|
||||
val statements = mutableListOf<JsStatement>().also {
|
||||
if (!generateScriptModule) it += JsStringLiteral("use strict").makeStmt()
|
||||
}
|
||||
|
||||
val preDeclarationBlock = JsBlock()
|
||||
val postDeclarationBlock = JsBlock()
|
||||
|
||||
@@ -37,7 +37,7 @@ class IrNamerImpl(private val newNameTables: NameTables) : IrNamer {
|
||||
}
|
||||
|
||||
override fun getNameForField(field: IrField): JsName {
|
||||
return if (field.isStatic) {
|
||||
return if (field.isStatic || field.parent is IrScript) {
|
||||
getNameForStaticDeclaration(field)
|
||||
} else {
|
||||
getNameForMemberField(field)
|
||||
|
||||
Reference in New Issue
Block a user