diff --git a/generators/build.gradle.kts b/generators/build.gradle.kts index d72fca870c4..e0aa62381a2 100644 --- a/generators/build.gradle.kts +++ b/generators/build.gradle.kts @@ -31,7 +31,7 @@ dependencies { builtinsApi("org.jetbrains.kotlin:kotlin-stdlib:$bootstrapKotlinVersion") { isTransitive = false } evaluateApi(project(":core:deserialization")) - evaluateApi(project(":compiler:ir.serialization.jvm")) // used to get ir builtins + evaluateApi(project(":compiler:ir.tree")) evaluateApi(project(":compiler:ir.backend.common")) testCompile(builtinsSourceSet.output) @@ -90,6 +90,5 @@ val generateKeywordStrings by generator("org.jetbrains.kotlin.generators.fronten val generateBuiltins by generator("org.jetbrains.kotlin.generators.builtins.generateBuiltIns.GenerateBuiltInsKt", builtinsSourceSet) val generateOperationsMap by generator("org.jetbrains.kotlin.generators.evaluate.GenerateOperationsMapKt", evaluateSourceSet) -val generateInterpreterBuiltinsMap by generator("org.jetbrains.kotlin.generators.evaluate.GenerateBuiltInsMapKt", evaluateSourceSet) testsJar() diff --git a/generators/evaluate/GenerateBuiltInsMap.kt b/generators/evaluate/GenerateBuiltInsMap.kt index c322d40089b..19d2d8c1b47 100644 --- a/generators/evaluate/GenerateBuiltInsMap.kt +++ b/generators/evaluate/GenerateBuiltInsMap.kt @@ -6,35 +6,20 @@ package org.jetbrains.kotlin.generators.evaluate import org.jetbrains.kotlin.backend.common.interpreter.builtins.compileTimeAnnotation -import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.PrimitiveType -import org.jetbrains.kotlin.config.ApiVersion -import org.jetbrains.kotlin.config.LanguageVersion -import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl -import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmManglerDesc 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.name.Name -import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.utils.Printer import java.io.File val DESTINATION = File("compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/interpreter/builtins/IrBuiltInsMapGenerated.kt") -fun main() { - DESTINATION.writeText(generateMap()) -} - -fun generateMap(): String { +fun generateMap(irBuiltIns: IrBuiltIns): String { val sb = StringBuilder() val p = Printer(sb) p.println(File("license/COPYRIGHT.txt").readText()) @@ -49,11 +34,11 @@ fun generateMap(): String { val binaryOperationsMap = getOperationMap(2) val ternaryOperationsMap = getOperationMap(3) - val binaryIrOperationsMap = getBinaryIrOperationMap() + val binaryIrOperationsMap = getBinaryIrOperationMap(irBuiltIns) //save to file p.println("val unaryFunctions = mapOf>(") - p.println(generateUnaryBody(unaryOperationsMap)) + p.println(generateUnaryBody(unaryOperationsMap, irBuiltIns)) p.println(")") p.println() @@ -106,7 +91,7 @@ private fun getOperationMap(argumentsCount: Int): MutableMap() .filter { it.isCompileTime(classDescriptor) } @@ -125,8 +110,7 @@ private fun getOperationMap(argumentsCount: Int): MutableMap> { - val irBuiltIns = getIrBuiltIns() +private fun getBinaryIrOperationMap(irBuiltIns: IrBuiltIns): MutableMap> { val operationMap = mutableMapOf>() val irFunSymbols = (irBuiltIns.lessFunByOperandType.values + irBuiltIns.lessOrEqualFunByOperandType.values + @@ -148,8 +132,8 @@ private fun getBinaryIrOperationMap(): MutableMap>): String { - val irNullCheck = getIrBuiltIns().checkNotNullSymbol.descriptor +private fun generateUnaryBody(unaryOperationsMap: Map>, irBuiltIns: IrBuiltIns): String { + val irNullCheck = irBuiltIns.checkNotNullSymbol.descriptor return unaryOperationsMap.entries.joinToString(separator = ",\n", postfix = ",\n") { (function, parameters) -> val methodName = "${function.name}" val parentheses = if (function is FunctionDescriptor) "()" else "" @@ -197,19 +181,3 @@ private fun getIrMethodSymbolByName(methodName: String): String { else -> throw UnsupportedOperationException("Unknown ir operation \"$methodName\"") } } - -private fun getIrBuiltIns(): IrBuiltIns { - val builtIns = DefaultBuiltIns.Instance - val languageSettings = LanguageVersionSettingsImpl(LanguageVersion.KOTLIN_1_3, ApiVersion.KOTLIN_1_3) - - val moduleDescriptor = ModuleDescriptorImpl(Name.special(""), LockBasedStorageManager(""), builtIns) - val mangler = JvmManglerDesc() - val signaturer = JvmIdSignatureDescriptor(mangler) - val symbolTable = SymbolTable(signaturer) - val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable) - val typeTranslator = TypeTranslator(symbolTable, languageSettings, builtIns) - constantValueGenerator.typeTranslator = typeTranslator - typeTranslator.constantValueGenerator = constantValueGenerator - - return IrBuiltIns(builtIns, typeTranslator, signaturer) -} \ No newline at end of file diff --git a/generators/tests/org/jetbrains/kotlin/generators/evaluate/GenerateBuiltInsMapTest.kt b/generators/tests/org/jetbrains/kotlin/generators/evaluate/GenerateBuiltInsMapTest.kt new file mode 100644 index 00000000000..c9c641154f1 --- /dev/null +++ b/generators/tests/org/jetbrains/kotlin/generators/evaluate/GenerateBuiltInsMapTest.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.generators.test.evaluate + +import junit.framework.TestCase +import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor +import org.jetbrains.kotlin.builtins.DefaultBuiltIns +import org.jetbrains.kotlin.config.ApiVersion +import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl +import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl +import org.jetbrains.kotlin.generators.evaluate.DESTINATION +import org.jetbrains.kotlin.generators.evaluate.generateMap +import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmManglerDesc +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.name.Name +import org.jetbrains.kotlin.storage.LockBasedStorageManager +import org.jetbrains.kotlin.test.KotlinTestUtils + +class GenerateBuiltInsMapTest : TestCase() { + fun testGeneratedDataIsUpToDate() { + val text = generateMap(getIrBuiltIns()) + KotlinTestUtils.assertEqualsToFile(DESTINATION, text) + } + + private fun getIrBuiltIns(): IrBuiltIns { + val builtIns = DefaultBuiltIns.Instance + val languageSettings = LanguageVersionSettingsImpl(LanguageVersion.KOTLIN_1_3, ApiVersion.KOTLIN_1_3) + + val moduleDescriptor = ModuleDescriptorImpl(Name.special(""), LockBasedStorageManager(""), builtIns) + val mangler = JvmManglerDesc() + val signaturer = JvmIdSignatureDescriptor(mangler) + val symbolTable = SymbolTable(signaturer) + val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable) + val typeTranslator = TypeTranslator(symbolTable, languageSettings, builtIns) + constantValueGenerator.typeTranslator = typeTranslator + typeTranslator.constantValueGenerator = constantValueGenerator + + return IrBuiltIns(builtIns, typeTranslator, symbolTable) + } +}