[JS IR] Enable directives for IR box tests
This commit is contained in:
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.ir.declarations.StageController
|
|||||||
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory
|
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory
|
||||||
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
|
import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator
|
||||||
import org.jetbrains.kotlin.ir.util.noUnboundLeft
|
import org.jetbrains.kotlin.ir.util.noUnboundLeft
|
||||||
|
import org.jetbrains.kotlin.js.backend.ast.JsProgram
|
||||||
import org.jetbrains.kotlin.js.config.RuntimeDiagnostic
|
import org.jetbrains.kotlin.js.config.RuntimeDiagnostic
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
@@ -31,6 +32,7 @@ class CompilerResult(
|
|||||||
|
|
||||||
class CompilationOutputs(
|
class CompilationOutputs(
|
||||||
val jsCode: String,
|
val jsCode: String,
|
||||||
|
val jsProgram: JsProgram? = null,
|
||||||
val sourceMap: String? = null,
|
val sourceMap: String? = null,
|
||||||
val dependencies: Iterable<Pair<String, CompilationOutputs>> = emptyList()
|
val dependencies: Iterable<Pair<String, CompilationOutputs>> = emptyList()
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-1
@@ -113,7 +113,7 @@ class IrModuleToJsTransformer(
|
|||||||
)
|
)
|
||||||
}.reversed()
|
}.reversed()
|
||||||
|
|
||||||
return CompilationOutputs(mainModule.jsCode, mainModule.sourceMap, dependencies)
|
return CompilationOutputs(mainModule.jsCode, mainModule.jsProgram, mainModule.sourceMap, dependencies)
|
||||||
} else {
|
} else {
|
||||||
return generateWrappedModuleBody2(
|
return generateWrappedModuleBody2(
|
||||||
modules,
|
modules,
|
||||||
@@ -228,6 +228,7 @@ class IrModuleToJsTransformer(
|
|||||||
|
|
||||||
return CompilationOutputs(
|
return CompilationOutputs(
|
||||||
jsCode.toString(),
|
jsCode.toString(),
|
||||||
|
program,
|
||||||
if(sourceMapsEnabled) sourceMapBuilder.build() else null
|
if(sourceMapsEnabled) sourceMapBuilder.build() else null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -790,7 +790,7 @@ abstract class BasicBoxTest(
|
|||||||
incrementalData.header = incrementalService.headerMetadata
|
incrementalData.header = incrementalService.headerMetadata
|
||||||
}
|
}
|
||||||
|
|
||||||
processJsProgram(translationResult.program, units.filterIsInstance<TranslationUnit.SourceFile>().map { it.file })
|
processJsProgram(translationResult.program, units)
|
||||||
checkSourceMap(outputFile, translationResult.program, remap)
|
checkSourceMap(outputFile, translationResult.program, remap)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -816,11 +816,15 @@ abstract class BasicBoxTest(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processJsProgram(program: JsProgram, psiFiles: List<KtFile>) {
|
protected fun processJsProgram(program: JsProgram, units: List<TranslationUnit>) {
|
||||||
psiFiles.asSequence()
|
units.filterIsInstance<TranslationUnit.SourceFile>()
|
||||||
.map { it.text }
|
.forEach { DirectiveTestUtils.processDirectives(program, it.file.text, targetBackend) }
|
||||||
.forEach { DirectiveTestUtils.processDirectives(program, it) }
|
|
||||||
program.verifyAst()
|
// TODO: For now the IR backend generates JS code that doesn't pass verification,
|
||||||
|
// TODO: so we temporarily disabled AST verification.
|
||||||
|
if (targetBackend == TargetBackend.JS) {
|
||||||
|
program.verifyAst()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkSourceMap(outputFile: File, program: JsProgram, remap: Boolean) {
|
private fun checkSourceMap(outputFile: File, program: JsProgram, remap: Boolean) {
|
||||||
|
|||||||
@@ -347,6 +347,8 @@ abstract class BasicIrBoxTest(
|
|||||||
logger.logFile("Output d.ts", dtsFile)
|
logger.logFile("Output d.ts", dtsFile)
|
||||||
dtsFile.write(compiledModule.tsDefinitions ?: error("No ts definitions"))
|
dtsFile.write(compiledModule.tsDefinitions ?: error("No ts definitions"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compiledOutput.jsProgram?.let { processJsProgram(it, units) }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (runIrPir) {
|
if (runIrPir) {
|
||||||
@@ -368,6 +370,7 @@ abstract class BasicIrBoxTest(
|
|||||||
verifySignatures = !skipMangleVerification,
|
verifySignatures = !skipMangleVerification,
|
||||||
)
|
)
|
||||||
compiledModule.outputs!!.writeTo(pirOutputFile, config)
|
compiledModule.outputs!!.writeTo(pirOutputFile, config)
|
||||||
|
processJsProgram(compiledModule.outputs!!.jsProgram!!, units)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user