makes translator compatible with student llvm frontend... What? :)
This commit is contained in:
@@ -1,31 +1,10 @@
|
|||||||
package org.kotlinnative.translator
|
package org.kotlinnative.translator
|
||||||
|
|
||||||
import com.intellij.openapi.Disposable
|
|
||||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
|
||||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
|
||||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.getModuleName
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
|
||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
|
||||||
import org.jetbrains.kotlin.config.addKotlinSourceRoots
|
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM
|
|
||||||
import org.jetbrains.kotlin.utils.PathUtil
|
|
||||||
import org.kotlinnative.translator.codegens.ClassCodegen
|
import org.kotlinnative.translator.codegens.ClassCodegen
|
||||||
import org.kotlinnative.translator.codegens.FunctionCodegen
|
import org.kotlinnative.translator.codegens.FunctionCodegen
|
||||||
import org.kotlinnative.translator.codegens.ObjectCodegen
|
import org.kotlinnative.translator.codegens.ObjectCodegen
|
||||||
import org.kotlinnative.translator.codegens.PropertyCodegen
|
import org.kotlinnative.translator.codegens.PropertyCodegen
|
||||||
import org.kotlinnative.translator.exceptions.TranslationException
|
|
||||||
import org.kotlinnative.translator.llvm.LLVMBuilder
|
import org.kotlinnative.translator.llvm.LLVMBuilder
|
||||||
import org.kotlinnative.translator.llvm.LLVMVariable
|
import org.kotlinnative.translator.llvm.LLVMVariable
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -34,9 +13,9 @@ import java.util.*
|
|||||||
class TranslationState
|
class TranslationState
|
||||||
private constructor
|
private constructor
|
||||||
(
|
(
|
||||||
val environment: KotlinCoreEnvironment,
|
|
||||||
val bindingContext: BindingContext,
|
val bindingContext: BindingContext,
|
||||||
val mainFunction: String, arm: Boolean
|
val mainFunction: String,
|
||||||
|
arm: Boolean
|
||||||
) {
|
) {
|
||||||
var externalFunctions = HashMap<String, FunctionCodegen>()
|
var externalFunctions = HashMap<String, FunctionCodegen>()
|
||||||
var functions = HashMap<String, FunctionCodegen>()
|
var functions = HashMap<String, FunctionCodegen>()
|
||||||
@@ -56,62 +35,9 @@ private constructor
|
|||||||
var POINTER_ALIGN = 4
|
var POINTER_ALIGN = 4
|
||||||
var POINTER_SIZE = 4
|
var POINTER_SIZE = 4
|
||||||
|
|
||||||
fun createTranslationState(sources1: List<String>, disposer: Disposable, mainFunction: String, arm: Boolean = false): TranslationState {
|
fun createTranslationState(bindingContext:BindingContext, mainFunction: String, arm: Boolean = false): TranslationState {
|
||||||
|
return TranslationState(bindingContext, mainFunction, arm)
|
||||||
val configuration = CompilerConfiguration()
|
|
||||||
val messageCollector = object : MessageCollector {
|
|
||||||
private var hasError = false
|
|
||||||
|
|
||||||
override fun hasErrors(): Boolean = hasError
|
|
||||||
|
|
||||||
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation) {
|
|
||||||
if (severity.isError) {
|
|
||||||
System.err.println("[${severity.toString()}]${location.path} ${location.line}:${location.column} $message")
|
|
||||||
hasError = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
|
|
||||||
configuration.put(CommonConfigurationKeys.MODULE_NAME, JvmAbi.DEFAULT_MODULE_NAME)
|
|
||||||
|
|
||||||
configuration.addKotlinSourceRoots(sources)
|
|
||||||
|
|
||||||
val environment = KotlinCoreEnvironment.createForProduction(disposer, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
|
||||||
val bindingContext = analyze(environment)?.bindingContext ?: throw TranslationException("Can't initialize binding context for project")
|
|
||||||
|
|
||||||
return TranslationState(environment, bindingContext, mainFunction, arm)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun analyze(environment: KotlinCoreEnvironment): AnalysisResult? {
|
|
||||||
val collector = environment.configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
|
||||||
|
|
||||||
val analyzer = AnalyzerWithCompilerReport(collector)
|
|
||||||
analyzer.analyzeAndReport(environment.getSourceFiles(), object : AnalyzerWithCompilerReport.Analyzer {
|
|
||||||
override fun analyze(): AnalysisResult {
|
|
||||||
val sharedTrace = CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace()
|
|
||||||
val moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(environment.project, environment.getModuleName())
|
|
||||||
|
|
||||||
return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationWithCustomContext(
|
|
||||||
moduleContext,
|
|
||||||
environment.getSourceFiles(),
|
|
||||||
sharedTrace,
|
|
||||||
environment.configuration.get(JVMConfigurationKeys.MODULES),
|
|
||||||
environment.configuration.get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS),
|
|
||||||
JvmPackagePartProvider(environment))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun reportEnvironmentErrors() {
|
|
||||||
val files = environment.configuration.jvmClasspathRoots
|
|
||||||
val runtimes = files.map { it.canonicalFile }.filter { it.name == PathUtil.KOTLIN_JAVA_RUNTIME_JAR && it.exists() }
|
|
||||||
collector.report(CompilerMessageSeverity.ERROR, runtimes.joinToString { it.path }, CompilerMessageLocation.NO_LOCATION)
|
|
||||||
System.err.println(runtimes.joinToString { it.toString() })
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
return if (analyzer.hasErrors()) null else analyzer.analysisResult
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+1
-1
@@ -1,8 +1,8 @@
|
|||||||
package org.kotlinnative.translator.codegens
|
package org.kotlinnative.translator.codegens
|
||||||
|
|
||||||
import org.jetbrains.kotlin.js.descriptorUtils.nameIfStandardType
|
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
import org.jetbrains.kotlin.student.descriptorUtils.nameIfStandardType
|
||||||
import org.kotlinnative.translator.TranslationState
|
import org.kotlinnative.translator.TranslationState
|
||||||
import org.kotlinnative.translator.VariableManager
|
import org.kotlinnative.translator.VariableManager
|
||||||
import org.kotlinnative.translator.llvm.LLVMBuilder
|
import org.kotlinnative.translator.llvm.LLVMBuilder
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package org.kotlinnative.translator.llvm
|
package org.kotlinnative.translator.llvm
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.isFunctionTypeOrSubtype
|
import org.jetbrains.kotlin.builtins.isFunctionTypeOrSubtype
|
||||||
import org.jetbrains.kotlin.js.descriptorUtils.nameIfStandardType
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
|
import org.jetbrains.kotlin.student.descriptorUtils.nameIfStandardType
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||||
import org.kotlinnative.translator.TranslationState
|
import org.kotlinnative.translator.TranslationState
|
||||||
|
|||||||
Reference in New Issue
Block a user