[JS IR BE] Fix rebase

This commit is contained in:
Roman Artemev
2019-02-13 20:35:47 +03:00
committed by romanart
parent 4ede02f5b2
commit 67f0d49ea1
3 changed files with 27 additions and 60 deletions
@@ -7,28 +7,27 @@ package org.jetbrains.kotlin.ir.backend.js
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.LoggingContext
import org.jetbrains.kotlin.backend.common.phaser.invokeToplevel
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.functions.functionInterfacePackageFragmentProvider
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.backend.common.phaser.invokeToplevel
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.ir.backend.js.lower.inline.replaceUnboundSymbols
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.*
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.metadata.*
import org.jetbrains.kotlin.ir.backend.js.lower.coroutines.CoroutineIntrinsicLowering
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.metadata.JsKlibMetadataModuleDescriptor
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.metadata.JsKlibMetadataSerializationUtil
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.metadata.JsKlibMetadataVersion
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.metadata.createJsKlibMetadataPackageFragmentProvider
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.util.ConstantValueGenerator
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.util.TypeTranslator
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -37,10 +36,9 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import java.io.File
import org.jetbrains.kotlin.utils.DFS
import java.io.File
data class Result(val moduleDescriptor: ModuleDescriptor, val generatedCode: String, val moduleFragment: IrModuleFragment?)
enum class ModuleType {
TEST_RUNTIME,
SECONDARY,
@@ -83,25 +81,16 @@ fun compile(
TopDownAnalyzerFacadeForJS.checkForErrors(files, analysisResult.bindingContext)
val irDependencies = dependencies.mapNotNull { it.moduleFragment }
val symbolTable = SymbolTable()
if (!isKlibCompilation) irDependencyModules.forEach { symbolTable.loadModule(it) }
if (!isKlibCompilation) irDependencies.forEach { symbolTable.loadModule(it) }
val psi2IrTranslator = Psi2IrTranslator(configuration.languageVersionSettings)
val psi2IrContext = psi2IrTranslator.createGeneratorContext(analysisResult.moduleDescriptor, analysisResult.bindingContext, symbolTable)
val moduleFragment = psi2IrTranslator.generateModuleFragment(psi2IrContext, files)
val context = JsIrBackendContext(
analysisResult.moduleDescriptor,
psi2IrContext.irBuiltIns,
psi2IrContext.symbolTable,
moduleFragment,
configuration,
dependencies,
moduleType
)
if (isKlibCompilation) {
val logggg = object : LoggingContext {
override var inVerbosePhase: Boolean
@@ -120,7 +109,7 @@ fun compile(
val metadataVersion = configuration.get(CommonConfigurationKeys.METADATA_VERSION) as? JsKlibMetadataVersion
?: JsKlibMetadataVersion.INSTANCE
val moduleDescription =
JsKlibMetadataModuleDescriptor(moduleName, dependencies.map { it.name.asString() }, moduleFragment.descriptor)
JsKlibMetadataModuleDescriptor(moduleName, irDependencies.map { it.name.asString() }, moduleFragment.descriptor)
val serializedData = serializer.serializeMetadata(
psi2IrContext.bindingContext,
moduleDescription,
@@ -196,13 +185,15 @@ fun compile(
)
val deserializedModuleFragment = deserializer.deserializeIrModule(md, moduleFile.readBytes(), true)
val context = JsIrBackendContext(md, irBuiltIns, st, deserializedModuleFragment, configuration, irDependencyModules)
val context = JsIrBackendContext(md, irBuiltIns, st, deserializedModuleFragment, configuration, dependencies, moduleType)
deserializedModuleFragment.replaceUnboundSymbols(context)
jsPhases.invokeToplevel(context.phaseConfig, context, deserializedModuleFragment)
return Result(md, context.jsProgram.toString(), null)
val jsProgram = deserializedModuleFragment.accept(IrModuleToJsTransformer(context), null)
return CompiledModule(moduleName, jsProgram.toString(), null, moduleType, emptyList())
} else {
// TODO: Split compilation into two steps: kt -> ir, ir -> js
@@ -225,7 +216,6 @@ fun compile(
ModuleType.TEST_RUNTIME -> {
}
}
}
val context = JsIrBackendContext(
analysisResult.moduleDescriptor,
@@ -233,9 +223,12 @@ fun compile(
psi2IrContext.symbolTable,
moduleFragment,
configuration,
irDependencyModules
dependencies,
moduleType
)
jsPhases.invokeToplevel(context.phaseConfig, context, moduleFragment)
val jsProgram = moduleFragment.accept(IrModuleToJsTransformer(context), null)
return CompiledModule(moduleName, jsProgram.toString(), context.moduleFragmentCopy, moduleType, dependencies)
@@ -1027,16 +1027,7 @@ abstract class IrModuleDeserializer(
)
symbolTable.referenceProperty(descriptor, { property })
/*
backingField?.descriptor?.let {
symbolTable.declareField(UNDEFINED_OFFSET,
UNDEFINED_OFFSET,
irrelevantOrigin,
it,
builtIns.unitType,
{ symbol -> backingField })
}
*/
property.backingField = backingField
property.getter = getter
property.setter = setter
@@ -1045,28 +1036,6 @@ abstract class IrModuleDeserializer(
getter?.let { it.correspondingProperty = property }
setter?.let { it.correspondingProperty = property }
// property.getter =
// if (proto.hasGetter()) deserializeIrFunction(proto.getter, start, end, origin, property) else null
// property.setter =
// if (proto.hasSetter()) deserializeIrFunction(proto.setter, start, end, origin, property) else null
//
//// property.getter?.let { (it.descriptor as? WrappedSimpleFunctionDescriptor)?.bind(it) }
//// property.setter?.let { (it.descriptor as? WrappedSimpleFunctionDescriptor)?.bind(it) }
//
// property.getter?.let {
// val descriptor = it.descriptor
// if (descriptor is WrappedSimpleFunctionDescriptor) descriptor.bind(it)
// symbolTable.declareSimpleFunction(UNDEFINED_OFFSET, UNDEFINED_OFFSET, irrelevantOrigin,
// descriptor, { symbol -> it })
//
// }
// property.setter?.let {
// val descriptor = it.descriptor
// if (descriptor is WrappedSimpleFunctionDescriptor) descriptor.bind(it)
// symbolTable.declareSimpleFunction(UNDEFINED_OFFSET, UNDEFINED_OFFSET, irrelevantOrigin,
// descriptor, { symbol -> it })
// }
return property
}
@@ -12,15 +12,19 @@ import com.intellij.psi.PsiManager
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.ir.backend.js.ModuleType
import org.jetbrains.kotlin.ir.backend.js.compile
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.js.test.JsIrTestRuntime
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File
fun buildConfiguration(environment: KotlinCoreEnvironment): CompilerConfiguration {
val runtimeConfiguration = environment.configuration.copy()
runtimeConfiguration.put(CommonConfigurationKeys.MODULE_NAME, "JS_IR_RUNTIME")
runtimeConfiguration.put(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN)
runtimeConfiguration.languageVersionSettings = LanguageVersionSettingsImpl(
LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE,
@@ -58,13 +62,14 @@ fun main() {
environment.project,
(JsIrTestRuntime.FULL.sources).map(::createPsiFile),
buildConfiguration(environment),
null,
emptyList(),
true,
emptyList(),
emptyList()
null,
ModuleType.TEST_RUNTIME
)
File(resultJs).writeText(result.generatedCode)
File(resultJs).writeText(result.generatedCode!!)
// TODO("Write library into $stdKlibFile")
}