diff --git a/experiments/student-backend/.idea/compiler.xml b/experiments/student-backend/.idea/compiler.xml deleted file mode 100644 index 96cc43efa6a..00000000000 --- a/experiments/student-backend/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/student-backend/.idea/copyright/profiles_settings.xml b/experiments/student-backend/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3377d..00000000000 --- a/experiments/student-backend/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/experiments/student-backend/.idea/libraries/builtins.xml b/experiments/student-backend/.idea/libraries/builtins.xml deleted file mode 100644 index 6323617db2f..00000000000 --- a/experiments/student-backend/.idea/libraries/builtins.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/experiments/student-backend/.idea/libraries/cli_parser.xml b/experiments/student-backend/.idea/libraries/cli_parser.xml deleted file mode 100644 index e412defe87a..00000000000 --- a/experiments/student-backend/.idea/libraries/cli_parser.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/experiments/student-backend/.idea/libraries/intellij_core.xml b/experiments/student-backend/.idea/libraries/intellij_core.xml deleted file mode 100644 index 6c9702bdbf7..00000000000 --- a/experiments/student-backend/.idea/libraries/intellij_core.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/experiments/student-backend/.idea/libraries/jansi.xml b/experiments/student-backend/.idea/libraries/jansi.xml deleted file mode 100644 index 55829f2a9f2..00000000000 --- a/experiments/student-backend/.idea/libraries/jansi.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/student-backend/.idea/libraries/javax_inject.xml b/experiments/student-backend/.idea/libraries/javax_inject.xml deleted file mode 100644 index 0ff6dc6aa58..00000000000 --- a/experiments/student-backend/.idea/libraries/javax_inject.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/student-backend/.idea/libraries/jline.xml b/experiments/student-backend/.idea/libraries/jline.xml deleted file mode 100644 index 65fc4ade27c..00000000000 --- a/experiments/student-backend/.idea/libraries/jline.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/experiments/student-backend/.idea/libraries/jps.xml b/experiments/student-backend/.idea/libraries/jps.xml deleted file mode 100644 index 260dee8495b..00000000000 --- a/experiments/student-backend/.idea/libraries/jps.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/student-backend/.idea/libraries/jps_model.xml b/experiments/student-backend/.idea/libraries/jps_model.xml deleted file mode 100644 index 1c52ec0f1d6..00000000000 --- a/experiments/student-backend/.idea/libraries/jps_model.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/experiments/student-backend/.idea/libraries/junit_4_12.xml b/experiments/student-backend/.idea/libraries/junit_4_12.xml deleted file mode 100644 index e7e30e85eed..00000000000 --- a/experiments/student-backend/.idea/libraries/junit_4_12.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/experiments/student-backend/.idea/libraries/kotlin_reflect.xml b/experiments/student-backend/.idea/libraries/kotlin_reflect.xml deleted file mode 100644 index 4e375061276..00000000000 --- a/experiments/student-backend/.idea/libraries/kotlin_reflect.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/experiments/student-backend/.idea/libraries/kotlin_runtime.xml b/experiments/student-backend/.idea/libraries/kotlin_runtime.xml deleted file mode 100644 index 13fd0ecc628..00000000000 --- a/experiments/student-backend/.idea/libraries/kotlin_runtime.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/student-backend/.idea/libraries/kotlin_test.xml b/experiments/student-backend/.idea/libraries/kotlin_test.xml deleted file mode 100644 index aa3b9465783..00000000000 --- a/experiments/student-backend/.idea/libraries/kotlin_test.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/experiments/student-backend/.idea/libraries/protobuf_java.xml b/experiments/student-backend/.idea/libraries/protobuf_java.xml deleted file mode 100644 index ab870777932..00000000000 --- a/experiments/student-backend/.idea/libraries/protobuf_java.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/experiments/student-backend/.idea/libraries/trove4j.xml b/experiments/student-backend/.idea/libraries/trove4j.xml deleted file mode 100644 index 44c86351e35..00000000000 --- a/experiments/student-backend/.idea/libraries/trove4j.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/experiments/student-backend/.idea/misc.xml b/experiments/student-backend/.idea/misc.xml deleted file mode 100644 index 5f1df38d2d1..00000000000 --- a/experiments/student-backend/.idea/misc.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/experiments/student-backend/.idea/modules.xml b/experiments/student-backend/.idea/modules.xml deleted file mode 100644 index 181b2f98a12..00000000000 --- a/experiments/student-backend/.idea/modules.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/student-backend/src/org/jetbrains/kotlin/cli/student/K2StudentLlvm.kt b/experiments/student-backend/src/org/jetbrains/kotlin/cli/student/K2StudentLlvm.kt deleted file mode 100644 index 869d7e00bb7..00000000000 --- a/experiments/student-backend/src/org/jetbrains/kotlin/cli/student/K2StudentLlvm.kt +++ /dev/null @@ -1,81 +0,0 @@ -package org.jetbrains.kotlin.cli.student - -import com.intellij.openapi.Disposable -import org.jetbrains.kotlin.analyzer.AnalysisResult -import org.jetbrains.kotlin.cli.common.CLICompiler -import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys -import org.jetbrains.kotlin.cli.common.ExitCode -import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport -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.config.CommonConfigurationKeys -import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.config.Services -import org.jetbrains.kotlin.config.addKotlinSourceRoot -import org.jetbrains.kotlin.ir.util.DumpIrTreeVisitor -import org.jetbrains.kotlin.ir.util.RenderIrElementVisitor -import org.jetbrains.kotlin.load.java.JvmAbi -import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration -import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM -import org.jetbrains.kotlin.utils.Printer -import java.lang.System.out - -/** - * Created by minamoto on 14/09/16. - */ - -class K2StudentLlvm : CLICompiler() { - override fun setupPlatformSpecificArgumentsAndServices(configuration: CompilerConfiguration, arguments: K2StudentLlvmArguments, services: Services) {} - - override fun doExecute(arguments: K2StudentLlvmArguments, configuration: CompilerConfiguration, rootDisposable: Disposable): ExitCode { - configuration.put(CommonConfigurationKeys.MODULE_NAME, /*arguments.moduleName ?: */ JvmAbi.DEFAULT_MODULE_NAME) - configuration.addKotlinSourceRoot(arguments.freeArgs.get(0)) - val environment = KotlinCoreEnvironment.createForProduction(rootDisposable, configuration, emptyList()) - val collector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) - val analyzerWithCompilerReport = AnalyzerWithCompilerReport(collector) - analyzerWithCompilerReport.analyzeAndReport( - environment.getSourceFiles(), object : AnalyzerWithCompilerReport.Analyzer { - override fun analyze(): AnalysisResult { - val sharedTrace = CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace() - val moduleContext = - TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(environment.project, environment.configuration) - - return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( - moduleContext, - environment.getSourceFiles(), - sharedTrace, - environment.configuration, - JvmPackagePartProvider(environment) - ) - } - override fun reportEnvironmentErrors() { - TODO(/* implement me*/) - //KotlinToJVMBytecodeCompiler.reportRuntimeConflicts(collector, environment.configuration.jvmClasspathRoots) - } - }) - - val translator = Psi2IrTranslator(Psi2IrConfiguration(false)) - val module = translator.generateModule(analyzerWithCompilerReport.analysisResult.moduleDescriptor, - environment.getSourceFiles(), - analyzerWithCompilerReport.analysisResult.bindingContext) - - module.accept(DumpIrTreeVisitor(out), "") - return ExitCode.OK - } - - override fun createArguments(): K2StudentLlvmArguments { - return K2StudentLlvmArguments() - } - - companion object { - @JvmStatic fun main(args: Array) { - CLICompiler.doMain(K2StudentLlvm(), args) - } - } -} - -fun main(args: Array) = K2StudentLlvm.main(args) diff --git a/experiments/student-backend/src/org/jetbrains/kotlin/cli/student/K2StudentLlvmArguments.java b/experiments/student-backend/src/org/jetbrains/kotlin/cli/student/K2StudentLlvmArguments.java deleted file mode 100644 index 9bff1f6a461..00000000000 --- a/experiments/student-backend/src/org/jetbrains/kotlin/cli/student/K2StudentLlvmArguments.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.jetbrains.kotlin.cli.student; - -import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments; - -/** - * Created by minamoto on 14/09/16. - */ -public class K2StudentLlvmArguments extends CommonCompilerArguments { -} diff --git a/experiments/student-backend/src/org/jetbrains/kotlin/student/descriptorUtils.kt b/experiments/student-backend/src/org/jetbrains/kotlin/student/descriptorUtils.kt deleted file mode 100644 index 821b78534c9..00000000000 --- a/experiments/student-backend/src/org/jetbrains/kotlin/student/descriptorUtils.kt +++ /dev/null @@ -1,20 +0,0 @@ -package org.jetbrains.kotlin.student.descriptorUtils - -import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns -import org.jetbrains.kotlin.types.KotlinType -import org.jetbrains.kotlin.utils.addToStdlib.check - -/** - * Created by minamoto on 17/09/2016. - * this code is copied from org.jetbrains.kotlin.js.descriptorUtils - */ -val KotlinType.nameIfStandardType: Name? - get() { - return constructor.declarationDescriptor - ?.check { descriptor -> - descriptor.builtIns.isBuiltInPackageFragment(descriptor.containingDeclaration as? PackageFragmentDescriptor) - } - ?.name - } diff --git a/experiments/student-backend/src/org/kotlinnative/translator/ProjectTranslator.kt b/experiments/student-backend/src/org/kotlinnative/translator/ProjectTranslator.kt deleted file mode 100644 index 8974b5042da..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/ProjectTranslator.kt +++ /dev/null @@ -1,77 +0,0 @@ -package org.kotlinnative.translator - -import org.jetbrains.kotlin.psi.* -import org.kotlinnative.translator.codegens.ClassCodegen -import org.kotlinnative.translator.codegens.FunctionCodegen -import org.kotlinnative.translator.codegens.ObjectCodegen -import org.kotlinnative.translator.codegens.PropertyCodegen - -class ProjectTranslator(val files: List, - val state: TranslationState) { - private var codeBuilder = state.codeBuilder - - fun generateCode(): String { - with(files) { - map { addClassDeclarations(it) } - map { addObjectDeclarations(it) } - map { addFunctionDeclarations(it) } - map { addPropertyDeclarations(it) } - } - generateProjectBody() - return codeBuilder.toString() - } - - fun addFunctionDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val function = FunctionCodegen(state, variableManager, declaration, codeBuilder) - if (function.external) { - state.externalFunctions.put(function.fullName, function) - } else { - state.functions.put(function.fullName, function) - } - } - } - - fun addClassDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val codegen = ClassCodegen(state, variableManager, declaration, codeBuilder) - state.classes.put(codegen.structName, codegen) - } - } - - fun addPropertyDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val property = PropertyCodegen(state, variableManager, declaration, codeBuilder) - state.properties.put(declaration.name!!, property) - } - } - - fun addObjectDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val codegen = ObjectCodegen(state, variableManager, declaration, codeBuilder) - state.objects.put(codegen.structName, codegen) - } - } - - private fun generateProjectBody() { - with(state) { - properties.values.map { it.generate() } - objects.values.map { it.prepareForGenerate() } - classes.values.map { it.prepareForGenerate() } - objects.values.map { it.generate() } - classes.values.map { it.generate() } - externalFunctions.values.map { it.generate() } - functions.values.filter { it.isExtensionDeclaration }.map { it.generate() } - functions.values.filter { !it.isExtensionDeclaration }.map { it.generate() } - } - - if (state.mainFunction != "main") { - codeBuilder.declareEntryPoint(state.mainFunction) - } - } - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/TranslationState.kt b/experiments/student-backend/src/org/kotlinnative/translator/TranslationState.kt deleted file mode 100644 index f9e0178e9cb..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/TranslationState.kt +++ /dev/null @@ -1,43 +0,0 @@ -package org.kotlinnative.translator - -import org.jetbrains.kotlin.resolve.BindingContext -import org.kotlinnative.translator.codegens.ClassCodegen -import org.kotlinnative.translator.codegens.FunctionCodegen -import org.kotlinnative.translator.codegens.ObjectCodegen -import org.kotlinnative.translator.codegens.PropertyCodegen -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.LLVMVariable -import java.util.* - - -class TranslationState -private constructor -( - val bindingContext: BindingContext, - val mainFunction: String, - arm: Boolean -) { - var externalFunctions = HashMap() - var functions = HashMap() - var classes = HashMap() - var objects = HashMap() - var properties = HashMap() - val codeBuilder = LLVMBuilder(arm) - val extensionFunctions = HashMap>() - val globalVariableCollection = HashMap() - - init { - POINTER_ALIGN = if (arm) 4 else 8 - POINTER_SIZE = if (arm) 4 else 8 - } - - companion object { - var POINTER_ALIGN = 4 - var POINTER_SIZE = 4 - - fun createTranslationState(bindingContext:BindingContext, mainFunction: String, arm: Boolean = false): TranslationState { - return TranslationState(bindingContext, mainFunction, arm) - } - } - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/VariableManager.kt b/experiments/student-backend/src/org/kotlinnative/translator/VariableManager.kt deleted file mode 100644 index bb0ff4bb229..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/VariableManager.kt +++ /dev/null @@ -1,48 +0,0 @@ -package org.kotlinnative.translator - -import org.kotlinnative.translator.llvm.LLVMScope -import org.kotlinnative.translator.llvm.LLVMVariable -import org.kotlinnative.translator.llvm.types.LLVMType -import java.util.* - -class VariableManager(val globalVariableCollection: HashMap) { - - private var fileVariableCollectionTree = HashMap>>() - - private companion object UniqueGenerator { - private var unique = 0 - fun generateUniqueString() = - ".unique." + unique++ - } - - operator fun get(variableName: String): LLVMVariable? { - return fileVariableCollectionTree[variableName]?.peek()?.first ?: globalVariableCollection[variableName] - } - - operator fun contains(variableName: String): Boolean { - return (fileVariableCollectionTree.contains(variableName) && !fileVariableCollectionTree[variableName]!!.empty()) || globalVariableCollection.containsKey(variableName) - } - - fun pullOneUpwardLevelVariable(variableName: String) { - fileVariableCollectionTree[variableName]?.pop() - } - - fun pullUpwardsLevel(level: Int) { - fileVariableCollectionTree.forEach { s, stack -> while (!stack.empty() && stack.peek().second >= level) stack.pop() } - } - - fun addVariable(name: String, variable: LLVMVariable, level: Int) { - val stack = fileVariableCollectionTree.getOrDefault(name, Stack>()) - stack.push(Pair(variable, level)) - fileVariableCollectionTree.put(name, stack) - } - - fun addGlobalVariable(name: String, variable: LLVMVariable) { - globalVariableCollection.put(name, variable) - } - - fun receiveVariable(name: String, type: LLVMType, scope: LLVMScope, pointer: Int): LLVMVariable { - return LLVMVariable("managed${generateUniqueString()}.$name", type, name, scope, pointer) - } - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/codegens/BlockCodegen.kt b/experiments/student-backend/src/org/kotlinnative/translator/codegens/BlockCodegen.kt deleted file mode 100644 index be04b431c66..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/codegens/BlockCodegen.kt +++ /dev/null @@ -1,1121 +0,0 @@ -package org.kotlinnative.translator.codegens - -import com.intellij.psi.PsiElement -import com.intellij.psi.impl.source.tree.LeafPsiElement -import com.intellij.psi.tree.IElementType -import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl -import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.getNextSiblingIgnoringWhitespaceAndComments -import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForReceiver -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.* -import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument -import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument -import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument -import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCallImpl -import org.jetbrains.kotlin.resolve.constants.TypedCompileTimeConstant -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.* -import java.lang.RuntimeException -import java.lang.UnsupportedOperationException -import java.rmi.UnexpectedException -import kotlin.comparisons.compareBy - - -abstract class BlockCodegen(val state: TranslationState, - val variableManager: VariableManager, - val codeBuilder: LLVMBuilder) { - - val topLevelScopeDepth = 2 - var returnType: LLVMVariable? = null - - fun evaluateCodeBlock(expr: PsiElement?, - startLabel: LLVMLabel? = null, - nextIterationLabel: LLVMLabel? = null, - breakLabel: LLVMLabel? = null, - scopeDepth: Int = 0, - isBlock: Boolean = true) { - codeBuilder.markWithLabel(startLabel) - if (isBlock) { - expressionWalker(expr, breakLabel, scopeDepth) - } else { - var result = evaluateExpression(expr, scopeDepth) - ?: throw UnexpectedException("Can't evaluate expression " + expr!!.text) - when (result) { - is LLVMVariable -> { - if (result.type is LLVMReferenceType) { - generateReferenceReturn(result) - } else { - result = codeBuilder.receivePointedArgument(result, requirePointer = 0) - codeBuilder.addReturnOperator(result) - } - } - else -> codeBuilder.addAnyReturn(result.type, result.toString()) - } - - } - codeBuilder.addUnconditionalJump(nextIterationLabel ?: return) - } - - fun evaluateExpression(expr: PsiElement?, - scopeDepth: Int): LLVMSingleValue? = - when (expr) { - is KtBlockExpression -> { - expressionWalker(expr.lBrace, breakLabel = null, scopeDepth = scopeDepth + 1) - null - } - is KtBinaryExpression -> evaluateBinaryExpression(expr, scopeDepth) - is KtPostfixExpression -> evaluatePostfixExpression(expr, scopeDepth) - is KtPrefixExpression -> evaluatePrefixExpression(expr, scopeDepth) - is KtConstantExpression -> evaluateConstantExpression(expr) - is KtCallExpression -> evaluateCallExpression(expr, scopeDepth) - is KtWhenExpression -> evaluateWhenExpression(expr, scopeDepth) - is KtCallableReferenceExpression -> evaluateCallableReferenceExpression(expr) - is KtDotQualifiedExpression -> evaluateDotExpression(expr, scopeDepth) - is KtReferenceExpression -> evaluateReferenceExpression(expr, scopeDepth) - is KtIfExpression -> evaluateIfOperator(expr, scopeDepth + 1) - is KtStringTemplateExpression -> evaluateStringTemplateExpression(expr) - is KtReturnExpression -> evaluateReturnInstruction(expr.firstChild, scopeDepth) - is KtThisExpression -> evaluateThisExpression() - is KtSafeQualifiedExpression -> evaluateSafeAccessExpression(expr, scopeDepth) - is KtParenthesizedExpression -> evaluateExpression(expr.expression, scopeDepth) - null -> null - is PsiElement -> evaluatePsiElement(expr, scopeDepth) - else -> throw UnsupportedOperationException() - } - - fun evaluateConstructorDelegationReferenceExpression(expr: KtConstructorDelegationReferenceExpression, - structCodegen: StructCodegen, - constructorArguments: List, - scopeDepth: Int): LLVMSingleValue? { - val targetCall = state.bindingContext.get(BindingContext.CALL, expr) - val names = parseValueArguments(targetCall!!.valueArguments, scopeDepth) - val args = codeBuilder.loadArgsIfRequired(names, constructorArguments) - return evaluateConstructorCallExpression( - LLVMVariable(structCodegen.structName + LLVMType.mangleFunctionArguments(names), - structCodegen.type, - scope = LLVMVariableScope()), - args) - } - - fun evaluateMemberMethodOrField(receiver: LLVMVariable, - selectorName: String, - scopeDepth: Int, - call: PsiElement? = null): LLVMSingleValue? { - val type = receiver.type as LLVMReferenceType - val clazz = resolveClassOrObjectLocation(type) - ?: throw UnexpectedException(type.toString() + receiver.toString()) - val field = clazz.fieldsIndex[selectorName] - - if (field != null) { - return evaluateClassField(receiver, field) - } else { - return evaluateMemberMethod(receiver, clazz, scopeDepth, call as? KtCallExpression - ?: throw UnexpectedException("$receiver:$selectorName")) - } - } - - fun addPrimitiveBinaryOperation(operator: IElementType, - firstOp: LLVMSingleValue, - secondOp: LLVMSingleValue, - referenceName: KtSimpleNameExpression? = null): LLVMVariable { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - val secondNativeOp = codeBuilder.receiveNativeValue(secondOp) - - val llvmExpression = when (operator) { - KtTokens.PLUS -> firstOp.type.operatorPlus(firstNativeOp, secondNativeOp) - KtTokens.MINUS -> firstOp.type.operatorMinus(firstNativeOp, secondNativeOp) - KtTokens.MUL -> firstOp.type.operatorTimes(firstNativeOp, secondNativeOp) - KtTokens.DIV -> firstOp.type.operatorDiv(firstNativeOp, secondNativeOp) - KtTokens.LT -> firstOp.type.operatorLt(firstNativeOp, secondNativeOp) - KtTokens.GT -> firstOp.type.operatorGt(firstNativeOp, secondNativeOp) - KtTokens.LTEQ -> firstOp.type.operatorLeq(firstNativeOp, secondNativeOp) - KtTokens.GTEQ -> firstOp.type.operatorGeq(firstNativeOp, secondNativeOp) - KtTokens.EQEQ -> - if (LLVMType.isReferredType(firstOp.type) && LLVMType.isReferredType(secondOp.type)) { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorEq(firstPointedArgument, secondPointedArgument) - } else - firstOp.type.operatorEq(firstNativeOp, secondNativeOp) - KtTokens.EQEQEQ -> { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorEq(firstPointedArgument, secondPointedArgument) - } - KtTokens.EXCLEQ -> { - if (LLVMType.isReferredType(firstOp.type) && LLVMType.isReferredType(secondOp.type)) { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorNeq(firstPointedArgument, secondPointedArgument) - } else - firstOp.type.operatorNeq(firstNativeOp, secondNativeOp) - } - KtTokens.EXCLEQEQEQ -> { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorNeq(firstPointedArgument, secondPointedArgument) - } - KtTokens.EQ -> { - if (secondOp.type is LLVMNullType) { - codeBuilder.storeNull(firstOp as LLVMVariable) - return firstOp - } - - val result = firstOp as LLVMVariable - val sourceArgument: LLVMSingleValue - if ((firstOp.pointer == 2) && secondOp.type.isPrimitive && (secondOp.pointer == 0)) { - sourceArgument = codeBuilder.getNewVariable(secondOp.type, pointer = 1) - codeBuilder.allocStaticVar(sourceArgument, asValue = true) - codeBuilder.storeVariable(sourceArgument, secondOp) - } else { - sourceArgument = if (result.pointer == secondOp.pointer + 1) secondOp else secondNativeOp - } - - codeBuilder.storeVariable(result, sourceArgument) - return result - } - else -> addPrimitiveReferenceOperationByName(referenceName!!.getReferencedName(), firstOp, secondNativeOp) - } - return codeBuilder.saveExpression(llvmExpression) - } - - private fun expressionWalker(expr: PsiElement?, - breakLabel: LLVMLabel?, - scopeDepth: Int) { - when (expr) { - is KtBlockExpression -> expressionWalker(expr.lBrace, breakLabel, scopeDepth + 1) - is KtProperty -> evaluateValExpression(expr, scopeDepth) - is KtPostfixExpression -> evaluatePostfixExpression(expr, scopeDepth) - is KtBinaryExpression -> evaluateBinaryExpression(expr, scopeDepth) - is KtCallExpression -> evaluateCallExpression(expr, scopeDepth) - is KtDoWhileExpression -> evaluateDoWhileExpression(expr, scopeDepth + 1) - is KtBreakExpression -> evaluateBreakExpression(breakLabel!!) - is KtDotQualifiedExpression -> evaluateDotExpression(expr, scopeDepth) - is KtWhenExpression -> evaluateWhenExpression(expr, scopeDepth) - is PsiElement -> evaluateExpression(expr.firstChild, scopeDepth + 1) - null -> { - variableManager.pullUpwardsLevel(scopeDepth) - return - } - else -> UnsupportedOperationException() - } - - expressionWalker(expr.getNextSiblingIgnoringWhitespaceAndComments(), breakLabel, scopeDepth) - } - - private fun evaluateBreakExpression(breakLabel: LLVMLabel) = - codeBuilder.addUnconditionalJump(breakLabel) - - private fun evaluateDoWhileExpression(expr: KtDoWhileExpression, scopeDepth: Int) = - executeWhileBlock(expr.condition!!, expr.body!!, scopeDepth, checkConditionBeforeExecute = false) - - private fun evaluateThisExpression(): LLVMSingleValue? = - variableManager["this"] - - fun evaluateStringTemplateExpression(expr: KtStringTemplateExpression): LLVMSingleValue? { - val receiveValue = state.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, expr) as TypedCompileTimeConstant - val value = receiveValue.getValue(receiveValue.type) ?: return null - val variable = - variableManager.receiveVariable(".str", - LLVMStringType(value.toString().length, isLoaded = false), - LLVMVariableScope(), - pointer = 0) - - codeBuilder.addStringConstant(variable, value.toString()) - return variable - } - - private fun evaluateCallableReferenceExpression(expr: KtCallableReferenceExpression): LLVMSingleValue? { - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)!!.type!! - val result = LLVMInstanceOfStandardType(expr.callableReference.text, kotlinType, LLVMVariableScope(), state) - return LLVMVariable(result.label + (result.type as LLVMFunctionType).mangleArgs(), - result.type, - result.kotlinName, - result.scope, - result.pointer) - } - - private fun evaluateSafeAccessExpression(expr: KtSafeQualifiedExpression, - scopeDepth: Int): LLVMSingleValue? { - val receiver = expr.receiverExpression - val selector = expr.selectorExpression - - val left = evaluateExpression(receiver, scopeDepth)!! - val loadedLeft = codeBuilder.receiveNativeValue(left) - val expectedType = LLVMMapStandardType(state.bindingContext.get(BindingContext.EXPECTED_EXPRESSION_TYPE, expr)!!, state) as LLVMReferenceType - - val result = codeBuilder.getNewVariable(expectedType, pointer = 2) - codeBuilder.allocStaticVar(result, pointer = true) - - val condition = left.type.operatorEq(loadedLeft, LLVMVariable("", LLVMNullType())) - val nullLabel = codeBuilder.getNewLabel(prefix = "safe.access") - val notNullLabel = codeBuilder.getNewLabel(prefix = "safe.access") - val endLabel = codeBuilder.getNewLabel(prefix = "safe.access") - - val conditionResult = codeBuilder.saveExpression(condition) - codeBuilder.addCondition(conditionResult, nullLabel, notNullLabel) - - codeBuilder.markWithLabel(nullLabel) - codeBuilder.storeNull(result) - codeBuilder.addUnconditionalJump(endLabel) - - codeBuilder.markWithLabel(notNullLabel) - val right = evaluateDotBody(receiver, selector!!, scopeDepth) as LLVMVariable - val rightLoaded = codeBuilder.loadAndGetVariable(right) - codeBuilder.storeVariable(result, rightLoaded) - codeBuilder.addUnconditionalJump(endLabel) - - codeBuilder.markWithLabel(endLabel) - - return result - } - - private fun evaluateDotExpression(expr: KtDotQualifiedExpression, - scopeDepth: Int): LLVMSingleValue? { - val receiverExpr = expr.receiverExpression - val selectorExpr = expr.selectorExpression!! - - return evaluateDotBody(receiverExpr, selectorExpr, scopeDepth) - } - - private fun evaluateDotBody(receiverExpr: KtExpression, - selectorExpr: KtExpression, - scopeDepth: Int): LLVMSingleValue? { - var receiverName = receiverExpr.text - var receiver = when (receiverExpr) { - is KtCallExpression, - is KtPrefixExpression, - is KtPostfixExpression, - is KtBinaryExpression -> evaluateExpression(receiverExpr, scopeDepth) as LLVMVariable - is KtDotQualifiedExpression -> { - val codegen = resolveCodegenByName(receiverName) - if (codegen != null) null else evaluateExpression(receiverExpr, scopeDepth) as LLVMVariable - } - is KtNameReferenceExpression -> { - val referenceContext = state.bindingContext.get(BindingContext.REFERENCE_TARGET, receiverExpr) - receiverName = referenceContext!!.fqNameSafe.asString() - when (referenceContext) { - is PropertyDescriptorImpl -> { - val receiverThis = variableManager["this"]!! - evaluateMemberMethodOrField(receiverThis, receiverName, topLevelScopeDepth, call = null)!! as LLVMVariable - } - else -> variableManager[receiverName] - } - } - else -> variableManager[receiverName] - } - - val isExtension = selectorExpr is KtCallExpression && - selectorExpr.getFunctionResolvedCallWithAssert(state.bindingContext).extensionReceiver != null - - if (isExtension) { - return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as KtCallExpression, scopeDepth) - } - - val selectorName = when (selectorExpr) { - is KtNameReferenceExpression -> state.bindingContext.get(BindingContext.REFERENCE_TARGET, selectorExpr) - ?.fqNameSafe?.asString() ?: selectorExpr.text - else -> selectorExpr.text - } - - if (receiver != null) { - if (receiver.pointer == 2) { - receiver = codeBuilder.loadAndGetVariable(receiver) - } - when (receiver.type) { - is LLVMReferenceType -> return evaluateMemberMethodOrField(receiver, selectorName, scopeDepth, selectorExpr) - else -> return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as KtCallExpression, scopeDepth) - } - } - - val clazz = resolveCodegen(receiverExpr) - ?: return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as? KtCallExpression - ?: throw UnexpectedException("Failed evaluate dot expression: " + selectorExpr.text), scopeDepth) - return evaluateClassScopedDotExpression(clazz, selectorExpr, scopeDepth, receiver) - } - - private fun evaluateExtensionExpression(receiver: KtExpression, - receiverExpressionArgument: LLVMVariable?, - selector: KtCallExpression, - scopeDepth: Int): LLVMSingleValue? { - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, receiver)!!.type!! - val receiverType = LLVMMapStandardType(kotlinType, state) - - val targetFunction = state.bindingContext.get(BindingContext.CALL, selector.calleeExpression) - val candidateDescriptor = state.bindingContext.get(BindingContext.RESOLVED_CALL, targetFunction)!!.candidateDescriptor - val targetFunctionName = candidateDescriptor.fqNameSafe.convertToNativeName() - val nameWithoutMangling = candidateDescriptor.name.asString().replace(Regex("""(.?)"""), "") - val packageNameFirst = targetFunction?.calleeExpression?.getContainingKtFile()?.packageFqName?.convertToNativeName().orEmpty() - val packageNameSecond = candidateDescriptor.containingDeclaration.fqNameSafe.convertToNativeName() - - val names = parseArgList(selector, scopeDepth) - val type = LLVMType.mangleFunctionArguments(names) - - val constructedFunctionName = receiverType.mangle + nameWithoutMangling.addBeforeIfNotEmpty(".") + type - val targetExtension = state.extensionFunctions[receiverType.toString()] - - val extensionCodegen = targetExtension?.get(packageNameFirst.addAfterIfNotEmpty(".") + constructedFunctionName) ?: - targetExtension?.get(packageNameSecond.addAfterIfNotEmpty(".") + constructedFunctionName) ?: - targetExtension?.get(targetFunctionName) - ?: throw UnexpectedException(constructedFunctionName) - val receiverExpression = receiverExpressionArgument ?: evaluateExpression(receiver, scopeDepth + 1)!! - - val args = mutableListOf(codeBuilder.receivePointedArgument(receiverExpression, requirePointer = if (receiverType is LLVMReferenceType) 1 else 0)) - args.addAll(codeBuilder.loadArgsIfRequired(names, extensionCodegen.args)) - return evaluateFunctionCallExpression(LLVMVariable(extensionCodegen.fullName, extensionCodegen.returnType!!.type, scope = LLVMVariableScope()), args) - } - - private fun evaluateClassScopedDotExpression(clazz: StructCodegen, - selector: KtExpression, - scopeDepth: Int, - receiver: LLVMVariable? = null): LLVMSingleValue? = - when (selector) { - is KtCallExpression -> evaluateCallExpression(selector, scopeDepth, clazz, caller = receiver) - is KtReferenceExpression -> evaluateReferenceExpression(selector, scopeDepth, clazz) - else -> throw UnsupportedOperationException() - } - - private fun evaluateClassField(receiver: LLVMVariable, - field: LLVMClassVariable): LLVMVariable { - val result = codeBuilder.getNewVariable(field.type, pointer = field.pointer + 1) - codeBuilder.loadClassField(result, receiver, field.offset) - return result - } - - private fun evaluateMemberMethod(receiver: LLVMVariable, - clazz: StructCodegen, - scopeDepth: Int, - call: KtCallExpression): LLVMSingleValue? { - val resolvedCall = call.getCall(state.bindingContext)!!.getResolvedCallWithAssert(state.bindingContext) - val functionDescriptor = resolvedCall.candidateDescriptor - val functionArguments = functionDescriptor.valueParameters.map { it -> it.type }.map { LLVMMapStandardType(it, state) } - val methodName = functionDescriptor.fqNameSafe.asString() + LLVMType.mangleFunctionTypes(functionArguments) - - val method = clazz.methods[methodName] ?: throw UnexpectedException(methodName) - val returnType = method.returnType!!.type - - val arguments = resolvedCall.valueArguments.toSortedMap(compareBy { it.index }).values - val substitutionArguments = parseArgumentsWithDefaultValues(arguments, method.defaultValues, scopeDepth) - val loadedArgs = codeBuilder.loadArgsIfRequired(substitutionArguments, method.args) - - val callArgs = mutableListOf(receiver) - callArgs.addAll(loadedArgs) - - return evaluateFunctionCallExpression(LLVMVariable(methodName, returnType, scope = LLVMVariableScope()), callArgs) - } - - private fun resolveClassOrObjectLocation(type: LLVMReferenceType): StructCodegen? { - val typeLocations = type.type.split('.') - val currentLocation = StringBuilder() - var codegen: ClassCodegen? = null - var currentIndex = 0 - - do { - currentLocation.append((if (currentIndex > 0) "." else "") + typeLocations[currentIndex]) - if (state.classes.containsKey(currentLocation.toString())) { - codegen = state.classes[currentLocation.toString()] - } else if (state.objects.containsKey(currentLocation.toString())) { - return state.objects[currentLocation.toString()] - } - currentIndex++ - } while ((currentIndex < typeLocations.size) && (codegen == null)) - - while (currentIndex < typeLocations.size - 1) { - currentLocation.append('.' + typeLocations[currentIndex]) - currentIndex++ - codegen = codegen?.nestedClasses?.get(currentLocation.toString()) - } - - if (codegen?.companionObjectCodegen != null && type.type == codegen?.companionObjectCodegen?.structName) { - return codegen?.companionObjectCodegen!! - } - - return if (codegen?.structName == type.type) codegen else codegen?.nestedClasses?.get(type.type) - } - - private fun evaluateArrayAccessExpression(expr: KtArrayAccessExpression, - scope: Int): LLVMSingleValue? { - val arrayNameVariable = evaluateExpression(expr.arrayExpression, scope) as LLVMVariable - return when (arrayNameVariable.type) { - is LLVMReferenceType -> { - val callMaker = state.bindingContext.get(BindingContext.CALL, expr) - when (callMaker!!.callType) { - Call.CallType.ARRAY_SET_METHOD, - Call.CallType.ARRAY_GET_METHOD -> { - val arrayActionType = if (callMaker.callType == Call.CallType.ARRAY_SET_METHOD) "set" else "get" - val explicitReceiver = callMaker.explicitReceiver as ExpressionReceiver - val receiver = evaluateExpression(explicitReceiver.expression, scope)!! as LLVMVariable - val pureReceiver = codeBuilder.receivePointedArgument(receiver, requirePointer = 1) - - val targetClassName = (receiver.type as LLVMReferenceType).type - - val names = parseValueArguments(callMaker.valueArguments, scope) - val methodName = "$targetClassName.$arrayActionType${LLVMType.mangleFunctionArguments(names)}" - val clazz = resolveClassOrObjectLocation(receiver.type) - ?: throw UnexpectedException(receiver.type.toString()) - - val method = clazz.methods[methodName] ?: throw UnexpectedException(expr.text) - val returnType = method.returnType!!.type - - val loadedArgs = codeBuilder.loadArgsIfRequired(names, method.args) - val callArgs = mutableListOf(pureReceiver) - callArgs.addAll(loadedArgs) - - return evaluateFunctionCallExpression(LLVMVariable(methodName, returnType, scope = LLVMVariableScope()), callArgs) - } - else -> throw UnexpectedException("Unknown array access method") - } - } - else -> { - val arrayIndex = evaluateConstantExpression(expr.indexExpressions.first() as KtConstantExpression) - val arrayReceivedVariable = codeBuilder.loadAndGetVariable(arrayNameVariable) - val arrayElementType = (arrayNameVariable.type as LLVMArray).arrayElementType - val arrayElement = codeBuilder.getNewVariable(arrayElementType, pointer = 1) - codeBuilder.loadVariableOffset(arrayElement, arrayReceivedVariable, arrayIndex) - arrayElement - } - } - } - - private fun evaluateReferenceExpression(expr: KtReferenceExpression, - scopeDepth: Int, - classScope: StructCodegen? = null): LLVMSingleValue? { - val targetName = state.bindingContext.get(BindingContext.REFERENCE_TARGET, expr)?.fqNameSafe?.convertToNativeName() - return when { - expr is KtArrayAccessExpression -> evaluateArrayAccessExpression(expr, scopeDepth + 1) - isEnumClassField(expr, classScope) -> resolveEnumClassField(expr, classScope) - (targetName != null) && variableManager.contains(targetName) -> variableManager[targetName] - ((expr is KtNameReferenceExpression) && (classScope != null)) -> - evaluateNameReferenceExpression(targetName!!, classScope.parentCodegen!! as ClassCodegen) - else -> { - val clazz = classScope ?: resolveCodegen(expr) - val receiver = if (clazz != null) variableManager[clazz.structName] ?: variableManager["this"] else variableManager["this"] - targetName ?: throw UnexpectedException("Can't find target in reference expression " + expr.firstChild.text) - evaluateMemberMethodOrField(receiver ?: throw UnexpectedException(targetName), targetName, topLevelScopeDepth) - } - } - } - - private fun evaluateNameReferenceExpression(fieldName: String, - classScope: ClassCodegen): LLVMSingleValue? { - val companionObject = classScope.companionObjectCodegen!! - val field = companionObject.fieldsIndex[fieldName] ?: return null - val receiver = variableManager[companionObject.structName]!! - val result = codeBuilder.getNewVariable(field.type, pointer = 1) - - codeBuilder.loadClassField(result, receiver, field.offset) - return result - } - - private fun resolveEnumClassField(expr: KtReferenceExpression, - classScope: StructCodegen?): LLVMSingleValue = - (classScope ?: resolveCodegen(expr))!!.enumFields[expr.text]!! - - private fun isEnumClassField(expr: KtReferenceExpression, - classScope: StructCodegen?): Boolean = - (classScope ?: resolveCodegen(expr))?.enumFields?.containsKey(expr.text) ?: false - - private fun resolveCodegen(expr: KtExpression): StructCodegen? { - val type = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)?.type - ?: expr.getQualifiedExpressionForReceiver()?.getType(state.bindingContext) - - val name = type?.constructor?.declarationDescriptor?.fqNameSafe?.asString() ?: throw UnexpectedException(expr.text) - - return resolveCodegenByName(name) - } - - private fun resolveCodegenByName(name: String): StructCodegen? = - resolveClassOrObjectLocation(LLVMReferenceType(name, prefix = "class")) - - private fun evaluateCallExpression(expr: KtCallExpression, - scopeDepth: Int, - classScope: StructCodegen? = null, - caller: LLVMVariable? = null): LLVMSingleValue? { - var names = parseArgList(expr, scopeDepth) - val targetFunction = state.bindingContext.get(BindingContext.CALL, expr.calleeExpression) - var resolvedCall = state.bindingContext.get(BindingContext.RESOLVED_CALL, targetFunction) - if (resolvedCall is VariableAsFunctionResolvedCallImpl) { - resolvedCall = resolvedCall.variableCall - } - - val functionDescriptor = resolvedCall!!.candidateDescriptor - val targetFunctionName = functionDescriptor.fqNameSafe.convertToNativeName() - val externalFunctionName = functionDescriptor.name.asString() - val arguments = resolvedCall.valueArguments.toSortedMap(compareBy { it.index }).values - - val external = state.externalFunctions.containsKey(externalFunctionName) - val functionArguments = functionDescriptor.valueParameters.map { it -> it.type }.map { LLVMMapStandardType(it, state) } - val function = "$targetFunctionName${if (!external) LLVMType.mangleFunctionTypes(functionArguments) else ""}" - - if (function in state.functions || externalFunctionName in state.externalFunctions) { - val descriptor = state.functions[function] ?: state.externalFunctions[externalFunctionName]!! - names = parseArgumentsWithDefaultValues(arguments, descriptor.defaultValues, scopeDepth) - val args = codeBuilder.loadArgsIfRequired(names, descriptor.args) - return evaluateFunctionCallExpression(LLVMVariable(descriptor.name, descriptor.returnType!!.type, scope = LLVMVariableScope()), args) - } - - if (targetFunctionName in state.classes || classScope?.structName == targetFunctionName) { - val descriptor = state.classes[targetFunctionName] ?: classScope ?: return null - val detectedConstructor = LLVMType.mangleFunctionTypes(functionArguments) - val args = codeBuilder.loadArgsIfRequired(names, descriptor.constructorFields[detectedConstructor]!!) - return evaluateConstructorCallExpression(LLVMVariable(descriptor.structName + detectedConstructor, descriptor.type, scope = LLVMVariableScope()), args) - } - - if (targetFunctionName in variableManager) { - val type = variableManager[targetFunctionName]!!.type as LLVMFunctionType - val args = codeBuilder.loadArgsIfRequired(names, type.arguments) - return evaluateFunctionCallExpression(LLVMVariable(targetFunctionName, type.returnType.type, scope = LLVMRegisterScope()), args) - } - - val nestedConstructor = classScope?.nestedClasses?.get(expr.calleeExpression!!.text) - if (nestedConstructor != null) { - val args = codeBuilder.loadArgsIfRequired(names, nestedConstructor.constructorFields[nestedConstructor.primaryConstructorIndex]!!) - return evaluateConstructorCallExpression(LLVMVariable(nestedConstructor.structName, nestedConstructor.type, scope = LLVMVariableScope()), args) - } - - val containingClass = resolveContainingClass(expr) ?: return null - val method = containingClass.methods[function] ?: throw RuntimeException("Cannot find function $targetFunctionName") - val args = mutableListOf() - - if (caller != null) { - args.add(caller) - } else if (containingClass.structName in variableManager) { - args.add(variableManager[containingClass.structName]!!) - } else { - args.add(variableManager["this"]!!) - } - - args.addAll(codeBuilder.loadArgsIfRequired(names, method.args)) - - return evaluateFunctionCallExpression(LLVMVariable(method.fullName, method.returnType?.type ?: LLVMVoidType(), scope = LLVMVariableScope()), args) - } - - private fun resolveContainingClass(expr: KtElement): StructCodegen? { - val name = expr.getResolvedCallWithAssert(state.bindingContext).dispatchReceiver?.type?.constructor?.declarationDescriptor?.fqNameSafe?.asString() ?: return null - return resolveCodegenByName(name) - } - - private fun evaluateFunctionCallExpression(function: LLVMVariable, - names: List): LLVMSingleValue? { - val returnType = function.type - when (returnType) { - is LLVMVoidType -> { - codeBuilder.addLLVMCodeToLocalPlace(LLVMCall(LLVMVoidType(), function.toString(), names).toString()) - return null - } - is LLVMReferenceType -> { - val returnVar = codeBuilder.getNewVariable(returnType, pointer = 2) - codeBuilder.allocStaticVar(returnVar, pointer = true) - - val args = mutableListOf(returnVar) - args.addAll(names) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMCall(LLVMVoidType(), function.toString(), args).toString()) - if (returnVar.pointer == 2) { - return returnVar - } else { - return codeBuilder.loadAndGetVariable(returnVar) - } - } - else -> { - val result = codeBuilder.saveExpression(LLVMCall(returnType, function.toString(), names)) - - val resultPtr = codeBuilder.getNewVariable(returnType, pointer = 1) - codeBuilder.allocStackVar(resultPtr, pointer = true) - codeBuilder.storeVariable(resultPtr, result) - return resultPtr - } - } - } - - private fun evaluateConstructorCallExpression(function: LLVMVariable, - names: List): LLVMSingleValue? { - val store = codeBuilder.getNewVariable(function.type, pointer = 1) - codeBuilder.allocStaticVar(store, pointer = true) - - val result = codeBuilder.getNewVariable(function.type, pointer = 2) - codeBuilder.allocStackVar(result, pointer = true) - codeBuilder.storeVariable(result, store) - - val args = mutableListOf(store) - args.addAll(names) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMCall( - LLVMVoidType(), - function.toString(), - args - ).toString()) - - return result - } - - private fun parseArgList(expr: KtCallExpression, - scopeDepth: Int): List = - parseValueArguments(expr.getValueArgumentsInParentheses(), scopeDepth) - - private fun parseValueArguments(args: List, scopeDepth: Int): List = - args.map { evaluateExpression(it.getArgumentExpression(), scopeDepth) as LLVMSingleValue } - - private fun parseArgumentsWithDefaultValues(args: MutableCollection, defaultValues: List, scopeDepth: Int): List = - args.mapIndexed(fun(i: Int, value: ResolvedValueArgument): LLVMSingleValue { - return when (value) { - is DefaultValueArgument -> evaluateExpression(defaultValues[i], scopeDepth)!! - is ExpressionValueArgument -> evaluateExpression((value.valueArgument as KtValueArgument).getArgumentExpression()!!, scopeDepth)!! - else -> throw UnexpectedException("Wrong parser argument") - } - }).toList() - - private fun evaluateBinaryExpression(expr: KtBinaryExpression, - scopeDepth: Int): LLVMVariable? { - val operator = expr.operationToken - - if (operator == KtTokens.ELVIS) { - return evaluateElvisOperator(expr, scopeDepth) - } - - val left = evaluateExpression(expr.left, scopeDepth) - if (expr.left is KtArrayAccessExpression) { - val callMaker = state.bindingContext.get(BindingContext.CALL, expr.left) - if (callMaker!!.callType == Call.CallType.ARRAY_SET_METHOD) { - return left as LLVMVariable? - } - } - - left ?: throw UnsupportedOperationException("Wrong binary expression: ${expr.text}") - val right = evaluateExpression(expr.right, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression: ${expr.text}") - - return addPrimitiveBinaryOperation(operator, left, right, expr.operationReference) - } - - private fun evaluatePostfixExpression(expr: KtPostfixExpression, - scopeDepth: Int): LLVMSingleValue? { - val operator = expr.operationToken - val left = evaluateExpression(expr.baseExpression, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression: ${expr.text}") - return addPrimitivePostfixOperation(operator, left as LLVMVariable) - } - - private fun evaluatePrefixExpression(expr: KtPrefixExpression, - scopeDepth: Int): LLVMSingleValue? { - val operator = expr.operationToken - val left = evaluateExpression(expr.baseExpression, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression") - return addPrimitivePrefixOperation(operator, left) - } - - private fun addPrimitivePostfixOperation(operator: IElementType?, - firstOp: LLVMVariable): LLVMSingleValue? = - when (operator) { - KtTokens.PLUSPLUS, KtTokens.MINUSMINUS -> { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - val oldValue = codeBuilder.getNewVariable(firstOp.type, firstOp.pointer) - codeBuilder.allocStackVar(oldValue, asValue = true) - codeBuilder.copyVariable(firstOp, oldValue) - - val llvmExpression = when (operator) { - KtTokens.PLUSPLUS -> firstOp.type.operatorInc(firstNativeOp) - KtTokens.MINUSMINUS -> firstOp.type.operatorDec(firstNativeOp) - else -> throw IllegalAccessError() - } - - val resultOp = codeBuilder.saveExpression(llvmExpression) - codeBuilder.storeVariable(firstOp, resultOp) - oldValue - } - KtTokens.EXCLEXCL -> { - var result = firstOp - val nullLabel = codeBuilder.getNewLabel(prefix = "nullCheck") - val notNullLabel = codeBuilder.getNewLabel(prefix = "nullCheck") - val nullCheck = codeBuilder.nullCheck(firstOp) - codeBuilder.addCondition(nullCheck, nullLabel, notNullLabel) - codeBuilder.markWithLabel(nullLabel) - codeBuilder.addExceptionCall("KotlinNullPointerException") - codeBuilder.addUnconditionalJump(notNullLabel) - codeBuilder.markWithLabel(notNullLabel) - if (firstOp.type.isPrimitive) { - result = codeBuilder.receivePointedArgument(firstOp, requirePointer = 0) as LLVMVariable - } - result - } - else -> throw UnsupportedOperationException() - } - - - private fun addPrimitivePrefixOperation(operator: IElementType?, - firstOp: LLVMSingleValue): LLVMSingleValue? = - when (operator) { - KtTokens.MINUS, - KtTokens.PLUS -> addPrimitiveBinaryOperation(operator!!, LLVMConstant("0", firstOp.type), firstOp) - KtTokens.EXCL -> { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - val llvmExpression = addPrimitiveReferenceOperationByName("xor", LLVMConstant("true", LLVMBooleanType()), firstNativeOp) - codeBuilder.saveExpression(llvmExpression) - } - else -> throw UnsupportedOperationException() - } - - - private fun evaluateElvisOperator(expr: KtBinaryExpression, - scopeDepth: Int): LLVMVariable { - val left = evaluateExpression(expr.left, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression") - val lptr = codeBuilder.loadAndGetVariable(left as LLVMVariable) - - val condition = lptr.type.operatorEq(lptr, LLVMVariable("", LLVMNullType())) - - val conditionResult = codeBuilder.saveExpression(condition) - - val notNull = codeBuilder.getNewLabel(prefix = "elvis") - val endLabel = codeBuilder.getNewLabel(prefix = "elvis") - - codeBuilder.addCondition(conditionResult, notNull, endLabel) - - codeBuilder.markWithLabel(notNull) - var right = evaluateExpression(expr.right, scopeDepth + 1) - if (right != null) { - right = codeBuilder.loadAndGetVariable(right as LLVMVariable) - codeBuilder.storeVariable(left, right) - } - - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(endLabel) - - return left - } - - private fun addPrimitiveReferenceOperationByName(operator: String, - firstOp: LLVMSingleValue, - secondNativeOp: LLVMSingleValue): LLVMExpression { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - - return when (operator) { - "||", - "or" -> firstNativeOp.type.operatorOr(firstNativeOp, secondNativeOp) - "xor" -> firstNativeOp.type.operatorXor(firstNativeOp, secondNativeOp) - "&&", - "and" -> firstNativeOp.type.operatorAnd(firstNativeOp, secondNativeOp) - "%" -> firstNativeOp.type.operatorMod(firstNativeOp, secondNativeOp) - "shl" -> firstNativeOp.type.operatorShl(firstNativeOp, codeBuilder.convertVariableToType(secondNativeOp, firstNativeOp.type)) - "shr" -> firstNativeOp.type.operatorShr(firstNativeOp, codeBuilder.convertVariableToType(secondNativeOp, firstNativeOp.type)) - "ushr" -> firstNativeOp.type.operatorUshr(firstNativeOp, codeBuilder.convertVariableToType(secondNativeOp, firstNativeOp.type)) - "+=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorPlus(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - "-=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorMinus(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - "*=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorTimes(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - "%=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorMod(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - ".." -> { - val descriptor = state.classes["kotlin.ranges.${firstOp.type.mangle}Range"] - val arguments = listOf(firstOp, secondNativeOp) - val detectedConstructor = LLVMType.mangleFunctionTypes(arguments.map { it.type }) - val result = evaluateConstructorCallExpression(LLVMVariable(descriptor!!.structName + detectedConstructor, descriptor.type, scope = LLVMVariableScope()), arguments) - return LLVMExpression(result!!.type, "load ${descriptor.type}** $result, align ${descriptor.type.align}", pointer = 1) - } - else -> throw UnsupportedOperationException("Unknown binary operator: $operator(${firstNativeOp.type}, ${secondNativeOp.type})") - } - } - - private fun evaluateConstantExpression(expr: KtConstantExpression): LLVMConstant { - val expressionKotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)!!.type!! - val expressionValue = state.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, expr)?.getValue(expressionKotlinType) - val type = LLVMMapStandardType(expressionKotlinType, state) - return LLVMConstant(expressionValue?.toString().orEmpty(), type, pointer = 0) - } - - private fun evaluatePsiElement(element: PsiElement, - scopeDepth: Int): LLVMSingleValue? = - when (element) { - is LeafPsiElement -> evaluateLeafPsiElement(element, scopeDepth) - is KtConstantExpression -> evaluateConstantExpression(element) - else -> null - } - - - private fun evaluateLeafPsiElement(element: LeafPsiElement, - scopeDepth: Int): LLVMVariable? { - return when (element.elementType) { - KtTokens.RETURN_KEYWORD -> evaluateReturnInstruction(element, scopeDepth) - KtTokens.IF_KEYWORD -> evaluateIfOperator(element.context as KtIfExpression, scopeDepth, isExpression = false) - KtTokens.WHILE_KEYWORD -> evaluateWhileOperator(element.context as KtWhileExpression, scopeDepth) - KtTokens.FOR_KEYWORD -> evaluateForOperator(element.context as KtForExpression, scopeDepth) - else -> null - } - } - - private fun evaluateForOperator(expr: KtForExpression, - scopeDepth: Int): LLVMVariable? { - val range = evaluateExpression(expr.loopRange, scopeDepth + 1)!! - val conditionLabel = codeBuilder.getNewLabel(prefix = "for_condition") - val bodyLabel = codeBuilder.getNewLabel(prefix = "for_body") - val exitLabel = codeBuilder.getNewLabel(prefix = "for_exit") - val rangeTypeName = (range.type as LLVMReferenceType).type - - val descriptor = state.classes[rangeTypeName] ?: throw UnexpectedException("Error occurred in evaluating range expression") - val method = descriptor.methods["$rangeTypeName.iterator"] ?: throw UnexpectedException("Cant receive iterator $rangeTypeName.iterator") - val returnType = method.returnType!!.type - val returnTypeName = (returnType as LLVMReferenceType).type - val iteratorDescriptor = state.classes[returnTypeName] - val nextDescriptor = iteratorDescriptor!!.methods["$returnTypeName.next"] ?: throw UnexpectedException("$returnTypeName.nextInt") - - val conditionIterator = evaluateFunctionCallExpression(LLVMVariable("$rangeTypeName.iterator", returnType, scope = LLVMVariableScope()), listOf(range))!! - val iteratorThisArgument = codeBuilder.receivePointedArgument(conditionIterator, requirePointer = 1) - codeBuilder.addUnconditionalJump(conditionLabel) - codeBuilder.markWithLabel(conditionLabel) - var conditionResult = evaluateFunctionCallExpression(LLVMVariable("$returnTypeName.hasNext", LLVMBooleanType(), scope = LLVMVariableScope()), listOf(iteratorThisArgument))!! - conditionResult = codeBuilder.receivePointedArgument(conditionResult, requirePointer = 0) - codeBuilder.addCondition(conditionResult, bodyLabel, exitLabel) - - codeBuilder.addUnconditionalJump(bodyLabel) - codeBuilder.markWithLabel(bodyLabel) - val loopParameter = evaluateFunctionCallExpression(LLVMVariable("$returnTypeName.next", LLVMIntType(), scope = LLVMVariableScope()), listOf(iteratorThisArgument))!! - val loopParameterDescriptor = state.bindingContext.get(BindingContext.VALUE_PARAMETER, expr.loopParameter!!)?.fqNameSafe?.asString() ?: expr.loopParameter!!.name!! - - val allocVar = variableManager.receiveVariable(loopParameterDescriptor, nextDescriptor.returnType!!.type, LLVMRegisterScope(), pointer = - nextDescriptor.returnType!!.pointer + 1) - variableManager.addVariable(loopParameterDescriptor, allocVar, scopeDepth + 1) - codeBuilder.allocStackVar(allocVar, pointer = true) - - addPrimitiveBinaryOperation(KtTokens.EQ, allocVar, loopParameter, null) - - evaluateCodeBlock(expr.body, startLabel = null, nextIterationLabel = conditionLabel, breakLabel = exitLabel, scopeDepth = scopeDepth + 1) - codeBuilder.markWithLabel(exitLabel) - - return null - } - - private fun evaluateWhenItem(item: KtWhenEntry, - target: LLVMSingleValue, - resultVariable: LLVMVariable, - elseLabel: LLVMLabel, - endLabel: LLVMLabel, - isElse: Boolean, - scopeDepth: Int) { - val successConditionsLabel = codeBuilder.getNewLabel(prefix = "when_condition_success") - var nextLabel = codeBuilder.getNewLabel(prefix = "when_condition_condition") - - codeBuilder.addUnconditionalJump(nextLabel) - - for (condition in item.conditions) { - codeBuilder.markWithLabel(nextLabel) - nextLabel = codeBuilder.getNewLabel(prefix = "when_condition_condition") - - val currentConditionExpression = - evaluateExpression((condition as KtWhenConditionWithExpression).expression, scopeDepth + 1)!! - val conditionResult = addPrimitiveBinaryOperation(KtTokens.EQEQ, target, currentConditionExpression) - - codeBuilder.addCondition(conditionResult, successConditionsLabel, nextLabel) - } - - codeBuilder.markWithLabel(nextLabel) - codeBuilder.addUnconditionalJump(if (isElse) successConditionsLabel else elseLabel) - codeBuilder.markWithLabel(successConditionsLabel) - - var successExpression = evaluateExpression(item.expression, scopeDepth + 1) - - if (successExpression != null && !LLVMType.nullOrVoidType(resultVariable.type)) { - successExpression = codeBuilder.receivePointedArgument(successExpression, requirePointer = 0) - codeBuilder.storeVariable(resultVariable, successExpression) - } - - codeBuilder.addUnconditionalJump(endLabel) - } - - private fun evaluateWhenExpression(expr: KtWhenExpression, - scopeDepth: Int): LLVMVariable? { - codeBuilder.addComment("start when expression") - val whenExpression = expr.subjectExpression - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)!!.type!! - val expressionType = LLVMMapStandardType(kotlinType, state) - - val targetExpression = evaluateExpression(whenExpression, scopeDepth + 1) ?: LLVMConstant("true", LLVMBooleanType()) - val resultVariable = codeBuilder.getNewVariable(expressionType, pointer = 1) - - when (expressionType) { - is LLVMVoidType, - is LLVMNullType -> { - } - is LLVMReferenceType -> codeBuilder.allocStaticVar(resultVariable, asValue = true) - else -> codeBuilder.allocStackVar(resultVariable, asValue = true) - } - - var nextLabel = codeBuilder.getNewLabel(prefix = "when_start") - val endLabel = codeBuilder.getNewLabel(prefix = "when_end") - codeBuilder.addUnconditionalJump(nextLabel) - for (item in expr.entries) { - codeBuilder.markWithLabel(nextLabel) - nextLabel = codeBuilder.getNewLabel(prefix = "when_item") - evaluateWhenItem(item, targetExpression, resultVariable, nextLabel, endLabel, item.isElse, scopeDepth + 1) - } - - codeBuilder.markWithLabel(nextLabel) - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(endLabel) - return resultVariable - } - - private fun evaluateWhileOperator(expr: KtWhileExpression, - scopeDepth: Int): LLVMVariable? = - executeWhileBlock(expr.condition!!, expr.body!!, scopeDepth, checkConditionBeforeExecute = true) - - private fun executeWhileBlock(condition: KtExpression, bodyExpression: PsiElement, scopeDepth: Int, checkConditionBeforeExecute: Boolean): LLVMVariable? { - val conditionLabel = codeBuilder.getNewLabel(prefix = "while") - val bodyLabel = codeBuilder.getNewLabel(prefix = "while") - val exitLabel = codeBuilder.getNewLabel(prefix = "while") - - codeBuilder.addUnconditionalJump(if (checkConditionBeforeExecute) conditionLabel else bodyLabel) - codeBuilder.markWithLabel(conditionLabel) - var conditionResult = evaluateExpression(condition, scopeDepth + 1)!! - conditionResult = codeBuilder.receivePointedArgument(conditionResult, requirePointer = 0) - - codeBuilder.addCondition(conditionResult, bodyLabel, exitLabel) - evaluateCodeBlock(bodyExpression, startLabel = bodyLabel, nextIterationLabel = conditionLabel, breakLabel = exitLabel, scopeDepth = scopeDepth + 1) - codeBuilder.markWithLabel(exitLabel) - - return null - } - - private fun evaluateIfOperator(element: KtIfExpression, - scopeDepth: Int, - isExpression: Boolean = true): LLVMVariable? { - val conditionResult = evaluateExpression(element.condition, scopeDepth)!! - val conditionNativeResult = codeBuilder.receivePointedArgument(conditionResult, requirePointer = 0) - - return if (isExpression) - executeIfExpression(conditionNativeResult, element.then!!, element.`else`, element, scopeDepth + 1) - else - executeIfBlock(conditionNativeResult, element.then!!, element.`else`, scopeDepth + 1) - } - - private fun executeIfExpression(conditionResult: LLVMSingleValue, - thenExpression: KtExpression, - elseExpression: PsiElement?, - ifExpression: KtIfExpression, - scopeDepth: Int): LLVMVariable? { - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, ifExpression)!!.type!! - val expressionType = LLVMInstanceOfStandardType("type", kotlinType, LLVMVariableScope(), state).type - val resultVariable = codeBuilder.getNewVariable(expressionType, pointer = 1) - - when (resultVariable.type) { - is LLVMReferenceType -> codeBuilder.allocStaticVar(resultVariable, asValue = true) - else -> codeBuilder.allocStackVar(resultVariable, asValue = true) - } - val thenLabel = codeBuilder.getNewLabel(prefix = "if_then") - val elseLabel = codeBuilder.getNewLabel(prefix = "if_else") - val endLabel = codeBuilder.getNewLabel(prefix = "if_end") - - codeBuilder.addCondition(conditionResult, thenLabel, elseLabel) - codeBuilder.markWithLabel(thenLabel) - val thenResultExpression = evaluateExpression(thenExpression, scopeDepth + 1) ?: throw UnexpectedException("Can't evaluate then in if expression") - val thenResultNativeExpression = codeBuilder.receiveNativeValue(thenResultExpression) - codeBuilder.storeVariable(resultVariable, thenResultNativeExpression) - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(elseLabel) - - val elseResultExpression = evaluateExpression(elseExpression, scopeDepth + 1) ?: throw UnexpectedException("Can't evaluate else in if expression") - val elseResultNativeExpression = codeBuilder.receiveNativeValue(elseResultExpression) - codeBuilder.storeVariable(resultVariable, elseResultNativeExpression) - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(endLabel) - return resultVariable - } - - private fun executeIfBlock(conditionResult: LLVMSingleValue, - thenExpression: PsiElement, - elseExpression: PsiElement?, - scopeDepth: Int): LLVMVariable? { - val thenLabel = codeBuilder.getNewLabel(prefix = "if") - val elseLabel = codeBuilder.getNewLabel(prefix = "if") - val endLabel = codeBuilder.getNewLabel(prefix = "if") - - codeBuilder.addCondition(conditionResult, thenLabel, if (elseExpression != null) elseLabel else endLabel) - - evaluateCodeBlock(thenExpression, startLabel = thenLabel, nextIterationLabel = endLabel, breakLabel = endLabel, scopeDepth = scopeDepth + 1) - if (elseExpression != null) { - evaluateCodeBlock(elseExpression, startLabel = elseLabel, nextIterationLabel = endLabel, breakLabel = endLabel, scopeDepth = scopeDepth + 1) - } - - codeBuilder.markWithLabel(endLabel) - return null - } - - private fun evaluateValExpression(element: KtProperty, - scopeDepth: Int): LLVMVariable? { - val variable = state.bindingContext.get(BindingContext.VARIABLE, element)!! - val identifier = variable.fqNameSafe.convertToNativeName() - - val assignExpression = evaluateExpression(element.delegateExpressionOrInitializer, scopeDepth) - val expectedExpressionType = LLVMInstanceOfStandardType("", variable.type, state = state) - - val primitivePointer = LLVMMapStandardType(variable.type, state).isPrimitive - - val allocVar = variableManager.receiveVariable(identifier, expectedExpressionType.type, LLVMRegisterScope(), pointer = expectedExpressionType.pointer + 1) - codeBuilder.allocStackVar(allocVar, pointer = true) - - variableManager.addVariable(identifier, allocVar, scopeDepth) - if (assignExpression != null) { - if ((primitivePointer) && (assignExpression.type is LLVMReferenceType)) { - throw UnexpectedException(element.text) - } - addPrimitiveBinaryOperation(KtTokens.EQ, allocVar, assignExpression, null) - } - - return null - } - - private fun evaluateReturnInstruction(element: PsiElement, - scopeDepth: Int): LLVMVariable? { - val next = element.getNextSiblingIgnoringWhitespaceAndComments() - var retVar = evaluateExpression(next, scopeDepth) - val type = retVar?.type ?: LLVMVoidType() - - when (type) { - is LLVMReferenceType -> generateReferenceReturn(retVar!!) - is LLVMNullType -> { - retVar = when (retVar) { - is LLVMConstant -> LLVMConstant(retVar.value, LLVMNullType(returnType!!.type), returnType!!.pointer - 1) - is LLVMVariable -> LLVMVariable(retVar.label, LLVMNullType(returnType!!.type), retVar.kotlinName, retVar.scope, returnType!!.pointer - 1) - else -> throw UnexpectedException("Unknown inheritor of LLVMSingleValue") - } - generateReferenceReturn(retVar!!) - } - is LLVMVoidType -> codeBuilder.addAnyReturn(LLVMVoidType()) - else -> { - val retNativeValue = codeBuilder.receiveNativeValue(retVar!!) - codeBuilder.addReturnOperator(retNativeValue) - } - } - - return null - } - - private fun generateReferenceReturn(retVar: LLVMSingleValue) { - var result = retVar - if (result.pointer == 2) { - result = codeBuilder.loadAndGetVariable(retVar as LLVMVariable) - } - - codeBuilder.storeVariable(returnType!!, result) - codeBuilder.addAnyReturn(LLVMVoidType()) - } -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/codegens/ClassCodegen.kt b/experiments/student-backend/src/org/kotlinnative/translator/codegens/ClassCodegen.kt deleted file mode 100644 index b9f3619474a..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/codegens/ClassCodegen.kt +++ /dev/null @@ -1,84 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.psi.KtClass -import org.jetbrains.kotlin.psi.KtParameter -import org.jetbrains.kotlin.resolve.BindingContext -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.exceptions.TranslationException -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType - -class ClassCodegen(state: TranslationState, - variableManager: VariableManager, - val clazz: KtClass, - codeBuilder: LLVMBuilder, - parentCodegen: StructCodegen? = null) : - StructCodegen(state, variableManager, clazz, codeBuilder, parentCodegen) { - - val annotation: Boolean - val enum: Boolean - var companionObjectCodegen: ObjectCodegen? = null - val descriptor: ClassDescriptor - - override var size: Int = 0 - override val structName: String = clazz.fqName?.asString()!! - override val type: LLVMReferenceType - - init { - type = LLVMReferenceType(structName, "class", align = TranslationState.POINTER_ALIGN, size = TranslationState.POINTER_SIZE, byRef = true) - descriptor = state.bindingContext.get(BindingContext.CLASS, clazz) ?: throw TranslationException("Can't receive descriptor of class " + clazz.name) - - annotation = descriptor.kind == ClassKind.ANNOTATION_CLASS - enum = descriptor.kind == ClassKind.ENUM_CLASS - - type.align = TranslationState.POINTER_ALIGN - } - - override fun prepareForGenerate() { - val parameterList = clazz.getPrimaryConstructorParameterList()?.parameters ?: listOf() - indexFields(parameterList) - generateInnerFields(clazz.declarations) - - type.size = calculateTypeSize() - - if (annotation) { - return - } - - super.prepareForGenerate() - nestedClasses.forEach { x, classCodegen -> classCodegen.prepareForGenerate() } - - if (descriptor.companionObjectDescriptor != null) { - val companionObject = clazz.getCompanionObjects().first() - companionObjectCodegen = ObjectCodegen(state, variableManager, companionObject, codeBuilder, this) - companionObjectCodegen!!.prepareForGenerate() - } - } - - override fun generate() { - if (annotation) { - return - } - - super.generate() - nestedClasses.forEach { x, classCodegen -> classCodegen.generate() } - companionObjectCodegen?.generate() - } - - private fun indexFields(parameters: MutableList) { - if (annotation) { - return - } - - val currentConstructorFields = parameters.mapIndexed { i, it -> resolveType(it, state.bindingContext.get(BindingContext.TYPE, it.typeReference)!!, fields.size + i) } - fields.addAll(currentConstructorFields) - fieldsIndex.putAll(currentConstructorFields.map { Pair(it.label, it) }) - primaryConstructorIndex = LLVMType.mangleFunctionArguments(currentConstructorFields) - constructorFields.put(primaryConstructorIndex!!, currentConstructorFields) - } - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/codegens/FunctionCodegen.kt b/experiments/student-backend/src/org/kotlinnative/translator/codegens/FunctionCodegen.kt deleted file mode 100644 index ed2a4a8df72..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/codegens/FunctionCodegen.kt +++ /dev/null @@ -1,138 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtNamedFunction -import org.jetbrains.kotlin.psi.KtParameter -import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.source.KotlinSourceElement -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.LLVMFunctionType -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType -import org.kotlinnative.translator.llvm.types.LLVMVoidType -import java.util.* - - -class FunctionCodegen(state: TranslationState, - variableManager: VariableManager, - val function: KtNamedFunction, - codeBuilder: LLVMBuilder) : - BlockCodegen(state, variableManager, codeBuilder) { - - var name: String - var args = LinkedList() - val isExtensionDeclaration = function.isExtensionDeclaration() - var functionNamePrefix = "" - val external: Boolean - val defaultValues: List - val fullName: String - get() = functionNamePrefix + name - - init { - val descriptor = state.bindingContext.get(BindingContext.FUNCTION, function)!! - args.addAll(descriptor.valueParameters.map { - LLVMInstanceOfStandardType(it?.fqNameSafe?.asString() ?: it.name.toString(), it.type, state = state) - }) - - returnType = LLVMInstanceOfStandardType("instance", descriptor.returnType!!, state = state) - if (returnType!!.type is LLVMReferenceType) { - returnType!!.pointer = 2 - } - external = descriptor.isExternal - name = if (external) function.name!! else function.fqName!!.convertToNativeName() + LLVMType.mangleFunctionArguments(args) - - if (isExtensionDeclaration) { - name = "${function.name}${if (!external) LLVMType.mangleFunctionArguments(args) else ""}" - val receiverType = descriptor.extensionReceiverParameter!!.type - val translatorType = LLVMMapStandardType(receiverType, state) - val packageName = (function.containingFile as KtFile).packageFqName.asString() - functionNamePrefix = packageName.addAfterIfNotEmpty(".") + translatorType.mangle + "." - - val extensionFunctionsOfThisType = state.extensionFunctions.getOrDefault(translatorType.toString(), HashMap()) - extensionFunctionsOfThisType.put(fullName, this) - state.extensionFunctions.put(translatorType.toString(), extensionFunctionsOfThisType) - } - - defaultValues = descriptor.valueParameters.indices.map { - val parameterDescriptor = descriptor.valueParameters[it] - if (parameterDescriptor.declaresDefaultValue()) { - val initializer = (parameterDescriptor.source as KotlinSourceElement).psi as KtParameter - initializer.defaultValue - } else { - null - } - } - } - - fun generate(this_type: LLVMVariable? = null) { - generateDeclaration(this_type) - - if (external) { - return - } - - codeBuilder.addStartExpression() - generateLoadArguments() - evaluateCodeBlock(function.bodyExpression, scopeDepth = topLevelScopeDepth, isBlock = function.hasBlockBody()) - - if (returnType?.type is LLVMVoidType){ - codeBuilder.addAnyReturn(LLVMVoidType()) - } - codeBuilder.addEndExpression() - } - - private fun generateDeclaration(this_type: LLVMVariable? = null) { - var actualReturnType: LLVMType = returnType!!.type - val actualArgs = ArrayList() - - if (returnType!!.pointer > 0) { - actualReturnType = LLVMVoidType() - actualArgs.add(returnType!!) - } - - if (isExtensionDeclaration) { - val receiverParameter = state.bindingContext.get(BindingContext.FUNCTION, function)!!.extensionReceiverParameter!! - val receiverType = receiverParameter.type - val translatorType = LLVMMapStandardType(receiverType, state) - - val classVal = when (translatorType) { - is LLVMReferenceType -> LLVMVariable("classvariable.this", translatorType, pointer = 1) - else -> LLVMVariable("type", translatorType, pointer = 0) - } - - variableManager.addVariable("this", classVal, level = 0) - actualArgs.add(classVal) - } - - if (this_type != null) { - actualArgs.add(this_type) - } - - actualArgs.addAll(args) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMFunctionDescriptor(fullName, actualArgs, actualReturnType, external)) - } - - private fun generateLoadArguments() { - args.forEach(fun(it: LLVMVariable) { - if (it.type is LLVMFunctionType || (it.type is LLVMReferenceType && it.type.byRef)) { - variableManager.addVariable(it.label, LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope(), pointer = 1), topLevelScopeDepth) - return - } - - if (it.type !is LLVMReferenceType || it.type.byRef) { - val loadVariable = LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope(), pointer = it.pointer) - val allocVar = codeBuilder.loadArgument(loadVariable) - variableManager.addVariable(it.label, allocVar, topLevelScopeDepth) - } else { - variableManager.addVariable(it.label, LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope(), pointer = 0), topLevelScopeDepth) - } - }) - } - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/codegens/ObjectCodegen.kt b/experiments/student-backend/src/org/kotlinnative/translator/codegens/ObjectCodegen.kt deleted file mode 100644 index 4f58ad3d000..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/codegens/ObjectCodegen.kt +++ /dev/null @@ -1,43 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.psi.KtObjectDeclaration -import org.jetbrains.kotlin.resolve.BindingContext -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.LLVMVariable -import org.kotlinnative.translator.llvm.LLVMVariableScope -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType - -class ObjectCodegen(state: TranslationState, - variableManager: VariableManager, - val objectDeclaration: KtObjectDeclaration, - codeBuilder: LLVMBuilder, - parentCodegen: StructCodegen? = null) : - StructCodegen(state, variableManager, objectDeclaration, codeBuilder, parentCodegen) { - - override var size: Int = 0 - override val structName: String = objectDeclaration.fqName?.asString()!! - override val type = LLVMReferenceType(structName, "class") - - init { - primaryConstructorIndex = LLVMType.mangleFunctionArguments(emptyList()) - constructorFields.put(primaryConstructorIndex!!, arrayListOf()) - } - - override fun prepareForGenerate() { - generateInnerFields(objectDeclaration.declarations) - type.size = calculateTypeSize() - - super.prepareForGenerate() - - val classInstance = LLVMVariable("object.instance.$structName", type, objectDeclaration.name, LLVMVariableScope(), pointer = 1) - codeBuilder.addGlobalInitialize(classInstance, fields, initializedFields.map { - val type = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, it.value)!!.type!! - Pair(it.key, state.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, it.value)!!.getValue(type).toString()) - }.toMap(), type) - variableManager.addGlobalVariable(structName, classInstance) - } - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/codegens/PropertyCodegen.kt b/experiments/student-backend/src/org/kotlinnative/translator/codegens/PropertyCodegen.kt deleted file mode 100644 index 9f75145baa2..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/codegens/PropertyCodegen.kt +++ /dev/null @@ -1,33 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.psi.KtProperty -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.student.descriptorUtils.nameIfStandardType -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.LLVMInstanceOfStandardType -import org.kotlinnative.translator.llvm.LLVMVariable -import org.kotlinnative.translator.llvm.LLVMVariableScope - - -class PropertyCodegen(val state: TranslationState, - val variableManager: VariableManager, - val property: KtProperty, - val codeBuilder: LLVMBuilder) { - - fun generate() { - val varInfo = state.bindingContext.get(BindingContext.VARIABLE, property)?.compileTimeInitializer ?: return - - val kotlinType = varInfo.type - val value = varInfo.value - if (kotlinType.nameIfStandardType != null) { - val variableType = LLVMInstanceOfStandardType(property.name ?: return, kotlinType, state = state).type - val variable = LLVMVariable(property.name.toString(), variableType, property.name.toString(), LLVMVariableScope()) - variableManager.addGlobalVariable(property.name.toString(), variable) - codeBuilder.defineGlobalVariable(variable, variableType.parseArg(value.toString())) - variable.pointer++ - } - } - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/codegens/StructCodegen.kt b/experiments/student-backend/src/org/kotlinnative/translator/codegens/StructCodegen.kt deleted file mode 100644 index 92021d7b054..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/codegens/StructCodegen.kt +++ /dev/null @@ -1,252 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.types.KotlinType -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.LLVMCharType -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType -import org.kotlinnative.translator.llvm.types.LLVMVoidType -import java.util.* - -/* - * TODO make high level description of code generation process - * and structure of generated code. - */ -abstract class StructCodegen(val state: TranslationState, - val variableManager: VariableManager, - val classOrObject: KtClassOrObject, - val codeBuilder: LLVMBuilder, - val parentCodegen: StructCodegen? = null) { - - val fields = ArrayList() - val fieldsIndex = HashMap() - val nestedClasses = HashMap() - val enumFields = HashMap() - val constructorFields = HashMap>() - var primaryConstructorIndex: String? = null - val initializedFields = HashMap() - var methods = HashMap() - - abstract val type: LLVMReferenceType - abstract var size: Int - abstract val structName: String - - open fun prepareForGenerate() { - generateStruct() - classOrObject.declarations.filterIsInstance().map { - val function = FunctionCodegen(state, variableManager, it, codeBuilder) - methods.put(function.name, function) - } - } - - fun calculateTypeSize(): Int { - val classAlignment = fields.map { it.type.align }.max()?.toInt() ?: 0 - var alignmentRemainder = 0 - size = 0 - - for (item in fields) { - val currentFieldSize = if (item.pointer > 0) TranslationState.POINTER_ALIGN else item.type.align - alignmentRemainder -= (alignmentRemainder % currentFieldSize) - if (alignmentRemainder < currentFieldSize) { - size += classAlignment - alignmentRemainder = classAlignment - currentFieldSize - } else { - alignmentRemainder -= currentFieldSize - } - } - return size - } - - open fun generate() { - generateEnumFields() - generatePrimaryConstructor() - classOrObject.getSecondaryConstructors().map { generateSecondaryConstructor(it) } - - val classVal = LLVMVariable("classvariable.this", type, pointer = if (type.isPrimitive) 0 else 1) - variableManager.addVariable("this", classVal, level = 0) - - methods.values.map { it.generate(classVal) } - } - - fun generateInnerFields(declarations: List) { - for (declaration in declarations) { - when (declaration) { - is KtProperty -> { - val ktType = state.bindingContext.get(BindingContext.TYPE, declaration.typeReference) - ?: state.bindingContext.get(BindingContext.VARIABLE, declaration)!!.type - val field = resolveType(declaration, ktType, fields.size) - - if (declaration.initializer != null) { - initializedFields.put(field, declaration.initializer!!) - } - - fields.add(field) - fieldsIndex[field.label] = field - } - is KtEnumEntry -> { - val name = declaration.name!! - val field = LLVMVariable("class.$structName.$name", type, scope = LLVMVariableScope(), pointer = 2) - enumFields.put(name, field) - } - is KtClass -> - nestedClasses.put(declaration.fqName!!.asString(), - ClassCodegen(state, - VariableManager(state.globalVariableCollection), - declaration, codeBuilder, this)) - } - } - } - - private fun generateEnumFields() { - val enumEntries = classOrObject.declarations.filterIsInstance() - - for (declaration in enumEntries) { - val name = declaration.name!! - val initializer = declaration.initializerList!!.initializers[0] - val arguments = (initializer as KtSuperTypeCallEntry).valueArguments.map { it.getArgumentExpression()!!.text } - - val field = codeBuilder.getNewVariable(type, scope = LLVMVariableScope()) - val enumField = enumFields[name]!! - - codeBuilder.defineGlobalVariable(field, codeBuilder.makeStructInitializer(constructorFields[primaryConstructorIndex]!!, arguments)) - codeBuilder.defineGlobalVariable(LLVMVariable(enumField.label, enumField.type, enumField.kotlinName, enumField.scope, enumField.pointer - 1), field.toString()) - } - } - - private fun generateStruct() = - codeBuilder.createClass(structName, fields) - - private fun generateSecondaryConstructor(secondaryConstructor: KtSecondaryConstructor) { - val thisCall = secondaryConstructor.getDelegationCall().calleeExpression - val descriptor = state.bindingContext.get(BindingContext.CONSTRUCTOR, secondaryConstructor) - - val classVal = LLVMVariable("classvariable.this", type, pointer = 1) - variableManager.addVariable("this", classVal, level = 0) - - val secondaryConstructorArguments = descriptor!!.valueParameters.map { - LLVMInstanceOfStandardType(it.fqNameSafe.convertToNativeName(), it.type, state = state) - } - - val argFields = mutableListOf(classVal) - argFields.addAll(secondaryConstructorArguments) - val currentConstructorIndex = LLVMType.mangleFunctionArguments(secondaryConstructorArguments) - constructorFields.put(currentConstructorIndex, argFields) - codeBuilder.addLLVMCodeToLocalPlace(LLVMFunctionDescriptor(structName + currentConstructorIndex, argFields, LLVMVoidType())) - - codeBuilder.addStartExpression() - - secondaryConstructorArguments.map { variableManager.addVariable(it.label, it, level = 2) } - - val blockCodegen = object : BlockCodegen(state, variableManager, codeBuilder) {} - val mainConstructorThis = blockCodegen.evaluateConstructorDelegationReferenceExpression(thisCall!!, this, secondaryConstructorArguments, 1) as LLVMVariable - variableManager.addVariable("this", mainConstructorThis, level = 0) - - blockCodegen.evaluateCodeBlock(secondaryConstructor.bodyExpression, scopeDepth = 1) - generateReturn(codeBuilder.receivePointedArgument(variableManager["this"]!!, requirePointer = 1) as LLVMVariable) - codeBuilder.addAnyReturn(LLVMVoidType()) - codeBuilder.addEndExpression() - } - - private fun generatePrimaryConstructor() { - val classVal = LLVMVariable("classvariable.this", type, pointer = 1) - variableManager.addVariable("this", classVal, level = 0) - - val argFields = mutableListOf(classVal) - argFields.addAll(constructorFields[primaryConstructorIndex]!!) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMFunctionDescriptor(structName + primaryConstructorIndex, argFields, LLVMVoidType())) - - codeBuilder.addStartExpression() - generateLoadArguments(classVal) - generateAssignments() - generateReturn(LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1)) - genClassInitializers() - codeBuilder.addAnyReturn(LLVMVoidType()) - codeBuilder.addEndExpression() - } - - private fun generateLoadArguments(thisField: LLVMVariable) { - val thisVariable = LLVMVariable(thisField.label, thisField.type, thisField.label, LLVMRegisterScope(), pointer = 0) - codeBuilder.loadArgument(thisVariable, false) - - constructorFields[primaryConstructorIndex]!!.filter { it.type !is LLVMReferenceType }.forEach { - val loadVariable = LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope()) - codeBuilder.loadArgument(loadVariable) - } - } - - private fun generateAssignments() { - constructorFields[primaryConstructorIndex]!!.forEach { - when (it.type) { - is LLVMReferenceType -> { - val classField = codeBuilder.getNewVariable(it.type, pointer = it.pointer + 1) - codeBuilder.loadClassField(classField, LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1), (it as LLVMClassVariable).offset) - codeBuilder.storeVariable(classField, it) - } - else -> { - val argument = codeBuilder.loadAndGetVariable(LLVMVariable("${it.label}.addr", it.type, scope = LLVMRegisterScope(), pointer = it.pointer + 1)) - val classField = codeBuilder.getNewVariable(it.type, pointer = 1) - codeBuilder.loadClassField(classField, LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1), (it as LLVMClassVariable).offset) - codeBuilder.storeVariable(classField, argument) - } - } - } - - val blockCodegen = object : BlockCodegen(state, variableManager, codeBuilder) {} - val receiverThis = LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1) - variableManager.addVariable("this", receiverThis, level = 2) - - for ((variable, initializer) in initializedFields) { - val left = blockCodegen.evaluateMemberMethodOrField(receiverThis, variable.label, blockCodegen.topLevelScopeDepth, call = null)!! - val right = blockCodegen.evaluateExpression(initializer, scopeDepth = blockCodegen.topLevelScopeDepth)!! - blockCodegen.addPrimitiveBinaryOperation(KtTokens.EQ, left, right) - } - - variableManager.pullOneUpwardLevelVariable("this") - } - - private fun generateReturn(src: LLVMVariable) { - val dst = LLVMVariable("classvariable.this", type, scope = LLVMRegisterScope(), pointer = 1) - - val castedDst = codeBuilder.bitcast(dst, LLVMCharType(), pointer = 1) - val castedSrc = codeBuilder.bitcast(src, LLVMCharType(), pointer = 1) - - codeBuilder.memcpy(castedDst, castedSrc, size) - } - - protected fun resolveType(field: KtNamedDeclaration, ktType: KotlinType, offset: Int): LLVMClassVariable { - val annotations = parseFieldAnnotations(field) - val fieldName = state.bindingContext.get(BindingContext.VALUE_PARAMETER, field as?KtParameter)?.fqNameSafe?.convertToNativeName() - ?: field.fqName?.asString() - ?: field.name!! - - val result = LLVMInstanceOfStandardType(fieldName, ktType, LLVMRegisterScope(), state = state) - - if (state.classes.containsKey(field.name!!)) { - return LLVMClassVariable(result.label, state.classes[fieldName]!!.type, result.pointer) - } - - if (annotations.contains("Plain")) { - result.pointer = 0 - } - - return LLVMClassVariable(result.label, result.type, result.pointer, offset) - } - - private fun parseFieldAnnotations(field: KtNamedDeclaration): Set = - field.annotationEntries.map { state.bindingContext.get(BindingContext.ANNOTATION, it)?.type.toString() }.toHashSet() - - protected fun genClassInitializers() = - classOrObject.getAnonymousInitializers().map { - object : BlockCodegen(state, variableManager, codeBuilder) { - fun generate() = evaluateCodeBlock(it.body, scopeDepth = topLevelScopeDepth) - } - }.map { it.generate() } - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/debug/debug.kt b/experiments/student-backend/src/org/kotlinnative/translator/debug/debug.kt deleted file mode 100644 index 345a7416faa..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/debug/debug.kt +++ /dev/null @@ -1,59 +0,0 @@ -package org.kotlinnative.translator.debug - -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiWhiteSpace -import com.intellij.psi.impl.source.tree.CompositeElement -import org.jetbrains.kotlin.psi.KtClass -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtNamedFunction - -fun debugPrintNode(node: Any?, indent: Int = 0): Unit { - if (node == null) { - return - } - - for (i in 0..indent) { - print(" ") - } - - println(node.toString()) - - when (node) { - is CompositeElement -> { - debugPrintNode(node.firstChildNode, indent + 2) - debugPrintNode(node.treeNext, indent) - } - is PsiElement -> { - debugPrintNode(node.firstChild, indent + 2) - debugPrintNode(node.nextSibling, indent) - } - is PsiWhiteSpace -> { - debugPrintNode(node.firstChild, indent + 2) - debugPrintNode(node.nextSibling, indent) - } - else -> { - print(" not supported: " + node.javaClass.canonicalName) - } - } - -} - -fun printFunction(function: KtNamedFunction) { - debugPrintNode(function.node) -} - -fun printClass(function: KtClass) { - debugPrintNode(function.node) -} - -fun printFile(file: KtFile) { - - for (declaration in file.declarations) { - - when (declaration) { - is KtNamedFunction -> printFunction(declaration) - is KtClass -> printClass(declaration) - else -> println(declaration.toString()) - } - } -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/exceptions/TranslationException.kt b/experiments/student-backend/src/org/kotlinnative/translator/exceptions/TranslationException.kt deleted file mode 100644 index 4b132fcbbcc..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/exceptions/TranslationException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.kotlinnative.translator.exceptions - -import java.lang.Exception - -class TranslationException(message: String) : Exception(message) diff --git a/experiments/student-backend/src/org/kotlinnative/translator/exceptions/UnimplementedException.kt b/experiments/student-backend/src/org/kotlinnative/translator/exceptions/UnimplementedException.kt deleted file mode 100644 index e4b2b0dd4bc..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/exceptions/UnimplementedException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.kotlinnative.translator.exceptions - -import java.lang.Exception - -class UnimplementedException() : Exception() diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMBuilder.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMBuilder.kt deleted file mode 100644 index 894419bdc56..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMBuilder.kt +++ /dev/null @@ -1,252 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.types.* -import java.rmi.UnexpectedException -import java.util.* - -class LLVMBuilder(arm: Boolean = false) { - - private val localCode: StringBuilder = StringBuilder() - private val globalCode: StringBuilder = StringBuilder() - private var variableCount = 0 - private var labelCount = 0 - private val exceptions = mapOf( - Pair("KotlinNullPointerException", initializeExceptionString("Exception in thread main kotlin.KotlinNullPointerException"))) - - - init { - val declares = arrayOf( - "declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1)", - "declare i8* @malloc_heap(i32)", - "declare i32 @printf(i8*, ...)", - "declare void @abort()", - "%class.Nothing = type { }") - - declares.forEach { addLLVMCodeToGlobalPlace(it) } - - if (arm) { - val functionAttributes = """attributes #0 = { nounwind "stack-protector-buffer-size"="8" "target-cpu"="cortex-m3" "target-features"="+hwdiv,+strict-align" }""" - addLLVMCodeToGlobalPlace(functionAttributes) - } - } - - fun addLLVMCodeToLocalPlace(code: String) = - localCode.appendln(code) - - fun addLLVMCodeToGlobalPlace(code: String) = - globalCode.appendln(code) - - fun addComment(comment: String) = - addLLVMCodeToLocalPlace("; " + comment) - - fun addStartExpression() = - addLLVMCodeToLocalPlace("{") - - fun addEndExpression() = - addLLVMCodeToLocalPlace("unreachable\n}") - - fun addAssignment(lhs: LLVMVariable, rhs: LLVMNode) = - addLLVMCodeToLocalPlace("$lhs = $rhs") - - fun addReturnOperator(llvmVariable: LLVMSingleValue) = - addLLVMCodeToLocalPlace("ret ${llvmVariable.type} $llvmVariable") - - fun addAnyReturn(type: LLVMType, value: String = type.defaultValue, pointer: Int = 0) = - addLLVMCodeToLocalPlace("ret $type${"*".repeat(pointer)} $value") - - fun addStringConstant(variable: LLVMVariable, value: String) = - addLLVMCodeToGlobalPlace("$variable = private unnamed_addr constant ${(variable.type as LLVMStringType).fullArrayType} c\"${value.replace("\"", "\\\"")}\\00\", align 1") - - fun addCondition(condition: LLVMSingleValue, thenLabel: LLVMLabel, elseLabel: LLVMLabel) = - addLLVMCodeToLocalPlace("br ${condition.pointedType} $condition, label $thenLabel, label $elseLabel") - - fun addUnconditionalJump(label: LLVMLabel) = - addLLVMCodeToLocalPlace("br label $label") - - fun addExceptionCall(exceptionName: String) { - val exception = exceptions[exceptionName] - val printResult = getNewVariable(LLVMIntType(), pointer = 0) - addLLVMCodeToLocalPlace("$printResult = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds (${(exception!!.type as LLVMStringType).fullArrayType}* $exception, i32 0, i32 0))") - addFunctionCall(LLVMVariable("abort", LLVMVoidType(), scope = LLVMVariableScope()), emptyList()) - } - - fun addFunctionCall(functionName: LLVMVariable, arguments: List) = - addLLVMCodeToLocalPlace("call ${functionName.type} $functionName(${arguments.joinToString { it -> "${it.type} $it" }})") - - fun allocStackVar(target: LLVMVariable, asValue: Boolean = false, pointer: Boolean = false) { - val type = if (asValue) target.type.toString() else target.pointedType - addLLVMCodeToLocalPlace("$target = alloca ${if (pointer) type.removeSuffix("*") else type}, align ${target.type.align}") - } - - fun allocStaticVar(target: LLVMVariable, asValue: Boolean = false, pointer: Boolean = false) { - val allocated = getNewVariable(LLVMCharType(), pointer = 1) - val size = if ((target.pointer >= 2) || (target.pointer >= 1 && !pointer)) TranslationState.POINTER_SIZE else target.type.size - - addLLVMCodeToLocalPlace("$allocated = call i8* @malloc_heap(i32 $size)") - addLLVMCodeToLocalPlace("$target = bitcast ${allocated.pointedType} $allocated to ${if (asValue) target.type.toString() else target.pointedType}" + if (pointer) "" else "*") - } - - fun addGlobalInitialize(target: LLVMVariable, fields: ArrayList, initializers: Map, classType: LLVMType) { - val code = "$target = internal global $classType { ${ - fields.map { it.pointedType + " " + if (initializers.containsKey(it)) initializers[it] else "0" }.joinToString() - } }, align ${classType.align}" - addLLVMCodeToGlobalPlace(code) - } - - fun bitcast(src: LLVMVariable, llvmType: LLVMType, pointer: Int): LLVMVariable { - val empty = getNewVariable(llvmType, pointer = pointer) - addLLVMCodeToLocalPlace("$empty = bitcast ${src.pointedType} $src to ${llvmType.toString() + "*".repeat(pointer)}") - return empty - } - - fun convertVariableToType(variable: LLVMSingleValue, targetType: LLVMType): LLVMSingleValue { - var resultVariable = variable - if (variable.type != targetType) { - val convertedExpression = targetType.convertFrom(variable) - resultVariable = saveExpression(convertedExpression) - } - return resultVariable - } - - fun copyVariable(from: LLVMVariable, to: LLVMVariable) = - when { - from.type is LLVMStringType && !from.type.isLoaded -> storeString(to, from, 0) - else -> copyVariableValue(to, from) - } - - fun createClass(name: String, fields: List) = - addLLVMCodeToGlobalPlace("%class.$name = type { ${fields.map { it.pointedType }.joinToString()} }") - - fun declareEntryPoint(name: String) { - addLLVMCodeToLocalPlace("define weak void @main()") - addStartExpression() - addFunctionCall(LLVMVariable(name, LLVMVoidType(), scope = LLVMVariableScope()), listOf()) - addAnyReturn(LLVMVoidType()) - addEndExpression() - } - - fun defineGlobalVariable(variable: LLVMVariable, defaultValue: String = variable.type.defaultValue) = - addLLVMCodeToLocalPlace("$variable = global ${variable.pointedType} $defaultValue, align ${variable.type.align}") - - fun getNewVariable(type: LLVMType, pointer: Int = 0, kotlinName: String? = null, scope: LLVMScope = LLVMRegisterScope(), prefix: String = "var"): LLVMVariable { - variableCount++ - return LLVMVariable("$prefix$variableCount", type, kotlinName, scope, pointer) - } - - fun getNewLabel(scope: LLVMScope = LLVMRegisterScope(), prefix: String): LLVMLabel { - labelCount++ - return LLVMLabel("label.$prefix.$labelCount", scope) - } - - fun loadArgsIfRequired(names: List, args: List) = - names.mapIndexed(fun(i: Int, value: LLVMSingleValue): LLVMSingleValue { - return receivePointedArgument(value, args[i].pointer) - }).toList() - - fun loadArgument(llvmVariable: LLVMVariable, store: Boolean = true): LLVMVariable { - val allocVar = LLVMVariable("${llvmVariable.label}.addr", llvmVariable.type, llvmVariable.kotlinName, LLVMRegisterScope(), pointer = llvmVariable.pointer + 1) - allocStackVar(allocVar, asValue = false, pointer = true) - if (store) { - storeVariable(allocVar, llvmVariable) - } - return allocVar - } - - fun loadClassField(target: LLVMVariable, source: LLVMVariable, offset: Int) = - addLLVMCodeToLocalPlace("$target = getelementptr inbounds ${source.pointedType} $source, i32 0, i32 $offset") - - fun loadVariableOffset(target: LLVMVariable, source: LLVMVariable, index: LLVMConstant) = - addLLVMCodeToLocalPlace("$target = getelementptr inbounds ${source.type} $source, ${index.type} ${index.value}") - - fun loadAndGetVariable(source: LLVMVariable): LLVMVariable { - assert(source.pointer > 0) - val target = getNewVariable(source.type, source.pointer - 1, source.kotlinName) - addLLVMCodeToLocalPlace("$target = load ${source.pointedType} $source, align ${target.type.align}") - return target - } - - fun makeStructInitializer(args: List, values: List) - = "{ ${args.mapIndexed { i: Int, variable: LLVMVariable -> "${variable.type} ${values[i]}" }.joinToString()} }" - - fun markWithLabel(label: LLVMLabel?) { - if (label != null) - addLLVMCodeToLocalPlace("${label.label}:") - } - - fun memcpy(castedDst: LLVMVariable, castedSrc: LLVMVariable, size: Int, align: Int = 4, volatile: Boolean = false) = - addLLVMCodeToLocalPlace("call void @llvm.memcpy.p0i8.p0i8.i64(i8* $castedDst, i8* $castedSrc, i64 $size, i32 $align, i1 $volatile)") - - fun nullCheck(variable: LLVMVariable): LLVMVariable { - val result = getNewVariable(LLVMBooleanType(), pointer = 0) - val loaded = loadAndGetVariable(variable) - addLLVMCodeToLocalPlace("$result = icmp eq ${loaded.pointedType} null, $loaded") - return result - } - - fun receiveNativeValue(firstOp: LLVMSingleValue): LLVMSingleValue = - when { - firstOp is LLVMConstant || firstOp.pointer == 0 -> firstOp - firstOp is LLVMVariable -> loadAndGetVariable(firstOp) - else -> throw UnexpectedException("Unknown inheritor of LLVMSingleValue") - } - - fun receivePointedArgument(value: LLVMSingleValue, requirePointer: Int): LLVMSingleValue { - var result = value - - while (result.pointer > requirePointer) { - result = receiveNativeValue(result) - } - - if ((value.type is LLVMStringType) && !(value.type.isLoaded)) { - val newVariable = getNewVariable(value.type, pointer = result.pointer + 1) - allocStackVar(newVariable, asValue = true) - copyVariable(result as LLVMVariable, newVariable) - result = loadAndGetVariable(newVariable) - } - - return result - } - - fun storeString(target: LLVMVariable, source: LLVMVariable, offset: Int) { - val code = "store ${target.type} getelementptr inbounds (" + - "${(source.type as LLVMStringType).fullArrayType}* $source, i32 0, i32 $offset), ${target.pointedType} $target, align ${source.type.align}" - (target.type as LLVMStringType).isLoaded = true - addLLVMCodeToLocalPlace(code) - } - - fun storeVariable(target: LLVMSingleValue, source: LLVMSingleValue) { - if ((source.type is LLVMStringType) && !(source.type.isLoaded)) { - storeString(target as LLVMVariable, source as LLVMVariable, 0) - } else { - addLLVMCodeToLocalPlace("store ${source.pointedType} $source, ${target.pointedType} $target, align ${source.type.align}") - } - } - - fun saveExpression(expression: LLVMSingleValue): LLVMVariable { - val resultOp = getNewVariable(expression.type, pointer = expression.pointer) - addAssignment(resultOp, expression) - return resultOp - } - - fun storeNull(result: LLVMVariable) = - addLLVMCodeToLocalPlace("store ${result.pointedType.dropLast(1)} null, ${result.pointedType} $result, align ${TranslationState.POINTER_ALIGN}") - - override fun toString() = globalCode.toString() + localCode.toString() - - private fun copyVariableValue(target: LLVMVariable, source: LLVMVariable) { - var from = source - if (source.pointer > 0) { - from = getNewVariable(source.type, source.pointer) - addLLVMCodeToLocalPlace("$from = load ${source.pointedType} $source, align ${from.type.align}") - } - addLLVMCodeToLocalPlace("store ${target.type} $from, ${target.pointedType} $target, align ${from.type.align}") - } - - private fun initializeExceptionString(string: String): LLVMVariable { - val result = getNewVariable(LLVMStringType(string.length), pointer = 0, scope = LLVMVariableScope(), prefix = "exceptions.str.") - addStringConstant(result, string) - return result - } - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMCall.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMCall.kt deleted file mode 100644 index b704798aa0d..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMCall.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -class LLVMCall(val returnType: LLVMType, - val name: String, - val arguments: Collection) : LLVMSingleValue(returnType) { - - override fun toString() = "call $returnType $name(${arguments.joinToString { "${it.pointedType} ${it.toString()}" }})" - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMClassVariable.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMClassVariable.kt deleted file mode 100644 index 780fb40d759..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMClassVariable.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -class LLVMClassVariable(label: String, - type: LLVMType, - pointer: Int = 0, - var offset: Int = 0) : LLVMVariable(label, type, pointer = pointer) \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMConstant.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMConstant.kt deleted file mode 100644 index 17a4bd69af2..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMConstant.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -open class LLVMConstant(value: String, - type: LLVMType, - pointer: Int = 0) : LLVMSingleValue(type, pointer) { - - val value = type.parseArg(value) - - override fun toString() = value - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMExpression.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMExpression.kt deleted file mode 100644 index bd67bac1daa..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -class LLVMExpression(type: LLVMType, val llvmCode: String, pointer: Int = 0) : LLVMSingleValue(type, pointer) { - - override fun toString() = llvmCode - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMLabel.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMLabel.kt deleted file mode 100644 index ea6e23d2a07..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMLabel.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.kotlinnative.translator.llvm - -class LLVMLabel(val label: String, val scope: LLVMScope) : LLVMNode() { - - override fun toString() = "$scope$label" - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMNode.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMNode.kt deleted file mode 100644 index 402b191f78e..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMNode.kt +++ /dev/null @@ -1,3 +0,0 @@ -package org.kotlinnative.translator.llvm - -abstract class LLVMNode \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMScope.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMScope.kt deleted file mode 100644 index 6932d837bc9..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMScope.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.kotlinnative.translator.llvm - -abstract class LLVMScope - -class LLVMVariableScope : LLVMScope() { - override fun toString() = "@" -} - -class LLVMRegisterScope : LLVMScope() { - override fun toString() = "%" -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMSingleValue.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMSingleValue.kt deleted file mode 100644 index 5a8ccc6ff71..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMSingleValue.kt +++ /dev/null @@ -1,10 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -open class LLVMSingleValue(val type: LLVMType, var pointer: Int = 0) : LLVMNode() { - - open val pointedType: String - get() = type.toString() + "*".repeat(pointer) - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMVariable.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMVariable.kt deleted file mode 100644 index 342a12977db..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/LLVMVariable.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -open class LLVMVariable(val label: String, - type: LLVMType, - var kotlinName: String? = null, - val scope: LLVMScope = LLVMRegisterScope(), - pointer: Int = 0) : LLVMSingleValue(type, pointer) { - - override fun toString() = "$scope$label" - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/generators.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/generators.kt deleted file mode 100644 index 9fb9f398a39..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/generators.kt +++ /dev/null @@ -1,63 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.jetbrains.kotlin.builtins.isFunctionTypeOrSubtype -import org.jetbrains.kotlin.name.FqName -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.typeUtil.isUnit -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.types.* - - -fun LLVMFunctionDescriptor(name: String, - argTypes: List?, - returnType: LLVMType, - declare: Boolean = false) = - "${if (declare) "declare" else "define weak"} $returnType @$name(${ - argTypes?.mapIndexed { i: Int, s: LLVMVariable -> - "${s.pointedType} ${if (s.type is LLVMReferenceType && !s.type.byRef) "byval" else ""} %${s.label}" - }?.joinToString()}) #0" - -fun LLVMInstanceOfStandardType(name: String, - type: KotlinType, - scope: LLVMScope = LLVMRegisterScope(), - state: TranslationState): LLVMVariable { - val typeName = type.toString().dropLastWhile { it == '?' } - val pointerMark = if (type.isMarkedNullable) 1 else 0 - return when { - type.isFunctionTypeOrSubtype -> LLVMVariable(name, LLVMFunctionType(type, state), name, scope, pointer = 1) - typeName == "Boolean" -> LLVMVariable(name, LLVMBooleanType(), name, scope, pointerMark) - typeName == "Byte" -> LLVMVariable(name, LLVMByteType(), name, scope, pointerMark) - typeName == "Char" -> LLVMVariable(name, LLVMCharType(), name, scope, pointerMark) - typeName == "Short" -> LLVMVariable(name, LLVMShortType(), name, scope, pointerMark) - typeName == "Int" -> LLVMVariable(name, LLVMIntType(), name, scope, pointerMark) - typeName == "Long" -> LLVMVariable(name, LLVMLongType(), name, scope, pointerMark) - typeName == "Float" -> LLVMVariable(name, LLVMFloatType(), name, scope, pointerMark) - typeName == "Double" -> LLVMVariable(name, LLVMDoubleType(), name, scope, pointerMark) - typeName == "String" -> LLVMVariable(name, LLVMStringType(0), name, scope, pointerMark) - type.nameIfStandardType.toString() == "Nothing" -> LLVMVariable(name, LLVMNullType(), name, scope) - type.isUnit() -> LLVMVariable("", LLVMVoidType(), name, scope) - type.isMarkedNullable -> LLVMVariable(name, LLVMReferenceType(typeName, prefix = "class"), name, scope, pointer = pointerMark) - else -> { - val declarationDescriptor = type.constructor.declarationDescriptor!! - val refName = declarationDescriptor.fqNameSafe.asString() - val refType = state.classes[type.toString()]?.type ?: LLVMReferenceType(refName, align = TranslationState.POINTER_ALIGN, prefix = "class") - - LLVMVariable(name, refType, name, scope, pointer = 1) - } - } -} - -fun LLVMMapStandardType(type: KotlinType, - state: TranslationState) = - LLVMInstanceOfStandardType("type", type, LLVMRegisterScope(), state).type - -fun String.addBeforeIfNotEmpty(add: String): String = - if (this.length > 0) add + this else this - -fun String.addAfterIfNotEmpty(add: String): String = - if (this.length > 0) this + add else this - -fun FqName.convertToNativeName(): String = - this.asString().replace(".", "") \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMArray.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMArray.kt deleted file mode 100644 index 7176186a117..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMArray.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -interface LLVMArray { - - val arrayElementType: LLVMType - val fullArrayType: String - val length: Int - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt deleted file mode 100644 index 856a030be72..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt +++ /dev/null @@ -1,69 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue -import java.lang.IllegalArgumentException - - -class LLVMBooleanType() : LLVMType() { - - override val align = 4 - override var size: Int = 1 - override val defaultValue = "0" - override val mangle = "Boolean" - override val isPrimitive = true - override val typename = "i1" - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "sub nsw i1 $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "mul nsw i1 $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "add nsw i1 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "sdiv i1 $firstOp, $secondOp") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i1 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i1 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i1 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i1 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i1" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i1" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "or i1 $firstOp, $secondOp") - - override fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "and i1 $firstOp, $secondOp") - - override fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "xor i1 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMBooleanType - - override fun parseArg(inputArg: String) = - when (inputArg.toLowerCase()) { - "true" -> "1" - "false" -> "0" - else -> throw IllegalArgumentException("Failed to parse boolean type") - } - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMByteType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMByteType.kt deleted file mode 100644 index 372b3c1cfe7..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMByteType.kt +++ /dev/null @@ -1,42 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -class LLVMByteType() : LLVMType() { - - override val align = 1 - override var size: Int = 1 - override val mangle = "Byte" - override val typename = "i8" - override val defaultValue = "0" - override val isPrimitive = true - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i8 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i8 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i8 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i8 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMByteType(), "srem i8 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMByteType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMCharType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMCharType.kt deleted file mode 100644 index 75dbd3bc2c5..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMCharType.kt +++ /dev/null @@ -1,41 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -class LLVMCharType() : LLVMType() { - - override val align = 1 - override var size: Int = 1 - override val mangle = "Char" - override val typename = "i8" - override val defaultValue = "0" - override val isPrimitive = true - - override fun parseArg(inputArg: String) = inputArg.first().toInt().toString() - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i8 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i8 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i8 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i8 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMCharType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt deleted file mode 100644 index f2530e92d11..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt +++ /dev/null @@ -1,61 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMDoubleType() : LLVMType() { - - override val align = 8 - override var size: Int = 8 - override val mangle = "Double" - override val typename = "double" - override val defaultValue = "0.0" - override val isPrimitive = true - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fsub double $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fmul double $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fadd double $firstOp, $secondOp") - - override fun operatorInc(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fadd double $firstOp, 1.0") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fdiv double $firstOp, $secondOp") - - override fun operatorDec(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fsub double $firstOp, 1.0") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp olt double $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ogt double $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ole double i32 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oge double i32 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oeq double $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp one double $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "frem double $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMDoubleType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt deleted file mode 100644 index b98b18d0b59..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt +++ /dev/null @@ -1,61 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMFloatType() : LLVMType() { - - override val align = 4 - override var size: Int = 4 - override val mangle = "Float" - override val typename = "float" - override val defaultValue = "0.0" - override val isPrimitive = true - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fsub float $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fmul float $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fadd float $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fdiv float $firstOp, $secondOp") - - override fun operatorInc(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fadd float $firstOp, 1.0") - - override fun operatorDec(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fsub float $firstOp, 1.0") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp olt float $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ogt float $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ole float i32 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oge float i32 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oeq float" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp one float" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "frem float $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMFloatType - - override fun hashCode() = - typename.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt deleted file mode 100644 index 06304e8c0e1..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt +++ /dev/null @@ -1,37 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.jetbrains.kotlin.types.KotlinType -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.LLVMInstanceOfStandardType -import org.kotlinnative.translator.llvm.LLVMVariable - -class LLVMFunctionType(type: KotlinType, state: TranslationState) : LLVMType() { - - override val defaultValue = "" - override val align: Int = 4 - override var size: Int = 4 - override val mangle: String - override val typename = "FunctionType" - - val arguments: List - val returnType: LLVMVariable - - init { - val types = type.arguments.map { LLVMInstanceOfStandardType("", it.type, state = state) }.toList() - returnType = types.last() - arguments = types.dropLast(1) - mangle = "F.${LLVMType.mangleFunctionArguments(arguments)}.EF" - } - - fun mangleArgs() = LLVMType.mangleFunctionArguments(arguments) - - override fun toString() = - "${returnType.type} (${arguments.map { it.pointedType }.joinToString()})" - - override fun equals(other: Any?) = - (other is LLVMFunctionType) && (mangle == other.mangle) - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMIntType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMIntType.kt deleted file mode 100644 index efd61f3a4ed..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMIntType.kt +++ /dev/null @@ -1,89 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMIntType() : LLVMType() { - - override val align = 4 - override var size: Int = 4 - override val defaultValue = "0" - override val mangle = "Int" - override val typename = "i32" - override val isPrimitive = true - - override fun convertFrom(source: LLVMSingleValue) = - when (source.type) { - is LLVMBooleanType, - is LLVMByteType, - is LLVMCharType, - is LLVMShortType -> LLVMExpression(LLVMIntType(), " sext ${source.type} $source to i32") - else -> throw UnimplementedException() - } - - override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "or i32 $firstOp, $secondOp") - - override fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "and i32 $firstOp, $secondOp") - - override fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "xor i32 $firstOp, $secondOp") - - override fun operatorShl(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "shl i32 $firstOp, $secondOp") - - override fun operatorShr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "ashr i32 $firstOp, $secondOp") - - override fun operatorUshr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "lshr i32 $firstOp, $secondOp") - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "sub nsw i32 $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "mul nsw i32 $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "add nsw i32 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "sdiv i32 $firstOp, $secondOp") - - override fun operatorInc(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "add nsw i32 $firstOp, 1") - - override fun operatorDec(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "sub nsw i32 $firstOp, 1") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i32 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i32 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i32 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i32 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i32" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i32" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "srem i32 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMIntType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMLongType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMLongType.kt deleted file mode 100644 index eafcde9c8ef..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMLongType.kt +++ /dev/null @@ -1,84 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMLongType() : LLVMType() { - - override val align = 8 - override var size = 8 - override val defaultValue = "0" - override val typename = "i64" - override val mangle = "Long" - override val isPrimitive = true - - override fun convertFrom(source: LLVMSingleValue) = - when (source.type) { - is LLVMBooleanType, - is LLVMByteType, - is LLVMCharType, - is LLVMShortType, - is LLVMIntType -> LLVMExpression(LLVMLongType(), " sext ${source.type} $source to i64") - else -> throw UnimplementedException() - } - - override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "or i64 $firstOp, $secondOp") - - override fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "and i64 $firstOp, $secondOp") - - override fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "xor i64 $firstOp, $secondOp") - - override fun operatorShl(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "shl i64 $firstOp, $secondOp") - - override fun operatorShr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "ashr i64 $firstOp, $secondOp") - - override fun operatorUshr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "lshr i64 $firstOp, $secondOp") - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "sub nsw i64 $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "mul nsw i64 $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "add nsw i64 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "sdiv i64 $firstOp, $secondOp") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i64 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i64 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i64 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i64 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i64" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i64" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "srem i64 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMLongType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMNullType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMNullType.kt deleted file mode 100644 index c5d3c935c2b..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMNullType.kt +++ /dev/null @@ -1,20 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -class LLVMNullType(var baseType: LLVMType? = null) : LLVMType() { - - override val align = 1 - override var size = 0 - override val defaultValue = "null" - override val mangle = "" - override val typename = baseType?.typename.orEmpty() - - override fun parseArg(inputArg: String) = "null" - override fun toString() = baseType?.toString().orEmpty() - - override fun equals(other: Any?) = - other is LLVMNullType - - override fun hashCode() = - "null".hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt deleted file mode 100644 index 86182e1ef4c..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt +++ /dev/null @@ -1,32 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue -import org.kotlinnative.translator.llvm.addAfterIfNotEmpty - - -class LLVMReferenceType(val type: String, - var prefix: String = "", - override var align: Int = TranslationState.POINTER_ALIGN, - override var size: Int = TranslationState.POINTER_SIZE, - var byRef: Boolean = true) : LLVMType() { - - override val defaultValue: String = "null" - override val mangle = "Ref_$type" - override val typename = prefix.addAfterIfNotEmpty(".") + type - - override fun toString() = "%$typename" - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq ${firstOp.pointedType} $firstOp, ${if (secondOp.type is LLVMNullType) "null" else "$secondOp"}") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne ${firstOp.pointedType} $firstOp, ${if (secondOp.type is LLVMNullType) "null" else "$secondOp"}") - - override fun equals(other: Any?) = - (other is LLVMReferenceType) and (typename.equals((other as LLVMReferenceType).typename)) - - override fun hashCode() = - typename.hashCode() -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMShortType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMShortType.kt deleted file mode 100644 index bb4b07167cf..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMShortType.kt +++ /dev/null @@ -1,45 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -class LLVMShortType() : LLVMType() { - - override val align = 2 - override var size: Int = 2 - override val defaultValue = "0" - override val typename = "i16" - override val mangle = "Short" - override val isPrimitive = true - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i16 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i16 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i16 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i16 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i16" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i16" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMShortType(), "srem i16 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMShortType(), "sdiv i16 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMShortType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMStringType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMStringType.kt deleted file mode 100644 index 463429c9249..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMStringType.kt +++ /dev/null @@ -1,23 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -class LLVMStringType(override val length: Int, var isLoaded: Boolean = true) : LLVMArray, LLVMType() { - - override val align = 8 - override var size: Int = 1 - override val defaultValue = "" - override val typename = "i8*" - override val mangle = "String" - override val arrayElementType = LLVMCharType() - override val fullArrayType = "[${length + 1} x i8]" - - override fun equals(other: Any?) = - when (other) { - is LLVMStringType -> this.length == other.length - else -> false - } - - override fun hashCode() = - length * 31 + if (isLoaded) 1 else 0 + - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMType.kt deleted file mode 100644 index 09bb453ae22..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMType.kt +++ /dev/null @@ -1,55 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -abstract class LLVMType() { - - companion object { - fun mangleFunctionArguments(names: List) = - mangleFunctionTypes(names.map { it.type }) - - fun mangleFunctionTypes(names: List) = - if (names.size > 0) "_${names.joinToString(separator = "_", transform = { it.mangle })}" else "" - - fun nullOrVoidType(type: LLVMType): Boolean = - (type is LLVMNullType) or (type is LLVMVoidType) - - fun isReferredType(type: LLVMType?): Boolean = - (type is LLVMNullType) or (type is LLVMReferenceType) - - } - - abstract val align: Int - abstract val typename: String - abstract var size: Int - abstract val defaultValue: String - abstract val mangle: String - open val isPrimitive: Boolean = false - - open fun parseArg(inputArg: String) = inputArg - open fun convertFrom(source: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - override fun toString() = typename - - open fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorShl(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorShr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorUshr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorInc(firstOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorDec(firstOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - -} \ No newline at end of file diff --git a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt b/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt deleted file mode 100644 index 74d7359ad53..00000000000 --- a/experiments/student-backend/src/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -class LLVMVoidType() : LLVMType() { - - override val align = 0 - override var size = 0 - override val defaultValue = "" - override val typename = "void" - override val mangle = "" - - override fun equals(other: Any?) = - other is LLVMVoidType - - override fun hashCode() = - typename.hashCode() - -} \ No newline at end of file diff --git a/experiments/student-backend/student-backend.iml b/experiments/student-backend/student-backend.iml deleted file mode 100644 index 7d6998e0b90..00000000000 --- a/experiments/student-backend/student-backend.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator-bc/LICENSE b/experiments/translator-bc/LICENSE deleted file mode 100644 index 75651683ad4..00000000000 --- a/experiments/translator-bc/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Nikolay Igotti - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/experiments/translator-bc/Makefile b/experiments/translator-bc/Makefile deleted file mode 100644 index a99b77bc367..00000000000 --- a/experiments/translator-bc/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -DIRECTORY = "src/test/kotlin/tests" -OUTPUT = $(shell ls ${DIRECTORY}/*/*.txt) -OBJECTS = $(OUTPUT:.txt=.out) -green = '\033[0;32m' -red = '\033[0;31m' -lightRed = '\033[1;31m' -orange = '\033[0;33m' -nc = '\033[0m' -KOTSTD='../kotstd' -SOURCELIB=build/sources - -# -# ! Disabled stdlib/test compilation (because we've imported only translator) -# - -#stdlib: -# cd $(KOTSTD) && make clean && make -# -#%.out: stdlib %.txt -# @./run_one_test.sh $(@:.out=.txt) -# -#tests: stdlib $(OBJECTS) -# @date - - -build: - ./gradlew jar - -all: build #tests; - -clean: - ./gradlew clean - -#compile: build -# mkdir -p $(SOURCELIB) -# rm -f $(SOURCELIB)/linked.ll -# rm -f $(SOURCELIB)/linked.ll -# java -jar build/libs/translator-1.0.jar -I $(KOTSTD)/kt $(files) -o $(SOURCELIB)/build.ll -# llvm-link-3.6 -S $(KOTSTD)/build/stdlib_x86.ll $(SOURCELIB)/build.ll >> $(SOURCELIB)/linked.ll -# clang-3.6 $(SOURCELIB)/linked.ll -o $(output) -# rm $(SOURCELIB)/linked.ll -# rm $(SOURCELIB)/build.ll - -.DEFAULT_GOAL := all -.FORCE: build, all -.PHONY: tests, stdlib, build, all, compile diff --git a/experiments/translator-bc/README.md b/experiments/translator-bc/README.md deleted file mode 100644 index 5778ef83e0e..00000000000 --- a/experiments/translator-bc/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# Translator from Kotlin to LLVM - -## Fast build -If you want to use the translator without going into any technical details, this section is for you. Using following commands you will be able to compile your Kotlin files, the resulting executable file - - $ make compile files=$(KTFILES) output=$(OUTPUT) - -where - - $(KTFILES) - list of your Kotlin files separated by spaces - - $(OUTPUT) - the resulting file - - **NOTE:** when you use a fast build, the name of your your entry point function must be **main** and it should not receive arguments - -## Building - -For build translator into jar, you must run gradle target - - $ ./gradlew jar - -**NOTE:** make sure you have jdk version 1.8 or higher - - -Assembled the translator can be found in the following folder - - $ cd build/libs/translator - -## Using compiler - $ java -jar $(PATH_TO_TRANSLATOR_JAR) -I $(PATH_TO_KOTLIB) $(KOTLIN_SOURCES) - where - - $(PATH_TO_TRANSLATOR_JAR) - path to jar, which you got in building step, by default it `build/libs/translator-1.0.jar` - - $(PATH_TO_KOTLIB) - path to standard kotlin lib, by default it `./kotstd/include` - - $(KOTLIN_SOURCES) - the different files that you want to compile - -### Optional arguments - - -M - specified entry point of your project, by default it is main - - **NOTE:** your entry point function should not receive arguments - - - -o - file to redirect output of the generated code - - -## Using generated code - -To execute the generated code you should use should link your code with kotlin native runtime. By default, you can find the appropriate library at -`../kotstd/build/stdlib_x86.ll` - -If this file is missing you can assemble it yourself - - $ cd ../kotstd && make clean && make - -For linking, run the following command - - $ llvm-link-3.6 -S $(KOTLIN_NATIVE_RUNTIME) $(COMPILED_LLVM_CODE) - -where $(COMPILED_LLVM_CODE) - code obtained in the step compiler - -**NOTE:** The translator supports the llvm version number 3.6. Please make sure you have the correct version of llvm. - -## Run - - $ lli-3.6 $(LINKED_CODE) - -where $(LINKED_CODE) - code obtained in the previous step - diff --git a/experiments/translator-bc/build.gradle b/experiments/translator-bc/build.gradle deleted file mode 100644 index 60c23f8cbca..00000000000 --- a/experiments/translator-bc/build.gradle +++ /dev/null @@ -1,49 +0,0 @@ -group 'translator-bc' -version '1.0' - -buildscript { - ext.kotlin_version = '1.0.3' - - repositories { - mavenCentral() - } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -apply plugin: 'java' -apply plugin: 'kotlin' -apply plugin: 'application' -apply plugin: org.jetbrains.kotlin.NativeInteropPlugin - -repositories { - mavenCentral() - maven { url "https://jitpack.io" } -} - -dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.1" - compile group: 'org.jetbrains.kotlin', name: 'kotlin-compiler', version: '1.0.3' - compile 'com.github.jshmrsn:karg:a636b3e' - testCompile group: 'junit', name: 'junit', version: '4.11' - compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.3" - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" -} - -jar { - manifest { - attributes 'Main-Class': 'MainKt' - } - - from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } -} -sourceSets { - main.java.srcDirs += 'src/main/kotlin' -} - -genInteropStubs { - environment 'CPATH' : "$llvmInstallPath/include" - environment 'LIBRARY_PATH' : "$llvmInstallPath/lib" -} - diff --git a/experiments/translator-bc/gradle/wrapper/gradle-wrapper.jar b/experiments/translator-bc/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 941144813d2..00000000000 Binary files a/experiments/translator-bc/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/experiments/translator-bc/gradle/wrapper/gradle-wrapper.properties b/experiments/translator-bc/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 87174db222c..00000000000 --- a/experiments/translator-bc/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Thu Jul 07 16:27:28 MSK 2016 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-all.zip diff --git a/experiments/translator-bc/gradlew b/experiments/translator-bc/gradlew deleted file mode 100755 index 2f205f5ba69..00000000000 --- a/experiments/translator-bc/gradlew +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:function=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/experiments/translator-bc/gradlew.bat b/experiments/translator-bc/gradlew.bat deleted file mode 100644 index aec99730b4e..00000000000 --- a/experiments/translator-bc/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/experiments/translator-bc/kotstd/Makefile b/experiments/translator-bc/kotstd/Makefile deleted file mode 100644 index fdd6cf55107..00000000000 --- a/experiments/translator-bc/kotstd/Makefile +++ /dev/null @@ -1,49 +0,0 @@ - -BUILD_DIR=$(PWD)/build -INCLUDE_DIR=$(PWD)/include -LIB_ARM_DIR=$(PWD)/lib/arm -LIB_X86_DIR=$(PWD)/lib/x86 -LIBC=$(PWD)/libc - -KT=$(PWD)/../translator/build/libs/translator-1.0.jar -LLINK=llvm-link-3.6 -CC=clang-3.6 - -CCFLAGS_ARM=-g -S -Wall -m32 -emit-llvm -nostdlib -ffreestanding -march=armv7-m -mthumb -flto -O0 -target arm-none-eabi -DARM -CCFLAGS=-g -O0 -S -Wall -emit-llvm -nostdlib -ffreestanding -CCFLAGS_DEBUG=-g -O0 -S -Wall -emit-llvm -nostdlib -ffreestanding -DDBG -LLINK_FLAGS=-S - -KT_ALL_DEPS=java -jar $(KT) -LLINK_ALL_DEPS=$(LLINK) $(LLINK_FLAGS) $(filter %.ll,$^) > $@ - -all: memory $(BUILD_DIR) $(BUILD_DIR)/stdlib_arm.ll $(BUILD_DIR)/stdlib_x86.ll -debug: memory_debug $(BUILD_DIR) $(BUILD_DIR)/stdlib_arm.ll $(BUILD_DIR)/stdlib_x86.ll - -$(BUILD_DIR): - mkdir -p $(BUILD_DIR) - -$(BUILD_DIR)/stdlib_x86.ll: $(LIB_X86_DIR)/*.ll - $(LLINK_ALL_DEPS) - -$(BUILD_DIR)/stdlib_arm.ll: $(LIB_ARM_DIR)/*.ll - $(LLINK_ALL_DEPS) - -$(BUILD_DIR)/classes_x86.ll: $(INCLUDE_DIR)/*.kt - $(KT_ALL_DEPS) -o $@ $(filter %.kt,$^) - -$(BUILD_DIR)/classes_arm.ll: $(INCLUDE_DIR)/*.kt - $(KT_ALL_DEPS) --arm -o $@ $(filter %.kt,$^) - -memory: - $(CC) $(CCFLAGS) $(LIBC)/memory.c -o $(LIB_X86_DIR)/memory.ll - $(CC) $(CCFLAGS_ARM) $(LIBC)/memory.c -o $(LIB_ARM_DIR)/memory.ll - -memory_debug: - $(CC) $(CCFLAGS_DEBUG) $(LIBC)/memory.c -o $(LIB_X86_DIR)/memory.ll - -clean: - rm -rf $(BUILD_DIR) - -.PHONY: all clean - diff --git a/experiments/translator-bc/kotstd/include/Assert.kt b/experiments/translator-bc/kotstd/include/Assert.kt deleted file mode 100644 index fc253e0f13e..00000000000 --- a/experiments/translator-bc/kotstd/include/Assert.kt +++ /dev/null @@ -1,8 +0,0 @@ -package kotlin - -external fun assert_c(value: Boolean) - -fun assert(value: Boolean) { - println(value) - assert_c(value) -} \ No newline at end of file diff --git a/experiments/translator-bc/kotstd/include/BooleanArray.kt b/experiments/translator-bc/kotstd/include/BooleanArray.kt deleted file mode 100644 index 7df7eb81e46..00000000000 --- a/experiments/translator-bc/kotstd/include/BooleanArray.kt +++ /dev/null @@ -1,121 +0,0 @@ -package kotlin - -external fun kotlinclib_boolean_size(): Int - -class BooleanArray(var size: Int) { - val data: Int - - /** Returns the number of elements in the array. */ - //size: Int - - init { - this.data = malloc_array(kotlinclib_boolean_size() * this.size) - var index = 0 - while (index < this.size) { - set(index, false) - index = index + 1 - } - } - - /** Returns the array element at the given [index]. This method can be called using the index operator. */ - operator fun get(index: Int): Boolean { - val res = kotlinclib_get_byte(this.data, index) == 1.toByte() - return res - } - - - /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ - operator fun set(index: Int, value: Boolean) { - if (value == true) { - kotlinclib_set_byte(this.data, index, 1.toByte()) - } else { - kotlinclib_set_byte(this.data, index, 0.toByte()) - } - } - - - fun clone(): BooleanArray { - val newInstance = BooleanArray(this.size) - var index = 0 - while (index < this.size) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance - } -} - -fun BooleanArray.print() { - var index = 0 - print('[') - while (index < size) { - print(get(index)) - index++ - if (index < size){ - print(';') - print(' ') - } - } - print(']') -} - -fun BooleanArray.println() { - this.print() - //println() -} - - -fun BooleanArray.copyOf(newSize: Int): BooleanArray { - val newInstance = BooleanArray(newSize) - var index = 0 - val end = if (newSize > this.size) this.size else newSize - while (index < end) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - while (index < newSize) { - newInstance.set(index, false) - index = index + 1 - } - - return newInstance -} - -fun BooleanArray.copyOfRange(fromIndex: Int, toIndex: Int): BooleanArray { - val newInstance = BooleanArray(toIndex - fromIndex) - var index = fromIndex - while (index < toIndex) { - val value = this.get(index) - newInstance.set(index - fromIndex, value) - index = index + 1 - } - - return newInstance -} - -operator fun BooleanArray.plus(element: Boolean): BooleanArray { - val index = size - val result = this.copyOf(index + 1) - result[index] = element - return result -} - -operator fun BooleanArray.plus(elements: BooleanArray): BooleanArray { - val thisSize = size - val arraySize = elements.size - val resultSize = thisSize + arraySize - val newInstance = this.copyOf(resultSize) - var index = thisSize - - while (index < resultSize) { - val value = elements.get(index - thisSize) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance -} \ No newline at end of file diff --git a/experiments/translator-bc/kotstd/include/ByteArray.kt b/experiments/translator-bc/kotstd/include/ByteArray.kt deleted file mode 100644 index 8952a07eb1f..00000000000 --- a/experiments/translator-bc/kotstd/include/ByteArray.kt +++ /dev/null @@ -1,121 +0,0 @@ -package kotlin - -external fun malloc_array(size: Int): Int -external fun kotlinclib_get_byte(src: Int, index: Int): Byte -external fun kotlinclib_set_byte(src: Int, index: Int, value: Byte) -external fun kotlinclib_byte_size(): Int - - -class ByteArray(var size: Int) { - val data: Int - - /** Returns the number of elements in the array. */ - //size: Int - - init { - this.data = malloc_array(kotlinclib_byte_size() * this.size) - var index = 0 - - while (index < this.size) { - set(index, 0) - index = index + 1 - } - } - - /** Returns the array element at the given [index]. This method can be called using the index operator. */ - operator fun get(index: Int): Byte { - return kotlinclib_get_byte(this.data, index) - } - - - /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ - operator fun set(index: Int, value: Byte) { - kotlinclib_set_byte(this.data, index, value) - } - - - fun clone(): ByteArray { - val newInstance = ByteArray(this.size) - var index = 0 - while (index < this.size) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance - } - -} - -fun ByteArray.print() { - var index = 0 - print('[') - while (index < size) { - print(get(index)) - index++ - if (index < size){ - print(';') - print(' ') - } - } - print(']') -} - -fun ByteArray.println() { - this.print() - //println() -} - -fun ByteArray.copyOf(newSize: Int): ByteArray { - val newInstance = ByteArray(newSize) - var index = 0 - val end = if (newSize > this.size) this.size else newSize - while (index < end) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - while (index < newSize) { - newInstance.set(index, 0) - index = index + 1 - } - - return newInstance -} - -fun ByteArray.copyOfRange(fromIndex: Int, toIndex: Int): ByteArray { - val newInstance = ByteArray(toIndex - fromIndex) - var index = fromIndex - while (index < toIndex) { - val value = this.get(index) - newInstance.set(index - fromIndex, value) - index = index + 1 - } - - return newInstance -} - -operator fun ByteArray.plus(element: Byte): ByteArray { - val index = size - val result = this.copyOf(index + 1) - result[index] = element - return result -} - -operator fun ByteArray.plus(elements: ByteArray): ByteArray { - val thisSize = size - val arraySize = elements.size - val resultSize = thisSize + arraySize - val newInstance = this.copyOf(resultSize) - var index = thisSize - - while (index < resultSize) { - val value = elements.get(index - thisSize) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance -} \ No newline at end of file diff --git a/experiments/translator-bc/kotstd/include/CodedInputStream.kt b/experiments/translator-bc/kotstd/include/CodedInputStream.kt deleted file mode 100644 index bb5b6e47cae..00000000000 --- a/experiments/translator-bc/kotstd/include/CodedInputStream.kt +++ /dev/null @@ -1,216 +0,0 @@ -/** - * Created by Dmitry Savvinov on 7/6/16. - * - * Hides details of work with Protobuf encoding - * - * Note that CodedInputStream reads protobuf-defined types from stream (such as int32, sint32, etc), - * while CodedOutputStream has methods for writing Kotlin-types (such as Boolean, Int, Long, Short, etc) - * - */ - -// TODO: refactor correctness checks into readTag -class CodedInputStream(val buffer: ByteArray) { - val inputStream: KotlinInputStream - init { - inputStream = KotlinInputStream(buffer) - } - - fun mark() { - inputStream.mark() - } - - fun reset() { - inputStream.reset() - } - - fun readInt32(expectedFieldNumber: Int): Int { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - val actualFieldNumber = WireFormat.getTagFieldNumber(tag) - val actualWireType = WireFormat.getTagWireType(tag) - checkFieldCorrectness(expectedFieldNumber, actualFieldNumber, WireType.VARINT, actualWireType) - return readInt32NoTag() - } - - // Note that unsigned integer types are stored as their signed counterparts with top bit - // simply stored in the sign bit - similar to Java's protobuf implementation. Hence, all - // methods reading unsigned ints simply redirect call to corresponding signed-reading method - fun readUInt32(expectedFieldNumber: Int): Int { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readUInt32NoTag() - } - - fun readUInt32NoTag(): Int { - return readInt32NoTag() - } - - fun readInt64(expectedFieldNumber: Int): Long { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readInt64NoTag() - } - - // See note on unsigned integers implementations above - fun readUInt64(expectedFieldNumber: Int): Long { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readUInt64NoTag() - } - - fun readUInt64NoTag(): Long { - return readInt64NoTag() - } - - fun readBool(expectedFieldNumber: Int): Boolean { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readBoolNoTag() - } - - fun readBoolNoTag(): Boolean { - val readValue = readInt32NoTag() - val boolValue = when (readValue) { - 0 -> false - 1 -> true - else -> false - } - return boolValue - } - - // Reading enums is like reading one int32 number. Caller is responsible for converting this ordinal to enum-object - fun readEnum(expectedFieldNumber: Int): Int { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readEnumNoTag() - } - - fun readEnumNoTag(): Int { - return readUInt32NoTag() - } - - fun readSInt32(expectedFieldNumber: Int): Int { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readSInt32NoTag() - } - - fun readSInt32NoTag(): Int { - return readZigZag32NoTag() - } - - fun readSInt64(expectedFieldNumber: Int): Long { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readSInt64NoTag() - } - - fun readSInt64NoTag(): Long { - return readZigZag64NoTag() - } - fun readBytes(expectedFieldNumber: Int): ByteArray { - val tag = readTag(expectedFieldNumber, WireType.LENGTH_DELIMITED) - return readBytesNoTag() - } - - fun readBytesNoTag(): ByteArray { - val length = readInt32NoTag() - return readRawBytes(length) - } - - /** ============ Utility methods ================== - * They are left non-private for cases when one wants to implement her/his own protocol format. - * Then she/he can re-use low-level methods for operating with raw values, that are not annotated with Protobuf tags. - */ - - fun checkFieldCorrectness( - expectedFieldNumber: Int, - actualFieldNumber: Int, - expectedWireType: WireType, - actualWireType: WireType) { - if (expectedFieldNumber != actualFieldNumber) { - return - } - - if (expectedWireType.id != actualWireType.id) { - return - } - } - - fun readRawBytes(count: Int): ByteArray { - val ba = ByteArray(count) - var i = 0 - while (i < count) { - ba[i] = inputStream.read().toByte() - i++ - } - return ba - } - - // reads tag. Note that it returns 0 for the end of message! - fun readTag(expectedFieldNumber: Int, expectedWireType: WireType): Int { - if (isAtEnd()) { - return 0 // we can safely return 0 as sign of end of message, because 0-tags are illegal - } - val tag = readInt32NoTag() - if (tag == 0) { // if we somehow had read 0-tag, then message is corrupted - return 0 - } - - val actualFieldNumber = WireFormat.getTagFieldNumber(tag) - val actualWireType = WireFormat.getTagWireType(tag) - checkFieldCorrectness(expectedFieldNumber, actualFieldNumber, expectedWireType, actualWireType) - return tag - } - - // reads varint not larger than 32-bit integer according to protobuf varint-encoding - fun readInt32NoTag(): Int { - var done: Boolean = false - var result: Long = 0 - var step: Int = 0 - while (!done) { - val byte: Int = inputStream.read().toInt() - result = result or - ( - (byte and WireFormat.VARINT_INFO_BITS_MASK).toLong() - shl - (WireFormat.VARINT_INFO_BITS_COUNT * step) - ).toLong() - step++ - if ((byte and WireFormat.VARINT_UTIL_BIT_MASK) == 0) { - done = true - } - } - return result.toInt() - } - - // reads varint not larger than 64-bit integer according to protobuf varint-encoding - fun readInt64NoTag(): Long { - var done: Boolean = false - var result: Long = 0 - var step: Int = 0 - while (!done) { - val byte: Int = inputStream.read().toInt() - result = result or - ( - (byte and WireFormat.VARINT_INFO_BITS_MASK).toLong() - shl - (WireFormat.VARINT_INFO_BITS_COUNT * step) - ) - step++ - if ((byte and WireFormat.VARINT_UTIL_BIT_MASK) == 0 /* || byte == -1 ???? */) { - done = true - } - } - return result - } - - // reads zig-zag encoded integer not larger than 32-bit long - fun readZigZag32NoTag(): Int { - val value = readInt32NoTag() - return (value ushr 1) xor (-(value and 1)) // bit magic for decoding zig-zag number - } - - // reads zig-zag encoded integer not larger than 64-bit long - fun readZigZag64NoTag(): Long { - val value = readInt64NoTag() - return (value ushr 1) xor (-(value and 1L)) // bit magic for decoding zig-zag number - } - - // checks if at least one more byte can be read from underlying input stream - fun isAtEnd(): Boolean { - return inputStream.isAtEnd() - } -} diff --git a/experiments/translator-bc/kotstd/include/CodedOutputStream.kt b/experiments/translator-bc/kotstd/include/CodedOutputStream.kt deleted file mode 100644 index 9c40747b99c..00000000000 --- a/experiments/translator-bc/kotstd/include/CodedOutputStream.kt +++ /dev/null @@ -1,167 +0,0 @@ -/** - * Created by user on 7/6/16. - */ - -class CodedOutputStream(val buffer: ByteArray) { - val output = KotlinOutputStream(buffer) - - fun toByteArray(): ByteArray { - return buffer - } - - fun writeTag(fieldNumber: Int, type: WireType) { - val tag = (fieldNumber shl 3) or type.id - writeRawVarint32(tag) - } - - fun writeInt32(fieldNumber: Int, value: Int) { - writeTag(fieldNumber, WireType.VARINT) - writeInt32NoTag(value) - } - - fun writeInt32NoTag(value: Int) { - if (value < 0) { // sign-extend negative values - writeRawVarint64(value.toLong()) - return - } - writeRawVarint32(value) - } - - // Note that unsigned integer types are stored as their signed counterparts with top bit - // simply stored in the sign bit - similar to Java's protobuf implementation. Hence, all - // methods, writing unsigned ints simply redirect call to corresponding signed-writing method - fun writeUInt32(fieldNumber: Int, value: Int) { - writeTag(fieldNumber, WireType.VARINT) - writeUInt32NoTag(value) - } - - fun writeUInt32NoTag(value: Int) { - writeRawVarint32(value) - } - - fun writeInt64(fieldNumber: Int, value: Long) { - writeTag(fieldNumber, WireType.VARINT) - writeInt64NoTag(value) - } - - fun writeInt64NoTag(value: Long) { - writeRawVarint64(value) - } - - // See notes on unsigned integers implementation above - fun writeUInt64(fieldNumber: Int, value: Long) { - writeTag(fieldNumber, WireType.VARINT) - writeUInt64NoTag(value) - } - - fun writeUInt64NoTag(value: Long) { - writeRawVarint64(value) - } - - fun writeBool(fieldNumber: Int, value: Boolean) { - writeTag(fieldNumber, WireType.VARINT) - writeBoolNoTag(value) - } - - fun writeBoolNoTag(value: Boolean) { - writeRawVarint32(if (value) 1 else 0) - } - - // Writing enums is like writing one int32 number. Caller is responsible for converting enum-object to ordinal - fun writeEnum(fieldNumber: Int, value: Int) { - writeTag(fieldNumber, WireType.VARINT) - writeEnumNoTag(value) - } - - fun writeEnumNoTag(value: Int) { - writeRawVarint32(value) - } - - fun writeSInt32(fieldNumber: Int, value: Int) { - writeTag(fieldNumber, WireType.VARINT) - writeSInt32NoTag(value) - } - - fun writeSInt32NoTag(value: Int) { - writeUInt32NoTag((value shl 1) xor (value shr 31)) - } - - fun writeSInt64(fieldNumber: Int, value: Long) { - writeTag(fieldNumber, WireType.VARINT) - writeSInt64NoTag(value) - } - - fun writeSInt64NoTag(value: Long) { - writeUInt64NoTag((value shl 1) xor (value shr 63)) - } - - fun writeBytes(fieldNumber: Int, value: ByteArray) { - if (value.size == 0) { - return - } - writeTag(fieldNumber, WireType.LENGTH_DELIMITED) - writeBytesNoTag(value) - } - - fun writeBytesNoTag(value: ByteArray) { - writeRawVarint32(value.size) - output.write(value) - } - - /** ============ Utility methods ================== - * They are left non-private for cases when one wants to implement her/his own protocol format. - * Then she/he can re-use low-level methods for operating with raw values, that are not annotated with Protobuf tags. - */ - - fun writeRawVarint32(value: Int) { - var curValue: Int = value - - // we have at most 32 information bits. With overhead of 1 bit per 7 bits we need at most 5 bytes for encoding - val res = ByteArray(5) - - var resSize = 0 - do { - // encode current 7 bits - var curByte = (curValue and WireFormat.VARINT_INFO_BITS_MASK) - - // discard encoded bits. Note that unsigned shift is needed for cases with negative numbers - curValue = curValue ushr WireFormat.VARINT_INFO_BITS_COUNT - - // check if there will be next byte in encoding and set util bit if needed - if (curValue != 0) { - curByte = curByte or WireFormat.VARINT_UTIL_BIT_MASK - } - - res[resSize] = curByte.toByte() - resSize++ - } while (curValue != 0) - output.write(res, 0, resSize) - } - - fun writeRawVarint64(value: Long) { - var curValue: Long = value - - // we have at most 64 information bits. With overhead of 1 bit per 7 bits we need at most 10 bytes for encoding - val res = ByteArray(10) - - var resSize = 0 - do { - // encode current 7 bits - var curByte = (curValue and WireFormat.VARINT_INFO_BITS_MASK.toLong()) - - // discard encoded bits. Note that unsigned shift is needed for cases with negative numbers - curValue = curValue ushr WireFormat.VARINT_INFO_BITS_COUNT - - // check if there will be next byte and set util bit if needed - if (curValue != 0L) { - curByte = curByte or WireFormat.VARINT_UTIL_BIT_MASK.toLong() - } - - res[resSize] = curByte.toByte() - resSize++ - } while(curValue != 0L) - output.write(res, 0, resSize) - } - - -} diff --git a/experiments/translator-bc/kotstd/include/Console.kt b/experiments/translator-bc/kotstd/include/Console.kt deleted file mode 100644 index c4077be14d4..00000000000 --- a/experiments/translator-bc/kotstd/include/Console.kt +++ /dev/null @@ -1,171 +0,0 @@ -package kotlin - -/* -* Library for console interaction -*/ - -external fun kotlinclib_print_int(message: Int) -external fun kotlinclib_print_long(message: Long) -external fun kotlinclib_print_byte(message: Byte) -external fun kotlinclib_print_short(message: Short) -external fun kotlinclib_print_char(message: Char) -external fun kotlinclib_print_boolean(message: Boolean) -external fun kotlinclib_print_float(message: Float) -external fun kotlinclib_print_double(message: Double) -external fun kotlinclib_print_string(message: String) -external fun kotlinclib_println_int(message: Int) -external fun kotlinclib_println_long(message: Long) -external fun kotlinclib_println_byte(message: Byte) -external fun kotlinclib_println_short(message: Short) -external fun kotlinclib_println_char(message: Char) -external fun kotlinclib_println_boolean(message: Boolean) -external fun kotlinclib_println_float(message: Float) -external fun kotlinclib_println_double(message: Double) -external fun kotlinclib_println_string(message: String) -external fun kotlinclib_println() - -/** Prints the given message to the standard output stream. */ -fun print(message: Int) { - kotlinclib_print_int(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Long) { - kotlinclib_print_long(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Byte) { - kotlinclib_print_byte(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Short) { - kotlinclib_print_short(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Char) { - kotlinclib_print_char(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Boolean) { - kotlinclib_print_boolean(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Float) { - kotlinclib_print_float(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Double) { - kotlinclib_print_double(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: String) { - kotlinclib_print_string(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun print(message: ByteArray) { - message.print() -} - -/** Prints the given message and newline to the standard output stream. */ -fun print(message: BooleanArray) { - message.print() -} - -/** Prints the given message and newline to the standard output stream. */ -fun print(message: IntArray) { - message.print() -} - -/** Prints the given message and newline to the standard output stream. */ -fun print(message: LongArray) { - message.print() -} - -/** Prints the given message and newline to the standard output stream. */ -fun print(message: ShortArray) { - message.print() -} - - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Int) { - kotlinclib_println_int(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Long) { - kotlinclib_println_long(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Byte) { - kotlinclib_println_byte(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Short) { - kotlinclib_println_short(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Char) { - kotlinclib_println_char(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Boolean) { - kotlinclib_println_boolean(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Float) { - kotlinclib_println_float(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Double) { - kotlinclib_println_double(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: String) { - kotlinclib_println_string(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: ByteArray) { - message.println() -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: BooleanArray) { - message.println() -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: IntArray) { - message.println() -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: LongArray) { - message.println() -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: ShortArray) { - message.println() -} - -/** Prints newline to the standard output stream. */ -fun println() { - kotlinclib_println() -} \ No newline at end of file diff --git a/experiments/translator-bc/kotstd/include/IntArray.kt b/experiments/translator-bc/kotstd/include/IntArray.kt deleted file mode 100644 index 09767b162b9..00000000000 --- a/experiments/translator-bc/kotstd/include/IntArray.kt +++ /dev/null @@ -1,195 +0,0 @@ -package kotlin - -external fun kotlinclib_get_int(src: Int, index: Int): Int -external fun kotlinclib_set_int(src: Int, index: Int, value: Int) -external fun kotlinclib_int_size(): Int - - -class IntArray(var size: Int) { - val data: Int - - /** Returns the number of elements in the array. */ - //size: Int - - init { - this.data = malloc_array(kotlinclib_int_size() * this.size) - var index = 0 - while (index < this.size) { - set(index, 0) - index = index + 1 - } - } - - /** Returns the array element at the given [index]. This method can be called using the index operator. */ - operator fun get(index: Int): Int { - return kotlinclib_get_int(this.data, index) - } - - - /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ - operator fun set(index: Int, value: Int) { - kotlinclib_set_int(this.data, index, value) - } - - - fun clone(): IntArray { - val newInstance = IntArray(this.size) - var index = 0 - while (index < this.size) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance - } - -} - -fun IntArray.print() { - var index = 0 - print('[') - while (index < size) { - print(get(index)) - index++ - if (index < size) { - print(';') - print(' ') - } - } - print(']') -} - -fun IntArray.println() { - this.print() - //println() -} - -fun IntArray.copyOf(newSize: Int): IntArray { - val newInstance = IntArray(newSize) - var index = 0 - val end = if (newSize > this.size) this.size else newSize - while (index < end) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - while (index < newSize) { - newInstance.set(index, 0) - index = index + 1 - } - - return newInstance -} - -fun IntArray.copyOfRange(fromIndex: Int, toIndex: Int): IntArray { - val newInstance = IntArray(toIndex - fromIndex) - var index = fromIndex - while (index < toIndex) { - val value = this.get(index) - newInstance.set(index - fromIndex, value) - index = index + 1 - } - - return newInstance -} - -operator fun IntArray.plus(element: Int): IntArray { - val index = size - val result = this.copyOf(index + 1) - result[index] = element - return result -} - -operator fun IntArray.plus(elements: IntArray): IntArray { - val thisSize = size - val arraySize = elements.size - val resultSize = thisSize + arraySize - val newInstance = this.copyOf(resultSize) - var index = thisSize - - while (index < resultSize) { - val value = elements.get(index - thisSize) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance -} - -fun IntArray.max(from: Int = 0): Int { - var result = from - var i = from - while (i < size - 1) { - result = if (get(i) > get(result)) i else result - i++ - } - - return get(result) -} - -fun IntArray.min(from: Int = 0): Int { - var result = from - var i = from - while (i < size - 1) { - result = if (this.get(i) < this.get(result)) i else result - i++ - } - - return this.get(result) -} - -fun IntArray.sum(): Int { - var result = 0 - var i = 0 - while (i < size - 1) { - result += this.get(i) - i++ - } - - return result -} - -fun IntArray.sort(): IntArray { - val result = this.clone() - var i = 0 - while (i < size - 1) { - result[i] = this.max(i) - i++ - } - - return result -} - -fun IntArray.mean(): Int = - this.sum() / this.size - -fun IntArray.median(): Int = - this.sort()[this.size / 2] - -fun IntArray.filter(predicate: (Int) -> Boolean): IntArray { - var resultSize = 0 - var i = 0 - while (i < size - 1) { - if (predicate(get(i))) { - resultSize++ - } - - i++ - } - - val result = IntArray(resultSize) - var j = 0 - i = 0 - while (i < size - 1) { - if (predicate(get(i))) { - result[j] = get(i) - j++ - } - - i++ - } - - return result -} diff --git a/experiments/translator-bc/kotstd/include/Iterators.kt b/experiments/translator-bc/kotstd/include/Iterators.kt deleted file mode 100644 index 836b06babe9..00000000000 --- a/experiments/translator-bc/kotstd/include/Iterators.kt +++ /dev/null @@ -1,94 +0,0 @@ -package kotlin.collections - -/** An iterator over a sequence of values of type `Byte`. */ -public abstract class ByteIterator { - final fun next() = nextByte() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextByte(): Byte - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Char`. */ -public abstract class CharIterator { - final fun next() = nextChar() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextChar(): Char - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Short`. */ -public abstract class ShortIterator { - final fun next() = nextShort() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextShort(): Short - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Int`. */ -class IntIterator(first: Int, last: Int, val step: Int) { - private var next = first - private val finalElement = last - private var hasNext: Boolean = if (step > 0) first <= last else first >= last - - final fun next() = nextInt () - - fun hasNext(): Boolean = hasNext - - fun nextInt(): Int { - val value = next - if (value == finalElement) { - hasNext = false - } - else { - next += step - } - return value - } -} - - -/** An iterator over a sequence of values of type `Long`. */ -public abstract class LongIterator { - final fun next() = nextLong() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextLong(): Long - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Float`. */ -public abstract class FloatIterator { - final fun next() = nextFloat() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextFloat(): Float - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Double`. */ -public abstract class DoubleIterator { - final fun next() = nextDouble() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextDouble(): Double - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Boolean`. */ -public abstract class BooleanIterator { - final fun next() = nextBoolean() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextBoolean(): Boolean - - public abstract fun hasNext(): Boolean -} \ No newline at end of file diff --git a/experiments/translator-bc/kotstd/include/KotlinInputStream.kt b/experiments/translator-bc/kotstd/include/KotlinInputStream.kt deleted file mode 100644 index ee2c40aa387..00000000000 --- a/experiments/translator-bc/kotstd/include/KotlinInputStream.kt +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Created by user on 8/8/16. - */ - -class KotlinInputStream(val buffer: ByteArray) { - var pos = 0 - var mark_ = 0 - - fun read(): Byte { - pos += 1 - return buffer[pos - 1] - } - - fun isAtEnd(): Boolean { - return pos >= buffer.size - } - - fun mark() { - mark_ = pos - } - - fun reset() { - pos = mark_ - } -} diff --git a/experiments/translator-bc/kotstd/include/KotlinOutputStream.kt b/experiments/translator-bc/kotstd/include/KotlinOutputStream.kt deleted file mode 100644 index 51f80aaf766..00000000000 --- a/experiments/translator-bc/kotstd/include/KotlinOutputStream.kt +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Created by user on 8/8/16. - */ - -class KotlinOutputStream(val buffer: ByteArray) { - var pos = 0 - - fun write (data: ByteArray) { - write(data, 0, data.size) - } - - fun write (data: ByteArray, begin: Int, size: Int) { - var i = begin - while (i < begin + size) { - buffer[pos] = data[i] - pos += 1 - i++ - } - } -} diff --git a/experiments/translator-bc/kotstd/include/LongArray.kt b/experiments/translator-bc/kotstd/include/LongArray.kt deleted file mode 100644 index f8ae4fe7d03..00000000000 --- a/experiments/translator-bc/kotstd/include/LongArray.kt +++ /dev/null @@ -1,118 +0,0 @@ -package kotlin - -external fun kotlinclib_get_long(src: Int, index: Int): Long -external fun kotlinclib_set_long(src: Int, index: Int, value: Long) -external fun kotlinclib_long_size(): Int - - -class LongArray(var size: Int) { - val data: Int - - /** Returns the number of elements in the array. */ - //size: Int - - init { - this.data = malloc_array(kotlinclib_long_size() * this.size) - var index = 0 - while (index < this.size) { - set(index, 0) - index = index + 1 - } - } - - /** Returns the array element at the given [index]. This method can be called using the index operator. */ - operator fun get(index: Int): Long { - return kotlinclib_get_long(this.data, index) - } - - - /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ - operator fun set(index: Int, value: Long) { - kotlinclib_set_long(this.data, index, value) - } - - - fun clone(): LongArray { - val newInstance = LongArray(this.size) - var index = 0 - while (index < this.size) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance - } -} - -fun LongArray.print() { - var index = 0 - print('[') - while (index < size) { - print(get(index)) - index++ - if (index < size) { - print(';') - print(' ') - } - } - print(']') -} - -fun LongArray.println() { - this.print() - //println() -} - -fun LongArray.copyOf(newSize: Int): LongArray { - val newInstance = LongArray(newSize) - var index = 0 - val end = if (newSize > this.size) this.size else newSize - while (index < end) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - while (index < newSize) { - newInstance.set(index, 0) - index = index + 1 - } - - return newInstance -} - -fun LongArray.copyOfRange(fromIndex: Int, toIndex: Int): LongArray { - val newInstance = LongArray(toIndex - fromIndex) - var index = fromIndex - while (index < toIndex) { - val value = this.get(index) - newInstance.set(index - fromIndex, value) - index = index + 1 - } - - return newInstance -} - -operator fun LongArray.plus(element: Long): LongArray { - val index = size - val result = this.copyOf(index + 1) - result[index] = element - return result -} - -operator fun LongArray.plus(elements: LongArray): LongArray { - val thisSize = size - val arraySize = elements.size - val resultSize = thisSize + arraySize - val newInstance = this.copyOf(resultSize) - var index = thisSize - - while (index < resultSize) { - val value = elements.get(index - thisSize) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance -} \ No newline at end of file diff --git a/experiments/translator-bc/kotstd/include/Primitives.kt b/experiments/translator-bc/kotstd/include/Primitives.kt deleted file mode 100644 index 3da2e500545..00000000000 --- a/experiments/translator-bc/kotstd/include/Primitives.kt +++ /dev/null @@ -1,251 +0,0 @@ -package kotlin - -external fun kotlinclib_byteToChar(value: Byte): Char -external fun kotlinclib_byteToShort(value: Byte): Short -external fun kotlinclib_byteToInt(value: Byte): Int -external fun kotlinclib_byteToLong(value: Byte): Long -external fun kotlinclib_byteToFloat(value: Byte): Float -external fun kotlinclib_byteToDouble(value: Byte): Double - - -fun Byte.toByte(): Byte { - return this -} - -fun Byte.toInt(): Int { - return kotlinclib_byteToInt(this) -} - -fun Byte.toChar(): Char { - return kotlinclib_byteToChar(this) -} - -fun Byte.toShort(): Short { - return kotlinclib_byteToShort(this) -} - -fun Byte.toLong(): Long { - return kotlinclib_byteToLong(this) -} - -fun Byte.toFloat(): Float { - return kotlinclib_byteToFloat(this) -} - -fun Byte.toDouble(): Double { - return kotlinclib_byteToDouble(this) -} - -external fun kotlinclib_charToByte(value: Char): Byte -external fun kotlinclib_charToShort(value: Char): Short -external fun kotlinclib_charToInt(value: Char): Int -external fun kotlinclib_charToLong(value: Char): Long -external fun kotlinclib_charToFloat(value: Char): Float -external fun kotlinclib_charToDouble(value: Char): Double - - -fun Char.toByte(): Byte { - return kotlinclib_charToByte(this) -} - -fun Char.toInt(): Int { - return kotlinclib_charToInt(this) -} - -fun Char.toChar(): Char { - return this -} - -fun Char.toShort(): Short { - return kotlinclib_charToShort(this) -} - -fun Char.toLong(): Long { - return kotlinclib_charToLong(this) -} - -fun Char.toFloat(): Float { - return kotlinclib_charToFloat(this) -} - -fun Char.toDouble(): Double { - return kotlinclib_charToDouble(this) -} - -external fun kotlinclib_doubleToByte(value: Double): Byte -external fun kotlinclib_doubleToChar(value: Double): Char -external fun kotlinclib_doubleToShort(value: Double): Short -external fun kotlinclib_doubleToInt(value: Double): Int -external fun kotlinclib_doubleToLong(value: Double): Long -external fun kotlinclib_doubleToFloat(value: Double): Float - -fun Double.toByte(): Byte { - return kotlinclib_doubleToByte(this) -} - -fun Double.toChar(): Char { - return kotlinclib_doubleToChar(this) -} - -fun Double.toShort(): Short { - return kotlinclib_doubleToShort(this) -} - -fun Double.toInt(): Int { - return kotlinclib_doubleToInt(this) -} - -fun Double.toLong(): Long { - return kotlinclib_doubleToLong(this) -} - -fun Double.toFloat(): Float { - return kotlinclib_doubleToFloat(this) -} - -fun Double.toDouble(): Double { - return this -} - - -external fun kotlinclib_floatToByte(value: Float): Byte -external fun kotlinclib_floatToChar(value: Float): Char -external fun kotlinclib_floatToShort(value: Float): Short -external fun kotlinclib_floatToInt(value: Float): Int -external fun kotlinclib_floatToLong(value: Float): Long -external fun kotlinclib_floatToDouble(value: Float): Double - -fun Float.toByte(): Byte { - return kotlinclib_floatToByte(this) -} - -fun Float.toChar(): Char { - return kotlinclib_floatToChar(this) -} - -fun Float.toShort(): Short { - return kotlinclib_floatToShort(this) -} - -fun Float.toInt(): Int { - return kotlinclib_floatToInt(this) -} - -fun Float.toLong(): Long { - return kotlinclib_floatToLong(this) -} - -fun Float.toFloat(): Float { - return this -} - -fun Float.toDouble(): Double { - return kotlinclib_floatToDouble(this) -} - - -external fun kotlinclib_intToByte(value: Int): Byte -external fun kotlinclib_intToChar(value: Int): Char -external fun kotlinclib_intToShort(value: Int): Short -external fun kotlinclib_intToLong(value: Int): Long -external fun kotlinclib_intToFloat(value: Int): Float -external fun kotlinclib_intToDouble(value: Int): Double - -fun Int.toByte(): Byte { - return kotlinclib_intToByte(this) -} - -fun Int.toInt(): Int { - return this -} - -fun Int.toChar(): Char { - return kotlinclib_intToChar(this) -} - -fun Int.toShort(): Short { - return kotlinclib_intToShort(this) -} - -fun Int.toLong(): Long { - return kotlinclib_intToLong(this) -} - -fun Int.toFloat(): Float { - return kotlinclib_intToFloat(this) -} - -fun Int.toDouble(): Double { - return kotlinclib_intToDouble(this) -} - -external fun kotlinclib_longToByte(value: Long): Byte -external fun kotlinclib_longToChar(value: Long): Char -external fun kotlinclib_longToShort(value: Long): Short -external fun kotlinclib_longToInt(value: Long): Int -external fun kotlinclib_longToFloat(value: Long): Float -external fun kotlinclib_longToDouble(value: Long): Double - -fun Long.toByte(): Byte { - return kotlinclib_longToByte(this) -} - -fun Long.toLong(): Long { - return this -} - -fun Long.toChar(): Char { - return kotlinclib_longToChar(this) -} - -fun Long.toShort(): Short { - return kotlinclib_longToShort(this) -} - -fun Long.toInt(): Int { - return kotlinclib_longToInt(this) -} - -fun Long.toFloat(): Float { - return kotlinclib_longToFloat(this) -} - -fun Long.toDouble(): Double { - return kotlinclib_longToDouble(this) -} - -external fun kotlinclib_shortToByte(value: Short): Byte -external fun kotlinclib_shortToChar(value: Short): Char -external fun kotlinclib_shortToInt(value: Short): Int -external fun kotlinclib_shortToLong(value: Short): Long -external fun kotlinclib_shortToFloat(value: Short): Float -external fun kotlinclib_shortToDouble(value: Short): Double - - -fun Short.toByte(): Byte { - return kotlinclib_shortToByte(this) -} - -fun Short.toInt(): Int { - return kotlinclib_shortToInt(this) -} - -fun Short.toChar(): Char { - return kotlinclib_shortToChar(this) -} - -fun Short.toShort(): Short { - return this -} - -fun Short.toLong(): Long { - return kotlinclib_shortToLong(this) -} - -fun Short.toFloat(): Float { - return kotlinclib_shortToFloat(this) -} - -fun Short.toDouble(): Double { - return kotlinclib_shortToDouble(this) -} diff --git a/experiments/translator-bc/kotstd/include/Progressions.kt b/experiments/translator-bc/kotstd/include/Progressions.kt deleted file mode 100644 index ec9bbb3ec09..00000000000 --- a/experiments/translator-bc/kotstd/include/Progressions.kt +++ /dev/null @@ -1,50 +0,0 @@ -package kotlin - -/** - * A progression of values of type `Int`. - */ -public open class IntProgression -constructor -( - start: Int, - endInclusive: Int, - val step: Int -) { - init { - if (step == 0) { - println("Step must be non-zero.") - assert(false) - } - } - - /** - * The first element in the progression. - */ - public val first: Int = start - - /** - * The last element in the progression. - */ - public val last: Int = getProgressionLastElement(start.toInt(), endInclusive.toInt(), step).toInt() - - - fun iterator(): IntIterator = IntIterator(first, last, step) - - /** Checks if the progression is empty. */ - public open fun isEmpty(): Boolean = if (step > 0) first > last else first < last - - //[TODO] equals - - override fun hashCode(): Int = - if (isEmpty()) -1 else (31 * (31 * first + last) + step) - - companion object { - /** - * Creates IntProgression within the specified bounds of a closed range. - - * The progression starts with the [rangeStart] value and goes toward the [rangeEnd] value not excluding it, with the specified [step]. - * In order to go backwards the [step] must be negative. - */ - public fun fromClosedRange(rangeStart: Int, rangeEnd: Int, step: Int): IntProgression = IntProgression(rangeStart, rangeEnd, step) - } -} diff --git a/experiments/translator-bc/kotstd/include/Ranges.kt b/experiments/translator-bc/kotstd/include/Ranges.kt deleted file mode 100644 index 4c12faa5e3d..00000000000 --- a/experiments/translator-bc/kotstd/include/Ranges.kt +++ /dev/null @@ -1,25 +0,0 @@ -package kotlin.ranges - -import kotlin.IntProgression -import kotlin.collections.IntIterator - -public class IntRange(val start: Int, val endInclusive: Int) { - val progression = IntProgression(start, endInclusive, 1) - val first: Int - val last: Int - - init { - this.first = progression.first - this.last = progression.last - } - - fun contains(value: Int): Boolean = first <= value && value <= last - - fun isEmpty(): Boolean = first > last - - fun iterator(): IntIterator = progression.iterator() - - override fun hashCode(): Int = - if (isEmpty()) -1 else (31 * first + last) - -} diff --git a/experiments/translator-bc/kotstd/include/ShortArray.kt b/experiments/translator-bc/kotstd/include/ShortArray.kt deleted file mode 100644 index 3d1cf82a40e..00000000000 --- a/experiments/translator-bc/kotstd/include/ShortArray.kt +++ /dev/null @@ -1,120 +0,0 @@ -package kotlin - -external fun kotlinclib_get_short(src: Int, index: Int): Short -external fun kotlinclib_set_short(src: Int, index: Int, value: Short) -external fun kotlinclib_short_size(): Int - - -class ShortArray(var size: Int) { - val data: Int - - /** Returns the number of elements in the array. */ - //size: Int - - init { - this.data = malloc_array(kotlinclib_short_size() * this.size) - var index = 0 - while (index < this.size) { - set(index, 0) - index = index + 1 - } - } - - /** Returns the array element at the given [index]. This method can be called using the index operator. */ - operator fun get(index: Int): Short { - return kotlinclib_get_short(this.data, index) - } - - - /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ - operator fun set(index: Int, value: Short) { - kotlinclib_set_short(this.data, index, value) - } - - - fun clone(): ShortArray { - val newInstance = ShortArray(this.size) - var index = 0 - while (index < this.size) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance - } - -} - -fun ShortArray.print() { - var index = 0 - print('[') - while (index < size) { - print(get(index)) - index++ - if (index < size) { - print(';') - print(' ') - } - } - print(']') -} - -fun ShortArray.println() { - this.print() - //println() -} - - -fun ShortArray.copyOf(newSize: Int): ShortArray { - val newInstance = ShortArray(newSize) - var index = 0 - val end = if (newSize > this.size) this.size else newSize - while (index < end) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - while (index < newSize) { - newInstance.set(index, 0) - index = index + 1 - } - - return newInstance -} - -fun ShortArray.copyOfRange(fromIndex: Int, toIndex: Int): ShortArray { - val newInstance = ShortArray(toIndex - fromIndex) - var index = fromIndex - while (index < toIndex) { - val value = this.get(index) - newInstance.set(index - fromIndex, value) - index = index + 1 - } - - return newInstance -} - -operator fun ShortArray.plus(element: Short): ShortArray { - val index = size - val result = this.copyOf(index + 1) - result[index] = element - return result -} - -operator fun ShortArray.plus(elements: ShortArray): ShortArray { - val thisSize = size - val arraySize = elements.size - val resultSize = thisSize + arraySize - val newInstance = this.copyOf(resultSize) - var index = thisSize - - while (index < resultSize) { - val value = elements.get(index - thisSize) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance -} \ No newline at end of file diff --git a/experiments/translator-bc/kotstd/include/WireFormat.kt b/experiments/translator-bc/kotstd/include/WireFormat.kt deleted file mode 100644 index d43c6e37003..00000000000 --- a/experiments/translator-bc/kotstd/include/WireFormat.kt +++ /dev/null @@ -1,164 +0,0 @@ - -object WireFormat { - // couple of constants for magic numbers - val TAG_TYPE_BITS: Int = 3 - val TAG_TYPE_MASK: Int = (1 shl TAG_TYPE_BITS) - 1 - val VARINT_INFO_BITS_COUNT: Int = 7 - val VARINT_INFO_BITS_MASK: Int = 0b01111111 // mask for separating lowest 7 bits, where actual information stored - val VARINT_UTIL_BIT_MASK: Int = 0b10000000 // mask for separating highest bit, that indicates next byte presence - val FIXED_32_BYTE_SIZE: Int = 4 - val FIXED_64_BYTE_SIZE: Int = 8 - - fun getTagWireType(tag: Int): WireType { - return WireType.from((tag and TAG_TYPE_MASK).toByte()) - } - - fun getTagFieldNumber(tag: Int): Int { - return tag ushr TAG_TYPE_BITS - } - - // TODO: refactor casts into function overloading as soon as translator will support it - fun getTagSize(fieldNumber: Int, wireType: WireType): Int { - return getVarint32Size((fieldNumber shl 3) or wireType.id) - } - - fun getVarint32Size(value: Int): Int { - var curValue = value - var size = 0 - do { - size += 1 - curValue = curValue ushr VARINT_INFO_BITS_COUNT - } while (curValue != 0) - return size - } - - fun getVarint64Size(value: Long): Int { - var curValue = value - var size = 0 - do { - size += 1 - curValue = curValue ushr VARINT_INFO_BITS_COUNT - }while (curValue != 0L) - return size - } - - fun getZigZag32Size(value: Int): Int { - return getVarint32Size((value shl 1) xor (value shr 31)) - } - - fun getZigZag64Size(value: Long): Int { - return getVarint64Size((value shl 1) xor (value shr 63)) - } - - fun getInt32Size(fieldNumber: Int, value: Int): Int { - return getTagSize(fieldNumber, WireType.VARINT) + getInt32SizeNoTag(value) - } - - fun getInt32SizeNoTag(value: Int): Int { - if (value < 0) { - return getVarint64Size(value.toLong()) - } - return getVarint32Size(value) - } - - fun getUInt32Size(fieldNumber: Int, value: Int): Int { - return getTagSize(fieldNumber, WireType.VARINT) + getUInt32SizeNoTag(value) - } - - fun getUInt32SizeNoTag(value: Int): Int { - return getVarint32Size(value) - } - - fun getInt64Size(fieldNumber: Int, value: Long): Int { - return getTagSize(fieldNumber, WireType.VARINT) + getUInt64SizeNoTag(value) - } - - fun getInt64SizeNoTag(value: Long): Int { - return getVarint64Size(value) - } - - fun getUInt64Size(fieldNumber: Int, value: Long): Int { - return getInt64Size(fieldNumber, value) - } - - fun getUInt64SizeNoTag(value: Long): Int { - return getVarint64Size(value) - } - - fun getBoolSize(fieldNumber: Int, value: Boolean): Int { - val intValue = if (value) 1 else 0 - return getInt32Size(fieldNumber, intValue) - } - - fun getBoolSizeNoTag(value: Boolean): Int { - val intValue = if (value) 1 else 0 - return getInt32SizeNoTag(intValue) - } - - fun getEnumSize(fieldNumber: Int, value: Int): Int { - return getInt32Size(fieldNumber, value) - } - - fun getEnumSizeNoTag(value: Int): Int { - return getInt32SizeNoTag(value) - } - - fun getSInt32Size(fieldNumber: Int, value: Int): Int { - return getTagSize(fieldNumber, WireType.VARINT) + getZigZag32Size(value) - } - - fun getSInt32SizeNoTag(value: Int): Int { - return getZigZag32Size(value) - } - - fun getSInt64Size(fieldNumber: Int, value: Long): Int { - return getTagSize(fieldNumber, WireType.VARINT) + getZigZag64Size(value) - } - - fun getSInt64SizeNoTag(value: Long): Int { - return getZigZag64Size(value) - } - - fun getFixed32Size(fieldNumber: Int, value: Int): Int { - return getTagSize(fieldNumber, WireType.FIX_32) + FIXED_32_BYTE_SIZE - } - - fun getFixed32SizeNoTag(value: Int): Int { - return FIXED_32_BYTE_SIZE - } - - fun getFixed64Size(fieldNumber: Int, value: Long): Int { - return getTagSize(fieldNumber, WireType.FIX_64) + FIXED_64_BYTE_SIZE - } - - fun getFixed64SizeNoTag(value: Long): Int { - return FIXED_64_BYTE_SIZE - } - - fun getDoubleSize(fieldNumber: Int, value: Double): Int { - return getTagSize(fieldNumber, WireType.FIX_64) + FIXED_64_BYTE_SIZE - } - - fun getDoubleSizeNoTag(value: Double): Int { - return FIXED_64_BYTE_SIZE - } - - fun getFloatSize(fieldNumber: Int, value: Float): Int { - return getTagSize(fieldNumber, WireType.FIX_32) + FIXED_32_BYTE_SIZE - } - - fun getFloatSizeNoTag(value: Float): Int { - return FIXED_32_BYTE_SIZE - } - - fun getBytesSize(fieldNumber: Int, value: ByteArray): Int { - if (value.size == 0) - return 0 - var size = 0 - return value.size + getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) + getVarint32Size(value.size) - } - - fun getBytesSizeNoTag(value: ByteArray): Int { - return value.size + getVarint32Size(value.size) - } -} diff --git a/experiments/translator-bc/kotstd/include/WireType.kt b/experiments/translator-bc/kotstd/include/WireType.kt deleted file mode 100644 index 4ffc150fa68..00000000000 --- a/experiments/translator-bc/kotstd/include/WireType.kt +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Created by Dmitry Savvinov on 7/6/16. - * Enum for possible WireTypes. - * See details at [official Google reference](https://developers.google.com/protocol-buffers/docs/encoding#structure) - */ - -enum class WireType(val id: Int) { - VARINT(0), // int32, int64, uint32, uint64, sint32, sint64, bool, enum - FIX_64(1), // fixed64, sfixed64, double - LENGTH_DELIMITED(2), // string, bytes, embedded messages, packed repeated fields - START_GROUP(3), // groups (deprecated) - END_GROUP(4), // groups (deprecated) - FIX_32(5), // fixed32, sfixed32, float - UNDEFINED(6); // indicates error when parsing from Int - - companion object { - fun from (value: Byte): WireType { - return when (value) { - 0.toByte() -> VARINT - 1.toByte() -> FIX_64 - 2.toByte() -> LENGTH_DELIMITED - 3.toByte() -> START_GROUP - 4.toByte() -> END_GROUP - 5.toByte() -> FIX_32 - else -> UNDEFINED - } - } - } -} diff --git a/experiments/translator-bc/kotstd/include/progressionUtil.kt b/experiments/translator-bc/kotstd/include/progressionUtil.kt deleted file mode 100644 index a03312f71e4..00000000000 --- a/experiments/translator-bc/kotstd/include/progressionUtil.kt +++ /dev/null @@ -1,71 +0,0 @@ -package kotlin - -// a mod b (in arithmetical sense) -private fun mod(a: Int, b: Int): Int { - val mod = a % b - return if (mod >= 0) mod else mod + b -} - -private fun mod(a: Long, b: Long): Long { - val mod = a % b - return if (mod >= 0) mod else mod + b -} - -// (a - b) mod c -private fun differenceModulo(a: Int, b: Int, c: Int): Int { - return mod(mod(a, c) - mod(b, c), c) -} - -private fun differenceModulo(a: Long, b: Long, c: Long): Long { - return mod(mod(a, c) - mod(b, c), c) -} - -/** - * Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range - * from [start] to [end] in case of a positive [step], or from [end] to [start] in case of a negative - * [step]. - * - * No validation on passed parameters is performed. The given parameters should satisfy the condition: either - * `step > 0` and `start >= end`, or `step < 0` and`start >= end`. - * @param start first element of the progression - * @param end ending bound for the progression - * @param step increment, or difference of successive elements in the progression - * @return the final element of the progression - * @suppress - */ -fun getProgressionLastElement(start: Int, end: Int, step: Int): Int { - if (step > 0) { - return end - differenceModulo(end, start, step) - } else if (step < 0) { - return end + differenceModulo(start, end, -step) - } else { - println("Step is zero.") - assert(false) - return -1 - } -} - -/** - * Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range - * from [start] to [end] in case of a positive [step], or from [end] to [start] in case of a negative - * [step]. - * - * No validation on passed parameters is performed. The given parameters should satisfy the condition: either - * `step > 0` and `start >= end`, or `step < 0` and`start >= end`. - * @param start first element of the progression - * @param end ending bound for the progression - * @param step increment, or difference of successive elements in the progression - * @return the final element of the progression - * @suppress - */ -internal fun getProgressionLastElement(start: Long, end: Long, step: Long): Long { - if (step > 0) { - return end - differenceModulo(end, start, step) - } else if (step < 0) { - return end + differenceModulo(start, end, -step) - } else { - println("Step is zero.") - assert(false) - return -1L - } -} diff --git a/experiments/translator-bc/kotstd/libc/array_c.c b/experiments/translator-bc/kotstd/libc/array_c.c deleted file mode 100644 index 8b80a3534cc..00000000000 --- a/experiments/translator-bc/kotstd/libc/array_c.c +++ /dev/null @@ -1,32 +0,0 @@ -extern char *malloc(int size); - -int malloc_array(int x) { - return (int) malloc(x); -} - -char kotlinclib_get_byte(int data, int index) { - return *((char *) data + index); -} - -void kotlinclib_set_byte(int data, int index, char value) { - char *ptr = (char *) data; - *(ptr + index) = value; -} - -int kotlinclib_get_int(int data, int index) { - return *((int *) data + index); -} - -void kotlinclib_set_int(int data, int index, int value) { - int *ptr = (int *) data; - *(ptr + index) = value; -} - -short kotlinclib_get_short(int data, int index) { - return *((short *) data + index); -} - -void kotlinclib_set_short(int data, int index, short value) { - short *ptr = (short *) data; - *(ptr + index) = value; -} \ No newline at end of file diff --git a/experiments/translator-bc/kotstd/libc/assert_c.c b/experiments/translator-bc/kotstd/libc/assert_c.c deleted file mode 100644 index e526eaaca41..00000000000 --- a/experiments/translator-bc/kotstd/libc/assert_c.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include - -void assert_c(int value) { - if (!value) { - printf("Exception in thread \"main\" java.lang.AssertionError: Assertion failed\n"); - abort(); - } -} \ No newline at end of file diff --git a/experiments/translator-bc/kotstd/libc/memory.c b/experiments/translator-bc/kotstd/libc/memory.c deleted file mode 100644 index 18844c7c0ef..00000000000 --- a/experiments/translator-bc/kotstd/libc/memory.c +++ /dev/null @@ -1,82 +0,0 @@ - -#define STATIC_AREA_SIZE 30000 -#define DYNAMIC_AREA_SIZE 30000 - -#define STATIC_HEAP 0 -#define DYNAMIC_HEAP 1 - -#ifdef ARM - -char static_area[STATIC_AREA_SIZE]; -char dynamic_area[DYNAMIC_AREA_SIZE]; - -char* heaps[2] = { - (char*) static_area, - (char*) dynamic_area -}; - -int heap_tails[2] = {0, 0}; -int active_heap = STATIC_HEAP; - -int dynamic_heap_consume = 0; -int dynamic_heap_max = 0; - -#else -char* malloc(int); -#endif - -#ifdef DBG - static int total = 0; - int printf(const char * restrict format, ... ); -#endif - -char* malloc_heap(int size) { -#ifdef ARM - char* ptr = heaps[active_heap] + heap_tails[active_heap]; - heap_tails[active_heap] += size; - - return ptr; - -#else - #ifdef DBG - total = total + size; - printf("Alloc [%d] TOTAL: [%d]\n", size, total); - #endif - return malloc(size); -#endif -} - -void set_active_heap(int heap) { -#ifdef ARM - active_heap = heap; -#endif -} - -void clean_dynamic_heap() { -#ifdef ARM - dynamic_heap_consume += heap_tails[DYNAMIC_HEAP]; - if (heap_tails[DYNAMIC_HEAP] > dynamic_heap_max) { - dynamic_heap_max = heap_tails[DYNAMIC_HEAP]; - } - - heap_tails[DYNAMIC_HEAP] = 0; -#endif -} - -#ifdef ARM -int dynamic_heap_tail() { - return heap_tails[DYNAMIC_HEAP]; -} - -int static_heap_tail() { - return heap_tails[STATIC_HEAP]; -} - -int dynamic_heap_max_bytes() { - return dynamic_heap_max; -} - -int dynamic_heap_total() { - return dynamic_heap_consume; -} -#endif diff --git a/experiments/translator-bc/kotstd/libc/primitives_c.c b/experiments/translator-bc/kotstd/libc/primitives_c.c deleted file mode 100644 index 5f1eb3c2f52..00000000000 --- a/experiments/translator-bc/kotstd/libc/primitives_c.c +++ /dev/null @@ -1,57 +0,0 @@ -#define MAKE_CONVERT(from, from_type, to, to_type) to_type kotlinclib_ ## from ## To ## to ( from_type value ) { return (to_type) value;} - - -MAKE_CONVERT(int, int, Byte, char) -MAKE_CONVERT(int, int, Char, char) -MAKE_CONVERT(int, int, Short, short) -MAKE_CONVERT(int, int, Long, long) -MAKE_CONVERT(int, int, Float, float) -MAKE_CONVERT(int, int, Double, double) - - -MAKE_CONVERT(byte, char, Char, char) -MAKE_CONVERT(byte, char, Short, short) -MAKE_CONVERT(byte, char, Int, int) -MAKE_CONVERT(byte, char, Long, long) -MAKE_CONVERT(byte, char, Float, float) -MAKE_CONVERT(byte, char, Double, double) - - -MAKE_CONVERT(char, char, Byte, char) -MAKE_CONVERT(char, char, Short, short) -MAKE_CONVERT(char, char, Int, int) -MAKE_CONVERT(char, char, Long, long) -MAKE_CONVERT(char, char, Float, float) -MAKE_CONVERT(char, char, Double, double) - - -MAKE_CONVERT(short, short, Byte, char) -MAKE_CONVERT(short, short, Char, char) -MAKE_CONVERT(short, short, Int, int) -MAKE_CONVERT(short, short, Long, long) -MAKE_CONVERT(short, short, Float, float) -MAKE_CONVERT(short, short, Double, double) - - -MAKE_CONVERT(long, long, Byte, char) -MAKE_CONVERT(long, long, Char, char) -MAKE_CONVERT(long, long, Short, short) -MAKE_CONVERT(long, long, Int, int) -MAKE_CONVERT(long, long, Float, float) -MAKE_CONVERT(long, long, Double, double) - - -MAKE_CONVERT(float, float, Byte, char) -MAKE_CONVERT(float, float, Char, char) -MAKE_CONVERT(float, float, Short, short) -MAKE_CONVERT(float, float, Int, int) -MAKE_CONVERT(float, float, Long, long) -MAKE_CONVERT(float, float, Double, double) - - -MAKE_CONVERT(double, double, Byte, char) -MAKE_CONVERT(double, double, Char, char) -MAKE_CONVERT(double, double, Short, short) -MAKE_CONVERT(double, double, Int, int) -MAKE_CONVERT(double, double, Long, long) -MAKE_CONVERT(double, double, Float, float) \ No newline at end of file diff --git a/experiments/translator-bc/run_one_test.sh b/experiments/translator-bc/run_one_test.sh deleted file mode 100755 index cd3cb154876..00000000000 --- a/experiments/translator-bc/run_one_test.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash -green='\033[0;32m' -red='\033[0;31m' -lightRed='\033[1;31m' -orange='\033[0;33m' -KOTSTD='../kotstd/kt' - -cd ../translator - -i=$1 -TEST=`basename $i ".txt"` -DIRECTORY="src/test/kotlin/tests" -MAIN="$DIRECTORY/$TEST/linked/main.c" -rm -f $DIRECTORY/$TEST/linked/* -mkdir -p $DIRECTORY/$TEST/linked - -echo "#include " >> $MAIN -echo "#include " >> $MAIN -echo "#include " >> $MAIN - -echo "int main(){" >> $MAIN -echo "printf(\"%stest: $TEST%s\n\", \"\x1B[33m\", \"\x1B[0m\");" >> $MAIN -cat "$i" | while read LINE -do - echo " assert($LINE);" >> $MAIN - echo " printf(\"%s[OK]:%s $LINE\n\", \"\x1B[32m\", \"\x1B[0m\");" >> $MAIN -done - -echo "printf(\"TEST RESULT: OK\n\");" >> $MAIN -echo "return 0;}" >> $MAIN - -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Error somewhere in main.c generation${nc}" - exit 1 -fi - -clang-3.6 -S -emit-llvm $DIRECTORY/$TEST/linked/main.c -o $DIRECTORY/$TEST/linked/main.ll -Wno-implicit-function-declaration -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Error building main.c${nc}" - exit 1 -fi - -cp ../kotstd/build/stdlib_x86.ll $DIRECTORY/$TEST/linked/ -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Error copying ../kotstd/build/stdlib_x86.ll to ${DIRECTORY}/${TEST}/linked/${nc}" - exit 1 -fi - -if [ -f "$DIRECTORY/$TEST/$TEST.c" ] - then - clang-3.6 -S -emit-llvm "$DIRECTORY/$TEST/$TEST.c" -o $DIRECTORY/$TEST/linked/$TEST"_c.ll" -Wno-implicit-function-declaration - if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Error building: ${DIRECTORY}/${TEST}/linked/${TEST}_c.ll${nc}" - fi -fi - -java -jar build/libs/translator-1.0.jar -I $KOTSTD $DIRECTORY/$TEST/$TEST.kt > $DIRECTORY/$TEST/linked/$TEST.ll - -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Translation error: ${DIRECTORY}/$TEST/${TEST}.kt${nc}" -fi - -llvm-link-3.6 -S $DIRECTORY/$TEST/linked/*.ll > $DIRECTORY/$TEST/linked/run.ll -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Error linking with llvm${nc}" -fi - -lli-3.6 $DIRECTORY/$TEST/linked/run.ll -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${lightRed}Error running test${nc}" -fi diff --git a/experiments/translator-bc/run_tests.sh b/experiments/translator-bc/run_tests.sh deleted file mode 100755 index d9ff0f3031b..00000000000 --- a/experiments/translator-bc/run_tests.sh +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/bash -green='\033[0;32m' -red='\033[0;31m' -lightRed='\033[1;31m' -orange='\033[0;33m' -nc='\033[0m' -KOTSTD='../kotstd/kt' - -if [ "$3" == "--debug" ]; then - cd ../kotstd && make clean && make debug -else - cd ../kotstd && make clean && make -fi - -if [ $? -ne 0 ]; then - echo -e "${red}Error building kotstd lib${nc}" - exit 1 -fi - -cd ../translator - -DIRECTORY="src/test/kotlin/tests" -TESTS=$( ls $DIRECTORY/*/*.txt $1) # Note that "ls $DIRECTORY/input $1" is wrong. Why? Because it's bash. - -if [ "$2" == "--proto" ]; then - TESTS=$( ls $DIRECTORY/*/proto*.txt $1) -fi -total_scripts=0 -successful_scripts=0 - -for i in $TESTS; do - TEST=`basename $i ".txt"` - MAIN="$DIRECTORY/$TEST/linked/main.c" - rm -f $DIRECTORY/$TEST/linked/* - mkdir -p $DIRECTORY/$TEST/linked - successful=1 - echo -e "${orange}test: ${TEST}${nc}" - echo "#include " >> $MAIN - echo "#include " >> $MAIN - echo "#include " >> $MAIN - - echo "int main(){" >> $MAIN - cat "$i" | while read LINE - do - echo " assert($LINE);" >> $MAIN - echo " printf(\"%s[OK]:%s $LINE\n\", \"\x1B[32m\", \"\x1B[0m\");" >> $MAIN - done - - echo "printf(\"TEST RESULT: OK\n\");" >> $MAIN - echo "return 0;}" >> $MAIN - - if [ $? -ne 0 ]; then - echo -e "${red}Error somewhere in main.c generation${nc}" - exit 1 - fi - - clang-3.6 -S -emit-llvm $DIRECTORY/$TEST/linked/main.c -o $DIRECTORY/$TEST/linked/main.ll -Wno-implicit-function-declaration - if [ $? -ne 0 ]; then - echo -e "${red}Error building main.c${nc}" - exit 1 - fi - - - cp ../kotstd/build/stdlib_x86.ll $DIRECTORY/$TEST/linked/ - if [ $? -ne 0 ]; then - echo -e "${red}Error copying ../kotstd/build/stdlib_x86.ll to ${DIRECTORY}/${TEST}/linked/${nc}" - exit 1 - fi - - if [ -f "$DIRECTORY/$TEST/$TEST.c" ] - then - clang-3.6 -S -emit-llvm "$DIRECTORY/$TEST/$TEST.c" -o $DIRECTORY/$TEST/linked/$TEST"_c.ll" -Wno-implicit-function-declaration - if [ $? -ne 0 ]; then - echo -e "${red}Error building: ${DIRECTORY}/${TEST}/linked/${TEST}_c.ll${nc}" - fi - fi - - java -jar build/libs/translator-1.0.jar -I $KOTSTD $DIRECTORY/$TEST/$TEST.kt > $DIRECTORY/$TEST/linked/$TEST.ll - - if [ $? -ne 0 ]; then - echo -e "${red}Translation error: ${DIRECTORY}/$TEST/${TEST}.kt${nc}" - successful=0 - fi - - llvm-link-3.6 -S $DIRECTORY/$TEST/linked/*.ll > $DIRECTORY/$TEST/linked/run.ll - if [ $? -ne 0 ]; then - echo -e "${red}Error linking with llvm${nc}" - successful=0 - fi - - lli-3.6 $DIRECTORY/$TEST/linked/run.ll - if [ $? -ne 0 ]; then - echo -e "${lightRed}Error running test${nc}" - successful=0 - fi - - if [ "$2" == "--once" ]; then - exit - fi - successful_scripts=$((successful_scripts+successful)) - total_scripts=$((total_scripts+1)) -done - -echo -e "Result: ${orange} [${successful_scripts}]/[${total_scripts}]" diff --git a/experiments/translator-bc/settings.gradle b/experiments/translator-bc/settings.gradle deleted file mode 100644 index fdff6ac2025..00000000000 --- a/experiments/translator-bc/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -rootProject.name = 'translator-bc' - diff --git a/experiments/translator-bc/src/main/kotlin/DefaultArguments.kt b/experiments/translator-bc/src/main/kotlin/DefaultArguments.kt deleted file mode 100644 index 4f5bfcbd9a1..00000000000 --- a/experiments/translator-bc/src/main/kotlin/DefaultArguments.kt +++ /dev/null @@ -1,39 +0,0 @@ -import com.jshmrsn.karg.Arguments -import com.jshmrsn.karg.RawArguments - -class DefaultArguments(raw: RawArguments) : Arguments(raw, name = "default") { - - val includeDir = optionalParameter( - name = "include directory", - aliasNames = listOf("include"), - shortNames = listOf('I') - ) - - val arm = optionalFlag( - name = "arm", - description = "enable arm build", - aliasNames = listOf("arm"), - default = false - ) - - val output = optionalParameter( - name = "output", - description = "output file path", - shortNames = listOf('o') - ) - - val mainClass = optionalParameter( - name = "main class", - aliasNames = listOf("main"), - default = "main", - shortNames = listOf('M') - ) - - //[TODO] files with [] or another marking - val sources = positionalArguments( - name = "sources", - description = "source files", - minCount = 1 - ) - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/main.kt b/experiments/translator-bc/src/main/kotlin/main.kt deleted file mode 100644 index 5a91b7b8633..00000000000 --- a/experiments/translator-bc/src/main/kotlin/main.kt +++ /dev/null @@ -1,30 +0,0 @@ -import com.intellij.openapi.util.Disposer -import com.jshmrsn.karg.parseArguments -import org.kotlinnative.translator.ProjectTranslator -import org.kotlinnative.translator.TranslationState -import java.io.* - -fun main(args: Array) { - // TODO make good help message (ex. is rm --help) - val arguments = parseArguments(args, ::DefaultArguments) - val disposer = Disposer.newDisposable() - val analyzedFiles = arguments.sources.toMutableList() - - if (arguments.includeDir != null) { - val libraryFiles = File(arguments.includeDir).walk().filter { !it.isDirectory }.map { it.absolutePath } - analyzedFiles.addAll(libraryFiles) - } - - val translationState = TranslationState.createTranslationState(analyzedFiles, disposer, arguments.mainClass, arguments.arm) - val code:String = ProjectTranslator( - translationState.environment.getSourceFiles(), - translationState - ).generateCode() - - if (arguments.output == null) { - println(code) - } else { - val output = File(arguments.output) - output.writeText(code) - } -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/jetbrains/kotlin/native/llvm/LLVM.def b/experiments/translator-bc/src/main/kotlin/org/jetbrains/kotlin/native/llvm/LLVM.def deleted file mode 100644 index 978549441d8..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/jetbrains/kotlin/native/llvm/LLVM.def +++ /dev/null @@ -1,29 +0,0 @@ -libName = llvmbridge - -headers = llvm-c/Core.h llvm-c/ExecutionEngine.h llvm-c/Target.h llvm-c/Analysis.h llvm-c/BitWriter.h - - -compiler = clang - -compilerOpts = -std=c99 -fPIC \ - -Wall -W -Wno-unused-parameter -Wwrite-strings -Wmissing-field-initializers \ - -pedantic -Wno-long-long -Wcovered-switch-default -Wdelete-non-virtual-dtor \ - -DNDEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS - - -linker = clang++ - -linkerOpts = -stdlib=libc++ -fPIC -fvisibility-inlines-hidden \ - -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers \ - -pedantic -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor \ - -std=c++11 \ - -DNDEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS \ - -Wl,-search_paths_first -Wl,-headerpad_max_install_names \ - -lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter \ - -lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMInterpreter \ - -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMInstrumentation -lLLVMProfileData -lLLVMTransformUtils \ - -lLLVMBitWriter -lLLVMExecutionEngine -lLLVMTarget -lLLVMAnalysis -lLLVMRuntimeDyld -lLLVMObject -lLLVMMCParser \ - -lLLVMBitReader -lLLVMMC -lLLVMCore -lLLVMSupport -lcurses -lpthread -lz -lm \ - -lffi - -excludedFunctions = diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/ProjectTranslator.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/ProjectTranslator.kt deleted file mode 100644 index 8974b5042da..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/ProjectTranslator.kt +++ /dev/null @@ -1,77 +0,0 @@ -package org.kotlinnative.translator - -import org.jetbrains.kotlin.psi.* -import org.kotlinnative.translator.codegens.ClassCodegen -import org.kotlinnative.translator.codegens.FunctionCodegen -import org.kotlinnative.translator.codegens.ObjectCodegen -import org.kotlinnative.translator.codegens.PropertyCodegen - -class ProjectTranslator(val files: List, - val state: TranslationState) { - private var codeBuilder = state.codeBuilder - - fun generateCode(): String { - with(files) { - map { addClassDeclarations(it) } - map { addObjectDeclarations(it) } - map { addFunctionDeclarations(it) } - map { addPropertyDeclarations(it) } - } - generateProjectBody() - return codeBuilder.toString() - } - - fun addFunctionDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val function = FunctionCodegen(state, variableManager, declaration, codeBuilder) - if (function.external) { - state.externalFunctions.put(function.fullName, function) - } else { - state.functions.put(function.fullName, function) - } - } - } - - fun addClassDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val codegen = ClassCodegen(state, variableManager, declaration, codeBuilder) - state.classes.put(codegen.structName, codegen) - } - } - - fun addPropertyDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val property = PropertyCodegen(state, variableManager, declaration, codeBuilder) - state.properties.put(declaration.name!!, property) - } - } - - fun addObjectDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val codegen = ObjectCodegen(state, variableManager, declaration, codeBuilder) - state.objects.put(codegen.structName, codegen) - } - } - - private fun generateProjectBody() { - with(state) { - properties.values.map { it.generate() } - objects.values.map { it.prepareForGenerate() } - classes.values.map { it.prepareForGenerate() } - objects.values.map { it.generate() } - classes.values.map { it.generate() } - externalFunctions.values.map { it.generate() } - functions.values.filter { it.isExtensionDeclaration }.map { it.generate() } - functions.values.filter { !it.isExtensionDeclaration }.map { it.generate() } - } - - if (state.mainFunction != "main") { - codeBuilder.declareEntryPoint(state.mainFunction) - } - } - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/TranslationState.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/TranslationState.kt deleted file mode 100644 index 69e475c3b96..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/TranslationState.kt +++ /dev/null @@ -1,118 +0,0 @@ -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.CompilerConfiguration -import org.jetbrains.kotlin.config.JVMConfigurationKeys -import org.jetbrains.kotlin.config.addKotlinSourceRoots -import org.jetbrains.kotlin.load.java.JvmAbi -import org.jetbrains.kotlin.native.llvm.LLVMModuleCreateWithName -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.FunctionCodegen -import org.kotlinnative.translator.codegens.ObjectCodegen -import org.kotlinnative.translator.codegens.PropertyCodegen -import org.kotlinnative.translator.exceptions.TranslationException -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.LLVMVariable -import java.util.* - - -class TranslationState -private constructor -( - val environment: KotlinCoreEnvironment, - val bindingContext: BindingContext, - val mainFunction: String, arm: Boolean -) { - var externalFunctions = HashMap() - var functions = HashMap() - var classes = HashMap() - var objects = HashMap() - var properties = HashMap() - val codeBuilder = LLVMBuilder(arm) - val extensionFunctions = HashMap>() - val globalVariableCollection = HashMap() - val llvmModule = LLVMModuleCreateWithName("main") - - init { - POINTER_ALIGN = if (arm) 4 else 8 - POINTER_SIZE = if (arm) 4 else 8 - } - - companion object { - var POINTER_ALIGN = 4 - var POINTER_SIZE = 4 - - fun createTranslationState(sources: List, disposer: Disposable, mainFunction: String, arm: Boolean = false): TranslationState { - - 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(JVMConfigurationKeys.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 - } - - } - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/VariableManager.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/VariableManager.kt deleted file mode 100644 index bb0ff4bb229..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/VariableManager.kt +++ /dev/null @@ -1,48 +0,0 @@ -package org.kotlinnative.translator - -import org.kotlinnative.translator.llvm.LLVMScope -import org.kotlinnative.translator.llvm.LLVMVariable -import org.kotlinnative.translator.llvm.types.LLVMType -import java.util.* - -class VariableManager(val globalVariableCollection: HashMap) { - - private var fileVariableCollectionTree = HashMap>>() - - private companion object UniqueGenerator { - private var unique = 0 - fun generateUniqueString() = - ".unique." + unique++ - } - - operator fun get(variableName: String): LLVMVariable? { - return fileVariableCollectionTree[variableName]?.peek()?.first ?: globalVariableCollection[variableName] - } - - operator fun contains(variableName: String): Boolean { - return (fileVariableCollectionTree.contains(variableName) && !fileVariableCollectionTree[variableName]!!.empty()) || globalVariableCollection.containsKey(variableName) - } - - fun pullOneUpwardLevelVariable(variableName: String) { - fileVariableCollectionTree[variableName]?.pop() - } - - fun pullUpwardsLevel(level: Int) { - fileVariableCollectionTree.forEach { s, stack -> while (!stack.empty() && stack.peek().second >= level) stack.pop() } - } - - fun addVariable(name: String, variable: LLVMVariable, level: Int) { - val stack = fileVariableCollectionTree.getOrDefault(name, Stack>()) - stack.push(Pair(variable, level)) - fileVariableCollectionTree.put(name, stack) - } - - fun addGlobalVariable(name: String, variable: LLVMVariable) { - globalVariableCollection.put(name, variable) - } - - fun receiveVariable(name: String, type: LLVMType, scope: LLVMScope, pointer: Int): LLVMVariable { - return LLVMVariable("managed${generateUniqueString()}.$name", type, name, scope, pointer) - } - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/BlockCodegen.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/BlockCodegen.kt deleted file mode 100644 index be04b431c66..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/BlockCodegen.kt +++ /dev/null @@ -1,1121 +0,0 @@ -package org.kotlinnative.translator.codegens - -import com.intellij.psi.PsiElement -import com.intellij.psi.impl.source.tree.LeafPsiElement -import com.intellij.psi.tree.IElementType -import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl -import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.getNextSiblingIgnoringWhitespaceAndComments -import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForReceiver -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.* -import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument -import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument -import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument -import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCallImpl -import org.jetbrains.kotlin.resolve.constants.TypedCompileTimeConstant -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.* -import java.lang.RuntimeException -import java.lang.UnsupportedOperationException -import java.rmi.UnexpectedException -import kotlin.comparisons.compareBy - - -abstract class BlockCodegen(val state: TranslationState, - val variableManager: VariableManager, - val codeBuilder: LLVMBuilder) { - - val topLevelScopeDepth = 2 - var returnType: LLVMVariable? = null - - fun evaluateCodeBlock(expr: PsiElement?, - startLabel: LLVMLabel? = null, - nextIterationLabel: LLVMLabel? = null, - breakLabel: LLVMLabel? = null, - scopeDepth: Int = 0, - isBlock: Boolean = true) { - codeBuilder.markWithLabel(startLabel) - if (isBlock) { - expressionWalker(expr, breakLabel, scopeDepth) - } else { - var result = evaluateExpression(expr, scopeDepth) - ?: throw UnexpectedException("Can't evaluate expression " + expr!!.text) - when (result) { - is LLVMVariable -> { - if (result.type is LLVMReferenceType) { - generateReferenceReturn(result) - } else { - result = codeBuilder.receivePointedArgument(result, requirePointer = 0) - codeBuilder.addReturnOperator(result) - } - } - else -> codeBuilder.addAnyReturn(result.type, result.toString()) - } - - } - codeBuilder.addUnconditionalJump(nextIterationLabel ?: return) - } - - fun evaluateExpression(expr: PsiElement?, - scopeDepth: Int): LLVMSingleValue? = - when (expr) { - is KtBlockExpression -> { - expressionWalker(expr.lBrace, breakLabel = null, scopeDepth = scopeDepth + 1) - null - } - is KtBinaryExpression -> evaluateBinaryExpression(expr, scopeDepth) - is KtPostfixExpression -> evaluatePostfixExpression(expr, scopeDepth) - is KtPrefixExpression -> evaluatePrefixExpression(expr, scopeDepth) - is KtConstantExpression -> evaluateConstantExpression(expr) - is KtCallExpression -> evaluateCallExpression(expr, scopeDepth) - is KtWhenExpression -> evaluateWhenExpression(expr, scopeDepth) - is KtCallableReferenceExpression -> evaluateCallableReferenceExpression(expr) - is KtDotQualifiedExpression -> evaluateDotExpression(expr, scopeDepth) - is KtReferenceExpression -> evaluateReferenceExpression(expr, scopeDepth) - is KtIfExpression -> evaluateIfOperator(expr, scopeDepth + 1) - is KtStringTemplateExpression -> evaluateStringTemplateExpression(expr) - is KtReturnExpression -> evaluateReturnInstruction(expr.firstChild, scopeDepth) - is KtThisExpression -> evaluateThisExpression() - is KtSafeQualifiedExpression -> evaluateSafeAccessExpression(expr, scopeDepth) - is KtParenthesizedExpression -> evaluateExpression(expr.expression, scopeDepth) - null -> null - is PsiElement -> evaluatePsiElement(expr, scopeDepth) - else -> throw UnsupportedOperationException() - } - - fun evaluateConstructorDelegationReferenceExpression(expr: KtConstructorDelegationReferenceExpression, - structCodegen: StructCodegen, - constructorArguments: List, - scopeDepth: Int): LLVMSingleValue? { - val targetCall = state.bindingContext.get(BindingContext.CALL, expr) - val names = parseValueArguments(targetCall!!.valueArguments, scopeDepth) - val args = codeBuilder.loadArgsIfRequired(names, constructorArguments) - return evaluateConstructorCallExpression( - LLVMVariable(structCodegen.structName + LLVMType.mangleFunctionArguments(names), - structCodegen.type, - scope = LLVMVariableScope()), - args) - } - - fun evaluateMemberMethodOrField(receiver: LLVMVariable, - selectorName: String, - scopeDepth: Int, - call: PsiElement? = null): LLVMSingleValue? { - val type = receiver.type as LLVMReferenceType - val clazz = resolveClassOrObjectLocation(type) - ?: throw UnexpectedException(type.toString() + receiver.toString()) - val field = clazz.fieldsIndex[selectorName] - - if (field != null) { - return evaluateClassField(receiver, field) - } else { - return evaluateMemberMethod(receiver, clazz, scopeDepth, call as? KtCallExpression - ?: throw UnexpectedException("$receiver:$selectorName")) - } - } - - fun addPrimitiveBinaryOperation(operator: IElementType, - firstOp: LLVMSingleValue, - secondOp: LLVMSingleValue, - referenceName: KtSimpleNameExpression? = null): LLVMVariable { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - val secondNativeOp = codeBuilder.receiveNativeValue(secondOp) - - val llvmExpression = when (operator) { - KtTokens.PLUS -> firstOp.type.operatorPlus(firstNativeOp, secondNativeOp) - KtTokens.MINUS -> firstOp.type.operatorMinus(firstNativeOp, secondNativeOp) - KtTokens.MUL -> firstOp.type.operatorTimes(firstNativeOp, secondNativeOp) - KtTokens.DIV -> firstOp.type.operatorDiv(firstNativeOp, secondNativeOp) - KtTokens.LT -> firstOp.type.operatorLt(firstNativeOp, secondNativeOp) - KtTokens.GT -> firstOp.type.operatorGt(firstNativeOp, secondNativeOp) - KtTokens.LTEQ -> firstOp.type.operatorLeq(firstNativeOp, secondNativeOp) - KtTokens.GTEQ -> firstOp.type.operatorGeq(firstNativeOp, secondNativeOp) - KtTokens.EQEQ -> - if (LLVMType.isReferredType(firstOp.type) && LLVMType.isReferredType(secondOp.type)) { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorEq(firstPointedArgument, secondPointedArgument) - } else - firstOp.type.operatorEq(firstNativeOp, secondNativeOp) - KtTokens.EQEQEQ -> { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorEq(firstPointedArgument, secondPointedArgument) - } - KtTokens.EXCLEQ -> { - if (LLVMType.isReferredType(firstOp.type) && LLVMType.isReferredType(secondOp.type)) { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorNeq(firstPointedArgument, secondPointedArgument) - } else - firstOp.type.operatorNeq(firstNativeOp, secondNativeOp) - } - KtTokens.EXCLEQEQEQ -> { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorNeq(firstPointedArgument, secondPointedArgument) - } - KtTokens.EQ -> { - if (secondOp.type is LLVMNullType) { - codeBuilder.storeNull(firstOp as LLVMVariable) - return firstOp - } - - val result = firstOp as LLVMVariable - val sourceArgument: LLVMSingleValue - if ((firstOp.pointer == 2) && secondOp.type.isPrimitive && (secondOp.pointer == 0)) { - sourceArgument = codeBuilder.getNewVariable(secondOp.type, pointer = 1) - codeBuilder.allocStaticVar(sourceArgument, asValue = true) - codeBuilder.storeVariable(sourceArgument, secondOp) - } else { - sourceArgument = if (result.pointer == secondOp.pointer + 1) secondOp else secondNativeOp - } - - codeBuilder.storeVariable(result, sourceArgument) - return result - } - else -> addPrimitiveReferenceOperationByName(referenceName!!.getReferencedName(), firstOp, secondNativeOp) - } - return codeBuilder.saveExpression(llvmExpression) - } - - private fun expressionWalker(expr: PsiElement?, - breakLabel: LLVMLabel?, - scopeDepth: Int) { - when (expr) { - is KtBlockExpression -> expressionWalker(expr.lBrace, breakLabel, scopeDepth + 1) - is KtProperty -> evaluateValExpression(expr, scopeDepth) - is KtPostfixExpression -> evaluatePostfixExpression(expr, scopeDepth) - is KtBinaryExpression -> evaluateBinaryExpression(expr, scopeDepth) - is KtCallExpression -> evaluateCallExpression(expr, scopeDepth) - is KtDoWhileExpression -> evaluateDoWhileExpression(expr, scopeDepth + 1) - is KtBreakExpression -> evaluateBreakExpression(breakLabel!!) - is KtDotQualifiedExpression -> evaluateDotExpression(expr, scopeDepth) - is KtWhenExpression -> evaluateWhenExpression(expr, scopeDepth) - is PsiElement -> evaluateExpression(expr.firstChild, scopeDepth + 1) - null -> { - variableManager.pullUpwardsLevel(scopeDepth) - return - } - else -> UnsupportedOperationException() - } - - expressionWalker(expr.getNextSiblingIgnoringWhitespaceAndComments(), breakLabel, scopeDepth) - } - - private fun evaluateBreakExpression(breakLabel: LLVMLabel) = - codeBuilder.addUnconditionalJump(breakLabel) - - private fun evaluateDoWhileExpression(expr: KtDoWhileExpression, scopeDepth: Int) = - executeWhileBlock(expr.condition!!, expr.body!!, scopeDepth, checkConditionBeforeExecute = false) - - private fun evaluateThisExpression(): LLVMSingleValue? = - variableManager["this"] - - fun evaluateStringTemplateExpression(expr: KtStringTemplateExpression): LLVMSingleValue? { - val receiveValue = state.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, expr) as TypedCompileTimeConstant - val value = receiveValue.getValue(receiveValue.type) ?: return null - val variable = - variableManager.receiveVariable(".str", - LLVMStringType(value.toString().length, isLoaded = false), - LLVMVariableScope(), - pointer = 0) - - codeBuilder.addStringConstant(variable, value.toString()) - return variable - } - - private fun evaluateCallableReferenceExpression(expr: KtCallableReferenceExpression): LLVMSingleValue? { - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)!!.type!! - val result = LLVMInstanceOfStandardType(expr.callableReference.text, kotlinType, LLVMVariableScope(), state) - return LLVMVariable(result.label + (result.type as LLVMFunctionType).mangleArgs(), - result.type, - result.kotlinName, - result.scope, - result.pointer) - } - - private fun evaluateSafeAccessExpression(expr: KtSafeQualifiedExpression, - scopeDepth: Int): LLVMSingleValue? { - val receiver = expr.receiverExpression - val selector = expr.selectorExpression - - val left = evaluateExpression(receiver, scopeDepth)!! - val loadedLeft = codeBuilder.receiveNativeValue(left) - val expectedType = LLVMMapStandardType(state.bindingContext.get(BindingContext.EXPECTED_EXPRESSION_TYPE, expr)!!, state) as LLVMReferenceType - - val result = codeBuilder.getNewVariable(expectedType, pointer = 2) - codeBuilder.allocStaticVar(result, pointer = true) - - val condition = left.type.operatorEq(loadedLeft, LLVMVariable("", LLVMNullType())) - val nullLabel = codeBuilder.getNewLabel(prefix = "safe.access") - val notNullLabel = codeBuilder.getNewLabel(prefix = "safe.access") - val endLabel = codeBuilder.getNewLabel(prefix = "safe.access") - - val conditionResult = codeBuilder.saveExpression(condition) - codeBuilder.addCondition(conditionResult, nullLabel, notNullLabel) - - codeBuilder.markWithLabel(nullLabel) - codeBuilder.storeNull(result) - codeBuilder.addUnconditionalJump(endLabel) - - codeBuilder.markWithLabel(notNullLabel) - val right = evaluateDotBody(receiver, selector!!, scopeDepth) as LLVMVariable - val rightLoaded = codeBuilder.loadAndGetVariable(right) - codeBuilder.storeVariable(result, rightLoaded) - codeBuilder.addUnconditionalJump(endLabel) - - codeBuilder.markWithLabel(endLabel) - - return result - } - - private fun evaluateDotExpression(expr: KtDotQualifiedExpression, - scopeDepth: Int): LLVMSingleValue? { - val receiverExpr = expr.receiverExpression - val selectorExpr = expr.selectorExpression!! - - return evaluateDotBody(receiverExpr, selectorExpr, scopeDepth) - } - - private fun evaluateDotBody(receiverExpr: KtExpression, - selectorExpr: KtExpression, - scopeDepth: Int): LLVMSingleValue? { - var receiverName = receiverExpr.text - var receiver = when (receiverExpr) { - is KtCallExpression, - is KtPrefixExpression, - is KtPostfixExpression, - is KtBinaryExpression -> evaluateExpression(receiverExpr, scopeDepth) as LLVMVariable - is KtDotQualifiedExpression -> { - val codegen = resolveCodegenByName(receiverName) - if (codegen != null) null else evaluateExpression(receiverExpr, scopeDepth) as LLVMVariable - } - is KtNameReferenceExpression -> { - val referenceContext = state.bindingContext.get(BindingContext.REFERENCE_TARGET, receiverExpr) - receiverName = referenceContext!!.fqNameSafe.asString() - when (referenceContext) { - is PropertyDescriptorImpl -> { - val receiverThis = variableManager["this"]!! - evaluateMemberMethodOrField(receiverThis, receiverName, topLevelScopeDepth, call = null)!! as LLVMVariable - } - else -> variableManager[receiverName] - } - } - else -> variableManager[receiverName] - } - - val isExtension = selectorExpr is KtCallExpression && - selectorExpr.getFunctionResolvedCallWithAssert(state.bindingContext).extensionReceiver != null - - if (isExtension) { - return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as KtCallExpression, scopeDepth) - } - - val selectorName = when (selectorExpr) { - is KtNameReferenceExpression -> state.bindingContext.get(BindingContext.REFERENCE_TARGET, selectorExpr) - ?.fqNameSafe?.asString() ?: selectorExpr.text - else -> selectorExpr.text - } - - if (receiver != null) { - if (receiver.pointer == 2) { - receiver = codeBuilder.loadAndGetVariable(receiver) - } - when (receiver.type) { - is LLVMReferenceType -> return evaluateMemberMethodOrField(receiver, selectorName, scopeDepth, selectorExpr) - else -> return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as KtCallExpression, scopeDepth) - } - } - - val clazz = resolveCodegen(receiverExpr) - ?: return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as? KtCallExpression - ?: throw UnexpectedException("Failed evaluate dot expression: " + selectorExpr.text), scopeDepth) - return evaluateClassScopedDotExpression(clazz, selectorExpr, scopeDepth, receiver) - } - - private fun evaluateExtensionExpression(receiver: KtExpression, - receiverExpressionArgument: LLVMVariable?, - selector: KtCallExpression, - scopeDepth: Int): LLVMSingleValue? { - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, receiver)!!.type!! - val receiverType = LLVMMapStandardType(kotlinType, state) - - val targetFunction = state.bindingContext.get(BindingContext.CALL, selector.calleeExpression) - val candidateDescriptor = state.bindingContext.get(BindingContext.RESOLVED_CALL, targetFunction)!!.candidateDescriptor - val targetFunctionName = candidateDescriptor.fqNameSafe.convertToNativeName() - val nameWithoutMangling = candidateDescriptor.name.asString().replace(Regex("""(.?)"""), "") - val packageNameFirst = targetFunction?.calleeExpression?.getContainingKtFile()?.packageFqName?.convertToNativeName().orEmpty() - val packageNameSecond = candidateDescriptor.containingDeclaration.fqNameSafe.convertToNativeName() - - val names = parseArgList(selector, scopeDepth) - val type = LLVMType.mangleFunctionArguments(names) - - val constructedFunctionName = receiverType.mangle + nameWithoutMangling.addBeforeIfNotEmpty(".") + type - val targetExtension = state.extensionFunctions[receiverType.toString()] - - val extensionCodegen = targetExtension?.get(packageNameFirst.addAfterIfNotEmpty(".") + constructedFunctionName) ?: - targetExtension?.get(packageNameSecond.addAfterIfNotEmpty(".") + constructedFunctionName) ?: - targetExtension?.get(targetFunctionName) - ?: throw UnexpectedException(constructedFunctionName) - val receiverExpression = receiverExpressionArgument ?: evaluateExpression(receiver, scopeDepth + 1)!! - - val args = mutableListOf(codeBuilder.receivePointedArgument(receiverExpression, requirePointer = if (receiverType is LLVMReferenceType) 1 else 0)) - args.addAll(codeBuilder.loadArgsIfRequired(names, extensionCodegen.args)) - return evaluateFunctionCallExpression(LLVMVariable(extensionCodegen.fullName, extensionCodegen.returnType!!.type, scope = LLVMVariableScope()), args) - } - - private fun evaluateClassScopedDotExpression(clazz: StructCodegen, - selector: KtExpression, - scopeDepth: Int, - receiver: LLVMVariable? = null): LLVMSingleValue? = - when (selector) { - is KtCallExpression -> evaluateCallExpression(selector, scopeDepth, clazz, caller = receiver) - is KtReferenceExpression -> evaluateReferenceExpression(selector, scopeDepth, clazz) - else -> throw UnsupportedOperationException() - } - - private fun evaluateClassField(receiver: LLVMVariable, - field: LLVMClassVariable): LLVMVariable { - val result = codeBuilder.getNewVariable(field.type, pointer = field.pointer + 1) - codeBuilder.loadClassField(result, receiver, field.offset) - return result - } - - private fun evaluateMemberMethod(receiver: LLVMVariable, - clazz: StructCodegen, - scopeDepth: Int, - call: KtCallExpression): LLVMSingleValue? { - val resolvedCall = call.getCall(state.bindingContext)!!.getResolvedCallWithAssert(state.bindingContext) - val functionDescriptor = resolvedCall.candidateDescriptor - val functionArguments = functionDescriptor.valueParameters.map { it -> it.type }.map { LLVMMapStandardType(it, state) } - val methodName = functionDescriptor.fqNameSafe.asString() + LLVMType.mangleFunctionTypes(functionArguments) - - val method = clazz.methods[methodName] ?: throw UnexpectedException(methodName) - val returnType = method.returnType!!.type - - val arguments = resolvedCall.valueArguments.toSortedMap(compareBy { it.index }).values - val substitutionArguments = parseArgumentsWithDefaultValues(arguments, method.defaultValues, scopeDepth) - val loadedArgs = codeBuilder.loadArgsIfRequired(substitutionArguments, method.args) - - val callArgs = mutableListOf(receiver) - callArgs.addAll(loadedArgs) - - return evaluateFunctionCallExpression(LLVMVariable(methodName, returnType, scope = LLVMVariableScope()), callArgs) - } - - private fun resolveClassOrObjectLocation(type: LLVMReferenceType): StructCodegen? { - val typeLocations = type.type.split('.') - val currentLocation = StringBuilder() - var codegen: ClassCodegen? = null - var currentIndex = 0 - - do { - currentLocation.append((if (currentIndex > 0) "." else "") + typeLocations[currentIndex]) - if (state.classes.containsKey(currentLocation.toString())) { - codegen = state.classes[currentLocation.toString()] - } else if (state.objects.containsKey(currentLocation.toString())) { - return state.objects[currentLocation.toString()] - } - currentIndex++ - } while ((currentIndex < typeLocations.size) && (codegen == null)) - - while (currentIndex < typeLocations.size - 1) { - currentLocation.append('.' + typeLocations[currentIndex]) - currentIndex++ - codegen = codegen?.nestedClasses?.get(currentLocation.toString()) - } - - if (codegen?.companionObjectCodegen != null && type.type == codegen?.companionObjectCodegen?.structName) { - return codegen?.companionObjectCodegen!! - } - - return if (codegen?.structName == type.type) codegen else codegen?.nestedClasses?.get(type.type) - } - - private fun evaluateArrayAccessExpression(expr: KtArrayAccessExpression, - scope: Int): LLVMSingleValue? { - val arrayNameVariable = evaluateExpression(expr.arrayExpression, scope) as LLVMVariable - return when (arrayNameVariable.type) { - is LLVMReferenceType -> { - val callMaker = state.bindingContext.get(BindingContext.CALL, expr) - when (callMaker!!.callType) { - Call.CallType.ARRAY_SET_METHOD, - Call.CallType.ARRAY_GET_METHOD -> { - val arrayActionType = if (callMaker.callType == Call.CallType.ARRAY_SET_METHOD) "set" else "get" - val explicitReceiver = callMaker.explicitReceiver as ExpressionReceiver - val receiver = evaluateExpression(explicitReceiver.expression, scope)!! as LLVMVariable - val pureReceiver = codeBuilder.receivePointedArgument(receiver, requirePointer = 1) - - val targetClassName = (receiver.type as LLVMReferenceType).type - - val names = parseValueArguments(callMaker.valueArguments, scope) - val methodName = "$targetClassName.$arrayActionType${LLVMType.mangleFunctionArguments(names)}" - val clazz = resolveClassOrObjectLocation(receiver.type) - ?: throw UnexpectedException(receiver.type.toString()) - - val method = clazz.methods[methodName] ?: throw UnexpectedException(expr.text) - val returnType = method.returnType!!.type - - val loadedArgs = codeBuilder.loadArgsIfRequired(names, method.args) - val callArgs = mutableListOf(pureReceiver) - callArgs.addAll(loadedArgs) - - return evaluateFunctionCallExpression(LLVMVariable(methodName, returnType, scope = LLVMVariableScope()), callArgs) - } - else -> throw UnexpectedException("Unknown array access method") - } - } - else -> { - val arrayIndex = evaluateConstantExpression(expr.indexExpressions.first() as KtConstantExpression) - val arrayReceivedVariable = codeBuilder.loadAndGetVariable(arrayNameVariable) - val arrayElementType = (arrayNameVariable.type as LLVMArray).arrayElementType - val arrayElement = codeBuilder.getNewVariable(arrayElementType, pointer = 1) - codeBuilder.loadVariableOffset(arrayElement, arrayReceivedVariable, arrayIndex) - arrayElement - } - } - } - - private fun evaluateReferenceExpression(expr: KtReferenceExpression, - scopeDepth: Int, - classScope: StructCodegen? = null): LLVMSingleValue? { - val targetName = state.bindingContext.get(BindingContext.REFERENCE_TARGET, expr)?.fqNameSafe?.convertToNativeName() - return when { - expr is KtArrayAccessExpression -> evaluateArrayAccessExpression(expr, scopeDepth + 1) - isEnumClassField(expr, classScope) -> resolveEnumClassField(expr, classScope) - (targetName != null) && variableManager.contains(targetName) -> variableManager[targetName] - ((expr is KtNameReferenceExpression) && (classScope != null)) -> - evaluateNameReferenceExpression(targetName!!, classScope.parentCodegen!! as ClassCodegen) - else -> { - val clazz = classScope ?: resolveCodegen(expr) - val receiver = if (clazz != null) variableManager[clazz.structName] ?: variableManager["this"] else variableManager["this"] - targetName ?: throw UnexpectedException("Can't find target in reference expression " + expr.firstChild.text) - evaluateMemberMethodOrField(receiver ?: throw UnexpectedException(targetName), targetName, topLevelScopeDepth) - } - } - } - - private fun evaluateNameReferenceExpression(fieldName: String, - classScope: ClassCodegen): LLVMSingleValue? { - val companionObject = classScope.companionObjectCodegen!! - val field = companionObject.fieldsIndex[fieldName] ?: return null - val receiver = variableManager[companionObject.structName]!! - val result = codeBuilder.getNewVariable(field.type, pointer = 1) - - codeBuilder.loadClassField(result, receiver, field.offset) - return result - } - - private fun resolveEnumClassField(expr: KtReferenceExpression, - classScope: StructCodegen?): LLVMSingleValue = - (classScope ?: resolveCodegen(expr))!!.enumFields[expr.text]!! - - private fun isEnumClassField(expr: KtReferenceExpression, - classScope: StructCodegen?): Boolean = - (classScope ?: resolveCodegen(expr))?.enumFields?.containsKey(expr.text) ?: false - - private fun resolveCodegen(expr: KtExpression): StructCodegen? { - val type = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)?.type - ?: expr.getQualifiedExpressionForReceiver()?.getType(state.bindingContext) - - val name = type?.constructor?.declarationDescriptor?.fqNameSafe?.asString() ?: throw UnexpectedException(expr.text) - - return resolveCodegenByName(name) - } - - private fun resolveCodegenByName(name: String): StructCodegen? = - resolveClassOrObjectLocation(LLVMReferenceType(name, prefix = "class")) - - private fun evaluateCallExpression(expr: KtCallExpression, - scopeDepth: Int, - classScope: StructCodegen? = null, - caller: LLVMVariable? = null): LLVMSingleValue? { - var names = parseArgList(expr, scopeDepth) - val targetFunction = state.bindingContext.get(BindingContext.CALL, expr.calleeExpression) - var resolvedCall = state.bindingContext.get(BindingContext.RESOLVED_CALL, targetFunction) - if (resolvedCall is VariableAsFunctionResolvedCallImpl) { - resolvedCall = resolvedCall.variableCall - } - - val functionDescriptor = resolvedCall!!.candidateDescriptor - val targetFunctionName = functionDescriptor.fqNameSafe.convertToNativeName() - val externalFunctionName = functionDescriptor.name.asString() - val arguments = resolvedCall.valueArguments.toSortedMap(compareBy { it.index }).values - - val external = state.externalFunctions.containsKey(externalFunctionName) - val functionArguments = functionDescriptor.valueParameters.map { it -> it.type }.map { LLVMMapStandardType(it, state) } - val function = "$targetFunctionName${if (!external) LLVMType.mangleFunctionTypes(functionArguments) else ""}" - - if (function in state.functions || externalFunctionName in state.externalFunctions) { - val descriptor = state.functions[function] ?: state.externalFunctions[externalFunctionName]!! - names = parseArgumentsWithDefaultValues(arguments, descriptor.defaultValues, scopeDepth) - val args = codeBuilder.loadArgsIfRequired(names, descriptor.args) - return evaluateFunctionCallExpression(LLVMVariable(descriptor.name, descriptor.returnType!!.type, scope = LLVMVariableScope()), args) - } - - if (targetFunctionName in state.classes || classScope?.structName == targetFunctionName) { - val descriptor = state.classes[targetFunctionName] ?: classScope ?: return null - val detectedConstructor = LLVMType.mangleFunctionTypes(functionArguments) - val args = codeBuilder.loadArgsIfRequired(names, descriptor.constructorFields[detectedConstructor]!!) - return evaluateConstructorCallExpression(LLVMVariable(descriptor.structName + detectedConstructor, descriptor.type, scope = LLVMVariableScope()), args) - } - - if (targetFunctionName in variableManager) { - val type = variableManager[targetFunctionName]!!.type as LLVMFunctionType - val args = codeBuilder.loadArgsIfRequired(names, type.arguments) - return evaluateFunctionCallExpression(LLVMVariable(targetFunctionName, type.returnType.type, scope = LLVMRegisterScope()), args) - } - - val nestedConstructor = classScope?.nestedClasses?.get(expr.calleeExpression!!.text) - if (nestedConstructor != null) { - val args = codeBuilder.loadArgsIfRequired(names, nestedConstructor.constructorFields[nestedConstructor.primaryConstructorIndex]!!) - return evaluateConstructorCallExpression(LLVMVariable(nestedConstructor.structName, nestedConstructor.type, scope = LLVMVariableScope()), args) - } - - val containingClass = resolveContainingClass(expr) ?: return null - val method = containingClass.methods[function] ?: throw RuntimeException("Cannot find function $targetFunctionName") - val args = mutableListOf() - - if (caller != null) { - args.add(caller) - } else if (containingClass.structName in variableManager) { - args.add(variableManager[containingClass.structName]!!) - } else { - args.add(variableManager["this"]!!) - } - - args.addAll(codeBuilder.loadArgsIfRequired(names, method.args)) - - return evaluateFunctionCallExpression(LLVMVariable(method.fullName, method.returnType?.type ?: LLVMVoidType(), scope = LLVMVariableScope()), args) - } - - private fun resolveContainingClass(expr: KtElement): StructCodegen? { - val name = expr.getResolvedCallWithAssert(state.bindingContext).dispatchReceiver?.type?.constructor?.declarationDescriptor?.fqNameSafe?.asString() ?: return null - return resolveCodegenByName(name) - } - - private fun evaluateFunctionCallExpression(function: LLVMVariable, - names: List): LLVMSingleValue? { - val returnType = function.type - when (returnType) { - is LLVMVoidType -> { - codeBuilder.addLLVMCodeToLocalPlace(LLVMCall(LLVMVoidType(), function.toString(), names).toString()) - return null - } - is LLVMReferenceType -> { - val returnVar = codeBuilder.getNewVariable(returnType, pointer = 2) - codeBuilder.allocStaticVar(returnVar, pointer = true) - - val args = mutableListOf(returnVar) - args.addAll(names) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMCall(LLVMVoidType(), function.toString(), args).toString()) - if (returnVar.pointer == 2) { - return returnVar - } else { - return codeBuilder.loadAndGetVariable(returnVar) - } - } - else -> { - val result = codeBuilder.saveExpression(LLVMCall(returnType, function.toString(), names)) - - val resultPtr = codeBuilder.getNewVariable(returnType, pointer = 1) - codeBuilder.allocStackVar(resultPtr, pointer = true) - codeBuilder.storeVariable(resultPtr, result) - return resultPtr - } - } - } - - private fun evaluateConstructorCallExpression(function: LLVMVariable, - names: List): LLVMSingleValue? { - val store = codeBuilder.getNewVariable(function.type, pointer = 1) - codeBuilder.allocStaticVar(store, pointer = true) - - val result = codeBuilder.getNewVariable(function.type, pointer = 2) - codeBuilder.allocStackVar(result, pointer = true) - codeBuilder.storeVariable(result, store) - - val args = mutableListOf(store) - args.addAll(names) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMCall( - LLVMVoidType(), - function.toString(), - args - ).toString()) - - return result - } - - private fun parseArgList(expr: KtCallExpression, - scopeDepth: Int): List = - parseValueArguments(expr.getValueArgumentsInParentheses(), scopeDepth) - - private fun parseValueArguments(args: List, scopeDepth: Int): List = - args.map { evaluateExpression(it.getArgumentExpression(), scopeDepth) as LLVMSingleValue } - - private fun parseArgumentsWithDefaultValues(args: MutableCollection, defaultValues: List, scopeDepth: Int): List = - args.mapIndexed(fun(i: Int, value: ResolvedValueArgument): LLVMSingleValue { - return when (value) { - is DefaultValueArgument -> evaluateExpression(defaultValues[i], scopeDepth)!! - is ExpressionValueArgument -> evaluateExpression((value.valueArgument as KtValueArgument).getArgumentExpression()!!, scopeDepth)!! - else -> throw UnexpectedException("Wrong parser argument") - } - }).toList() - - private fun evaluateBinaryExpression(expr: KtBinaryExpression, - scopeDepth: Int): LLVMVariable? { - val operator = expr.operationToken - - if (operator == KtTokens.ELVIS) { - return evaluateElvisOperator(expr, scopeDepth) - } - - val left = evaluateExpression(expr.left, scopeDepth) - if (expr.left is KtArrayAccessExpression) { - val callMaker = state.bindingContext.get(BindingContext.CALL, expr.left) - if (callMaker!!.callType == Call.CallType.ARRAY_SET_METHOD) { - return left as LLVMVariable? - } - } - - left ?: throw UnsupportedOperationException("Wrong binary expression: ${expr.text}") - val right = evaluateExpression(expr.right, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression: ${expr.text}") - - return addPrimitiveBinaryOperation(operator, left, right, expr.operationReference) - } - - private fun evaluatePostfixExpression(expr: KtPostfixExpression, - scopeDepth: Int): LLVMSingleValue? { - val operator = expr.operationToken - val left = evaluateExpression(expr.baseExpression, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression: ${expr.text}") - return addPrimitivePostfixOperation(operator, left as LLVMVariable) - } - - private fun evaluatePrefixExpression(expr: KtPrefixExpression, - scopeDepth: Int): LLVMSingleValue? { - val operator = expr.operationToken - val left = evaluateExpression(expr.baseExpression, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression") - return addPrimitivePrefixOperation(operator, left) - } - - private fun addPrimitivePostfixOperation(operator: IElementType?, - firstOp: LLVMVariable): LLVMSingleValue? = - when (operator) { - KtTokens.PLUSPLUS, KtTokens.MINUSMINUS -> { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - val oldValue = codeBuilder.getNewVariable(firstOp.type, firstOp.pointer) - codeBuilder.allocStackVar(oldValue, asValue = true) - codeBuilder.copyVariable(firstOp, oldValue) - - val llvmExpression = when (operator) { - KtTokens.PLUSPLUS -> firstOp.type.operatorInc(firstNativeOp) - KtTokens.MINUSMINUS -> firstOp.type.operatorDec(firstNativeOp) - else -> throw IllegalAccessError() - } - - val resultOp = codeBuilder.saveExpression(llvmExpression) - codeBuilder.storeVariable(firstOp, resultOp) - oldValue - } - KtTokens.EXCLEXCL -> { - var result = firstOp - val nullLabel = codeBuilder.getNewLabel(prefix = "nullCheck") - val notNullLabel = codeBuilder.getNewLabel(prefix = "nullCheck") - val nullCheck = codeBuilder.nullCheck(firstOp) - codeBuilder.addCondition(nullCheck, nullLabel, notNullLabel) - codeBuilder.markWithLabel(nullLabel) - codeBuilder.addExceptionCall("KotlinNullPointerException") - codeBuilder.addUnconditionalJump(notNullLabel) - codeBuilder.markWithLabel(notNullLabel) - if (firstOp.type.isPrimitive) { - result = codeBuilder.receivePointedArgument(firstOp, requirePointer = 0) as LLVMVariable - } - result - } - else -> throw UnsupportedOperationException() - } - - - private fun addPrimitivePrefixOperation(operator: IElementType?, - firstOp: LLVMSingleValue): LLVMSingleValue? = - when (operator) { - KtTokens.MINUS, - KtTokens.PLUS -> addPrimitiveBinaryOperation(operator!!, LLVMConstant("0", firstOp.type), firstOp) - KtTokens.EXCL -> { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - val llvmExpression = addPrimitiveReferenceOperationByName("xor", LLVMConstant("true", LLVMBooleanType()), firstNativeOp) - codeBuilder.saveExpression(llvmExpression) - } - else -> throw UnsupportedOperationException() - } - - - private fun evaluateElvisOperator(expr: KtBinaryExpression, - scopeDepth: Int): LLVMVariable { - val left = evaluateExpression(expr.left, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression") - val lptr = codeBuilder.loadAndGetVariable(left as LLVMVariable) - - val condition = lptr.type.operatorEq(lptr, LLVMVariable("", LLVMNullType())) - - val conditionResult = codeBuilder.saveExpression(condition) - - val notNull = codeBuilder.getNewLabel(prefix = "elvis") - val endLabel = codeBuilder.getNewLabel(prefix = "elvis") - - codeBuilder.addCondition(conditionResult, notNull, endLabel) - - codeBuilder.markWithLabel(notNull) - var right = evaluateExpression(expr.right, scopeDepth + 1) - if (right != null) { - right = codeBuilder.loadAndGetVariable(right as LLVMVariable) - codeBuilder.storeVariable(left, right) - } - - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(endLabel) - - return left - } - - private fun addPrimitiveReferenceOperationByName(operator: String, - firstOp: LLVMSingleValue, - secondNativeOp: LLVMSingleValue): LLVMExpression { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - - return when (operator) { - "||", - "or" -> firstNativeOp.type.operatorOr(firstNativeOp, secondNativeOp) - "xor" -> firstNativeOp.type.operatorXor(firstNativeOp, secondNativeOp) - "&&", - "and" -> firstNativeOp.type.operatorAnd(firstNativeOp, secondNativeOp) - "%" -> firstNativeOp.type.operatorMod(firstNativeOp, secondNativeOp) - "shl" -> firstNativeOp.type.operatorShl(firstNativeOp, codeBuilder.convertVariableToType(secondNativeOp, firstNativeOp.type)) - "shr" -> firstNativeOp.type.operatorShr(firstNativeOp, codeBuilder.convertVariableToType(secondNativeOp, firstNativeOp.type)) - "ushr" -> firstNativeOp.type.operatorUshr(firstNativeOp, codeBuilder.convertVariableToType(secondNativeOp, firstNativeOp.type)) - "+=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorPlus(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - "-=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorMinus(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - "*=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorTimes(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - "%=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorMod(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - ".." -> { - val descriptor = state.classes["kotlin.ranges.${firstOp.type.mangle}Range"] - val arguments = listOf(firstOp, secondNativeOp) - val detectedConstructor = LLVMType.mangleFunctionTypes(arguments.map { it.type }) - val result = evaluateConstructorCallExpression(LLVMVariable(descriptor!!.structName + detectedConstructor, descriptor.type, scope = LLVMVariableScope()), arguments) - return LLVMExpression(result!!.type, "load ${descriptor.type}** $result, align ${descriptor.type.align}", pointer = 1) - } - else -> throw UnsupportedOperationException("Unknown binary operator: $operator(${firstNativeOp.type}, ${secondNativeOp.type})") - } - } - - private fun evaluateConstantExpression(expr: KtConstantExpression): LLVMConstant { - val expressionKotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)!!.type!! - val expressionValue = state.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, expr)?.getValue(expressionKotlinType) - val type = LLVMMapStandardType(expressionKotlinType, state) - return LLVMConstant(expressionValue?.toString().orEmpty(), type, pointer = 0) - } - - private fun evaluatePsiElement(element: PsiElement, - scopeDepth: Int): LLVMSingleValue? = - when (element) { - is LeafPsiElement -> evaluateLeafPsiElement(element, scopeDepth) - is KtConstantExpression -> evaluateConstantExpression(element) - else -> null - } - - - private fun evaluateLeafPsiElement(element: LeafPsiElement, - scopeDepth: Int): LLVMVariable? { - return when (element.elementType) { - KtTokens.RETURN_KEYWORD -> evaluateReturnInstruction(element, scopeDepth) - KtTokens.IF_KEYWORD -> evaluateIfOperator(element.context as KtIfExpression, scopeDepth, isExpression = false) - KtTokens.WHILE_KEYWORD -> evaluateWhileOperator(element.context as KtWhileExpression, scopeDepth) - KtTokens.FOR_KEYWORD -> evaluateForOperator(element.context as KtForExpression, scopeDepth) - else -> null - } - } - - private fun evaluateForOperator(expr: KtForExpression, - scopeDepth: Int): LLVMVariable? { - val range = evaluateExpression(expr.loopRange, scopeDepth + 1)!! - val conditionLabel = codeBuilder.getNewLabel(prefix = "for_condition") - val bodyLabel = codeBuilder.getNewLabel(prefix = "for_body") - val exitLabel = codeBuilder.getNewLabel(prefix = "for_exit") - val rangeTypeName = (range.type as LLVMReferenceType).type - - val descriptor = state.classes[rangeTypeName] ?: throw UnexpectedException("Error occurred in evaluating range expression") - val method = descriptor.methods["$rangeTypeName.iterator"] ?: throw UnexpectedException("Cant receive iterator $rangeTypeName.iterator") - val returnType = method.returnType!!.type - val returnTypeName = (returnType as LLVMReferenceType).type - val iteratorDescriptor = state.classes[returnTypeName] - val nextDescriptor = iteratorDescriptor!!.methods["$returnTypeName.next"] ?: throw UnexpectedException("$returnTypeName.nextInt") - - val conditionIterator = evaluateFunctionCallExpression(LLVMVariable("$rangeTypeName.iterator", returnType, scope = LLVMVariableScope()), listOf(range))!! - val iteratorThisArgument = codeBuilder.receivePointedArgument(conditionIterator, requirePointer = 1) - codeBuilder.addUnconditionalJump(conditionLabel) - codeBuilder.markWithLabel(conditionLabel) - var conditionResult = evaluateFunctionCallExpression(LLVMVariable("$returnTypeName.hasNext", LLVMBooleanType(), scope = LLVMVariableScope()), listOf(iteratorThisArgument))!! - conditionResult = codeBuilder.receivePointedArgument(conditionResult, requirePointer = 0) - codeBuilder.addCondition(conditionResult, bodyLabel, exitLabel) - - codeBuilder.addUnconditionalJump(bodyLabel) - codeBuilder.markWithLabel(bodyLabel) - val loopParameter = evaluateFunctionCallExpression(LLVMVariable("$returnTypeName.next", LLVMIntType(), scope = LLVMVariableScope()), listOf(iteratorThisArgument))!! - val loopParameterDescriptor = state.bindingContext.get(BindingContext.VALUE_PARAMETER, expr.loopParameter!!)?.fqNameSafe?.asString() ?: expr.loopParameter!!.name!! - - val allocVar = variableManager.receiveVariable(loopParameterDescriptor, nextDescriptor.returnType!!.type, LLVMRegisterScope(), pointer = - nextDescriptor.returnType!!.pointer + 1) - variableManager.addVariable(loopParameterDescriptor, allocVar, scopeDepth + 1) - codeBuilder.allocStackVar(allocVar, pointer = true) - - addPrimitiveBinaryOperation(KtTokens.EQ, allocVar, loopParameter, null) - - evaluateCodeBlock(expr.body, startLabel = null, nextIterationLabel = conditionLabel, breakLabel = exitLabel, scopeDepth = scopeDepth + 1) - codeBuilder.markWithLabel(exitLabel) - - return null - } - - private fun evaluateWhenItem(item: KtWhenEntry, - target: LLVMSingleValue, - resultVariable: LLVMVariable, - elseLabel: LLVMLabel, - endLabel: LLVMLabel, - isElse: Boolean, - scopeDepth: Int) { - val successConditionsLabel = codeBuilder.getNewLabel(prefix = "when_condition_success") - var nextLabel = codeBuilder.getNewLabel(prefix = "when_condition_condition") - - codeBuilder.addUnconditionalJump(nextLabel) - - for (condition in item.conditions) { - codeBuilder.markWithLabel(nextLabel) - nextLabel = codeBuilder.getNewLabel(prefix = "when_condition_condition") - - val currentConditionExpression = - evaluateExpression((condition as KtWhenConditionWithExpression).expression, scopeDepth + 1)!! - val conditionResult = addPrimitiveBinaryOperation(KtTokens.EQEQ, target, currentConditionExpression) - - codeBuilder.addCondition(conditionResult, successConditionsLabel, nextLabel) - } - - codeBuilder.markWithLabel(nextLabel) - codeBuilder.addUnconditionalJump(if (isElse) successConditionsLabel else elseLabel) - codeBuilder.markWithLabel(successConditionsLabel) - - var successExpression = evaluateExpression(item.expression, scopeDepth + 1) - - if (successExpression != null && !LLVMType.nullOrVoidType(resultVariable.type)) { - successExpression = codeBuilder.receivePointedArgument(successExpression, requirePointer = 0) - codeBuilder.storeVariable(resultVariable, successExpression) - } - - codeBuilder.addUnconditionalJump(endLabel) - } - - private fun evaluateWhenExpression(expr: KtWhenExpression, - scopeDepth: Int): LLVMVariable? { - codeBuilder.addComment("start when expression") - val whenExpression = expr.subjectExpression - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)!!.type!! - val expressionType = LLVMMapStandardType(kotlinType, state) - - val targetExpression = evaluateExpression(whenExpression, scopeDepth + 1) ?: LLVMConstant("true", LLVMBooleanType()) - val resultVariable = codeBuilder.getNewVariable(expressionType, pointer = 1) - - when (expressionType) { - is LLVMVoidType, - is LLVMNullType -> { - } - is LLVMReferenceType -> codeBuilder.allocStaticVar(resultVariable, asValue = true) - else -> codeBuilder.allocStackVar(resultVariable, asValue = true) - } - - var nextLabel = codeBuilder.getNewLabel(prefix = "when_start") - val endLabel = codeBuilder.getNewLabel(prefix = "when_end") - codeBuilder.addUnconditionalJump(nextLabel) - for (item in expr.entries) { - codeBuilder.markWithLabel(nextLabel) - nextLabel = codeBuilder.getNewLabel(prefix = "when_item") - evaluateWhenItem(item, targetExpression, resultVariable, nextLabel, endLabel, item.isElse, scopeDepth + 1) - } - - codeBuilder.markWithLabel(nextLabel) - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(endLabel) - return resultVariable - } - - private fun evaluateWhileOperator(expr: KtWhileExpression, - scopeDepth: Int): LLVMVariable? = - executeWhileBlock(expr.condition!!, expr.body!!, scopeDepth, checkConditionBeforeExecute = true) - - private fun executeWhileBlock(condition: KtExpression, bodyExpression: PsiElement, scopeDepth: Int, checkConditionBeforeExecute: Boolean): LLVMVariable? { - val conditionLabel = codeBuilder.getNewLabel(prefix = "while") - val bodyLabel = codeBuilder.getNewLabel(prefix = "while") - val exitLabel = codeBuilder.getNewLabel(prefix = "while") - - codeBuilder.addUnconditionalJump(if (checkConditionBeforeExecute) conditionLabel else bodyLabel) - codeBuilder.markWithLabel(conditionLabel) - var conditionResult = evaluateExpression(condition, scopeDepth + 1)!! - conditionResult = codeBuilder.receivePointedArgument(conditionResult, requirePointer = 0) - - codeBuilder.addCondition(conditionResult, bodyLabel, exitLabel) - evaluateCodeBlock(bodyExpression, startLabel = bodyLabel, nextIterationLabel = conditionLabel, breakLabel = exitLabel, scopeDepth = scopeDepth + 1) - codeBuilder.markWithLabel(exitLabel) - - return null - } - - private fun evaluateIfOperator(element: KtIfExpression, - scopeDepth: Int, - isExpression: Boolean = true): LLVMVariable? { - val conditionResult = evaluateExpression(element.condition, scopeDepth)!! - val conditionNativeResult = codeBuilder.receivePointedArgument(conditionResult, requirePointer = 0) - - return if (isExpression) - executeIfExpression(conditionNativeResult, element.then!!, element.`else`, element, scopeDepth + 1) - else - executeIfBlock(conditionNativeResult, element.then!!, element.`else`, scopeDepth + 1) - } - - private fun executeIfExpression(conditionResult: LLVMSingleValue, - thenExpression: KtExpression, - elseExpression: PsiElement?, - ifExpression: KtIfExpression, - scopeDepth: Int): LLVMVariable? { - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, ifExpression)!!.type!! - val expressionType = LLVMInstanceOfStandardType("type", kotlinType, LLVMVariableScope(), state).type - val resultVariable = codeBuilder.getNewVariable(expressionType, pointer = 1) - - when (resultVariable.type) { - is LLVMReferenceType -> codeBuilder.allocStaticVar(resultVariable, asValue = true) - else -> codeBuilder.allocStackVar(resultVariable, asValue = true) - } - val thenLabel = codeBuilder.getNewLabel(prefix = "if_then") - val elseLabel = codeBuilder.getNewLabel(prefix = "if_else") - val endLabel = codeBuilder.getNewLabel(prefix = "if_end") - - codeBuilder.addCondition(conditionResult, thenLabel, elseLabel) - codeBuilder.markWithLabel(thenLabel) - val thenResultExpression = evaluateExpression(thenExpression, scopeDepth + 1) ?: throw UnexpectedException("Can't evaluate then in if expression") - val thenResultNativeExpression = codeBuilder.receiveNativeValue(thenResultExpression) - codeBuilder.storeVariable(resultVariable, thenResultNativeExpression) - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(elseLabel) - - val elseResultExpression = evaluateExpression(elseExpression, scopeDepth + 1) ?: throw UnexpectedException("Can't evaluate else in if expression") - val elseResultNativeExpression = codeBuilder.receiveNativeValue(elseResultExpression) - codeBuilder.storeVariable(resultVariable, elseResultNativeExpression) - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(endLabel) - return resultVariable - } - - private fun executeIfBlock(conditionResult: LLVMSingleValue, - thenExpression: PsiElement, - elseExpression: PsiElement?, - scopeDepth: Int): LLVMVariable? { - val thenLabel = codeBuilder.getNewLabel(prefix = "if") - val elseLabel = codeBuilder.getNewLabel(prefix = "if") - val endLabel = codeBuilder.getNewLabel(prefix = "if") - - codeBuilder.addCondition(conditionResult, thenLabel, if (elseExpression != null) elseLabel else endLabel) - - evaluateCodeBlock(thenExpression, startLabel = thenLabel, nextIterationLabel = endLabel, breakLabel = endLabel, scopeDepth = scopeDepth + 1) - if (elseExpression != null) { - evaluateCodeBlock(elseExpression, startLabel = elseLabel, nextIterationLabel = endLabel, breakLabel = endLabel, scopeDepth = scopeDepth + 1) - } - - codeBuilder.markWithLabel(endLabel) - return null - } - - private fun evaluateValExpression(element: KtProperty, - scopeDepth: Int): LLVMVariable? { - val variable = state.bindingContext.get(BindingContext.VARIABLE, element)!! - val identifier = variable.fqNameSafe.convertToNativeName() - - val assignExpression = evaluateExpression(element.delegateExpressionOrInitializer, scopeDepth) - val expectedExpressionType = LLVMInstanceOfStandardType("", variable.type, state = state) - - val primitivePointer = LLVMMapStandardType(variable.type, state).isPrimitive - - val allocVar = variableManager.receiveVariable(identifier, expectedExpressionType.type, LLVMRegisterScope(), pointer = expectedExpressionType.pointer + 1) - codeBuilder.allocStackVar(allocVar, pointer = true) - - variableManager.addVariable(identifier, allocVar, scopeDepth) - if (assignExpression != null) { - if ((primitivePointer) && (assignExpression.type is LLVMReferenceType)) { - throw UnexpectedException(element.text) - } - addPrimitiveBinaryOperation(KtTokens.EQ, allocVar, assignExpression, null) - } - - return null - } - - private fun evaluateReturnInstruction(element: PsiElement, - scopeDepth: Int): LLVMVariable? { - val next = element.getNextSiblingIgnoringWhitespaceAndComments() - var retVar = evaluateExpression(next, scopeDepth) - val type = retVar?.type ?: LLVMVoidType() - - when (type) { - is LLVMReferenceType -> generateReferenceReturn(retVar!!) - is LLVMNullType -> { - retVar = when (retVar) { - is LLVMConstant -> LLVMConstant(retVar.value, LLVMNullType(returnType!!.type), returnType!!.pointer - 1) - is LLVMVariable -> LLVMVariable(retVar.label, LLVMNullType(returnType!!.type), retVar.kotlinName, retVar.scope, returnType!!.pointer - 1) - else -> throw UnexpectedException("Unknown inheritor of LLVMSingleValue") - } - generateReferenceReturn(retVar!!) - } - is LLVMVoidType -> codeBuilder.addAnyReturn(LLVMVoidType()) - else -> { - val retNativeValue = codeBuilder.receiveNativeValue(retVar!!) - codeBuilder.addReturnOperator(retNativeValue) - } - } - - return null - } - - private fun generateReferenceReturn(retVar: LLVMSingleValue) { - var result = retVar - if (result.pointer == 2) { - result = codeBuilder.loadAndGetVariable(retVar as LLVMVariable) - } - - codeBuilder.storeVariable(returnType!!, result) - codeBuilder.addAnyReturn(LLVMVoidType()) - } -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/ClassCodegen.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/ClassCodegen.kt deleted file mode 100644 index b9f3619474a..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/ClassCodegen.kt +++ /dev/null @@ -1,84 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.psi.KtClass -import org.jetbrains.kotlin.psi.KtParameter -import org.jetbrains.kotlin.resolve.BindingContext -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.exceptions.TranslationException -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType - -class ClassCodegen(state: TranslationState, - variableManager: VariableManager, - val clazz: KtClass, - codeBuilder: LLVMBuilder, - parentCodegen: StructCodegen? = null) : - StructCodegen(state, variableManager, clazz, codeBuilder, parentCodegen) { - - val annotation: Boolean - val enum: Boolean - var companionObjectCodegen: ObjectCodegen? = null - val descriptor: ClassDescriptor - - override var size: Int = 0 - override val structName: String = clazz.fqName?.asString()!! - override val type: LLVMReferenceType - - init { - type = LLVMReferenceType(structName, "class", align = TranslationState.POINTER_ALIGN, size = TranslationState.POINTER_SIZE, byRef = true) - descriptor = state.bindingContext.get(BindingContext.CLASS, clazz) ?: throw TranslationException("Can't receive descriptor of class " + clazz.name) - - annotation = descriptor.kind == ClassKind.ANNOTATION_CLASS - enum = descriptor.kind == ClassKind.ENUM_CLASS - - type.align = TranslationState.POINTER_ALIGN - } - - override fun prepareForGenerate() { - val parameterList = clazz.getPrimaryConstructorParameterList()?.parameters ?: listOf() - indexFields(parameterList) - generateInnerFields(clazz.declarations) - - type.size = calculateTypeSize() - - if (annotation) { - return - } - - super.prepareForGenerate() - nestedClasses.forEach { x, classCodegen -> classCodegen.prepareForGenerate() } - - if (descriptor.companionObjectDescriptor != null) { - val companionObject = clazz.getCompanionObjects().first() - companionObjectCodegen = ObjectCodegen(state, variableManager, companionObject, codeBuilder, this) - companionObjectCodegen!!.prepareForGenerate() - } - } - - override fun generate() { - if (annotation) { - return - } - - super.generate() - nestedClasses.forEach { x, classCodegen -> classCodegen.generate() } - companionObjectCodegen?.generate() - } - - private fun indexFields(parameters: MutableList) { - if (annotation) { - return - } - - val currentConstructorFields = parameters.mapIndexed { i, it -> resolveType(it, state.bindingContext.get(BindingContext.TYPE, it.typeReference)!!, fields.size + i) } - fields.addAll(currentConstructorFields) - fieldsIndex.putAll(currentConstructorFields.map { Pair(it.label, it) }) - primaryConstructorIndex = LLVMType.mangleFunctionArguments(currentConstructorFields) - constructorFields.put(primaryConstructorIndex!!, currentConstructorFields) - } - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/FunctionCodegen.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/FunctionCodegen.kt deleted file mode 100644 index ed2a4a8df72..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/FunctionCodegen.kt +++ /dev/null @@ -1,138 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtNamedFunction -import org.jetbrains.kotlin.psi.KtParameter -import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.source.KotlinSourceElement -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.LLVMFunctionType -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType -import org.kotlinnative.translator.llvm.types.LLVMVoidType -import java.util.* - - -class FunctionCodegen(state: TranslationState, - variableManager: VariableManager, - val function: KtNamedFunction, - codeBuilder: LLVMBuilder) : - BlockCodegen(state, variableManager, codeBuilder) { - - var name: String - var args = LinkedList() - val isExtensionDeclaration = function.isExtensionDeclaration() - var functionNamePrefix = "" - val external: Boolean - val defaultValues: List - val fullName: String - get() = functionNamePrefix + name - - init { - val descriptor = state.bindingContext.get(BindingContext.FUNCTION, function)!! - args.addAll(descriptor.valueParameters.map { - LLVMInstanceOfStandardType(it?.fqNameSafe?.asString() ?: it.name.toString(), it.type, state = state) - }) - - returnType = LLVMInstanceOfStandardType("instance", descriptor.returnType!!, state = state) - if (returnType!!.type is LLVMReferenceType) { - returnType!!.pointer = 2 - } - external = descriptor.isExternal - name = if (external) function.name!! else function.fqName!!.convertToNativeName() + LLVMType.mangleFunctionArguments(args) - - if (isExtensionDeclaration) { - name = "${function.name}${if (!external) LLVMType.mangleFunctionArguments(args) else ""}" - val receiverType = descriptor.extensionReceiverParameter!!.type - val translatorType = LLVMMapStandardType(receiverType, state) - val packageName = (function.containingFile as KtFile).packageFqName.asString() - functionNamePrefix = packageName.addAfterIfNotEmpty(".") + translatorType.mangle + "." - - val extensionFunctionsOfThisType = state.extensionFunctions.getOrDefault(translatorType.toString(), HashMap()) - extensionFunctionsOfThisType.put(fullName, this) - state.extensionFunctions.put(translatorType.toString(), extensionFunctionsOfThisType) - } - - defaultValues = descriptor.valueParameters.indices.map { - val parameterDescriptor = descriptor.valueParameters[it] - if (parameterDescriptor.declaresDefaultValue()) { - val initializer = (parameterDescriptor.source as KotlinSourceElement).psi as KtParameter - initializer.defaultValue - } else { - null - } - } - } - - fun generate(this_type: LLVMVariable? = null) { - generateDeclaration(this_type) - - if (external) { - return - } - - codeBuilder.addStartExpression() - generateLoadArguments() - evaluateCodeBlock(function.bodyExpression, scopeDepth = topLevelScopeDepth, isBlock = function.hasBlockBody()) - - if (returnType?.type is LLVMVoidType){ - codeBuilder.addAnyReturn(LLVMVoidType()) - } - codeBuilder.addEndExpression() - } - - private fun generateDeclaration(this_type: LLVMVariable? = null) { - var actualReturnType: LLVMType = returnType!!.type - val actualArgs = ArrayList() - - if (returnType!!.pointer > 0) { - actualReturnType = LLVMVoidType() - actualArgs.add(returnType!!) - } - - if (isExtensionDeclaration) { - val receiverParameter = state.bindingContext.get(BindingContext.FUNCTION, function)!!.extensionReceiverParameter!! - val receiverType = receiverParameter.type - val translatorType = LLVMMapStandardType(receiverType, state) - - val classVal = when (translatorType) { - is LLVMReferenceType -> LLVMVariable("classvariable.this", translatorType, pointer = 1) - else -> LLVMVariable("type", translatorType, pointer = 0) - } - - variableManager.addVariable("this", classVal, level = 0) - actualArgs.add(classVal) - } - - if (this_type != null) { - actualArgs.add(this_type) - } - - actualArgs.addAll(args) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMFunctionDescriptor(fullName, actualArgs, actualReturnType, external)) - } - - private fun generateLoadArguments() { - args.forEach(fun(it: LLVMVariable) { - if (it.type is LLVMFunctionType || (it.type is LLVMReferenceType && it.type.byRef)) { - variableManager.addVariable(it.label, LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope(), pointer = 1), topLevelScopeDepth) - return - } - - if (it.type !is LLVMReferenceType || it.type.byRef) { - val loadVariable = LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope(), pointer = it.pointer) - val allocVar = codeBuilder.loadArgument(loadVariable) - variableManager.addVariable(it.label, allocVar, topLevelScopeDepth) - } else { - variableManager.addVariable(it.label, LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope(), pointer = 0), topLevelScopeDepth) - } - }) - } - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/ObjectCodegen.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/ObjectCodegen.kt deleted file mode 100644 index 4f58ad3d000..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/ObjectCodegen.kt +++ /dev/null @@ -1,43 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.psi.KtObjectDeclaration -import org.jetbrains.kotlin.resolve.BindingContext -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.LLVMVariable -import org.kotlinnative.translator.llvm.LLVMVariableScope -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType - -class ObjectCodegen(state: TranslationState, - variableManager: VariableManager, - val objectDeclaration: KtObjectDeclaration, - codeBuilder: LLVMBuilder, - parentCodegen: StructCodegen? = null) : - StructCodegen(state, variableManager, objectDeclaration, codeBuilder, parentCodegen) { - - override var size: Int = 0 - override val structName: String = objectDeclaration.fqName?.asString()!! - override val type = LLVMReferenceType(structName, "class") - - init { - primaryConstructorIndex = LLVMType.mangleFunctionArguments(emptyList()) - constructorFields.put(primaryConstructorIndex!!, arrayListOf()) - } - - override fun prepareForGenerate() { - generateInnerFields(objectDeclaration.declarations) - type.size = calculateTypeSize() - - super.prepareForGenerate() - - val classInstance = LLVMVariable("object.instance.$structName", type, objectDeclaration.name, LLVMVariableScope(), pointer = 1) - codeBuilder.addGlobalInitialize(classInstance, fields, initializedFields.map { - val type = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, it.value)!!.type!! - Pair(it.key, state.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, it.value)!!.getValue(type).toString()) - }.toMap(), type) - variableManager.addGlobalVariable(structName, classInstance) - } - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/PropertyCodegen.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/PropertyCodegen.kt deleted file mode 100644 index ca21816d604..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/PropertyCodegen.kt +++ /dev/null @@ -1,33 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.js.descriptorUtils.nameIfStandardType -import org.jetbrains.kotlin.psi.KtProperty -import org.jetbrains.kotlin.resolve.BindingContext -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.LLVMInstanceOfStandardType -import org.kotlinnative.translator.llvm.LLVMVariable -import org.kotlinnative.translator.llvm.LLVMVariableScope - - -class PropertyCodegen(val state: TranslationState, - val variableManager: VariableManager, - val property: KtProperty, - val codeBuilder: LLVMBuilder) { - - fun generate() { - val varInfo = state.bindingContext.get(BindingContext.VARIABLE, property)?.compileTimeInitializer ?: return - - val kotlinType = varInfo.type - val value = varInfo.value - if (kotlinType.nameIfStandardType != null) { - val variableType = LLVMInstanceOfStandardType(property.name ?: return, kotlinType, state = state).type - val variable = LLVMVariable(property.name.toString(), variableType, property.name.toString(), LLVMVariableScope()) - variableManager.addGlobalVariable(property.name.toString(), variable) - codeBuilder.defineGlobalVariable(variable, variableType.parseArg(value.toString())) - variable.pointer++ - } - } - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/StructCodegen.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/StructCodegen.kt deleted file mode 100644 index 92021d7b054..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/codegens/StructCodegen.kt +++ /dev/null @@ -1,252 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.types.KotlinType -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.LLVMCharType -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType -import org.kotlinnative.translator.llvm.types.LLVMVoidType -import java.util.* - -/* - * TODO make high level description of code generation process - * and structure of generated code. - */ -abstract class StructCodegen(val state: TranslationState, - val variableManager: VariableManager, - val classOrObject: KtClassOrObject, - val codeBuilder: LLVMBuilder, - val parentCodegen: StructCodegen? = null) { - - val fields = ArrayList() - val fieldsIndex = HashMap() - val nestedClasses = HashMap() - val enumFields = HashMap() - val constructorFields = HashMap>() - var primaryConstructorIndex: String? = null - val initializedFields = HashMap() - var methods = HashMap() - - abstract val type: LLVMReferenceType - abstract var size: Int - abstract val structName: String - - open fun prepareForGenerate() { - generateStruct() - classOrObject.declarations.filterIsInstance().map { - val function = FunctionCodegen(state, variableManager, it, codeBuilder) - methods.put(function.name, function) - } - } - - fun calculateTypeSize(): Int { - val classAlignment = fields.map { it.type.align }.max()?.toInt() ?: 0 - var alignmentRemainder = 0 - size = 0 - - for (item in fields) { - val currentFieldSize = if (item.pointer > 0) TranslationState.POINTER_ALIGN else item.type.align - alignmentRemainder -= (alignmentRemainder % currentFieldSize) - if (alignmentRemainder < currentFieldSize) { - size += classAlignment - alignmentRemainder = classAlignment - currentFieldSize - } else { - alignmentRemainder -= currentFieldSize - } - } - return size - } - - open fun generate() { - generateEnumFields() - generatePrimaryConstructor() - classOrObject.getSecondaryConstructors().map { generateSecondaryConstructor(it) } - - val classVal = LLVMVariable("classvariable.this", type, pointer = if (type.isPrimitive) 0 else 1) - variableManager.addVariable("this", classVal, level = 0) - - methods.values.map { it.generate(classVal) } - } - - fun generateInnerFields(declarations: List) { - for (declaration in declarations) { - when (declaration) { - is KtProperty -> { - val ktType = state.bindingContext.get(BindingContext.TYPE, declaration.typeReference) - ?: state.bindingContext.get(BindingContext.VARIABLE, declaration)!!.type - val field = resolveType(declaration, ktType, fields.size) - - if (declaration.initializer != null) { - initializedFields.put(field, declaration.initializer!!) - } - - fields.add(field) - fieldsIndex[field.label] = field - } - is KtEnumEntry -> { - val name = declaration.name!! - val field = LLVMVariable("class.$structName.$name", type, scope = LLVMVariableScope(), pointer = 2) - enumFields.put(name, field) - } - is KtClass -> - nestedClasses.put(declaration.fqName!!.asString(), - ClassCodegen(state, - VariableManager(state.globalVariableCollection), - declaration, codeBuilder, this)) - } - } - } - - private fun generateEnumFields() { - val enumEntries = classOrObject.declarations.filterIsInstance() - - for (declaration in enumEntries) { - val name = declaration.name!! - val initializer = declaration.initializerList!!.initializers[0] - val arguments = (initializer as KtSuperTypeCallEntry).valueArguments.map { it.getArgumentExpression()!!.text } - - val field = codeBuilder.getNewVariable(type, scope = LLVMVariableScope()) - val enumField = enumFields[name]!! - - codeBuilder.defineGlobalVariable(field, codeBuilder.makeStructInitializer(constructorFields[primaryConstructorIndex]!!, arguments)) - codeBuilder.defineGlobalVariable(LLVMVariable(enumField.label, enumField.type, enumField.kotlinName, enumField.scope, enumField.pointer - 1), field.toString()) - } - } - - private fun generateStruct() = - codeBuilder.createClass(structName, fields) - - private fun generateSecondaryConstructor(secondaryConstructor: KtSecondaryConstructor) { - val thisCall = secondaryConstructor.getDelegationCall().calleeExpression - val descriptor = state.bindingContext.get(BindingContext.CONSTRUCTOR, secondaryConstructor) - - val classVal = LLVMVariable("classvariable.this", type, pointer = 1) - variableManager.addVariable("this", classVal, level = 0) - - val secondaryConstructorArguments = descriptor!!.valueParameters.map { - LLVMInstanceOfStandardType(it.fqNameSafe.convertToNativeName(), it.type, state = state) - } - - val argFields = mutableListOf(classVal) - argFields.addAll(secondaryConstructorArguments) - val currentConstructorIndex = LLVMType.mangleFunctionArguments(secondaryConstructorArguments) - constructorFields.put(currentConstructorIndex, argFields) - codeBuilder.addLLVMCodeToLocalPlace(LLVMFunctionDescriptor(structName + currentConstructorIndex, argFields, LLVMVoidType())) - - codeBuilder.addStartExpression() - - secondaryConstructorArguments.map { variableManager.addVariable(it.label, it, level = 2) } - - val blockCodegen = object : BlockCodegen(state, variableManager, codeBuilder) {} - val mainConstructorThis = blockCodegen.evaluateConstructorDelegationReferenceExpression(thisCall!!, this, secondaryConstructorArguments, 1) as LLVMVariable - variableManager.addVariable("this", mainConstructorThis, level = 0) - - blockCodegen.evaluateCodeBlock(secondaryConstructor.bodyExpression, scopeDepth = 1) - generateReturn(codeBuilder.receivePointedArgument(variableManager["this"]!!, requirePointer = 1) as LLVMVariable) - codeBuilder.addAnyReturn(LLVMVoidType()) - codeBuilder.addEndExpression() - } - - private fun generatePrimaryConstructor() { - val classVal = LLVMVariable("classvariable.this", type, pointer = 1) - variableManager.addVariable("this", classVal, level = 0) - - val argFields = mutableListOf(classVal) - argFields.addAll(constructorFields[primaryConstructorIndex]!!) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMFunctionDescriptor(structName + primaryConstructorIndex, argFields, LLVMVoidType())) - - codeBuilder.addStartExpression() - generateLoadArguments(classVal) - generateAssignments() - generateReturn(LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1)) - genClassInitializers() - codeBuilder.addAnyReturn(LLVMVoidType()) - codeBuilder.addEndExpression() - } - - private fun generateLoadArguments(thisField: LLVMVariable) { - val thisVariable = LLVMVariable(thisField.label, thisField.type, thisField.label, LLVMRegisterScope(), pointer = 0) - codeBuilder.loadArgument(thisVariable, false) - - constructorFields[primaryConstructorIndex]!!.filter { it.type !is LLVMReferenceType }.forEach { - val loadVariable = LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope()) - codeBuilder.loadArgument(loadVariable) - } - } - - private fun generateAssignments() { - constructorFields[primaryConstructorIndex]!!.forEach { - when (it.type) { - is LLVMReferenceType -> { - val classField = codeBuilder.getNewVariable(it.type, pointer = it.pointer + 1) - codeBuilder.loadClassField(classField, LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1), (it as LLVMClassVariable).offset) - codeBuilder.storeVariable(classField, it) - } - else -> { - val argument = codeBuilder.loadAndGetVariable(LLVMVariable("${it.label}.addr", it.type, scope = LLVMRegisterScope(), pointer = it.pointer + 1)) - val classField = codeBuilder.getNewVariable(it.type, pointer = 1) - codeBuilder.loadClassField(classField, LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1), (it as LLVMClassVariable).offset) - codeBuilder.storeVariable(classField, argument) - } - } - } - - val blockCodegen = object : BlockCodegen(state, variableManager, codeBuilder) {} - val receiverThis = LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1) - variableManager.addVariable("this", receiverThis, level = 2) - - for ((variable, initializer) in initializedFields) { - val left = blockCodegen.evaluateMemberMethodOrField(receiverThis, variable.label, blockCodegen.topLevelScopeDepth, call = null)!! - val right = blockCodegen.evaluateExpression(initializer, scopeDepth = blockCodegen.topLevelScopeDepth)!! - blockCodegen.addPrimitiveBinaryOperation(KtTokens.EQ, left, right) - } - - variableManager.pullOneUpwardLevelVariable("this") - } - - private fun generateReturn(src: LLVMVariable) { - val dst = LLVMVariable("classvariable.this", type, scope = LLVMRegisterScope(), pointer = 1) - - val castedDst = codeBuilder.bitcast(dst, LLVMCharType(), pointer = 1) - val castedSrc = codeBuilder.bitcast(src, LLVMCharType(), pointer = 1) - - codeBuilder.memcpy(castedDst, castedSrc, size) - } - - protected fun resolveType(field: KtNamedDeclaration, ktType: KotlinType, offset: Int): LLVMClassVariable { - val annotations = parseFieldAnnotations(field) - val fieldName = state.bindingContext.get(BindingContext.VALUE_PARAMETER, field as?KtParameter)?.fqNameSafe?.convertToNativeName() - ?: field.fqName?.asString() - ?: field.name!! - - val result = LLVMInstanceOfStandardType(fieldName, ktType, LLVMRegisterScope(), state = state) - - if (state.classes.containsKey(field.name!!)) { - return LLVMClassVariable(result.label, state.classes[fieldName]!!.type, result.pointer) - } - - if (annotations.contains("Plain")) { - result.pointer = 0 - } - - return LLVMClassVariable(result.label, result.type, result.pointer, offset) - } - - private fun parseFieldAnnotations(field: KtNamedDeclaration): Set = - field.annotationEntries.map { state.bindingContext.get(BindingContext.ANNOTATION, it)?.type.toString() }.toHashSet() - - protected fun genClassInitializers() = - classOrObject.getAnonymousInitializers().map { - object : BlockCodegen(state, variableManager, codeBuilder) { - fun generate() = evaluateCodeBlock(it.body, scopeDepth = topLevelScopeDepth) - } - }.map { it.generate() } - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/debug/debug.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/debug/debug.kt deleted file mode 100644 index 345a7416faa..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/debug/debug.kt +++ /dev/null @@ -1,59 +0,0 @@ -package org.kotlinnative.translator.debug - -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiWhiteSpace -import com.intellij.psi.impl.source.tree.CompositeElement -import org.jetbrains.kotlin.psi.KtClass -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtNamedFunction - -fun debugPrintNode(node: Any?, indent: Int = 0): Unit { - if (node == null) { - return - } - - for (i in 0..indent) { - print(" ") - } - - println(node.toString()) - - when (node) { - is CompositeElement -> { - debugPrintNode(node.firstChildNode, indent + 2) - debugPrintNode(node.treeNext, indent) - } - is PsiElement -> { - debugPrintNode(node.firstChild, indent + 2) - debugPrintNode(node.nextSibling, indent) - } - is PsiWhiteSpace -> { - debugPrintNode(node.firstChild, indent + 2) - debugPrintNode(node.nextSibling, indent) - } - else -> { - print(" not supported: " + node.javaClass.canonicalName) - } - } - -} - -fun printFunction(function: KtNamedFunction) { - debugPrintNode(function.node) -} - -fun printClass(function: KtClass) { - debugPrintNode(function.node) -} - -fun printFile(file: KtFile) { - - for (declaration in file.declarations) { - - when (declaration) { - is KtNamedFunction -> printFunction(declaration) - is KtClass -> printClass(declaration) - else -> println(declaration.toString()) - } - } -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/exceptions/TranslationException.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/exceptions/TranslationException.kt deleted file mode 100644 index 4b132fcbbcc..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/exceptions/TranslationException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.kotlinnative.translator.exceptions - -import java.lang.Exception - -class TranslationException(message: String) : Exception(message) diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/exceptions/UnimplementedException.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/exceptions/UnimplementedException.kt deleted file mode 100644 index e4b2b0dd4bc..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/exceptions/UnimplementedException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.kotlinnative.translator.exceptions - -import java.lang.Exception - -class UnimplementedException() : Exception() diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt deleted file mode 100644 index 8226ef55827..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt +++ /dev/null @@ -1,308 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.bc.BcLlvmBuilder -import org.kotlinnative.translator.llvm.ir.IrLlvmBuilder -import org.kotlinnative.translator.llvm.types.* -import java.rmi.UnexpectedException -import java.util.* - -class LLVMBuilder(arm: Boolean = false) { - private var variableCount = 0 - private var labelCount = 0 - - val ir = IrLlvmBuilder() - val bc = BcLlvmBuilder() - - fun addComment(comment: String) { - ir.comment(comment) - bc.comment(comment) - //addLLVMCodeToLocalPlace("; " + comment) - } - - fun addStartExpression() { - ir.startExpression() - bc.startExpression() - //addLLVMCodeToLocalPlace("{") - } - - fun addEndExpression() { - ir.endExpression() - bc.endExpression() - //addLLVMCodeToLocalPlace("unreachable\n}") - } - - fun addAssignment(lhs: LLVMVariable, rhs: LLVMNode) { - ir.assignment(lhs, rhs) - bc.assignment(lhs, rhs) - //addLLVMCodeToLocalPlace("$lhs = $rhs") - } - - fun addReturnOperator(llvmVariable: LLVMSingleValue) { - ir.returnOperation(llvmVariable) - bc.returnOperation(llvmVariable) - //addLLVMCodeToLocalPlace("ret ${llvmVariable.type} $llvmVariable") - } - - fun addAnyReturn(type: LLVMType, value: String = type.defaultValue, pointer: Int = 0) { - ir.anyReturn(type, value, pointer) - bc.anyReturn(type, value, pointer) - //addLLVMCodeToLocalPlace("ret $type${"*".repeat(pointer)} $value") - } - - fun addStringConstant(variable: LLVMVariable, value: String) { - ir.stringConstant(variable, value) - bc.stringConstant(variable, value) - //addLLVMCodeToGlobalPlace("$variable = private unnamed_addr constant ${(variable.type as LLVMStringType).fullArrayType} c\"${value.replace("\"", "\\\"")}\\00\", align 1") - } - - fun addCondition(condition: LLVMSingleValue, thenLabel: LLVMLabel, elseLabel: LLVMLabel) { - ir.conditionalBranch(condition, thenLabel, elseLabel) - bc.conditionalBranch(condition, thenLabel, elseLabel) - //addLLVMCodeToLocalPlace("br ${condition.pointedType} $condition, label $thenLabel, label $elseLabel") - } - - fun addUnconditionalJump(label: LLVMLabel) { - ir.unconditionalBranch(label) - bc.unconditionalBranch(label) - //addLLVMCodeToLocalPlace("br label $label") - } - - fun addExceptionCall(exceptionName: String) { - ir.abort(exceptionName) - bc.abort(exceptionName) - /* - val exception = exceptions[exceptionName] - val printResult = getNewVariable(LLVMIntType(), pointer = 0) - addLLVMCodeToLocalPlace("$printResult = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds (${(exception!!.type as LLVMStringType).fullArrayType}* $exception, i32 0, i32 0))") - addFunctionCall(LLVMVariable("abort", LLVMVoidType(), scope = LLVMVariableScope()), emptyList()) - */ - } - - fun addFunctionCall(functionName: LLVMVariable, arguments: List) { - ir.call(functionName, arguments) - bc.call(functionName, arguments) - //addLLVMCodeToLocalPlace("call ${functionName.type} $functionName(${arguments.joinToString { it -> "${it.type} $it" }})") - } - - fun allocStackVar(target: LLVMVariable, asValue: Boolean = false, pointer: Boolean = false) { - ir.alloca(target, asValue, pointer) - bc.alloca(target, asValue, pointer) - /* - val type = if (asValue) target.type.toString() else target.pointedType - addLLVMCodeToLocalPlace("$target = alloca ${if (pointer) type.removeSuffix("*") else type}, align ${target.type.align}") - */ - } - - fun allocStaticVar(target: LLVMVariable, asValue: Boolean = false, pointer: Boolean = false) { - ir.heapAndCast(target, asValue, pointer) - bc.heapAndCall(target, asValue, pointer) - /* - val allocated = getNewVariable(LLVMCharType(), pointer = 1) - val size = if ((target.pointer >= 2) || (target.pointer >= 1 && !pointer)) TranslationState.POINTER_SIZE else target.type.size - - addLLVMCodeToLocalPlace("$allocated = call i8* @malloc_heap(i32 $size)") - addLLVMCodeToLocalPlace("$target = bitcast ${allocated.pointedType} $allocated to ${if (asValue) target.type.toString() else target.pointedType}" + if (pointer) "" else "*") - */ - } - - fun addGlobalInitialize(target: LLVMVariable, fields: ArrayList, initializers: Map, classType: LLVMType) { - ir.globalinitialize(target, fields, initializers, classType) - bc.globalInitialize(target, fields, initializers, classType) - /* - val code = "$target = internal global $classType { ${ - fields.map { it.pointedType + " " + if (initializers.containsKey(it)) initializers[it] else "0" }.joinToString() - } }, align ${classType.align}" - addLLVMCodeToGlobalPlace(code) - */ - } - - fun bitcast(src: LLVMVariable, llvmType: LLVMType, pointer: Int): LLVMVariable { - ir.bitcast(src, llvmType, pointer) - bc.bitcast(src, llvmType, pointer) - /* - val empty = getNewVariable(llvmType, pointer = pointer) - addLLVMCodeToLocalPlace("$empty = bitcast ${src.pointedType} $src to ${llvmType.toString() + "*".repeat(pointer)}") - return empty - */ - } - - fun convertVariableToType(variable: LLVMSingleValue, targetType: LLVMType): LLVMSingleValue { - var resultVariable = variable - if (variable.type != targetType) { - val convertedExpression = targetType.convertFrom(variable) - resultVariable = saveExpression(convertedExpression) - } - return resultVariable - } - - fun copyVariable(from: LLVMVariable, to: LLVMVariable) = - when { - from.type is LLVMStringType && !from.type.isLoaded -> storeString(to, from, 0) - else -> copyVariableValue(to, from) - } - - fun createClass(name: String, fields: List) { - ir.classDeclaration(name, fields) - bc.classDeclaration(name, fields) - //addLLVMCodeToGlobalPlace("%class.$name = type { ${fields.map { it.pointedType }.joinToString()} }") - } - - fun declareEntryPoint(name: String) { - TODO("not that it's required") - /* - addLLVMCodeToLocalPlace("define weak void @main()") - addStartExpression() - addFunctionCall(LLVMVariable(name, LLVMVoidType(), scope = LLVMVariableScope()), listOf()) - addAnyReturn(LLVMVoidType()) - addEndExpression() - */ - } - - fun defineGlobalVariable(variable: LLVMVariable, defaultValue: String = variable.type.defaultValue) { - ir.globalDeclaration(variable, defaultValue) - bc.globalDeclaration(variable, defaultValue) - //addLLVMCodeToLocalPlace("$variable = global ${variable.pointedType} $defaultValue, align ${variable.type.align}") - } - - fun getNewVariable(type: LLVMType, pointer: Int = 0, kotlinName: String? = null, scope: LLVMScope = LLVMRegisterScope(), prefix: String = "var"): LLVMVariable { - variableCount++ - return LLVMVariable("$prefix$variableCount", type, kotlinName, scope, pointer) - } - - fun getNewLabel(scope: LLVMScope = LLVMRegisterScope(), prefix: String): LLVMLabel { - labelCount++ - return LLVMLabel("label.$prefix.$labelCount", scope) - } - - fun loadArgsIfRequired(names: List, args: List) = - names.mapIndexed(fun(i: Int, value: LLVMSingleValue): LLVMSingleValue { - return receivePointedArgument(value, args[i].pointer) - }).toList() - - fun loadArgument(llvmVariable: LLVMVariable, store: Boolean = true): LLVMVariable { - val allocVar = LLVMVariable("${llvmVariable.label}.addr", llvmVariable.type, llvmVariable.kotlinName, LLVMRegisterScope(), pointer = llvmVariable.pointer + 1) - allocStackVar(allocVar, asValue = false, pointer = true) - if (store) { - storeVariable(allocVar, llvmVariable) - } - return allocVar - } - - fun loadClassField(target: LLVMVariable, source: LLVMVariable, offset: Int) { - ir.loadClassField(target, source, offset) - bc.loadClassField(target, source, offset) - //addLLVMCodeToLocalPlace("$target = getelementptr inbounds ${source.pointedType} $source, i32 0, i32 $offset") - } - - fun loadVariableOffset(target: LLVMVariable, source: LLVMVariable, index: LLVMConstant) { - ir.loadVariableOffset(target, source, index) - bc.loadVariableOffset(target, source, index) - //addLLVMCodeToLocalPlace("$target = getelementptr inbounds ${source.type} $source, ${index.type} ${index.value}") - } - - fun loadAndGetVariable(source: LLVMVariable): LLVMVariable { - assert(source.pointer > 0) - val target = getNewVariable(source.type, source.pointer - 1, source.kotlinName) - ir.load(source) - bc.load(source) - //addLLVMCodeToLocalPlace("$target = load ${source.pointedType} $source, align ${target.type.align}") - - return target - } - - fun makeStructInitializer(args: List, values: List) { - ir.structInitializer(args, values) - bc.structInitializer(args, values) - // = "{ ${args.mapIndexed { i: Int, variable: LLVMVariable -> "${variable.type} ${values[i]}" }.joinToString()} }" - } - - fun markWithLabel(label: LLVMLabel?) { - label ?: return - ir.label(label) - bc.label(label) - //addLLVMCodeToLocalPlace("${label.label}:") - } - - fun memcpy(castedDst: LLVMVariable, castedSrc: LLVMVariable, size: Int, align: Int = 4, volatile: Boolean = false) { - //addLLVMCodeToLocalPlace("call void @llvm.memcpy.p0i8.p0i8.i64(i8* $castedDst, i8* $castedSrc, i64 $size, i32 $align, i1 $volatile)") - ir.memcpy(castedDst, castedSrc, size, align, volatile) - bc.memcpy(castedDst, castedSrc, size, align, volatile) - } - - fun nullCheck(variable: LLVMVariable): LLVMVariable { - val result = getNewVariable(LLVMBooleanType(), pointer = 0) - val loaded = loadAndGetVariable(variable) - addLLVMCodeToLocalPlace("$result = icmp eq ${loaded.pointedType} null, $loaded") - return result - } - - fun receiveNativeValue(firstOp: LLVMSingleValue): LLVMSingleValue = - when { - firstOp is LLVMConstant || firstOp.pointer == 0 -> firstOp - firstOp is LLVMVariable -> loadAndGetVariable(firstOp) - else -> throw UnexpectedException("Unknown inheritor of LLVMSingleValue") - } - - fun receivePointedArgument(value: LLVMSingleValue, requirePointer: Int): LLVMSingleValue { - var result = value - - while (result.pointer > requirePointer) { - result = receiveNativeValue(result) - } - - if ((value.type is LLVMStringType) && !(value.type.isLoaded)) { - val newVariable = getNewVariable(value.type, pointer = result.pointer + 1) - allocStackVar(newVariable, asValue = true) - copyVariable(result as LLVMVariable, newVariable) - result = loadAndGetVariable(newVariable) - } - - return result - } - - fun storeString(target: LLVMVariable, source: LLVMVariable, offset: Int) { - ir.storeString(target, source, offset) - bc.storeString(target, source, offset) - /*val code = "store ${target.type} getelementptr inbounds (" + - "${(source.type as LLVMStringType).fullArrayType}* $source, i32 0, i32 $offset), ${target.pointedType} $target, align ${source.type.align}" - (target.type as LLVMStringType).isLoaded = true - addLLVMCodeToLocalPlace(code) - */ - } - - fun storeVariable(target: LLVMSingleValue, source: LLVMSingleValue) { - ir.storeVariable(target, source) - bc.storeVariable(target, source) - /* - if ((source.type is LLVMStringType) && !(source.type.isLoaded)) { - storeString(target as LLVMVariable, source as LLVMVariable, 0) - } else { - addLLVMCodeToLocalPlace("store ${source.pointedType} $source, ${target.pointedType} $target, align ${source.type.align}") - }*/ - } - - fun saveExpression(expression: LLVMSingleValue): LLVMVariable { - val resultOp = getNewVariable(expression.type, pointer = expression.pointer) - addAssignment(resultOp, expression) - return resultOp - } - - fun storeNull(result: LLVMVariable) { - ir.storeNull(result) - bc.storeNull(result) - //addLLVMCodeToLocalPlace("store ${result.pointedType.dropLast(1)} null, ${result.pointedType} $result, align ${TranslationState.POINTER_ALIGN}") - } - - override fun toString() = ir.toString() - - private fun copyVariableValue(target: LLVMVariable, source: LLVMVariable) { - var from = source - if (source.pointer > 0) { - from = getNewVariable(source.type, source.pointer) - addLLVMCodeToLocalPlace("$from = load ${source.pointedType} $source, align ${from.type.align}") - } - addLLVMCodeToLocalPlace("store ${target.type} $from, ${target.pointedType} $target, align ${from.type.align}") - } - } -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMCall.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMCall.kt deleted file mode 100644 index b704798aa0d..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMCall.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -class LLVMCall(val returnType: LLVMType, - val name: String, - val arguments: Collection) : LLVMSingleValue(returnType) { - - override fun toString() = "call $returnType $name(${arguments.joinToString { "${it.pointedType} ${it.toString()}" }})" - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMClassVariable.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMClassVariable.kt deleted file mode 100644 index 780fb40d759..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMClassVariable.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -class LLVMClassVariable(label: String, - type: LLVMType, - pointer: Int = 0, - var offset: Int = 0) : LLVMVariable(label, type, pointer = pointer) \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMConstant.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMConstant.kt deleted file mode 100644 index 17a4bd69af2..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMConstant.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -open class LLVMConstant(value: String, - type: LLVMType, - pointer: Int = 0) : LLVMSingleValue(type, pointer) { - - val value = type.parseArg(value) - - override fun toString() = value - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMExpression.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMExpression.kt deleted file mode 100644 index bd67bac1daa..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -class LLVMExpression(type: LLVMType, val llvmCode: String, pointer: Int = 0) : LLVMSingleValue(type, pointer) { - - override fun toString() = llvmCode - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMLabel.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMLabel.kt deleted file mode 100644 index ea6e23d2a07..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMLabel.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.kotlinnative.translator.llvm - -class LLVMLabel(val label: String, val scope: LLVMScope) : LLVMNode() { - - override fun toString() = "$scope$label" - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMNode.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMNode.kt deleted file mode 100644 index 402b191f78e..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMNode.kt +++ /dev/null @@ -1,3 +0,0 @@ -package org.kotlinnative.translator.llvm - -abstract class LLVMNode \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMScope.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMScope.kt deleted file mode 100644 index 6932d837bc9..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMScope.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.kotlinnative.translator.llvm - -abstract class LLVMScope - -class LLVMVariableScope : LLVMScope() { - override fun toString() = "@" -} - -class LLVMRegisterScope : LLVMScope() { - override fun toString() = "%" -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMSingleValue.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMSingleValue.kt deleted file mode 100644 index 5a8ccc6ff71..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMSingleValue.kt +++ /dev/null @@ -1,10 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -open class LLVMSingleValue(val type: LLVMType, var pointer: Int = 0) : LLVMNode() { - - open val pointedType: String - get() = type.toString() + "*".repeat(pointer) - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMVariable.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMVariable.kt deleted file mode 100644 index 342a12977db..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMVariable.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -open class LLVMVariable(val label: String, - type: LLVMType, - var kotlinName: String? = null, - val scope: LLVMScope = LLVMRegisterScope(), - pointer: Int = 0) : LLVMSingleValue(type, pointer) { - - override fun toString() = "$scope$label" - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/bc/BcLlvmBuilder.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/bc/BcLlvmBuilder.kt deleted file mode 100644 index 40cc90fc686..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/bc/BcLlvmBuilder.kt +++ /dev/null @@ -1,116 +0,0 @@ -package org.kotlinnative.translator.llvm.bc - -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.LLVMType -import java.util.* - -/** - * Created by minamoto on 23/09/2016. - */ -class BcLlvmBuilder { - fun comment(comment: String) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun startExpression() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun endExpression() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun assignment(lhs: LLVMVariable, rhs: LLVMNode) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun returnOperation(llvmVariable: LLVMSingleValue) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun anyReturn(type: LLVMType, value: String, pointer: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun stringConstant(variable: LLVMVariable, value: String) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun conditionalBranch(condition: LLVMSingleValue, thenLabel: LLVMLabel, elseLabel: LLVMLabel) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun unconditionalBranch(label: LLVMLabel) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun abort(exceptionName: String) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun call(functionName: LLVMVariable, arguments: List) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun alloca(target: LLVMVariable, asValue: Boolean, pointer: Boolean) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun heapAndCall(target: LLVMVariable, asValue: Boolean, pointer: Boolean) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun globalInitialize(target: LLVMVariable, fields: ArrayList, initializers: Map, classType: LLVMType) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun bitcast(src: LLVMVariable, llvmType: LLVMType, pointer: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun classDeclaration(name: String, fields: List) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun globalDeclaration(variable: LLVMVariable, defaultValue: String) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun loadClassField(target: LLVMVariable, source: LLVMVariable, offset: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun loadVariableOffset(target: LLVMVariable, source: LLVMVariable, index: LLVMConstant) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun load(source: LLVMVariable) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun label(label: LLVMLabel) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun structInitializer(args: List, values: List) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun memcpy(castedDst: LLVMVariable, castedSrc: LLVMVariable, size: Int, align: Int, volatile: Boolean) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun storeString(target: LLVMVariable, source: LLVMVariable, offset: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun storeVariable(target: LLVMSingleValue, source: LLVMSingleValue) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun storeNull(result: LLVMVariable) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/generators.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/generators.kt deleted file mode 100644 index ea1b234f28a..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/generators.kt +++ /dev/null @@ -1,63 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.jetbrains.kotlin.builtins.isFunctionTypeOrSubtype -import org.jetbrains.kotlin.js.descriptorUtils.nameIfStandardType -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.types.KotlinType -import org.jetbrains.kotlin.types.typeUtil.isUnit -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.types.* - - -fun LLVMFunctionDescriptor(name: String, - argTypes: List?, - returnType: LLVMType, - declare: Boolean = false) = - "${if (declare) "declare" else "define weak"} $returnType @$name(${ - argTypes?.mapIndexed { i: Int, s: LLVMVariable -> - "${s.pointedType} ${if (s.type is LLVMReferenceType && !s.type.byRef) "byval" else ""} %${s.label}" - }?.joinToString()}) #0" - -fun LLVMInstanceOfStandardType(name: String, - type: KotlinType, - scope: LLVMScope = LLVMRegisterScope(), - state: TranslationState): LLVMVariable { - val typeName = type.toString().dropLastWhile { it == '?' } - val pointerMark = if (type.isMarkedNullable) 1 else 0 - return when { - type.isFunctionTypeOrSubtype -> LLVMVariable(name, LLVMFunctionType(type, state), name, scope, pointer = 1) - typeName == "Boolean" -> LLVMVariable(name, LLVMBooleanType(), name, scope, pointerMark) - typeName == "Byte" -> LLVMVariable(name, LLVMByteType(), name, scope, pointerMark) - typeName == "Char" -> LLVMVariable(name, LLVMCharType(), name, scope, pointerMark) - typeName == "Short" -> LLVMVariable(name, LLVMShortType(), name, scope, pointerMark) - typeName == "Int" -> LLVMVariable(name, LLVMIntType(), name, scope, pointerMark) - typeName == "Long" -> LLVMVariable(name, LLVMLongType(), name, scope, pointerMark) - typeName == "Float" -> LLVMVariable(name, LLVMFloatType(), name, scope, pointerMark) - typeName == "Double" -> LLVMVariable(name, LLVMDoubleType(), name, scope, pointerMark) - typeName == "String" -> LLVMVariable(name, LLVMStringType(0), name, scope, pointerMark) - type.nameIfStandardType.toString() == "Nothing" -> LLVMVariable(name, LLVMNullType(), name, scope) - type.isUnit() -> LLVMVariable("", LLVMVoidType(), name, scope) - type.isMarkedNullable -> LLVMVariable(name, LLVMReferenceType(typeName, prefix = "class"), name, scope, pointer = pointerMark) - else -> { - val declarationDescriptor = type.constructor.declarationDescriptor!! - val refName = declarationDescriptor.fqNameSafe.asString() - val refType = state.classes[type.toString()]?.type ?: LLVMReferenceType(refName, align = TranslationState.POINTER_ALIGN, prefix = "class") - - LLVMVariable(name, refType, name, scope, pointer = 1) - } - } -} - -fun LLVMMapStandardType(type: KotlinType, - state: TranslationState) = - LLVMInstanceOfStandardType("type", type, LLVMRegisterScope(), state).type - -fun String.addBeforeIfNotEmpty(add: String): String = - if (this.length > 0) add + this else this - -fun String.addAfterIfNotEmpty(add: String): String = - if (this.length > 0) this + add else this - -fun FqName.convertToNativeName(): String = - this.asString().replace(".", "") \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/ir/IrLlvmBuilder.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/ir/IrLlvmBuilder.kt deleted file mode 100644 index bb136cf19f1..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/ir/IrLlvmBuilder.kt +++ /dev/null @@ -1,153 +0,0 @@ -package org.kotlinnative.translator.llvm.ir - -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.LLVMStringType -import org.kotlinnative.translator.llvm.types.LLVMType -import java.util.* - -/** - * Created by minamoto on 23/09/2016. - */ -class IrLlvmBuilder { - private val localCode: StringBuilder = StringBuilder() - private val globalCode: StringBuilder = StringBuilder() - private val arm = true /* architecture specific TBD */ - private val exceptions = mapOf( - Pair("KotlinNullPointerException", initializeExceptionString("Exception in thread main kotlin.KotlinNullPointerException"))) - - - init { - val declares = arrayOf( - "declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1)", - "declare i8* @malloc_heap(i32)", - "declare i32 @printf(i8*, ...)", - "declare void @abort()", - "%class.Nothing = type { }") - - declares.forEach { addLLVMCodeToGlobalPlace(it) } - - if (arm) { - val functionAttributes = """attributes #0 = { nounwind "stack-protector-buffer-size"="8" "target-cpu"="cortex-m3" "target-features"="+hwdiv,+strict-align" }""" - addLLVMCodeToGlobalPlace(functionAttributes) - } - } - - fun addLLVMCodeToLocalPlace(code: String) = - localCode.appendln(code) - - fun addLLVMCodeToGlobalPlace(code: String) = - globalCode.appendln(code) - - private fun initializeExceptionString(string: String): LLVMVariable { - TODO() - /* - val result = getNewVariable(LLVMStringType(string.length), pointer = 0, scope = LLVMVariableScope(), prefix = "exceptions.str.") - addStringConstant(result, string) - return result - */ - } - - fun comment(comment: String) { - TODO() - } - - fun startExpression() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun endExpression() { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun assignment(lhs: LLVMVariable, rhs: LLVMNode) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun returnOperation(llvmVariable: LLVMSingleValue) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun anyReturn(type: LLVMType, value: String, pointer: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun stringConstant(variable: LLVMVariable, value: String) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun conditionalBranch(condition: LLVMSingleValue, thenLabel: LLVMLabel, elseLabel: LLVMLabel) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun unconditionalBranch(label: LLVMLabel) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun abort(exceptionName: String) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun call(functionName: LLVMVariable, arguments: List) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun alloca(target: LLVMVariable, asValue: Boolean, pointer: Boolean) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun heapAndCast(target: LLVMVariable, asValue: Boolean, pointer: Boolean) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun globalinitialize(target: LLVMVariable, fields: ArrayList, initializers: Map, classType: LLVMType) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun bitcast(src: LLVMVariable, llvmType: LLVMType, pointer: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun classDeclaration(name: String, fields: List) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun globalDeclaration(variable: LLVMVariable, defaultValue: String) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun loadClassField(target: LLVMVariable, source: LLVMVariable, offset: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun loadVariableOffset(target: LLVMVariable, source: LLVMVariable, index: LLVMConstant) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun load(source: LLVMVariable) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun label(label: LLVMLabel) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun structInitializer(args: List, values: List) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun memcpy(castedDst: LLVMVariable, castedSrc: LLVMVariable, size: Int, align: Int, volatile: Boolean) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun storeString(target: LLVMVariable, source: LLVMVariable, offset: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun storeVariable(target: LLVMSingleValue, source: LLVMSingleValue) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - fun storeNull(result: LLVMVariable) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMArray.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMArray.kt deleted file mode 100644 index 7176186a117..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMArray.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -interface LLVMArray { - - val arrayElementType: LLVMType - val fullArrayType: String - val length: Int - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt deleted file mode 100644 index 856a030be72..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt +++ /dev/null @@ -1,69 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue -import java.lang.IllegalArgumentException - - -class LLVMBooleanType() : LLVMType() { - - override val align = 4 - override var size: Int = 1 - override val defaultValue = "0" - override val mangle = "Boolean" - override val isPrimitive = true - override val typename = "i1" - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "sub nsw i1 $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "mul nsw i1 $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "add nsw i1 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "sdiv i1 $firstOp, $secondOp") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i1 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i1 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i1 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i1 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i1" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i1" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "or i1 $firstOp, $secondOp") - - override fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "and i1 $firstOp, $secondOp") - - override fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "xor i1 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMBooleanType - - override fun parseArg(inputArg: String) = - when (inputArg.toLowerCase()) { - "true" -> "1" - "false" -> "0" - else -> throw IllegalArgumentException("Failed to parse boolean type") - } - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMByteType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMByteType.kt deleted file mode 100644 index 372b3c1cfe7..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMByteType.kt +++ /dev/null @@ -1,42 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -class LLVMByteType() : LLVMType() { - - override val align = 1 - override var size: Int = 1 - override val mangle = "Byte" - override val typename = "i8" - override val defaultValue = "0" - override val isPrimitive = true - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i8 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i8 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i8 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i8 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMByteType(), "srem i8 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMByteType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt deleted file mode 100644 index 75dbd3bc2c5..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt +++ /dev/null @@ -1,41 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -class LLVMCharType() : LLVMType() { - - override val align = 1 - override var size: Int = 1 - override val mangle = "Char" - override val typename = "i8" - override val defaultValue = "0" - override val isPrimitive = true - - override fun parseArg(inputArg: String) = inputArg.first().toInt().toString() - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i8 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i8 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i8 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i8 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMCharType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt deleted file mode 100644 index f2530e92d11..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt +++ /dev/null @@ -1,61 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMDoubleType() : LLVMType() { - - override val align = 8 - override var size: Int = 8 - override val mangle = "Double" - override val typename = "double" - override val defaultValue = "0.0" - override val isPrimitive = true - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fsub double $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fmul double $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fadd double $firstOp, $secondOp") - - override fun operatorInc(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fadd double $firstOp, 1.0") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fdiv double $firstOp, $secondOp") - - override fun operatorDec(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fsub double $firstOp, 1.0") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp olt double $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ogt double $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ole double i32 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oge double i32 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oeq double $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp one double $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "frem double $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMDoubleType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt deleted file mode 100644 index b98b18d0b59..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt +++ /dev/null @@ -1,61 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMFloatType() : LLVMType() { - - override val align = 4 - override var size: Int = 4 - override val mangle = "Float" - override val typename = "float" - override val defaultValue = "0.0" - override val isPrimitive = true - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fsub float $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fmul float $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fadd float $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fdiv float $firstOp, $secondOp") - - override fun operatorInc(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fadd float $firstOp, 1.0") - - override fun operatorDec(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fsub float $firstOp, 1.0") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp olt float $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ogt float $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ole float i32 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oge float i32 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oeq float" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp one float" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "frem float $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMFloatType - - override fun hashCode() = - typename.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt deleted file mode 100644 index 06304e8c0e1..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt +++ /dev/null @@ -1,37 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.jetbrains.kotlin.types.KotlinType -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.LLVMInstanceOfStandardType -import org.kotlinnative.translator.llvm.LLVMVariable - -class LLVMFunctionType(type: KotlinType, state: TranslationState) : LLVMType() { - - override val defaultValue = "" - override val align: Int = 4 - override var size: Int = 4 - override val mangle: String - override val typename = "FunctionType" - - val arguments: List - val returnType: LLVMVariable - - init { - val types = type.arguments.map { LLVMInstanceOfStandardType("", it.type, state = state) }.toList() - returnType = types.last() - arguments = types.dropLast(1) - mangle = "F.${LLVMType.mangleFunctionArguments(arguments)}.EF" - } - - fun mangleArgs() = LLVMType.mangleFunctionArguments(arguments) - - override fun toString() = - "${returnType.type} (${arguments.map { it.pointedType }.joinToString()})" - - override fun equals(other: Any?) = - (other is LLVMFunctionType) && (mangle == other.mangle) - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMIntType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMIntType.kt deleted file mode 100644 index efd61f3a4ed..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMIntType.kt +++ /dev/null @@ -1,89 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMIntType() : LLVMType() { - - override val align = 4 - override var size: Int = 4 - override val defaultValue = "0" - override val mangle = "Int" - override val typename = "i32" - override val isPrimitive = true - - override fun convertFrom(source: LLVMSingleValue) = - when (source.type) { - is LLVMBooleanType, - is LLVMByteType, - is LLVMCharType, - is LLVMShortType -> LLVMExpression(LLVMIntType(), " sext ${source.type} $source to i32") - else -> throw UnimplementedException() - } - - override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "or i32 $firstOp, $secondOp") - - override fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "and i32 $firstOp, $secondOp") - - override fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "xor i32 $firstOp, $secondOp") - - override fun operatorShl(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "shl i32 $firstOp, $secondOp") - - override fun operatorShr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "ashr i32 $firstOp, $secondOp") - - override fun operatorUshr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "lshr i32 $firstOp, $secondOp") - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "sub nsw i32 $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "mul nsw i32 $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "add nsw i32 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "sdiv i32 $firstOp, $secondOp") - - override fun operatorInc(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "add nsw i32 $firstOp, 1") - - override fun operatorDec(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "sub nsw i32 $firstOp, 1") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i32 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i32 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i32 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i32 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i32" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i32" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "srem i32 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMIntType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMLongType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMLongType.kt deleted file mode 100644 index eafcde9c8ef..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMLongType.kt +++ /dev/null @@ -1,84 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMLongType() : LLVMType() { - - override val align = 8 - override var size = 8 - override val defaultValue = "0" - override val typename = "i64" - override val mangle = "Long" - override val isPrimitive = true - - override fun convertFrom(source: LLVMSingleValue) = - when (source.type) { - is LLVMBooleanType, - is LLVMByteType, - is LLVMCharType, - is LLVMShortType, - is LLVMIntType -> LLVMExpression(LLVMLongType(), " sext ${source.type} $source to i64") - else -> throw UnimplementedException() - } - - override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "or i64 $firstOp, $secondOp") - - override fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "and i64 $firstOp, $secondOp") - - override fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "xor i64 $firstOp, $secondOp") - - override fun operatorShl(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "shl i64 $firstOp, $secondOp") - - override fun operatorShr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "ashr i64 $firstOp, $secondOp") - - override fun operatorUshr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "lshr i64 $firstOp, $secondOp") - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "sub nsw i64 $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "mul nsw i64 $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "add nsw i64 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "sdiv i64 $firstOp, $secondOp") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i64 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i64 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i64 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i64 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i64" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i64" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "srem i64 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMLongType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMNullType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMNullType.kt deleted file mode 100644 index c5d3c935c2b..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMNullType.kt +++ /dev/null @@ -1,20 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -class LLVMNullType(var baseType: LLVMType? = null) : LLVMType() { - - override val align = 1 - override var size = 0 - override val defaultValue = "null" - override val mangle = "" - override val typename = baseType?.typename.orEmpty() - - override fun parseArg(inputArg: String) = "null" - override fun toString() = baseType?.toString().orEmpty() - - override fun equals(other: Any?) = - other is LLVMNullType - - override fun hashCode() = - "null".hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt deleted file mode 100644 index 86182e1ef4c..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt +++ /dev/null @@ -1,32 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue -import org.kotlinnative.translator.llvm.addAfterIfNotEmpty - - -class LLVMReferenceType(val type: String, - var prefix: String = "", - override var align: Int = TranslationState.POINTER_ALIGN, - override var size: Int = TranslationState.POINTER_SIZE, - var byRef: Boolean = true) : LLVMType() { - - override val defaultValue: String = "null" - override val mangle = "Ref_$type" - override val typename = prefix.addAfterIfNotEmpty(".") + type - - override fun toString() = "%$typename" - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq ${firstOp.pointedType} $firstOp, ${if (secondOp.type is LLVMNullType) "null" else "$secondOp"}") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne ${firstOp.pointedType} $firstOp, ${if (secondOp.type is LLVMNullType) "null" else "$secondOp"}") - - override fun equals(other: Any?) = - (other is LLVMReferenceType) and (typename.equals((other as LLVMReferenceType).typename)) - - override fun hashCode() = - typename.hashCode() -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMShortType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMShortType.kt deleted file mode 100644 index bb4b07167cf..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMShortType.kt +++ /dev/null @@ -1,45 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -class LLVMShortType() : LLVMType() { - - override val align = 2 - override var size: Int = 2 - override val defaultValue = "0" - override val typename = "i16" - override val mangle = "Short" - override val isPrimitive = true - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i16 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i16 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i16 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i16 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i16" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i16" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMShortType(), "srem i16 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMShortType(), "sdiv i16 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMShortType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMStringType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMStringType.kt deleted file mode 100644 index 463429c9249..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMStringType.kt +++ /dev/null @@ -1,23 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -class LLVMStringType(override val length: Int, var isLoaded: Boolean = true) : LLVMArray, LLVMType() { - - override val align = 8 - override var size: Int = 1 - override val defaultValue = "" - override val typename = "i8*" - override val mangle = "String" - override val arrayElementType = LLVMCharType() - override val fullArrayType = "[${length + 1} x i8]" - - override fun equals(other: Any?) = - when (other) { - is LLVMStringType -> this.length == other.length - else -> false - } - - override fun hashCode() = - length * 31 + if (isLoaded) 1 else 0 + - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMType.kt deleted file mode 100644 index 09bb453ae22..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMType.kt +++ /dev/null @@ -1,55 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -abstract class LLVMType() { - - companion object { - fun mangleFunctionArguments(names: List) = - mangleFunctionTypes(names.map { it.type }) - - fun mangleFunctionTypes(names: List) = - if (names.size > 0) "_${names.joinToString(separator = "_", transform = { it.mangle })}" else "" - - fun nullOrVoidType(type: LLVMType): Boolean = - (type is LLVMNullType) or (type is LLVMVoidType) - - fun isReferredType(type: LLVMType?): Boolean = - (type is LLVMNullType) or (type is LLVMReferenceType) - - } - - abstract val align: Int - abstract val typename: String - abstract var size: Int - abstract val defaultValue: String - abstract val mangle: String - open val isPrimitive: Boolean = false - - open fun parseArg(inputArg: String) = inputArg - open fun convertFrom(source: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - override fun toString() = typename - - open fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorShl(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorShr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorUshr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorInc(firstOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorDec(firstOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt b/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt deleted file mode 100644 index 74d7359ad53..00000000000 --- a/experiments/translator-bc/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -class LLVMVoidType() : LLVMType() { - - override val align = 0 - override var size = 0 - override val defaultValue = "" - override val typename = "void" - override val mangle = "" - - override fun equals(other: Any?) = - other is LLVMVoidType - - override fun hashCode() = - typename.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt b/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt deleted file mode 100644 index 0e36a037c22..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt +++ /dev/null @@ -1,63 +0,0 @@ -fun array_extensions_1_copyOf(): Int { - val array = IntArray(3) - array[0] = 1 - array[1] = 20 - array[2] = 333 - val minimize = array.copyOf(2) - return minimize[1] + minimize.size -} - -fun array_extensions_1_copyOf_extend(): Int { - val array = IntArray(3) - array[0] = 1 - array[1] = 20 - array[2] = 333 - val minimize = array.copyOf(7) - return minimize[2] + minimize[3] + minimize[4] + minimize[5] + minimize[6] + minimize.size -} - -fun array_extensions_1_copyOfRange(): Int { - val array = IntArray(7) - array[0] = 1 - array[1] = 20 - array[2] = 333 - array[3] = 444 - array[4] = 555 - array[5] = 666 - array[6] = 777 - - val minimize = array.copyOfRange(2, 4) - val ans = minimize[0] + minimize[1] + minimize.size - return ans -} - -fun array_extensions_1_plus_element(): Int { - val array = IntArray(7) - array[0] = 1 - array[1] = 20 - array[2] = 333 - array[3] = 444 - array[4] = 555 - array[5] = 666 - array[6] = 777 - - val minimize = array.plus(2148) - return minimize[6] + minimize[7] + minimize.size -} - -fun array_extensions_1_plus_array(): Int { - val array = IntArray(3) - array[0] = 1 - array[1] = 20 - array[2] = 333 - val secondArray = IntArray(4) - secondArray[0] = 9999 - secondArray[1] = 2789 - secondArray[2] = 11792 - secondArray[3] = 67820 - - val maximize = array.plus(secondArray) - val ans = maximize[2] + maximize[5] + maximize.size - return ans -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt.err deleted file mode 100644 index 0e67b20a8c4..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt.err +++ /dev/null @@ -1,12 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./array_extensions_1/array_extensions_1.kt 6:26 Unresolved reference: copyOf -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./array_extensions_1/array_extensions_1.kt 15:26 Unresolved reference: copyOf -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./array_extensions_1/array_extensions_1.kt 29:26 Unresolved reference: copyOfRange -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./array_extensions_1/array_extensions_1.kt 44:26 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./array_extensions_1/array_extensions_1.kt 59:26 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.txt b/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.txt deleted file mode 100644 index 7856f082977..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_1/array_extensions_1.txt +++ /dev/null @@ -1,5 +0,0 @@ -array_extensions_1_copyOf() == 22 -array_extensions_1_copyOfRange() == 779 -array_extensions_1_copyOf_extend() == 340 -array_extensions_1_plus_element() == 2933 -array_extensions_1_plus_array() == 12132 diff --git a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt b/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt deleted file mode 100644 index 3fa1227e323..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun array_extensions_2_plus_array_slave(): Int { - var array = IntArray(0) - array = array.plus(10) - println(array[0]) - - return array[0] -} - -fun array_extensions_2_plus_array(): Int{ - return array_extensions_2_plus_array_slave() -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt.err b/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt.err deleted file mode 100644 index 12c34c23900..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt.err +++ /dev/null @@ -1,8 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./array_extensions_2/array_extensions_2.kt 3:19 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./array_extensions_2/array_extensions_2.kt 4:5 Unresolved reference: println -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt.out b/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.txt b/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.txt deleted file mode 100644 index 5c5aa70cd5d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/array_extensions_2/array_extensions_2.txt +++ /dev/null @@ -1 +0,0 @@ -array_extensions_2_plus_array() == 10 diff --git a/experiments/translator-bc/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.kt b/experiments/translator-bc/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.kt deleted file mode 100644 index 7e05899e992..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.kt +++ /dev/null @@ -1,17 +0,0 @@ -fun assignment_operators_1_plus(x: Int): Int { - var nzk = x - nzk += 6 - return nzk -} - -fun assignment_operators_1_minus(x: Int): Int { - var nzk = x - nzk -= 6 - return nzk -} - -fun assignment_operators_1_times(x: Int): Int { - var nzk = x - nzk *= 6 - return nzk -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.kt.out deleted file mode 100644 index 33a6223a007..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.kt.out +++ /dev/null @@ -1,58 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @assignment_operators_1_plus_Int(i32 %assignment_operators_1_plus.x) #0 -{ -%assignment_operators_1_plus.x.addr = alloca i32, align 4 -store i32 %assignment_operators_1_plus.x, i32* %assignment_operators_1_plus.x.addr, align 4 -%managed.unique.0.assignment_operators_1_plus.nzk = alloca i32, align 4 -%var2 = load i32* %managed.unique.0.assignment_operators_1_plus.nzk, align 4 -%var3 = load i32* %assignment_operators_1_plus.x.addr, align 4 -store i32 %var3, i32* %managed.unique.0.assignment_operators_1_plus.nzk, align 4 -%var4 = load i32* %managed.unique.0.assignment_operators_1_plus.nzk, align 4 -%var5 = load i32* %managed.unique.0.assignment_operators_1_plus.nzk, align 4 -%var6 = add nsw i32 %var5, 6 -store i32 %var6, i32* %managed.unique.0.assignment_operators_1_plus.nzk, align 4 -%var7 = load i32* %managed.unique.0.assignment_operators_1_plus.nzk, align 4 -%var8 = load i32* %managed.unique.0.assignment_operators_1_plus.nzk, align 4 -ret i32 %var8 -unreachable -} -define weak i32 @assignment_operators_1_times_Int(i32 %assignment_operators_1_times.x) #0 -{ -%assignment_operators_1_times.x.addr = alloca i32, align 4 -store i32 %assignment_operators_1_times.x, i32* %assignment_operators_1_times.x.addr, align 4 -%managed.unique.1.assignment_operators_1_times.nzk = alloca i32, align 4 -%var9 = load i32* %managed.unique.1.assignment_operators_1_times.nzk, align 4 -%var10 = load i32* %assignment_operators_1_times.x.addr, align 4 -store i32 %var10, i32* %managed.unique.1.assignment_operators_1_times.nzk, align 4 -%var11 = load i32* %managed.unique.1.assignment_operators_1_times.nzk, align 4 -%var12 = load i32* %managed.unique.1.assignment_operators_1_times.nzk, align 4 -%var13 = mul nsw i32 %var12, 6 -store i32 %var13, i32* %managed.unique.1.assignment_operators_1_times.nzk, align 4 -%var14 = load i32* %managed.unique.1.assignment_operators_1_times.nzk, align 4 -%var15 = load i32* %managed.unique.1.assignment_operators_1_times.nzk, align 4 -ret i32 %var15 -unreachable -} -define weak i32 @assignment_operators_1_minus_Int(i32 %assignment_operators_1_minus.x) #0 -{ -%assignment_operators_1_minus.x.addr = alloca i32, align 4 -store i32 %assignment_operators_1_minus.x, i32* %assignment_operators_1_minus.x.addr, align 4 -%managed.unique.2.assignment_operators_1_minus.nzk = alloca i32, align 4 -%var16 = load i32* %managed.unique.2.assignment_operators_1_minus.nzk, align 4 -%var17 = load i32* %assignment_operators_1_minus.x.addr, align 4 -store i32 %var17, i32* %managed.unique.2.assignment_operators_1_minus.nzk, align 4 -%var18 = load i32* %managed.unique.2.assignment_operators_1_minus.nzk, align 4 -%var19 = load i32* %managed.unique.2.assignment_operators_1_minus.nzk, align 4 -%var20 = sub nsw i32 %var19, 6 -store i32 %var20, i32* %managed.unique.2.assignment_operators_1_minus.nzk, align 4 -%var21 = load i32* %managed.unique.2.assignment_operators_1_minus.nzk, align 4 -%var22 = load i32* %managed.unique.2.assignment_operators_1_minus.nzk, align 4 -ret i32 %var22 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.txt b/experiments/translator-bc/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.txt deleted file mode 100644 index e1d861a6018..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -assignment_operators_1_plus_Int(11) == 17 -assignment_operators_1_minus_Int(11) == 5 -assignment_operators_1_times_Int(11) == 66 diff --git a/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt b/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt deleted file mode 100644 index b05d0a9e391..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -fun booleanarray_1_slave(x: Boolean): Boolean { - val z = BooleanArray(10) - z.set(1, x) - return z.get(1) -} - -fun booleanarray_1(x: Boolean): Int { - return if (booleanarray_1_slave(x)) 1 else 0 -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt.err deleted file mode 100644 index 2e8d0441f9c..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt.err +++ /dev/null @@ -1,15 +0,0 @@ -Exception in thread "main" java.rmi.UnexpectedException: %class.kotlin.BooleanArray%var8 - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateMemberMethodOrField(BlockCodegen.kt:112) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateDotBody(BlockCodegen.kt:332) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateDotExpression(BlockCodegen.kt:284) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:199) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:192) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock(BlockCodegen.kt:45) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock$default(BlockCodegen.kt:42) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate(FunctionCodegen.kt:81) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate$default(FunctionCodegen.kt:72) - at org.kotlinnative.translator.ProjectTranslator.generateProjectBody(ProjectTranslator.kt:69) - at org.kotlinnative.translator.ProjectTranslator.generateCode(ProjectTranslator.kt:20) - at MainKt.main(main.kt:22) diff --git a/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.txt b/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.txt deleted file mode 100644 index b63930e4883..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/booleanarray_1/booleanarray_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -booleanarray_1_Boolean(1) == 1 -booleanarray_1_Boolean(0) == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.kt b/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.kt deleted file mode 100644 index 416ad831173..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.kt +++ /dev/null @@ -1,25 +0,0 @@ -fun bytearray_1(x: Byte): Byte { - val z = ByteArray(10) - z.set(1, x) - val r = z.clone() - return r.get(1) -} - -fun bytearray_1_array(): Int { - val size = 256 - val z= ByteArray(size) - var ind = 0 - while(ind < size){ - z[ind] = ind.toByte() - ind +=1 - } - val newInstance = z.clone() - ind = 0 - var result = true - while(ind < size){ - result = result and (newInstance[ind] == ind.toByte()) - ind += 1 - } - assert(result) - return 1 -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.kt.err deleted file mode 100644 index 802bcbb4af6..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.kt.err +++ /dev/null @@ -1,6 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./bytearray_1/bytearray_1.kt 23:5 Unresolved reference: assert -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.txt b/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.txt deleted file mode 100644 index 21a08e21200..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/bytearray_1/bytearray_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -bytearray_1_Byte(123) == 123 -bytearray_1_array() == 1 diff --git a/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.c b/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.c deleted file mode 100644 index 2e4fdfd61c0..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.c +++ /dev/null @@ -1,4 +0,0 @@ - -int apply_c(int x, int (*foo)(int)) { - return foo(x); -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.kt b/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.kt deleted file mode 100644 index 6142fd0e975..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.kt +++ /dev/null @@ -1,26 +0,0 @@ - -external fun apply_c(arg: Int, x: (Int)-> Int): Int - -fun callback_1_inc(i: Int): Int { - return i + 1 -} - -fun callback_1_dec(i: Int): Int { - return i - 1 -} - -fun callback_1_apply(arg: Int, x: (Int) -> Int): Int { - return x(arg) -} - -fun compact_test(x: Int): Int { - return callback_1_apply(callback_1_apply(callback_1_apply(x, ::callback_1_inc), ::callback_1_inc), ::callback_1_dec) -} - -fun external_test(x: Int): Int { - return apply_c(apply_c(apply_c(x, ::callback_1_dec), ::callback_1_dec), ::callback_1_inc) -} - -fun mixed_test(x: Int): Int { - return callback_1_apply(apply_c(callback_1_apply(apply_c(callback_1_apply(x, ::callback_1_inc), ::callback_1_inc), ::callback_1_inc), ::callback_1_dec), ::callback_1_inc) -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.kt.out deleted file mode 100644 index 061e6bb8412..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.kt.out +++ /dev/null @@ -1,242 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -declare i32 @apply_c(i32 %apply_c.arg, i32 (i32)* %apply_c.x) #0 -define weak i32 @callback_1_dec_Int(i32 %callback_1_dec.i) #0 -{ -%callback_1_dec.i.addr = alloca i32, align 4 -store i32 %callback_1_dec.i, i32* %callback_1_dec.i.addr, align 4 -%var2 = load i32* %callback_1_dec.i.addr, align 4 -%var3 = sub nsw i32 %var2, 1 -ret i32 %var3 -unreachable -} -define weak i32 @callback_1_inc_Int(i32 %callback_1_inc.i) #0 -{ -%callback_1_inc.i.addr = alloca i32, align 4 -store i32 %callback_1_inc.i, i32* %callback_1_inc.i.addr, align 4 -%var4 = load i32* %callback_1_inc.i.addr, align 4 -%var5 = add nsw i32 %var4, 1 -ret i32 %var5 -unreachable -} -define weak i32 @callback_1_apply_Int_F._Int.EF(i32 %callback_1_apply.arg, i32 (i32)* %callback_1_apply.x) #0 -{ -%callback_1_apply.arg.addr = alloca i32, align 4 -store i32 %callback_1_apply.arg, i32* %callback_1_apply.arg.addr, align 4 -%var6 = load i32* %callback_1_apply.arg.addr, align 4 -%var7 = call i32 %callback_1_apply.x(i32 %var6) -%var8 = alloca i32, align 4 -store i32 %var7, i32* %var8, align 4 -%var9 = load i32* %var8, align 4 -ret i32 %var9 -unreachable -} -define weak i32 @external_test_Int(i32 %external_test.x) #0 -{ -%external_test.x.addr = alloca i32, align 4 -store i32 %external_test.x, i32* %external_test.x.addr, align 4 -%var10 = load i32* %external_test.x.addr, align 4 -%var11 = call i32 @apply_c(i32 %var10, i32 (i32)* @callback_1_dec_Int) -%var12 = alloca i32, align 4 -store i32 %var11, i32* %var12, align 4 -%var13 = load i32* %external_test.x.addr, align 4 -%var14 = call i32 @apply_c(i32 %var13, i32 (i32)* @callback_1_dec_Int) -%var15 = alloca i32, align 4 -store i32 %var14, i32* %var15, align 4 -%var16 = load i32* %var15, align 4 -%var17 = call i32 @apply_c(i32 %var16, i32 (i32)* @callback_1_dec_Int) -%var18 = alloca i32, align 4 -store i32 %var17, i32* %var18, align 4 -%var19 = load i32* %external_test.x.addr, align 4 -%var20 = call i32 @apply_c(i32 %var19, i32 (i32)* @callback_1_dec_Int) -%var21 = alloca i32, align 4 -store i32 %var20, i32* %var21, align 4 -%var22 = load i32* %external_test.x.addr, align 4 -%var23 = call i32 @apply_c(i32 %var22, i32 (i32)* @callback_1_dec_Int) -%var24 = alloca i32, align 4 -store i32 %var23, i32* %var24, align 4 -%var25 = load i32* %var24, align 4 -%var26 = call i32 @apply_c(i32 %var25, i32 (i32)* @callback_1_dec_Int) -%var27 = alloca i32, align 4 -store i32 %var26, i32* %var27, align 4 -%var28 = load i32* %var27, align 4 -%var29 = call i32 @apply_c(i32 %var28, i32 (i32)* @callback_1_inc_Int) -%var30 = alloca i32, align 4 -store i32 %var29, i32* %var30, align 4 -%var31 = load i32* %var30, align 4 -ret i32 %var31 -unreachable -} -define weak i32 @compact_test_Int(i32 %compact_test.x) #0 -{ -%compact_test.x.addr = alloca i32, align 4 -store i32 %compact_test.x, i32* %compact_test.x.addr, align 4 -%var32 = load i32* %compact_test.x.addr, align 4 -%var33 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var32, i32 (i32)* @callback_1_inc_Int) -%var34 = alloca i32, align 4 -store i32 %var33, i32* %var34, align 4 -%var35 = load i32* %compact_test.x.addr, align 4 -%var36 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var35, i32 (i32)* @callback_1_inc_Int) -%var37 = alloca i32, align 4 -store i32 %var36, i32* %var37, align 4 -%var38 = load i32* %var37, align 4 -%var39 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var38, i32 (i32)* @callback_1_inc_Int) -%var40 = alloca i32, align 4 -store i32 %var39, i32* %var40, align 4 -%var41 = load i32* %compact_test.x.addr, align 4 -%var42 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var41, i32 (i32)* @callback_1_inc_Int) -%var43 = alloca i32, align 4 -store i32 %var42, i32* %var43, align 4 -%var44 = load i32* %compact_test.x.addr, align 4 -%var45 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var44, i32 (i32)* @callback_1_inc_Int) -%var46 = alloca i32, align 4 -store i32 %var45, i32* %var46, align 4 -%var47 = load i32* %var46, align 4 -%var48 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var47, i32 (i32)* @callback_1_inc_Int) -%var49 = alloca i32, align 4 -store i32 %var48, i32* %var49, align 4 -%var50 = load i32* %var49, align 4 -%var51 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var50, i32 (i32)* @callback_1_dec_Int) -%var52 = alloca i32, align 4 -store i32 %var51, i32* %var52, align 4 -%var53 = load i32* %var52, align 4 -ret i32 %var53 -unreachable -} -define weak i32 @mixed_test_Int(i32 %mixed_test.x) #0 -{ -%mixed_test.x.addr = alloca i32, align 4 -store i32 %mixed_test.x, i32* %mixed_test.x.addr, align 4 -%var54 = load i32* %mixed_test.x.addr, align 4 -%var55 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var54, i32 (i32)* @callback_1_inc_Int) -%var56 = alloca i32, align 4 -store i32 %var55, i32* %var56, align 4 -%var57 = load i32* %mixed_test.x.addr, align 4 -%var58 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var57, i32 (i32)* @callback_1_inc_Int) -%var59 = alloca i32, align 4 -store i32 %var58, i32* %var59, align 4 -%var60 = load i32* %var59, align 4 -%var61 = call i32 @apply_c(i32 %var60, i32 (i32)* @callback_1_inc_Int) -%var62 = alloca i32, align 4 -store i32 %var61, i32* %var62, align 4 -%var63 = load i32* %mixed_test.x.addr, align 4 -%var64 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var63, i32 (i32)* @callback_1_inc_Int) -%var65 = alloca i32, align 4 -store i32 %var64, i32* %var65, align 4 -%var66 = load i32* %mixed_test.x.addr, align 4 -%var67 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var66, i32 (i32)* @callback_1_inc_Int) -%var68 = alloca i32, align 4 -store i32 %var67, i32* %var68, align 4 -%var69 = load i32* %var68, align 4 -%var70 = call i32 @apply_c(i32 %var69, i32 (i32)* @callback_1_inc_Int) -%var71 = alloca i32, align 4 -store i32 %var70, i32* %var71, align 4 -%var72 = load i32* %var71, align 4 -%var73 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var72, i32 (i32)* @callback_1_inc_Int) -%var74 = alloca i32, align 4 -store i32 %var73, i32* %var74, align 4 -%var75 = load i32* %mixed_test.x.addr, align 4 -%var76 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var75, i32 (i32)* @callback_1_inc_Int) -%var77 = alloca i32, align 4 -store i32 %var76, i32* %var77, align 4 -%var78 = load i32* %mixed_test.x.addr, align 4 -%var79 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var78, i32 (i32)* @callback_1_inc_Int) -%var80 = alloca i32, align 4 -store i32 %var79, i32* %var80, align 4 -%var81 = load i32* %var80, align 4 -%var82 = call i32 @apply_c(i32 %var81, i32 (i32)* @callback_1_inc_Int) -%var83 = alloca i32, align 4 -store i32 %var82, i32* %var83, align 4 -%var84 = load i32* %mixed_test.x.addr, align 4 -%var85 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var84, i32 (i32)* @callback_1_inc_Int) -%var86 = alloca i32, align 4 -store i32 %var85, i32* %var86, align 4 -%var87 = load i32* %mixed_test.x.addr, align 4 -%var88 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var87, i32 (i32)* @callback_1_inc_Int) -%var89 = alloca i32, align 4 -store i32 %var88, i32* %var89, align 4 -%var90 = load i32* %var89, align 4 -%var91 = call i32 @apply_c(i32 %var90, i32 (i32)* @callback_1_inc_Int) -%var92 = alloca i32, align 4 -store i32 %var91, i32* %var92, align 4 -%var93 = load i32* %var92, align 4 -%var94 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var93, i32 (i32)* @callback_1_inc_Int) -%var95 = alloca i32, align 4 -store i32 %var94, i32* %var95, align 4 -%var96 = load i32* %var95, align 4 -%var97 = call i32 @apply_c(i32 %var96, i32 (i32)* @callback_1_dec_Int) -%var98 = alloca i32, align 4 -store i32 %var97, i32* %var98, align 4 -%var99 = load i32* %mixed_test.x.addr, align 4 -%var100 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var99, i32 (i32)* @callback_1_inc_Int) -%var101 = alloca i32, align 4 -store i32 %var100, i32* %var101, align 4 -%var102 = load i32* %mixed_test.x.addr, align 4 -%var103 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var102, i32 (i32)* @callback_1_inc_Int) -%var104 = alloca i32, align 4 -store i32 %var103, i32* %var104, align 4 -%var105 = load i32* %var104, align 4 -%var106 = call i32 @apply_c(i32 %var105, i32 (i32)* @callback_1_inc_Int) -%var107 = alloca i32, align 4 -store i32 %var106, i32* %var107, align 4 -%var108 = load i32* %mixed_test.x.addr, align 4 -%var109 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var108, i32 (i32)* @callback_1_inc_Int) -%var110 = alloca i32, align 4 -store i32 %var109, i32* %var110, align 4 -%var111 = load i32* %mixed_test.x.addr, align 4 -%var112 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var111, i32 (i32)* @callback_1_inc_Int) -%var113 = alloca i32, align 4 -store i32 %var112, i32* %var113, align 4 -%var114 = load i32* %var113, align 4 -%var115 = call i32 @apply_c(i32 %var114, i32 (i32)* @callback_1_inc_Int) -%var116 = alloca i32, align 4 -store i32 %var115, i32* %var116, align 4 -%var117 = load i32* %var116, align 4 -%var118 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var117, i32 (i32)* @callback_1_inc_Int) -%var119 = alloca i32, align 4 -store i32 %var118, i32* %var119, align 4 -%var120 = load i32* %mixed_test.x.addr, align 4 -%var121 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var120, i32 (i32)* @callback_1_inc_Int) -%var122 = alloca i32, align 4 -store i32 %var121, i32* %var122, align 4 -%var123 = load i32* %mixed_test.x.addr, align 4 -%var124 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var123, i32 (i32)* @callback_1_inc_Int) -%var125 = alloca i32, align 4 -store i32 %var124, i32* %var125, align 4 -%var126 = load i32* %var125, align 4 -%var127 = call i32 @apply_c(i32 %var126, i32 (i32)* @callback_1_inc_Int) -%var128 = alloca i32, align 4 -store i32 %var127, i32* %var128, align 4 -%var129 = load i32* %mixed_test.x.addr, align 4 -%var130 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var129, i32 (i32)* @callback_1_inc_Int) -%var131 = alloca i32, align 4 -store i32 %var130, i32* %var131, align 4 -%var132 = load i32* %mixed_test.x.addr, align 4 -%var133 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var132, i32 (i32)* @callback_1_inc_Int) -%var134 = alloca i32, align 4 -store i32 %var133, i32* %var134, align 4 -%var135 = load i32* %var134, align 4 -%var136 = call i32 @apply_c(i32 %var135, i32 (i32)* @callback_1_inc_Int) -%var137 = alloca i32, align 4 -store i32 %var136, i32* %var137, align 4 -%var138 = load i32* %var137, align 4 -%var139 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var138, i32 (i32)* @callback_1_inc_Int) -%var140 = alloca i32, align 4 -store i32 %var139, i32* %var140, align 4 -%var141 = load i32* %var140, align 4 -%var142 = call i32 @apply_c(i32 %var141, i32 (i32)* @callback_1_dec_Int) -%var143 = alloca i32, align 4 -store i32 %var142, i32* %var143, align 4 -%var144 = load i32* %var143, align 4 -%var145 = call i32 @callback_1_apply_Int_F._Int.EF(i32 %var144, i32 (i32)* @callback_1_inc_Int) -%var146 = alloca i32, align 4 -store i32 %var145, i32* %var146, align 4 -%var147 = load i32* %var146, align 4 -ret i32 %var147 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.txt b/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.txt deleted file mode 100644 index b52a69f4b95..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/callbacks_1/callbacks_1.txt +++ /dev/null @@ -1,6 +0,0 @@ -compact_test_Int(1) == 2 -compact_test_Int(3) == 4 -external_test_Int(3) == 2 -external_test_Int(4) == 3 -mixed_test_Int(1) == 4 -mixed_test_Int(9) == 12 diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt b/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt deleted file mode 100644 index 38519d4616d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -class class_alignment_1_class(var field1: Long, var field2: Int, var field3: Long) - - -fun class_alignment_1(): Long { - val b = class_alignment_1_class(100L, 200, 300L) - assert(b.field1 == 100L) - assert(b.field2 == 200) - assert(b.field3 == 300L) - return b.field3 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt.err deleted file mode 100644 index b9a51ce109b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt.err +++ /dev/null @@ -1,8 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./class_alignment_1/class_alignment_1.kt 6:5 Unresolved reference: assert -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./class_alignment_1/class_alignment_1.kt 7:5 Unresolved reference: assert -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./class_alignment_1/class_alignment_1.kt 8:5 Unresolved reference: assert -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.txt b/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.txt deleted file mode 100644 index 5a69fd59e36..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_alignment_1/class_alignment_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_alignment_1() == 300 diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.kt b/experiments/translator-bc/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.kt deleted file mode 100644 index 053600335da..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.kt +++ /dev/null @@ -1,12 +0,0 @@ -class class_class_argument_1_slave - -class class_class_argument_1_master(val buffer: class_class_argument_1_slave) { - var pos = 99999 -} - - -fun class_class_argument_1(): Int { - val buffer = class_class_argument_1_slave() - val output = class_class_argument_1_master(buffer) - return output.pos -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.kt.out deleted file mode 100644 index 959db647dbd..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.kt.out +++ /dev/null @@ -1,59 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.class_class_argument_1_slave = type { } -%class.class_class_argument_1_master = type { %class.class_class_argument_1_slave*, i32 } -define weak void @class_class_argument_1_slave(%class.class_class_argument_1_slave* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.class_class_argument_1_slave, align 8 -%var2 = bitcast %class.class_class_argument_1_slave* %classvariable.this to i8* -%var3 = bitcast %class.class_class_argument_1_slave* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var2, i8* %var3, i64 0, i32 4, i1 false) -ret void -unreachable -} -define weak void @class_class_argument_1_master_Ref_class_class_argument_1_slave(%class.class_class_argument_1_master* %classvariable.this, %class.class_class_argument_1_slave* %class_class_argument_1_master.buffer) #0 -{ -%classvariable.this.addr = alloca %class.class_class_argument_1_master, align 8 -%var4 = getelementptr inbounds %class.class_class_argument_1_master* %classvariable.this.addr, i32 0, i32 0 -store %class.class_class_argument_1_slave* %class_class_argument_1_master.buffer, %class.class_class_argument_1_slave** %var4, align 8 -%var5 = getelementptr inbounds %class.class_class_argument_1_master* %classvariable.this.addr, i32 0, i32 1 -%var6 = load i32* %var5, align 4 -store i32 99999, i32* %var5, align 4 -%var7 = bitcast %class.class_class_argument_1_master* %classvariable.this to i8* -%var8 = bitcast %class.class_class_argument_1_master* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var7, i8* %var8, i64 16, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @class_class_argument_1() #0 -{ -%var10 = call i8* @malloc_heap(i32 0) -%var9 = bitcast i8* %var10 to %class.class_class_argument_1_slave* -%var11 = alloca %class.class_class_argument_1_slave*, align 8 -store %class.class_class_argument_1_slave* %var9, %class.class_class_argument_1_slave** %var11, align 8 -call void @class_class_argument_1_slave(%class.class_class_argument_1_slave* %var9) -%managed.unique.0.class_class_argument_1.buffer = alloca %class.class_class_argument_1_slave*, align 8 -%var12 = load %class.class_class_argument_1_slave** %managed.unique.0.class_class_argument_1.buffer, align 8 -%var13 = load %class.class_class_argument_1_slave** %var11, align 8 -store %class.class_class_argument_1_slave* %var13, %class.class_class_argument_1_slave** %managed.unique.0.class_class_argument_1.buffer, align 8 -%var14 = load %class.class_class_argument_1_slave** %managed.unique.0.class_class_argument_1.buffer, align 8 -%var16 = call i8* @malloc_heap(i32 16) -%var15 = bitcast i8* %var16 to %class.class_class_argument_1_master* -%var17 = alloca %class.class_class_argument_1_master*, align 8 -store %class.class_class_argument_1_master* %var15, %class.class_class_argument_1_master** %var17, align 8 -call void @class_class_argument_1_master_Ref_class_class_argument_1_slave(%class.class_class_argument_1_master* %var15, %class.class_class_argument_1_slave* %var14) -%managed.unique.1.class_class_argument_1.output = alloca %class.class_class_argument_1_master*, align 8 -%var18 = load %class.class_class_argument_1_master** %managed.unique.1.class_class_argument_1.output, align 8 -%var19 = load %class.class_class_argument_1_master** %var17, align 8 -store %class.class_class_argument_1_master* %var19, %class.class_class_argument_1_master** %managed.unique.1.class_class_argument_1.output, align 8 -%var20 = load %class.class_class_argument_1_master** %managed.unique.1.class_class_argument_1.output, align 8 -%var21 = getelementptr inbounds %class.class_class_argument_1_master* %var20, i32 0, i32 1 -%var22 = load i32* %var21, align 4 -ret i32 %var22 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.txt b/experiments/translator-bc/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.txt deleted file mode 100644 index ce212b26272..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_class_argument_1() == 99999 diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.kt b/experiments/translator-bc/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.kt deleted file mode 100644 index 06e3bce17f3..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -class class_default_argument_1_class(val classArg: Int) { - fun getDefaultValue(arg1: Int, arg2: Int = 11): Int { - return arg1 + arg2 - } -} - -fun class_default_argument_1(z:Int):Int{ - val instance = class_default_argument_1_class(11) - return instance.getDefaultValue(z) -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.kt.out deleted file mode 100644 index c0d512dd37f..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.kt.out +++ /dev/null @@ -1,56 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.class_default_argument_1_class = type { i32 } -define weak void @class_default_argument_1_class_Int(%class.class_default_argument_1_class* %classvariable.this, i32 %class_default_argument_1_class.classArg) #0 -{ -%classvariable.this.addr = alloca %class.class_default_argument_1_class, align 8 -%class_default_argument_1_class.classArg.addr = alloca i32, align 4 -store i32 %class_default_argument_1_class.classArg, i32* %class_default_argument_1_class.classArg.addr, align 4 -%var2 = load i32* %class_default_argument_1_class.classArg.addr, align 4 -%var3 = getelementptr inbounds %class.class_default_argument_1_class* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.class_default_argument_1_class* %classvariable.this to i8* -%var5 = bitcast %class.class_default_argument_1_class* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @class_default_argument_1_class.getDefaultValue_Int_Int(%class.class_default_argument_1_class* %classvariable.this, i32 %class_default_argument_1_class.getDefaultValue.arg1, i32 %class_default_argument_1_class.getDefaultValue.arg2) #0 -{ -%class_default_argument_1_class.getDefaultValue.arg1.addr = alloca i32, align 4 -store i32 %class_default_argument_1_class.getDefaultValue.arg1, i32* %class_default_argument_1_class.getDefaultValue.arg1.addr, align 4 -%class_default_argument_1_class.getDefaultValue.arg2.addr = alloca i32, align 4 -store i32 %class_default_argument_1_class.getDefaultValue.arg2, i32* %class_default_argument_1_class.getDefaultValue.arg2.addr, align 4 -%var6 = load i32* %class_default_argument_1_class.getDefaultValue.arg1.addr, align 4 -%var7 = load i32* %class_default_argument_1_class.getDefaultValue.arg2.addr, align 4 -%var8 = add nsw i32 %var6, %var7 -ret i32 %var8 -unreachable -} -define weak i32 @class_default_argument_1_Int(i32 %class_default_argument_1.z) #0 -{ -%class_default_argument_1.z.addr = alloca i32, align 4 -store i32 %class_default_argument_1.z, i32* %class_default_argument_1.z.addr, align 4 -%var10 = call i8* @malloc_heap(i32 4) -%var9 = bitcast i8* %var10 to %class.class_default_argument_1_class* -%var11 = alloca %class.class_default_argument_1_class*, align 8 -store %class.class_default_argument_1_class* %var9, %class.class_default_argument_1_class** %var11, align 8 -call void @class_default_argument_1_class_Int(%class.class_default_argument_1_class* %var9, i32 11) -%managed.unique.0.class_default_argument_1.instance = alloca %class.class_default_argument_1_class*, align 8 -%var12 = load %class.class_default_argument_1_class** %managed.unique.0.class_default_argument_1.instance, align 8 -%var13 = load %class.class_default_argument_1_class** %var11, align 8 -store %class.class_default_argument_1_class* %var13, %class.class_default_argument_1_class** %managed.unique.0.class_default_argument_1.instance, align 8 -%var14 = load %class.class_default_argument_1_class** %managed.unique.0.class_default_argument_1.instance, align 8 -%var15 = load i32* %class_default_argument_1.z.addr, align 4 -%var16 = call i32 @class_default_argument_1_class.getDefaultValue_Int_Int(%class.class_default_argument_1_class* %var14, i32 %var15, i32 11) -%var17 = alloca i32, align 4 -store i32 %var16, i32* %var17, align 4 -%var18 = load i32* %var17, align 4 -ret i32 %var18 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.txt b/experiments/translator-bc/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.txt deleted file mode 100644 index 275f8749e76..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_default_argument_1_Int(34) == 45 diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_init_section_1/class_init_section_1.kt b/experiments/translator-bc/src/test/kotlin/tests/class_init_section_1/class_init_section_1.kt deleted file mode 100644 index c072acd3d22..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_init_section_1/class_init_section_1.kt +++ /dev/null @@ -1,14 +0,0 @@ -class className(var z: Int) { - init { - this.z = this.z + 12345 - } - - fun getVal(): Int { - return this.z - } -} - -fun class_init_section_1(x: Int): Int { - val z = className(x) - return z.getVal() -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_init_section_1/class_init_section_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/class_init_section_1/class_init_section_1.kt.out deleted file mode 100644 index f56a6b639ec..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_init_section_1/class_init_section_1.kt.out +++ /dev/null @@ -1,57 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.className = type { i32 } -define weak void @className_Int(%class.className* %classvariable.this, i32 %className.z) #0 -{ -%classvariable.this.addr = alloca %class.className, align 8 -%className.z.addr = alloca i32, align 4 -store i32 %className.z, i32* %className.z.addr, align 4 -%var2 = load i32* %className.z.addr, align 4 -%var3 = getelementptr inbounds %class.className* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.className* %classvariable.this to i8* -%var5 = bitcast %class.className* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -%var6 = getelementptr inbounds %class.className* %classvariable.this, i32 0, i32 0 -%var7 = getelementptr inbounds %class.className* %classvariable.this, i32 0, i32 0 -%var8 = load i32* %var7, align 4 -%var9 = add nsw i32 %var8, 12345 -%var10 = load i32* %var6, align 4 -store i32 %var9, i32* %var6, align 4 -ret void -unreachable -} -define weak i32 @className.getVal(%class.className* %classvariable.this) #0 -{ -%var11 = getelementptr inbounds %class.className* %classvariable.this, i32 0, i32 0 -%var12 = load i32* %var11, align 4 -ret i32 %var12 -unreachable -} -define weak i32 @class_init_section_1_Int(i32 %class_init_section_1.x) #0 -{ -%class_init_section_1.x.addr = alloca i32, align 4 -store i32 %class_init_section_1.x, i32* %class_init_section_1.x.addr, align 4 -%var13 = load i32* %class_init_section_1.x.addr, align 4 -%var15 = call i8* @malloc_heap(i32 4) -%var14 = bitcast i8* %var15 to %class.className* -%var16 = alloca %class.className*, align 8 -store %class.className* %var14, %class.className** %var16, align 8 -call void @className_Int(%class.className* %var14, i32 %var13) -%managed.unique.0.class_init_section_1.z = alloca %class.className*, align 8 -%var17 = load %class.className** %managed.unique.0.class_init_section_1.z, align 8 -%var18 = load %class.className** %var16, align 8 -store %class.className* %var18, %class.className** %managed.unique.0.class_init_section_1.z, align 8 -%var19 = load %class.className** %managed.unique.0.class_init_section_1.z, align 8 -%var20 = call i32 @className.getVal(%class.className* %var19) -%var21 = alloca i32, align 4 -store i32 %var20, i32* %var21, align 4 -%var22 = load i32* %var21, align 4 -ret i32 %var22 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_init_section_1/class_init_section_1.txt b/experiments/translator-bc/src/test/kotlin/tests/class_init_section_1/class_init_section_1.txt deleted file mode 100644 index 45ca7bb7f25..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_init_section_1/class_init_section_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_init_section_1_Int(523) == 12868 diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_method_access_1/class_method_access_1.kt b/experiments/translator-bc/src/test/kotlin/tests/class_method_access_1/class_method_access_1.kt deleted file mode 100644 index 2ec083afedd..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_method_access_1/class_method_access_1.kt +++ /dev/null @@ -1,20 +0,0 @@ -class class_method_access_1_donor(var size: Int) { - fun getSizeVal(): Int { - return size + 4 - } -} - -class class_method_access_1_owner(val arg: class_method_access_1_donor) { - val tKIopsD = 56 - fun getSize(): Int { - return arg.getSizeVal() + 8 - } -} - - -fun class_method_access_1_test(x: Int): Int { - val instance_donor = class_method_access_1_donor(x) - val instance_owner = class_method_access_1_owner(instance_donor) - - return instance_owner.getSize() -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_method_access_1/class_method_access_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/class_method_access_1/class_method_access_1.kt.out deleted file mode 100644 index 50e4d400ac1..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_method_access_1/class_method_access_1.kt.out +++ /dev/null @@ -1,89 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.class_method_access_1_owner = type { %class.class_method_access_1_donor*, i32 } -%class.class_method_access_1_donor = type { i32 } -define weak void @class_method_access_1_owner_Ref_class_method_access_1_donor(%class.class_method_access_1_owner* %classvariable.this, %class.class_method_access_1_donor* %class_method_access_1_owner.arg) #0 -{ -%classvariable.this.addr = alloca %class.class_method_access_1_owner, align 8 -%var2 = getelementptr inbounds %class.class_method_access_1_owner* %classvariable.this.addr, i32 0, i32 0 -store %class.class_method_access_1_donor* %class_method_access_1_owner.arg, %class.class_method_access_1_donor** %var2, align 8 -%var3 = getelementptr inbounds %class.class_method_access_1_owner* %classvariable.this.addr, i32 0, i32 1 -%var4 = load i32* %var3, align 4 -store i32 56, i32* %var3, align 4 -%var5 = bitcast %class.class_method_access_1_owner* %classvariable.this to i8* -%var6 = bitcast %class.class_method_access_1_owner* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var5, i8* %var6, i64 16, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @class_method_access_1_owner.getSize(%class.class_method_access_1_owner* %classvariable.this) #0 -{ -%var7 = getelementptr inbounds %class.class_method_access_1_owner* %classvariable.this, i32 0, i32 0 -%var8 = load %class.class_method_access_1_donor** %var7, align 8 -%var9 = call i32 @class_method_access_1_donor.getSizeVal(%class.class_method_access_1_donor* %var8) -%var10 = alloca i32, align 4 -store i32 %var9, i32* %var10, align 4 -%var11 = load i32* %var10, align 4 -%var12 = add nsw i32 %var11, 8 -ret i32 %var12 -unreachable -} -define weak void @class_method_access_1_donor_Int(%class.class_method_access_1_donor* %classvariable.this, i32 %class_method_access_1_donor.size) #0 -{ -%classvariable.this.addr = alloca %class.class_method_access_1_donor, align 8 -%class_method_access_1_donor.size.addr = alloca i32, align 4 -store i32 %class_method_access_1_donor.size, i32* %class_method_access_1_donor.size.addr, align 4 -%var13 = load i32* %class_method_access_1_donor.size.addr, align 4 -%var14 = getelementptr inbounds %class.class_method_access_1_donor* %classvariable.this.addr, i32 0, i32 0 -store i32 %var13, i32* %var14, align 4 -%var15 = bitcast %class.class_method_access_1_donor* %classvariable.this to i8* -%var16 = bitcast %class.class_method_access_1_donor* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var15, i8* %var16, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @class_method_access_1_donor.getSizeVal(%class.class_method_access_1_donor* %classvariable.this) #0 -{ -%var17 = getelementptr inbounds %class.class_method_access_1_donor* %classvariable.this, i32 0, i32 0 -%var18 = load i32* %var17, align 4 -%var19 = add nsw i32 %var18, 4 -ret i32 %var19 -unreachable -} -define weak i32 @class_method_access_1_test_Int(i32 %class_method_access_1_test.x) #0 -{ -%class_method_access_1_test.x.addr = alloca i32, align 4 -store i32 %class_method_access_1_test.x, i32* %class_method_access_1_test.x.addr, align 4 -%var20 = load i32* %class_method_access_1_test.x.addr, align 4 -%var22 = call i8* @malloc_heap(i32 4) -%var21 = bitcast i8* %var22 to %class.class_method_access_1_donor* -%var23 = alloca %class.class_method_access_1_donor*, align 8 -store %class.class_method_access_1_donor* %var21, %class.class_method_access_1_donor** %var23, align 8 -call void @class_method_access_1_donor_Int(%class.class_method_access_1_donor* %var21, i32 %var20) -%managed.unique.0.class_method_access_1_test.instance_donor = alloca %class.class_method_access_1_donor*, align 8 -%var24 = load %class.class_method_access_1_donor** %managed.unique.0.class_method_access_1_test.instance_donor, align 8 -%var25 = load %class.class_method_access_1_donor** %var23, align 8 -store %class.class_method_access_1_donor* %var25, %class.class_method_access_1_donor** %managed.unique.0.class_method_access_1_test.instance_donor, align 8 -%var26 = load %class.class_method_access_1_donor** %managed.unique.0.class_method_access_1_test.instance_donor, align 8 -%var28 = call i8* @malloc_heap(i32 16) -%var27 = bitcast i8* %var28 to %class.class_method_access_1_owner* -%var29 = alloca %class.class_method_access_1_owner*, align 8 -store %class.class_method_access_1_owner* %var27, %class.class_method_access_1_owner** %var29, align 8 -call void @class_method_access_1_owner_Ref_class_method_access_1_donor(%class.class_method_access_1_owner* %var27, %class.class_method_access_1_donor* %var26) -%managed.unique.1.class_method_access_1_test.instance_owner = alloca %class.class_method_access_1_owner*, align 8 -%var30 = load %class.class_method_access_1_owner** %managed.unique.1.class_method_access_1_test.instance_owner, align 8 -%var31 = load %class.class_method_access_1_owner** %var29, align 8 -store %class.class_method_access_1_owner* %var31, %class.class_method_access_1_owner** %managed.unique.1.class_method_access_1_test.instance_owner, align 8 -%var32 = load %class.class_method_access_1_owner** %managed.unique.1.class_method_access_1_test.instance_owner, align 8 -%var33 = call i32 @class_method_access_1_owner.getSize(%class.class_method_access_1_owner* %var32) -%var34 = alloca i32, align 4 -store i32 %var33, i32* %var34, align 4 -%var35 = load i32* %var34, align 4 -ret i32 %var35 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_method_access_1/class_method_access_1.txt b/experiments/translator-bc/src/test/kotlin/tests/class_method_access_1/class_method_access_1.txt deleted file mode 100644 index a0bfb5a12c1..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_method_access_1/class_method_access_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_method_access_1_test_Int(110) == 122 diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_methods_1/class_methods_1.kt b/experiments/translator-bc/src/test/kotlin/tests/class_methods_1/class_methods_1.kt deleted file mode 100644 index e96a4229bf4..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_methods_1/class_methods_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -class class_methods_1_class() { - fun method(t : Int): Int { - return t + 5 - } -} - -fun class_methods_1(zz: Int): Int { - val x = class_methods_1_class() - return x.method(zz) -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_methods_1/class_methods_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/class_methods_1/class_methods_1.kt.out deleted file mode 100644 index a3566daa2d2..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_methods_1/class_methods_1.kt.out +++ /dev/null @@ -1,48 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.class_methods_1_class = type { } -define weak void @class_methods_1_class(%class.class_methods_1_class* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.class_methods_1_class, align 8 -%var2 = bitcast %class.class_methods_1_class* %classvariable.this to i8* -%var3 = bitcast %class.class_methods_1_class* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var2, i8* %var3, i64 0, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @class_methods_1_class.method_Int(%class.class_methods_1_class* %classvariable.this, i32 %class_methods_1_class.method.t) #0 -{ -%class_methods_1_class.method.t.addr = alloca i32, align 4 -store i32 %class_methods_1_class.method.t, i32* %class_methods_1_class.method.t.addr, align 4 -%var4 = load i32* %class_methods_1_class.method.t.addr, align 4 -%var5 = add nsw i32 %var4, 5 -ret i32 %var5 -unreachable -} -define weak i32 @class_methods_1_Int(i32 %class_methods_1.zz) #0 -{ -%class_methods_1.zz.addr = alloca i32, align 4 -store i32 %class_methods_1.zz, i32* %class_methods_1.zz.addr, align 4 -%var7 = call i8* @malloc_heap(i32 0) -%var6 = bitcast i8* %var7 to %class.class_methods_1_class* -%var8 = alloca %class.class_methods_1_class*, align 8 -store %class.class_methods_1_class* %var6, %class.class_methods_1_class** %var8, align 8 -call void @class_methods_1_class(%class.class_methods_1_class* %var6) -%managed.unique.0.class_methods_1.x = alloca %class.class_methods_1_class*, align 8 -%var9 = load %class.class_methods_1_class** %managed.unique.0.class_methods_1.x, align 8 -%var10 = load %class.class_methods_1_class** %var8, align 8 -store %class.class_methods_1_class* %var10, %class.class_methods_1_class** %managed.unique.0.class_methods_1.x, align 8 -%var11 = load %class.class_methods_1_class** %managed.unique.0.class_methods_1.x, align 8 -%var12 = load i32* %class_methods_1.zz.addr, align 4 -%var13 = call i32 @class_methods_1_class.method_Int(%class.class_methods_1_class* %var11, i32 %var12) -%var14 = alloca i32, align 4 -store i32 %var13, i32* %var14, align 4 -%var15 = load i32* %var14, align 4 -ret i32 %var15 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_methods_1/class_methods_1.txt b/experiments/translator-bc/src/test/kotlin/tests/class_methods_1/class_methods_1.txt deleted file mode 100644 index 47c91b155cf..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_methods_1/class_methods_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_methods_1_Int(55) == 60 diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.kt b/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.kt deleted file mode 100644 index aa04098aae1..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.kt +++ /dev/null @@ -1,12 +0,0 @@ -class class_reassignment_1_class(val field: Int) - -fun class_reassignment_1_base(): class_reassignment_1_class { - val instance = class_reassignment_1_class(567) - return instance -} - -fun class_reassignment_1(): Int { - var instance = class_reassignment_1_class(123) - instance = class_reassignment_1_base() - return instance.field -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.kt.out deleted file mode 100644 index 3eab37fd0b7..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.kt.out +++ /dev/null @@ -1,61 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.class_reassignment_1_class = type { i32 } -define weak void @class_reassignment_1_class_Int(%class.class_reassignment_1_class* %classvariable.this, i32 %class_reassignment_1_class.field) #0 -{ -%classvariable.this.addr = alloca %class.class_reassignment_1_class, align 8 -%class_reassignment_1_class.field.addr = alloca i32, align 4 -store i32 %class_reassignment_1_class.field, i32* %class_reassignment_1_class.field.addr, align 4 -%var2 = load i32* %class_reassignment_1_class.field.addr, align 4 -%var3 = getelementptr inbounds %class.class_reassignment_1_class* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.class_reassignment_1_class* %classvariable.this to i8* -%var5 = bitcast %class.class_reassignment_1_class* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @class_reassignment_1() #0 -{ -%var7 = call i8* @malloc_heap(i32 4) -%var6 = bitcast i8* %var7 to %class.class_reassignment_1_class* -%var8 = alloca %class.class_reassignment_1_class*, align 8 -store %class.class_reassignment_1_class* %var6, %class.class_reassignment_1_class** %var8, align 8 -call void @class_reassignment_1_class_Int(%class.class_reassignment_1_class* %var6, i32 123) -%managed.unique.0.class_reassignment_1.instance = alloca %class.class_reassignment_1_class*, align 8 -%var9 = load %class.class_reassignment_1_class** %managed.unique.0.class_reassignment_1.instance, align 8 -%var10 = load %class.class_reassignment_1_class** %var8, align 8 -store %class.class_reassignment_1_class* %var10, %class.class_reassignment_1_class** %managed.unique.0.class_reassignment_1.instance, align 8 -%var12 = call i8* @malloc_heap(i32 8) -%var11 = bitcast i8* %var12 to %class.class_reassignment_1_class** -call void @class_reassignment_1_base(%class.class_reassignment_1_class** %var11) -%var13 = load %class.class_reassignment_1_class** %managed.unique.0.class_reassignment_1.instance, align 8 -%var14 = load %class.class_reassignment_1_class** %var11, align 8 -store %class.class_reassignment_1_class* %var14, %class.class_reassignment_1_class** %managed.unique.0.class_reassignment_1.instance, align 8 -%var15 = load %class.class_reassignment_1_class** %managed.unique.0.class_reassignment_1.instance, align 8 -%var16 = getelementptr inbounds %class.class_reassignment_1_class* %var15, i32 0, i32 0 -%var17 = load i32* %var16, align 4 -ret i32 %var17 -unreachable -} -define weak void @class_reassignment_1_base(%class.class_reassignment_1_class** %instance) #0 -{ -%var19 = call i8* @malloc_heap(i32 4) -%var18 = bitcast i8* %var19 to %class.class_reassignment_1_class* -%var20 = alloca %class.class_reassignment_1_class*, align 8 -store %class.class_reassignment_1_class* %var18, %class.class_reassignment_1_class** %var20, align 8 -call void @class_reassignment_1_class_Int(%class.class_reassignment_1_class* %var18, i32 567) -%managed.unique.1.class_reassignment_1_base.instance = alloca %class.class_reassignment_1_class*, align 8 -%var21 = load %class.class_reassignment_1_class** %managed.unique.1.class_reassignment_1_base.instance, align 8 -%var22 = load %class.class_reassignment_1_class** %var20, align 8 -store %class.class_reassignment_1_class* %var22, %class.class_reassignment_1_class** %managed.unique.1.class_reassignment_1_base.instance, align 8 -%var23 = load %class.class_reassignment_1_class** %managed.unique.1.class_reassignment_1_base.instance, align 8 -store %class.class_reassignment_1_class* %var23, %class.class_reassignment_1_class** %instance, align 8 -ret void -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.txt b/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.txt deleted file mode 100644 index 1a15c1493a0..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_reassignment_1() == 567 diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.kt b/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.kt deleted file mode 100644 index 0614be58541..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.kt +++ /dev/null @@ -1,15 +0,0 @@ -class class_reassignment_2_Node { - var left: class_reassignment_2_Node? = null - var right: class_reassignment_2_Node? = null - var value: Int = 0 -} - -fun class_reassignment_2(): Int { - val root: class_reassignment_2_Node = class_reassignment_2_Node() - root.value = 12 - root.left = class_reassignment_2_Node() - var current: class_reassignment_2_Node? = root - current = root.left - current!!.value = 10593 - return current.value + root.value -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.kt.out b/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.kt.out deleted file mode 100644 index 812be15bf45..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.kt.out +++ /dev/null @@ -1,82 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.class_reassignment_2_Node = type { %class.class_reassignment_2_Node*, %class.class_reassignment_2_Node*, i32 } -define weak void @class_reassignment_2_Node(%class.class_reassignment_2_Node* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.class_reassignment_2_Node, align 8 -%var2 = getelementptr inbounds %class.class_reassignment_2_Node* %classvariable.this.addr, i32 0, i32 0 -%var3 = load %class.class_reassignment_2_Node** %var2, align 8 -store %class.class_reassignment_2_Node* null, %class.class_reassignment_2_Node** %var2, align 8 -%var4 = getelementptr inbounds %class.class_reassignment_2_Node* %classvariable.this.addr, i32 0, i32 1 -%var5 = load %class.class_reassignment_2_Node** %var4, align 8 -store %class.class_reassignment_2_Node* null, %class.class_reassignment_2_Node** %var4, align 8 -%var6 = getelementptr inbounds %class.class_reassignment_2_Node* %classvariable.this.addr, i32 0, i32 2 -%var7 = load i32* %var6, align 4 -store i32 0, i32* %var6, align 4 -%var8 = bitcast %class.class_reassignment_2_Node* %classvariable.this to i8* -%var9 = bitcast %class.class_reassignment_2_Node* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var8, i8* %var9, i64 24, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @class_reassignment_2() #0 -{ -%var11 = call i8* @malloc_heap(i32 24) -%var10 = bitcast i8* %var11 to %class.class_reassignment_2_Node* -%var12 = alloca %class.class_reassignment_2_Node*, align 8 -store %class.class_reassignment_2_Node* %var10, %class.class_reassignment_2_Node** %var12, align 8 -call void @class_reassignment_2_Node(%class.class_reassignment_2_Node* %var10) -%managed.unique.0.class_reassignment_2.root = alloca %class.class_reassignment_2_Node*, align 8 -%var13 = load %class.class_reassignment_2_Node** %managed.unique.0.class_reassignment_2.root, align 8 -%var14 = load %class.class_reassignment_2_Node** %var12, align 8 -store %class.class_reassignment_2_Node* %var14, %class.class_reassignment_2_Node** %managed.unique.0.class_reassignment_2.root, align 8 -%var15 = load %class.class_reassignment_2_Node** %managed.unique.0.class_reassignment_2.root, align 8 -%var16 = getelementptr inbounds %class.class_reassignment_2_Node* %var15, i32 0, i32 2 -%var17 = load i32* %var16, align 4 -store i32 12, i32* %var16, align 4 -%var18 = load %class.class_reassignment_2_Node** %managed.unique.0.class_reassignment_2.root, align 8 -%var19 = getelementptr inbounds %class.class_reassignment_2_Node* %var18, i32 0, i32 0 -%var21 = call i8* @malloc_heap(i32 24) -%var20 = bitcast i8* %var21 to %class.class_reassignment_2_Node* -%var22 = alloca %class.class_reassignment_2_Node*, align 8 -store %class.class_reassignment_2_Node* %var20, %class.class_reassignment_2_Node** %var22, align 8 -call void @class_reassignment_2_Node(%class.class_reassignment_2_Node* %var20) -%var23 = load %class.class_reassignment_2_Node** %var19, align 8 -%var24 = load %class.class_reassignment_2_Node** %var22, align 8 -store %class.class_reassignment_2_Node* %var24, %class.class_reassignment_2_Node** %var19, align 8 -%managed.unique.1.class_reassignment_2.current = alloca %class.class_reassignment_2_Node*, align 8 -%var25 = load %class.class_reassignment_2_Node** %managed.unique.1.class_reassignment_2.current, align 8 -%var26 = load %class.class_reassignment_2_Node** %managed.unique.0.class_reassignment_2.root, align 8 -store %class.class_reassignment_2_Node* %var26, %class.class_reassignment_2_Node** %managed.unique.1.class_reassignment_2.current, align 8 -%var27 = load %class.class_reassignment_2_Node** %managed.unique.0.class_reassignment_2.root, align 8 -%var28 = getelementptr inbounds %class.class_reassignment_2_Node* %var27, i32 0, i32 0 -%var29 = load %class.class_reassignment_2_Node** %managed.unique.1.class_reassignment_2.current, align 8 -%var30 = load %class.class_reassignment_2_Node** %var28, align 8 -store %class.class_reassignment_2_Node* %var30, %class.class_reassignment_2_Node** %managed.unique.1.class_reassignment_2.current, align 8 -%var32 = load %class.class_reassignment_2_Node** %managed.unique.1.class_reassignment_2.current, align 8 -%var31 = icmp eq %class.class_reassignment_2_Node* null, %var32 -br i1 %var31, label %label.nullCheck.1, label %label.nullCheck.2 -label.nullCheck.1: -%var33 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.2 -label.nullCheck.2: -%var34 = load %class.class_reassignment_2_Node** %managed.unique.1.class_reassignment_2.current, align 8 -%var35 = getelementptr inbounds %class.class_reassignment_2_Node* %var34, i32 0, i32 2 -%var36 = load i32* %var35, align 4 -store i32 10593, i32* %var35, align 4 -%var37 = load %class.class_reassignment_2_Node** %managed.unique.1.class_reassignment_2.current, align 8 -%var38 = getelementptr inbounds %class.class_reassignment_2_Node* %var37, i32 0, i32 2 -%var39 = load %class.class_reassignment_2_Node** %managed.unique.0.class_reassignment_2.root, align 8 -%var40 = getelementptr inbounds %class.class_reassignment_2_Node* %var39, i32 0, i32 2 -%var41 = load i32* %var38, align 4 -%var42 = load i32* %var40, align 4 -%var43 = add nsw i32 %var41, %var42 -ret i32 %var43 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.txt b/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.txt deleted file mode 100644 index bc9cdca2635..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.txt +++ /dev/null @@ -1 +0,0 @@ -class_reassignment_2() == 10605 diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.kt b/experiments/translator-bc/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.kt deleted file mode 100644 index 5b26f1dd992..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.kt +++ /dev/null @@ -1,18 +0,0 @@ -class class_variable_access_1_donor(var size: Int) { - val data: Int = 5 -} - -class class_variable_access_1_owner(val arg: class_variable_access_1_donor) { - val tKIopsD = 56 - fun getSize(): Int { - return arg.size + 8 - } -} - - -fun class_variable_access_1_test(x: Int): Int { - val instance_donor = class_variable_access_1_donor(x) - val instance_owner = class_variable_access_1_owner(instance_donor) - - return instance_owner.getSize() -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.kt.out deleted file mode 100644 index ba1e4b8f854..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.kt.out +++ /dev/null @@ -1,82 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.class_variable_access_1_owner = type { %class.class_variable_access_1_donor*, i32 } -%class.class_variable_access_1_donor = type { i32, i32 } -define weak void @class_variable_access_1_owner_Ref_class_variable_access_1_donor(%class.class_variable_access_1_owner* %classvariable.this, %class.class_variable_access_1_donor* %class_variable_access_1_owner.arg) #0 -{ -%classvariable.this.addr = alloca %class.class_variable_access_1_owner, align 8 -%var2 = getelementptr inbounds %class.class_variable_access_1_owner* %classvariable.this.addr, i32 0, i32 0 -store %class.class_variable_access_1_donor* %class_variable_access_1_owner.arg, %class.class_variable_access_1_donor** %var2, align 8 -%var3 = getelementptr inbounds %class.class_variable_access_1_owner* %classvariable.this.addr, i32 0, i32 1 -%var4 = load i32* %var3, align 4 -store i32 56, i32* %var3, align 4 -%var5 = bitcast %class.class_variable_access_1_owner* %classvariable.this to i8* -%var6 = bitcast %class.class_variable_access_1_owner* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var5, i8* %var6, i64 16, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @class_variable_access_1_owner.getSize(%class.class_variable_access_1_owner* %classvariable.this) #0 -{ -%var7 = getelementptr inbounds %class.class_variable_access_1_owner* %classvariable.this, i32 0, i32 0 -%var8 = load %class.class_variable_access_1_donor** %var7, align 8 -%var9 = getelementptr inbounds %class.class_variable_access_1_donor* %var8, i32 0, i32 0 -%var10 = load i32* %var9, align 4 -%var11 = add nsw i32 %var10, 8 -ret i32 %var11 -unreachable -} -define weak void @class_variable_access_1_donor_Int(%class.class_variable_access_1_donor* %classvariable.this, i32 %class_variable_access_1_donor.size) #0 -{ -%classvariable.this.addr = alloca %class.class_variable_access_1_donor, align 8 -%class_variable_access_1_donor.size.addr = alloca i32, align 4 -store i32 %class_variable_access_1_donor.size, i32* %class_variable_access_1_donor.size.addr, align 4 -%var12 = load i32* %class_variable_access_1_donor.size.addr, align 4 -%var13 = getelementptr inbounds %class.class_variable_access_1_donor* %classvariable.this.addr, i32 0, i32 0 -store i32 %var12, i32* %var13, align 4 -%var14 = getelementptr inbounds %class.class_variable_access_1_donor* %classvariable.this.addr, i32 0, i32 1 -%var15 = load i32* %var14, align 4 -store i32 5, i32* %var14, align 4 -%var16 = bitcast %class.class_variable_access_1_donor* %classvariable.this to i8* -%var17 = bitcast %class.class_variable_access_1_donor* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var16, i8* %var17, i64 8, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @class_variable_access_1_test_Int(i32 %class_variable_access_1_test.x) #0 -{ -%class_variable_access_1_test.x.addr = alloca i32, align 4 -store i32 %class_variable_access_1_test.x, i32* %class_variable_access_1_test.x.addr, align 4 -%var18 = load i32* %class_variable_access_1_test.x.addr, align 4 -%var20 = call i8* @malloc_heap(i32 8) -%var19 = bitcast i8* %var20 to %class.class_variable_access_1_donor* -%var21 = alloca %class.class_variable_access_1_donor*, align 8 -store %class.class_variable_access_1_donor* %var19, %class.class_variable_access_1_donor** %var21, align 8 -call void @class_variable_access_1_donor_Int(%class.class_variable_access_1_donor* %var19, i32 %var18) -%managed.unique.0.class_variable_access_1_test.instance_donor = alloca %class.class_variable_access_1_donor*, align 8 -%var22 = load %class.class_variable_access_1_donor** %managed.unique.0.class_variable_access_1_test.instance_donor, align 8 -%var23 = load %class.class_variable_access_1_donor** %var21, align 8 -store %class.class_variable_access_1_donor* %var23, %class.class_variable_access_1_donor** %managed.unique.0.class_variable_access_1_test.instance_donor, align 8 -%var24 = load %class.class_variable_access_1_donor** %managed.unique.0.class_variable_access_1_test.instance_donor, align 8 -%var26 = call i8* @malloc_heap(i32 16) -%var25 = bitcast i8* %var26 to %class.class_variable_access_1_owner* -%var27 = alloca %class.class_variable_access_1_owner*, align 8 -store %class.class_variable_access_1_owner* %var25, %class.class_variable_access_1_owner** %var27, align 8 -call void @class_variable_access_1_owner_Ref_class_variable_access_1_donor(%class.class_variable_access_1_owner* %var25, %class.class_variable_access_1_donor* %var24) -%managed.unique.1.class_variable_access_1_test.instance_owner = alloca %class.class_variable_access_1_owner*, align 8 -%var28 = load %class.class_variable_access_1_owner** %managed.unique.1.class_variable_access_1_test.instance_owner, align 8 -%var29 = load %class.class_variable_access_1_owner** %var27, align 8 -store %class.class_variable_access_1_owner* %var29, %class.class_variable_access_1_owner** %managed.unique.1.class_variable_access_1_test.instance_owner, align 8 -%var30 = load %class.class_variable_access_1_owner** %managed.unique.1.class_variable_access_1_test.instance_owner, align 8 -%var31 = call i32 @class_variable_access_1_owner.getSize(%class.class_variable_access_1_owner* %var30) -%var32 = alloca i32, align 4 -store i32 %var31, i32* %var32, align 4 -%var33 = load i32* %var32, align 4 -ret i32 %var33 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.txt b/experiments/translator-bc/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.txt deleted file mode 100644 index 70a561973bc..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_variable_access_1_test_Int(22) == 30 diff --git a/experiments/translator-bc/src/test/kotlin/tests/classfields_1/classfields_1.kt b/experiments/translator-bc/src/test/kotlin/tests/classfields_1/classfields_1.kt deleted file mode 100644 index 336e735340b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/classfields_1/classfields_1.kt +++ /dev/null @@ -1,19 +0,0 @@ - -class WithFields(var i: Int) { - - var j: Int - - init { - this.j = this.i - } -} - -fun test_simple_field(): Int { - val i = WithFields(1) - return i.j -} - -fun test_field_assignment(i: Int): Int { - val k = WithFields(i) - return k.j -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/classfields_1/classfields_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/classfields_1/classfields_1.kt.out deleted file mode 100644 index 3a5d198e17d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/classfields_1/classfields_1.kt.out +++ /dev/null @@ -1,64 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.WithFields = type { i32, i32 } -define weak void @WithFields_Int(%class.WithFields* %classvariable.this, i32 %WithFields.i) #0 -{ -%classvariable.this.addr = alloca %class.WithFields, align 8 -%WithFields.i.addr = alloca i32, align 4 -store i32 %WithFields.i, i32* %WithFields.i.addr, align 4 -%var2 = load i32* %WithFields.i.addr, align 4 -%var3 = getelementptr inbounds %class.WithFields* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.WithFields* %classvariable.this to i8* -%var5 = bitcast %class.WithFields* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 8, i32 4, i1 false) -%var6 = getelementptr inbounds %class.WithFields* %classvariable.this, i32 0, i32 1 -%var7 = getelementptr inbounds %class.WithFields* %classvariable.this, i32 0, i32 0 -%var8 = load i32* %var6, align 4 -%var9 = load i32* %var7, align 4 -store i32 %var9, i32* %var6, align 4 -ret void -unreachable -} -define weak i32 @test_field_assignment_Int(i32 %test_field_assignment.i) #0 -{ -%test_field_assignment.i.addr = alloca i32, align 4 -store i32 %test_field_assignment.i, i32* %test_field_assignment.i.addr, align 4 -%var10 = load i32* %test_field_assignment.i.addr, align 4 -%var12 = call i8* @malloc_heap(i32 8) -%var11 = bitcast i8* %var12 to %class.WithFields* -%var13 = alloca %class.WithFields*, align 8 -store %class.WithFields* %var11, %class.WithFields** %var13, align 8 -call void @WithFields_Int(%class.WithFields* %var11, i32 %var10) -%managed.unique.0.test_field_assignment.k = alloca %class.WithFields*, align 8 -%var14 = load %class.WithFields** %managed.unique.0.test_field_assignment.k, align 8 -%var15 = load %class.WithFields** %var13, align 8 -store %class.WithFields* %var15, %class.WithFields** %managed.unique.0.test_field_assignment.k, align 8 -%var16 = load %class.WithFields** %managed.unique.0.test_field_assignment.k, align 8 -%var17 = getelementptr inbounds %class.WithFields* %var16, i32 0, i32 1 -%var18 = load i32* %var17, align 4 -ret i32 %var18 -unreachable -} -define weak i32 @test_simple_field() #0 -{ -%var20 = call i8* @malloc_heap(i32 8) -%var19 = bitcast i8* %var20 to %class.WithFields* -%var21 = alloca %class.WithFields*, align 8 -store %class.WithFields* %var19, %class.WithFields** %var21, align 8 -call void @WithFields_Int(%class.WithFields* %var19, i32 1) -%managed.unique.1.test_simple_field.i = alloca %class.WithFields*, align 8 -%var22 = load %class.WithFields** %managed.unique.1.test_simple_field.i, align 8 -%var23 = load %class.WithFields** %var21, align 8 -store %class.WithFields* %var23, %class.WithFields** %managed.unique.1.test_simple_field.i, align 8 -%var24 = load %class.WithFields** %managed.unique.1.test_simple_field.i, align 8 -%var25 = getelementptr inbounds %class.WithFields* %var24, i32 0, i32 1 -%var26 = load i32* %var25, align 4 -ret i32 %var26 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/classfields_1/classfields_1.txt b/experiments/translator-bc/src/test/kotlin/tests/classfields_1/classfields_1.txt deleted file mode 100644 index c9752a96500..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/classfields_1/classfields_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -test_simple_field() == 1 -test_field_assignment_Int(10) == 10 diff --git a/experiments/translator-bc/src/test/kotlin/tests/classfields_2/classfields_2.kt b/experiments/translator-bc/src/test/kotlin/tests/classfields_2/classfields_2.kt deleted file mode 100644 index df314f3ef48..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/classfields_2/classfields_2.kt +++ /dev/null @@ -1,26 +0,0 @@ -class classfields_2_class { - var i = 0 - - fun method() { - i = 5 - } - - fun changeI(): Int { - method() - return i - } -} - -fun test1(): Int { - val main = classfields_2_class() - return main.changeI() -} - -fun test2(): Int { - val main = classfields_2_class() - return main.i -} - -fun test3(): Int { - return classfields_2_class().changeI() -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/classfields_2/classfields_2.kt.out b/experiments/translator-bc/src/test/kotlin/tests/classfields_2/classfields_2.kt.out deleted file mode 100644 index 1eb29331ac3..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/classfields_2/classfields_2.kt.out +++ /dev/null @@ -1,87 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.classfields_2_class = type { i32 } -define weak void @classfields_2_class(%class.classfields_2_class* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.classfields_2_class, align 8 -%var2 = getelementptr inbounds %class.classfields_2_class* %classvariable.this.addr, i32 0, i32 0 -%var3 = load i32* %var2, align 4 -store i32 0, i32* %var2, align 4 -%var4 = bitcast %class.classfields_2_class* %classvariable.this to i8* -%var5 = bitcast %class.classfields_2_class* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak void @classfields_2_class.method(%class.classfields_2_class* %classvariable.this) #0 -{ -%var6 = getelementptr inbounds %class.classfields_2_class* %classvariable.this, i32 0, i32 0 -%var7 = load i32* %var6, align 4 -store i32 5, i32* %var6, align 4 -ret void -unreachable -} -define weak i32 @classfields_2_class.changeI(%class.classfields_2_class* %classvariable.this) #0 -{ -call void @classfields_2_class.method(%class.classfields_2_class* %classvariable.this) -%var8 = getelementptr inbounds %class.classfields_2_class* %classvariable.this, i32 0, i32 0 -%var9 = load i32* %var8, align 4 -ret i32 %var9 -unreachable -} -define weak i32 @test2() #0 -{ -%var11 = call i8* @malloc_heap(i32 4) -%var10 = bitcast i8* %var11 to %class.classfields_2_class* -%var12 = alloca %class.classfields_2_class*, align 8 -store %class.classfields_2_class* %var10, %class.classfields_2_class** %var12, align 8 -call void @classfields_2_class(%class.classfields_2_class* %var10) -%managed.unique.0.test2.main = alloca %class.classfields_2_class*, align 8 -%var13 = load %class.classfields_2_class** %managed.unique.0.test2.main, align 8 -%var14 = load %class.classfields_2_class** %var12, align 8 -store %class.classfields_2_class* %var14, %class.classfields_2_class** %managed.unique.0.test2.main, align 8 -%var15 = load %class.classfields_2_class** %managed.unique.0.test2.main, align 8 -%var16 = getelementptr inbounds %class.classfields_2_class* %var15, i32 0, i32 0 -%var17 = load i32* %var16, align 4 -ret i32 %var17 -unreachable -} -define weak i32 @test3() #0 -{ -%var19 = call i8* @malloc_heap(i32 4) -%var18 = bitcast i8* %var19 to %class.classfields_2_class* -%var20 = alloca %class.classfields_2_class*, align 8 -store %class.classfields_2_class* %var18, %class.classfields_2_class** %var20, align 8 -call void @classfields_2_class(%class.classfields_2_class* %var18) -%var21 = load %class.classfields_2_class** %var20, align 8 -%var22 = call i32 @classfields_2_class.changeI(%class.classfields_2_class* %var21) -%var23 = alloca i32, align 4 -store i32 %var22, i32* %var23, align 4 -%var24 = load i32* %var23, align 4 -ret i32 %var24 -unreachable -} -define weak i32 @test1() #0 -{ -%var26 = call i8* @malloc_heap(i32 4) -%var25 = bitcast i8* %var26 to %class.classfields_2_class* -%var27 = alloca %class.classfields_2_class*, align 8 -store %class.classfields_2_class* %var25, %class.classfields_2_class** %var27, align 8 -call void @classfields_2_class(%class.classfields_2_class* %var25) -%managed.unique.1.test1.main = alloca %class.classfields_2_class*, align 8 -%var28 = load %class.classfields_2_class** %managed.unique.1.test1.main, align 8 -%var29 = load %class.classfields_2_class** %var27, align 8 -store %class.classfields_2_class* %var29, %class.classfields_2_class** %managed.unique.1.test1.main, align 8 -%var30 = load %class.classfields_2_class** %managed.unique.1.test1.main, align 8 -%var31 = call i32 @classfields_2_class.changeI(%class.classfields_2_class* %var30) -%var32 = alloca i32, align 4 -store i32 %var31, i32* %var32, align 4 -%var33 = load i32* %var32, align 4 -ret i32 %var33 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/classfields_2/classfields_2.txt b/experiments/translator-bc/src/test/kotlin/tests/classfields_2/classfields_2.txt deleted file mode 100644 index bfd66e4ee12..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/classfields_2/classfields_2.txt +++ /dev/null @@ -1,3 +0,0 @@ -test1() == 5 -test2() == 0 -test3() == 5 diff --git a/experiments/translator-bc/src/test/kotlin/tests/companion_object_1/companion_object_1.kt b/experiments/translator-bc/src/test/kotlin/tests/companion_object_1/companion_object_1.kt deleted file mode 100644 index e5f449ac530..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/companion_object_1/companion_object_1.kt +++ /dev/null @@ -1,13 +0,0 @@ -class companion_object_1 { - companion object { - val fieldCompanion: Int = 5790 - - fun create(): Int { - return 5 - } - } -} - -fun companion_object_1_test(): Int { - return companion_object_1.create() -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/companion_object_1/companion_object_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/companion_object_1/companion_object_1.kt.out deleted file mode 100644 index 3b73e888dca..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/companion_object_1/companion_object_1.kt.out +++ /dev/null @@ -1,45 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.companion_object_1 = type { } -%class.companion_object_1.Companion = type { i32 } -@object.instance.companion_object_1.Companion = internal global %class.companion_object_1.Companion { i32 5790 }, align 8 -define weak void @companion_object_1(%class.companion_object_1* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.companion_object_1, align 8 -%var2 = bitcast %class.companion_object_1* %classvariable.this to i8* -%var3 = bitcast %class.companion_object_1* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var2, i8* %var3, i64 0, i32 4, i1 false) -ret void -unreachable -} -define weak void @companion_object_1.Companion(%class.companion_object_1.Companion* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.companion_object_1.Companion, align 8 -%var4 = getelementptr inbounds %class.companion_object_1.Companion* %classvariable.this.addr, i32 0, i32 0 -%var5 = load i32* %var4, align 4 -store i32 5790, i32* %var4, align 4 -%var6 = bitcast %class.companion_object_1.Companion* %classvariable.this to i8* -%var7 = bitcast %class.companion_object_1.Companion* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var6, i8* %var7, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @companion_object_1.Companion.create(%class.companion_object_1.Companion* %classvariable.this) #0 -{ -ret i32 5 -unreachable -} -define weak i32 @companion_object_1_test() #0 -{ -%var8 = call i32 @companion_object_1.Companion.create(%class.companion_object_1.Companion* @object.instance.companion_object_1.Companion) -%var9 = alloca i32, align 4 -store i32 %var8, i32* %var9, align 4 -%var10 = load i32* %var9, align 4 -ret i32 %var10 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/companion_object_1/companion_object_1.txt b/experiments/translator-bc/src/test/kotlin/tests/companion_object_1/companion_object_1.txt deleted file mode 100644 index 36a4313f03d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/companion_object_1/companion_object_1.txt +++ /dev/null @@ -1 +0,0 @@ -companion_object_1_test() == 5 diff --git a/experiments/translator-bc/src/test/kotlin/tests/companion_object_2/companion_object_2.kt b/experiments/translator-bc/src/test/kotlin/tests/companion_object_2/companion_object_2.kt deleted file mode 100644 index 8e41a27e35f..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/companion_object_2/companion_object_2.kt +++ /dev/null @@ -1,14 +0,0 @@ -class companion_object_2 { - companion object { - var fieldCompanion: Int = 5790 - - fun create(): Int { - return 5 - } - } -} - -fun companion_object_2_test(v: Int): Int { - companion_object_2.fieldCompanion = 239 + v - return companion_object_2.fieldCompanion -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/companion_object_2/companion_object_2.kt.out b/experiments/translator-bc/src/test/kotlin/tests/companion_object_2/companion_object_2.kt.out deleted file mode 100644 index 338e1eaba28..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/companion_object_2/companion_object_2.kt.out +++ /dev/null @@ -1,50 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.companion_object_2 = type { } -%class.companion_object_2.Companion = type { i32 } -@object.instance.companion_object_2.Companion = internal global %class.companion_object_2.Companion { i32 5790 }, align 8 -define weak void @companion_object_2(%class.companion_object_2* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.companion_object_2, align 8 -%var2 = bitcast %class.companion_object_2* %classvariable.this to i8* -%var3 = bitcast %class.companion_object_2* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var2, i8* %var3, i64 0, i32 4, i1 false) -ret void -unreachable -} -define weak void @companion_object_2.Companion(%class.companion_object_2.Companion* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.companion_object_2.Companion, align 8 -%var4 = getelementptr inbounds %class.companion_object_2.Companion* %classvariable.this.addr, i32 0, i32 0 -%var5 = load i32* %var4, align 4 -store i32 5790, i32* %var4, align 4 -%var6 = bitcast %class.companion_object_2.Companion* %classvariable.this to i8* -%var7 = bitcast %class.companion_object_2.Companion* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var6, i8* %var7, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @companion_object_2.Companion.create(%class.companion_object_2.Companion* %classvariable.this) #0 -{ -ret i32 5 -unreachable -} -define weak i32 @companion_object_2_test_Int(i32 %companion_object_2_test.v) #0 -{ -%companion_object_2_test.v.addr = alloca i32, align 4 -store i32 %companion_object_2_test.v, i32* %companion_object_2_test.v.addr, align 4 -%var8 = getelementptr inbounds %class.companion_object_2.Companion* @object.instance.companion_object_2.Companion, i32 0, i32 0 -%var9 = load i32* %companion_object_2_test.v.addr, align 4 -%var10 = add nsw i32 239, %var9 -%var11 = load i32* %var8, align 4 -store i32 %var10, i32* %var8, align 4 -%var12 = getelementptr inbounds %class.companion_object_2.Companion* @object.instance.companion_object_2.Companion, i32 0, i32 0 -%var13 = load i32* %var12, align 4 -ret i32 %var13 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/companion_object_2/companion_object_2.txt b/experiments/translator-bc/src/test/kotlin/tests/companion_object_2/companion_object_2.txt deleted file mode 100644 index 15cd9d8666f..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/companion_object_2/companion_object_2.txt +++ /dev/null @@ -1 +0,0 @@ -companion_object_2_test_Int(5) == 244 diff --git a/experiments/translator-bc/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.kt b/experiments/translator-bc/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.kt deleted file mode 100644 index 0957a99f4c0..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.kt +++ /dev/null @@ -1,7 +0,0 @@ - -class complex_dot_expr_MyClass(val i: Int) - -fun gen(i: Int) = complex_dot_expr_MyClass(i) -fun test1(q: Int) = gen(q).i -fun test2(w: Int) = complex_dot_expr_MyClass(w).i - diff --git a/experiments/translator-bc/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.kt.out b/experiments/translator-bc/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.kt.out deleted file mode 100644 index ce01d069ca7..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.kt.out +++ /dev/null @@ -1,67 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.complex_dot_expr_MyClass = type { i32 } -define weak void @complex_dot_expr_MyClass_Int(%class.complex_dot_expr_MyClass* %classvariable.this, i32 %complex_dot_expr_MyClass.i) #0 -{ -%classvariable.this.addr = alloca %class.complex_dot_expr_MyClass, align 8 -%complex_dot_expr_MyClass.i.addr = alloca i32, align 4 -store i32 %complex_dot_expr_MyClass.i, i32* %complex_dot_expr_MyClass.i.addr, align 4 -%var2 = load i32* %complex_dot_expr_MyClass.i.addr, align 4 -%var3 = getelementptr inbounds %class.complex_dot_expr_MyClass* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.complex_dot_expr_MyClass* %classvariable.this to i8* -%var5 = bitcast %class.complex_dot_expr_MyClass* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @test2_Int(i32 %test2.w) #0 -{ -%test2.w.addr = alloca i32, align 4 -store i32 %test2.w, i32* %test2.w.addr, align 4 -%var6 = load i32* %test2.w.addr, align 4 -%var8 = call i8* @malloc_heap(i32 4) -%var7 = bitcast i8* %var8 to %class.complex_dot_expr_MyClass* -%var9 = alloca %class.complex_dot_expr_MyClass*, align 8 -store %class.complex_dot_expr_MyClass* %var7, %class.complex_dot_expr_MyClass** %var9, align 8 -call void @complex_dot_expr_MyClass_Int(%class.complex_dot_expr_MyClass* %var7, i32 %var6) -%var10 = load %class.complex_dot_expr_MyClass** %var9, align 8 -%var11 = getelementptr inbounds %class.complex_dot_expr_MyClass* %var10, i32 0, i32 0 -%var12 = load i32* %var11, align 4 -ret i32 %var12 -unreachable -} -define weak void @gen_Int(%class.complex_dot_expr_MyClass** %instance, i32 %gen.i) #0 -{ -%gen.i.addr = alloca i32, align 4 -store i32 %gen.i, i32* %gen.i.addr, align 4 -%var13 = load i32* %gen.i.addr, align 4 -%var15 = call i8* @malloc_heap(i32 4) -%var14 = bitcast i8* %var15 to %class.complex_dot_expr_MyClass* -%var16 = alloca %class.complex_dot_expr_MyClass*, align 8 -store %class.complex_dot_expr_MyClass* %var14, %class.complex_dot_expr_MyClass** %var16, align 8 -call void @complex_dot_expr_MyClass_Int(%class.complex_dot_expr_MyClass* %var14, i32 %var13) -%var17 = load %class.complex_dot_expr_MyClass** %var16, align 8 -store %class.complex_dot_expr_MyClass* %var17, %class.complex_dot_expr_MyClass** %instance, align 8 -ret void -unreachable -} -define weak i32 @test1_Int(i32 %test1.q) #0 -{ -%test1.q.addr = alloca i32, align 4 -store i32 %test1.q, i32* %test1.q.addr, align 4 -%var18 = load i32* %test1.q.addr, align 4 -%var20 = call i8* @malloc_heap(i32 8) -%var19 = bitcast i8* %var20 to %class.complex_dot_expr_MyClass** -call void @gen_Int(%class.complex_dot_expr_MyClass** %var19, i32 %var18) -%var21 = load %class.complex_dot_expr_MyClass** %var19, align 8 -%var22 = getelementptr inbounds %class.complex_dot_expr_MyClass* %var21, i32 0, i32 0 -%var23 = load i32* %var22, align 4 -ret i32 %var23 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.txt b/experiments/translator-bc/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.txt deleted file mode 100644 index 680416f84f3..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.txt +++ /dev/null @@ -1,2 +0,0 @@ -test1_Int(1) == 1 -test2_Int(2) == 2 diff --git a/experiments/translator-bc/src/test/kotlin/tests/declaration_test_1/declaration_test_1.kt b/experiments/translator-bc/src/test/kotlin/tests/declaration_test_1/declaration_test_1.kt deleted file mode 100644 index 8fe160d884c..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/declaration_test_1/declaration_test_1.kt +++ /dev/null @@ -1,18 +0,0 @@ -class declaration_test_1_cls() - -fun declaration_test_1_variable(): Int { - val a: Int - a = 85 - return a -} - -fun declaration_test_1_class_slave(): declaration_test_1_cls { - val a: declaration_test_1_cls - a = declaration_test_1_cls() - return a -} - - -fun declaration_test_1_class(): Int { - return if (declaration_test_1_class_slave() == null) 10 else 96799 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/declaration_test_1/declaration_test_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/declaration_test_1/declaration_test_1.kt.out deleted file mode 100644 index 475ab2426c8..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/declaration_test_1/declaration_test_1.kt.out +++ /dev/null @@ -1,63 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.declaration_test_1_cls = type { } -define weak void @declaration_test_1_cls(%class.declaration_test_1_cls* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.declaration_test_1_cls, align 8 -%var2 = bitcast %class.declaration_test_1_cls* %classvariable.this to i8* -%var3 = bitcast %class.declaration_test_1_cls* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var2, i8* %var3, i64 0, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @declaration_test_1_variable() #0 -{ -%managed.unique.0.declaration_test_1_variable.a = alloca i32, align 4 -%var4 = load i32* %managed.unique.0.declaration_test_1_variable.a, align 4 -store i32 85, i32* %managed.unique.0.declaration_test_1_variable.a, align 4 -%var5 = load i32* %managed.unique.0.declaration_test_1_variable.a, align 4 -ret i32 %var5 -unreachable -} -define weak void @declaration_test_1_class_slave(%class.declaration_test_1_cls** %instance) #0 -{ -%managed.unique.1.declaration_test_1_class_slave.a = alloca %class.declaration_test_1_cls*, align 8 -%var7 = call i8* @malloc_heap(i32 0) -%var6 = bitcast i8* %var7 to %class.declaration_test_1_cls* -%var8 = alloca %class.declaration_test_1_cls*, align 8 -store %class.declaration_test_1_cls* %var6, %class.declaration_test_1_cls** %var8, align 8 -call void @declaration_test_1_cls(%class.declaration_test_1_cls* %var6) -%var9 = load %class.declaration_test_1_cls** %managed.unique.1.declaration_test_1_class_slave.a, align 8 -%var10 = load %class.declaration_test_1_cls** %var8, align 8 -store %class.declaration_test_1_cls* %var10, %class.declaration_test_1_cls** %managed.unique.1.declaration_test_1_class_slave.a, align 8 -%var11 = load %class.declaration_test_1_cls** %managed.unique.1.declaration_test_1_class_slave.a, align 8 -store %class.declaration_test_1_cls* %var11, %class.declaration_test_1_cls** %instance, align 8 -ret void -unreachable -} -define weak i32 @declaration_test_1_class() #0 -{ -%var13 = call i8* @malloc_heap(i32 8) -%var12 = bitcast i8* %var13 to %class.declaration_test_1_cls** -call void @declaration_test_1_class_slave(%class.declaration_test_1_cls** %var12) -%var14 = load %class.declaration_test_1_cls** %var12, align 8 -%var15 = load %class.declaration_test_1_cls** %var12, align 8 -%var16 = icmp eq %class.declaration_test_1_cls* %var15, null -%var17 = alloca i32, align 4 -br i1 %var16, label %label.if_then.1, label %label.if_else.2 -label.if_then.1: -store i32 10, i32* %var17, align 4 -br label %label.if_end.3 -label.if_else.2: -store i32 96799, i32* %var17, align 4 -br label %label.if_end.3 -label.if_end.3: -%var18 = load i32* %var17, align 4 -ret i32 %var18 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/declaration_test_1/declaration_test_1.txt b/experiments/translator-bc/src/test/kotlin/tests/declaration_test_1/declaration_test_1.txt deleted file mode 100644 index f083d5e5193..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/declaration_test_1/declaration_test_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -declaration_test_1_variable() == 85 -declaration_test_1_class() == 96799 diff --git a/experiments/translator-bc/src/test/kotlin/tests/dfs_1/dfs_1.kt b/experiments/translator-bc/src/test/kotlin/tests/dfs_1/dfs_1.kt deleted file mode 100644 index dcd5fedb968..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/dfs_1/dfs_1.kt +++ /dev/null @@ -1,45 +0,0 @@ -class dfs_1_Node { - var left: dfs_1_Node? = null - var right: dfs_1_Node? = null - var value: Int = 0 -} - -fun dfs_1_search(x: dfs_1_Node, value: Int): dfs_1_Node? { - if (x.value == value) { - return x - } - - if (x.left != null) { - val result = dfs_1_search(x.left!!, value) - if (result != null) { - return result - } - } - if (x.right != null) { - val result = dfs_1_search(x.right!!, value) - if (result != null) { - return result - } - } - return null -} - -fun dfs_1(searchObject: Int): Int { - var i = 0 - val root: dfs_1_Node? = dfs_1_Node() - root!!.value = 111 - var current = root - while (i < 10) { - current!!.left = dfs_1_Node() - current.right = dfs_1_Node() - current.value = i - current = current.left - i++ - } - val result = dfs_1_search(root, searchObject) - if (result == null) { - return -101 - } else { - return result.value - } -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/dfs_1/dfs_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/dfs_1/dfs_1.kt.out deleted file mode 100644 index b6d0be9ac74..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/dfs_1/dfs_1.kt.out +++ /dev/null @@ -1,244 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.dfs_1_Node = type { %class.dfs_1_Node*, %class.dfs_1_Node*, i32 } -define weak void @dfs_1_Node(%class.dfs_1_Node* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.dfs_1_Node, align 8 -%var2 = getelementptr inbounds %class.dfs_1_Node* %classvariable.this.addr, i32 0, i32 1 -%var3 = load %class.dfs_1_Node** %var2, align 8 -store %class.dfs_1_Node* null, %class.dfs_1_Node** %var2, align 8 -%var4 = getelementptr inbounds %class.dfs_1_Node* %classvariable.this.addr, i32 0, i32 0 -%var5 = load %class.dfs_1_Node** %var4, align 8 -store %class.dfs_1_Node* null, %class.dfs_1_Node** %var4, align 8 -%var6 = getelementptr inbounds %class.dfs_1_Node* %classvariable.this.addr, i32 0, i32 2 -%var7 = load i32* %var6, align 4 -store i32 0, i32* %var6, align 4 -%var8 = bitcast %class.dfs_1_Node* %classvariable.this to i8* -%var9 = bitcast %class.dfs_1_Node* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var8, i8* %var9, i64 24, i32 4, i1 false) -ret void -unreachable -} -define weak void @dfs_1_search_Ref_dfs_1_Node_Int(%class.dfs_1_Node** %instance, %class.dfs_1_Node* %dfs_1_search.x, i32 %dfs_1_search.value) #0 -{ -%dfs_1_search.value.addr = alloca i32, align 4 -store i32 %dfs_1_search.value, i32* %dfs_1_search.value.addr, align 4 -%var10 = getelementptr inbounds %class.dfs_1_Node* %dfs_1_search.x, i32 0, i32 2 -%var11 = load i32* %var10, align 4 -%var12 = load i32* %dfs_1_search.value.addr, align 4 -%var13 = icmp eq i32 %var11, %var12 -br i1 %var13, label %label.if.1, label %label.if.3 -label.if.1: -store %class.dfs_1_Node* %dfs_1_search.x, %class.dfs_1_Node** %instance, align 8 -ret void -br label %label.if.3 -label.if.3: -%var14 = getelementptr inbounds %class.dfs_1_Node* %dfs_1_search.x, i32 0, i32 0 -%var15 = load %class.dfs_1_Node** %var14, align 8 -%var16 = load %class.dfs_1_Node** %var14, align 8 -%var17 = icmp ne %class.dfs_1_Node* %var16, null -br i1 %var17, label %label.if.4, label %label.if.6 -label.if.4: -%var18 = getelementptr inbounds %class.dfs_1_Node* %dfs_1_search.x, i32 0, i32 0 -%var20 = load %class.dfs_1_Node** %var18, align 8 -%var19 = icmp eq %class.dfs_1_Node* null, %var20 -br i1 %var19, label %label.nullCheck.7, label %label.nullCheck.8 -label.nullCheck.7: -%var21 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.8 -label.nullCheck.8: -%var22 = getelementptr inbounds %class.dfs_1_Node* %dfs_1_search.x, i32 0, i32 0 -%var24 = load %class.dfs_1_Node** %var22, align 8 -%var23 = icmp eq %class.dfs_1_Node* null, %var24 -br i1 %var23, label %label.nullCheck.9, label %label.nullCheck.10 -label.nullCheck.9: -%var25 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.10 -label.nullCheck.10: -%var26 = load %class.dfs_1_Node** %var22, align 8 -%var27 = load i32* %dfs_1_search.value.addr, align 4 -%var29 = call i8* @malloc_heap(i32 8) -%var28 = bitcast i8* %var29 to %class.dfs_1_Node** -call void @dfs_1_search_Ref_dfs_1_Node_Int(%class.dfs_1_Node** %var28, %class.dfs_1_Node* %var26, i32 %var27) -%managed.unique.0.dfs_1_search.result = alloca %class.dfs_1_Node*, align 8 -%var30 = load %class.dfs_1_Node** %managed.unique.0.dfs_1_search.result, align 8 -%var31 = load %class.dfs_1_Node** %var28, align 8 -store %class.dfs_1_Node* %var31, %class.dfs_1_Node** %managed.unique.0.dfs_1_search.result, align 8 -%var32 = load %class.dfs_1_Node** %managed.unique.0.dfs_1_search.result, align 8 -%var33 = load %class.dfs_1_Node** %managed.unique.0.dfs_1_search.result, align 8 -%var34 = icmp ne %class.dfs_1_Node* %var33, null -br i1 %var34, label %label.if.11, label %label.if.13 -label.if.11: -%var35 = load %class.dfs_1_Node** %managed.unique.0.dfs_1_search.result, align 8 -store %class.dfs_1_Node* %var35, %class.dfs_1_Node** %instance, align 8 -ret void -br label %label.if.13 -label.if.13: -br label %label.if.6 -label.if.6: -%var36 = getelementptr inbounds %class.dfs_1_Node* %dfs_1_search.x, i32 0, i32 1 -%var37 = load %class.dfs_1_Node** %var36, align 8 -%var38 = load %class.dfs_1_Node** %var36, align 8 -%var39 = icmp ne %class.dfs_1_Node* %var38, null -br i1 %var39, label %label.if.14, label %label.if.16 -label.if.14: -%var40 = getelementptr inbounds %class.dfs_1_Node* %dfs_1_search.x, i32 0, i32 1 -%var42 = load %class.dfs_1_Node** %var40, align 8 -%var41 = icmp eq %class.dfs_1_Node* null, %var42 -br i1 %var41, label %label.nullCheck.17, label %label.nullCheck.18 -label.nullCheck.17: -%var43 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.18 -label.nullCheck.18: -%var44 = getelementptr inbounds %class.dfs_1_Node* %dfs_1_search.x, i32 0, i32 1 -%var46 = load %class.dfs_1_Node** %var44, align 8 -%var45 = icmp eq %class.dfs_1_Node* null, %var46 -br i1 %var45, label %label.nullCheck.19, label %label.nullCheck.20 -label.nullCheck.19: -%var47 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.20 -label.nullCheck.20: -%var48 = load %class.dfs_1_Node** %var44, align 8 -%var49 = load i32* %dfs_1_search.value.addr, align 4 -%var51 = call i8* @malloc_heap(i32 8) -%var50 = bitcast i8* %var51 to %class.dfs_1_Node** -call void @dfs_1_search_Ref_dfs_1_Node_Int(%class.dfs_1_Node** %var50, %class.dfs_1_Node* %var48, i32 %var49) -%managed.unique.1.dfs_1_search.result = alloca %class.dfs_1_Node*, align 8 -%var52 = load %class.dfs_1_Node** %managed.unique.1.dfs_1_search.result, align 8 -%var53 = load %class.dfs_1_Node** %var50, align 8 -store %class.dfs_1_Node* %var53, %class.dfs_1_Node** %managed.unique.1.dfs_1_search.result, align 8 -%var54 = load %class.dfs_1_Node** %managed.unique.1.dfs_1_search.result, align 8 -%var55 = load %class.dfs_1_Node** %managed.unique.1.dfs_1_search.result, align 8 -%var56 = icmp ne %class.dfs_1_Node* %var55, null -br i1 %var56, label %label.if.21, label %label.if.23 -label.if.21: -%var57 = load %class.dfs_1_Node** %managed.unique.1.dfs_1_search.result, align 8 -store %class.dfs_1_Node* %var57, %class.dfs_1_Node** %instance, align 8 -ret void -br label %label.if.23 -label.if.23: -br label %label.if.16 -label.if.16: -store %class.dfs_1_Node* null, %class.dfs_1_Node** %instance, align 1 -ret void -unreachable -} -define weak i32 @dfs_1_Int(i32 %dfs_1.searchObject) #0 -{ -%dfs_1.searchObject.addr = alloca i32, align 4 -store i32 %dfs_1.searchObject, i32* %dfs_1.searchObject.addr, align 4 -%managed.unique.2.dfs_1.i = alloca i32, align 4 -%var58 = load i32* %managed.unique.2.dfs_1.i, align 4 -store i32 0, i32* %managed.unique.2.dfs_1.i, align 4 -%var60 = call i8* @malloc_heap(i32 24) -%var59 = bitcast i8* %var60 to %class.dfs_1_Node* -%var61 = alloca %class.dfs_1_Node*, align 8 -store %class.dfs_1_Node* %var59, %class.dfs_1_Node** %var61, align 8 -call void @dfs_1_Node(%class.dfs_1_Node* %var59) -%managed.unique.3.dfs_1.root = alloca %class.dfs_1_Node*, align 8 -%var62 = load %class.dfs_1_Node** %managed.unique.3.dfs_1.root, align 8 -%var63 = load %class.dfs_1_Node** %var61, align 8 -store %class.dfs_1_Node* %var63, %class.dfs_1_Node** %managed.unique.3.dfs_1.root, align 8 -%var65 = load %class.dfs_1_Node** %managed.unique.3.dfs_1.root, align 8 -%var64 = icmp eq %class.dfs_1_Node* null, %var65 -br i1 %var64, label %label.nullCheck.24, label %label.nullCheck.25 -label.nullCheck.24: -%var66 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.25 -label.nullCheck.25: -%var67 = load %class.dfs_1_Node** %managed.unique.3.dfs_1.root, align 8 -%var68 = getelementptr inbounds %class.dfs_1_Node* %var67, i32 0, i32 2 -%var69 = load i32* %var68, align 4 -store i32 111, i32* %var68, align 4 -%managed.unique.4.dfs_1.current = alloca %class.dfs_1_Node*, align 8 -%var70 = load %class.dfs_1_Node** %managed.unique.4.dfs_1.current, align 8 -%var71 = load %class.dfs_1_Node** %managed.unique.3.dfs_1.root, align 8 -store %class.dfs_1_Node* %var71, %class.dfs_1_Node** %managed.unique.4.dfs_1.current, align 8 -br label %label.while.26 -label.while.26: -%var72 = load i32* %managed.unique.2.dfs_1.i, align 4 -%var73 = icmp slt i32 %var72, 10 -br i1 %var73, label %label.while.27, label %label.while.28 -label.while.27: -%var75 = load %class.dfs_1_Node** %managed.unique.4.dfs_1.current, align 8 -%var74 = icmp eq %class.dfs_1_Node* null, %var75 -br i1 %var74, label %label.nullCheck.29, label %label.nullCheck.30 -label.nullCheck.29: -%var76 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.30 -label.nullCheck.30: -%var77 = load %class.dfs_1_Node** %managed.unique.4.dfs_1.current, align 8 -%var78 = getelementptr inbounds %class.dfs_1_Node* %var77, i32 0, i32 0 -%var80 = call i8* @malloc_heap(i32 24) -%var79 = bitcast i8* %var80 to %class.dfs_1_Node* -%var81 = alloca %class.dfs_1_Node*, align 8 -store %class.dfs_1_Node* %var79, %class.dfs_1_Node** %var81, align 8 -call void @dfs_1_Node(%class.dfs_1_Node* %var79) -%var82 = load %class.dfs_1_Node** %var78, align 8 -%var83 = load %class.dfs_1_Node** %var81, align 8 -store %class.dfs_1_Node* %var83, %class.dfs_1_Node** %var78, align 8 -%var84 = load %class.dfs_1_Node** %managed.unique.4.dfs_1.current, align 8 -%var85 = getelementptr inbounds %class.dfs_1_Node* %var84, i32 0, i32 1 -%var87 = call i8* @malloc_heap(i32 24) -%var86 = bitcast i8* %var87 to %class.dfs_1_Node* -%var88 = alloca %class.dfs_1_Node*, align 8 -store %class.dfs_1_Node* %var86, %class.dfs_1_Node** %var88, align 8 -call void @dfs_1_Node(%class.dfs_1_Node* %var86) -%var89 = load %class.dfs_1_Node** %var85, align 8 -%var90 = load %class.dfs_1_Node** %var88, align 8 -store %class.dfs_1_Node* %var90, %class.dfs_1_Node** %var85, align 8 -%var91 = load %class.dfs_1_Node** %managed.unique.4.dfs_1.current, align 8 -%var92 = getelementptr inbounds %class.dfs_1_Node* %var91, i32 0, i32 2 -%var93 = load i32* %var92, align 4 -%var94 = load i32* %managed.unique.2.dfs_1.i, align 4 -store i32 %var94, i32* %var92, align 4 -%var95 = load %class.dfs_1_Node** %managed.unique.4.dfs_1.current, align 8 -%var96 = getelementptr inbounds %class.dfs_1_Node* %var95, i32 0, i32 0 -%var97 = load %class.dfs_1_Node** %managed.unique.4.dfs_1.current, align 8 -%var98 = load %class.dfs_1_Node** %var96, align 8 -store %class.dfs_1_Node* %var98, %class.dfs_1_Node** %managed.unique.4.dfs_1.current, align 8 -%var99 = load i32* %managed.unique.2.dfs_1.i, align 4 -%var100 = alloca i32, align 4 -%var101 = load i32* %managed.unique.2.dfs_1.i, align 4 -store i32 %var101, i32* %var100, align 4 -%var102 = add nsw i32 %var99, 1 -store i32 %var102, i32* %managed.unique.2.dfs_1.i, align 4 -br label %label.while.26 -label.while.28: -%var103 = load %class.dfs_1_Node** %managed.unique.3.dfs_1.root, align 8 -%var104 = load i32* %dfs_1.searchObject.addr, align 4 -%var106 = call i8* @malloc_heap(i32 8) -%var105 = bitcast i8* %var106 to %class.dfs_1_Node** -call void @dfs_1_search_Ref_dfs_1_Node_Int(%class.dfs_1_Node** %var105, %class.dfs_1_Node* %var103, i32 %var104) -%managed.unique.5.dfs_1.result = alloca %class.dfs_1_Node*, align 8 -%var107 = load %class.dfs_1_Node** %managed.unique.5.dfs_1.result, align 8 -%var108 = load %class.dfs_1_Node** %var105, align 8 -store %class.dfs_1_Node* %var108, %class.dfs_1_Node** %managed.unique.5.dfs_1.result, align 8 -%var109 = load %class.dfs_1_Node** %managed.unique.5.dfs_1.result, align 8 -%var110 = load %class.dfs_1_Node** %managed.unique.5.dfs_1.result, align 8 -%var111 = icmp eq %class.dfs_1_Node* %var110, null -br i1 %var111, label %label.if.31, label %label.if.32 -label.if.31: -%var112 = sub nsw i32 0, 101 -ret i32 %var112 -br label %label.if.33 -label.if.32: -%var113 = load %class.dfs_1_Node** %managed.unique.5.dfs_1.result, align 8 -%var114 = getelementptr inbounds %class.dfs_1_Node* %var113, i32 0, i32 2 -%var115 = load i32* %var114, align 4 -ret i32 %var115 -br label %label.if.33 -label.if.33: -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/dfs_1/dfs_1.txt b/experiments/translator-bc/src/test/kotlin/tests/dfs_1/dfs_1.txt deleted file mode 100644 index 98f7941352e..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/dfs_1/dfs_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -dfs_1_Int(73) == -101 -dfs_1_Int(8) == 8 -dfs_1_Int(9) == 9 diff --git a/experiments/translator-bc/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.kt b/experiments/translator-bc/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.kt deleted file mode 100644 index d7379034506..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun different_type_binary_operator_1_shr(x: Int, y: Long): Long { - return y shr x -} - -fun different_type_binary_operator_1_shl(x: Int, y: Long): Long { - return y shl x -} - -fun different_type_binary_operator_1_ushr(x: Int, y: Long): Long { - return y ushr x -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.kt.out deleted file mode 100644 index 248c146a920..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.kt.out +++ /dev/null @@ -1,49 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i64 @different_type_binary_operator_1_shl_Int_Long(i32 %different_type_binary_operator_1_shl.x, i64 %different_type_binary_operator_1_shl.y) #0 -{ -%different_type_binary_operator_1_shl.x.addr = alloca i32, align 4 -store i32 %different_type_binary_operator_1_shl.x, i32* %different_type_binary_operator_1_shl.x.addr, align 4 -%different_type_binary_operator_1_shl.y.addr = alloca i64, align 8 -store i64 %different_type_binary_operator_1_shl.y, i64* %different_type_binary_operator_1_shl.y.addr, align 8 -%var2 = load i64* %different_type_binary_operator_1_shl.y.addr, align 8 -%var3 = load i32* %different_type_binary_operator_1_shl.x.addr, align 4 -%var4 = load i64* %different_type_binary_operator_1_shl.y.addr, align 8 -%var5 = sext i32 %var3 to i64 -%var6 = shl i64 %var4, %var5 -ret i64 %var6 -unreachable -} -define weak i64 @different_type_binary_operator_1_ushr_Int_Long(i32 %different_type_binary_operator_1_ushr.x, i64 %different_type_binary_operator_1_ushr.y) #0 -{ -%different_type_binary_operator_1_ushr.x.addr = alloca i32, align 4 -store i32 %different_type_binary_operator_1_ushr.x, i32* %different_type_binary_operator_1_ushr.x.addr, align 4 -%different_type_binary_operator_1_ushr.y.addr = alloca i64, align 8 -store i64 %different_type_binary_operator_1_ushr.y, i64* %different_type_binary_operator_1_ushr.y.addr, align 8 -%var7 = load i64* %different_type_binary_operator_1_ushr.y.addr, align 8 -%var8 = load i32* %different_type_binary_operator_1_ushr.x.addr, align 4 -%var9 = load i64* %different_type_binary_operator_1_ushr.y.addr, align 8 -%var10 = sext i32 %var8 to i64 -%var11 = lshr i64 %var9, %var10 -ret i64 %var11 -unreachable -} -define weak i64 @different_type_binary_operator_1_shr_Int_Long(i32 %different_type_binary_operator_1_shr.x, i64 %different_type_binary_operator_1_shr.y) #0 -{ -%different_type_binary_operator_1_shr.x.addr = alloca i32, align 4 -store i32 %different_type_binary_operator_1_shr.x, i32* %different_type_binary_operator_1_shr.x.addr, align 4 -%different_type_binary_operator_1_shr.y.addr = alloca i64, align 8 -store i64 %different_type_binary_operator_1_shr.y, i64* %different_type_binary_operator_1_shr.y.addr, align 8 -%var12 = load i64* %different_type_binary_operator_1_shr.y.addr, align 8 -%var13 = load i32* %different_type_binary_operator_1_shr.x.addr, align 4 -%var14 = load i64* %different_type_binary_operator_1_shr.y.addr, align 8 -%var15 = sext i32 %var13 to i64 -%var16 = ashr i64 %var14, %var15 -ret i64 %var16 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.txt b/experiments/translator-bc/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.txt deleted file mode 100644 index 2e6342034ce..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -different_type_binary_operator_1_shl_Int_Long(10, 5) == 5120 -different_type_binary_operator_1_shr_Int_Long(5, 5000) == 156 -different_type_binary_operator_1_ushr_Int_Long(5, 5000) == 156 diff --git a/experiments/translator-bc/src/test/kotlin/tests/do_while_1/do_while_1.kt b/experiments/translator-bc/src/test/kotlin/tests/do_while_1/do_while_1.kt deleted file mode 100644 index 528bf62c37b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/do_while_1/do_while_1.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun do_while_test_1(x: Int): Int { - var t = x - do { - t = t + 1 - } while (2 > 3) - return t -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/do_while_1/do_while_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/do_while_1/do_while_1.kt.out deleted file mode 100644 index 712183c49e6..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/do_while_1/do_while_1.kt.out +++ /dev/null @@ -1,30 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @do_while_test_1_Int(i32 %do_while_test_1.x) #0 -{ -%do_while_test_1.x.addr = alloca i32, align 4 -store i32 %do_while_test_1.x, i32* %do_while_test_1.x.addr, align 4 -%managed.unique.0.do_while_test_1.t = alloca i32, align 4 -%var2 = load i32* %managed.unique.0.do_while_test_1.t, align 4 -%var3 = load i32* %do_while_test_1.x.addr, align 4 -store i32 %var3, i32* %managed.unique.0.do_while_test_1.t, align 4 -br label %label.while.2 -label.while.1: -%var4 = icmp sgt i32 2, 3 -br i1 %var4, label %label.while.2, label %label.while.3 -label.while.2: -%var5 = load i32* %managed.unique.0.do_while_test_1.t, align 4 -%var6 = add nsw i32 %var5, 1 -%var7 = load i32* %managed.unique.0.do_while_test_1.t, align 4 -store i32 %var6, i32* %managed.unique.0.do_while_test_1.t, align 4 -br label %label.while.1 -label.while.3: -%var8 = load i32* %managed.unique.0.do_while_test_1.t, align 4 -ret i32 %var8 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/do_while_1/do_while_1.txt b/experiments/translator-bc/src/test/kotlin/tests/do_while_1/do_while_1.txt deleted file mode 100644 index 623a6c1cd84..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/do_while_1/do_while_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -do_while_test_1_Int(5) == 6 -do_while_test_1_Int(57) == 58 diff --git a/experiments/translator-bc/src/test/kotlin/tests/elvis_1/elvis_1.kt b/experiments/translator-bc/src/test/kotlin/tests/elvis_1/elvis_1.kt deleted file mode 100644 index e586e3ca698..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/elvis_1/elvis_1.kt +++ /dev/null @@ -1,20 +0,0 @@ - -class elvis_1_MyClass(val i: Int) - -fun elvis_test_1(x: Int): Int { - var z: elvis_1_MyClass? = null - - if (x > 1) { - z = elvis_1_MyClass(1) - } else { - } - - z ?: return 0 - return 1 -} - -fun elvis_test_2(): Int { - val i: elvis_1_MyClass? = null - i ?: return 1 - return 0 -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/elvis_1/elvis_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/elvis_1/elvis_1.kt.out deleted file mode 100644 index e042761f509..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/elvis_1/elvis_1.kt.out +++ /dev/null @@ -1,70 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.elvis_1_MyClass = type { i32 } -define weak void @elvis_1_MyClass_Int(%class.elvis_1_MyClass* %classvariable.this, i32 %elvis_1_MyClass.i) #0 -{ -%classvariable.this.addr = alloca %class.elvis_1_MyClass, align 8 -%elvis_1_MyClass.i.addr = alloca i32, align 4 -store i32 %elvis_1_MyClass.i, i32* %elvis_1_MyClass.i.addr, align 4 -%var2 = load i32* %elvis_1_MyClass.i.addr, align 4 -%var3 = getelementptr inbounds %class.elvis_1_MyClass* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.elvis_1_MyClass* %classvariable.this to i8* -%var5 = bitcast %class.elvis_1_MyClass* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @elvis_test_2() #0 -{ -%managed.unique.0.elvis_test_2.i = alloca %class.elvis_1_MyClass*, align 8 -%var6 = load %class.elvis_1_MyClass** %managed.unique.0.elvis_test_2.i, align 8 -store %class.elvis_1_MyClass* null, %class.elvis_1_MyClass** %managed.unique.0.elvis_test_2.i, align 8 -%var7 = load %class.elvis_1_MyClass** %managed.unique.0.elvis_test_2.i, align 8 -%var8 = icmp eq %class.elvis_1_MyClass* %var7, null -br i1 %var8, label %label.elvis.1, label %label.elvis.2 -label.elvis.1: -ret i32 1 -br label %label.elvis.2 -label.elvis.2: -ret i32 0 -unreachable -} -define weak i32 @elvis_test_1_Int(i32 %elvis_test_1.x) #0 -{ -%elvis_test_1.x.addr = alloca i32, align 4 -store i32 %elvis_test_1.x, i32* %elvis_test_1.x.addr, align 4 -%managed.unique.1.elvis_test_1.z = alloca %class.elvis_1_MyClass*, align 8 -%var9 = load %class.elvis_1_MyClass** %managed.unique.1.elvis_test_1.z, align 8 -store %class.elvis_1_MyClass* null, %class.elvis_1_MyClass** %managed.unique.1.elvis_test_1.z, align 8 -%var10 = load i32* %elvis_test_1.x.addr, align 4 -%var11 = icmp sgt i32 %var10, 1 -br i1 %var11, label %label.if.3, label %label.if.4 -label.if.3: -%var13 = call i8* @malloc_heap(i32 4) -%var12 = bitcast i8* %var13 to %class.elvis_1_MyClass* -%var14 = alloca %class.elvis_1_MyClass*, align 8 -store %class.elvis_1_MyClass* %var12, %class.elvis_1_MyClass** %var14, align 8 -call void @elvis_1_MyClass_Int(%class.elvis_1_MyClass* %var12, i32 1) -%var15 = load %class.elvis_1_MyClass** %managed.unique.1.elvis_test_1.z, align 8 -%var16 = load %class.elvis_1_MyClass** %var14, align 8 -store %class.elvis_1_MyClass* %var16, %class.elvis_1_MyClass** %managed.unique.1.elvis_test_1.z, align 8 -br label %label.if.5 -label.if.4: -br label %label.if.5 -label.if.5: -%var17 = load %class.elvis_1_MyClass** %managed.unique.1.elvis_test_1.z, align 8 -%var18 = icmp eq %class.elvis_1_MyClass* %var17, null -br i1 %var18, label %label.elvis.6, label %label.elvis.7 -label.elvis.6: -ret i32 0 -br label %label.elvis.7 -label.elvis.7: -ret i32 1 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/elvis_1/elvis_1.txt b/experiments/translator-bc/src/test/kotlin/tests/elvis_1/elvis_1.txt deleted file mode 100644 index 5d10fe216cc..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/elvis_1/elvis_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -elvis_test_1_Int(0) == 0 -elvis_test_1_Int(2) == 1 -elvis_test_2() == 1 diff --git a/experiments/translator-bc/src/test/kotlin/tests/enum_complex/enum_complex.kt b/experiments/translator-bc/src/test/kotlin/tests/enum_complex/enum_complex.kt deleted file mode 100644 index 3754ffc5bb2..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/enum_complex/enum_complex.kt +++ /dev/null @@ -1,20 +0,0 @@ - -class Holder() { - - enum class nested(val id: Int) { - FIRST(0), - SECOND(1), - THIRD(3); - - companion object { - fun functor(ord: Int): Int { - return nested.FIRST.id - } - } - } -} - -fun enum_complex_test1(): Int { - val h = Holder() - return Holder.nested.functor(0) -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/enum_complex/enum_complex.kt.out b/experiments/translator-bc/src/test/kotlin/tests/enum_complex/enum_complex.kt.out deleted file mode 100644 index a1b92992711..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/enum_complex/enum_complex.kt.out +++ /dev/null @@ -1,77 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.Holder = type { } -%class.Holder.nested = type { i32 } -%class.Holder.nested.Companion = type { } -@object.instance.Holder.nested.Companion = internal global %class.Holder.nested.Companion { }, align 8 -define weak void @Holder(%class.Holder* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.Holder, align 8 -%var2 = bitcast %class.Holder* %classvariable.this to i8* -%var3 = bitcast %class.Holder* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var2, i8* %var3, i64 0, i32 4, i1 false) -ret void -unreachable -} -@var4 = global %class.Holder.nested { i32 0 }, align 8 -@class.Holder.nested.FIRST = global %class.Holder.nested* @var4, align 8 -@var5 = global %class.Holder.nested { i32 1 }, align 8 -@class.Holder.nested.SECOND = global %class.Holder.nested* @var5, align 8 -@var6 = global %class.Holder.nested { i32 3 }, align 8 -@class.Holder.nested.THIRD = global %class.Holder.nested* @var6, align 8 -define weak void @Holder.nested_Int(%class.Holder.nested* %classvariable.this, i32 %Holder.nested.id) #0 -{ -%classvariable.this.addr = alloca %class.Holder.nested, align 8 -%Holder.nested.id.addr = alloca i32, align 4 -store i32 %Holder.nested.id, i32* %Holder.nested.id.addr, align 4 -%var7 = load i32* %Holder.nested.id.addr, align 4 -%var8 = getelementptr inbounds %class.Holder.nested* %classvariable.this.addr, i32 0, i32 0 -store i32 %var7, i32* %var8, align 4 -%var9 = bitcast %class.Holder.nested* %classvariable.this to i8* -%var10 = bitcast %class.Holder.nested* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var9, i8* %var10, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak void @Holder.nested.Companion(%class.Holder.nested.Companion* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.Holder.nested.Companion, align 8 -%var11 = bitcast %class.Holder.nested.Companion* %classvariable.this to i8* -%var12 = bitcast %class.Holder.nested.Companion* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var11, i8* %var12, i64 0, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @Holder.nested.Companion.functor_Int(%class.Holder.nested.Companion* %classvariable.this, i32 %Holder.nested.Companion.functor.ord) #0 -{ -%Holder.nested.Companion.functor.ord.addr = alloca i32, align 4 -store i32 %Holder.nested.Companion.functor.ord, i32* %Holder.nested.Companion.functor.ord.addr, align 4 -%var13 = load %class.Holder.nested** @class.Holder.nested.FIRST, align 8 -%var14 = getelementptr inbounds %class.Holder.nested* %var13, i32 0, i32 0 -%var15 = load i32* %var14, align 4 -ret i32 %var15 -unreachable -} -define weak i32 @enum_complex_test1() #0 -{ -%var17 = call i8* @malloc_heap(i32 0) -%var16 = bitcast i8* %var17 to %class.Holder* -%var18 = alloca %class.Holder*, align 8 -store %class.Holder* %var16, %class.Holder** %var18, align 8 -call void @Holder(%class.Holder* %var16) -%managed.unique.0.enum_complex_test1.h = alloca %class.Holder*, align 8 -%var19 = load %class.Holder** %managed.unique.0.enum_complex_test1.h, align 8 -%var20 = load %class.Holder** %var18, align 8 -store %class.Holder* %var20, %class.Holder** %managed.unique.0.enum_complex_test1.h, align 8 -%var21 = call i32 @Holder.nested.Companion.functor_Int(%class.Holder.nested.Companion* @object.instance.Holder.nested.Companion, i32 0) -%var22 = alloca i32, align 4 -store i32 %var21, i32* %var22, align 4 -%var23 = load i32* %var22, align 4 -ret i32 %var23 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/enum_complex/enum_complex.txt b/experiments/translator-bc/src/test/kotlin/tests/enum_complex/enum_complex.txt deleted file mode 100644 index 4eea6541a24..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/enum_complex/enum_complex.txt +++ /dev/null @@ -1 +0,0 @@ -enum_complex_test1() == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt b/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt deleted file mode 100644 index b9aa36677d4..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt +++ /dev/null @@ -1,4 +0,0 @@ - -fun enum_field_test1(i: Byte): Int { - return WireType.from(i).id -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt.err b/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt.err deleted file mode 100644 index 6b042cb8c83..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt.err +++ /dev/null @@ -1,6 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./enum_inner_fields/enum_inner_fields.kt 3:12 Unresolved reference: WireType -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt.out b/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.txt b/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.txt deleted file mode 100644 index b569ec5c82d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.txt +++ /dev/null @@ -1,2 +0,0 @@ -enum_field_test1_Byte(1) == 1 -enum_field_test1_Byte(2) == 2 diff --git a/experiments/translator-bc/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.kt b/experiments/translator-bc/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.kt deleted file mode 100644 index 951a1fb499b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.kt +++ /dev/null @@ -1,12 +0,0 @@ -fun floating_point_operators_1_double_leq(x: Double, y: Double): Int { - if (x < y){ - return 1 - } - else{ - return 0 - } -} - -fun floating_point_operators_1_getValue(b: Boolean): Boolean{ - return b -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.kt.out deleted file mode 100644 index 9be0eee5c02..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.kt.out +++ /dev/null @@ -1,34 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @floating_point_operators_1_double_leq_Double_Double(double %floating_point_operators_1_double_leq.x, double %floating_point_operators_1_double_leq.y) #0 -{ -%floating_point_operators_1_double_leq.x.addr = alloca double, align 8 -store double %floating_point_operators_1_double_leq.x, double* %floating_point_operators_1_double_leq.x.addr, align 8 -%floating_point_operators_1_double_leq.y.addr = alloca double, align 8 -store double %floating_point_operators_1_double_leq.y, double* %floating_point_operators_1_double_leq.y.addr, align 8 -%var2 = load double* %floating_point_operators_1_double_leq.x.addr, align 8 -%var3 = load double* %floating_point_operators_1_double_leq.y.addr, align 8 -%var4 = fcmp olt double %var2, %var3 -br i1 %var4, label %label.if.1, label %label.if.2 -label.if.1: -ret i32 1 -br label %label.if.3 -label.if.2: -ret i32 0 -br label %label.if.3 -label.if.3: -unreachable -} -define weak i1 @floating_point_operators_1_getValue_Boolean(i1 %floating_point_operators_1_getValue.b) #0 -{ -%floating_point_operators_1_getValue.b.addr = alloca i1, align 4 -store i1 %floating_point_operators_1_getValue.b, i1* %floating_point_operators_1_getValue.b.addr, align 4 -%var5 = load i1* %floating_point_operators_1_getValue.b.addr, align 4 -ret i1 %var5 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.txt b/experiments/translator-bc/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.txt deleted file mode 100644 index af281b291ce..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -floating_point_operators_1_double_leq_Double_Double(14.9301, 5.6) == 0 -floating_point_operators_1_double_leq_Double_Double(1.49301, 5.6) == 1 diff --git a/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.kt b/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.kt deleted file mode 100644 index a540d0fe8ef..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun for_1_simple(): Int { - var sum = 0 - for (i in 10..20) { - sum += i - } - return sum -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.kt.err deleted file mode 100644 index b4fa2732a93..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.kt.err +++ /dev/null @@ -1,20 +0,0 @@ -Exception in thread "main" kotlin.KotlinNullPointerException - at org.kotlinnative.translator.codegens.BlockCodegen.addPrimitiveReferenceOperationByName(BlockCodegen.kt:832) - at org.kotlinnative.translator.codegens.BlockCodegen.addPrimitiveBinaryOperation(BlockCodegen.kt:183) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateBinaryExpression(BlockCodegen.kt:694) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExpression(BlockCodegen.kt:72) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateForOperator(BlockCodegen.kt:868) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateLeafPsiElement(BlockCodegen.kt:861) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluatePsiElement(BlockCodegen.kt:849) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExpression(BlockCodegen.kt:88) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:201) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:192) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock(BlockCodegen.kt:45) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock$default(BlockCodegen.kt:42) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate(FunctionCodegen.kt:81) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate$default(FunctionCodegen.kt:72) - at org.kotlinnative.translator.ProjectTranslator.generateProjectBody(ProjectTranslator.kt:69) - at org.kotlinnative.translator.ProjectTranslator.generateCode(ProjectTranslator.kt:20) - at MainKt.main(main.kt:22) diff --git a/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.txt b/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.txt deleted file mode 100644 index 3fa1d39457b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/for_1/for_1.txt +++ /dev/null @@ -1 +0,0 @@ -for_1_simple() == 165 diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.kt b/experiments/translator-bc/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.kt deleted file mode 100644 index d61ee8e9c67..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.kt +++ /dev/null @@ -1,59 +0,0 @@ -class function_default_arguments_1_argClass(val classArgument: Int) - -fun function_default_arguments_1_add(x: Int, t: function_default_arguments_1_argClass = function_default_arguments_1_argClass(124), y: Int = 53, z: Int = 777): Int { - return x + y -} - -fun function_default_arguments_1_add_class(x: Int, t: function_default_arguments_1_argClass = function_default_arguments_1_argClass(124), y: Int = 53, z: Int = 777): Int { - return x + t.classArgument -} - -fun function_default_arguments_1_add_class_arg(): Int { - return function_default_arguments_1_add_class(190) -} - -fun function_default_arguments_1_mixed(): Int { - return function_default_arguments_1_add(23, t = function_default_arguments_1_argClass(29), z = 8) -} - -fun function_default_arguments_1_last_missed_fun(z: Int, u: Int = 954): Int { - return z + u -} - -fun function_default_arguments_1_last_missed(x: Int): Int { - return function_default_arguments_1_last_missed_fun(x) -} - -fun function_default_arguments_1_last_present(x: Int): Int { - return function_default_arguments_1_last_missed_fun(x, 29) -} - -fun function_default_arguments_1_position_fun(first: Int, second: Int = 324 - , third: Int = 2531): Int { - return first + 2 * second + 3 * third -} - -fun function_default_arguments_1_position_third_only(x: Int): Int { - return function_default_arguments_1_position_fun(11, third = x) -} - -fun function_default_arguments_1_position_all_reverse(x: Int): Int { - return function_default_arguments_1_position_fun(11, third = x, second = 32) -} - -fun function_default_arguments_1_position_all_right_order(x: Int): Int { - return function_default_arguments_1_position_fun(11, second = 32, third = x) -} - -fun function_default_arguments_1_position_all_default(x: Int): Int { - return function_default_arguments_1_position_fun(x) -} - -fun function_default_arguments_1_all_position_fun(first: Int = 31, second: Int = 32 - , third: Int = 33): Int { - return first + 2 * second + 3 * third -} - -fun function_default_arguments_1_all_position(): Int { - return function_default_arguments_1_all_position_fun() -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.kt.out deleted file mode 100644 index 9d0acb1e14a..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.kt.out +++ /dev/null @@ -1,215 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.function_default_arguments_1_argClass = type { i32 } -define weak void @function_default_arguments_1_argClass_Int(%class.function_default_arguments_1_argClass* %classvariable.this, i32 %function_default_arguments_1_argClass.classArgument) #0 -{ -%classvariable.this.addr = alloca %class.function_default_arguments_1_argClass, align 8 -%function_default_arguments_1_argClass.classArgument.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_argClass.classArgument, i32* %function_default_arguments_1_argClass.classArgument.addr, align 4 -%var2 = load i32* %function_default_arguments_1_argClass.classArgument.addr, align 4 -%var3 = getelementptr inbounds %class.function_default_arguments_1_argClass* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.function_default_arguments_1_argClass* %classvariable.this to i8* -%var5 = bitcast %class.function_default_arguments_1_argClass* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @function_default_arguments_1_add_class_Int_Ref_function_default_arguments_1_argClass_Int_Int(i32 %function_default_arguments_1_add_class.x, %class.function_default_arguments_1_argClass* %function_default_arguments_1_add_class.t, i32 %function_default_arguments_1_add_class.y, i32 %function_default_arguments_1_add_class.z) #0 -{ -%function_default_arguments_1_add_class.x.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_add_class.x, i32* %function_default_arguments_1_add_class.x.addr, align 4 -%function_default_arguments_1_add_class.y.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_add_class.y, i32* %function_default_arguments_1_add_class.y.addr, align 4 -%function_default_arguments_1_add_class.z.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_add_class.z, i32* %function_default_arguments_1_add_class.z.addr, align 4 -%var6 = getelementptr inbounds %class.function_default_arguments_1_argClass* %function_default_arguments_1_add_class.t, i32 0, i32 0 -%var7 = load i32* %function_default_arguments_1_add_class.x.addr, align 4 -%var8 = load i32* %var6, align 4 -%var9 = add nsw i32 %var7, %var8 -ret i32 %var9 -unreachable -} -define weak i32 @function_default_arguments_1_last_present_Int(i32 %function_default_arguments_1_last_present.x) #0 -{ -%function_default_arguments_1_last_present.x.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_last_present.x, i32* %function_default_arguments_1_last_present.x.addr, align 4 -%var10 = load i32* %function_default_arguments_1_last_present.x.addr, align 4 -%var11 = call i32 @function_default_arguments_1_last_missed_fun_Int_Int(i32 %var10, i32 29) -%var12 = alloca i32, align 4 -store i32 %var11, i32* %var12, align 4 -%var13 = load i32* %var12, align 4 -ret i32 %var13 -unreachable -} -define weak i32 @function_default_arguments_1_last_missed_Int(i32 %function_default_arguments_1_last_missed.x) #0 -{ -%function_default_arguments_1_last_missed.x.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_last_missed.x, i32* %function_default_arguments_1_last_missed.x.addr, align 4 -%var14 = load i32* %function_default_arguments_1_last_missed.x.addr, align 4 -%var15 = call i32 @function_default_arguments_1_last_missed_fun_Int_Int(i32 %var14, i32 954) -%var16 = alloca i32, align 4 -store i32 %var15, i32* %var16, align 4 -%var17 = load i32* %var16, align 4 -ret i32 %var17 -unreachable -} -define weak i32 @function_default_arguments_1_position_fun_Int_Int_Int(i32 %function_default_arguments_1_position_fun.first, i32 %function_default_arguments_1_position_fun.second, i32 %function_default_arguments_1_position_fun.third) #0 -{ -%function_default_arguments_1_position_fun.first.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_position_fun.first, i32* %function_default_arguments_1_position_fun.first.addr, align 4 -%function_default_arguments_1_position_fun.second.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_position_fun.second, i32* %function_default_arguments_1_position_fun.second.addr, align 4 -%function_default_arguments_1_position_fun.third.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_position_fun.third, i32* %function_default_arguments_1_position_fun.third.addr, align 4 -%var18 = load i32* %function_default_arguments_1_position_fun.second.addr, align 4 -%var19 = mul nsw i32 2, %var18 -%var20 = load i32* %function_default_arguments_1_position_fun.first.addr, align 4 -%var21 = add nsw i32 %var20, %var19 -%var22 = load i32* %function_default_arguments_1_position_fun.third.addr, align 4 -%var23 = mul nsw i32 3, %var22 -%var24 = add nsw i32 %var21, %var23 -ret i32 %var24 -unreachable -} -define weak i32 @function_default_arguments_1_position_all_right_order_Int(i32 %function_default_arguments_1_position_all_right_order.x) #0 -{ -%function_default_arguments_1_position_all_right_order.x.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_position_all_right_order.x, i32* %function_default_arguments_1_position_all_right_order.x.addr, align 4 -%var25 = load i32* %function_default_arguments_1_position_all_right_order.x.addr, align 4 -%var26 = call i32 @function_default_arguments_1_position_fun_Int_Int_Int(i32 11, i32 32, i32 %var25) -%var27 = alloca i32, align 4 -store i32 %var26, i32* %var27, align 4 -%var28 = load i32* %var27, align 4 -ret i32 %var28 -unreachable -} -define weak i32 @function_default_arguments_1_add_class_arg() #0 -{ -%var30 = call i8* @malloc_heap(i32 4) -%var29 = bitcast i8* %var30 to %class.function_default_arguments_1_argClass* -%var31 = alloca %class.function_default_arguments_1_argClass*, align 8 -store %class.function_default_arguments_1_argClass* %var29, %class.function_default_arguments_1_argClass** %var31, align 8 -call void @function_default_arguments_1_argClass_Int(%class.function_default_arguments_1_argClass* %var29, i32 124) -%var32 = load %class.function_default_arguments_1_argClass** %var31, align 8 -%var33 = call i32 @function_default_arguments_1_add_class_Int_Ref_function_default_arguments_1_argClass_Int_Int(i32 190, %class.function_default_arguments_1_argClass* %var32, i32 53, i32 777) -%var34 = alloca i32, align 4 -store i32 %var33, i32* %var34, align 4 -%var35 = load i32* %var34, align 4 -ret i32 %var35 -unreachable -} -define weak i32 @function_default_arguments_1_last_missed_fun_Int_Int(i32 %function_default_arguments_1_last_missed_fun.z, i32 %function_default_arguments_1_last_missed_fun.u) #0 -{ -%function_default_arguments_1_last_missed_fun.z.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_last_missed_fun.z, i32* %function_default_arguments_1_last_missed_fun.z.addr, align 4 -%function_default_arguments_1_last_missed_fun.u.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_last_missed_fun.u, i32* %function_default_arguments_1_last_missed_fun.u.addr, align 4 -%var36 = load i32* %function_default_arguments_1_last_missed_fun.z.addr, align 4 -%var37 = load i32* %function_default_arguments_1_last_missed_fun.u.addr, align 4 -%var38 = add nsw i32 %var36, %var37 -ret i32 %var38 -unreachable -} -define weak i32 @function_default_arguments_1_position_all_default_Int(i32 %function_default_arguments_1_position_all_default.x) #0 -{ -%function_default_arguments_1_position_all_default.x.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_position_all_default.x, i32* %function_default_arguments_1_position_all_default.x.addr, align 4 -%var39 = load i32* %function_default_arguments_1_position_all_default.x.addr, align 4 -%var40 = call i32 @function_default_arguments_1_position_fun_Int_Int_Int(i32 %var39, i32 324, i32 2531) -%var41 = alloca i32, align 4 -store i32 %var40, i32* %var41, align 4 -%var42 = load i32* %var41, align 4 -ret i32 %var42 -unreachable -} -define weak i32 @function_default_arguments_1_all_position() #0 -{ -%var43 = call i32 @function_default_arguments_1_all_position_fun_Int_Int_Int(i32 31, i32 32, i32 33) -%var44 = alloca i32, align 4 -store i32 %var43, i32* %var44, align 4 -%var45 = load i32* %var44, align 4 -ret i32 %var45 -unreachable -} -define weak i32 @function_default_arguments_1_add_Int_Ref_function_default_arguments_1_argClass_Int_Int(i32 %function_default_arguments_1_add.x, %class.function_default_arguments_1_argClass* %function_default_arguments_1_add.t, i32 %function_default_arguments_1_add.y, i32 %function_default_arguments_1_add.z) #0 -{ -%function_default_arguments_1_add.x.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_add.x, i32* %function_default_arguments_1_add.x.addr, align 4 -%function_default_arguments_1_add.y.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_add.y, i32* %function_default_arguments_1_add.y.addr, align 4 -%function_default_arguments_1_add.z.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_add.z, i32* %function_default_arguments_1_add.z.addr, align 4 -%var46 = load i32* %function_default_arguments_1_add.x.addr, align 4 -%var47 = load i32* %function_default_arguments_1_add.y.addr, align 4 -%var48 = add nsw i32 %var46, %var47 -ret i32 %var48 -unreachable -} -define weak i32 @function_default_arguments_1_all_position_fun_Int_Int_Int(i32 %function_default_arguments_1_all_position_fun.first, i32 %function_default_arguments_1_all_position_fun.second, i32 %function_default_arguments_1_all_position_fun.third) #0 -{ -%function_default_arguments_1_all_position_fun.first.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_all_position_fun.first, i32* %function_default_arguments_1_all_position_fun.first.addr, align 4 -%function_default_arguments_1_all_position_fun.second.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_all_position_fun.second, i32* %function_default_arguments_1_all_position_fun.second.addr, align 4 -%function_default_arguments_1_all_position_fun.third.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_all_position_fun.third, i32* %function_default_arguments_1_all_position_fun.third.addr, align 4 -%var49 = load i32* %function_default_arguments_1_all_position_fun.second.addr, align 4 -%var50 = mul nsw i32 2, %var49 -%var51 = load i32* %function_default_arguments_1_all_position_fun.first.addr, align 4 -%var52 = add nsw i32 %var51, %var50 -%var53 = load i32* %function_default_arguments_1_all_position_fun.third.addr, align 4 -%var54 = mul nsw i32 3, %var53 -%var55 = add nsw i32 %var52, %var54 -ret i32 %var55 -unreachable -} -define weak i32 @function_default_arguments_1_position_third_only_Int(i32 %function_default_arguments_1_position_third_only.x) #0 -{ -%function_default_arguments_1_position_third_only.x.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_position_third_only.x, i32* %function_default_arguments_1_position_third_only.x.addr, align 4 -%var56 = load i32* %function_default_arguments_1_position_third_only.x.addr, align 4 -%var57 = call i32 @function_default_arguments_1_position_fun_Int_Int_Int(i32 11, i32 324, i32 %var56) -%var58 = alloca i32, align 4 -store i32 %var57, i32* %var58, align 4 -%var59 = load i32* %var58, align 4 -ret i32 %var59 -unreachable -} -define weak i32 @function_default_arguments_1_mixed() #0 -{ -%var61 = call i8* @malloc_heap(i32 4) -%var60 = bitcast i8* %var61 to %class.function_default_arguments_1_argClass* -%var62 = alloca %class.function_default_arguments_1_argClass*, align 8 -store %class.function_default_arguments_1_argClass* %var60, %class.function_default_arguments_1_argClass** %var62, align 8 -call void @function_default_arguments_1_argClass_Int(%class.function_default_arguments_1_argClass* %var60, i32 29) -%var64 = call i8* @malloc_heap(i32 4) -%var63 = bitcast i8* %var64 to %class.function_default_arguments_1_argClass* -%var65 = alloca %class.function_default_arguments_1_argClass*, align 8 -store %class.function_default_arguments_1_argClass* %var63, %class.function_default_arguments_1_argClass** %var65, align 8 -call void @function_default_arguments_1_argClass_Int(%class.function_default_arguments_1_argClass* %var63, i32 29) -%var66 = load %class.function_default_arguments_1_argClass** %var65, align 8 -%var67 = call i32 @function_default_arguments_1_add_Int_Ref_function_default_arguments_1_argClass_Int_Int(i32 23, %class.function_default_arguments_1_argClass* %var66, i32 53, i32 8) -%var68 = alloca i32, align 4 -store i32 %var67, i32* %var68, align 4 -%var69 = load i32* %var68, align 4 -ret i32 %var69 -unreachable -} -define weak i32 @function_default_arguments_1_position_all_reverse_Int(i32 %function_default_arguments_1_position_all_reverse.x) #0 -{ -%function_default_arguments_1_position_all_reverse.x.addr = alloca i32, align 4 -store i32 %function_default_arguments_1_position_all_reverse.x, i32* %function_default_arguments_1_position_all_reverse.x.addr, align 4 -%var70 = load i32* %function_default_arguments_1_position_all_reverse.x.addr, align 4 -%var71 = call i32 @function_default_arguments_1_position_fun_Int_Int_Int(i32 11, i32 32, i32 %var70) -%var72 = alloca i32, align 4 -store i32 %var71, i32* %var72, align 4 -%var73 = load i32* %var72, align 4 -ret i32 %var73 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.txt b/experiments/translator-bc/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.txt deleted file mode 100644 index 11457898ed6..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.txt +++ /dev/null @@ -1,9 +0,0 @@ -function_default_arguments_1_mixed() == 76 -function_default_arguments_1_last_missed_Int(23) == 977 -function_default_arguments_1_last_present_Int(25) == 54 -function_default_arguments_1_position_third_only_Int(19) == 716 -function_default_arguments_1_position_all_reverse_Int(17) == 126 -function_default_arguments_1_position_all_right_order_Int(17) == 126 -function_default_arguments_1_position_all_default_Int(27) ==8268 -function_default_arguments_1_all_position() == 194 -function_default_arguments_1_add_class_arg() == 314 diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_eq/function_eq.kt b/experiments/translator-bc/src/test/kotlin/tests/function_eq/function_eq.kt deleted file mode 100644 index c4a81cd9a52..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_eq/function_eq.kt +++ /dev/null @@ -1,7 +0,0 @@ -class function_eq_MyClass(val i: Int) - -fun function_eq_inc(i: Int) = i + 1 -fun function_eq_dinc(i: Int) = function_eq_inc(function_eq_inc(i)) -fun function_eq_sum(i: Int, j: Int) = i + j -fun function_eq_gen() = function_eq_MyClass(1) - diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_eq/function_eq.kt.out b/experiments/translator-bc/src/test/kotlin/tests/function_eq/function_eq.kt.out deleted file mode 100644 index ca13f6b431c..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_eq/function_eq.kt.out +++ /dev/null @@ -1,75 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.function_eq_MyClass = type { i32 } -define weak void @function_eq_MyClass_Int(%class.function_eq_MyClass* %classvariable.this, i32 %function_eq_MyClass.i) #0 -{ -%classvariable.this.addr = alloca %class.function_eq_MyClass, align 8 -%function_eq_MyClass.i.addr = alloca i32, align 4 -store i32 %function_eq_MyClass.i, i32* %function_eq_MyClass.i.addr, align 4 -%var2 = load i32* %function_eq_MyClass.i.addr, align 4 -%var3 = getelementptr inbounds %class.function_eq_MyClass* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.function_eq_MyClass* %classvariable.this to i8* -%var5 = bitcast %class.function_eq_MyClass* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @function_eq_dinc_Int(i32 %function_eq_dinc.i) #0 -{ -%function_eq_dinc.i.addr = alloca i32, align 4 -store i32 %function_eq_dinc.i, i32* %function_eq_dinc.i.addr, align 4 -%var6 = load i32* %function_eq_dinc.i.addr, align 4 -%var7 = call i32 @function_eq_inc_Int(i32 %var6) -%var8 = alloca i32, align 4 -store i32 %var7, i32* %var8, align 4 -%var9 = load i32* %function_eq_dinc.i.addr, align 4 -%var10 = call i32 @function_eq_inc_Int(i32 %var9) -%var11 = alloca i32, align 4 -store i32 %var10, i32* %var11, align 4 -%var12 = load i32* %var11, align 4 -%var13 = call i32 @function_eq_inc_Int(i32 %var12) -%var14 = alloca i32, align 4 -store i32 %var13, i32* %var14, align 4 -%var15 = load i32* %var14, align 4 -ret i32 %var15 -unreachable -} -define weak void @function_eq_gen(%class.function_eq_MyClass** %instance) #0 -{ -%var17 = call i8* @malloc_heap(i32 4) -%var16 = bitcast i8* %var17 to %class.function_eq_MyClass* -%var18 = alloca %class.function_eq_MyClass*, align 8 -store %class.function_eq_MyClass* %var16, %class.function_eq_MyClass** %var18, align 8 -call void @function_eq_MyClass_Int(%class.function_eq_MyClass* %var16, i32 1) -%var19 = load %class.function_eq_MyClass** %var18, align 8 -store %class.function_eq_MyClass* %var19, %class.function_eq_MyClass** %instance, align 8 -ret void -unreachable -} -define weak i32 @function_eq_sum_Int_Int(i32 %function_eq_sum.i, i32 %function_eq_sum.j) #0 -{ -%function_eq_sum.i.addr = alloca i32, align 4 -store i32 %function_eq_sum.i, i32* %function_eq_sum.i.addr, align 4 -%function_eq_sum.j.addr = alloca i32, align 4 -store i32 %function_eq_sum.j, i32* %function_eq_sum.j.addr, align 4 -%var20 = load i32* %function_eq_sum.i.addr, align 4 -%var21 = load i32* %function_eq_sum.j.addr, align 4 -%var22 = add nsw i32 %var20, %var21 -ret i32 %var22 -unreachable -} -define weak i32 @function_eq_inc_Int(i32 %function_eq_inc.i) #0 -{ -%function_eq_inc.i.addr = alloca i32, align 4 -store i32 %function_eq_inc.i, i32* %function_eq_inc.i.addr, align 4 -%var23 = load i32* %function_eq_inc.i.addr, align 4 -%var24 = add nsw i32 %var23, 1 -ret i32 %var24 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_eq/function_eq.txt b/experiments/translator-bc/src/test/kotlin/tests/function_eq/function_eq.txt deleted file mode 100644 index d82c425eb18..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_eq/function_eq.txt +++ /dev/null @@ -1,3 +0,0 @@ -function_eq_inc_Int(1) == 2 -function_eq_dinc_Int(1) == 3 -function_eq_sum_Int_Int(1, 1) == 2 \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_1/function_extensions_1.kt b/experiments/translator-bc/src/test/kotlin/tests/function_extensions_1/function_extensions_1.kt deleted file mode 100644 index 8629bc20b33..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_1/function_extensions_1.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun Int.compareTo(x: Int) : Int{ - return this + x + 5 -} - -fun function_extensions_1(x : Int): Int { - return x.compareTo(1) + 39.compareTo(123) -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_1/function_extensions_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/function_extensions_1/function_extensions_1.kt.out deleted file mode 100644 index e7065fe3255..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_1/function_extensions_1.kt.out +++ /dev/null @@ -1,34 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @Int.compareTo_Int(i32 %type, i32 %compareTo.x) #0 -{ -%compareTo.x.addr = alloca i32, align 4 -store i32 %compareTo.x, i32* %compareTo.x.addr, align 4 -%var2 = load i32* %compareTo.x.addr, align 4 -%var3 = add nsw i32 %type, %var2 -%var4 = add nsw i32 %var3, 5 -ret i32 %var4 -unreachable -} -define weak i32 @function_extensions_1_Int(i32 %function_extensions_1.x) #0 -{ -%function_extensions_1.x.addr = alloca i32, align 4 -store i32 %function_extensions_1.x, i32* %function_extensions_1.x.addr, align 4 -%var5 = load i32* %function_extensions_1.x.addr, align 4 -%var6 = call i32 @Int.compareTo_Int(i32 %var5, i32 1) -%var7 = alloca i32, align 4 -store i32 %var6, i32* %var7, align 4 -%var8 = call i32 @Int.compareTo_Int(i32 39, i32 123) -%var9 = alloca i32, align 4 -store i32 %var8, i32* %var9, align 4 -%var10 = load i32* %var7, align 4 -%var11 = load i32* %var9, align 4 -%var12 = add nsw i32 %var10, %var11 -ret i32 %var12 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_1/function_extensions_1.txt b/experiments/translator-bc/src/test/kotlin/tests/function_extensions_1/function_extensions_1.txt deleted file mode 100644 index 02d21684ce2..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_1/function_extensions_1.txt +++ /dev/null @@ -1 +0,0 @@ -function_extensions_1_Int(118) == 291 diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt b/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt deleted file mode 100644 index 1e752421e68..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt +++ /dev/null @@ -1,31 +0,0 @@ -class function_extensions_double_argument_1_slave(val buffer: IntArray) { - var pos = 0 - - fun read(): Int { - pos += 1 - val pe = pos - 1 - return buffer[pe] - } - - fun isAtEnd(): Boolean { - return pos >= buffer.size - } -} - -fun function_extensions_double_argument_1_master(inputStream: function_extensions_double_argument_1_slave): Int { - return inputStream.read().toInt() -} - -fun function_extensions_double_argument_1(): Int { - val array = IntArray(7) - array[0] = 129 - array[1] = 20 - array[2] = 333 - array[3] = 444 - array[4] = 555 - array[5] = 666 - array[6] = 777 - - val kis = function_extensions_double_argument_1_slave(array) - return function_extensions_double_argument_1_master(kis) -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt.err deleted file mode 100644 index c6f351c43ec..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt.err +++ /dev/null @@ -1,22 +0,0 @@ -Exception in thread "main" java.rmi.UnexpectedException: %class.kotlin.IntArray - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateArrayAccessExpression(BlockCodegen.kt:461) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateReferenceExpression(BlockCodegen.kt:491) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateReferenceExpression$default(BlockCodegen.kt:488) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExpression(BlockCodegen.kt:80) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateReturnInstruction(BlockCodegen.kt:1089) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateLeafPsiElement(BlockCodegen.kt:858) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluatePsiElement(BlockCodegen.kt:849) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExpression(BlockCodegen.kt:88) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:201) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:192) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock(BlockCodegen.kt:45) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock$default(BlockCodegen.kt:42) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate(FunctionCodegen.kt:81) - at org.kotlinnative.translator.codegens.StructCodegen.generate(StructCodegen.kt:74) - at org.kotlinnative.translator.codegens.ClassCodegen.generate(ClassCodegen.kt:67) - at org.kotlinnative.translator.ProjectTranslator.generateProjectBody(ProjectTranslator.kt:66) - at org.kotlinnative.translator.ProjectTranslator.generateCode(ProjectTranslator.kt:20) - at MainKt.main(main.kt:22) diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.txt b/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.txt deleted file mode 100644 index 9707169f1ff..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.txt +++ /dev/null @@ -1 +0,0 @@ -function_extensions_double_argument_1() == 129 diff --git a/experiments/translator-bc/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.kt b/experiments/translator-bc/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.kt deleted file mode 100644 index be0cf8f2055..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.kt +++ /dev/null @@ -1,22 +0,0 @@ -class get_set_operators_1_class { - var cap = 9 - - operator fun get(x: Int): Int { - return x + 8 - } - - operator fun set(x: Int, y: Int): Unit { - cap = x + y - } -} - -fun get_set_operators_1_get(arg: Int): Int { - val b = get_set_operators_1_class() - return b[arg] -} - -fun get_set_operators_1_set(ind: Int, arg: Int): Int { - val b = get_set_operators_1_class() - b[ind] = arg - return b.cap -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.kt.out deleted file mode 100644 index 511b5edce1f..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.kt.out +++ /dev/null @@ -1,91 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.get_set_operators_1_class = type { i32 } -define weak void @get_set_operators_1_class(%class.get_set_operators_1_class* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.get_set_operators_1_class, align 8 -%var2 = getelementptr inbounds %class.get_set_operators_1_class* %classvariable.this.addr, i32 0, i32 0 -%var3 = load i32* %var2, align 4 -store i32 9, i32* %var2, align 4 -%var4 = bitcast %class.get_set_operators_1_class* %classvariable.this to i8* -%var5 = bitcast %class.get_set_operators_1_class* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @get_set_operators_1_class.get_Int(%class.get_set_operators_1_class* %classvariable.this, i32 %get_set_operators_1_class.get.x) #0 -{ -%get_set_operators_1_class.get.x.addr = alloca i32, align 4 -store i32 %get_set_operators_1_class.get.x, i32* %get_set_operators_1_class.get.x.addr, align 4 -%var6 = load i32* %get_set_operators_1_class.get.x.addr, align 4 -%var7 = add nsw i32 %var6, 8 -ret i32 %var7 -unreachable -} -define weak void @get_set_operators_1_class.set_Int_Int(%class.get_set_operators_1_class* %classvariable.this, i32 %get_set_operators_1_class.set.x, i32 %get_set_operators_1_class.set.y) #0 -{ -%get_set_operators_1_class.set.x.addr = alloca i32, align 4 -store i32 %get_set_operators_1_class.set.x, i32* %get_set_operators_1_class.set.x.addr, align 4 -%get_set_operators_1_class.set.y.addr = alloca i32, align 4 -store i32 %get_set_operators_1_class.set.y, i32* %get_set_operators_1_class.set.y.addr, align 4 -%var8 = getelementptr inbounds %class.get_set_operators_1_class* %classvariable.this, i32 0, i32 0 -%var9 = load i32* %get_set_operators_1_class.set.x.addr, align 4 -%var10 = load i32* %get_set_operators_1_class.set.y.addr, align 4 -%var11 = add nsw i32 %var9, %var10 -%var12 = load i32* %var8, align 4 -store i32 %var11, i32* %var8, align 4 -ret void -unreachable -} -define weak i32 @get_set_operators_1_get_Int(i32 %get_set_operators_1_get.arg) #0 -{ -%get_set_operators_1_get.arg.addr = alloca i32, align 4 -store i32 %get_set_operators_1_get.arg, i32* %get_set_operators_1_get.arg.addr, align 4 -%var14 = call i8* @malloc_heap(i32 4) -%var13 = bitcast i8* %var14 to %class.get_set_operators_1_class* -%var15 = alloca %class.get_set_operators_1_class*, align 8 -store %class.get_set_operators_1_class* %var13, %class.get_set_operators_1_class** %var15, align 8 -call void @get_set_operators_1_class(%class.get_set_operators_1_class* %var13) -%managed.unique.0.get_set_operators_1_get.b = alloca %class.get_set_operators_1_class*, align 8 -%var16 = load %class.get_set_operators_1_class** %managed.unique.0.get_set_operators_1_get.b, align 8 -%var17 = load %class.get_set_operators_1_class** %var15, align 8 -store %class.get_set_operators_1_class* %var17, %class.get_set_operators_1_class** %managed.unique.0.get_set_operators_1_get.b, align 8 -%var18 = load %class.get_set_operators_1_class** %managed.unique.0.get_set_operators_1_get.b, align 8 -%var19 = load i32* %get_set_operators_1_get.arg.addr, align 4 -%var20 = call i32 @get_set_operators_1_class.get_Int(%class.get_set_operators_1_class* %var18, i32 %var19) -%var21 = alloca i32, align 4 -store i32 %var20, i32* %var21, align 4 -%var22 = load i32* %var21, align 4 -ret i32 %var22 -unreachable -} -define weak i32 @get_set_operators_1_set_Int_Int(i32 %get_set_operators_1_set.ind, i32 %get_set_operators_1_set.arg) #0 -{ -%get_set_operators_1_set.ind.addr = alloca i32, align 4 -store i32 %get_set_operators_1_set.ind, i32* %get_set_operators_1_set.ind.addr, align 4 -%get_set_operators_1_set.arg.addr = alloca i32, align 4 -store i32 %get_set_operators_1_set.arg, i32* %get_set_operators_1_set.arg.addr, align 4 -%var24 = call i8* @malloc_heap(i32 4) -%var23 = bitcast i8* %var24 to %class.get_set_operators_1_class* -%var25 = alloca %class.get_set_operators_1_class*, align 8 -store %class.get_set_operators_1_class* %var23, %class.get_set_operators_1_class** %var25, align 8 -call void @get_set_operators_1_class(%class.get_set_operators_1_class* %var23) -%managed.unique.1.get_set_operators_1_set.b = alloca %class.get_set_operators_1_class*, align 8 -%var26 = load %class.get_set_operators_1_class** %managed.unique.1.get_set_operators_1_set.b, align 8 -%var27 = load %class.get_set_operators_1_class** %var25, align 8 -store %class.get_set_operators_1_class* %var27, %class.get_set_operators_1_class** %managed.unique.1.get_set_operators_1_set.b, align 8 -%var28 = load %class.get_set_operators_1_class** %managed.unique.1.get_set_operators_1_set.b, align 8 -%var29 = load i32* %get_set_operators_1_set.ind.addr, align 4 -%var30 = load i32* %get_set_operators_1_set.arg.addr, align 4 -call void @get_set_operators_1_class.set_Int_Int(%class.get_set_operators_1_class* %var28, i32 %var29, i32 %var30) -%var31 = load %class.get_set_operators_1_class** %managed.unique.1.get_set_operators_1_set.b, align 8 -%var32 = getelementptr inbounds %class.get_set_operators_1_class* %var31, i32 0, i32 0 -%var33 = load i32* %var32, align 4 -ret i32 %var33 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.txt b/experiments/translator-bc/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.txt deleted file mode 100644 index 3d5585514ca..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -get_set_operators_1_get_Int(210) == 218 -get_set_operators_1_set_Int_Int(8, 903) == 911 diff --git a/experiments/translator-bc/src/test/kotlin/tests/global_vars_1/global_vars_1.kt b/experiments/translator-bc/src/test/kotlin/tests/global_vars_1/global_vars_1.kt deleted file mode 100644 index e3b461b4d81..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/global_vars_1/global_vars_1.kt +++ /dev/null @@ -1,11 +0,0 @@ - -val MY_FIRST_CONSTANT: Int = 3000 -val MY_SECOND_CONSTANT: Int = 4000 - -fun global_test1(): Int { - return MY_FIRST_CONSTANT -} - -fun global_test2(): Int { - return MY_SECOND_CONSTANT + 1 -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/global_vars_1/global_vars_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/global_vars_1/global_vars_1.kt.out deleted file mode 100644 index 3bde8e4ea0c..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/global_vars_1/global_vars_1.kt.out +++ /dev/null @@ -1,22 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -@MY_FIRST_CONSTANT = global i32 3000, align 4 -@MY_SECOND_CONSTANT = global i32 4000, align 4 -define weak i32 @global_test1() #0 -{ -%var2 = load i32* @MY_FIRST_CONSTANT, align 4 -ret i32 %var2 -unreachable -} -define weak i32 @global_test2() #0 -{ -%var3 = load i32* @MY_SECOND_CONSTANT, align 4 -%var4 = add nsw i32 %var3, 1 -ret i32 %var4 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/global_vars_1/global_vars_1.txt b/experiments/translator-bc/src/test/kotlin/tests/global_vars_1/global_vars_1.txt deleted file mode 100644 index 49891d465b9..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/global_vars_1/global_vars_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -global_test1() == 3000 -global_test2() == 4001 diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_1/if_1.kt b/experiments/translator-bc/src/test/kotlin/tests/if_1/if_1.kt deleted file mode 100644 index 59a1cace462..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_1/if_1.kt +++ /dev/null @@ -1,30 +0,0 @@ -fun if_test_1(x: Int): Int { - var a = 0 - if (x > 5) { - a = 10 - } else { - - } - return a -} - -class MyClass_if_1() - -fun if_test_null(x: Int): Int { - val y: MyClass_if_1? = null - if (y == null) { - return 1 - } else { - return 0 - } -} - -fun if_test_null_2(x: Int): Int { - val y: MyClass_if_1? = MyClass_if_1() - - if (y == null) { - return 1 - } else { - return 0 - } -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_1/if_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/if_1/if_1.kt.out deleted file mode 100644 index 7dadbe78e9b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_1/if_1.kt.out +++ /dev/null @@ -1,84 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.MyClass_if_1 = type { } -define weak void @MyClass_if_1(%class.MyClass_if_1* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.MyClass_if_1, align 8 -%var2 = bitcast %class.MyClass_if_1* %classvariable.this to i8* -%var3 = bitcast %class.MyClass_if_1* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var2, i8* %var3, i64 0, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @if_test_null_Int(i32 %if_test_null.x) #0 -{ -%if_test_null.x.addr = alloca i32, align 4 -store i32 %if_test_null.x, i32* %if_test_null.x.addr, align 4 -%managed.unique.0.if_test_null.y = alloca %class.MyClass_if_1*, align 8 -%var4 = load %class.MyClass_if_1** %managed.unique.0.if_test_null.y, align 8 -store %class.MyClass_if_1* null, %class.MyClass_if_1** %managed.unique.0.if_test_null.y, align 8 -%var5 = load %class.MyClass_if_1** %managed.unique.0.if_test_null.y, align 8 -%var6 = load %class.MyClass_if_1** %managed.unique.0.if_test_null.y, align 8 -%var7 = icmp eq %class.MyClass_if_1* %var6, null -br i1 %var7, label %label.if.1, label %label.if.2 -label.if.1: -ret i32 1 -br label %label.if.3 -label.if.2: -ret i32 0 -br label %label.if.3 -label.if.3: -unreachable -} -define weak i32 @if_test_1_Int(i32 %if_test_1.x) #0 -{ -%if_test_1.x.addr = alloca i32, align 4 -store i32 %if_test_1.x, i32* %if_test_1.x.addr, align 4 -%managed.unique.1.if_test_1.a = alloca i32, align 4 -%var8 = load i32* %managed.unique.1.if_test_1.a, align 4 -store i32 0, i32* %managed.unique.1.if_test_1.a, align 4 -%var9 = load i32* %if_test_1.x.addr, align 4 -%var10 = icmp sgt i32 %var9, 5 -br i1 %var10, label %label.if.4, label %label.if.5 -label.if.4: -%var11 = load i32* %managed.unique.1.if_test_1.a, align 4 -store i32 10, i32* %managed.unique.1.if_test_1.a, align 4 -br label %label.if.6 -label.if.5: -br label %label.if.6 -label.if.6: -%var12 = load i32* %managed.unique.1.if_test_1.a, align 4 -ret i32 %var12 -unreachable -} -define weak i32 @if_test_null_2_Int(i32 %if_test_null_2.x) #0 -{ -%if_test_null_2.x.addr = alloca i32, align 4 -store i32 %if_test_null_2.x, i32* %if_test_null_2.x.addr, align 4 -%var14 = call i8* @malloc_heap(i32 0) -%var13 = bitcast i8* %var14 to %class.MyClass_if_1* -%var15 = alloca %class.MyClass_if_1*, align 8 -store %class.MyClass_if_1* %var13, %class.MyClass_if_1** %var15, align 8 -call void @MyClass_if_1(%class.MyClass_if_1* %var13) -%managed.unique.2.if_test_null_2.y = alloca %class.MyClass_if_1*, align 8 -%var16 = load %class.MyClass_if_1** %managed.unique.2.if_test_null_2.y, align 8 -%var17 = load %class.MyClass_if_1** %var15, align 8 -store %class.MyClass_if_1* %var17, %class.MyClass_if_1** %managed.unique.2.if_test_null_2.y, align 8 -%var18 = load %class.MyClass_if_1** %managed.unique.2.if_test_null_2.y, align 8 -%var19 = load %class.MyClass_if_1** %managed.unique.2.if_test_null_2.y, align 8 -%var20 = icmp eq %class.MyClass_if_1* %var19, null -br i1 %var20, label %label.if.7, label %label.if.8 -label.if.7: -ret i32 1 -br label %label.if.9 -label.if.8: -ret i32 0 -br label %label.if.9 -label.if.9: -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_1/if_1.txt b/experiments/translator-bc/src/test/kotlin/tests/if_1/if_1.txt deleted file mode 100644 index 04b802d5ac2..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_1/if_1.txt +++ /dev/null @@ -1,4 +0,0 @@ -if_test_1_Int(11) == 10 -if_test_1_Int(0) == 0 -if_test_null_Int(0) == 1 -if_test_null_2_Int(0) == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_2/if_2.kt b/experiments/translator-bc/src/test/kotlin/tests/if_2/if_2.kt deleted file mode 100644 index a8285242c9e..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_2/if_2.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun if_without_else_2(x: Int): Int { - var res = 1256 - if (x > 10) { - res = res + 64 - } - return res -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_2/if_2.kt.out b/experiments/translator-bc/src/test/kotlin/tests/if_2/if_2.kt.out deleted file mode 100644 index 6b7836787b1..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_2/if_2.kt.out +++ /dev/null @@ -1,28 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @if_without_else_2_Int(i32 %if_without_else_2.x) #0 -{ -%if_without_else_2.x.addr = alloca i32, align 4 -store i32 %if_without_else_2.x, i32* %if_without_else_2.x.addr, align 4 -%managed.unique.0.if_without_else_2.res = alloca i32, align 4 -%var2 = load i32* %managed.unique.0.if_without_else_2.res, align 4 -store i32 1256, i32* %managed.unique.0.if_without_else_2.res, align 4 -%var3 = load i32* %if_without_else_2.x.addr, align 4 -%var4 = icmp sgt i32 %var3, 10 -br i1 %var4, label %label.if.1, label %label.if.3 -label.if.1: -%var5 = load i32* %managed.unique.0.if_without_else_2.res, align 4 -%var6 = add nsw i32 %var5, 64 -%var7 = load i32* %managed.unique.0.if_without_else_2.res, align 4 -store i32 %var6, i32* %managed.unique.0.if_without_else_2.res, align 4 -br label %label.if.3 -label.if.3: -%var8 = load i32* %managed.unique.0.if_without_else_2.res, align 4 -ret i32 %var8 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_2/if_2.txt b/experiments/translator-bc/src/test/kotlin/tests/if_2/if_2.txt deleted file mode 100644 index 8032016fa28..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_2/if_2.txt +++ /dev/null @@ -1,2 +0,0 @@ -if_without_else_2_Int(5) == 1256 -if_without_else_2_Int(55) == 1320 diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.kt b/experiments/translator-bc/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.kt deleted file mode 100644 index 3d0dc982a00..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.kt +++ /dev/null @@ -1,3 +0,0 @@ -fun if_boolean_argument_1(value: Boolean): Int { - return if (value) 11 else 411 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.kt.out deleted file mode 100644 index 978fe79ff3b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.kt.out +++ /dev/null @@ -1,25 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @if_boolean_argument_1_Boolean(i1 %if_boolean_argument_1.value) #0 -{ -%if_boolean_argument_1.value.addr = alloca i1, align 4 -store i1 %if_boolean_argument_1.value, i1* %if_boolean_argument_1.value.addr, align 4 -%var2 = load i1* %if_boolean_argument_1.value.addr, align 4 -%var3 = alloca i32, align 4 -br i1 %var2, label %label.if_then.1, label %label.if_else.2 -label.if_then.1: -store i32 11, i32* %var3, align 4 -br label %label.if_end.3 -label.if_else.2: -store i32 411, i32* %var3, align 4 -br label %label.if_end.3 -label.if_end.3: -%var4 = load i32* %var3, align 4 -ret i32 %var4 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.txt b/experiments/translator-bc/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.txt deleted file mode 100644 index ac65c173312..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -if_boolean_argument_1_Boolean(1) == 11 -if_boolean_argument_1_Boolean(0) == 411 diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_expression_1/if_expression_1.kt b/experiments/translator-bc/src/test/kotlin/tests/if_expression_1/if_expression_1.kt deleted file mode 100644 index f54b5975929..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_expression_1/if_expression_1.kt +++ /dev/null @@ -1,9 +0,0 @@ -fun if_expression_1(x: Int): Int{ - return if (x > 55) 2323 else 678934 -} - -fun if_expression_1_variable(x: Int): Int{ - val first = 5 - val second = 7 - return if (x > 55) first else second -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_expression_1/if_expression_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/if_expression_1/if_expression_1.kt.out deleted file mode 100644 index af0896ca796..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_expression_1/if_expression_1.kt.out +++ /dev/null @@ -1,53 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @if_expression_1_Int(i32 %if_expression_1.x) #0 -{ -%if_expression_1.x.addr = alloca i32, align 4 -store i32 %if_expression_1.x, i32* %if_expression_1.x.addr, align 4 -%var2 = load i32* %if_expression_1.x.addr, align 4 -%var3 = icmp sgt i32 %var2, 55 -%var4 = alloca i32, align 4 -br i1 %var3, label %label.if_then.1, label %label.if_else.2 -label.if_then.1: -store i32 2323, i32* %var4, align 4 -br label %label.if_end.3 -label.if_else.2: -store i32 678934, i32* %var4, align 4 -br label %label.if_end.3 -label.if_end.3: -%var5 = load i32* %var4, align 4 -ret i32 %var5 -unreachable -} -define weak i32 @if_expression_1_variable_Int(i32 %if_expression_1_variable.x) #0 -{ -%if_expression_1_variable.x.addr = alloca i32, align 4 -store i32 %if_expression_1_variable.x, i32* %if_expression_1_variable.x.addr, align 4 -%managed.unique.0.if_expression_1_variable.first = alloca i32, align 4 -%var6 = load i32* %managed.unique.0.if_expression_1_variable.first, align 4 -store i32 5, i32* %managed.unique.0.if_expression_1_variable.first, align 4 -%managed.unique.1.if_expression_1_variable.second = alloca i32, align 4 -%var7 = load i32* %managed.unique.1.if_expression_1_variable.second, align 4 -store i32 7, i32* %managed.unique.1.if_expression_1_variable.second, align 4 -%var8 = load i32* %if_expression_1_variable.x.addr, align 4 -%var9 = icmp sgt i32 %var8, 55 -%var10 = alloca i32, align 4 -br i1 %var9, label %label.if_then.4, label %label.if_else.5 -label.if_then.4: -%var11 = load i32* %managed.unique.0.if_expression_1_variable.first, align 4 -store i32 %var11, i32* %var10, align 4 -br label %label.if_end.6 -label.if_else.5: -%var12 = load i32* %managed.unique.1.if_expression_1_variable.second, align 4 -store i32 %var12, i32* %var10, align 4 -br label %label.if_end.6 -label.if_end.6: -%var13 = load i32* %var10, align 4 -ret i32 %var13 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/if_expression_1/if_expression_1.txt b/experiments/translator-bc/src/test/kotlin/tests/if_expression_1/if_expression_1.txt deleted file mode 100644 index 7de745ef4c7..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/if_expression_1/if_expression_1.txt +++ /dev/null @@ -1,4 +0,0 @@ -if_expression_1_Int(56) == 2323 -if_expression_1_Int(-58) == 678934 -if_expression_1_variable_Int(100) == 5 -if_expression_1_variable_Int(-100) == 7 diff --git a/experiments/translator-bc/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.kt b/experiments/translator-bc/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.kt deleted file mode 100644 index 9e933327051..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.kt +++ /dev/null @@ -1,21 +0,0 @@ -class initialization_in_place_and_this_1_slave_1(var size: Int) - -class initialization_in_place_and_this_1_master(var buffer: initialization_in_place_and_this_1_slave_1) { - var output = initialization_in_place_and_this_1_slave_2(buffer) -} - -class initialization_in_place_and_this_1_slave_2(val buffer: initialization_in_place_and_this_1_slave_1) { - var pos = 897 - var sz: Int - - init { - sz = buffer.size - } -} - - -fun initialization_in_place_and_this_1(): Int { - val slave = initialization_in_place_and_this_1_slave_1(100) - val master = initialization_in_place_and_this_1_master(slave) - return master.output.sz -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.kt.out deleted file mode 100644 index b66de7e63ac..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.kt.out +++ /dev/null @@ -1,96 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.initialization_in_place_and_this_1_slave_1 = type { i32 } -%class.initialization_in_place_and_this_1_slave_2 = type { %class.initialization_in_place_and_this_1_slave_1*, i32, i32 } -%class.initialization_in_place_and_this_1_master = type { %class.initialization_in_place_and_this_1_slave_1*, %class.initialization_in_place_and_this_1_slave_2* } -define weak void @initialization_in_place_and_this_1_slave_1_Int(%class.initialization_in_place_and_this_1_slave_1* %classvariable.this, i32 %initialization_in_place_and_this_1_slave_1.size) #0 -{ -%classvariable.this.addr = alloca %class.initialization_in_place_and_this_1_slave_1, align 8 -%initialization_in_place_and_this_1_slave_1.size.addr = alloca i32, align 4 -store i32 %initialization_in_place_and_this_1_slave_1.size, i32* %initialization_in_place_and_this_1_slave_1.size.addr, align 4 -%var2 = load i32* %initialization_in_place_and_this_1_slave_1.size.addr, align 4 -%var3 = getelementptr inbounds %class.initialization_in_place_and_this_1_slave_1* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.initialization_in_place_and_this_1_slave_1* %classvariable.this to i8* -%var5 = bitcast %class.initialization_in_place_and_this_1_slave_1* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak void @initialization_in_place_and_this_1_slave_2_Ref_initialization_in_place_and_this_1_slave_1(%class.initialization_in_place_and_this_1_slave_2* %classvariable.this, %class.initialization_in_place_and_this_1_slave_1* %initialization_in_place_and_this_1_slave_2.buffer) #0 -{ -%classvariable.this.addr = alloca %class.initialization_in_place_and_this_1_slave_2, align 8 -%var6 = getelementptr inbounds %class.initialization_in_place_and_this_1_slave_2* %classvariable.this.addr, i32 0, i32 0 -store %class.initialization_in_place_and_this_1_slave_1* %initialization_in_place_and_this_1_slave_2.buffer, %class.initialization_in_place_and_this_1_slave_1** %var6, align 8 -%var7 = getelementptr inbounds %class.initialization_in_place_and_this_1_slave_2* %classvariable.this.addr, i32 0, i32 1 -%var8 = load i32* %var7, align 4 -store i32 897, i32* %var7, align 4 -%var9 = bitcast %class.initialization_in_place_and_this_1_slave_2* %classvariable.this to i8* -%var10 = bitcast %class.initialization_in_place_and_this_1_slave_2* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var9, i8* %var10, i64 16, i32 4, i1 false) -%var11 = getelementptr inbounds %class.initialization_in_place_and_this_1_slave_2* %classvariable.this, i32 0, i32 2 -%var12 = getelementptr inbounds %class.initialization_in_place_and_this_1_slave_2* %classvariable.this, i32 0, i32 0 -%var13 = load %class.initialization_in_place_and_this_1_slave_1** %var12, align 8 -%var14 = getelementptr inbounds %class.initialization_in_place_and_this_1_slave_1* %var13, i32 0, i32 0 -%var15 = load i32* %var11, align 4 -%var16 = load i32* %var14, align 4 -store i32 %var16, i32* %var11, align 4 -ret void -unreachable -} -define weak void @initialization_in_place_and_this_1_master_Ref_initialization_in_place_and_this_1_slave_1(%class.initialization_in_place_and_this_1_master* %classvariable.this, %class.initialization_in_place_and_this_1_slave_1* %initialization_in_place_and_this_1_master.buffer) #0 -{ -%classvariable.this.addr = alloca %class.initialization_in_place_and_this_1_master, align 8 -%var17 = getelementptr inbounds %class.initialization_in_place_and_this_1_master* %classvariable.this.addr, i32 0, i32 0 -store %class.initialization_in_place_and_this_1_slave_1* %initialization_in_place_and_this_1_master.buffer, %class.initialization_in_place_and_this_1_slave_1** %var17, align 8 -%var18 = getelementptr inbounds %class.initialization_in_place_and_this_1_master* %classvariable.this.addr, i32 0, i32 1 -%var19 = getelementptr inbounds %class.initialization_in_place_and_this_1_master* %classvariable.this.addr, i32 0, i32 0 -%var20 = load %class.initialization_in_place_and_this_1_slave_1** %var19, align 8 -%var22 = call i8* @malloc_heap(i32 16) -%var21 = bitcast i8* %var22 to %class.initialization_in_place_and_this_1_slave_2* -%var23 = alloca %class.initialization_in_place_and_this_1_slave_2*, align 8 -store %class.initialization_in_place_and_this_1_slave_2* %var21, %class.initialization_in_place_and_this_1_slave_2** %var23, align 8 -call void @initialization_in_place_and_this_1_slave_2_Ref_initialization_in_place_and_this_1_slave_1(%class.initialization_in_place_and_this_1_slave_2* %var21, %class.initialization_in_place_and_this_1_slave_1* %var20) -%var24 = load %class.initialization_in_place_and_this_1_slave_2** %var18, align 8 -%var25 = load %class.initialization_in_place_and_this_1_slave_2** %var23, align 8 -store %class.initialization_in_place_and_this_1_slave_2* %var25, %class.initialization_in_place_and_this_1_slave_2** %var18, align 8 -%var26 = bitcast %class.initialization_in_place_and_this_1_master* %classvariable.this to i8* -%var27 = bitcast %class.initialization_in_place_and_this_1_master* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var26, i8* %var27, i64 16, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @initialization_in_place_and_this_1() #0 -{ -%var29 = call i8* @malloc_heap(i32 4) -%var28 = bitcast i8* %var29 to %class.initialization_in_place_and_this_1_slave_1* -%var30 = alloca %class.initialization_in_place_and_this_1_slave_1*, align 8 -store %class.initialization_in_place_and_this_1_slave_1* %var28, %class.initialization_in_place_and_this_1_slave_1** %var30, align 8 -call void @initialization_in_place_and_this_1_slave_1_Int(%class.initialization_in_place_and_this_1_slave_1* %var28, i32 100) -%managed.unique.0.initialization_in_place_and_this_1.slave = alloca %class.initialization_in_place_and_this_1_slave_1*, align 8 -%var31 = load %class.initialization_in_place_and_this_1_slave_1** %managed.unique.0.initialization_in_place_and_this_1.slave, align 8 -%var32 = load %class.initialization_in_place_and_this_1_slave_1** %var30, align 8 -store %class.initialization_in_place_and_this_1_slave_1* %var32, %class.initialization_in_place_and_this_1_slave_1** %managed.unique.0.initialization_in_place_and_this_1.slave, align 8 -%var33 = load %class.initialization_in_place_and_this_1_slave_1** %managed.unique.0.initialization_in_place_and_this_1.slave, align 8 -%var35 = call i8* @malloc_heap(i32 16) -%var34 = bitcast i8* %var35 to %class.initialization_in_place_and_this_1_master* -%var36 = alloca %class.initialization_in_place_and_this_1_master*, align 8 -store %class.initialization_in_place_and_this_1_master* %var34, %class.initialization_in_place_and_this_1_master** %var36, align 8 -call void @initialization_in_place_and_this_1_master_Ref_initialization_in_place_and_this_1_slave_1(%class.initialization_in_place_and_this_1_master* %var34, %class.initialization_in_place_and_this_1_slave_1* %var33) -%managed.unique.1.initialization_in_place_and_this_1.master = alloca %class.initialization_in_place_and_this_1_master*, align 8 -%var37 = load %class.initialization_in_place_and_this_1_master** %managed.unique.1.initialization_in_place_and_this_1.master, align 8 -%var38 = load %class.initialization_in_place_and_this_1_master** %var36, align 8 -store %class.initialization_in_place_and_this_1_master* %var38, %class.initialization_in_place_and_this_1_master** %managed.unique.1.initialization_in_place_and_this_1.master, align 8 -%var39 = load %class.initialization_in_place_and_this_1_master** %managed.unique.1.initialization_in_place_and_this_1.master, align 8 -%var40 = getelementptr inbounds %class.initialization_in_place_and_this_1_master* %var39, i32 0, i32 1 -%var41 = load %class.initialization_in_place_and_this_1_slave_2** %var40, align 8 -%var42 = getelementptr inbounds %class.initialization_in_place_and_this_1_slave_2* %var41, i32 0, i32 2 -%var43 = load i32* %var42, align 4 -ret i32 %var43 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.txt b/experiments/translator-bc/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.txt deleted file mode 100644 index c36054ac9bd..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.txt +++ /dev/null @@ -1 +0,0 @@ -initialization_in_place_and_this_1() == 100 diff --git a/experiments/translator-bc/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.kt b/experiments/translator-bc/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.kt deleted file mode 100644 index 7fd9f5e7010..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.kt +++ /dev/null @@ -1,8 +0,0 @@ -class initialized_class_fields_1_class { - var pos: Int = 524 -} - -fun initialized_class_fields_1(): Int { - val instance = initialized_class_fields_1_class() - return instance.pos -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.kt.out deleted file mode 100644 index 1e66fe0dfd1..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.kt.out +++ /dev/null @@ -1,37 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.initialized_class_fields_1_class = type { i32 } -define weak void @initialized_class_fields_1_class(%class.initialized_class_fields_1_class* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.initialized_class_fields_1_class, align 8 -%var2 = getelementptr inbounds %class.initialized_class_fields_1_class* %classvariable.this.addr, i32 0, i32 0 -%var3 = load i32* %var2, align 4 -store i32 524, i32* %var2, align 4 -%var4 = bitcast %class.initialized_class_fields_1_class* %classvariable.this to i8* -%var5 = bitcast %class.initialized_class_fields_1_class* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @initialized_class_fields_1() #0 -{ -%var7 = call i8* @malloc_heap(i32 4) -%var6 = bitcast i8* %var7 to %class.initialized_class_fields_1_class* -%var8 = alloca %class.initialized_class_fields_1_class*, align 8 -store %class.initialized_class_fields_1_class* %var6, %class.initialized_class_fields_1_class** %var8, align 8 -call void @initialized_class_fields_1_class(%class.initialized_class_fields_1_class* %var6) -%managed.unique.0.initialized_class_fields_1.instance = alloca %class.initialized_class_fields_1_class*, align 8 -%var9 = load %class.initialized_class_fields_1_class** %managed.unique.0.initialized_class_fields_1.instance, align 8 -%var10 = load %class.initialized_class_fields_1_class** %var8, align 8 -store %class.initialized_class_fields_1_class* %var10, %class.initialized_class_fields_1_class** %managed.unique.0.initialized_class_fields_1.instance, align 8 -%var11 = load %class.initialized_class_fields_1_class** %managed.unique.0.initialized_class_fields_1.instance, align 8 -%var12 = getelementptr inbounds %class.initialized_class_fields_1_class* %var11, i32 0, i32 0 -%var13 = load i32* %var12, align 4 -ret i32 %var13 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.txt b/experiments/translator-bc/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.txt deleted file mode 100644 index b84e32f984d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.txt +++ /dev/null @@ -1 +0,0 @@ -initialized_class_fields_1() == 524 diff --git a/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.kt b/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.kt deleted file mode 100644 index 7260c911f01..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.kt +++ /dev/null @@ -1,5 +0,0 @@ -fun intarray_1(x: Int): Int { - val z = IntArray(10) - z.set(1, x) - return z.get(1) -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.kt.err deleted file mode 100644 index 5add474e52d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.kt.err +++ /dev/null @@ -1,15 +0,0 @@ -Exception in thread "main" java.rmi.UnexpectedException: %class.kotlin.IntArray%var2 - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateMemberMethodOrField(BlockCodegen.kt:112) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateDotBody(BlockCodegen.kt:332) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateDotExpression(BlockCodegen.kt:284) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:199) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:192) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock(BlockCodegen.kt:45) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock$default(BlockCodegen.kt:42) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate(FunctionCodegen.kt:81) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate$default(FunctionCodegen.kt:72) - at org.kotlinnative.translator.ProjectTranslator.generateProjectBody(ProjectTranslator.kt:69) - at org.kotlinnative.translator.ProjectTranslator.generateCode(ProjectTranslator.kt:20) - at MainKt.main(main.kt:22) diff --git a/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.txt b/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.txt deleted file mode 100644 index c80b9ebecd9..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/intarray_1/intarray_1.txt +++ /dev/null @@ -1 +0,0 @@ -intarray_1_Int(123) == 123 diff --git a/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.kt b/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.kt deleted file mode 100644 index 9d89e8603c5..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.kt +++ /dev/null @@ -1,5 +0,0 @@ -fun long_operations_1_Multiplication():Int { - assert(546344378L * 54321678L == 29678343378826284L) - assert(4556656L*67879230 == 309302300654880L) - return 29 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.kt.err deleted file mode 100644 index 89c0df50a03..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.kt.err +++ /dev/null @@ -1,7 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./long_operations_1/long_operations_1.kt 2:5 Unresolved reference: assert -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./long_operations_1/long_operations_1.kt 3:5 Unresolved reference: assert -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.txt b/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.txt deleted file mode 100644 index 9ed3453cf6b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/long_operations_1/long_operations_1.txt +++ /dev/null @@ -1 +0,0 @@ -long_operations_1_Multiplication() == 29 diff --git a/experiments/translator-bc/src/test/kotlin/tests/nested_classes/nested_classes.kt b/experiments/translator-bc/src/test/kotlin/tests/nested_classes/nested_classes.kt deleted file mode 100644 index c0dfd2b4f93..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nested_classes/nested_classes.kt +++ /dev/null @@ -1,24 +0,0 @@ - -class Outer() { - - class Nested(var i: Int) { - - fun test(): Int { - this.i = 5 - return this.i - } - } -} - -fun nested_test_1(k: Int): Int { - val j = Outer.Nested(k - 1) - j.i = k - - return j.i -} - -fun nested_test_2(k: Int): Int { - val j = Outer.Nested(k - 1) - - return j.test() -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/nested_classes/nested_classes.kt.out b/experiments/translator-bc/src/test/kotlin/tests/nested_classes/nested_classes.kt.out deleted file mode 100644 index c88a1ac15bf..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nested_classes/nested_classes.kt.out +++ /dev/null @@ -1,91 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.Outer = type { } -%class.Outer.Nested = type { i32 } -define weak void @Outer(%class.Outer* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.Outer, align 8 -%var2 = bitcast %class.Outer* %classvariable.this to i8* -%var3 = bitcast %class.Outer* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var2, i8* %var3, i64 0, i32 4, i1 false) -ret void -unreachable -} -define weak void @Outer.Nested_Int(%class.Outer.Nested* %classvariable.this, i32 %Outer.Nested.i) #0 -{ -%classvariable.this.addr = alloca %class.Outer.Nested, align 8 -%Outer.Nested.i.addr = alloca i32, align 4 -store i32 %Outer.Nested.i, i32* %Outer.Nested.i.addr, align 4 -%var4 = load i32* %Outer.Nested.i.addr, align 4 -%var5 = getelementptr inbounds %class.Outer.Nested* %classvariable.this.addr, i32 0, i32 0 -store i32 %var4, i32* %var5, align 4 -%var6 = bitcast %class.Outer.Nested* %classvariable.this to i8* -%var7 = bitcast %class.Outer.Nested* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var6, i8* %var7, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @Outer.Nested.test(%class.Outer.Nested* %classvariable.this) #0 -{ -%var8 = getelementptr inbounds %class.Outer.Nested* %classvariable.this, i32 0, i32 0 -%var9 = load i32* %var8, align 4 -store i32 5, i32* %var8, align 4 -%var10 = getelementptr inbounds %class.Outer.Nested* %classvariable.this, i32 0, i32 0 -%var11 = load i32* %var10, align 4 -ret i32 %var11 -unreachable -} -define weak i32 @nested_test_2_Int(i32 %nested_test_2.k) #0 -{ -%nested_test_2.k.addr = alloca i32, align 4 -store i32 %nested_test_2.k, i32* %nested_test_2.k.addr, align 4 -%var12 = load i32* %nested_test_2.k.addr, align 4 -%var13 = sub nsw i32 %var12, 1 -%var15 = call i8* @malloc_heap(i32 4) -%var14 = bitcast i8* %var15 to %class.Outer.Nested* -%var16 = alloca %class.Outer.Nested*, align 8 -store %class.Outer.Nested* %var14, %class.Outer.Nested** %var16, align 8 -call void @Outer.Nested_Int(%class.Outer.Nested* %var14, i32 %var13) -%managed.unique.0.nested_test_2.j = alloca %class.Outer.Nested*, align 8 -%var17 = load %class.Outer.Nested** %managed.unique.0.nested_test_2.j, align 8 -%var18 = load %class.Outer.Nested** %var16, align 8 -store %class.Outer.Nested* %var18, %class.Outer.Nested** %managed.unique.0.nested_test_2.j, align 8 -%var19 = load %class.Outer.Nested** %managed.unique.0.nested_test_2.j, align 8 -%var20 = call i32 @Outer.Nested.test(%class.Outer.Nested* %var19) -%var21 = alloca i32, align 4 -store i32 %var20, i32* %var21, align 4 -%var22 = load i32* %var21, align 4 -ret i32 %var22 -unreachable -} -define weak i32 @nested_test_1_Int(i32 %nested_test_1.k) #0 -{ -%nested_test_1.k.addr = alloca i32, align 4 -store i32 %nested_test_1.k, i32* %nested_test_1.k.addr, align 4 -%var23 = load i32* %nested_test_1.k.addr, align 4 -%var24 = sub nsw i32 %var23, 1 -%var26 = call i8* @malloc_heap(i32 4) -%var25 = bitcast i8* %var26 to %class.Outer.Nested* -%var27 = alloca %class.Outer.Nested*, align 8 -store %class.Outer.Nested* %var25, %class.Outer.Nested** %var27, align 8 -call void @Outer.Nested_Int(%class.Outer.Nested* %var25, i32 %var24) -%managed.unique.1.nested_test_1.j = alloca %class.Outer.Nested*, align 8 -%var28 = load %class.Outer.Nested** %managed.unique.1.nested_test_1.j, align 8 -%var29 = load %class.Outer.Nested** %var27, align 8 -store %class.Outer.Nested* %var29, %class.Outer.Nested** %managed.unique.1.nested_test_1.j, align 8 -%var30 = load %class.Outer.Nested** %managed.unique.1.nested_test_1.j, align 8 -%var31 = getelementptr inbounds %class.Outer.Nested* %var30, i32 0, i32 0 -%var32 = load i32* %var31, align 4 -%var33 = load i32* %nested_test_1.k.addr, align 4 -store i32 %var33, i32* %var31, align 4 -%var34 = load %class.Outer.Nested** %managed.unique.1.nested_test_1.j, align 8 -%var35 = getelementptr inbounds %class.Outer.Nested* %var34, i32 0, i32 0 -%var36 = load i32* %var35, align 4 -ret i32 %var36 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/nested_classes/nested_classes.txt b/experiments/translator-bc/src/test/kotlin/tests/nested_classes/nested_classes.txt deleted file mode 100644 index bf3c12da2a9..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nested_classes/nested_classes.txt +++ /dev/null @@ -1,2 +0,0 @@ -nested_test_1_Int(1) == 1 -nested_test_2_Int(1) == 5 diff --git a/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt b/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt deleted file mode 100644 index 6c767687bff..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt +++ /dev/null @@ -1,32 +0,0 @@ -class null_comparison_1_class - -fun null_comparison_1_getClass(): null_comparison_1_class? { - return null -} - -fun null_comparison_1(): Int { - val a: null_comparison_1_class? = null_comparison_1_getClass() - println(if (a == null) 555 else 9990) - if (a == null) { - return 87 - } - return 945 -} - -fun null_comparison_1_reassigned(): Int { - var a: null_comparison_1_class? = null_comparison_1_class() - a = null_comparison_1_getClass() - if (a == null) { - return 87 - } - return 945 -} - -fun null_comparison_1_declaration(): Int { - val a: null_comparison_1_class? - a = null_comparison_1_getClass() - if (a == null) { - return 87 - } - return 945 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt.err deleted file mode 100644 index 57b27087893..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt.err +++ /dev/null @@ -1,6 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./null_comparison_1/null_comparison_1.kt 9:5 Unresolved reference: println -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.txt b/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.txt deleted file mode 100644 index 697fbb8bfa7..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/null_comparison_1/null_comparison_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -null_comparison_1() == 87 -null_comparison_1_reassigned() == 87 -null_comparison_1_declaration() == 87 diff --git a/experiments/translator-bc/src/test/kotlin/tests/nullable_1/nullable_1.kt b/experiments/translator-bc/src/test/kotlin/tests/nullable_1/nullable_1.kt deleted file mode 100644 index 854042d2a9d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nullable_1/nullable_1.kt +++ /dev/null @@ -1,30 +0,0 @@ -class nullable_1_MyAwesomeClass(var i: Int) - -fun nullable_1_test(i: Int): Int { - var x: nullable_1_MyAwesomeClass? = null - x = nullable_1_MyAwesomeClass(i) - return x.i -} - -fun nullable_1_test_2(i: Int): Int { - var x: nullable_1_MyAwesomeClass? = nullable_1_MyAwesomeClass(i) - x = null - x = nullable_1_MyAwesomeClass(i) - - return x.i + 1 -} - -fun nullable_1_test_2_npe_operator(i: Int): Int { - val x: nullable_1_MyAwesomeClass? = nullable_1_MyAwesomeClass(i) - x!! - return x.i + 555 -} - -fun nullable_1_test_null_return_slave():nullable_1_MyAwesomeClass?{ - return null -} - -fun nullable_1_test_null_return():Int{ - return 11 - //return if (nullable_1_test_null_return_slave() == null) 11 else -24 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/nullable_1/nullable_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/nullable_1/nullable_1.kt.out deleted file mode 100644 index bdded4f5c03..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nullable_1/nullable_1.kt.out +++ /dev/null @@ -1,116 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.nullable_1_MyAwesomeClass = type { i32 } -define weak void @nullable_1_MyAwesomeClass_Int(%class.nullable_1_MyAwesomeClass* %classvariable.this, i32 %nullable_1_MyAwesomeClass.i) #0 -{ -%classvariable.this.addr = alloca %class.nullable_1_MyAwesomeClass, align 8 -%nullable_1_MyAwesomeClass.i.addr = alloca i32, align 4 -store i32 %nullable_1_MyAwesomeClass.i, i32* %nullable_1_MyAwesomeClass.i.addr, align 4 -%var2 = load i32* %nullable_1_MyAwesomeClass.i.addr, align 4 -%var3 = getelementptr inbounds %class.nullable_1_MyAwesomeClass* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.nullable_1_MyAwesomeClass* %classvariable.this to i8* -%var5 = bitcast %class.nullable_1_MyAwesomeClass* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @nullable_1_test_null_return() #0 -{ -ret i32 11 -unreachable -} -define weak void @nullable_1_test_null_return_slave(%class.nullable_1_MyAwesomeClass** %instance) #0 -{ -store %class.nullable_1_MyAwesomeClass* null, %class.nullable_1_MyAwesomeClass** %instance, align 1 -ret void -unreachable -} -define weak i32 @nullable_1_test_Int(i32 %nullable_1_test.i) #0 -{ -%nullable_1_test.i.addr = alloca i32, align 4 -store i32 %nullable_1_test.i, i32* %nullable_1_test.i.addr, align 4 -%managed.unique.0.nullable_1_test.x = alloca %class.nullable_1_MyAwesomeClass*, align 8 -%var6 = load %class.nullable_1_MyAwesomeClass** %managed.unique.0.nullable_1_test.x, align 8 -store %class.nullable_1_MyAwesomeClass* null, %class.nullable_1_MyAwesomeClass** %managed.unique.0.nullable_1_test.x, align 8 -%var7 = load i32* %nullable_1_test.i.addr, align 4 -%var9 = call i8* @malloc_heap(i32 4) -%var8 = bitcast i8* %var9 to %class.nullable_1_MyAwesomeClass* -%var10 = alloca %class.nullable_1_MyAwesomeClass*, align 8 -store %class.nullable_1_MyAwesomeClass* %var8, %class.nullable_1_MyAwesomeClass** %var10, align 8 -call void @nullable_1_MyAwesomeClass_Int(%class.nullable_1_MyAwesomeClass* %var8, i32 %var7) -%var11 = load %class.nullable_1_MyAwesomeClass** %managed.unique.0.nullable_1_test.x, align 8 -%var12 = load %class.nullable_1_MyAwesomeClass** %var10, align 8 -store %class.nullable_1_MyAwesomeClass* %var12, %class.nullable_1_MyAwesomeClass** %managed.unique.0.nullable_1_test.x, align 8 -%var13 = load %class.nullable_1_MyAwesomeClass** %managed.unique.0.nullable_1_test.x, align 8 -%var14 = getelementptr inbounds %class.nullable_1_MyAwesomeClass* %var13, i32 0, i32 0 -%var15 = load i32* %var14, align 4 -ret i32 %var15 -unreachable -} -define weak i32 @nullable_1_test_2_Int(i32 %nullable_1_test_2.i) #0 -{ -%nullable_1_test_2.i.addr = alloca i32, align 4 -store i32 %nullable_1_test_2.i, i32* %nullable_1_test_2.i.addr, align 4 -%var16 = load i32* %nullable_1_test_2.i.addr, align 4 -%var18 = call i8* @malloc_heap(i32 4) -%var17 = bitcast i8* %var18 to %class.nullable_1_MyAwesomeClass* -%var19 = alloca %class.nullable_1_MyAwesomeClass*, align 8 -store %class.nullable_1_MyAwesomeClass* %var17, %class.nullable_1_MyAwesomeClass** %var19, align 8 -call void @nullable_1_MyAwesomeClass_Int(%class.nullable_1_MyAwesomeClass* %var17, i32 %var16) -%managed.unique.1.nullable_1_test_2.x = alloca %class.nullable_1_MyAwesomeClass*, align 8 -%var20 = load %class.nullable_1_MyAwesomeClass** %managed.unique.1.nullable_1_test_2.x, align 8 -%var21 = load %class.nullable_1_MyAwesomeClass** %var19, align 8 -store %class.nullable_1_MyAwesomeClass* %var21, %class.nullable_1_MyAwesomeClass** %managed.unique.1.nullable_1_test_2.x, align 8 -%var22 = load %class.nullable_1_MyAwesomeClass** %managed.unique.1.nullable_1_test_2.x, align 8 -store %class.nullable_1_MyAwesomeClass* null, %class.nullable_1_MyAwesomeClass** %managed.unique.1.nullable_1_test_2.x, align 8 -%var23 = load i32* %nullable_1_test_2.i.addr, align 4 -%var25 = call i8* @malloc_heap(i32 4) -%var24 = bitcast i8* %var25 to %class.nullable_1_MyAwesomeClass* -%var26 = alloca %class.nullable_1_MyAwesomeClass*, align 8 -store %class.nullable_1_MyAwesomeClass* %var24, %class.nullable_1_MyAwesomeClass** %var26, align 8 -call void @nullable_1_MyAwesomeClass_Int(%class.nullable_1_MyAwesomeClass* %var24, i32 %var23) -%var27 = load %class.nullable_1_MyAwesomeClass** %managed.unique.1.nullable_1_test_2.x, align 8 -%var28 = load %class.nullable_1_MyAwesomeClass** %var26, align 8 -store %class.nullable_1_MyAwesomeClass* %var28, %class.nullable_1_MyAwesomeClass** %managed.unique.1.nullable_1_test_2.x, align 8 -%var29 = load %class.nullable_1_MyAwesomeClass** %managed.unique.1.nullable_1_test_2.x, align 8 -%var30 = getelementptr inbounds %class.nullable_1_MyAwesomeClass* %var29, i32 0, i32 0 -%var31 = load i32* %var30, align 4 -%var32 = add nsw i32 %var31, 1 -ret i32 %var32 -unreachable -} -define weak i32 @nullable_1_test_2_npe_operator_Int(i32 %nullable_1_test_2_npe_operator.i) #0 -{ -%nullable_1_test_2_npe_operator.i.addr = alloca i32, align 4 -store i32 %nullable_1_test_2_npe_operator.i, i32* %nullable_1_test_2_npe_operator.i.addr, align 4 -%var33 = load i32* %nullable_1_test_2_npe_operator.i.addr, align 4 -%var35 = call i8* @malloc_heap(i32 4) -%var34 = bitcast i8* %var35 to %class.nullable_1_MyAwesomeClass* -%var36 = alloca %class.nullable_1_MyAwesomeClass*, align 8 -store %class.nullable_1_MyAwesomeClass* %var34, %class.nullable_1_MyAwesomeClass** %var36, align 8 -call void @nullable_1_MyAwesomeClass_Int(%class.nullable_1_MyAwesomeClass* %var34, i32 %var33) -%managed.unique.2.nullable_1_test_2_npe_operator.x = alloca %class.nullable_1_MyAwesomeClass*, align 8 -%var37 = load %class.nullable_1_MyAwesomeClass** %managed.unique.2.nullable_1_test_2_npe_operator.x, align 8 -%var38 = load %class.nullable_1_MyAwesomeClass** %var36, align 8 -store %class.nullable_1_MyAwesomeClass* %var38, %class.nullable_1_MyAwesomeClass** %managed.unique.2.nullable_1_test_2_npe_operator.x, align 8 -%var40 = load %class.nullable_1_MyAwesomeClass** %managed.unique.2.nullable_1_test_2_npe_operator.x, align 8 -%var39 = icmp eq %class.nullable_1_MyAwesomeClass* null, %var40 -br i1 %var39, label %label.nullCheck.1, label %label.nullCheck.2 -label.nullCheck.1: -%var41 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.2 -label.nullCheck.2: -%var42 = load %class.nullable_1_MyAwesomeClass** %managed.unique.2.nullable_1_test_2_npe_operator.x, align 8 -%var43 = getelementptr inbounds %class.nullable_1_MyAwesomeClass* %var42, i32 0, i32 0 -%var44 = load i32* %var43, align 4 -%var45 = add nsw i32 %var44, 555 -ret i32 %var45 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/nullable_1/nullable_1.txt b/experiments/translator-bc/src/test/kotlin/tests/nullable_1/nullable_1.txt deleted file mode 100644 index 94d6b6a5c9b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nullable_1/nullable_1.txt +++ /dev/null @@ -1,4 +0,0 @@ -nullable_1_test_Int(1) == 1 -nullable_1_test_2_Int(4) == 5 -nullable_1_test_2_npe_operator_Int(23) == 578 -nullable_1_test_null_return() == 11 diff --git a/experiments/translator-bc/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.kt b/experiments/translator-bc/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.kt deleted file mode 100644 index 71f3a410e08..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.kt +++ /dev/null @@ -1,32 +0,0 @@ -class nullable_class_fields_1_class { - var left: nullable_class_fields_1_class? = null - var right: Int? = null -} - -fun nullable_class_fields_1_primitives(): Int { - val a = nullable_class_fields_1_class() - if (a.right == null) { - return 29 - } else { - return 28 - } -} - -fun nullable_class_fields_1_classes(): Int { - val a = nullable_class_fields_1_class() - if (a.left == null) { - return 29 - } else { - return 28 - } -} - -fun nullable_class_fields_1_classes_not_null(): Int { - val a = nullable_class_fields_1_class() - a.left = nullable_class_fields_1_class() - if (a.left == null) { - return 29 - } else { - return 28 - } -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.kt.out deleted file mode 100644 index f5d29a4b77d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.kt.out +++ /dev/null @@ -1,110 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.nullable_class_fields_1_class = type { %class.nullable_class_fields_1_class*, i32* } -define weak void @nullable_class_fields_1_class(%class.nullable_class_fields_1_class* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.nullable_class_fields_1_class, align 8 -%var2 = getelementptr inbounds %class.nullable_class_fields_1_class* %classvariable.this.addr, i32 0, i32 0 -%var3 = load %class.nullable_class_fields_1_class** %var2, align 8 -store %class.nullable_class_fields_1_class* null, %class.nullable_class_fields_1_class** %var2, align 8 -%var4 = getelementptr inbounds %class.nullable_class_fields_1_class* %classvariable.this.addr, i32 0, i32 1 -%var5 = load i32** %var4, align 4 -store i32* null, i32** %var4, align 8 -%var6 = bitcast %class.nullable_class_fields_1_class* %classvariable.this to i8* -%var7 = bitcast %class.nullable_class_fields_1_class* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var6, i8* %var7, i64 16, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @nullable_class_fields_1_classes_not_null() #0 -{ -%var9 = call i8* @malloc_heap(i32 16) -%var8 = bitcast i8* %var9 to %class.nullable_class_fields_1_class* -%var10 = alloca %class.nullable_class_fields_1_class*, align 8 -store %class.nullable_class_fields_1_class* %var8, %class.nullable_class_fields_1_class** %var10, align 8 -call void @nullable_class_fields_1_class(%class.nullable_class_fields_1_class* %var8) -%managed.unique.0.nullable_class_fields_1_classes_not_null.a = alloca %class.nullable_class_fields_1_class*, align 8 -%var11 = load %class.nullable_class_fields_1_class** %managed.unique.0.nullable_class_fields_1_classes_not_null.a, align 8 -%var12 = load %class.nullable_class_fields_1_class** %var10, align 8 -store %class.nullable_class_fields_1_class* %var12, %class.nullable_class_fields_1_class** %managed.unique.0.nullable_class_fields_1_classes_not_null.a, align 8 -%var13 = load %class.nullable_class_fields_1_class** %managed.unique.0.nullable_class_fields_1_classes_not_null.a, align 8 -%var14 = getelementptr inbounds %class.nullable_class_fields_1_class* %var13, i32 0, i32 0 -%var16 = call i8* @malloc_heap(i32 16) -%var15 = bitcast i8* %var16 to %class.nullable_class_fields_1_class* -%var17 = alloca %class.nullable_class_fields_1_class*, align 8 -store %class.nullable_class_fields_1_class* %var15, %class.nullable_class_fields_1_class** %var17, align 8 -call void @nullable_class_fields_1_class(%class.nullable_class_fields_1_class* %var15) -%var18 = load %class.nullable_class_fields_1_class** %var14, align 8 -%var19 = load %class.nullable_class_fields_1_class** %var17, align 8 -store %class.nullable_class_fields_1_class* %var19, %class.nullable_class_fields_1_class** %var14, align 8 -%var20 = load %class.nullable_class_fields_1_class** %managed.unique.0.nullable_class_fields_1_classes_not_null.a, align 8 -%var21 = getelementptr inbounds %class.nullable_class_fields_1_class* %var20, i32 0, i32 0 -%var22 = load %class.nullable_class_fields_1_class** %var21, align 8 -%var23 = load %class.nullable_class_fields_1_class** %var21, align 8 -%var24 = icmp eq %class.nullable_class_fields_1_class* %var23, null -br i1 %var24, label %label.if.1, label %label.if.2 -label.if.1: -ret i32 29 -br label %label.if.3 -label.if.2: -ret i32 28 -br label %label.if.3 -label.if.3: -unreachable -} -define weak i32 @nullable_class_fields_1_classes() #0 -{ -%var26 = call i8* @malloc_heap(i32 16) -%var25 = bitcast i8* %var26 to %class.nullable_class_fields_1_class* -%var27 = alloca %class.nullable_class_fields_1_class*, align 8 -store %class.nullable_class_fields_1_class* %var25, %class.nullable_class_fields_1_class** %var27, align 8 -call void @nullable_class_fields_1_class(%class.nullable_class_fields_1_class* %var25) -%managed.unique.1.nullable_class_fields_1_classes.a = alloca %class.nullable_class_fields_1_class*, align 8 -%var28 = load %class.nullable_class_fields_1_class** %managed.unique.1.nullable_class_fields_1_classes.a, align 8 -%var29 = load %class.nullable_class_fields_1_class** %var27, align 8 -store %class.nullable_class_fields_1_class* %var29, %class.nullable_class_fields_1_class** %managed.unique.1.nullable_class_fields_1_classes.a, align 8 -%var30 = load %class.nullable_class_fields_1_class** %managed.unique.1.nullable_class_fields_1_classes.a, align 8 -%var31 = getelementptr inbounds %class.nullable_class_fields_1_class* %var30, i32 0, i32 0 -%var32 = load %class.nullable_class_fields_1_class** %var31, align 8 -%var33 = load %class.nullable_class_fields_1_class** %var31, align 8 -%var34 = icmp eq %class.nullable_class_fields_1_class* %var33, null -br i1 %var34, label %label.if.4, label %label.if.5 -label.if.4: -ret i32 29 -br label %label.if.6 -label.if.5: -ret i32 28 -br label %label.if.6 -label.if.6: -unreachable -} -define weak i32 @nullable_class_fields_1_primitives() #0 -{ -%var36 = call i8* @malloc_heap(i32 16) -%var35 = bitcast i8* %var36 to %class.nullable_class_fields_1_class* -%var37 = alloca %class.nullable_class_fields_1_class*, align 8 -store %class.nullable_class_fields_1_class* %var35, %class.nullable_class_fields_1_class** %var37, align 8 -call void @nullable_class_fields_1_class(%class.nullable_class_fields_1_class* %var35) -%managed.unique.2.nullable_class_fields_1_primitives.a = alloca %class.nullable_class_fields_1_class*, align 8 -%var38 = load %class.nullable_class_fields_1_class** %managed.unique.2.nullable_class_fields_1_primitives.a, align 8 -%var39 = load %class.nullable_class_fields_1_class** %var37, align 8 -store %class.nullable_class_fields_1_class* %var39, %class.nullable_class_fields_1_class** %managed.unique.2.nullable_class_fields_1_primitives.a, align 8 -%var40 = load %class.nullable_class_fields_1_class** %managed.unique.2.nullable_class_fields_1_primitives.a, align 8 -%var41 = getelementptr inbounds %class.nullable_class_fields_1_class* %var40, i32 0, i32 1 -%var42 = load i32** %var41, align 4 -%var43 = icmp eq i32* %var42, null -br i1 %var43, label %label.if.7, label %label.if.8 -label.if.7: -ret i32 29 -br label %label.if.9 -label.if.8: -ret i32 28 -br label %label.if.9 -label.if.9: -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.txt b/experiments/translator-bc/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.txt deleted file mode 100644 index 3269ec40847..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -nullable_class_fields_1_primitives() == 29 -nullable_class_fields_1_classes() == 29 -nullable_class_fields_1_classes_not_null() == 28 diff --git a/experiments/translator-bc/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.kt b/experiments/translator-bc/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.kt deleted file mode 100644 index 2f8d1b053d9..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.kt +++ /dev/null @@ -1,41 +0,0 @@ -fun nullable_primitive_types_1_small(): Int { - var variable: Int? = null - variable = 29 - val art: Int? = variable - return art!! -} - -fun nullable_primitive_types_1_extern(x: Int): Int { - val variable: Int? = x - val art: Int? = variable!! + 8 - return art!! -} - -fun nullable_primitive_types_1_if_null(): Int { - val variable: Int? = null - if (variable == null) { - return 11 - } else { - return 2245 - } -} - -fun nullable_primitive_types_1_if_not_null(): Int { - val variable: Int? = null - if (variable != null) { - return 11 - } else { - return 2245 - } -} - -fun nullable_primitive_types_1_reassignment(): Int { - var z: Int? = 32 - z = null - val r = z - if (r == null) { - return 5678 - } else { - return 13 - } -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.kt.out deleted file mode 100644 index 38d61c4f5b5..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.kt.out +++ /dev/null @@ -1,132 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @nullable_primitive_types_1_extern_Int(i32 %nullable_primitive_types_1_extern.x) #0 -{ -%nullable_primitive_types_1_extern.x.addr = alloca i32, align 4 -store i32 %nullable_primitive_types_1_extern.x, i32* %nullable_primitive_types_1_extern.x.addr, align 4 -%managed.unique.0.nullable_primitive_types_1_extern.variable = alloca i32*, align 4 -%var2 = load i32** %managed.unique.0.nullable_primitive_types_1_extern.variable, align 4 -%var3 = load i32* %nullable_primitive_types_1_extern.x.addr, align 4 -store i32* %nullable_primitive_types_1_extern.x.addr, i32** %managed.unique.0.nullable_primitive_types_1_extern.variable, align 4 -%var5 = load i32** %managed.unique.0.nullable_primitive_types_1_extern.variable, align 4 -%var4 = icmp eq i32* null, %var5 -br i1 %var4, label %label.nullCheck.1, label %label.nullCheck.2 -label.nullCheck.1: -%var6 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.2 -label.nullCheck.2: -%var7 = load i32** %managed.unique.0.nullable_primitive_types_1_extern.variable, align 4 -%var8 = load i32* %var7, align 4 -%var9 = add nsw i32 %var8, 8 -%managed.unique.1.nullable_primitive_types_1_extern.art = alloca i32*, align 4 -%var10 = load i32** %managed.unique.1.nullable_primitive_types_1_extern.art, align 4 -%var12 = call i8* @malloc_heap(i32 8) -%var11 = bitcast i8* %var12 to i32* -store i32 %var9, i32* %var11, align 4 -store i32* %var11, i32** %managed.unique.1.nullable_primitive_types_1_extern.art, align 4 -%var14 = load i32** %managed.unique.1.nullable_primitive_types_1_extern.art, align 4 -%var13 = icmp eq i32* null, %var14 -br i1 %var13, label %label.nullCheck.3, label %label.nullCheck.4 -label.nullCheck.3: -%var15 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.4 -label.nullCheck.4: -%var16 = load i32** %managed.unique.1.nullable_primitive_types_1_extern.art, align 4 -%var17 = load i32* %var16, align 4 -ret i32 %var17 -unreachable -} -define weak i32 @nullable_primitive_types_1_if_not_null() #0 -{ -%managed.unique.2.nullable_primitive_types_1_if_not_null.variable = alloca i32*, align 4 -%var18 = load i32** %managed.unique.2.nullable_primitive_types_1_if_not_null.variable, align 4 -store i32* null, i32** %managed.unique.2.nullable_primitive_types_1_if_not_null.variable, align 8 -%var19 = load i32** %managed.unique.2.nullable_primitive_types_1_if_not_null.variable, align 4 -%var20 = icmp ne i32* %var19, null -br i1 %var20, label %label.if.5, label %label.if.6 -label.if.5: -ret i32 11 -br label %label.if.7 -label.if.6: -ret i32 2245 -br label %label.if.7 -label.if.7: -unreachable -} -define weak i32 @nullable_primitive_types_1_small() #0 -{ -%managed.unique.3.nullable_primitive_types_1_small.variable = alloca i32*, align 4 -%var21 = load i32** %managed.unique.3.nullable_primitive_types_1_small.variable, align 4 -store i32* null, i32** %managed.unique.3.nullable_primitive_types_1_small.variable, align 8 -%var22 = load i32** %managed.unique.3.nullable_primitive_types_1_small.variable, align 4 -%var24 = call i8* @malloc_heap(i32 8) -%var23 = bitcast i8* %var24 to i32* -store i32 29, i32* %var23, align 4 -store i32* %var23, i32** %managed.unique.3.nullable_primitive_types_1_small.variable, align 4 -%managed.unique.4.nullable_primitive_types_1_small.art = alloca i32*, align 4 -%var25 = load i32** %managed.unique.4.nullable_primitive_types_1_small.art, align 4 -%var26 = load i32** %managed.unique.3.nullable_primitive_types_1_small.variable, align 4 -store i32* %var26, i32** %managed.unique.4.nullable_primitive_types_1_small.art, align 4 -%var28 = load i32** %managed.unique.4.nullable_primitive_types_1_small.art, align 4 -%var27 = icmp eq i32* null, %var28 -br i1 %var27, label %label.nullCheck.8, label %label.nullCheck.9 -label.nullCheck.8: -%var29 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([59 x i8]* @exceptions.str.1, i32 0, i32 0)) -call void @abort() -br label %label.nullCheck.9 -label.nullCheck.9: -%var30 = load i32** %managed.unique.4.nullable_primitive_types_1_small.art, align 4 -%var31 = load i32* %var30, align 4 -ret i32 %var31 -unreachable -} -define weak i32 @nullable_primitive_types_1_if_null() #0 -{ -%managed.unique.5.nullable_primitive_types_1_if_null.variable = alloca i32*, align 4 -%var32 = load i32** %managed.unique.5.nullable_primitive_types_1_if_null.variable, align 4 -store i32* null, i32** %managed.unique.5.nullable_primitive_types_1_if_null.variable, align 8 -%var33 = load i32** %managed.unique.5.nullable_primitive_types_1_if_null.variable, align 4 -%var34 = icmp eq i32* %var33, null -br i1 %var34, label %label.if.10, label %label.if.11 -label.if.10: -ret i32 11 -br label %label.if.12 -label.if.11: -ret i32 2245 -br label %label.if.12 -label.if.12: -unreachable -} -define weak i32 @nullable_primitive_types_1_reassignment() #0 -{ -%managed.unique.6.nullable_primitive_types_1_reassignment.z = alloca i32*, align 4 -%var35 = load i32** %managed.unique.6.nullable_primitive_types_1_reassignment.z, align 4 -%var37 = call i8* @malloc_heap(i32 8) -%var36 = bitcast i8* %var37 to i32* -store i32 32, i32* %var36, align 4 -store i32* %var36, i32** %managed.unique.6.nullable_primitive_types_1_reassignment.z, align 4 -%var38 = load i32** %managed.unique.6.nullable_primitive_types_1_reassignment.z, align 4 -store i32* null, i32** %managed.unique.6.nullable_primitive_types_1_reassignment.z, align 8 -%managed.unique.7.nullable_primitive_types_1_reassignment.r = alloca i32*, align 4 -%var39 = load i32** %managed.unique.7.nullable_primitive_types_1_reassignment.r, align 4 -%var40 = load i32** %managed.unique.6.nullable_primitive_types_1_reassignment.z, align 4 -store i32* %var40, i32** %managed.unique.7.nullable_primitive_types_1_reassignment.r, align 4 -%var41 = load i32** %managed.unique.7.nullable_primitive_types_1_reassignment.r, align 4 -%var42 = icmp eq i32* %var41, null -br i1 %var42, label %label.if.13, label %label.if.14 -label.if.13: -ret i32 5678 -br label %label.if.15 -label.if.14: -ret i32 13 -br label %label.if.15 -label.if.15: -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.txt b/experiments/translator-bc/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.txt deleted file mode 100644 index 34fb6ab22e3..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.txt +++ /dev/null @@ -1,5 +0,0 @@ -nullable_primitive_types_1_small() == 29 -nullable_primitive_types_1_extern_Int(11) == 19 -nullable_primitive_types_1_if_null() == 11 -nullable_primitive_types_1_if_not_null() == 2245 -nullable_primitive_types_1_reassignment() == 5678 diff --git a/experiments/translator-bc/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.kt b/experiments/translator-bc/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.kt deleted file mode 100644 index f28935d2e7f..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.kt +++ /dev/null @@ -1,13 +0,0 @@ -fun numeric_literals_1(x: Int): Int { - return x -} - -fun numeric_literals_1_LL(): Long { - val k = 320L - return k -} - -fun numeric_literals_1_Binary(): Int { - val k = 0b01111111 - return k -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.kt.out deleted file mode 100644 index b6ddea03577..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.kt.out +++ /dev/null @@ -1,33 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @numeric_literals_1_Int(i32 %numeric_literals_1.x) #0 -{ -%numeric_literals_1.x.addr = alloca i32, align 4 -store i32 %numeric_literals_1.x, i32* %numeric_literals_1.x.addr, align 4 -%var2 = load i32* %numeric_literals_1.x.addr, align 4 -ret i32 %var2 -unreachable -} -define weak i64 @numeric_literals_1_LL() #0 -{ -%managed.unique.0.numeric_literals_1_LL.k = alloca i64, align 8 -%var3 = load i64* %managed.unique.0.numeric_literals_1_LL.k, align 8 -store i64 320, i64* %managed.unique.0.numeric_literals_1_LL.k, align 8 -%var4 = load i64* %managed.unique.0.numeric_literals_1_LL.k, align 8 -ret i64 %var4 -unreachable -} -define weak i32 @numeric_literals_1_Binary() #0 -{ -%managed.unique.1.numeric_literals_1_Binary.k = alloca i32, align 4 -%var5 = load i32* %managed.unique.1.numeric_literals_1_Binary.k, align 4 -store i32 127, i32* %managed.unique.1.numeric_literals_1_Binary.k, align 4 -%var6 = load i32* %managed.unique.1.numeric_literals_1_Binary.k, align 4 -ret i32 %var6 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.txt b/experiments/translator-bc/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.txt deleted file mode 100644 index 067b988201b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -numeric_literals_1_Int(0x20) == 32 -numeric_literals_1_LL() == 320 -numeric_literals_1_Binary() == 127 diff --git a/experiments/translator-bc/src/test/kotlin/tests/object_1/object_1.kt b/experiments/translator-bc/src/test/kotlin/tests/object_1/object_1.kt deleted file mode 100644 index 4c1cc3eac15..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/object_1/object_1.kt +++ /dev/null @@ -1,16 +0,0 @@ -object Singleton { - - val i: Int = 123456789 - - fun create(x : Int): Int { - return x * 8 - } -} - -fun singleton_test(i: Int): Int { - return Singleton.create(i) -} - -fun singleton_test2(): Int { - return Singleton.i -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/object_1/object_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/object_1/object_1.kt.out deleted file mode 100644 index ea7713ab101..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/object_1/object_1.kt.out +++ /dev/null @@ -1,49 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.Singleton = type { i32 } -@object.instance.Singleton = internal global %class.Singleton { i32 123456789 }, align 8 -define weak void @Singleton(%class.Singleton* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.Singleton, align 8 -%var2 = getelementptr inbounds %class.Singleton* %classvariable.this.addr, i32 0, i32 0 -%var3 = load i32* %var2, align 4 -store i32 123456789, i32* %var2, align 4 -%var4 = bitcast %class.Singleton* %classvariable.this to i8* -%var5 = bitcast %class.Singleton* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @Singleton.create_Int(%class.Singleton* %classvariable.this, i32 %Singleton.create.x) #0 -{ -%Singleton.create.x.addr = alloca i32, align 4 -store i32 %Singleton.create.x, i32* %Singleton.create.x.addr, align 4 -%var6 = load i32* %Singleton.create.x.addr, align 4 -%var7 = mul nsw i32 %var6, 8 -ret i32 %var7 -unreachable -} -define weak i32 @singleton_test_Int(i32 %singleton_test.i) #0 -{ -%singleton_test.i.addr = alloca i32, align 4 -store i32 %singleton_test.i, i32* %singleton_test.i.addr, align 4 -%var8 = load i32* %singleton_test.i.addr, align 4 -%var9 = call i32 @Singleton.create_Int(%class.Singleton* @object.instance.Singleton, i32 %var8) -%var10 = alloca i32, align 4 -store i32 %var9, i32* %var10, align 4 -%var11 = load i32* %var10, align 4 -ret i32 %var11 -unreachable -} -define weak i32 @singleton_test2() #0 -{ -%var12 = getelementptr inbounds %class.Singleton* @object.instance.Singleton, i32 0, i32 0 -%var13 = load i32* %var12, align 4 -ret i32 %var13 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/object_1/object_1.txt b/experiments/translator-bc/src/test/kotlin/tests/object_1/object_1.txt deleted file mode 100644 index b98970c95f2..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/object_1/object_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -singleton_test_Int(5) == 40 -singleton_test2() == 123456789 diff --git a/experiments/translator-bc/src/test/kotlin/tests/postfix_1/postfix_1.kt b/experiments/translator-bc/src/test/kotlin/tests/postfix_1/postfix_1.kt deleted file mode 100644 index 593be691da8..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/postfix_1/postfix_1.kt +++ /dev/null @@ -1,35 +0,0 @@ -fun postfix_1_plus_before(x: Int): Int { - var xx = x - val z = xx++ - return z -} - -fun postfix_1_plus_after(x: Int): Int { - var xx = x - val z = xx++ - return xx -} - -fun postfix_1_plus_inside(x: Int): Int { - var xx = x - xx++ - return xx -} - -fun postfix_1_minus_before(x: Int): Int { - var xx = x - val z = xx-- - return z -} - -fun postfix_1_minus_after(x: Int): Int { - var xx = x - val z = xx-- - return xx -} - -fun postfix_1_minus_inside(x: Int): Int { - var xx = x - xx-- - return xx -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/postfix_1/postfix_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/postfix_1/postfix_1.kt.out deleted file mode 100644 index c4fb587c4b7..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/postfix_1/postfix_1.kt.out +++ /dev/null @@ -1,131 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @postfix_1_minus_before_Int(i32 %postfix_1_minus_before.x) #0 -{ -%postfix_1_minus_before.x.addr = alloca i32, align 4 -store i32 %postfix_1_minus_before.x, i32* %postfix_1_minus_before.x.addr, align 4 -%managed.unique.0.postfix_1_minus_before.xx = alloca i32, align 4 -%var2 = load i32* %managed.unique.0.postfix_1_minus_before.xx, align 4 -%var3 = load i32* %postfix_1_minus_before.x.addr, align 4 -store i32 %var3, i32* %managed.unique.0.postfix_1_minus_before.xx, align 4 -%var4 = load i32* %managed.unique.0.postfix_1_minus_before.xx, align 4 -%var5 = alloca i32, align 4 -%var6 = load i32* %managed.unique.0.postfix_1_minus_before.xx, align 4 -store i32 %var6, i32* %var5, align 4 -%var7 = sub nsw i32 %var4, 1 -store i32 %var7, i32* %managed.unique.0.postfix_1_minus_before.xx, align 4 -%managed.unique.1.postfix_1_minus_before.z = alloca i32, align 4 -%var8 = load i32* %managed.unique.1.postfix_1_minus_before.z, align 4 -%var9 = load i32* %var5, align 4 -store i32 %var9, i32* %managed.unique.1.postfix_1_minus_before.z, align 4 -%var10 = load i32* %managed.unique.1.postfix_1_minus_before.z, align 4 -ret i32 %var10 -unreachable -} -define weak i32 @postfix_1_minus_inside_Int(i32 %postfix_1_minus_inside.x) #0 -{ -%postfix_1_minus_inside.x.addr = alloca i32, align 4 -store i32 %postfix_1_minus_inside.x, i32* %postfix_1_minus_inside.x.addr, align 4 -%managed.unique.2.postfix_1_minus_inside.xx = alloca i32, align 4 -%var11 = load i32* %managed.unique.2.postfix_1_minus_inside.xx, align 4 -%var12 = load i32* %postfix_1_minus_inside.x.addr, align 4 -store i32 %var12, i32* %managed.unique.2.postfix_1_minus_inside.xx, align 4 -%var13 = load i32* %managed.unique.2.postfix_1_minus_inside.xx, align 4 -%var14 = alloca i32, align 4 -%var15 = load i32* %managed.unique.2.postfix_1_minus_inside.xx, align 4 -store i32 %var15, i32* %var14, align 4 -%var16 = sub nsw i32 %var13, 1 -store i32 %var16, i32* %managed.unique.2.postfix_1_minus_inside.xx, align 4 -%var17 = load i32* %managed.unique.2.postfix_1_minus_inside.xx, align 4 -ret i32 %var17 -unreachable -} -define weak i32 @postfix_1_plus_inside_Int(i32 %postfix_1_plus_inside.x) #0 -{ -%postfix_1_plus_inside.x.addr = alloca i32, align 4 -store i32 %postfix_1_plus_inside.x, i32* %postfix_1_plus_inside.x.addr, align 4 -%managed.unique.3.postfix_1_plus_inside.xx = alloca i32, align 4 -%var18 = load i32* %managed.unique.3.postfix_1_plus_inside.xx, align 4 -%var19 = load i32* %postfix_1_plus_inside.x.addr, align 4 -store i32 %var19, i32* %managed.unique.3.postfix_1_plus_inside.xx, align 4 -%var20 = load i32* %managed.unique.3.postfix_1_plus_inside.xx, align 4 -%var21 = alloca i32, align 4 -%var22 = load i32* %managed.unique.3.postfix_1_plus_inside.xx, align 4 -store i32 %var22, i32* %var21, align 4 -%var23 = add nsw i32 %var20, 1 -store i32 %var23, i32* %managed.unique.3.postfix_1_plus_inside.xx, align 4 -%var24 = load i32* %managed.unique.3.postfix_1_plus_inside.xx, align 4 -ret i32 %var24 -unreachable -} -define weak i32 @postfix_1_plus_after_Int(i32 %postfix_1_plus_after.x) #0 -{ -%postfix_1_plus_after.x.addr = alloca i32, align 4 -store i32 %postfix_1_plus_after.x, i32* %postfix_1_plus_after.x.addr, align 4 -%managed.unique.4.postfix_1_plus_after.xx = alloca i32, align 4 -%var25 = load i32* %managed.unique.4.postfix_1_plus_after.xx, align 4 -%var26 = load i32* %postfix_1_plus_after.x.addr, align 4 -store i32 %var26, i32* %managed.unique.4.postfix_1_plus_after.xx, align 4 -%var27 = load i32* %managed.unique.4.postfix_1_plus_after.xx, align 4 -%var28 = alloca i32, align 4 -%var29 = load i32* %managed.unique.4.postfix_1_plus_after.xx, align 4 -store i32 %var29, i32* %var28, align 4 -%var30 = add nsw i32 %var27, 1 -store i32 %var30, i32* %managed.unique.4.postfix_1_plus_after.xx, align 4 -%managed.unique.5.postfix_1_plus_after.z = alloca i32, align 4 -%var31 = load i32* %managed.unique.5.postfix_1_plus_after.z, align 4 -%var32 = load i32* %var28, align 4 -store i32 %var32, i32* %managed.unique.5.postfix_1_plus_after.z, align 4 -%var33 = load i32* %managed.unique.4.postfix_1_plus_after.xx, align 4 -ret i32 %var33 -unreachable -} -define weak i32 @postfix_1_plus_before_Int(i32 %postfix_1_plus_before.x) #0 -{ -%postfix_1_plus_before.x.addr = alloca i32, align 4 -store i32 %postfix_1_plus_before.x, i32* %postfix_1_plus_before.x.addr, align 4 -%managed.unique.6.postfix_1_plus_before.xx = alloca i32, align 4 -%var34 = load i32* %managed.unique.6.postfix_1_plus_before.xx, align 4 -%var35 = load i32* %postfix_1_plus_before.x.addr, align 4 -store i32 %var35, i32* %managed.unique.6.postfix_1_plus_before.xx, align 4 -%var36 = load i32* %managed.unique.6.postfix_1_plus_before.xx, align 4 -%var37 = alloca i32, align 4 -%var38 = load i32* %managed.unique.6.postfix_1_plus_before.xx, align 4 -store i32 %var38, i32* %var37, align 4 -%var39 = add nsw i32 %var36, 1 -store i32 %var39, i32* %managed.unique.6.postfix_1_plus_before.xx, align 4 -%managed.unique.7.postfix_1_plus_before.z = alloca i32, align 4 -%var40 = load i32* %managed.unique.7.postfix_1_plus_before.z, align 4 -%var41 = load i32* %var37, align 4 -store i32 %var41, i32* %managed.unique.7.postfix_1_plus_before.z, align 4 -%var42 = load i32* %managed.unique.7.postfix_1_plus_before.z, align 4 -ret i32 %var42 -unreachable -} -define weak i32 @postfix_1_minus_after_Int(i32 %postfix_1_minus_after.x) #0 -{ -%postfix_1_minus_after.x.addr = alloca i32, align 4 -store i32 %postfix_1_minus_after.x, i32* %postfix_1_minus_after.x.addr, align 4 -%managed.unique.8.postfix_1_minus_after.xx = alloca i32, align 4 -%var43 = load i32* %managed.unique.8.postfix_1_minus_after.xx, align 4 -%var44 = load i32* %postfix_1_minus_after.x.addr, align 4 -store i32 %var44, i32* %managed.unique.8.postfix_1_minus_after.xx, align 4 -%var45 = load i32* %managed.unique.8.postfix_1_minus_after.xx, align 4 -%var46 = alloca i32, align 4 -%var47 = load i32* %managed.unique.8.postfix_1_minus_after.xx, align 4 -store i32 %var47, i32* %var46, align 4 -%var48 = sub nsw i32 %var45, 1 -store i32 %var48, i32* %managed.unique.8.postfix_1_minus_after.xx, align 4 -%managed.unique.9.postfix_1_minus_after.z = alloca i32, align 4 -%var49 = load i32* %managed.unique.9.postfix_1_minus_after.z, align 4 -%var50 = load i32* %var46, align 4 -store i32 %var50, i32* %managed.unique.9.postfix_1_minus_after.z, align 4 -%var51 = load i32* %managed.unique.8.postfix_1_minus_after.xx, align 4 -ret i32 %var51 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/postfix_1/postfix_1.txt b/experiments/translator-bc/src/test/kotlin/tests/postfix_1/postfix_1.txt deleted file mode 100644 index eca52ca3003..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/postfix_1/postfix_1.txt +++ /dev/null @@ -1,6 +0,0 @@ -postfix_1_plus_before_Int(20) == 20 -postfix_1_plus_after_Int(20) == 21 -postfix_1_plus_inside_Int(20) == 21 -postfix_1_minus_before_Int(20) == 20 -postfix_1_minus_after_Int(20) == 19 -postfix_1_minus_inside_Int(20) == 19 diff --git a/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.kt b/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.kt deleted file mode 100644 index ca3ea2ee390..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun testCastToByte(X : Byte): Boolean{ - return 34.toByte() == X -} - -fun testCastToInt(X : Int): Boolean{ - return 34.toInt() == X -} - -fun testCastToShort(X : Short): Boolean{ - return 34.toShort() == X -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.kt.err deleted file mode 100644 index b05262bbdb5..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.kt.err +++ /dev/null @@ -1,21 +0,0 @@ -Exception in thread "main" java.rmi.UnexpectedException: Int.toShort - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExtensionExpression(BlockCodegen.kt:366) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateDotBody(BlockCodegen.kt:338) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateDotExpression(BlockCodegen.kt:284) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExpression(BlockCodegen.kt:79) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateBinaryExpression(BlockCodegen.kt:682) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExpression(BlockCodegen.kt:72) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateReturnInstruction(BlockCodegen.kt:1089) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateLeafPsiElement(BlockCodegen.kt:858) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluatePsiElement(BlockCodegen.kt:849) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExpression(BlockCodegen.kt:88) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:201) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:192) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock(BlockCodegen.kt:45) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock$default(BlockCodegen.kt:42) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate(FunctionCodegen.kt:81) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate$default(FunctionCodegen.kt:72) - at org.kotlinnative.translator.ProjectTranslator.generateProjectBody(ProjectTranslator.kt:69) - at org.kotlinnative.translator.ProjectTranslator.generateCode(ProjectTranslator.kt:20) - at MainKt.main(main.kt:22) diff --git a/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.txt b/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.txt deleted file mode 100644 index 3da9e622a39..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/primitives_1/primitives_1.txt +++ /dev/null @@ -1,6 +0,0 @@ -testCastToInt_Int(32) == 0 -testCastToInt_Int(34) == 1 -testCastToByte_Byte(32) == 0 -testCastToByte_Byte(34) == 1 -testCastToShort_Short(32) == 0 -testCastToShort_Short(34) == 1 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt b/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt deleted file mode 100644 index 706ab3efe01..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt +++ /dev/null @@ -1,1073 +0,0 @@ -class CrossBranch private constructor () { - //========== Properties =========== - var errorCode: Int = 0 - - //========== Nested classes declarations =========== - class Grandfather private constructor (var rf: CrossBranch.Grandfather.RightFather) { - //========== Properties =========== - //message rf = 1 - - var errorCode: Int = 0 - - //========== Nested classes declarations =========== - class LeftFather private constructor () { - //========== Properties =========== - var errorCode: Int = 0 - - //========== Nested classes declarations =========== - class LeftLeftSon private constructor (var son_field: Int) { - //========== Properties =========== - //int32 son_field = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 son_field = 1 - if (son_field != 0) { - output.writeInt32 (1, son_field) - } - - } - - fun mergeWith (other: CrossBranch.Grandfather.LeftFather.LeftLeftSon) { - son_field = other.son_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - return size - } - - //========== Builder =========== - class BuilderLeftLeftSon constructor (var son_field: Int) { - //========== Properties =========== - //int32 son_field = 1 - fun setSon_field(value: Int): CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon { - son_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 son_field = 1 - if (son_field != 0) { - output.writeInt32 (1, son_field) - } - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.LeftFather.LeftLeftSon { - val res = CrossBranch.Grandfather.LeftFather.LeftLeftSon(son_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - son_field = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - return size - } - - } - - } - - class LeftRightSon private constructor (var son_field: Int) { - //========== Properties =========== - //int32 son_field = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 son_field = 1 - if (son_field != 0) { - output.writeInt32 (1, son_field) - } - - } - - fun mergeWith (other: CrossBranch.Grandfather.LeftFather.LeftRightSon) { - son_field = other.son_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - return size - } - - //========== Builder =========== - class BuilderLeftRightSon constructor (var son_field: Int) { - //========== Properties =========== - //int32 son_field = 1 - fun setSon_field(value: Int): CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon { - son_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 son_field = 1 - if (son_field != 0) { - output.writeInt32 (1, son_field) - } - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.LeftFather.LeftRightSon { - val res = CrossBranch.Grandfather.LeftFather.LeftRightSon(son_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - son_field = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - return size - } - - } - - } - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - } - - fun mergeWith (other: CrossBranch.Grandfather.LeftFather) { - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.LeftFather.BuilderLeftFather() - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.LeftFather.BuilderLeftFather() - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - val size = 0 - return size - } - - //========== Builder =========== - class BuilderLeftFather constructor () { - //========== Properties =========== - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.LeftFather { - val res = CrossBranch.Grandfather.LeftFather() - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.LeftFather.BuilderLeftFather { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.LeftFather.BuilderLeftFather { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - val size = 0 - return size - } - - } - - } - - class RightFather private constructor (var rls: CrossBranch.Grandfather.RightFather.RightLeftSon, var rrs: CrossBranch.Grandfather.RightFather.RightRightSon) { - //========== Properties =========== - //message rls = 1 - - //message rrs = 2 - - var errorCode: Int = 0 - - //========== Nested classes declarations =========== - class RightLeftSon private constructor (var son_field: CrossBranch.Grandfather.LeftFather.LeftLeftSon) { - //========== Properties =========== - //message son_field = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message son_field = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(son_field.getSizeNoTag()) - son_field.writeTo(output) - - } - - fun mergeWith (other: CrossBranch.Grandfather.RightFather.RightLeftSon) { - son_field = other.son_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) { - size += son_field.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) { - size += son_field.getSize(1) - } - return size - } - - //========== Builder =========== - class BuilderRightLeftSon constructor (var son_field: CrossBranch.Grandfather.LeftFather.LeftLeftSon) { - //========== Properties =========== - //message son_field = 1 - fun setSon_field(value: CrossBranch.Grandfather.LeftFather.LeftLeftSon): CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon { - son_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message son_field = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(son_field.getSizeNoTag()) - son_field.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.RightFather.RightLeftSon { - val res = CrossBranch.Grandfather.RightFather.RightLeftSon(son_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - son_field.mergeFromWithSize(input, expectedSize) - if (expectedSize != son_field.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) { - size += son_field.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) { - size += son_field.getSize(1) - } - return size - } - - } - - } - - class RightRightSon private constructor (var son_field: CrossBranch.Grandfather.LeftFather.LeftRightSon) { - //========== Properties =========== - //message son_field = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message son_field = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(son_field.getSizeNoTag()) - son_field.writeTo(output) - - } - - fun mergeWith (other: CrossBranch.Grandfather.RightFather.RightRightSon) { - son_field = other.son_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) { - size += son_field.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) { - size += son_field.getSize(1) - } - return size - } - - //========== Builder =========== - class BuilderRightRightSon constructor (var son_field: CrossBranch.Grandfather.LeftFather.LeftRightSon) { - //========== Properties =========== - //message son_field = 1 - fun setSon_field(value: CrossBranch.Grandfather.LeftFather.LeftRightSon): CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon { - son_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message son_field = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(son_field.getSizeNoTag()) - son_field.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.RightFather.RightRightSon { - val res = CrossBranch.Grandfather.RightFather.RightRightSon(son_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - son_field.mergeFromWithSize(input, expectedSize) - if (expectedSize != son_field.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) { - size += son_field.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) { - size += son_field.getSize(1) - } - return size - } - - } - - } - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message rls = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rls.getSizeNoTag()) - rls.writeTo(output) - - //message rrs = 2 - output.writeTag(2, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rrs.getSizeNoTag()) - rrs.writeTo(output) - - } - - fun mergeWith (other: CrossBranch.Grandfather.RightFather) { - rls = other.rls - rrs = other.rrs - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (rls != CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build()) { - size += rls.getSize(1) - } - if (rrs != CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) { - size += rrs.getSize(2) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (rls != CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build()) { - size += rls.getSize(1) - } - if (rrs != CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) { - size += rrs.getSize(2) - } - return size - } - - //========== Builder =========== - class BuilderRightFather constructor (var rls: CrossBranch.Grandfather.RightFather.RightLeftSon, var rrs: CrossBranch.Grandfather.RightFather.RightRightSon) { - //========== Properties =========== - //message rls = 1 - fun setRls(value: CrossBranch.Grandfather.RightFather.RightLeftSon): CrossBranch.Grandfather.RightFather.BuilderRightFather { - rls = value - return this - } - - //message rrs = 2 - fun setRrs(value: CrossBranch.Grandfather.RightFather.RightRightSon): CrossBranch.Grandfather.RightFather.BuilderRightFather { - rrs = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message rls = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rls.getSizeNoTag()) - rls.writeTo(output) - - //message rrs = 2 - output.writeTag(2, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rrs.getSizeNoTag()) - rrs.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.RightFather { - val res = CrossBranch.Grandfather.RightFather(rls, rrs) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - rls.mergeFromWithSize(input, expectedSize) - if (expectedSize != rls.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - 2 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - rrs.mergeFromWithSize(input, expectedSize) - if (expectedSize != rrs.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.RightFather.BuilderRightFather { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.RightFather.BuilderRightFather { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (rls != CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build()) { - size += rls.getSize(1) - } - if (rrs != CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) { - size += rrs.getSize(2) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (rls != CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build()) { - size += rls.getSize(1) - } - if (rrs != CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) { - size += rrs.getSize(2) - } - return size - } - - } - - } - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message rf = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rf.getSizeNoTag()) - rf.writeTo(output) - - } - - fun mergeWith (other: CrossBranch.Grandfather) { - rf = other.rf - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.BuilderGrandfather(CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.BuilderGrandfather(CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (rf != CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) { - size += rf.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (rf != CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) { - size += rf.getSize(1) - } - return size - } - - //========== Builder =========== - class BuilderGrandfather constructor (var rf: CrossBranch.Grandfather.RightFather) { - //========== Properties =========== - //message rf = 1 - fun setRf(value: CrossBranch.Grandfather.RightFather): CrossBranch.Grandfather.BuilderGrandfather { - rf = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message rf = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rf.getSizeNoTag()) - rf.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather { - val res = CrossBranch.Grandfather(rf) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - rf.mergeFromWithSize(input, expectedSize) - if (expectedSize != rf.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.BuilderGrandfather { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.BuilderGrandfather { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (rf != CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) { - size += rf.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (rf != CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) { - size += rf.getSize(1) - } - return size - } - - } - - } - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - } - - fun mergeWith (other: CrossBranch) { - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.BuilderCrossBranch() - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.BuilderCrossBranch() - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - val size = 0 - return size - } - - //========== Builder =========== - class BuilderCrossBranch constructor () { - //========== Properties =========== - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - } - - //========== Mutating methods =========== - fun build(): CrossBranch { - val res = CrossBranch() - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.BuilderCrossBranch { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.BuilderCrossBranch { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - val size = 0 - return size - } - - } - -} - -fun compareGrandfathers(lhs: CrossBranch.Grandfather, rhs: CrossBranch.Grandfather): Boolean { - return (lhs.rf.rls.son_field.son_field == rhs.rf.rls.son_field.son_field) and - (lhs.rf.rrs.son_field.son_field == rhs.rf.rrs.son_field.son_field) -} - -fun buildGrandfather(val1: Int, val2: Int): CrossBranch.Grandfather { - return CrossBranch.Grandfather.BuilderGrandfather( - CrossBranch.Grandfather.RightFather.BuilderRightFather( - CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon( - CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon( - val1 - ).build() - ).build() - , - CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon( - CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon( - val2 - ).build() - ).build() - ).build() - ).build() -} - -fun checkGFSerializationIdentity(msg: CrossBranch.Grandfather): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = buildGrandfather(0, 0) - readMsg.mergeFrom(ins) - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareGrandfathers(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun testTrivialValues(): Int { - val msg = buildGrandfather(3213213, -217864283) - return checkGFSerializationIdentity(msg) -} - -fun testMaxValues(): Int { - val msg = buildGrandfather(2147483647, 2147483647) - return checkGFSerializationIdentity(msg) -} - -fun testMinValues(): Int { - val msg = buildGrandfather(-2147483647, -2147483647) - return checkGFSerializationIdentity(msg) -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt.err b/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt.err deleted file mode 100644 index 7495c2c5986..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt.err +++ /dev/null @@ -1,152 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 25:38 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 38:47 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 43:39 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 52:33 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 54:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 54:64 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 54:99 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 61:33 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 78:42 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 93:47 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 97:43 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 98:40 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 101:52 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 112:50 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 120:42 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 129:37 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 131:33 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 131:68 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 131:103 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 138:37 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 154:38 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 167:47 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 172:39 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 181:33 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 183:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 183:64 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 183:99 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 190:33 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 207:42 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 222:47 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 226:43 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 227:40 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 230:52 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 241:50 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 249:42 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 258:37 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 260:33 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 260:68 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 260:103 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 267:37 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 277:34 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 284:43 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 289:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 297:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 297:60 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 297:95 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 312:38 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 322:43 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 326:39 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 327:36 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 334:46 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 342:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 350:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 350:64 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 350:99 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 379:38 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 381:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 392:47 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 397:39 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 408:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 408:64 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 408:99 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 432:42 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 434:44 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 447:47 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 451:43 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 452:40 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 455:52 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 470:50 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 478:42 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 489:33 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 489:68 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 489:103 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 512:38 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 514:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 525:47 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 530:39 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 541:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 541:64 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 541:99 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 565:42 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 567:44 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 580:47 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 584:43 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 585:40 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 588:52 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 603:50 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 611:42 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 622:33 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 622:68 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 622:103 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 639:34 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 641:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 646:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 658:43 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 663:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 677:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 677:60 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 677:95 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 710:38 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 712:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 717:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 730:43 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 734:39 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 735:36 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 738:48 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 749:48 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 764:46 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 772:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 786:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 786:64 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 786:99 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 806:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 808:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 819:39 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 824:31 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 835:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 835:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 835:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 859:34 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 861:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 874:39 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 878:35 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 879:32 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 882:44 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 897:42 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 905:34 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 916:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 916:60 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 916:95 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 933:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 940:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 945:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 953:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 953:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 953:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 968:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 978:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 982:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 983:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 990:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 998:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 1006:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 1006:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 1006:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 1043:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_crossbranch_test/proto_crossbranch_test.kt 1046:15 Unresolved reference: CodedInputStream -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt.out b/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.txt b/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.txt deleted file mode 100644 index 5587dda54e7..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.txt +++ /dev/null @@ -1,3 +0,0 @@ -testTrivialValues() == 0 -testMaxValues() == 0 -testMinValues() == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.kt b/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.kt deleted file mode 100644 index d15fbba9d83..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.kt +++ /dev/null @@ -1,466 +0,0 @@ -class LocationResponse private constructor (var locationResponseData: LocationResponse.LocationData, var code: Int, var errorMsg: Int) { - //========== Properties =========== - //message locationResponseData = 1 - - //int32 code = 2 - - //int32 errorMsg = 3 - - var errorCode: Int = 0 - - //========== Nested classes declarations =========== - class LocationData private constructor (var x: Int, var y: Int, var angle: Int) { - //========== Properties =========== - //int32 x = 1 - - //int32 y = 2 - - //int32 angle = 3 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 x = 1 - if (x != 0) { - output.writeInt32 (1, x) - } - - //int32 y = 2 - if (y != 0) { - output.writeInt32 (2, y) - } - - //int32 angle = 3 - if (angle != 0) { - output.writeInt32 (3, angle) - } - - } - - fun mergeWith (other: LocationResponse.LocationData) { - x = other.x - y = other.y - angle = other.angle - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = LocationResponse.LocationData.BuilderLocationData(0, 0, 0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = LocationResponse.LocationData.BuilderLocationData(0, 0, 0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (x != 0) { - size += WireFormat.getInt32Size(1, x) - } - if (y != 0) { - size += WireFormat.getInt32Size(2, y) - } - if (angle != 0) { - size += WireFormat.getInt32Size(3, angle) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (x != 0) { - size += WireFormat.getInt32Size(1, x) - } - if (y != 0) { - size += WireFormat.getInt32Size(2, y) - } - if (angle != 0) { - size += WireFormat.getInt32Size(3, angle) - } - return size - } - - //========== Builder =========== - class BuilderLocationData constructor (var x: Int, var y: Int, var angle: Int) { - //========== Properties =========== - //int32 x = 1 - fun setX(value: Int): LocationResponse.LocationData.BuilderLocationData { - x = value - return this - } - - //int32 y = 2 - fun setY(value: Int): LocationResponse.LocationData.BuilderLocationData { - y = value - return this - } - - //int32 angle = 3 - fun setAngle(value: Int): LocationResponse.LocationData.BuilderLocationData { - angle = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 x = 1 - if (x != 0) { - output.writeInt32 (1, x) - } - - //int32 y = 2 - if (y != 0) { - output.writeInt32 (2, y) - } - - //int32 angle = 3 - if (angle != 0) { - output.writeInt32 (3, angle) - } - - } - - //========== Mutating methods =========== - fun build(): LocationResponse.LocationData { - val res = LocationResponse.LocationData(x, y, angle) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - x = input.readInt32NoTag() - } - 2 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - y = input.readInt32NoTag() - } - 3 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - angle = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): LocationResponse.LocationData.BuilderLocationData { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): LocationResponse.LocationData.BuilderLocationData { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (x != 0) { - size += WireFormat.getInt32Size(1, x) - } - if (y != 0) { - size += WireFormat.getInt32Size(2, y) - } - if (angle != 0) { - size += WireFormat.getInt32Size(3, angle) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (x != 0) { - size += WireFormat.getInt32Size(1, x) - } - if (y != 0) { - size += WireFormat.getInt32Size(2, y) - } - if (angle != 0) { - size += WireFormat.getInt32Size(3, angle) - } - return size - } - - } - - } - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message locationResponseData = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(locationResponseData.getSizeNoTag()) - locationResponseData.writeTo(output) - - //int32 code = 2 - if (code != 0) { - output.writeInt32 (2, code) - } - - //int32 errorMsg = 3 - if (errorMsg != 0) { - output.writeInt32 (3, errorMsg) - } - - } - - fun mergeWith (other: LocationResponse) { - locationResponseData = other.locationResponseData - code = other.code - errorMsg = other.errorMsg - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = LocationResponse.BuilderLocationResponse(LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build(), 0, 0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = LocationResponse.BuilderLocationResponse(LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build(), 0, 0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (locationResponseData != LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build()) { - size += locationResponseData.getSize(1) - } - if (code != 0) { - size += WireFormat.getInt32Size(2, code) - } - if (errorMsg != 0) { - size += WireFormat.getInt32Size(3, errorMsg) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (locationResponseData != LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build()) { - size += locationResponseData.getSize(1) - } - if (code != 0) { - size += WireFormat.getInt32Size(2, code) - } - if (errorMsg != 0) { - size += WireFormat.getInt32Size(3, errorMsg) - } - return size - } - - //========== Builder =========== - class BuilderLocationResponse constructor (var locationResponseData: LocationResponse.LocationData, var code: Int, var errorMsg: Int) { - //========== Properties =========== - //message locationResponseData = 1 - fun setLocationResponseData(value: LocationResponse.LocationData): LocationResponse.BuilderLocationResponse { - locationResponseData = value - return this - } - - //int32 code = 2 - fun setCode(value: Int): LocationResponse.BuilderLocationResponse { - code = value - return this - } - - //int32 errorMsg = 3 - fun setErrorMsg(value: Int): LocationResponse.BuilderLocationResponse { - errorMsg = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message locationResponseData = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(locationResponseData.getSizeNoTag()) - locationResponseData.writeTo(output) - - //int32 code = 2 - if (code != 0) { - output.writeInt32 (2, code) - } - - //int32 errorMsg = 3 - if (errorMsg != 0) { - output.writeInt32 (3, errorMsg) - } - - } - - //========== Mutating methods =========== - fun build(): LocationResponse { - val res = LocationResponse(locationResponseData, code, errorMsg) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - locationResponseData.mergeFromWithSize(input, expectedSize) - if (expectedSize != locationResponseData.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - 2 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - code = input.readInt32NoTag() - } - 3 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - errorMsg = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): LocationResponse.BuilderLocationResponse { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): LocationResponse.BuilderLocationResponse { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (locationResponseData != LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build()) { - size += locationResponseData.getSize(1) - } - if (code != 0) { - size += WireFormat.getInt32Size(2, code) - } - if (errorMsg != 0) { - size += WireFormat.getInt32Size(3, errorMsg) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (locationResponseData != LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build()) { - size += locationResponseData.getSize(1) - } - if (code != 0) { - size += WireFormat.getInt32Size(2, code) - } - if (errorMsg != 0) { - size += WireFormat.getInt32Size(3, errorMsg) - } - return size - } - - } - -} - -fun compareLocationDatas(lhs: LocationResponse.LocationData, rhs: LocationResponse.LocationData): Boolean { - return (lhs.angle == rhs.angle) and (lhs.x == rhs.x) and (lhs.y == rhs.y) -} - -fun compareLocationResponses(lhs: LocationResponse, rhs: LocationResponse): Boolean { - return (lhs.code == rhs.code) and - (lhs.errorMsg == rhs.errorMsg) and - compareLocationDatas(lhs.locationResponseData, rhs.locationResponseData) -} - -fun buildLocationResponse(code: Int, errorMsg: Int, angle: Int, x: Int, y: Int): LocationResponse.BuilderLocationResponse { - return LocationResponse.BuilderLocationResponse( - LocationResponse.LocationData.BuilderLocationData( - x, y, angle - ).build(), - code, - errorMsg - ) -} - -fun checkLocationResponse(msg: LocationResponse): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = buildLocationResponse(0, 0, 0, 0, 0).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareLocationResponses(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun testTrivialLocationResponse(): Int { - val msg = buildLocationResponse(3125321, -12673123, 4334, 423542673, 234516534).build() - return checkLocationResponse(msg) -} - -fun testMaxLocationResponse(): Int { - val msg = buildLocationResponse(2147483647, 2147483647, 2147483647, 2147483647, 2147483647).build() - return checkLocationResponse(msg) -} - -fun testMinLocationResponse(): Int { - val msg = buildLocationResponse(-2147483647, -2147483647, -2147483647, -2147483647, -2147483647).build() - return checkLocationResponse(msg) -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.kt.err b/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.kt.err deleted file mode 100644 index 470dca419e2..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.kt.err +++ /dev/null @@ -1,65 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 23:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 48:39 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 53:31 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 62:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 65:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 68:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 70:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 70:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 70:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 77:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 80:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 83:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 112:34 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 137:39 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 141:35 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 142:32 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 145:44 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 152:44 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 159:44 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 170:42 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 178:34 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 187:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 190:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 193:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 195:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 195:60 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 195:95 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 202:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 205:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 208:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 218:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 220:28 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 243:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 248:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 260:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 263:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 265:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 265:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 265:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 275:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 278:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 307:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 309:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 332:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 336:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 337:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 340:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 351:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 358:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 369:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 377:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 389:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 392:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 394:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 394:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 394:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 404:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 407:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 437:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_location_test/proto_location_test.kt 440:15 Unresolved reference: CodedInputStream -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.kt.out b/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.txt b/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.txt deleted file mode 100644 index 1d001fca6b8..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_location_test/proto_location_test.txt +++ /dev/null @@ -1,3 +0,0 @@ -testTrivialLocationResponse() == 0 -testMaxLocationResponse() == 0 -testMinLocationResponse() == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt b/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt deleted file mode 100644 index d29b594db5f..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt +++ /dev/null @@ -1,495 +0,0 @@ -class ThirdMessage private constructor (var second_msg: SecondMessage) { - //========== Properties =========== - //message second_msg = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message second_msg = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(second_msg.getSizeNoTag()) - second_msg.writeTo(output) - - } - - fun mergeWith (other: ThirdMessage) { - second_msg = other.second_msg - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = ThirdMessage.BuilderThirdMessage(SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = ThirdMessage.BuilderThirdMessage(SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (second_msg != SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) { - size += second_msg.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (second_msg != SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) { - size += second_msg.getSize(1) - } - return size - } - - //========== Builder =========== - class BuilderThirdMessage constructor (var second_msg: SecondMessage) { - //========== Properties =========== - //message second_msg = 1 - fun setSecond_msg(value: SecondMessage): ThirdMessage.BuilderThirdMessage { - second_msg = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message second_msg = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(second_msg.getSizeNoTag()) - second_msg.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): ThirdMessage { - val res = ThirdMessage(second_msg) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - second_msg.mergeFromWithSize(input, expectedSize) - if (expectedSize != second_msg.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): ThirdMessage.BuilderThirdMessage { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): ThirdMessage.BuilderThirdMessage { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (second_msg != SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) { - size += second_msg.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (second_msg != SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) { - size += second_msg.getSize(1) - } - return size - } - - } - -} - -class SecondMessage private constructor (var first_msg: FirstMessage) { - //========== Properties =========== - //message first_msg = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message first_msg = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(first_msg.getSizeNoTag()) - first_msg.writeTo(output) - - } - - fun mergeWith (other: SecondMessage) { - first_msg = other.first_msg - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (first_msg != FirstMessage.BuilderFirstMessage(0).build()) { - size += first_msg.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (first_msg != FirstMessage.BuilderFirstMessage(0).build()) { - size += first_msg.getSize(1) - } - return size - } - - //========== Builder =========== - class BuilderSecondMessage constructor (var first_msg: FirstMessage) { - //========== Properties =========== - //message first_msg = 1 - fun setFirst_msg(value: FirstMessage): SecondMessage.BuilderSecondMessage { - first_msg = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message first_msg = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(first_msg.getSizeNoTag()) - first_msg.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): SecondMessage { - val res = SecondMessage(first_msg) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - first_msg.mergeFromWithSize(input, expectedSize) - if (expectedSize != first_msg.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): SecondMessage.BuilderSecondMessage { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): SecondMessage.BuilderSecondMessage { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (first_msg != FirstMessage.BuilderFirstMessage(0).build()) { - size += first_msg.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (first_msg != FirstMessage.BuilderFirstMessage(0).build()) { - size += first_msg.getSize(1) - } - return size - } - - } - -} - -class FirstMessage private constructor (var int_field: Int) { - //========== Properties =========== - //int32 int_field = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 int_field = 1 - if (int_field != 0) { - output.writeInt32 (1, int_field) - } - - } - - fun mergeWith (other: FirstMessage) { - int_field = other.int_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = FirstMessage.BuilderFirstMessage(0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = FirstMessage.BuilderFirstMessage(0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int_field != 0) { - size += WireFormat.getInt32Size(1, int_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int_field != 0) { - size += WireFormat.getInt32Size(1, int_field) - } - return size - } - - //========== Builder =========== - class BuilderFirstMessage constructor (var int_field: Int) { - //========== Properties =========== - //int32 int_field = 1 - fun setInt_field(value: Int): FirstMessage.BuilderFirstMessage { - int_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 int_field = 1 - if (int_field != 0) { - output.writeInt32 (1, int_field) - } - - } - - //========== Mutating methods =========== - fun build(): FirstMessage { - val res = FirstMessage(int_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - int_field = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): FirstMessage.BuilderFirstMessage { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): FirstMessage.BuilderFirstMessage { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int_field != 0) { - size += WireFormat.getInt32Size(1, int_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int_field != 0) { - size += WireFormat.getInt32Size(1, int_field) - } - return size - } - - } - -} - -fun compareThirdMessages(kt1: ThirdMessage, kt2: ThirdMessage): Boolean { - return kt1.second_msg.first_msg.int_field == kt2.second_msg.first_msg.int_field -} - -fun compareSecondMessages(lhs: SecondMessage, rhs: SecondMessage): Boolean { - return lhs.first_msg.int_field == rhs.first_msg.int_field -} - -fun compareFirstMessages(lhs: FirstMessage, rhs: FirstMessage): Boolean { - return lhs.int_field == rhs.int_field -} - -fun buildThirdMessage(value: Int): ThirdMessage.BuilderThirdMessage { - return ThirdMessage.BuilderThirdMessage( - SecondMessage.BuilderSecondMessage( - FirstMessage.BuilderFirstMessage( - value - ).build() - ).build() - ) -} - -fun buildSecondMessage(value: Int): SecondMessage.BuilderSecondMessage { - return SecondMessage.BuilderSecondMessage( - FirstMessage.BuilderFirstMessage( - value - ).build() - ) -} - -fun buildFirstMessage(value: Int): FirstMessage.BuilderFirstMessage { - return FirstMessage.BuilderFirstMessage(value) -} - -fun checkThird(msg: ThirdMessage): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = buildThirdMessage(0).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareThirdMessages(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun checkSecond(msg: SecondMessage): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = buildSecondMessage(0).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareSecondMessages(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun checkFirst(msg: FirstMessage): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = buildFirstMessage(0).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareFirstMessages(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun testThirdCase(): Int { - val msg = buildThirdMessage(5).build() - return checkThird(msg) -} - -fun testSecondCase(): Int { - val msg = buildSecondMessage(-31241501).build() - return checkSecond(msg) -} - -fun testFirstCase(): Int { - val msg = buildFirstMessage(321311430).build() - return checkFirst(msg) -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt.err b/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt.err deleted file mode 100644 index e31f8913369..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt.err +++ /dev/null @@ -1,67 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 8:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 10:28 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 21:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 26:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 37:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 37:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 37:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 61:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 63:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 76:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 80:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 81:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 84:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 99:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 107:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 118:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 118:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 118:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 141:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 143:28 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 154:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 159:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 170:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 170:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 170:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 194:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 196:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 209:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 213:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 214:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 217:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 232:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 240:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 251:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 251:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 251:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 274:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 287:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 292:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 301:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 303:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 303:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 303:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 310:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 327:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 342:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 346:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 347:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 350:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 361:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 369:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 378:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 380:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 380:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 380:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 387:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 431:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 434:15 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 448:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 451:15 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 465:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_multiple_messages/proto_multiple_messages.kt 468:15 Unresolved reference: CodedInputStream -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt.out b/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.txt b/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.txt deleted file mode 100644 index 9c2f4ecabd7..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.txt +++ /dev/null @@ -1,3 +0,0 @@ -testThirdCase() == 0 -testSecondCase() == 0 -testFirstCase() == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt b/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt deleted file mode 100644 index 5f90d979678..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt +++ /dev/null @@ -1,1365 +0,0 @@ -class MessageRepeatedVarints private constructor (var int: IntArray, var long: LongArray, var sint: IntArray, var slong: LongArray, var bl: BooleanArray, var uint: IntArray, var ulong: LongArray) { - //========== Properties =========== - //repeated int32 int = 1 - - //repeated int64 long = 2 - - //repeated sint32 sint = 3 - - //repeated sint64 slong = 4 - - //repeated bool bl = 5 - - //repeated uint32 uint = 7 - - //repeated uint64 ulong = 8 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated int32 int = 1 - if (int.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (int.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < int.size) { - output.writeInt32NoTag (int[i]) - i += 1 - } - } while(false) - } - - //repeated int64 long = 2 - if (long.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (long.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < long.size) { - output.writeInt64NoTag (long[i]) - i += 1 - } - } while(false) - } - - //repeated sint32 sint = 3 - if (sint.size > 0) { - output.writeTag(3, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (sint.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < sint.size) { - output.writeSInt32NoTag (sint[i]) - i += 1 - } - } while(false) - } - - //repeated sint64 slong = 4 - if (slong.size > 0) { - output.writeTag(4, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong.size) { - output.writeSInt64NoTag (slong[i]) - i += 1 - } - } while(false) - } - - //repeated bool bl = 5 - if (bl.size > 0) { - output.writeTag(5, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (bl.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < bl.size) { - output.writeBoolNoTag (bl[i]) - i += 1 - } - } while(false) - } - - //repeated uint32 uint = 7 - if (uint.size > 0) { - output.writeTag(7, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (uint.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < uint.size) { - output.writeUInt32NoTag (uint[i]) - i += 1 - } - } while(false) - } - - //repeated uint64 ulong = 8 - if (ulong.size > 0) { - output.writeTag(8, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (ulong.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < ulong.size) { - output.writeUInt64NoTag (ulong[i]) - i += 1 - } - } while(false) - } - - } - - fun mergeWith (other: MessageRepeatedVarints) { - int = int.plus((other.int)) - long = long.plus((other.long)) - sint = sint.plus((other.sint)) - slong = slong.plus((other.slong)) - bl = bl.plus((other.bl)) - uint = uint.plus((other.uint)) - ulong = ulong.plus((other.ulong)) - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = MessageRepeatedVarints.BuilderMessageRepeatedVarints(IntArray(0), LongArray(0), IntArray(0), LongArray(0), BooleanArray(0), IntArray(0), LongArray(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = MessageRepeatedVarints.BuilderMessageRepeatedVarints(IntArray(0), LongArray(0), IntArray(0), LongArray(0), BooleanArray(0), IntArray(0), LongArray(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (sint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(3, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (slong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(4, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (bl.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(5, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (uint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(7, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (ulong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(8, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (sint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(3, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (slong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(4, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (bl.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(5, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (uint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(7, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (ulong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(8, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - //========== Builder =========== - class BuilderMessageRepeatedVarints constructor (var int: IntArray, var long: LongArray, var sint: IntArray, var slong: LongArray, var bl: BooleanArray, var uint: IntArray, var ulong: LongArray) { - //========== Properties =========== - //repeated int32 int = 1 - fun setInt(value: IntArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - int = value - return this - } - fun setintByIndex(index: Int, value: Int): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - int[index] = value - return this - } - - //repeated int64 long = 2 - fun setLong(value: LongArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - long = value - return this - } - fun setlongByIndex(index: Int, value: Long): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - long[index] = value - return this - } - - //repeated sint32 sint = 3 - fun setSint(value: IntArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - sint = value - return this - } - fun setsintByIndex(index: Int, value: Int): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - sint[index] = value - return this - } - - //repeated sint64 slong = 4 - fun setSlong(value: LongArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - slong = value - return this - } - fun setslongByIndex(index: Int, value: Long): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - slong[index] = value - return this - } - - //repeated bool bl = 5 - fun setBl(value: BooleanArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - bl = value - return this - } - fun setblByIndex(index: Int, value: Boolean): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - bl[index] = value - return this - } - - //repeated uint32 uint = 7 - fun setUint(value: IntArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - uint = value - return this - } - fun setuintByIndex(index: Int, value: Int): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - uint[index] = value - return this - } - - //repeated uint64 ulong = 8 - fun setUlong(value: LongArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - ulong = value - return this - } - fun setulongByIndex(index: Int, value: Long): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - ulong[index] = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated int32 int = 1 - if (int.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (int.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < int.size) { - output.writeInt32NoTag (int[i]) - i += 1 - } - } while(false) - } - - //repeated int64 long = 2 - if (long.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (long.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < long.size) { - output.writeInt64NoTag (long[i]) - i += 1 - } - } while(false) - } - - //repeated sint32 sint = 3 - if (sint.size > 0) { - output.writeTag(3, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (sint.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < sint.size) { - output.writeSInt32NoTag (sint[i]) - i += 1 - } - } while(false) - } - - //repeated sint64 slong = 4 - if (slong.size > 0) { - output.writeTag(4, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong.size) { - output.writeSInt64NoTag (slong[i]) - i += 1 - } - } while(false) - } - - //repeated bool bl = 5 - if (bl.size > 0) { - output.writeTag(5, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (bl.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < bl.size) { - output.writeBoolNoTag (bl[i]) - i += 1 - } - } while(false) - } - - //repeated uint32 uint = 7 - if (uint.size > 0) { - output.writeTag(7, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (uint.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < uint.size) { - output.writeUInt32NoTag (uint[i]) - i += 1 - } - } while(false) - } - - //repeated uint64 ulong = 8 - if (ulong.size > 0) { - output.writeTag(8, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (ulong.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < ulong.size) { - output.writeUInt64NoTag (ulong[i]) - i += 1 - } - } while(false) - } - - } - - //========== Mutating methods =========== - fun build(): MessageRepeatedVarints { - val res = MessageRepeatedVarints(int, long, sint, slong, bl, uint, ulong) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0 - tmp = input.readInt32NoTag() - arraySize += 1 - readSize += WireFormat.getInt32SizeNoTag(tmp) - } - } while (false) - val newArray = IntArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readInt32NoTag() - i += 1 - } - int = newArray - } while (false) - } - 2 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0L - tmp = input.readInt64NoTag() - arraySize += 1 - readSize += WireFormat.getInt64SizeNoTag(tmp) - } - } while (false) - val newArray = LongArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readInt64NoTag() - i += 1 - } - long = newArray - } while (false) - } - 3 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0 - tmp = input.readSInt32NoTag() - arraySize += 1 - readSize += WireFormat.getSInt32SizeNoTag(tmp) - } - } while (false) - val newArray = IntArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readSInt32NoTag() - i += 1 - } - sint = newArray - } while (false) - } - 4 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0L - tmp = input.readSInt64NoTag() - arraySize += 1 - readSize += WireFormat.getSInt64SizeNoTag(tmp) - } - } while (false) - val newArray = LongArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readSInt64NoTag() - i += 1 - } - slong = newArray - } while (false) - } - 5 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = false - tmp = input.readBoolNoTag() - arraySize += 1 - readSize += WireFormat.getBoolSizeNoTag(tmp) - } - } while (false) - val newArray = BooleanArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readBoolNoTag() - i += 1 - } - bl = newArray - } while (false) - } - 7 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0 - tmp = input.readUInt32NoTag() - arraySize += 1 - readSize += WireFormat.getUInt32SizeNoTag(tmp) - } - } while (false) - val newArray = IntArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readUInt32NoTag() - i += 1 - } - uint = newArray - } while (false) - } - 8 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0L - tmp = input.readUInt64NoTag() - arraySize += 1 - readSize += WireFormat.getUInt64SizeNoTag(tmp) - } - } while (false) - val newArray = LongArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readUInt64NoTag() - i += 1 - } - ulong = newArray - } while (false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (sint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(3, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (slong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(4, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (bl.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(5, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (uint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(7, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (ulong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(8, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (sint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(3, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (slong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(4, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (bl.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(5, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (uint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(7, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (ulong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(8, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - } - -} - -fun compareIntArrays(lhs: IntArray, rhs: IntArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareLongArrays(lhs: LongArray, rhs: LongArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareBooleanArrays(lhs: BooleanArray, rhs: BooleanArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareRepeatedVarints(kt1: MessageRepeatedVarints, kt2: MessageRepeatedVarints): Boolean { - return compareIntArrays(kt1.int, kt2.int) and - compareLongArrays(kt1.long, kt2.long) and - compareIntArrays(kt1.sint, kt2.sint) and - compareLongArrays(kt1.slong, kt2.slong) and - compareBooleanArrays(kt1.bl, kt2.bl) and - compareIntArrays(kt1.uint, kt2.uint) and - compareLongArrays(kt1.ulong, kt2.ulong) -} - -fun checkRepSerializationIdentity(msg: MessageRepeatedVarints): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = MessageRepeatedVarints.BuilderMessageRepeatedVarints( - IntArray(0), - LongArray(0), - IntArray(0), - LongArray(0), - BooleanArray(0), - IntArray(0), - LongArray(0) - ).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareRepeatedVarints(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - - -object Rng { - var rngState = 0.6938893903907228 - - val point = 762939453125 - fun rng(): Double { - rngState *= point.toDouble() - rngState -= rngState.toLong().toDouble() - return rngState - } -} - -fun nextInt(minVal: Int, maxVal: Int): Int { - return (Rng.rng() * (maxVal - minVal + 1).toDouble()).toInt() -} - -fun nextLong(): Long { - val lowerHalf = nextInt(-2147483647, 2147483647) - val upperHalf = nextInt(-2147483647, 2147483647) - return (upperHalf.toLong() shl 32) + lowerHalf.toLong() -} - -fun generateIntArray(): IntArray { - val size = nextInt(0, 10000) - val arr = IntArray(size) - var i = 0 - while (i < size) { - arr[i] = nextInt(-2147483647, 2147483647) - i += 1 - } - return arr -} - -fun generateLongArray(): LongArray { - val size = nextInt(0, 10000) - val arr = LongArray(size) - var i = 0 - while (i < size) { - arr[i] = nextLong() - i += 1 - } - return arr -} - - -fun nextBool(): Boolean { - val int = nextInt(-2147483647, 2147483647) - if (int and 1 == 1) { - return true - } - return false -} - -fun generateBooleanArray(): BooleanArray { - val size = nextInt(0, 10000) - val arr = BooleanArray(size) - var i = 0 - while (i < size) { - arr[i] = nextBool() - i += 1 - } - return arr -} - -fun generateRandomMessage(): MessageRepeatedVarints { - return MessageRepeatedVarints.BuilderMessageRepeatedVarints( - generateIntArray(), - generateLongArray(), - generateIntArray(), - generateLongArray(), - generateBooleanArray(), - generateIntArray(), - generateLongArray() - ).build() -} - -fun testRepVarints(): Int { - var i = 0 - val testRuns = 100 - while (i < testRuns) { - val msg = generateRandomMessage() - if (checkRepSerializationIdentity(msg) == 1) { - return 1 - } - i += 1 - } - return 0 -} - -fun testArraysOfMinValues(): Int { - val intArr = IntArray(100) - var i = 0 - while (i < 100) { - intArr[i] = -2147483647 - i += 1 - } - - val longArr = LongArray(100) - i = 0 - while (i < 100) { - longArr[i] = -9223372036854775807L - i += 1 - } - - val boolArr = BooleanArray(100) - i = 1 - while (i < 100) { - boolArr[i] = false - i += 1 - } - - val msg = MessageRepeatedVarints.BuilderMessageRepeatedVarints( - intArr, longArr, intArr, longArr, boolArr, intArr, longArr - ).build() - return checkRepSerializationIdentity(msg) -} - -fun testArraysOfMaxValues(): Int { - val intArr = IntArray(100) - var i = 0 - while (i < 100) { - intArr[i] = 2147483647 - i += 1 - } - - val longArr = LongArray(100) - i = 0 - while (i < 100) { - longArr[i] = 9223372036854775807L - i += 1 - } - - val boolArr = BooleanArray(100) - i = 1 - while (i < 100) { - boolArr[i] = true - i += 1 - } - - val msg = MessageRepeatedVarints.BuilderMessageRepeatedVarints( - intArr, longArr, intArr, longArr, boolArr, intArr, longArr - ).build() - return checkRepSerializationIdentity(msg) -} - -fun testArraysOfDefaultValues(): Int { - val intArr = IntArray(100) - - val longArr = LongArray(100) - - val boolArr = BooleanArray(100) - - val msg = MessageRepeatedVarints.BuilderMessageRepeatedVarints( - intArr, longArr, intArr, longArr, boolArr, intArr, longArr - ).build() - - return checkRepSerializationIdentity(msg) -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt.err b/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt.err deleted file mode 100644 index 8181eddee74..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt.err +++ /dev/null @@ -1,190 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 20:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 23:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 31:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 50:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 58:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 77:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 85:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 104:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 112:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 131:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 139:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 158:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 166:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 185:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 193:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 213:19 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 214:21 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 215:21 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 216:23 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 217:17 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 218:21 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 219:23 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 223:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 228:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 239:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 239:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 242:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 246:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 252:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 252:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 255:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 259:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 265:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 265:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 268:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 272:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 278:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 278:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 281:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 285:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 291:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 291:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 294:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 298:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 304:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 304:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 307:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 311:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 317:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 317:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 320:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 324:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 327:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 327:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 327:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 336:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 336:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 339:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 343:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 349:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 349:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 352:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 356:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 362:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 362:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 365:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 369:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 375:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 375:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 378:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 382:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 388:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 388:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 391:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 395:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 401:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 401:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 404:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 408:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 414:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 414:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 417:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 421:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 503:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 506:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 514:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 533:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 541:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 560:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 568:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 587:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 595:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 614:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 622:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 641:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 649:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 668:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 676:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 702:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 706:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 707:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 710:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 724:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 739:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 753:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 768:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 782:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 797:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 811:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 826:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 840:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 855:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 869:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 884:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 898:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 917:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 925:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 936:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 936:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 939:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 943:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 949:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 949:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 952:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 956:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 962:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 962:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 965:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 969:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 975:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 975:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 978:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 982:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 988:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 988:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 991:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 995:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1001:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1001:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1004:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1008:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1014:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1014:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1017:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1021:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1024:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1024:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1024:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1033:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1033:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1036:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1040:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1046:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1046:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1049:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1053:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1059:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1059:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1062:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1066:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1072:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1072:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1075:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1079:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1085:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1085:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1088:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1092:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1098:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1098:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1101:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1105:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1111:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1111:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1114:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1118:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1184:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_varint/proto_repeated_varint.kt 1187:15 Unresolved reference: CodedInputStream -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt.out b/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.txt b/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.txt deleted file mode 100644 index d5e5ffa9e09..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.txt +++ /dev/null @@ -1,4 +0,0 @@ -testArraysOfDefaultValues() == 0 -testArraysOfMinValues() == 0 -testArraysOfMaxValues() == 0 -testRepVarints() == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt b/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt deleted file mode 100644 index 9973ce5a2a7..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt +++ /dev/null @@ -1,567 +0,0 @@ -class MessageRepeatedZigZag private constructor (var int: IntArray, var long: LongArray) { - //========== Properties =========== - //repeated sint32 int = 1 - - //repeated sint64 long = 2 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated sint32 int = 1 - if (int.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (int.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < int.size) { - output.writeSInt32NoTag (int[i]) - i += 1 - } - } while(false) - } - - //repeated sint64 long = 2 - if (long.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (long.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < long.size) { - output.writeSInt64NoTag (long[i]) - i += 1 - } - } while(false) - } - - } - - fun mergeWith (other: MessageRepeatedZigZag) { - int = int.plus((other.int)) - long = long.plus((other.long)) - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag(IntArray(0), LongArray(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag(IntArray(0), LongArray(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - //========== Builder =========== - class BuilderMessageRepeatedZigZag constructor (var int: IntArray, var long: LongArray) { - //========== Properties =========== - //repeated sint32 int = 1 - fun setInt(value: IntArray): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - int = value - return this - } - fun setintByIndex(index: Int, value: Int): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - int[index] = value - return this - } - - //repeated sint64 long = 2 - fun setLong(value: LongArray): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - long = value - return this - } - fun setlongByIndex(index: Int, value: Long): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - long[index] = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated sint32 int = 1 - if (int.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (int.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < int.size) { - output.writeSInt32NoTag (int[i]) - i += 1 - } - } while(false) - } - - //repeated sint64 long = 2 - if (long.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (long.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < long.size) { - output.writeSInt64NoTag (long[i]) - i += 1 - } - } while(false) - } - - } - - //========== Mutating methods =========== - fun build(): MessageRepeatedZigZag { - val res = MessageRepeatedZigZag(int, long) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0 - tmp = input.readSInt32NoTag() - arraySize += 1 - readSize += WireFormat.getSInt32SizeNoTag(tmp) - } - } while (false) - val newArray = IntArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readSInt32NoTag() - i += 1 - } - int = newArray - } while (false) - } - 2 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0L - tmp = input.readSInt64NoTag() - arraySize += 1 - readSize += WireFormat.getSInt64SizeNoTag(tmp) - } - } while (false) - val newArray = LongArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readSInt64NoTag() - i += 1 - } - long = newArray - } while (false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - } - -} - -fun compareIntArrays(lhs: IntArray, rhs: IntArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareLongArrays(lhs: LongArray, rhs: LongArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareBooleanArrays(lhs: BooleanArray, rhs: BooleanArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareRepeatedZigZags(kt1: MessageRepeatedZigZag, kt2: MessageRepeatedZigZag): Boolean { - return compareIntArrays(kt1.int, kt2.int) and - compareLongArrays(kt1.long, kt2.long) -} - -fun checkRepZZSerializationIdentity(msg: MessageRepeatedZigZag): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag( - IntArray(0), - LongArray(0) - ).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareRepeatedZigZags(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - - -object Rng { - var rngState = 0.6938893903907228 - - val point = 762939453125 - fun rng(): Double { - rngState *= point.toDouble() - rngState -= rngState.toLong().toDouble() - return rngState - } -} - -fun nextInt(minVal: Int, maxVal: Int): Int { - return (Rng.rng() * (maxVal - minVal + 1).toDouble()).toInt() -} - -fun nextLong(): Long { - val lowerHalf = nextInt(-2147483647, 2147483647) - val upperHalf = nextInt(-2147483647, 2147483647) - return (upperHalf.toLong() shl 32) + lowerHalf.toLong() -} - -fun generateIntArray(): IntArray { - val size = nextInt(0, 10000) - val arr = IntArray(size) - var i = 0 - while (i < size) { - arr[i] = nextInt(-2147483647, 2147483647) - i += 1 - } - return arr -} - -fun generateLongArray(): LongArray { - val size = nextInt(0, 10000) - val arr = LongArray(size) - var i = 0 - while (i < size) { - arr[i] = nextLong() - i += 1 - } - return arr -} - -fun generateRandomMessage(): MessageRepeatedZigZag { - return MessageRepeatedZigZag.BuilderMessageRepeatedZigZag( - generateIntArray(), - generateLongArray() - ).build() -} - -fun testRepZigZag(): Int { - var i = 0 - val testRuns = 8 - while (i < testRuns) { - val msg = generateRandomMessage() - if (checkRepZZSerializationIdentity(msg) == 1) { - return 1 - } - i += 1 - } - return 0 -} - -fun testArraysOfMinValues(): Int { - val intArr = IntArray(100) - var i = 0 - while (i < 100) { - intArr[i] = -2147483647 - i += 1 - } - - val longArr = LongArray(100) - i = 0 - while (i < 100) { - longArr[i] = -9223372036854775807L - i += 1 - } - - val msg = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag(intArr, longArr).build() - return checkRepZZSerializationIdentity(msg) -} - -fun testArraysOfMaxValues(): Int { - val intArr = IntArray(100) - var i = 0 - while (i < 100) { - intArr[i] = 2147483647 - i += 1 - } - - val longArr = LongArray(100) - i = 0 - while (i < 100) { - longArr[i] = 9223372036854775807L - i += 1 - } - - val msg = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag(intArr, longArr).build() - return checkRepZZSerializationIdentity(msg) -} - -fun testArraysOfDefaultValues(): Int { - val intArr = IntArray(100) - - val longArr = LongArray(100) - - val msg = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag(intArr, longArr).build() - return checkRepZZSerializationIdentity(msg) -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt.err b/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt.err deleted file mode 100644 index 68c18b4d52d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt.err +++ /dev/null @@ -1,70 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 10:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 13:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 21:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 40:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 48:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 68:19 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 69:21 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 73:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 78:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 89:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 89:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 92:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 96:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 102:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 102:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 105:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 109:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 112:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 112:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 112:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 121:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 121:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 124:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 128:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 134:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 134:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 137:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 141:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 173:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 176:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 184:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 203:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 211:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 237:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 241:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 242:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 245:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 259:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 274:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 288:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 307:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 315:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 326:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 326:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 329:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 333:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 339:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 339:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 342:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 346:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 349:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 349:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 349:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 358:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 358:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 361:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 365:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 371:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 371:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 374:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 378:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 439:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_repeated_zigzag/proto_repeated_zigzag.kt 442:15 Unresolved reference: CodedInputStream -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt.out b/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.txt b/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.txt deleted file mode 100644 index 1ffd5649916..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.txt +++ /dev/null @@ -1,4 +0,0 @@ -testRepZigZag() == 0 -testArraysOfMinValues() == 0 -testArraysOfMaxValues() == 0 -testArraysOfDefaultValues() == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt b/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt deleted file mode 100644 index d5af1f20460..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt +++ /dev/null @@ -1,788 +0,0 @@ -class TagOrder private constructor (var sint: Int, var int: Int, var slong_array: LongArray, var enum_field: TagOrder.Enum) { - //========== Properties =========== - //sint32 sint = 8 - - //int32 int = 3423 - - //repeated sint64 slong_array = 12321 - - //enum enum_field = 938423 - - var errorCode: Int = 0 - - //========== Nested enums declarations =========== - enum class Enum(val id: Int) { - first_val (0), - second_val (1), - Unexpected(2); - - companion object { - fun fromIntToEnum (ord: Int): Enum { - return when (ord) { - 0 -> Enum.first_val - 1 -> Enum.second_val - else -> Unexpected - } - } - } - } - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 sint = 8 - if (sint != 0) { - output.writeSInt32 (8, sint) - } - - //int32 int = 3423 - if (int != 0) { - output.writeInt32 (3423, int) - } - - //repeated sint64 slong_array = 12321 - if (slong_array.size > 0) { - output.writeTag(12321, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong_array.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong_array.size) { - output.writeSInt64NoTag (slong_array[i]) - i += 1 - } - } while(false) - } - - //enum enum_field = 938423 - if (enum_field.id != TagOrder.Enum.fromIntToEnum(0).id) { - output.writeEnum (938423, enum_field.id) - } - - } - - fun mergeWith (other: TagOrder) { - sint = other.sint - int = other.int - slong_array = slong_array.plus((other.slong_array)) - enum_field = other.enum_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = TagOrder.BuilderTagOrder(0, 0, LongArray(0), TagOrder.Enum.fromIntToEnum(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = TagOrder.BuilderTagOrder(0, 0, LongArray(0), TagOrder.Enum.fromIntToEnum(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrder.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrder.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - return size - } - - //========== Builder =========== - class BuilderTagOrder constructor (var sint: Int, var int: Int, var slong_array: LongArray, var enum_field: TagOrder.Enum) { - //========== Properties =========== - //sint32 sint = 8 - fun setSint(value: Int): TagOrder.BuilderTagOrder { - sint = value - return this - } - - //int32 int = 3423 - fun setInt(value: Int): TagOrder.BuilderTagOrder { - int = value - return this - } - - //repeated sint64 slong_array = 12321 - fun setSlong_array(value: LongArray): TagOrder.BuilderTagOrder { - slong_array = value - return this - } - fun setslong_arrayByIndex(index: Int, value: Long): TagOrder.BuilderTagOrder { - slong_array[index] = value - return this - } - - //enum enum_field = 938423 - fun setEnum_field(value: TagOrder.Enum): TagOrder.BuilderTagOrder { - enum_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 sint = 8 - if (sint != 0) { - output.writeSInt32 (8, sint) - } - - //int32 int = 3423 - if (int != 0) { - output.writeInt32 (3423, int) - } - - //repeated sint64 slong_array = 12321 - if (slong_array.size > 0) { - output.writeTag(12321, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong_array.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong_array.size) { - output.writeSInt64NoTag (slong_array[i]) - i += 1 - } - } while(false) - } - - //enum enum_field = 938423 - if (enum_field.id != TagOrder.Enum.fromIntToEnum(0).id) { - output.writeEnum (938423, enum_field.id) - } - - } - - //========== Mutating methods =========== - fun build(): TagOrder { - val res = TagOrder(sint, int, slong_array, enum_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 8 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - sint = input.readSInt32NoTag() - } - 3423 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - int = input.readInt32NoTag() - } - 12321 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = LongArray(0) - var readSize = 0 - do { - var i = 0 - while(readSize < expectedByteSize) { - val tmp = LongArray(1) - tmp[0] = input.readSInt64NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getSInt64SizeNoTag(tmp[0]) - } - slong_array = newArray - } while (false) - } - 938423 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - enum_field = TagOrder.Enum.fromIntToEnum(input.readEnumNoTag()) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): TagOrder.BuilderTagOrder { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): TagOrder.BuilderTagOrder { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrder.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrder.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - return size - } - - } - -} - -class TagOrderShuffled private constructor (var sint: Int, var int: Int, var slong_array: LongArray, var enum_field: TagOrderShuffled.Enum) { - //========== Properties =========== - //sint32 sint = 8 - - //int32 int = 3423 - - //repeated sint64 slong_array = 12321 - - //enum enum_field = 938423 - - var errorCode: Int = 0 - - //========== Nested enums declarations =========== - enum class Enum(val id: Int) { - first_val (0), - second_val (1), - Unexpected(2); - - companion object { - fun fromIntToEnum (ord: Int): Enum { - return when (ord) { - 0 -> Enum.first_val - 1 -> Enum.second_val - else -> Unexpected - } - } - } - } - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 sint = 8 - if (sint != 0) { - output.writeSInt32 (8, sint) - } - - //int32 int = 3423 - if (int != 0) { - output.writeInt32 (3423, int) - } - - //repeated sint64 slong_array = 12321 - if (slong_array.size > 0) { - output.writeTag(12321, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong_array.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong_array.size) { - output.writeSInt64NoTag (slong_array[i]) - i += 1 - } - } while(false) - } - - //enum enum_field = 938423 - if (enum_field.id != TagOrderShuffled.Enum.fromIntToEnum(0).id) { - output.writeEnum (938423, enum_field.id) - } - - } - - fun mergeWith (other: TagOrderShuffled) { - sint = other.sint - int = other.int - slong_array = slong_array.plus((other.slong_array)) - enum_field = other.enum_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = TagOrderShuffled.BuilderTagOrderShuffled(0, 0, LongArray(0), TagOrderShuffled.Enum.fromIntToEnum(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = TagOrderShuffled.BuilderTagOrderShuffled(0, 0, LongArray(0), TagOrderShuffled.Enum.fromIntToEnum(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrderShuffled.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrderShuffled.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - return size - } - - //========== Builder =========== - class BuilderTagOrderShuffled constructor (var sint: Int, var int: Int, var slong_array: LongArray, var enum_field: TagOrderShuffled.Enum) { - //========== Properties =========== - //sint32 sint = 8 - fun setSint(value: Int): TagOrderShuffled.BuilderTagOrderShuffled { - sint = value - return this - } - - //int32 int = 3423 - fun setInt(value: Int): TagOrderShuffled.BuilderTagOrderShuffled { - int = value - return this - } - - //repeated sint64 slong_array = 12321 - fun setSlong_array(value: LongArray): TagOrderShuffled.BuilderTagOrderShuffled { - slong_array = value - return this - } - fun setslong_arrayByIndex(index: Int, value: Long): TagOrderShuffled.BuilderTagOrderShuffled { - slong_array[index] = value - return this - } - - //enum enum_field = 938423 - fun setEnum_field(value: TagOrderShuffled.Enum): TagOrderShuffled.BuilderTagOrderShuffled { - enum_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 sint = 8 - if (sint != 0) { - output.writeSInt32 (8, sint) - } - - //int32 int = 3423 - if (int != 0) { - output.writeInt32 (3423, int) - } - - //repeated sint64 slong_array = 12321 - if (slong_array.size > 0) { - output.writeTag(12321, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong_array.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong_array.size) { - output.writeSInt64NoTag (slong_array[i]) - i += 1 - } - } while(false) - } - - //enum enum_field = 938423 - if (enum_field.id != TagOrderShuffled.Enum.fromIntToEnum(0).id) { - output.writeEnum (938423, enum_field.id) - } - - } - - //========== Mutating methods =========== - fun build(): TagOrderShuffled { - val res = TagOrderShuffled(sint, int, slong_array, enum_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 8 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - sint = input.readSInt32NoTag() - } - 3423 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - int = input.readInt32NoTag() - } - 12321 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = LongArray(0) - var readSize = 0 - do { - var i = 0 - while(readSize < expectedByteSize) { - val tmp = LongArray(1) - tmp[0] = input.readSInt64NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getSInt64SizeNoTag(tmp[0]) - } - slong_array = newArray - } while (false) - } - 938423 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - enum_field = TagOrderShuffled.Enum.fromIntToEnum(input.readEnumNoTag()) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): TagOrderShuffled.BuilderTagOrderShuffled { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): TagOrderShuffled.BuilderTagOrderShuffled { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrderShuffled.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrderShuffled.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - return size - } - - } - -} - -fun compareLongArrays(lhs: LongArray, rhs: LongArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareTagAndShuffledTag(kt1: TagOrder, kt2: TagOrderShuffled): Boolean { - return (kt1.enum_field.id == kt2.enum_field.id) and - (kt1.int == kt2.int) and - (kt1.sint == kt2.sint) and - compareLongArrays(kt1.slong_array, kt2.slong_array) -} - -fun checkTagToShuffled(msg: TagOrder): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = TagOrderShuffled.BuilderTagOrderShuffled(0, 0, LongArray(0), TagOrderShuffled.Enum.first_val).parseFrom(ins).build() - - if (compareTagAndShuffledTag(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun checkShuffledToTag(msg: TagOrderShuffled): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = TagOrder.BuilderTagOrder(0, 0, LongArray(0), TagOrder.Enum.first_val).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareTagAndShuffledTag(readMsg, msg)) { - return 0 - } else { - return 1 - } -} - -fun testTagToShuffled(): Int { - val arr = LongArray(3) - arr[0] = 94289342345678289L - arr[1] = -423643342423442342L - - val msg = TagOrder.BuilderTagOrder(312321, -34268, arr, TagOrder.Enum.first_val).build() - return checkTagToShuffled(msg) -} - -fun testShuffledToTag(): Int { - val arr = LongArray(3) - arr[0] = 94289342345678289L - arr[1] = -423643342423442342L - - val msg = TagOrderShuffled.BuilderTagOrderShuffled(312321, -34268, arr, TagOrderShuffled.Enum.first_val).build() - return checkShuffledToTag(msg) -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt.err b/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt.err deleted file mode 100644 index ab731bfb924..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt.err +++ /dev/null @@ -1,121 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 30:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 43:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 51:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 78:35 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 83:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 88:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 97:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 100:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 105:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 105:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 108:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 112:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 116:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 118:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 118:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 118:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 125:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 128:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 133:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 133:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 136:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 140:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 144:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 183:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 196:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 204:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 235:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 239:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 240:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 243:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 250:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 257:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 269:49 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 270:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 276:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 287:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 295:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 304:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 307:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 312:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 312:58 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 315:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 319:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 323:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 325:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 325:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 325:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 332:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 335:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 340:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 340:58 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 343:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 347:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 351:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 389:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 402:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 410:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 437:35 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 442:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 447:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 456:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 459:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 464:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 464:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 467:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 471:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 475:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 477:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 477:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 477:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 484:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 487:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 492:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 492:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 495:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 499:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 503:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 542:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 555:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 563:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 594:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 598:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 599:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 602:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 609:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 616:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 628:49 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 629:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 635:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 646:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 654:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 663:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 666:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 671:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 671:58 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 674:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 678:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 682:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 684:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 684:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 684:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 691:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 694:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 699:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 699:58 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 702:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 706:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 710:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 742:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 745:15 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 756:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_tagorder_test/proto_tagorder_test.kt 759:15 Unresolved reference: CodedInputStream -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt.out b/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.txt b/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.txt deleted file mode 100644 index 374a1b28f17..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.txt +++ /dev/null @@ -1,2 +0,0 @@ -testTagToShuffled() == 0 -testShuffledToTag() == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.kt b/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.kt deleted file mode 100644 index dc1043ed696..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.kt +++ /dev/null @@ -1,491 +0,0 @@ -class MessageVarints private constructor (var int: Int, var long: Long, var sint: Int, var slong: Long, var bl: Boolean, var enumField: MessageVarints.TestEnum, var uint: Int, var ulong: Long) { - //========== Properties =========== - //int32 int = 1 - - //int64 long = 2 - - //sint32 sint = 3 - - //sint64 slong = 4 - - //bool bl = 5 - - //enum enumField = 6 - - //uint32 uint = 7 - - //uint64 ulong = 8 - - var errorCode: Int = 0 - - //========== Nested enums declarations =========== - enum class TestEnum(val id: Int) { - firstVal (0), - secondVal (1), - thirdVal (2), - Unexpected(3); - - companion object { - fun fromIntToTestEnum (ord: Int): TestEnum { - return when (ord) { - 0 -> TestEnum.firstVal - 1 -> TestEnum.secondVal - 2 -> TestEnum.thirdVal - else -> Unexpected - } - } - } - } - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 int = 1 - if (int != 0) { - output.writeInt32 (1, int) - } - - //int64 long = 2 - if (long != 0L) { - output.writeInt64 (2, long) - } - - //sint32 sint = 3 - if (sint != 0) { - output.writeSInt32 (3, sint) - } - - //sint64 slong = 4 - if (slong != 0L) { - output.writeSInt64 (4, slong) - } - - //bool bl = 5 - if (bl != false) { - output.writeBool (5, bl) - } - - //enum enumField = 6 - if (enumField.id != MessageVarints.TestEnum.fromIntToTestEnum(0).id) { - output.writeEnum (6, enumField.id) - } - - //uint32 uint = 7 - if (uint != 0) { - output.writeUInt32 (7, uint) - } - - //uint64 ulong = 8 - if (ulong != 0L) { - output.writeUInt64 (8, ulong) - } - - } - - fun mergeWith (other: MessageVarints) { - int = other.int - long = other.long - sint = other.sint - slong = other.slong - bl = other.bl - enumField = other.enumField - uint = other.uint - ulong = other.ulong - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = MessageVarints.BuilderMessageVarints(0, 0L, 0, 0L, false, MessageVarints.TestEnum.fromIntToTestEnum(0), 0, 0L) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = MessageVarints.BuilderMessageVarints(0, 0L, 0, 0L, false, MessageVarints.TestEnum.fromIntToTestEnum(0), 0, 0L) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getInt64Size(2, long) - } - if (sint != 0) { - size += WireFormat.getSInt32Size(3, sint) - } - if (slong != 0L) { - size += WireFormat.getSInt64Size(4, slong) - } - if (bl != false) { - size += WireFormat.getBoolSize(5, bl) - } - if (enumField != MessageVarints.TestEnum.fromIntToTestEnum(0)) { - size += WireFormat.getEnumSize(6, enumField.id) - } - if (uint != 0) { - size += WireFormat.getUInt32Size(7, uint) - } - if (ulong != 0L) { - size += WireFormat.getUInt64Size(8, ulong) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getInt64Size(2, long) - } - if (sint != 0) { - size += WireFormat.getSInt32Size(3, sint) - } - if (slong != 0L) { - size += WireFormat.getSInt64Size(4, slong) - } - if (bl != false) { - size += WireFormat.getBoolSize(5, bl) - } - if (enumField != MessageVarints.TestEnum.fromIntToTestEnum(0)) { - size += WireFormat.getEnumSize(6, enumField.id) - } - if (uint != 0) { - size += WireFormat.getUInt32Size(7, uint) - } - if (ulong != 0L) { - size += WireFormat.getUInt64Size(8, ulong) - } - return size - } - - //========== Builder =========== - class BuilderMessageVarints constructor (var int: Int, var long: Long, var sint: Int, var slong: Long, var bl: Boolean, var enumField: MessageVarints.TestEnum, var uint: Int, var ulong: Long) { - //========== Properties =========== - //int32 int = 1 - fun setInt(value: Int): MessageVarints.BuilderMessageVarints { - int = value - return this - } - - //int64 long = 2 - fun setLong(value: Long): MessageVarints.BuilderMessageVarints { - long = value - return this - } - - //sint32 sint = 3 - fun setSint(value: Int): MessageVarints.BuilderMessageVarints { - sint = value - return this - } - - //sint64 slong = 4 - fun setSlong(value: Long): MessageVarints.BuilderMessageVarints { - slong = value - return this - } - - //bool bl = 5 - fun setBl(value: Boolean): MessageVarints.BuilderMessageVarints { - bl = value - return this - } - - //enum enumField = 6 - fun setEnumField(value: MessageVarints.TestEnum): MessageVarints.BuilderMessageVarints { - enumField = value - return this - } - - //uint32 uint = 7 - fun setUint(value: Int): MessageVarints.BuilderMessageVarints { - uint = value - return this - } - - //uint64 ulong = 8 - fun setUlong(value: Long): MessageVarints.BuilderMessageVarints { - ulong = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 int = 1 - if (int != 0) { - output.writeInt32 (1, int) - } - - //int64 long = 2 - if (long != 0L) { - output.writeInt64 (2, long) - } - - //sint32 sint = 3 - if (sint != 0) { - output.writeSInt32 (3, sint) - } - - //sint64 slong = 4 - if (slong != 0L) { - output.writeSInt64 (4, slong) - } - - //bool bl = 5 - if (bl != false) { - output.writeBool (5, bl) - } - - //enum enumField = 6 - if (enumField.id != MessageVarints.TestEnum.fromIntToTestEnum(0).id) { - output.writeEnum (6, enumField.id) - } - - //uint32 uint = 7 - if (uint != 0) { - output.writeUInt32 (7, uint) - } - - //uint64 ulong = 8 - if (ulong != 0L) { - output.writeUInt64 (8, ulong) - } - - } - - //========== Mutating methods =========== - fun build(): MessageVarints { - val res = MessageVarints(int, long, sint, slong, bl, enumField, uint, ulong) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - int = input.readInt32NoTag() - } - 2 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - long = input.readInt64NoTag() - } - 3 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - sint = input.readSInt32NoTag() - } - 4 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - slong = input.readSInt64NoTag() - } - 5 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - bl = input.readBoolNoTag() - } - 6 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - enumField = MessageVarints.TestEnum.fromIntToTestEnum(input.readEnumNoTag()) - } - 7 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - uint = input.readUInt32NoTag() - } - 8 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - ulong = input.readUInt64NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): MessageVarints.BuilderMessageVarints { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): MessageVarints.BuilderMessageVarints { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getInt64Size(2, long) - } - if (sint != 0) { - size += WireFormat.getSInt32Size(3, sint) - } - if (slong != 0L) { - size += WireFormat.getSInt64Size(4, slong) - } - if (bl != false) { - size += WireFormat.getBoolSize(5, bl) - } - if (enumField != MessageVarints.TestEnum.fromIntToTestEnum(0)) { - size += WireFormat.getEnumSize(6, enumField.id) - } - if (uint != 0) { - size += WireFormat.getUInt32Size(7, uint) - } - if (ulong != 0L) { - size += WireFormat.getUInt64Size(8, ulong) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getInt64Size(2, long) - } - if (sint != 0) { - size += WireFormat.getSInt32Size(3, sint) - } - if (slong != 0L) { - size += WireFormat.getSInt64Size(4, slong) - } - if (bl != false) { - size += WireFormat.getBoolSize(5, bl) - } - if (enumField != MessageVarints.TestEnum.fromIntToTestEnum(0)) { - size += WireFormat.getEnumSize(6, enumField.id) - } - if (uint != 0) { - size += WireFormat.getUInt32Size(7, uint) - } - if (ulong != 0L) { - size += WireFormat.getUInt64Size(8, ulong) - } - return size - } - - } - -} - -fun compareVarints(kt1: MessageVarints, kt2: MessageVarints): Boolean { - return (kt1.int == kt2.int) and - (kt1.long == kt2.long) and - (kt1.sint == kt2.sint) and - (kt1.slong == kt2.slong) and - (kt1.bl == kt2.bl) and - (kt1.uint == kt2.uint) and - (kt1.ulong == kt2.ulong) and - (kt1.enumField.id == kt2.enumField.id) -} - -fun checkVarintsSerializationIdentity(msg: MessageVarints): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = MessageVarints.BuilderMessageVarints(0, 0L, 0, 0L, false, MessageVarints.TestEnum.fromIntToTestEnum(0), 0, 0L) - .parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareVarints(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun testVarintDefaultMessage(): Int { - val msg = MessageVarints.BuilderMessageVarints(0, 0L, 0, 0L, false, MessageVarints.TestEnum.fromIntToTestEnum(0), 0, 0L).build() - return checkVarintsSerializationIdentity(msg) -} - -fun testVarintTrivialMessage(): Int { - val msg = MessageVarints.BuilderMessageVarints( - 21312, -2131231231L, 5346734, 42121313211L, true, MessageVarints.TestEnum.fromIntToTestEnum(2), 3672356, 3478787863467834678L - ).build() - return checkVarintsSerializationIdentity(msg) -} - -fun testVarintNegativeMessage(): Int { - val msg = MessageVarints.BuilderMessageVarints( - -312732, -2131231231L, -5346734, -42121313211L, true, MessageVarints.TestEnum.fromIntToTestEnum(3), 3672356, 3478787863467834678L - ).build() - - return checkVarintsSerializationIdentity(msg) -} - -fun testVarintMaxValues(): Int { - val msg = MessageVarints.BuilderMessageVarints( - 2147483647, - 9223372036854775807L, - 2147483647, - 9223372036854775807L, - true, - MessageVarints.TestEnum.fromIntToTestEnum(3), - 2147483647, - 9223372036854775807L - ).build() - - return checkVarintsSerializationIdentity(msg) -} - -fun testVarintMinValues(): Int { - val msg = MessageVarints.BuilderMessageVarints( - -2147483647, - -9223372036854775807L, - -2147483647, - -9223372036854775807L, - false, - MessageVarints.TestEnum.fromIntToTestEnum(0), - -2147483647, - -9223372036854775807L - ).build() - - return checkVarintsSerializationIdentity(msg) -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.kt.err b/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.kt.err deleted file mode 100644 index 224e8cb512d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.kt.err +++ /dev/null @@ -1,62 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 40:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 95:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 100:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 109:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 112:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 115:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 118:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 121:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 124:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 127:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 130:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 132:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 132:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 132:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 139:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 142:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 145:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 148:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 151:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 154:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 157:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 160:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 219:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 269:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 273:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 274:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 277:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 284:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 291:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 298:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 305:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 312:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 319:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 326:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 337:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 345:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 354:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 357:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 360:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 363:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 366:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 369:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 372:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 375:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 377:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 377:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 377:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 384:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 387:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 390:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 393:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 396:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 399:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 402:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 405:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 426:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_varint/proto_varint.kt 429:15 Unresolved reference: CodedInputStream -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.kt.out b/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.txt b/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.txt deleted file mode 100644 index c610d8177a3..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_varint/proto_varint.txt +++ /dev/null @@ -1,5 +0,0 @@ -testVarintDefaultMessage() == 0 -testVarintTrivialMessage() == 0 -testVarintNegativeMessage() == 0 -testVarintMaxValues() == 0 -testVarintMinValues() == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt b/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt deleted file mode 100644 index 3fad3b92846..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt +++ /dev/null @@ -1,217 +0,0 @@ -class MessageZigZag private constructor (var int: Int, var long: Long) { - //========== Properties =========== - //sint32 int = 1 - - //sint64 long = 2 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 int = 1 - if (int != 0) { - output.writeSInt32 (1, int) - } - - //sint64 long = 2 - if (long != 0L) { - output.writeSInt64 (2, long) - } - - } - - fun mergeWith (other: MessageZigZag) { - int = other.int - long = other.long - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = MessageZigZag.BuilderMessageZigZag(0, 0L) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = MessageZigZag.BuilderMessageZigZag(0, 0L) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getSInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getSInt64Size(2, long) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getSInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getSInt64Size(2, long) - } - return size - } - - //========== Builder =========== - class BuilderMessageZigZag constructor (var int: Int, var long: Long) { - //========== Properties =========== - //sint32 int = 1 - fun setInt(value: Int): MessageZigZag.BuilderMessageZigZag { - int = value - return this - } - - //sint64 long = 2 - fun setLong(value: Long): MessageZigZag.BuilderMessageZigZag { - long = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 int = 1 - if (int != 0) { - output.writeSInt32 (1, int) - } - - //sint64 long = 2 - if (long != 0L) { - output.writeSInt64 (2, long) - } - - } - - //========== Mutating methods =========== - fun build(): MessageZigZag { - val res = MessageZigZag(int, long) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - int = input.readSInt32NoTag() - } - 2 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - long = input.readSInt64NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): MessageZigZag.BuilderMessageZigZag { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): MessageZigZag.BuilderMessageZigZag { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getSInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getSInt64Size(2, long) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getSInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getSInt64Size(2, long) - } - return size - } - - } - -} - -fun compareZigZags(kt1: MessageZigZag, kt2: MessageZigZag): Boolean { - return (kt1.int == kt2.int) and (kt1.long == kt2.long) -} - -fun checkZigZagSerializationIdentity(msg: MessageZigZag): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = MessageZigZag.BuilderMessageZigZag(0, 0L).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareZigZags(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun testZigZagDefaultValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(0, 0L).build() - return checkZigZagSerializationIdentity(msg) -} - -fun testZigZagRandomValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(321782363, -466328364782634782L).build() - return checkZigZagSerializationIdentity(msg) -} - -fun testZigZagNegativeValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(-1321782363, -323721963313L).build() - return checkZigZagSerializationIdentity(msg) -} - -fun testZigZagPositiveValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(4788923, 240384293674L).build() - return checkZigZagSerializationIdentity(msg) -} - -fun testZigZagMaxValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(2147483647, 9223372036854775807L).build() - return checkZigZagSerializationIdentity(msg) -} - -fun testZigZagMinValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(-2147483647, -9223372036854775807L).build() - return checkZigZagSerializationIdentity(msg) -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt.err b/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt.err deleted file mode 100644 index 2f09fa6b8a5..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt.err +++ /dev/null @@ -1,32 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 10:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 29:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 34:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 43:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 46:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 48:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 48:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 48:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 55:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 58:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 81:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 101:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 105:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 106:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 109:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 116:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 127:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 135:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 144:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 147:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 149:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 149:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 149:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 156:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 159:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 173:16 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./proto_zigzag/proto_zigzag.kt 176:15 Unresolved reference: CodedInputStream -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt.out b/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.txt b/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.txt deleted file mode 100644 index 15156624cfd..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/proto_zigzag/proto_zigzag.txt +++ /dev/null @@ -1,6 +0,0 @@ -testZigZagDefaultValues() == 0 -testZigZagRandomValues() == 0 -testZigZagNegativeValues() == 0 -testZigZagPositiveValues() == 0 -testZigZagMaxValues() == 0 -testZigZagMinValues() == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.kt b/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.kt deleted file mode 100644 index f9625d7bf92..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -fun range_operator_1(): Int { - val progression = 10..20 - val a = progression.iterator() - var result = 0 - while (a.hasNext()) { - val nxt = a.nextInt() - result += nxt - } - return result -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.kt.err deleted file mode 100644 index 1dc92378c16..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.kt.err +++ /dev/null @@ -1,16 +0,0 @@ -Exception in thread "main" kotlin.KotlinNullPointerException - at org.kotlinnative.translator.codegens.BlockCodegen.addPrimitiveReferenceOperationByName(BlockCodegen.kt:832) - at org.kotlinnative.translator.codegens.BlockCodegen.addPrimitiveBinaryOperation(BlockCodegen.kt:183) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateBinaryExpression(BlockCodegen.kt:694) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExpression(BlockCodegen.kt:72) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateValExpression(BlockCodegen.kt:1067) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:193) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:192) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock(BlockCodegen.kt:45) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock$default(BlockCodegen.kt:42) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate(FunctionCodegen.kt:81) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate$default(FunctionCodegen.kt:72) - at org.kotlinnative.translator.ProjectTranslator.generateProjectBody(ProjectTranslator.kt:69) - at org.kotlinnative.translator.ProjectTranslator.generateCode(ProjectTranslator.kt:20) - at MainKt.main(main.kt:22) diff --git a/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.txt b/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.txt deleted file mode 100644 index 3e48da2bc65..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/range_operator_1/range_operator_1.txt +++ /dev/null @@ -1 +0,0 @@ -range_operator_1() == 165 diff --git a/experiments/translator-bc/src/test/kotlin/tests/reassigment_0/reassigment_0.kt b/experiments/translator-bc/src/test/kotlin/tests/reassigment_0/reassigment_0.kt deleted file mode 100644 index d5becc81789..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/reassigment_0/reassigment_0.kt +++ /dev/null @@ -1,4 +0,0 @@ -fun reassigment_0(x: Int): Int { - val b = x + 1 - return b -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/reassigment_0/reassigment_0.kt.out b/experiments/translator-bc/src/test/kotlin/tests/reassigment_0/reassigment_0.kt.out deleted file mode 100644 index 807e66f822a..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/reassigment_0/reassigment_0.kt.out +++ /dev/null @@ -1,20 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @reassigment_0_Int(i32 %reassigment_0.x) #0 -{ -%reassigment_0.x.addr = alloca i32, align 4 -store i32 %reassigment_0.x, i32* %reassigment_0.x.addr, align 4 -%var2 = load i32* %reassigment_0.x.addr, align 4 -%var3 = add nsw i32 %var2, 1 -%managed.unique.0.reassigment_0.b = alloca i32, align 4 -%var4 = load i32* %managed.unique.0.reassigment_0.b, align 4 -store i32 %var3, i32* %managed.unique.0.reassigment_0.b, align 4 -%var5 = load i32* %managed.unique.0.reassigment_0.b, align 4 -ret i32 %var5 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/reassigment_0/reassigment_0.txt b/experiments/translator-bc/src/test/kotlin/tests/reassigment_0/reassigment_0.txt deleted file mode 100644 index d4a18813a63..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/reassigment_0/reassigment_0.txt +++ /dev/null @@ -1 +0,0 @@ -reassigment_0_Int(5) == 6 diff --git a/experiments/translator-bc/src/test/kotlin/tests/reassigment_1/reassigment_1.kt b/experiments/translator-bc/src/test/kotlin/tests/reassigment_1/reassigment_1.kt deleted file mode 100644 index 395d1db6fa9..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/reassigment_1/reassigment_1.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun reassigment_1(x: Int): Int { - var a = x - a = a + 1 - var b = a + 1 - b = b + 1 - return b -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/reassigment_1/reassigment_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/reassigment_1/reassigment_1.kt.out deleted file mode 100644 index 51296ef9f03..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/reassigment_1/reassigment_1.kt.out +++ /dev/null @@ -1,32 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @reassigment_1_Int(i32 %reassigment_1.x) #0 -{ -%reassigment_1.x.addr = alloca i32, align 4 -store i32 %reassigment_1.x, i32* %reassigment_1.x.addr, align 4 -%managed.unique.0.reassigment_1.a = alloca i32, align 4 -%var2 = load i32* %managed.unique.0.reassigment_1.a, align 4 -%var3 = load i32* %reassigment_1.x.addr, align 4 -store i32 %var3, i32* %managed.unique.0.reassigment_1.a, align 4 -%var4 = load i32* %managed.unique.0.reassigment_1.a, align 4 -%var5 = add nsw i32 %var4, 1 -%var6 = load i32* %managed.unique.0.reassigment_1.a, align 4 -store i32 %var5, i32* %managed.unique.0.reassigment_1.a, align 4 -%var7 = load i32* %managed.unique.0.reassigment_1.a, align 4 -%var8 = add nsw i32 %var7, 1 -%managed.unique.1.reassigment_1.b = alloca i32, align 4 -%var9 = load i32* %managed.unique.1.reassigment_1.b, align 4 -store i32 %var8, i32* %managed.unique.1.reassigment_1.b, align 4 -%var10 = load i32* %managed.unique.1.reassigment_1.b, align 4 -%var11 = add nsw i32 %var10, 1 -%var12 = load i32* %managed.unique.1.reassigment_1.b, align 4 -store i32 %var11, i32* %managed.unique.1.reassigment_1.b, align 4 -%var13 = load i32* %managed.unique.1.reassigment_1.b, align 4 -ret i32 %var13 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/reassigment_1/reassigment_1.txt b/experiments/translator-bc/src/test/kotlin/tests/reassigment_1/reassigment_1.txt deleted file mode 100644 index 70e248f4187..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/reassigment_1/reassigment_1.txt +++ /dev/null @@ -1 +0,0 @@ -reassigment_1_Int(5) == 8 diff --git a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_1/referential_equality_1.kt b/experiments/translator-bc/src/test/kotlin/tests/referential_equality_1/referential_equality_1.kt deleted file mode 100644 index 987067d3b19..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_1/referential_equality_1.kt +++ /dev/null @@ -1,54 +0,0 @@ -class referential_equality_1 - -fun referential_equality_1_EQEQ_true(): Int { - val instance = referential_equality_1() - var instance2 = referential_equality_1() - instance2 = instance - //problem with boolean in auto generated functions in clang - return if (instance == instance2) 1 else 0 -} - -fun referential_equality_1_EQEQ_false(): Int { - val instance = referential_equality_1() - val instance2 = referential_equality_1() - return if (instance == instance2) 1 else 0 -} - -fun referential_equality_1_EQEQEQ_true(): Int { - val instance = referential_equality_1() - var instance2 = referential_equality_1() - instance2 = instance - return if (instance === instance2) 1 else 0 -} - -fun referential_equality_1_EQEQEQ_false(): Int { - val instance = referential_equality_1() - val instance2 = referential_equality_1() - return if (instance === instance2) 1 else 0 -} - -fun referential_equality_1_EXCLEQEQ_false(): Int { - val instance = referential_equality_1() - var instance2 = referential_equality_1() - instance2 = instance - return if (instance != instance2) 1 else 0 -} - -fun referential_equality_1_EXCLEQEQ_true(): Int { - val instance = referential_equality_1() - val instance2 = referential_equality_1() - return if (instance != instance2) 1 else 0 -} - -fun referential_equality_1_EXCLEQEQEQ_false(): Int { - val instance = referential_equality_1() - var instance2 = referential_equality_1() - instance2 = instance - return if (instance !== instance2) 1 else 0 -} - -fun referential_equality_1_EXCLEQEQEQ_true(): Int { - val instance = referential_equality_1() - val instance2 = referential_equality_1() - return if (instance !== instance2) 1 else 0 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_1/referential_equality_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/referential_equality_1/referential_equality_1.kt.out deleted file mode 100644 index 63b164bb45a..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_1/referential_equality_1.kt.out +++ /dev/null @@ -1,333 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.referential_equality_1 = type { } -define weak void @referential_equality_1(%class.referential_equality_1* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.referential_equality_1, align 8 -%var2 = bitcast %class.referential_equality_1* %classvariable.this to i8* -%var3 = bitcast %class.referential_equality_1* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var2, i8* %var3, i64 0, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @referential_equality_1_EQEQEQ_false() #0 -{ -%var5 = call i8* @malloc_heap(i32 0) -%var4 = bitcast i8* %var5 to %class.referential_equality_1* -%var6 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var4, %class.referential_equality_1** %var6, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var4) -%managed.unique.0.referential_equality_1_EQEQEQ_false.instance = alloca %class.referential_equality_1*, align 8 -%var7 = load %class.referential_equality_1** %managed.unique.0.referential_equality_1_EQEQEQ_false.instance, align 8 -%var8 = load %class.referential_equality_1** %var6, align 8 -store %class.referential_equality_1* %var8, %class.referential_equality_1** %managed.unique.0.referential_equality_1_EQEQEQ_false.instance, align 8 -%var10 = call i8* @malloc_heap(i32 0) -%var9 = bitcast i8* %var10 to %class.referential_equality_1* -%var11 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var9, %class.referential_equality_1** %var11, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var9) -%managed.unique.1.referential_equality_1_EQEQEQ_false.instance2 = alloca %class.referential_equality_1*, align 8 -%var12 = load %class.referential_equality_1** %managed.unique.1.referential_equality_1_EQEQEQ_false.instance2, align 8 -%var13 = load %class.referential_equality_1** %var11, align 8 -store %class.referential_equality_1* %var13, %class.referential_equality_1** %managed.unique.1.referential_equality_1_EQEQEQ_false.instance2, align 8 -%var14 = load %class.referential_equality_1** %managed.unique.0.referential_equality_1_EQEQEQ_false.instance, align 8 -%var15 = load %class.referential_equality_1** %managed.unique.1.referential_equality_1_EQEQEQ_false.instance2, align 8 -%var16 = load %class.referential_equality_1** %managed.unique.0.referential_equality_1_EQEQEQ_false.instance, align 8 -%var17 = load %class.referential_equality_1** %managed.unique.1.referential_equality_1_EQEQEQ_false.instance2, align 8 -%var18 = icmp eq %class.referential_equality_1* %var16, %var17 -%var19 = alloca i32, align 4 -br i1 %var18, label %label.if_then.1, label %label.if_else.2 -label.if_then.1: -store i32 1, i32* %var19, align 4 -br label %label.if_end.3 -label.if_else.2: -store i32 0, i32* %var19, align 4 -br label %label.if_end.3 -label.if_end.3: -%var20 = load i32* %var19, align 4 -ret i32 %var20 -unreachable -} -define weak i32 @referential_equality_1_EXCLEQEQ_false() #0 -{ -%var22 = call i8* @malloc_heap(i32 0) -%var21 = bitcast i8* %var22 to %class.referential_equality_1* -%var23 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var21, %class.referential_equality_1** %var23, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var21) -%managed.unique.2.referential_equality_1_EXCLEQEQ_false.instance = alloca %class.referential_equality_1*, align 8 -%var24 = load %class.referential_equality_1** %managed.unique.2.referential_equality_1_EXCLEQEQ_false.instance, align 8 -%var25 = load %class.referential_equality_1** %var23, align 8 -store %class.referential_equality_1* %var25, %class.referential_equality_1** %managed.unique.2.referential_equality_1_EXCLEQEQ_false.instance, align 8 -%var27 = call i8* @malloc_heap(i32 0) -%var26 = bitcast i8* %var27 to %class.referential_equality_1* -%var28 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var26, %class.referential_equality_1** %var28, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var26) -%managed.unique.3.referential_equality_1_EXCLEQEQ_false.instance2 = alloca %class.referential_equality_1*, align 8 -%var29 = load %class.referential_equality_1** %managed.unique.3.referential_equality_1_EXCLEQEQ_false.instance2, align 8 -%var30 = load %class.referential_equality_1** %var28, align 8 -store %class.referential_equality_1* %var30, %class.referential_equality_1** %managed.unique.3.referential_equality_1_EXCLEQEQ_false.instance2, align 8 -%var31 = load %class.referential_equality_1** %managed.unique.3.referential_equality_1_EXCLEQEQ_false.instance2, align 8 -%var32 = load %class.referential_equality_1** %managed.unique.2.referential_equality_1_EXCLEQEQ_false.instance, align 8 -store %class.referential_equality_1* %var32, %class.referential_equality_1** %managed.unique.3.referential_equality_1_EXCLEQEQ_false.instance2, align 8 -%var33 = load %class.referential_equality_1** %managed.unique.2.referential_equality_1_EXCLEQEQ_false.instance, align 8 -%var34 = load %class.referential_equality_1** %managed.unique.3.referential_equality_1_EXCLEQEQ_false.instance2, align 8 -%var35 = load %class.referential_equality_1** %managed.unique.2.referential_equality_1_EXCLEQEQ_false.instance, align 8 -%var36 = load %class.referential_equality_1** %managed.unique.3.referential_equality_1_EXCLEQEQ_false.instance2, align 8 -%var37 = icmp ne %class.referential_equality_1* %var35, %var36 -%var38 = alloca i32, align 4 -br i1 %var37, label %label.if_then.4, label %label.if_else.5 -label.if_then.4: -store i32 1, i32* %var38, align 4 -br label %label.if_end.6 -label.if_else.5: -store i32 0, i32* %var38, align 4 -br label %label.if_end.6 -label.if_end.6: -%var39 = load i32* %var38, align 4 -ret i32 %var39 -unreachable -} -define weak i32 @referential_equality_1_EXCLEQEQ_true() #0 -{ -%var41 = call i8* @malloc_heap(i32 0) -%var40 = bitcast i8* %var41 to %class.referential_equality_1* -%var42 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var40, %class.referential_equality_1** %var42, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var40) -%managed.unique.4.referential_equality_1_EXCLEQEQ_true.instance = alloca %class.referential_equality_1*, align 8 -%var43 = load %class.referential_equality_1** %managed.unique.4.referential_equality_1_EXCLEQEQ_true.instance, align 8 -%var44 = load %class.referential_equality_1** %var42, align 8 -store %class.referential_equality_1* %var44, %class.referential_equality_1** %managed.unique.4.referential_equality_1_EXCLEQEQ_true.instance, align 8 -%var46 = call i8* @malloc_heap(i32 0) -%var45 = bitcast i8* %var46 to %class.referential_equality_1* -%var47 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var45, %class.referential_equality_1** %var47, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var45) -%managed.unique.5.referential_equality_1_EXCLEQEQ_true.instance2 = alloca %class.referential_equality_1*, align 8 -%var48 = load %class.referential_equality_1** %managed.unique.5.referential_equality_1_EXCLEQEQ_true.instance2, align 8 -%var49 = load %class.referential_equality_1** %var47, align 8 -store %class.referential_equality_1* %var49, %class.referential_equality_1** %managed.unique.5.referential_equality_1_EXCLEQEQ_true.instance2, align 8 -%var50 = load %class.referential_equality_1** %managed.unique.4.referential_equality_1_EXCLEQEQ_true.instance, align 8 -%var51 = load %class.referential_equality_1** %managed.unique.5.referential_equality_1_EXCLEQEQ_true.instance2, align 8 -%var52 = load %class.referential_equality_1** %managed.unique.4.referential_equality_1_EXCLEQEQ_true.instance, align 8 -%var53 = load %class.referential_equality_1** %managed.unique.5.referential_equality_1_EXCLEQEQ_true.instance2, align 8 -%var54 = icmp ne %class.referential_equality_1* %var52, %var53 -%var55 = alloca i32, align 4 -br i1 %var54, label %label.if_then.7, label %label.if_else.8 -label.if_then.7: -store i32 1, i32* %var55, align 4 -br label %label.if_end.9 -label.if_else.8: -store i32 0, i32* %var55, align 4 -br label %label.if_end.9 -label.if_end.9: -%var56 = load i32* %var55, align 4 -ret i32 %var56 -unreachable -} -define weak i32 @referential_equality_1_EQEQEQ_true() #0 -{ -%var58 = call i8* @malloc_heap(i32 0) -%var57 = bitcast i8* %var58 to %class.referential_equality_1* -%var59 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var57, %class.referential_equality_1** %var59, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var57) -%managed.unique.6.referential_equality_1_EQEQEQ_true.instance = alloca %class.referential_equality_1*, align 8 -%var60 = load %class.referential_equality_1** %managed.unique.6.referential_equality_1_EQEQEQ_true.instance, align 8 -%var61 = load %class.referential_equality_1** %var59, align 8 -store %class.referential_equality_1* %var61, %class.referential_equality_1** %managed.unique.6.referential_equality_1_EQEQEQ_true.instance, align 8 -%var63 = call i8* @malloc_heap(i32 0) -%var62 = bitcast i8* %var63 to %class.referential_equality_1* -%var64 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var62, %class.referential_equality_1** %var64, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var62) -%managed.unique.7.referential_equality_1_EQEQEQ_true.instance2 = alloca %class.referential_equality_1*, align 8 -%var65 = load %class.referential_equality_1** %managed.unique.7.referential_equality_1_EQEQEQ_true.instance2, align 8 -%var66 = load %class.referential_equality_1** %var64, align 8 -store %class.referential_equality_1* %var66, %class.referential_equality_1** %managed.unique.7.referential_equality_1_EQEQEQ_true.instance2, align 8 -%var67 = load %class.referential_equality_1** %managed.unique.7.referential_equality_1_EQEQEQ_true.instance2, align 8 -%var68 = load %class.referential_equality_1** %managed.unique.6.referential_equality_1_EQEQEQ_true.instance, align 8 -store %class.referential_equality_1* %var68, %class.referential_equality_1** %managed.unique.7.referential_equality_1_EQEQEQ_true.instance2, align 8 -%var69 = load %class.referential_equality_1** %managed.unique.6.referential_equality_1_EQEQEQ_true.instance, align 8 -%var70 = load %class.referential_equality_1** %managed.unique.7.referential_equality_1_EQEQEQ_true.instance2, align 8 -%var71 = load %class.referential_equality_1** %managed.unique.6.referential_equality_1_EQEQEQ_true.instance, align 8 -%var72 = load %class.referential_equality_1** %managed.unique.7.referential_equality_1_EQEQEQ_true.instance2, align 8 -%var73 = icmp eq %class.referential_equality_1* %var71, %var72 -%var74 = alloca i32, align 4 -br i1 %var73, label %label.if_then.10, label %label.if_else.11 -label.if_then.10: -store i32 1, i32* %var74, align 4 -br label %label.if_end.12 -label.if_else.11: -store i32 0, i32* %var74, align 4 -br label %label.if_end.12 -label.if_end.12: -%var75 = load i32* %var74, align 4 -ret i32 %var75 -unreachable -} -define weak i32 @referential_equality_1_EQEQ_true() #0 -{ -%var77 = call i8* @malloc_heap(i32 0) -%var76 = bitcast i8* %var77 to %class.referential_equality_1* -%var78 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var76, %class.referential_equality_1** %var78, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var76) -%managed.unique.8.referential_equality_1_EQEQ_true.instance = alloca %class.referential_equality_1*, align 8 -%var79 = load %class.referential_equality_1** %managed.unique.8.referential_equality_1_EQEQ_true.instance, align 8 -%var80 = load %class.referential_equality_1** %var78, align 8 -store %class.referential_equality_1* %var80, %class.referential_equality_1** %managed.unique.8.referential_equality_1_EQEQ_true.instance, align 8 -%var82 = call i8* @malloc_heap(i32 0) -%var81 = bitcast i8* %var82 to %class.referential_equality_1* -%var83 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var81, %class.referential_equality_1** %var83, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var81) -%managed.unique.9.referential_equality_1_EQEQ_true.instance2 = alloca %class.referential_equality_1*, align 8 -%var84 = load %class.referential_equality_1** %managed.unique.9.referential_equality_1_EQEQ_true.instance2, align 8 -%var85 = load %class.referential_equality_1** %var83, align 8 -store %class.referential_equality_1* %var85, %class.referential_equality_1** %managed.unique.9.referential_equality_1_EQEQ_true.instance2, align 8 -%var86 = load %class.referential_equality_1** %managed.unique.9.referential_equality_1_EQEQ_true.instance2, align 8 -%var87 = load %class.referential_equality_1** %managed.unique.8.referential_equality_1_EQEQ_true.instance, align 8 -store %class.referential_equality_1* %var87, %class.referential_equality_1** %managed.unique.9.referential_equality_1_EQEQ_true.instance2, align 8 -%var88 = load %class.referential_equality_1** %managed.unique.8.referential_equality_1_EQEQ_true.instance, align 8 -%var89 = load %class.referential_equality_1** %managed.unique.9.referential_equality_1_EQEQ_true.instance2, align 8 -%var90 = load %class.referential_equality_1** %managed.unique.8.referential_equality_1_EQEQ_true.instance, align 8 -%var91 = load %class.referential_equality_1** %managed.unique.9.referential_equality_1_EQEQ_true.instance2, align 8 -%var92 = icmp eq %class.referential_equality_1* %var90, %var91 -%var93 = alloca i32, align 4 -br i1 %var92, label %label.if_then.13, label %label.if_else.14 -label.if_then.13: -store i32 1, i32* %var93, align 4 -br label %label.if_end.15 -label.if_else.14: -store i32 0, i32* %var93, align 4 -br label %label.if_end.15 -label.if_end.15: -%var94 = load i32* %var93, align 4 -ret i32 %var94 -unreachable -} -define weak i32 @referential_equality_1_EXCLEQEQEQ_false() #0 -{ -%var96 = call i8* @malloc_heap(i32 0) -%var95 = bitcast i8* %var96 to %class.referential_equality_1* -%var97 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var95, %class.referential_equality_1** %var97, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var95) -%managed.unique.10.referential_equality_1_EXCLEQEQEQ_false.instance = alloca %class.referential_equality_1*, align 8 -%var98 = load %class.referential_equality_1** %managed.unique.10.referential_equality_1_EXCLEQEQEQ_false.instance, align 8 -%var99 = load %class.referential_equality_1** %var97, align 8 -store %class.referential_equality_1* %var99, %class.referential_equality_1** %managed.unique.10.referential_equality_1_EXCLEQEQEQ_false.instance, align 8 -%var101 = call i8* @malloc_heap(i32 0) -%var100 = bitcast i8* %var101 to %class.referential_equality_1* -%var102 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var100, %class.referential_equality_1** %var102, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var100) -%managed.unique.11.referential_equality_1_EXCLEQEQEQ_false.instance2 = alloca %class.referential_equality_1*, align 8 -%var103 = load %class.referential_equality_1** %managed.unique.11.referential_equality_1_EXCLEQEQEQ_false.instance2, align 8 -%var104 = load %class.referential_equality_1** %var102, align 8 -store %class.referential_equality_1* %var104, %class.referential_equality_1** %managed.unique.11.referential_equality_1_EXCLEQEQEQ_false.instance2, align 8 -%var105 = load %class.referential_equality_1** %managed.unique.11.referential_equality_1_EXCLEQEQEQ_false.instance2, align 8 -%var106 = load %class.referential_equality_1** %managed.unique.10.referential_equality_1_EXCLEQEQEQ_false.instance, align 8 -store %class.referential_equality_1* %var106, %class.referential_equality_1** %managed.unique.11.referential_equality_1_EXCLEQEQEQ_false.instance2, align 8 -%var107 = load %class.referential_equality_1** %managed.unique.10.referential_equality_1_EXCLEQEQEQ_false.instance, align 8 -%var108 = load %class.referential_equality_1** %managed.unique.11.referential_equality_1_EXCLEQEQEQ_false.instance2, align 8 -%var109 = load %class.referential_equality_1** %managed.unique.10.referential_equality_1_EXCLEQEQEQ_false.instance, align 8 -%var110 = load %class.referential_equality_1** %managed.unique.11.referential_equality_1_EXCLEQEQEQ_false.instance2, align 8 -%var111 = icmp ne %class.referential_equality_1* %var109, %var110 -%var112 = alloca i32, align 4 -br i1 %var111, label %label.if_then.16, label %label.if_else.17 -label.if_then.16: -store i32 1, i32* %var112, align 4 -br label %label.if_end.18 -label.if_else.17: -store i32 0, i32* %var112, align 4 -br label %label.if_end.18 -label.if_end.18: -%var113 = load i32* %var112, align 4 -ret i32 %var113 -unreachable -} -define weak i32 @referential_equality_1_EXCLEQEQEQ_true() #0 -{ -%var115 = call i8* @malloc_heap(i32 0) -%var114 = bitcast i8* %var115 to %class.referential_equality_1* -%var116 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var114, %class.referential_equality_1** %var116, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var114) -%managed.unique.12.referential_equality_1_EXCLEQEQEQ_true.instance = alloca %class.referential_equality_1*, align 8 -%var117 = load %class.referential_equality_1** %managed.unique.12.referential_equality_1_EXCLEQEQEQ_true.instance, align 8 -%var118 = load %class.referential_equality_1** %var116, align 8 -store %class.referential_equality_1* %var118, %class.referential_equality_1** %managed.unique.12.referential_equality_1_EXCLEQEQEQ_true.instance, align 8 -%var120 = call i8* @malloc_heap(i32 0) -%var119 = bitcast i8* %var120 to %class.referential_equality_1* -%var121 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var119, %class.referential_equality_1** %var121, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var119) -%managed.unique.13.referential_equality_1_EXCLEQEQEQ_true.instance2 = alloca %class.referential_equality_1*, align 8 -%var122 = load %class.referential_equality_1** %managed.unique.13.referential_equality_1_EXCLEQEQEQ_true.instance2, align 8 -%var123 = load %class.referential_equality_1** %var121, align 8 -store %class.referential_equality_1* %var123, %class.referential_equality_1** %managed.unique.13.referential_equality_1_EXCLEQEQEQ_true.instance2, align 8 -%var124 = load %class.referential_equality_1** %managed.unique.12.referential_equality_1_EXCLEQEQEQ_true.instance, align 8 -%var125 = load %class.referential_equality_1** %managed.unique.13.referential_equality_1_EXCLEQEQEQ_true.instance2, align 8 -%var126 = load %class.referential_equality_1** %managed.unique.12.referential_equality_1_EXCLEQEQEQ_true.instance, align 8 -%var127 = load %class.referential_equality_1** %managed.unique.13.referential_equality_1_EXCLEQEQEQ_true.instance2, align 8 -%var128 = icmp ne %class.referential_equality_1* %var126, %var127 -%var129 = alloca i32, align 4 -br i1 %var128, label %label.if_then.19, label %label.if_else.20 -label.if_then.19: -store i32 1, i32* %var129, align 4 -br label %label.if_end.21 -label.if_else.20: -store i32 0, i32* %var129, align 4 -br label %label.if_end.21 -label.if_end.21: -%var130 = load i32* %var129, align 4 -ret i32 %var130 -unreachable -} -define weak i32 @referential_equality_1_EQEQ_false() #0 -{ -%var132 = call i8* @malloc_heap(i32 0) -%var131 = bitcast i8* %var132 to %class.referential_equality_1* -%var133 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var131, %class.referential_equality_1** %var133, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var131) -%managed.unique.14.referential_equality_1_EQEQ_false.instance = alloca %class.referential_equality_1*, align 8 -%var134 = load %class.referential_equality_1** %managed.unique.14.referential_equality_1_EQEQ_false.instance, align 8 -%var135 = load %class.referential_equality_1** %var133, align 8 -store %class.referential_equality_1* %var135, %class.referential_equality_1** %managed.unique.14.referential_equality_1_EQEQ_false.instance, align 8 -%var137 = call i8* @malloc_heap(i32 0) -%var136 = bitcast i8* %var137 to %class.referential_equality_1* -%var138 = alloca %class.referential_equality_1*, align 8 -store %class.referential_equality_1* %var136, %class.referential_equality_1** %var138, align 8 -call void @referential_equality_1(%class.referential_equality_1* %var136) -%managed.unique.15.referential_equality_1_EQEQ_false.instance2 = alloca %class.referential_equality_1*, align 8 -%var139 = load %class.referential_equality_1** %managed.unique.15.referential_equality_1_EQEQ_false.instance2, align 8 -%var140 = load %class.referential_equality_1** %var138, align 8 -store %class.referential_equality_1* %var140, %class.referential_equality_1** %managed.unique.15.referential_equality_1_EQEQ_false.instance2, align 8 -%var141 = load %class.referential_equality_1** %managed.unique.14.referential_equality_1_EQEQ_false.instance, align 8 -%var142 = load %class.referential_equality_1** %managed.unique.15.referential_equality_1_EQEQ_false.instance2, align 8 -%var143 = load %class.referential_equality_1** %managed.unique.14.referential_equality_1_EQEQ_false.instance, align 8 -%var144 = load %class.referential_equality_1** %managed.unique.15.referential_equality_1_EQEQ_false.instance2, align 8 -%var145 = icmp eq %class.referential_equality_1* %var143, %var144 -%var146 = alloca i32, align 4 -br i1 %var145, label %label.if_then.22, label %label.if_else.23 -label.if_then.22: -store i32 1, i32* %var146, align 4 -br label %label.if_end.24 -label.if_else.23: -store i32 0, i32* %var146, align 4 -br label %label.if_end.24 -label.if_end.24: -%var147 = load i32* %var146, align 4 -ret i32 %var147 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_1/referential_equality_1.txt b/experiments/translator-bc/src/test/kotlin/tests/referential_equality_1/referential_equality_1.txt deleted file mode 100644 index 11f8b1d968b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_1/referential_equality_1.txt +++ /dev/null @@ -1,8 +0,0 @@ -referential_equality_1_EQEQ_true() == 1 -referential_equality_1_EQEQ_false() == 0 -referential_equality_1_EQEQEQ_true() == 1 -referential_equality_1_EQEQEQ_false() == 0 -referential_equality_1_EXCLEQEQ_true() == 1 -referential_equality_1_EXCLEQEQ_false() == 0 -referential_equality_1_EXCLEQEQEQ_true() == 1 -referential_equality_1_EXCLEQEQEQ_false() == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_2/referential_equality_2.kt b/experiments/translator-bc/src/test/kotlin/tests/referential_equality_2/referential_equality_2.kt deleted file mode 100644 index 2884645fe7f..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_2/referential_equality_2.kt +++ /dev/null @@ -1,28 +0,0 @@ -class referential_equality_2_A - -fun referential_equality_2_build(): referential_equality_2_A { - return referential_equality_2_A() -} - -fun referential_equality_2_EQ_slave(second_msg: referential_equality_2_A): Int { - if (second_msg == referential_equality_2_build()) { - return 0 - } - return 1 -} - -fun referential_equality_2_NEQ_slave(second_msg: referential_equality_2_A): Int { - if (second_msg != referential_equality_2_build()) { - return 1 - } - return 0 -} - - -fun referential_equality_2_EQ_master(): Int { - return referential_equality_2_EQ_slave(referential_equality_2_build()) -} - -fun referential_equality_2_NEQ_master(): Int { - return referential_equality_2_NEQ_slave(referential_equality_2_build()) -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_2/referential_equality_2.kt.out b/experiments/translator-bc/src/test/kotlin/tests/referential_equality_2/referential_equality_2.kt.out deleted file mode 100644 index 633fdb519dc..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_2/referential_equality_2.kt.out +++ /dev/null @@ -1,95 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.referential_equality_2_A = type { } -define weak void @referential_equality_2_A(%class.referential_equality_2_A* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.referential_equality_2_A, align 8 -%var2 = bitcast %class.referential_equality_2_A* %classvariable.this to i8* -%var3 = bitcast %class.referential_equality_2_A* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var2, i8* %var3, i64 0, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @referential_equality_2_NEQ_master() #0 -{ -%var5 = call i8* @malloc_heap(i32 8) -%var4 = bitcast i8* %var5 to %class.referential_equality_2_A** -call void @referential_equality_2_build(%class.referential_equality_2_A** %var4) -%var7 = call i8* @malloc_heap(i32 8) -%var6 = bitcast i8* %var7 to %class.referential_equality_2_A** -call void @referential_equality_2_build(%class.referential_equality_2_A** %var6) -%var8 = load %class.referential_equality_2_A** %var6, align 8 -%var9 = call i32 @referential_equality_2_NEQ_slave_Ref_referential_equality_2_A(%class.referential_equality_2_A* %var8) -%var10 = alloca i32, align 4 -store i32 %var9, i32* %var10, align 4 -%var11 = load i32* %var10, align 4 -ret i32 %var11 -unreachable -} -define weak i32 @referential_equality_2_EQ_master() #0 -{ -%var13 = call i8* @malloc_heap(i32 8) -%var12 = bitcast i8* %var13 to %class.referential_equality_2_A** -call void @referential_equality_2_build(%class.referential_equality_2_A** %var12) -%var15 = call i8* @malloc_heap(i32 8) -%var14 = bitcast i8* %var15 to %class.referential_equality_2_A** -call void @referential_equality_2_build(%class.referential_equality_2_A** %var14) -%var16 = load %class.referential_equality_2_A** %var14, align 8 -%var17 = call i32 @referential_equality_2_EQ_slave_Ref_referential_equality_2_A(%class.referential_equality_2_A* %var16) -%var18 = alloca i32, align 4 -store i32 %var17, i32* %var18, align 4 -%var19 = load i32* %var18, align 4 -ret i32 %var19 -unreachable -} -define weak i32 @referential_equality_2_NEQ_slave_Ref_referential_equality_2_A(%class.referential_equality_2_A* %referential_equality_2_NEQ_slave.second_msg) #0 -{ -%var21 = call i8* @malloc_heap(i32 8) -%var20 = bitcast i8* %var21 to %class.referential_equality_2_A** -call void @referential_equality_2_build(%class.referential_equality_2_A** %var20) -%var22 = load %class.referential_equality_2_A* %referential_equality_2_NEQ_slave.second_msg, align 8 -%var23 = load %class.referential_equality_2_A** %var20, align 8 -%var24 = load %class.referential_equality_2_A** %var20, align 8 -%var25 = icmp ne %class.referential_equality_2_A* %referential_equality_2_NEQ_slave.second_msg, %var24 -br i1 %var25, label %label.if.1, label %label.if.3 -label.if.1: -ret i32 1 -br label %label.if.3 -label.if.3: -ret i32 0 -unreachable -} -define weak i32 @referential_equality_2_EQ_slave_Ref_referential_equality_2_A(%class.referential_equality_2_A* %referential_equality_2_EQ_slave.second_msg) #0 -{ -%var27 = call i8* @malloc_heap(i32 8) -%var26 = bitcast i8* %var27 to %class.referential_equality_2_A** -call void @referential_equality_2_build(%class.referential_equality_2_A** %var26) -%var28 = load %class.referential_equality_2_A* %referential_equality_2_EQ_slave.second_msg, align 8 -%var29 = load %class.referential_equality_2_A** %var26, align 8 -%var30 = load %class.referential_equality_2_A** %var26, align 8 -%var31 = icmp eq %class.referential_equality_2_A* %referential_equality_2_EQ_slave.second_msg, %var30 -br i1 %var31, label %label.if.4, label %label.if.6 -label.if.4: -ret i32 0 -br label %label.if.6 -label.if.6: -ret i32 1 -unreachable -} -define weak void @referential_equality_2_build(%class.referential_equality_2_A** %instance) #0 -{ -%var33 = call i8* @malloc_heap(i32 0) -%var32 = bitcast i8* %var33 to %class.referential_equality_2_A* -%var34 = alloca %class.referential_equality_2_A*, align 8 -store %class.referential_equality_2_A* %var32, %class.referential_equality_2_A** %var34, align 8 -call void @referential_equality_2_A(%class.referential_equality_2_A* %var32) -%var35 = load %class.referential_equality_2_A** %var34, align 8 -store %class.referential_equality_2_A* %var35, %class.referential_equality_2_A** %instance, align 8 -ret void -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_2/referential_equality_2.txt b/experiments/translator-bc/src/test/kotlin/tests/referential_equality_2/referential_equality_2.txt deleted file mode 100644 index 1312315a8b2..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/referential_equality_2/referential_equality_2.txt +++ /dev/null @@ -1,2 +0,0 @@ -referential_equality_2_EQ_master() == 1 -referential_equality_2_NEQ_master() == 1 diff --git a/experiments/translator-bc/src/test/kotlin/tests/return_1/return_1.kt b/experiments/translator-bc/src/test/kotlin/tests/return_1/return_1.kt deleted file mode 100644 index c1651707bb3..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/return_1/return_1.kt +++ /dev/null @@ -1,3 +0,0 @@ -fun return_test_1(x: Int): Int { - return 101 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/return_1/return_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/return_1/return_1.kt.out deleted file mode 100644 index e4232da22be..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/return_1/return_1.kt.out +++ /dev/null @@ -1,14 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @return_test_1_Int(i32 %return_test_1.x) #0 -{ -%return_test_1.x.addr = alloca i32, align 4 -store i32 %return_test_1.x, i32* %return_test_1.x.addr, align 4 -ret i32 101 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/return_1/return_1.txt b/experiments/translator-bc/src/test/kotlin/tests/return_1/return_1.txt deleted file mode 100644 index f6e4102f1ad..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/return_1/return_1.txt +++ /dev/null @@ -1 +0,0 @@ -return_test_1_Int(101) == 101 diff --git a/experiments/translator-bc/src/test/kotlin/tests/safe_access_operator/safe_access_operator.kt b/experiments/translator-bc/src/test/kotlin/tests/safe_access_operator/safe_access_operator.kt deleted file mode 100644 index 8e3df0e76de..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/safe_access_operator/safe_access_operator.kt +++ /dev/null @@ -1,14 +0,0 @@ -class save_access_operator_Gen(val i: Int) -class save_access_operator_MyClass(val i: save_access_operator_Gen?) - -fun save_access_operator_test1(): Int { - val x: save_access_operator_MyClass? = null - val y = save_access_operator_MyClass(x?.i) - - if (y == null) { - return 0 - } else { - return 1 - } -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/safe_access_operator/safe_access_operator.kt.out b/experiments/translator-bc/src/test/kotlin/tests/safe_access_operator/safe_access_operator.kt.out deleted file mode 100644 index e8d4e396667..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/safe_access_operator/safe_access_operator.kt.out +++ /dev/null @@ -1,77 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.save_access_operator_Gen = type { i32 } -%class.save_access_operator_MyClass = type { %class.save_access_operator_Gen* } -define weak void @save_access_operator_Gen_Int(%class.save_access_operator_Gen* %classvariable.this, i32 %save_access_operator_Gen.i) #0 -{ -%classvariable.this.addr = alloca %class.save_access_operator_Gen, align 8 -%save_access_operator_Gen.i.addr = alloca i32, align 4 -store i32 %save_access_operator_Gen.i, i32* %save_access_operator_Gen.i.addr, align 4 -%var2 = load i32* %save_access_operator_Gen.i.addr, align 4 -%var3 = getelementptr inbounds %class.save_access_operator_Gen* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.save_access_operator_Gen* %classvariable.this to i8* -%var5 = bitcast %class.save_access_operator_Gen* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak void @save_access_operator_MyClass_Ref_save_access_operator_Gen(%class.save_access_operator_MyClass* %classvariable.this, %class.save_access_operator_Gen* %save_access_operator_MyClass.i) #0 -{ -%classvariable.this.addr = alloca %class.save_access_operator_MyClass, align 8 -%var6 = getelementptr inbounds %class.save_access_operator_MyClass* %classvariable.this.addr, i32 0, i32 0 -store %class.save_access_operator_Gen* %save_access_operator_MyClass.i, %class.save_access_operator_Gen** %var6, align 8 -%var7 = bitcast %class.save_access_operator_MyClass* %classvariable.this to i8* -%var8 = bitcast %class.save_access_operator_MyClass* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var7, i8* %var8, i64 8, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @save_access_operator_test1() #0 -{ -%managed.unique.0.save_access_operator_test1.x = alloca %class.save_access_operator_MyClass*, align 8 -%var9 = load %class.save_access_operator_MyClass** %managed.unique.0.save_access_operator_test1.x, align 8 -store %class.save_access_operator_MyClass* null, %class.save_access_operator_MyClass** %managed.unique.0.save_access_operator_test1.x, align 8 -%var10 = load %class.save_access_operator_MyClass** %managed.unique.0.save_access_operator_test1.x, align 8 -%var12 = call i8* @malloc_heap(i32 8) -%var11 = bitcast i8* %var12 to %class.save_access_operator_Gen** -%var13 = icmp eq %class.save_access_operator_MyClass* %var10, null -br i1 %var13, label %label.safe.access.1, label %label.safe.access.2 -label.safe.access.1: -store %class.save_access_operator_Gen* null, %class.save_access_operator_Gen** %var11, align 8 -br label %label.safe.access.3 -label.safe.access.2: -%var14 = load %class.save_access_operator_MyClass** %managed.unique.0.save_access_operator_test1.x, align 8 -%var15 = getelementptr inbounds %class.save_access_operator_MyClass* %var14, i32 0, i32 0 -%var16 = load %class.save_access_operator_Gen** %var15, align 8 -store %class.save_access_operator_Gen* %var16, %class.save_access_operator_Gen** %var11, align 8 -br label %label.safe.access.3 -label.safe.access.3: -%var17 = load %class.save_access_operator_Gen** %var11, align 8 -%var19 = call i8* @malloc_heap(i32 8) -%var18 = bitcast i8* %var19 to %class.save_access_operator_MyClass* -%var20 = alloca %class.save_access_operator_MyClass*, align 8 -store %class.save_access_operator_MyClass* %var18, %class.save_access_operator_MyClass** %var20, align 8 -call void @save_access_operator_MyClass_Ref_save_access_operator_Gen(%class.save_access_operator_MyClass* %var18, %class.save_access_operator_Gen* %var17) -%managed.unique.1.save_access_operator_test1.y = alloca %class.save_access_operator_MyClass*, align 8 -%var21 = load %class.save_access_operator_MyClass** %managed.unique.1.save_access_operator_test1.y, align 8 -%var22 = load %class.save_access_operator_MyClass** %var20, align 8 -store %class.save_access_operator_MyClass* %var22, %class.save_access_operator_MyClass** %managed.unique.1.save_access_operator_test1.y, align 8 -%var23 = load %class.save_access_operator_MyClass** %managed.unique.1.save_access_operator_test1.y, align 8 -%var24 = load %class.save_access_operator_MyClass** %managed.unique.1.save_access_operator_test1.y, align 8 -%var25 = icmp eq %class.save_access_operator_MyClass* %var24, null -br i1 %var25, label %label.if.4, label %label.if.5 -label.if.4: -ret i32 0 -br label %label.if.6 -label.if.5: -ret i32 1 -br label %label.if.6 -label.if.6: -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/safe_access_operator/safe_access_operator.txt b/experiments/translator-bc/src/test/kotlin/tests/safe_access_operator/safe_access_operator.txt deleted file mode 100644 index f7b1137a7d9..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/safe_access_operator/safe_access_operator.txt +++ /dev/null @@ -1 +0,0 @@ -save_access_operator_test1() == 1 diff --git a/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt b/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt deleted file mode 100644 index c4025d93bac..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt +++ /dev/null @@ -1,28 +0,0 @@ -class secondary_constructor_1_class(var field1: Int) { - constructor(field1: Int, field2: Int) : this(field1) { - this.field1 = field1 + field2 - } -} - -fun secondary_constructor_1(x: Int): Int { - val cls = secondary_constructor_1_class(12, x) - return cls.field1 -} - -class secondary_constructor_1_class2() { - var field1: IntArray - - init { - field1 = IntArray(0) - } - - constructor(x: Int) : this() { - this.field1 = this.field1.plus(x) - } -} - -fun secondary_constructor_1_arrays(): Int { - val cls = secondary_constructor_1_class2(56) - println(cls.field1) - return cls.field1.size + cls.field1[0] -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt.err deleted file mode 100644 index 2df974c9c45..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt.err +++ /dev/null @@ -1,8 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./secondary_constructor_1/secondary_constructor_1.kt 20:35 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./secondary_constructor_1/secondary_constructor_1.kt 26:5 Unresolved reference: println -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.txt b/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.txt deleted file mode 100644 index 399810aa54b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -secondary_constructor_1_Int(1389) == 1401 -secondary_constructor_1_arrays() == 57 diff --git a/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.kt b/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.kt deleted file mode 100644 index 69ee598a321..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.kt +++ /dev/null @@ -1,556 +0,0 @@ - -class DirectionResponse private constructor(var code: Int) { - //========== Properties =========== - //int32 code = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo(output: CodedOutputStream) { - //int32 code = 1 - if (code != 0) { - output.writeInt32(1, code) - } - - } - - fun mergeWith(other: DirectionResponse) { - code = other.code - this.errorCode = other.errorCode - } - - fun mergeFromWithSize(input: CodedInputStream, expectedSize: Int) { - val builder = DirectionResponse.BuilderDirectionResponse(0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom(input: CodedInputStream) { - val builder = DirectionResponse.BuilderDirectionResponse(0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (code != 0) { - size += WireFormat.getInt32Size(1, code) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (code != 0) { - size += WireFormat.getInt32Size(1, code) - } - return size - } - - //========== Builder =========== - class BuilderDirectionResponse constructor(var code: Int) { - //========== Properties =========== - //int32 code = 1 - fun setCode(value: Int): DirectionResponse.BuilderDirectionResponse { - code = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo(output: CodedOutputStream) { - //int32 code = 1 - if (code != 0) { - output.writeInt32(1, code) - } - - } - - //========== Mutating methods =========== - fun build(): DirectionResponse { - val res = DirectionResponse(code) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { - return false - } - val tag = input.readInt32NoTag() - if (tag == 0) { - return false - } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when (fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - code = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): DirectionResponse.BuilderDirectionResponse { - while (getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { - errorCode = 2 - } - return this - } - - fun parseFrom(input: CodedInputStream): DirectionResponse.BuilderDirectionResponse { - while (parseFieldFrom(input)) { - } - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (code != 0) { - size += WireFormat.getInt32Size(1, code) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (code != 0) { - size += WireFormat.getInt32Size(1, code) - } - return size - } - - } - -} - -class RouteRequest private constructor(var distances: IntArray, var angles: IntArray) { - //========== Properties =========== - //repeated int32 distances = 1 - - //repeated int32 angles = 2 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo(output: CodedOutputStream) { - //repeated int32 distances = 1 - if (distances.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - arrayByteSize += arraySize - } while (false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < distances.size) { - output.writeInt32NoTag(distances[i]) - i += 1 - } - } while (false) - } - - //repeated int32 angles = 2 - if (angles.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - arrayByteSize += arraySize - } while (false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < angles.size) { - output.writeInt32NoTag(angles[i]) - i += 1 - } - } while (false) - } - - } - - fun mergeWith(other: RouteRequest) { - distances = distances.plus((other.distances)) - angles = angles.plus((other.angles)) - this.errorCode = other.errorCode - } - - fun mergeFromWithSize(input: CodedInputStream, expectedSize: Int) { - val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom(input: CodedInputStream) { - val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - return size - } - - //========== Builder =========== - class BuilderRouteRequest constructor(var distances: IntArray, var angles: IntArray) { - //========== Properties =========== - //repeated int32 distances = 1 - fun setDistances(value: IntArray): RouteRequest.BuilderRouteRequest { - distances = value - return this - } - - fun setdistancesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { - distances[index] = value - return this - } - - //repeated int32 angles = 2 - fun setAngles(value: IntArray): RouteRequest.BuilderRouteRequest { - angles = value - return this - } - - fun setanglesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { - angles[index] = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo(output: CodedOutputStream) { - //repeated int32 distances = 1 - if (distances.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - arrayByteSize += arraySize - } while (false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < distances.size) { - output.writeInt32NoTag(distances[i]) - i += 1 - } - } while (false) - } - - //repeated int32 angles = 2 - if (angles.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - arrayByteSize += arraySize - } while (false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < angles.size) { - output.writeInt32NoTag(angles[i]) - i += 1 - } - } while (false) - } - - } - - //========== Mutating methods =========== - fun build(): RouteRequest { - val res = RouteRequest(distances, angles) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { - return false - } - val tag = input.readInt32NoTag() - if (tag == 0) { - return false - } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when (fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = IntArray(0) - var readSize = 0 - do { - var i = 0 - while (readSize < expectedByteSize) { - val tmp = IntArray(1) - tmp[0] = input.readInt32NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getInt32SizeNoTag(tmp[0]) - } - distances = newArray - } while (false) - } - 2 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = IntArray(0) - var readSize = 0 - do { - var i = 0 - while (readSize < expectedByteSize) { - val tmp = IntArray(1) - tmp[0] = input.readInt32NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getInt32SizeNoTag(tmp[0]) - } - angles = newArray - } while (false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): RouteRequest.BuilderRouteRequest { - while (getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { - errorCode = 2 - } - return this - } - - fun parseFrom(input: CodedInputStream): RouteRequest.BuilderRouteRequest { - while (parseFieldFrom(input)) { - } - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - return size - } - - } - -} - -fun serialization_test1(i: Int): Int { - val msg = DirectionResponse.BuilderDirectionResponse(i).build() - val buffer = ByteArray(msg.getSizeNoTag()) - val output = CodedOutputStream(buffer) - msg.writeTo(output) - - val input = CodedInputStream(buffer) - val msg2 = DirectionResponse.BuilderDirectionResponse(1).parseFrom(input) - - return msg2.code -} - -fun serialization_test2(size: Int) { - val arr = IntArray(size) - - var i = 0 - while (i < size) { - arr[i] = i - i++ - } - - val message = RouteRequest.BuilderRouteRequest(arr, arr).build() - val buffer = ByteArray(message.getSizeNoTag()) - - i = 0 - while (i < buffer.size) { - buffer[i] = 0 - i++ - } - - - val outputStream = CodedOutputStream(buffer) - message.writeTo(outputStream) - - val inputStream = CodedInputStream(buffer) - val receivedMessage = RouteRequest.BuilderRouteRequest(IntArray(1), IntArray(1)).parseFrom(inputStream).build() - - i = 0 - while (i < size) { - assert(message.distances[i] == receivedMessage.distances[i]) - i++ - } -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.kt.err b/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.kt.err deleted file mode 100644 index b9f29c3b2ad..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.kt.err +++ /dev/null @@ -1,97 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 9:25 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 22:34 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 27:26 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 36:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 38:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 38:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 38:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 45:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 62:29 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 77:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 85:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 86:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 89:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 100:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 110:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 120:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 122:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 122:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 122:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 129:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 147:25 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 150:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 158:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 177:32 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 185:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 205:31 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 206:25 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 210:34 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 215:26 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 226:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 226:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 229:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 233:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 239:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 239:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 242:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 246:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 249:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 249:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 249:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 258:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 258:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 261:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 265:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 271:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 271:50 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 274:34 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 278:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 312:29 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 315:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 323:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 342:36 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 350:42 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 376:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 384:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 385:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 388:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 400:49 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 401:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 407:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 419:49 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 420:41 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 430:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 440:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 452:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 452:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 455:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 459:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 465:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 465:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 468:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 472:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 475:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 475:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 475:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 484:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 484:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 487:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 491:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 497:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 497:54 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 500:38 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 504:29 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 517:18 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 520:17 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 545:24 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 548:23 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./serialization_test/serialization_test.kt 553:9 Unresolved reference: assert -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.kt.out b/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.txt b/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.txt deleted file mode 100644 index 26a1fd0a657..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/serialization_test/serialization_test.txt +++ /dev/null @@ -1,2 +0,0 @@ -serialization_test1_Int(1442) == 1442 -serialization_test2_Int(5) diff --git a/experiments/translator-bc/src/test/kotlin/tests/simple_class_2/simple_class_2.kt b/experiments/translator-bc/src/test/kotlin/tests/simple_class_2/simple_class_2.kt deleted file mode 100644 index 41b23a122ba..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/simple_class_2/simple_class_2.kt +++ /dev/null @@ -1,20 +0,0 @@ -class simple_class_2_MyClass(val b: Int, var c: Int) - -fun simple_class_2_genMyClass(i: Int): simple_class_2_MyClass { - return simple_class_2_MyClass(i, i) -} - -fun simple_class_2_change(x: Int): Int { - val y = simple_class_2_MyClass(x, x) - y.c = x - y.c = x - y.c = 1 - y.c = x + 1 - - return y.c -} - -fun simple_class_2_testGen(i: Int): Int { - val j = simple_class_2_genMyClass(i) - return j.b -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/simple_class_2/simple_class_2.kt.out b/experiments/translator-bc/src/test/kotlin/tests/simple_class_2/simple_class_2.kt.out deleted file mode 100644 index 20dc327fc17..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/simple_class_2/simple_class_2.kt.out +++ /dev/null @@ -1,102 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.simple_class_2_MyClass = type { i32, i32 } -define weak void @simple_class_2_MyClass_Int_Int(%class.simple_class_2_MyClass* %classvariable.this, i32 %simple_class_2_MyClass.b, i32 %simple_class_2_MyClass.c) #0 -{ -%classvariable.this.addr = alloca %class.simple_class_2_MyClass, align 8 -%simple_class_2_MyClass.b.addr = alloca i32, align 4 -store i32 %simple_class_2_MyClass.b, i32* %simple_class_2_MyClass.b.addr, align 4 -%simple_class_2_MyClass.c.addr = alloca i32, align 4 -store i32 %simple_class_2_MyClass.c, i32* %simple_class_2_MyClass.c.addr, align 4 -%var2 = load i32* %simple_class_2_MyClass.b.addr, align 4 -%var3 = getelementptr inbounds %class.simple_class_2_MyClass* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = load i32* %simple_class_2_MyClass.c.addr, align 4 -%var5 = getelementptr inbounds %class.simple_class_2_MyClass* %classvariable.this.addr, i32 0, i32 1 -store i32 %var4, i32* %var5, align 4 -%var6 = bitcast %class.simple_class_2_MyClass* %classvariable.this to i8* -%var7 = bitcast %class.simple_class_2_MyClass* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var6, i8* %var7, i64 8, i32 4, i1 false) -ret void -unreachable -} -define weak void @simple_class_2_genMyClass_Int(%class.simple_class_2_MyClass** %instance, i32 %simple_class_2_genMyClass.i) #0 -{ -%simple_class_2_genMyClass.i.addr = alloca i32, align 4 -store i32 %simple_class_2_genMyClass.i, i32* %simple_class_2_genMyClass.i.addr, align 4 -%var8 = load i32* %simple_class_2_genMyClass.i.addr, align 4 -%var9 = load i32* %simple_class_2_genMyClass.i.addr, align 4 -%var11 = call i8* @malloc_heap(i32 8) -%var10 = bitcast i8* %var11 to %class.simple_class_2_MyClass* -%var12 = alloca %class.simple_class_2_MyClass*, align 8 -store %class.simple_class_2_MyClass* %var10, %class.simple_class_2_MyClass** %var12, align 8 -call void @simple_class_2_MyClass_Int_Int(%class.simple_class_2_MyClass* %var10, i32 %var8, i32 %var9) -%var13 = load %class.simple_class_2_MyClass** %var12, align 8 -store %class.simple_class_2_MyClass* %var13, %class.simple_class_2_MyClass** %instance, align 8 -ret void -unreachable -} -define weak i32 @simple_class_2_change_Int(i32 %simple_class_2_change.x) #0 -{ -%simple_class_2_change.x.addr = alloca i32, align 4 -store i32 %simple_class_2_change.x, i32* %simple_class_2_change.x.addr, align 4 -%var14 = load i32* %simple_class_2_change.x.addr, align 4 -%var15 = load i32* %simple_class_2_change.x.addr, align 4 -%var17 = call i8* @malloc_heap(i32 8) -%var16 = bitcast i8* %var17 to %class.simple_class_2_MyClass* -%var18 = alloca %class.simple_class_2_MyClass*, align 8 -store %class.simple_class_2_MyClass* %var16, %class.simple_class_2_MyClass** %var18, align 8 -call void @simple_class_2_MyClass_Int_Int(%class.simple_class_2_MyClass* %var16, i32 %var14, i32 %var15) -%managed.unique.0.simple_class_2_change.y = alloca %class.simple_class_2_MyClass*, align 8 -%var19 = load %class.simple_class_2_MyClass** %managed.unique.0.simple_class_2_change.y, align 8 -%var20 = load %class.simple_class_2_MyClass** %var18, align 8 -store %class.simple_class_2_MyClass* %var20, %class.simple_class_2_MyClass** %managed.unique.0.simple_class_2_change.y, align 8 -%var21 = load %class.simple_class_2_MyClass** %managed.unique.0.simple_class_2_change.y, align 8 -%var22 = getelementptr inbounds %class.simple_class_2_MyClass* %var21, i32 0, i32 1 -%var23 = load i32* %var22, align 4 -%var24 = load i32* %simple_class_2_change.x.addr, align 4 -store i32 %var24, i32* %var22, align 4 -%var25 = load %class.simple_class_2_MyClass** %managed.unique.0.simple_class_2_change.y, align 8 -%var26 = getelementptr inbounds %class.simple_class_2_MyClass* %var25, i32 0, i32 1 -%var27 = load i32* %var26, align 4 -%var28 = load i32* %simple_class_2_change.x.addr, align 4 -store i32 %var28, i32* %var26, align 4 -%var29 = load %class.simple_class_2_MyClass** %managed.unique.0.simple_class_2_change.y, align 8 -%var30 = getelementptr inbounds %class.simple_class_2_MyClass* %var29, i32 0, i32 1 -%var31 = load i32* %var30, align 4 -store i32 1, i32* %var30, align 4 -%var32 = load %class.simple_class_2_MyClass** %managed.unique.0.simple_class_2_change.y, align 8 -%var33 = getelementptr inbounds %class.simple_class_2_MyClass* %var32, i32 0, i32 1 -%var34 = load i32* %simple_class_2_change.x.addr, align 4 -%var35 = add nsw i32 %var34, 1 -%var36 = load i32* %var33, align 4 -store i32 %var35, i32* %var33, align 4 -%var37 = load %class.simple_class_2_MyClass** %managed.unique.0.simple_class_2_change.y, align 8 -%var38 = getelementptr inbounds %class.simple_class_2_MyClass* %var37, i32 0, i32 1 -%var39 = load i32* %var38, align 4 -ret i32 %var39 -unreachable -} -define weak i32 @simple_class_2_testGen_Int(i32 %simple_class_2_testGen.i) #0 -{ -%simple_class_2_testGen.i.addr = alloca i32, align 4 -store i32 %simple_class_2_testGen.i, i32* %simple_class_2_testGen.i.addr, align 4 -%var40 = load i32* %simple_class_2_testGen.i.addr, align 4 -%var42 = call i8* @malloc_heap(i32 8) -%var41 = bitcast i8* %var42 to %class.simple_class_2_MyClass** -call void @simple_class_2_genMyClass_Int(%class.simple_class_2_MyClass** %var41, i32 %var40) -%managed.unique.1.simple_class_2_testGen.j = alloca %class.simple_class_2_MyClass*, align 8 -%var43 = load %class.simple_class_2_MyClass** %managed.unique.1.simple_class_2_testGen.j, align 8 -%var44 = load %class.simple_class_2_MyClass** %var41, align 8 -store %class.simple_class_2_MyClass* %var44, %class.simple_class_2_MyClass** %managed.unique.1.simple_class_2_testGen.j, align 8 -%var45 = load %class.simple_class_2_MyClass** %managed.unique.1.simple_class_2_testGen.j, align 8 -%var46 = getelementptr inbounds %class.simple_class_2_MyClass* %var45, i32 0, i32 0 -%var47 = load i32* %var46, align 4 -ret i32 %var47 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/simple_class_2/simple_class_2.txt b/experiments/translator-bc/src/test/kotlin/tests/simple_class_2/simple_class_2.txt deleted file mode 100644 index 25648e5b636..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/simple_class_2/simple_class_2.txt +++ /dev/null @@ -1,3 +0,0 @@ -simple_class_2_change_Int(0) == 1 -simple_class_2_change_Int(1) == 2 -simple_class_2_testGen_Int(10) == 10 diff --git a/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt b/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt deleted file mode 100644 index 128b2cf90bc..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt +++ /dev/null @@ -1,296 +0,0 @@ -class simple_test private constructor (var field1: Int, var field2: Long, var field3: Int, var field4: Long, var field5: Boolean) { - //========== Properties =========== - //int32 field1 = 1 - - //int64 field2 = 2 - - //sint32 field3 = 3 - - //sint64 field4 = 4 - - //bool field5 = 5 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 field1 = 1 - if (field1 != 0) { - output.writeInt32 (1, field1) - } - - //int64 field2 = 2 - if (field2 != 0L) { - output.writeInt64 (2, field2) - } - - //sint32 field3 = 3 - if (field3 != 0) { - output.writeSInt32 (3, field3) - } - - //sint64 field4 = 4 - if (field4 != 0L) { - output.writeSInt64 (4, field4) - } - - //bool field5 = 5 - if (field5 != false) { - output.writeBool (5, field5) - } - - } - - fun mergeWith (other: simple_test) { - field1 = other.field1 - field2 = other.field2 - field3 = other.field3 - field4 = other.field4 - field5 = other.field5 - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = simple_test.Buildersimple_test(0, 0L, 0, 0L, false) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = simple_test.Buildersimple_test(0, 0L, 0, 0L, false) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (field1 != 0) { - size += WireFormat.getInt32Size(1, field1) - } - if (field2 != 0L) { - size += WireFormat.getInt64Size(2, field2) - } - if (field3 != 0) { - size += WireFormat.getSInt32Size(3, field3) - } - if (field4 != 0L) { - size += WireFormat.getSInt64Size(4, field4) - } - if (field5 != false) { - size += WireFormat.getBoolSize(5, field5) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (field1 != 0) { - size += WireFormat.getInt32Size(1, field1) - } - if (field2 != 0L) { - size += WireFormat.getInt64Size(2, field2) - } - if (field3 != 0) { - size += WireFormat.getSInt32Size(3, field3) - } - if (field4 != 0L) { - size += WireFormat.getSInt64Size(4, field4) - } - if (field5 != false) { - size += WireFormat.getBoolSize(5, field5) - } - return size - } - - //========== Builder =========== - class Buildersimple_test constructor (var field1: Int, var field2: Long, var field3: Int, var field4: Long, var field5: Boolean) { - //========== Properties =========== - //int32 field1 = 1 - fun setField1(value: Int): simple_test.Buildersimple_test { - field1 = value - return this - } - - //int64 field2 = 2 - fun setField2(value: Long): simple_test.Buildersimple_test { - field2 = value - return this - } - - //sint32 field3 = 3 - fun setField3(value: Int): simple_test.Buildersimple_test { - field3 = value - return this - } - - //sint64 field4 = 4 - fun setField4(value: Long): simple_test.Buildersimple_test { - field4 = value - return this - } - - //bool field5 = 5 - fun setField5(value: Boolean): simple_test.Buildersimple_test { - field5 = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 field1 = 1 - if (field1 != 0) { - output.writeInt32 (1, field1) - } - - //int64 field2 = 2 - if (field2 != 0L) { - output.writeInt64 (2, field2) - } - - //sint32 field3 = 3 - if (field3 != 0) { - output.writeSInt32 (3, field3) - } - - //sint64 field4 = 4 - if (field4 != 0L) { - output.writeSInt64 (4, field4) - } - - //bool field5 = 5 - if (field5 != false) { - output.writeBool (5, field5) - } - - } - - //========== Mutating methods =========== - fun build(): simple_test { - val res = simple_test(field1, field2, field3, field4, field5) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - field1 = input.readInt32NoTag() - } - 2 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - field2 = input.readInt64NoTag() - } - 3 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - field3 = input.readSInt32NoTag() - } - 4 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - field4 = input.readSInt64NoTag() - } - 5 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - field5 = input.readBoolNoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): simple_test.Buildersimple_test { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): simple_test.Buildersimple_test { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (field1 != 0) { - size += WireFormat.getInt32Size(1, field1) - } - if (field2 != 0L) { - size += WireFormat.getInt64Size(2, field2) - } - if (field3 != 0) { - size += WireFormat.getSInt32Size(3, field3) - } - if (field4 != 0L) { - size += WireFormat.getSInt64Size(4, field4) - } - if (field5 != false) { - size += WireFormat.getBoolSize(5, field5) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (field1 != 0) { - size += WireFormat.getInt32Size(1, field1) - } - if (field2 != 0L) { - size += WireFormat.getInt64Size(2, field2) - } - if (field3 != 0) { - size += WireFormat.getSInt32Size(3, field3) - } - if (field4 != 0L) { - size += WireFormat.getSInt64Size(4, field4) - } - if (field5 != false) { - size += WireFormat.getBoolSize(5, field5) - } - return size - } - - } - -} - -fun simple_proto_test(): Int{ - val instance = simple_test.Buildersimple_test(100, 200, 300, 400, true).build() - val buffer = ByteArray(instance.getSizeNoTag()) - val outputStream = CodedOutputStream(buffer) - instance.writeTo(outputStream) - val inputStream = CodedInputStream(buffer) - val receivedMesssage = simple_test.Buildersimple_test(112, 222, 333, 444, false).parseFrom(inputStream).build() - - assert(receivedMesssage.field1 == 100) - assert(receivedMesssage.field2 == 200L) - assert(receivedMesssage.field3 == 300) - assert(receivedMesssage.field4 == 400L) - assert(receivedMesssage.field5 == true) - return 1 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt.err deleted file mode 100644 index 3495f33ed2b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt.err +++ /dev/null @@ -1,52 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 16:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 53:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 58:27 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 67:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 70:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 73:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 76:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 79:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 81:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 81:52 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 81:87 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 88:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 91:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 94:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 97:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 100:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 141:30 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 176:35 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 180:31 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 181:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 184:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 191:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 198:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 205:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 212:40 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 223:38 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 231:30 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 240:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 243:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 246:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 249:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 252:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 254:21 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 254:56 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 254:91 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 261:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 264:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 267:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 270:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 273:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 285:24 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 287:23 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 290:5 Unresolved reference: assert -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 291:5 Unresolved reference: assert -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 292:5 Unresolved reference: assert -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 293:5 Unresolved reference: assert -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./simple_proto_test_1/simple_proto_test_1.kt 294:5 Unresolved reference: assert -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.txt b/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.txt deleted file mode 100644 index eaa33bf8d8c..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.txt +++ /dev/null @@ -1 +0,0 @@ -simple_proto_test() == 1 diff --git a/experiments/translator-bc/src/test/kotlin/tests/simply_class_1/simply_class_1.kt b/experiments/translator-bc/src/test/kotlin/tests/simply_class_1/simply_class_1.kt deleted file mode 100644 index b0bc005f92b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/simply_class_1/simply_class_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -class classname_A(val x: Int) { - fun method(): Int { - return this.x + 5 - } -} - -fun simply_class_1(zz: Int): Int { - val x = classname_A(zz) - return x.method() -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/simply_class_1/simply_class_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/simply_class_1/simply_class_1.kt.out deleted file mode 100644 index b03327ba4e4..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/simply_class_1/simply_class_1.kt.out +++ /dev/null @@ -1,52 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.classname_A = type { i32 } -define weak void @classname_A_Int(%class.classname_A* %classvariable.this, i32 %classname_A.x) #0 -{ -%classvariable.this.addr = alloca %class.classname_A, align 8 -%classname_A.x.addr = alloca i32, align 4 -store i32 %classname_A.x, i32* %classname_A.x.addr, align 4 -%var2 = load i32* %classname_A.x.addr, align 4 -%var3 = getelementptr inbounds %class.classname_A* %classvariable.this.addr, i32 0, i32 0 -store i32 %var2, i32* %var3, align 4 -%var4 = bitcast %class.classname_A* %classvariable.this to i8* -%var5 = bitcast %class.classname_A* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i32 @classname_A.method(%class.classname_A* %classvariable.this) #0 -{ -%var6 = getelementptr inbounds %class.classname_A* %classvariable.this, i32 0, i32 0 -%var7 = load i32* %var6, align 4 -%var8 = add nsw i32 %var7, 5 -ret i32 %var8 -unreachable -} -define weak i32 @simply_class_1_Int(i32 %simply_class_1.zz) #0 -{ -%simply_class_1.zz.addr = alloca i32, align 4 -store i32 %simply_class_1.zz, i32* %simply_class_1.zz.addr, align 4 -%var9 = load i32* %simply_class_1.zz.addr, align 4 -%var11 = call i8* @malloc_heap(i32 4) -%var10 = bitcast i8* %var11 to %class.classname_A* -%var12 = alloca %class.classname_A*, align 8 -store %class.classname_A* %var10, %class.classname_A** %var12, align 8 -call void @classname_A_Int(%class.classname_A* %var10, i32 %var9) -%managed.unique.0.simply_class_1.x = alloca %class.classname_A*, align 8 -%var13 = load %class.classname_A** %managed.unique.0.simply_class_1.x, align 8 -%var14 = load %class.classname_A** %var12, align 8 -store %class.classname_A* %var14, %class.classname_A** %managed.unique.0.simply_class_1.x, align 8 -%var15 = load %class.classname_A** %managed.unique.0.simply_class_1.x, align 8 -%var16 = call i32 @classname_A.method(%class.classname_A* %var15) -%var17 = alloca i32, align 4 -store i32 %var16, i32* %var17, align 4 -%var18 = load i32* %var17, align 4 -ret i32 %var18 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/simply_class_1/simply_class_1.txt b/experiments/translator-bc/src/test/kotlin/tests/simply_class_1/simply_class_1.txt deleted file mode 100644 index 2ca18d2e3ff..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/simply_class_1/simply_class_1.txt +++ /dev/null @@ -1 +0,0 @@ -simply_class_1_Int(6789) == 6794 diff --git a/experiments/translator-bc/src/test/kotlin/tests/smartcast_1/smartcast_1.kt b/experiments/translator-bc/src/test/kotlin/tests/smartcast_1/smartcast_1.kt deleted file mode 100644 index 1ba463a1ae2..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/smartcast_1/smartcast_1.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun smartcast_1_CastCheck(x: Int): Int { - return x + 1 -} - -fun smartcast_1(): Int { - var x: Int? = null - x = 3 - val y = x - val uio = smartcast_1_CastCheck(y) - return uio -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/smartcast_1/smartcast_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/smartcast_1/smartcast_1.kt.out deleted file mode 100644 index e18f6496275..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/smartcast_1/smartcast_1.kt.out +++ /dev/null @@ -1,43 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @smartcast_1_CastCheck_Int(i32 %smartcast_1_CastCheck.x) #0 -{ -%smartcast_1_CastCheck.x.addr = alloca i32, align 4 -store i32 %smartcast_1_CastCheck.x, i32* %smartcast_1_CastCheck.x.addr, align 4 -%var2 = load i32* %smartcast_1_CastCheck.x.addr, align 4 -%var3 = add nsw i32 %var2, 1 -ret i32 %var3 -unreachable -} -define weak i32 @smartcast_1() #0 -{ -%managed.unique.0.smartcast_1.x = alloca i32*, align 4 -%var4 = load i32** %managed.unique.0.smartcast_1.x, align 4 -store i32* null, i32** %managed.unique.0.smartcast_1.x, align 8 -%var5 = load i32** %managed.unique.0.smartcast_1.x, align 4 -%var7 = call i8* @malloc_heap(i32 8) -%var6 = bitcast i8* %var7 to i32* -store i32 3, i32* %var6, align 4 -store i32* %var6, i32** %managed.unique.0.smartcast_1.x, align 4 -%managed.unique.1.smartcast_1.y = alloca i32*, align 4 -%var8 = load i32** %managed.unique.1.smartcast_1.y, align 4 -%var9 = load i32** %managed.unique.0.smartcast_1.x, align 4 -store i32* %var9, i32** %managed.unique.1.smartcast_1.y, align 4 -%var10 = load i32** %managed.unique.1.smartcast_1.y, align 4 -%var11 = load i32* %var10, align 4 -%var12 = call i32 @smartcast_1_CastCheck_Int(i32 %var11) -%var13 = alloca i32, align 4 -store i32 %var12, i32* %var13, align 4 -%managed.unique.2.smartcast_1.uio = alloca i32, align 4 -%var14 = load i32* %managed.unique.2.smartcast_1.uio, align 4 -%var15 = load i32* %var13, align 4 -store i32 %var15, i32* %managed.unique.2.smartcast_1.uio, align 4 -%var16 = load i32* %managed.unique.2.smartcast_1.uio, align 4 -ret i32 %var16 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/smartcast_1/smartcast_1.txt b/experiments/translator-bc/src/test/kotlin/tests/smartcast_1/smartcast_1.txt deleted file mode 100644 index 5343a057e00..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/smartcast_1/smartcast_1.txt +++ /dev/null @@ -1 +0,0 @@ -smartcast_1() == 4 diff --git a/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.kt b/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.kt deleted file mode 100644 index 551b6889a6d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.kt +++ /dev/null @@ -1,414 +0,0 @@ -class RouteRequest private constructor (var distances: IntArray, var angles: IntArray) { - //========== Properties =========== - //repeated int32 distances = 1 - - //repeated int32 angles = 2 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated int32 distances = 1 - if (distances.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < distances.size) { - output.writeInt32NoTag (distances[i]) - i += 1 - } - } while(false) - } - - //repeated int32 angles = 2 - if (angles.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < angles.size) { - output.writeInt32NoTag (angles[i]) - i += 1 - } - } while(false) - } - - } - - fun mergeWith (other: RouteRequest) { - distances = distances.plus((other.distances)) - angles = angles.plus((other.angles)) - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - //========== Builder =========== - class BuilderRouteRequest constructor (var distances: IntArray, var angles: IntArray) { - //========== Properties =========== - //repeated int32 distances = 1 - fun setDistances(value: IntArray): RouteRequest.BuilderRouteRequest { - distances = value - return this - } - fun setdistancesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { - distances[index] = value - return this - } - - //repeated int32 angles = 2 - fun setAngles(value: IntArray): RouteRequest.BuilderRouteRequest { - angles = value - return this - } - fun setanglesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { - angles[index] = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated int32 distances = 1 - if (distances.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < distances.size) { - output.writeInt32NoTag (distances[i]) - i += 1 - } - } while(false) - } - - //repeated int32 angles = 2 - if (angles.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < angles.size) { - output.writeInt32NoTag (angles[i]) - i += 1 - } - } while(false) - } - - } - - //========== Mutating methods =========== - fun build(): RouteRequest { - val res = RouteRequest(distances, angles) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = IntArray(0) - var readSize = 0 - do { - var i = 0 - while(readSize < expectedByteSize) { - val tmp = IntArray(1) - tmp[0] = input.readInt32NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getInt32SizeNoTag(tmp[0]) - } - distances = newArray - } while (false) - } - 2 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = IntArray(0) - var readSize = 0 - do { - var i = 0 - while(readSize < expectedByteSize) { - val tmp = IntArray(1) - tmp[0] = input.readInt32NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getInt32SizeNoTag(tmp[0]) - } - angles = newArray - } while (false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): RouteRequest.BuilderRouteRequest { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): RouteRequest.BuilderRouteRequest { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - } - -} - -fun echoProto() { - var i = 0 - while (i < 100) { - val route = readRoute() - go(route) - i++ - } -} - -fun receiveByteArray(): ByteArray { - val result = ByteArray(10) - result[0] = 10 - result[1] = 4 - result[2] = 232.toByte() - result[3] = 7 - result[4] = 232.toByte() - result[5] = 7 - result[6] = 18 - result[7] = 2 - result[8] = 0 - result[9] = 0 - - return result -} - -fun readRoute(): RouteRequest { - val buffer = receiveByteArray() - val stream = CodedInputStream(buffer) - val result = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)).parseFrom(stream).build() - - return result -} - -fun wait(i: Int) { -} - -fun go(request: RouteRequest) { - val times = request.distances - var j = 0 - - while (j < times.size) { - val time = times[j] - wait(time) - j++ - } - -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.kt.err deleted file mode 100644 index 37cbbe39a6d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.kt.err +++ /dev/null @@ -1,73 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 10:24 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 13:26 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 21:26 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 40:26 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 48:26 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 68:27 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 69:21 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 73:33 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 78:25 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 89:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 89:42 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 92:24 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 96:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 102:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 102:42 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 105:24 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 109:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 112:13 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 112:48 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 112:83 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 121:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 121:42 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 124:24 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 128:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 134:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 134:42 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 137:24 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 141:17 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 173:26 Unresolved reference: CodedOutputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 176:28 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 184:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 203:28 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 211:28 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 237:31 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 241:25 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 242:22 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 245:30 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 257:35 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 258:27 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 264:30 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 276:35 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: -public operator fun String?.plus(other: Any?): String defined in kotlin -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 277:27 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 287:34 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 295:26 Unresolved reference: CodedInputStream -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 306:19 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 306:44 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 309:26 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 313:19 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 319:19 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 319:44 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 322:26 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 326:19 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 329:15 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 329:50 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 329:85 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 338:19 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 338:44 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 341:26 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 345:19 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 351:19 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 351:44 Unresolved reference: WireType -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 354:26 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 358:19 Unresolved reference: WireFormat -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./stress_test_1/stress_test_1.kt 395:18 Unresolved reference: CodedInputStream -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.txt b/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.txt deleted file mode 100644 index 477ef1303c2..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/stress_test_1/stress_test_1.txt +++ /dev/null @@ -1 +0,0 @@ -echoProto() diff --git a/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt b/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt deleted file mode 100644 index e553c80f108..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun string_print_test_1_inline(): Int { - println("STRING INLINE PRINT WORKS") - return 23 -} - -fun string_print_test_1_variable(): Int { - val x = "STRING VARIABLE WORKS" - val y = x - println(y) - return 1 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt.err deleted file mode 100644 index e226e329a2a..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt.err +++ /dev/null @@ -1,7 +0,0 @@ -[ERROR]null -1:-1 - -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./string_print_test_1/string_print_test_1.kt 2:5 Unresolved reference: println -[ERROR]/Users/minamoto/ws/kotlin-native/experiments/translator-bc/src/test/kotlin/tests/./string_print_test_1/string_print_test_1.kt 9:5 Unresolved reference: println -Exception in thread "main" org.kotlinnative.translator.exceptions.TranslationException: Can't initialize binding context for project - at org.kotlinnative.translator.TranslationState$Companion.createTranslationState(TranslationState.kt:80) - at MainKt.main(main.kt:18) diff --git a/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.txt b/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.txt deleted file mode 100644 index 11a3bfdf37d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/string_print_test_1/string_print_test_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -string_print_test_1_inline() == 23 -string_print_test_1_variable() == 1 diff --git a/experiments/translator-bc/src/test/kotlin/tests/this_test_1/this_test_1.kt b/experiments/translator-bc/src/test/kotlin/tests/this_test_1/this_test_1.kt deleted file mode 100644 index 6471202d711..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/this_test_1/this_test_1.kt +++ /dev/null @@ -1,12 +0,0 @@ -class this_test_1_class { - var data: Int = 5 - fun f(x: Int) { - data = x + 5 - } -} - -fun this_test_1(arg: Int): Int { - val instance = this_test_1_class() - instance.f(arg) - return instance.data -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/this_test_1/this_test_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/this_test_1/this_test_1.kt.out deleted file mode 100644 index d304459ec77..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/this_test_1/this_test_1.kt.out +++ /dev/null @@ -1,54 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.this_test_1_class = type { i32 } -define weak void @this_test_1_class(%class.this_test_1_class* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.this_test_1_class, align 8 -%var2 = getelementptr inbounds %class.this_test_1_class* %classvariable.this.addr, i32 0, i32 0 -%var3 = load i32* %var2, align 4 -store i32 5, i32* %var2, align 4 -%var4 = bitcast %class.this_test_1_class* %classvariable.this to i8* -%var5 = bitcast %class.this_test_1_class* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak void @this_test_1_class.f_Int(%class.this_test_1_class* %classvariable.this, i32 %this_test_1_class.f.x) #0 -{ -%this_test_1_class.f.x.addr = alloca i32, align 4 -store i32 %this_test_1_class.f.x, i32* %this_test_1_class.f.x.addr, align 4 -%var6 = getelementptr inbounds %class.this_test_1_class* %classvariable.this, i32 0, i32 0 -%var7 = load i32* %this_test_1_class.f.x.addr, align 4 -%var8 = add nsw i32 %var7, 5 -%var9 = load i32* %var6, align 4 -store i32 %var8, i32* %var6, align 4 -ret void -unreachable -} -define weak i32 @this_test_1_Int(i32 %this_test_1.arg) #0 -{ -%this_test_1.arg.addr = alloca i32, align 4 -store i32 %this_test_1.arg, i32* %this_test_1.arg.addr, align 4 -%var11 = call i8* @malloc_heap(i32 4) -%var10 = bitcast i8* %var11 to %class.this_test_1_class* -%var12 = alloca %class.this_test_1_class*, align 8 -store %class.this_test_1_class* %var10, %class.this_test_1_class** %var12, align 8 -call void @this_test_1_class(%class.this_test_1_class* %var10) -%managed.unique.0.this_test_1.instance = alloca %class.this_test_1_class*, align 8 -%var13 = load %class.this_test_1_class** %managed.unique.0.this_test_1.instance, align 8 -%var14 = load %class.this_test_1_class** %var12, align 8 -store %class.this_test_1_class* %var14, %class.this_test_1_class** %managed.unique.0.this_test_1.instance, align 8 -%var15 = load %class.this_test_1_class** %managed.unique.0.this_test_1.instance, align 8 -%var16 = load i32* %this_test_1.arg.addr, align 4 -call void @this_test_1_class.f_Int(%class.this_test_1_class* %var15, i32 %var16) -%var17 = load %class.this_test_1_class** %managed.unique.0.this_test_1.instance, align 8 -%var18 = getelementptr inbounds %class.this_test_1_class* %var17, i32 0, i32 0 -%var19 = load i32* %var18, align 4 -ret i32 %var19 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/this_test_1/this_test_1.txt b/experiments/translator-bc/src/test/kotlin/tests/this_test_1/this_test_1.txt deleted file mode 100644 index dd4d81be586..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/this_test_1/this_test_1.txt +++ /dev/null @@ -1 +0,0 @@ -this_test_1_Int(48) == 53 diff --git a/experiments/translator-bc/src/test/kotlin/tests/unary_operators_1/unary_operators_1.kt b/experiments/translator-bc/src/test/kotlin/tests/unary_operators_1/unary_operators_1.kt deleted file mode 100644 index c45d721e185..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/unary_operators_1/unary_operators_1.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun unary_operator_1_minus(x : Int): Int { - return -x -} - -fun unary_operator_1_plus(x : Int): Int { - return x -} - -fun unary_operator_1_not(x : Boolean): Boolean { - return !x -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/unary_operators_1/unary_operators_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/unary_operators_1/unary_operators_1.kt.out deleted file mode 100644 index 9f80620200d..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/unary_operators_1/unary_operators_1.kt.out +++ /dev/null @@ -1,33 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i1 @unary_operator_1_not_Boolean(i1 %unary_operator_1_not.x) #0 -{ -%unary_operator_1_not.x.addr = alloca i1, align 4 -store i1 %unary_operator_1_not.x, i1* %unary_operator_1_not.x.addr, align 4 -%var2 = load i1* %unary_operator_1_not.x.addr, align 4 -%var3 = xor i1 1, %var2 -ret i1 %var3 -unreachable -} -define weak i32 @unary_operator_1_minus_Int(i32 %unary_operator_1_minus.x) #0 -{ -%unary_operator_1_minus.x.addr = alloca i32, align 4 -store i32 %unary_operator_1_minus.x, i32* %unary_operator_1_minus.x.addr, align 4 -%var4 = load i32* %unary_operator_1_minus.x.addr, align 4 -%var5 = sub nsw i32 0, %var4 -ret i32 %var5 -unreachable -} -define weak i32 @unary_operator_1_plus_Int(i32 %unary_operator_1_plus.x) #0 -{ -%unary_operator_1_plus.x.addr = alloca i32, align 4 -store i32 %unary_operator_1_plus.x, i32* %unary_operator_1_plus.x.addr, align 4 -%var6 = load i32* %unary_operator_1_plus.x.addr, align 4 -ret i32 %var6 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/unary_operators_1/unary_operators_1.txt b/experiments/translator-bc/src/test/kotlin/tests/unary_operators_1/unary_operators_1.txt deleted file mode 100644 index 752ab97e7db..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/unary_operators_1/unary_operators_1.txt +++ /dev/null @@ -1,6 +0,0 @@ -unary_operator_1_minus_Int(-5) == 5 -unary_operator_1_minus_Int(5) == -5 -unary_operator_1_plus_Int(-5) == -5 -unary_operator_1_plus_Int(5) == 5 -unary_operator_1_not_Boolean(1) == 0 -unary_operator_1_not_Boolean(0) == 1 diff --git a/experiments/translator-bc/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.kt b/experiments/translator-bc/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.kt deleted file mode 100644 index 2306ec0805c..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.kt +++ /dev/null @@ -1,6 +0,0 @@ -fun variables_assigment_1(x: Int): Int { - var z = x - z++ - return x -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.kt.out deleted file mode 100644 index 7a2b3e1a599..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.kt.out +++ /dev/null @@ -1,25 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @variables_assigment_1_Int(i32 %variables_assigment_1.x) #0 -{ -%variables_assigment_1.x.addr = alloca i32, align 4 -store i32 %variables_assigment_1.x, i32* %variables_assigment_1.x.addr, align 4 -%managed.unique.0.variables_assigment_1.z = alloca i32, align 4 -%var2 = load i32* %managed.unique.0.variables_assigment_1.z, align 4 -%var3 = load i32* %variables_assigment_1.x.addr, align 4 -store i32 %var3, i32* %managed.unique.0.variables_assigment_1.z, align 4 -%var4 = load i32* %managed.unique.0.variables_assigment_1.z, align 4 -%var5 = alloca i32, align 4 -%var6 = load i32* %managed.unique.0.variables_assigment_1.z, align 4 -store i32 %var6, i32* %var5, align 4 -%var7 = add nsw i32 %var4, 1 -store i32 %var7, i32* %managed.unique.0.variables_assigment_1.z, align 4 -%var8 = load i32* %variables_assigment_1.x.addr, align 4 -ret i32 %var8 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.txt b/experiments/translator-bc/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.txt deleted file mode 100644 index 065f58fb725..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.txt +++ /dev/null @@ -1 +0,0 @@ -variables_assigment_1_Int(56789) == 56789 diff --git a/experiments/translator-bc/src/test/kotlin/tests/when_block/when_block.kt b/experiments/translator-bc/src/test/kotlin/tests/when_block/when_block.kt deleted file mode 100644 index 22a1a996c4a..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/when_block/when_block.kt +++ /dev/null @@ -1,9 +0,0 @@ - -fun when_block_test1(i: Int): Boolean { - when (i) { - 0 -> return true - 1 -> return false - } - - return false -} diff --git a/experiments/translator-bc/src/test/kotlin/tests/when_block/when_block.kt.out b/experiments/translator-bc/src/test/kotlin/tests/when_block/when_block.kt.out deleted file mode 100644 index adb0d51f51e..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/when_block/when_block.kt.out +++ /dev/null @@ -1,41 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i1 @when_block_test1_Int(i32 %when_block_test1.i) #0 -{ -%when_block_test1.i.addr = alloca i32, align 4 -store i32 %when_block_test1.i, i32* %when_block_test1.i.addr, align 4 -; start when expression -br label %label.when_start.1 -label.when_start.1: -br label %label.when_condition_condition.5 -label.when_condition_condition.5: -%var3 = load i32* %when_block_test1.i.addr, align 4 -%var4 = icmp eq i32 %var3, 0 -br i1 %var4, label %label.when_condition_success.4, label %label.when_condition_condition.6 -label.when_condition_condition.6: -br label %label.when_item.3 -label.when_condition_success.4: -ret i1 1 -br label %label.when_end.2 -label.when_item.3: -br label %label.when_condition_condition.9 -label.when_condition_condition.9: -%var5 = load i32* %when_block_test1.i.addr, align 4 -%var6 = icmp eq i32 %var5, 1 -br i1 %var6, label %label.when_condition_success.8, label %label.when_condition_condition.10 -label.when_condition_condition.10: -br label %label.when_item.7 -label.when_condition_success.8: -ret i1 0 -br label %label.when_end.2 -label.when_item.7: -br label %label.when_end.2 -label.when_end.2: -ret i1 0 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/when_block/when_block.txt b/experiments/translator-bc/src/test/kotlin/tests/when_block/when_block.txt deleted file mode 100644 index 59450fdc4d8..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/when_block/when_block.txt +++ /dev/null @@ -1,3 +0,0 @@ -when_block_test1_Int(0) == 1 -when_block_test1_Int(1) == 0 -when_block_test1_Int(2) == 0 diff --git a/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.kt b/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.kt deleted file mode 100644 index ebd1fe4f40b..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.kt +++ /dev/null @@ -1,22 +0,0 @@ -fun when_expression_1(x: Int): Int { - val z = when (x) { - 21234 -> 20 - 55555 -> 50 - else -> 100 - } - return z -} - -fun when_expression_2 (value: Byte): Int { - val result = when (value) { - 0.toByte() -> 100 - 1.toByte() -> 101 - 2.toByte() -> 102 - 3.toByte() -> 103 - 4.toByte() -> 104 - 5.toByte() -> 105 - else -> 199 - } - - return result -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.kt.err b/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.kt.err deleted file mode 100644 index 00653945652..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.kt.err +++ /dev/null @@ -1,19 +0,0 @@ -Exception in thread "main" java.rmi.UnexpectedException: Int.toByte - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExtensionExpression(BlockCodegen.kt:366) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateDotBody(BlockCodegen.kt:338) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateDotExpression(BlockCodegen.kt:284) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExpression(BlockCodegen.kt:79) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateWhenItem(BlockCodegen.kt:924) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateWhenExpression(BlockCodegen.kt:968) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateExpression(BlockCodegen.kt:77) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateValExpression(BlockCodegen.kt:1067) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:193) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:209) - at org.kotlinnative.translator.codegens.BlockCodegen.expressionWalker(BlockCodegen.kt:192) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock(BlockCodegen.kt:45) - at org.kotlinnative.translator.codegens.BlockCodegen.evaluateCodeBlock$default(BlockCodegen.kt:42) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate(FunctionCodegen.kt:81) - at org.kotlinnative.translator.codegens.FunctionCodegen.generate$default(FunctionCodegen.kt:72) - at org.kotlinnative.translator.ProjectTranslator.generateProjectBody(ProjectTranslator.kt:69) - at org.kotlinnative.translator.ProjectTranslator.generateCode(ProjectTranslator.kt:20) - at MainKt.main(main.kt:22) diff --git a/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.kt.out deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.txt b/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.txt deleted file mode 100644 index 9e1a1287947..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/when_expression_1/when_expression_1.txt +++ /dev/null @@ -1,7 +0,0 @@ -when_expression_1_Int(21234) == 20 -when_expression_1_Int(55555) == 50 -when_expression_1_Int(345626) == 100 -when_expression_1_Int(756754) == 100 -when_expression_2_Byte(0) == 100 -when_expression_2_Byte(5) == 105 -when_expression_2_Byte(155) == 199 diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_1/while_1.kt b/experiments/translator-bc/src/test/kotlin/tests/while_1/while_1.kt deleted file mode 100644 index 7a5836cf05c..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_1/while_1.kt +++ /dev/null @@ -1,8 +0,0 @@ -fun while_test_1(x: Int): Int { - var a = 5 - while (2 < 3) { - a = 10 - return a - } - return 5 -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_1/while_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/while_1/while_1.kt.out deleted file mode 100644 index 24bab1038f7..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_1/while_1.kt.out +++ /dev/null @@ -1,28 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @while_test_1_Int(i32 %while_test_1.x) #0 -{ -%while_test_1.x.addr = alloca i32, align 4 -store i32 %while_test_1.x, i32* %while_test_1.x.addr, align 4 -%managed.unique.0.while_test_1.a = alloca i32, align 4 -%var2 = load i32* %managed.unique.0.while_test_1.a, align 4 -store i32 5, i32* %managed.unique.0.while_test_1.a, align 4 -br label %label.while.1 -label.while.1: -%var3 = icmp slt i32 2, 3 -br i1 %var3, label %label.while.2, label %label.while.3 -label.while.2: -%var4 = load i32* %managed.unique.0.while_test_1.a, align 4 -store i32 10, i32* %managed.unique.0.while_test_1.a, align 4 -%var5 = load i32* %managed.unique.0.while_test_1.a, align 4 -ret i32 %var5 -br label %label.while.1 -label.while.3: -ret i32 5 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_1/while_1.txt b/experiments/translator-bc/src/test/kotlin/tests/while_1/while_1.txt deleted file mode 100644 index 02f167597f8..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_1/while_1.txt +++ /dev/null @@ -1 +0,0 @@ -while_test_1_Int(6) == 10 diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.c b/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.c deleted file mode 100644 index 23987f1e9a9..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.c +++ /dev/null @@ -1,3 +0,0 @@ -int link_example(){ - return 5; -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.kt b/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.kt deleted file mode 100644 index 41441e899a9..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun while_test_2(x: Int): Int { - var a = x - while (2 < 3) { - a = x + 1 - return a - } -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.kt.out b/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.kt.out deleted file mode 100644 index 752a3655335..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.kt.out +++ /dev/null @@ -1,30 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @while_test_2_Int(i32 %while_test_2.x) #0 -{ -%while_test_2.x.addr = alloca i32, align 4 -store i32 %while_test_2.x, i32* %while_test_2.x.addr, align 4 -%managed.unique.0.while_test_2.a = alloca i32, align 4 -%var2 = load i32* %managed.unique.0.while_test_2.a, align 4 -%var3 = load i32* %while_test_2.x.addr, align 4 -store i32 %var3, i32* %managed.unique.0.while_test_2.a, align 4 -br label %label.while.1 -label.while.1: -%var4 = icmp slt i32 2, 3 -br i1 %var4, label %label.while.2, label %label.while.3 -label.while.2: -%var5 = load i32* %while_test_2.x.addr, align 4 -%var6 = add nsw i32 %var5, 1 -%var7 = load i32* %managed.unique.0.while_test_2.a, align 4 -store i32 %var6, i32* %managed.unique.0.while_test_2.a, align 4 -%var8 = load i32* %managed.unique.0.while_test_2.a, align 4 -ret i32 %var8 -br label %label.while.1 -label.while.3: -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.txt b/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.txt deleted file mode 100644 index d0b8a70ce30..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_2/while_2.txt +++ /dev/null @@ -1 +0,0 @@ -while_test_2_Int(77) == 78 diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.kt b/experiments/translator-bc/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.kt deleted file mode 100644 index 85599858a3c..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.kt +++ /dev/null @@ -1,15 +0,0 @@ -object while_argument_side_effects_1_Counter{ - var cnt = 0 - fun isEnd():Boolean{ - cnt += 1 - return cnt < 10 - } -} - -fun while_argument_side_effects_1():Int{ - var iter = 0 - while(while_argument_side_effects_1_Counter.isEnd()){ - iter += 1 - } - return iter+ 1009*while_argument_side_effects_1_Counter.cnt -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.kt.out deleted file mode 100644 index 5f4bd30668e..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.kt.out +++ /dev/null @@ -1,63 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -%class.while_argument_side_effects_1_Counter = type { i32 } -@object.instance.while_argument_side_effects_1_Counter = internal global %class.while_argument_side_effects_1_Counter { i32 0 }, align 8 -define weak void @while_argument_side_effects_1_Counter(%class.while_argument_side_effects_1_Counter* %classvariable.this) #0 -{ -%classvariable.this.addr = alloca %class.while_argument_side_effects_1_Counter, align 8 -%var2 = getelementptr inbounds %class.while_argument_side_effects_1_Counter* %classvariable.this.addr, i32 0, i32 0 -%var3 = load i32* %var2, align 4 -store i32 0, i32* %var2, align 4 -%var4 = bitcast %class.while_argument_side_effects_1_Counter* %classvariable.this to i8* -%var5 = bitcast %class.while_argument_side_effects_1_Counter* %classvariable.this.addr to i8* -call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 4, i32 4, i1 false) -ret void -unreachable -} -define weak i1 @while_argument_side_effects_1_Counter.isEnd(%class.while_argument_side_effects_1_Counter* %classvariable.this) #0 -{ -%var6 = getelementptr inbounds %class.while_argument_side_effects_1_Counter* %classvariable.this, i32 0, i32 0 -%var7 = load i32* %var6, align 4 -%var8 = load i32* %var6, align 4 -%var9 = add nsw i32 %var8, 1 -store i32 %var9, i32* %var6, align 4 -%var10 = load i32* %var6, align 4 -%var11 = getelementptr inbounds %class.while_argument_side_effects_1_Counter* %classvariable.this, i32 0, i32 0 -%var12 = load i32* %var11, align 4 -%var13 = icmp slt i32 %var12, 10 -ret i1 %var13 -unreachable -} -define weak i32 @while_argument_side_effects_1() #0 -{ -%managed.unique.0.while_argument_side_effects_1.iter = alloca i32, align 4 -%var14 = load i32* %managed.unique.0.while_argument_side_effects_1.iter, align 4 -store i32 0, i32* %managed.unique.0.while_argument_side_effects_1.iter, align 4 -br label %label.while.1 -label.while.1: -%var15 = call i1 @while_argument_side_effects_1_Counter.isEnd(%class.while_argument_side_effects_1_Counter* @object.instance.while_argument_side_effects_1_Counter) -%var16 = alloca i1, align 4 -store i1 %var15, i1* %var16, align 4 -%var17 = load i1* %var16, align 4 -br i1 %var17, label %label.while.2, label %label.while.3 -label.while.2: -%var18 = load i32* %managed.unique.0.while_argument_side_effects_1.iter, align 4 -%var19 = load i32* %managed.unique.0.while_argument_side_effects_1.iter, align 4 -%var20 = add nsw i32 %var19, 1 -store i32 %var20, i32* %managed.unique.0.while_argument_side_effects_1.iter, align 4 -%var21 = load i32* %managed.unique.0.while_argument_side_effects_1.iter, align 4 -br label %label.while.1 -label.while.3: -%var22 = getelementptr inbounds %class.while_argument_side_effects_1_Counter* @object.instance.while_argument_side_effects_1_Counter, i32 0, i32 0 -%var23 = load i32* %var22, align 4 -%var24 = mul nsw i32 1009, %var23 -%var25 = load i32* %managed.unique.0.while_argument_side_effects_1.iter, align 4 -%var26 = add nsw i32 %var25, %var24 -ret i32 %var26 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.txt b/experiments/translator-bc/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.txt deleted file mode 100644 index aab348e4066..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.txt +++ /dev/null @@ -1 +0,0 @@ -while_argument_side_effects_1() == 10099 diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_break_1/while_break_1.kt b/experiments/translator-bc/src/test/kotlin/tests/while_break_1/while_break_1.kt deleted file mode 100644 index 07a4acd4d09..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_break_1/while_break_1.kt +++ /dev/null @@ -1,9 +0,0 @@ -fun while_break_1(): Int { - var i = 1 - while (true) { - i = i + 1 - break - i = -100 - } - return i -} \ No newline at end of file diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_break_1/while_break_1.kt.out b/experiments/translator-bc/src/test/kotlin/tests/while_break_1/while_break_1.kt.out deleted file mode 100644 index 312d09ec0bb..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_break_1/while_break_1.kt.out +++ /dev/null @@ -1,30 +0,0 @@ -@exceptions.str.1 = private unnamed_addr constant [59 x i8] c"Exception in thread main kotlin.KotlinNullPointerException\00", align 1 -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) -declare i8* @malloc_heap(i32) -declare i32 @printf(i8*, ...) -declare void @abort() -%class.Nothing = type { } -define weak i32 @while_break_1() #0 -{ -%managed.unique.0.while_break_1.i = alloca i32, align 4 -%var2 = load i32* %managed.unique.0.while_break_1.i, align 4 -store i32 1, i32* %managed.unique.0.while_break_1.i, align 4 -br label %label.while.1 -label.while.1: -br i1 1, label %label.while.2, label %label.while.3 -label.while.2: -%var3 = load i32* %managed.unique.0.while_break_1.i, align 4 -%var4 = add nsw i32 %var3, 1 -%var5 = load i32* %managed.unique.0.while_break_1.i, align 4 -store i32 %var4, i32* %managed.unique.0.while_break_1.i, align 4 -br label %label.while.3 -%var6 = sub nsw i32 0, 100 -%var7 = load i32* %managed.unique.0.while_break_1.i, align 4 -store i32 %var6, i32* %managed.unique.0.while_break_1.i, align 4 -br label %label.while.1 -label.while.3: -%var8 = load i32* %managed.unique.0.while_break_1.i, align 4 -ret i32 %var8 -unreachable -} - diff --git a/experiments/translator-bc/src/test/kotlin/tests/while_break_1/while_break_1.txt b/experiments/translator-bc/src/test/kotlin/tests/while_break_1/while_break_1.txt deleted file mode 100644 index 7fde1413cc1..00000000000 --- a/experiments/translator-bc/src/test/kotlin/tests/while_break_1/while_break_1.txt +++ /dev/null @@ -1 +0,0 @@ -while_break_1() == 2 diff --git a/experiments/translator-bc/translate.sh b/experiments/translator-bc/translate.sh deleted file mode 100755 index 2eb68f20216..00000000000 --- a/experiments/translator-bc/translate.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -java -jar $DIR/build/libs/translator-1.0.jar -I $DIR/kotstd/include $@ diff --git a/experiments/translator/.idea/compiler.xml b/experiments/translator/.idea/compiler.xml deleted file mode 100644 index deaf7d8517e..00000000000 --- a/experiments/translator/.idea/compiler.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/copyright/profiles_settings.xml b/experiments/translator/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3377d..00000000000 --- a/experiments/translator/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/experiments/translator/.idea/gradle.xml b/experiments/translator/.idea/gradle.xml deleted file mode 100644 index 1cde8251fff..00000000000 --- a/experiments/translator/.idea/gradle.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/libraries/Gradle__com_github_jshmrsn_karg_a636b3e.xml b/experiments/translator/.idea/libraries/Gradle__com_github_jshmrsn_karg_a636b3e.xml deleted file mode 100644 index f94c4b757af..00000000000 --- a/experiments/translator/.idea/libraries/Gradle__com_github_jshmrsn_karg_a636b3e.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/libraries/Gradle__junit_junit_4_12.xml b/experiments/translator/.idea/libraries/Gradle__junit_junit_4_12.xml deleted file mode 100644 index 04c10dd5a46..00000000000 --- a/experiments/translator/.idea/libraries/Gradle__junit_junit_4_12.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml b/experiments/translator/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml deleted file mode 100644 index 8262f729c28..00000000000 --- a/experiments/translator/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_compiler_1_0_3.xml b/experiments/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_compiler_1_0_3.xml deleted file mode 100644 index 340062081ce..00000000000 --- a/experiments/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_compiler_1_0_3.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_runtime_1_0_1.xml b/experiments/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_runtime_1_0_1.xml deleted file mode 100644 index 75d28ad69b0..00000000000 --- a/experiments/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_runtime_1_0_1.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_0_1.xml b/experiments/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_0_1.xml deleted file mode 100644 index 9c961954a78..00000000000 --- a/experiments/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_0_1.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/misc.xml b/experiments/translator/.idea/misc.xml deleted file mode 100644 index 8f96fd28783..00000000000 --- a/experiments/translator/.idea/misc.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/modules.xml b/experiments/translator/.idea/modules.xml deleted file mode 100644 index 8a68b6ea9f7..00000000000 --- a/experiments/translator/.idea/modules.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/modules/ast-kotlin.iml b/experiments/translator/.idea/modules/ast-kotlin.iml deleted file mode 100644 index e41c4661f9f..00000000000 --- a/experiments/translator/.idea/modules/ast-kotlin.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/modules/ast-kotlin_main.iml b/experiments/translator/.idea/modules/ast-kotlin_main.iml deleted file mode 100644 index 817e81cf57c..00000000000 --- a/experiments/translator/.idea/modules/ast-kotlin_main.iml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/modules/ast-kotlin_test.iml b/experiments/translator/.idea/modules/ast-kotlin_test.iml deleted file mode 100644 index d08120d38fc..00000000000 --- a/experiments/translator/.idea/modules/ast-kotlin_test.iml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/modules/translator.iml b/experiments/translator/.idea/modules/translator.iml deleted file mode 100644 index 46844077ef2..00000000000 --- a/experiments/translator/.idea/modules/translator.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/modules/translator_main.iml b/experiments/translator/.idea/modules/translator_main.iml deleted file mode 100644 index d3ca6ab99f4..00000000000 --- a/experiments/translator/.idea/modules/translator_main.iml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/modules/translator_test.iml b/experiments/translator/.idea/modules/translator_test.iml deleted file mode 100644 index a13aea70b5f..00000000000 --- a/experiments/translator/.idea/modules/translator_test.iml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/uiDesigner.xml b/experiments/translator/.idea/uiDesigner.xml deleted file mode 100644 index e96534fb27b..00000000000 --- a/experiments/translator/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experiments/translator/.idea/vcs.xml b/experiments/translator/.idea/vcs.xml deleted file mode 100644 index 6c0b8635858..00000000000 --- a/experiments/translator/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/experiments/translator/LICENSE b/experiments/translator/LICENSE deleted file mode 100644 index 75651683ad4..00000000000 --- a/experiments/translator/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Nikolay Igotti - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/experiments/translator/Makefile b/experiments/translator/Makefile deleted file mode 100644 index a99b77bc367..00000000000 --- a/experiments/translator/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -DIRECTORY = "src/test/kotlin/tests" -OUTPUT = $(shell ls ${DIRECTORY}/*/*.txt) -OBJECTS = $(OUTPUT:.txt=.out) -green = '\033[0;32m' -red = '\033[0;31m' -lightRed = '\033[1;31m' -orange = '\033[0;33m' -nc = '\033[0m' -KOTSTD='../kotstd' -SOURCELIB=build/sources - -# -# ! Disabled stdlib/test compilation (because we've imported only translator) -# - -#stdlib: -# cd $(KOTSTD) && make clean && make -# -#%.out: stdlib %.txt -# @./run_one_test.sh $(@:.out=.txt) -# -#tests: stdlib $(OBJECTS) -# @date - - -build: - ./gradlew jar - -all: build #tests; - -clean: - ./gradlew clean - -#compile: build -# mkdir -p $(SOURCELIB) -# rm -f $(SOURCELIB)/linked.ll -# rm -f $(SOURCELIB)/linked.ll -# java -jar build/libs/translator-1.0.jar -I $(KOTSTD)/kt $(files) -o $(SOURCELIB)/build.ll -# llvm-link-3.6 -S $(KOTSTD)/build/stdlib_x86.ll $(SOURCELIB)/build.ll >> $(SOURCELIB)/linked.ll -# clang-3.6 $(SOURCELIB)/linked.ll -o $(output) -# rm $(SOURCELIB)/linked.ll -# rm $(SOURCELIB)/build.ll - -.DEFAULT_GOAL := all -.FORCE: build, all -.PHONY: tests, stdlib, build, all, compile diff --git a/experiments/translator/README.md b/experiments/translator/README.md deleted file mode 100644 index 5778ef83e0e..00000000000 --- a/experiments/translator/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# Translator from Kotlin to LLVM - -## Fast build -If you want to use the translator without going into any technical details, this section is for you. Using following commands you will be able to compile your Kotlin files, the resulting executable file - - $ make compile files=$(KTFILES) output=$(OUTPUT) - -where - - $(KTFILES) - list of your Kotlin files separated by spaces - - $(OUTPUT) - the resulting file - - **NOTE:** when you use a fast build, the name of your your entry point function must be **main** and it should not receive arguments - -## Building - -For build translator into jar, you must run gradle target - - $ ./gradlew jar - -**NOTE:** make sure you have jdk version 1.8 or higher - - -Assembled the translator can be found in the following folder - - $ cd build/libs/translator - -## Using compiler - $ java -jar $(PATH_TO_TRANSLATOR_JAR) -I $(PATH_TO_KOTLIB) $(KOTLIN_SOURCES) - where - - $(PATH_TO_TRANSLATOR_JAR) - path to jar, which you got in building step, by default it `build/libs/translator-1.0.jar` - - $(PATH_TO_KOTLIB) - path to standard kotlin lib, by default it `./kotstd/include` - - $(KOTLIN_SOURCES) - the different files that you want to compile - -### Optional arguments - - -M - specified entry point of your project, by default it is main - - **NOTE:** your entry point function should not receive arguments - - - -o - file to redirect output of the generated code - - -## Using generated code - -To execute the generated code you should use should link your code with kotlin native runtime. By default, you can find the appropriate library at -`../kotstd/build/stdlib_x86.ll` - -If this file is missing you can assemble it yourself - - $ cd ../kotstd && make clean && make - -For linking, run the following command - - $ llvm-link-3.6 -S $(KOTLIN_NATIVE_RUNTIME) $(COMPILED_LLVM_CODE) - -where $(COMPILED_LLVM_CODE) - code obtained in the step compiler - -**NOTE:** The translator supports the llvm version number 3.6. Please make sure you have the correct version of llvm. - -## Run - - $ lli-3.6 $(LINKED_CODE) - -where $(LINKED_CODE) - code obtained in the previous step - diff --git a/experiments/translator/build.gradle b/experiments/translator/build.gradle deleted file mode 100644 index 71b194df7fc..00000000000 --- a/experiments/translator/build.gradle +++ /dev/null @@ -1,38 +0,0 @@ -group 'translator' -version '1.0' - -buildscript { - ext.kotlin_version = '1.0.3' - - repositories { - mavenCentral() - } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.2" - } -} - -apply plugin: 'java' -apply plugin: 'kotlin' -apply plugin: 'application' - -repositories { - mavenCentral() - maven { url "https://jitpack.io" } -} - -dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.1" - compile group: 'org.jetbrains.kotlin', name: 'kotlin-compiler', version: '1.0.3' - compile 'com.github.jshmrsn:karg:a636b3e' - testCompile group: 'junit', name: 'junit', version: '4.11' -} - -jar { - manifest { - attributes 'Main-Class': 'MainKt' - } - - from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } -} - diff --git a/experiments/translator/gradle/wrapper/gradle-wrapper.jar b/experiments/translator/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 941144813d2..00000000000 Binary files a/experiments/translator/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/experiments/translator/gradle/wrapper/gradle-wrapper.properties b/experiments/translator/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 87174db222c..00000000000 --- a/experiments/translator/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Thu Jul 07 16:27:28 MSK 2016 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-all.zip diff --git a/experiments/translator/gradlew b/experiments/translator/gradlew deleted file mode 100755 index 2f205f5ba69..00000000000 --- a/experiments/translator/gradlew +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:function=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/experiments/translator/gradlew.bat b/experiments/translator/gradlew.bat deleted file mode 100644 index aec99730b4e..00000000000 --- a/experiments/translator/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/experiments/translator/kotstd/Makefile b/experiments/translator/kotstd/Makefile deleted file mode 100644 index fdd6cf55107..00000000000 --- a/experiments/translator/kotstd/Makefile +++ /dev/null @@ -1,49 +0,0 @@ - -BUILD_DIR=$(PWD)/build -INCLUDE_DIR=$(PWD)/include -LIB_ARM_DIR=$(PWD)/lib/arm -LIB_X86_DIR=$(PWD)/lib/x86 -LIBC=$(PWD)/libc - -KT=$(PWD)/../translator/build/libs/translator-1.0.jar -LLINK=llvm-link-3.6 -CC=clang-3.6 - -CCFLAGS_ARM=-g -S -Wall -m32 -emit-llvm -nostdlib -ffreestanding -march=armv7-m -mthumb -flto -O0 -target arm-none-eabi -DARM -CCFLAGS=-g -O0 -S -Wall -emit-llvm -nostdlib -ffreestanding -CCFLAGS_DEBUG=-g -O0 -S -Wall -emit-llvm -nostdlib -ffreestanding -DDBG -LLINK_FLAGS=-S - -KT_ALL_DEPS=java -jar $(KT) -LLINK_ALL_DEPS=$(LLINK) $(LLINK_FLAGS) $(filter %.ll,$^) > $@ - -all: memory $(BUILD_DIR) $(BUILD_DIR)/stdlib_arm.ll $(BUILD_DIR)/stdlib_x86.ll -debug: memory_debug $(BUILD_DIR) $(BUILD_DIR)/stdlib_arm.ll $(BUILD_DIR)/stdlib_x86.ll - -$(BUILD_DIR): - mkdir -p $(BUILD_DIR) - -$(BUILD_DIR)/stdlib_x86.ll: $(LIB_X86_DIR)/*.ll - $(LLINK_ALL_DEPS) - -$(BUILD_DIR)/stdlib_arm.ll: $(LIB_ARM_DIR)/*.ll - $(LLINK_ALL_DEPS) - -$(BUILD_DIR)/classes_x86.ll: $(INCLUDE_DIR)/*.kt - $(KT_ALL_DEPS) -o $@ $(filter %.kt,$^) - -$(BUILD_DIR)/classes_arm.ll: $(INCLUDE_DIR)/*.kt - $(KT_ALL_DEPS) --arm -o $@ $(filter %.kt,$^) - -memory: - $(CC) $(CCFLAGS) $(LIBC)/memory.c -o $(LIB_X86_DIR)/memory.ll - $(CC) $(CCFLAGS_ARM) $(LIBC)/memory.c -o $(LIB_ARM_DIR)/memory.ll - -memory_debug: - $(CC) $(CCFLAGS_DEBUG) $(LIBC)/memory.c -o $(LIB_X86_DIR)/memory.ll - -clean: - rm -rf $(BUILD_DIR) - -.PHONY: all clean - diff --git a/experiments/translator/kotstd/include/Assert.kt b/experiments/translator/kotstd/include/Assert.kt deleted file mode 100644 index fc253e0f13e..00000000000 --- a/experiments/translator/kotstd/include/Assert.kt +++ /dev/null @@ -1,8 +0,0 @@ -package kotlin - -external fun assert_c(value: Boolean) - -fun assert(value: Boolean) { - println(value) - assert_c(value) -} \ No newline at end of file diff --git a/experiments/translator/kotstd/include/BooleanArray.kt b/experiments/translator/kotstd/include/BooleanArray.kt deleted file mode 100644 index 7df7eb81e46..00000000000 --- a/experiments/translator/kotstd/include/BooleanArray.kt +++ /dev/null @@ -1,121 +0,0 @@ -package kotlin - -external fun kotlinclib_boolean_size(): Int - -class BooleanArray(var size: Int) { - val data: Int - - /** Returns the number of elements in the array. */ - //size: Int - - init { - this.data = malloc_array(kotlinclib_boolean_size() * this.size) - var index = 0 - while (index < this.size) { - set(index, false) - index = index + 1 - } - } - - /** Returns the array element at the given [index]. This method can be called using the index operator. */ - operator fun get(index: Int): Boolean { - val res = kotlinclib_get_byte(this.data, index) == 1.toByte() - return res - } - - - /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ - operator fun set(index: Int, value: Boolean) { - if (value == true) { - kotlinclib_set_byte(this.data, index, 1.toByte()) - } else { - kotlinclib_set_byte(this.data, index, 0.toByte()) - } - } - - - fun clone(): BooleanArray { - val newInstance = BooleanArray(this.size) - var index = 0 - while (index < this.size) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance - } -} - -fun BooleanArray.print() { - var index = 0 - print('[') - while (index < size) { - print(get(index)) - index++ - if (index < size){ - print(';') - print(' ') - } - } - print(']') -} - -fun BooleanArray.println() { - this.print() - //println() -} - - -fun BooleanArray.copyOf(newSize: Int): BooleanArray { - val newInstance = BooleanArray(newSize) - var index = 0 - val end = if (newSize > this.size) this.size else newSize - while (index < end) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - while (index < newSize) { - newInstance.set(index, false) - index = index + 1 - } - - return newInstance -} - -fun BooleanArray.copyOfRange(fromIndex: Int, toIndex: Int): BooleanArray { - val newInstance = BooleanArray(toIndex - fromIndex) - var index = fromIndex - while (index < toIndex) { - val value = this.get(index) - newInstance.set(index - fromIndex, value) - index = index + 1 - } - - return newInstance -} - -operator fun BooleanArray.plus(element: Boolean): BooleanArray { - val index = size - val result = this.copyOf(index + 1) - result[index] = element - return result -} - -operator fun BooleanArray.plus(elements: BooleanArray): BooleanArray { - val thisSize = size - val arraySize = elements.size - val resultSize = thisSize + arraySize - val newInstance = this.copyOf(resultSize) - var index = thisSize - - while (index < resultSize) { - val value = elements.get(index - thisSize) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance -} \ No newline at end of file diff --git a/experiments/translator/kotstd/include/ByteArray.kt b/experiments/translator/kotstd/include/ByteArray.kt deleted file mode 100644 index 8952a07eb1f..00000000000 --- a/experiments/translator/kotstd/include/ByteArray.kt +++ /dev/null @@ -1,121 +0,0 @@ -package kotlin - -external fun malloc_array(size: Int): Int -external fun kotlinclib_get_byte(src: Int, index: Int): Byte -external fun kotlinclib_set_byte(src: Int, index: Int, value: Byte) -external fun kotlinclib_byte_size(): Int - - -class ByteArray(var size: Int) { - val data: Int - - /** Returns the number of elements in the array. */ - //size: Int - - init { - this.data = malloc_array(kotlinclib_byte_size() * this.size) - var index = 0 - - while (index < this.size) { - set(index, 0) - index = index + 1 - } - } - - /** Returns the array element at the given [index]. This method can be called using the index operator. */ - operator fun get(index: Int): Byte { - return kotlinclib_get_byte(this.data, index) - } - - - /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ - operator fun set(index: Int, value: Byte) { - kotlinclib_set_byte(this.data, index, value) - } - - - fun clone(): ByteArray { - val newInstance = ByteArray(this.size) - var index = 0 - while (index < this.size) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance - } - -} - -fun ByteArray.print() { - var index = 0 - print('[') - while (index < size) { - print(get(index)) - index++ - if (index < size){ - print(';') - print(' ') - } - } - print(']') -} - -fun ByteArray.println() { - this.print() - //println() -} - -fun ByteArray.copyOf(newSize: Int): ByteArray { - val newInstance = ByteArray(newSize) - var index = 0 - val end = if (newSize > this.size) this.size else newSize - while (index < end) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - while (index < newSize) { - newInstance.set(index, 0) - index = index + 1 - } - - return newInstance -} - -fun ByteArray.copyOfRange(fromIndex: Int, toIndex: Int): ByteArray { - val newInstance = ByteArray(toIndex - fromIndex) - var index = fromIndex - while (index < toIndex) { - val value = this.get(index) - newInstance.set(index - fromIndex, value) - index = index + 1 - } - - return newInstance -} - -operator fun ByteArray.plus(element: Byte): ByteArray { - val index = size - val result = this.copyOf(index + 1) - result[index] = element - return result -} - -operator fun ByteArray.plus(elements: ByteArray): ByteArray { - val thisSize = size - val arraySize = elements.size - val resultSize = thisSize + arraySize - val newInstance = this.copyOf(resultSize) - var index = thisSize - - while (index < resultSize) { - val value = elements.get(index - thisSize) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance -} \ No newline at end of file diff --git a/experiments/translator/kotstd/include/CodedInputStream.kt b/experiments/translator/kotstd/include/CodedInputStream.kt deleted file mode 100644 index bb5b6e47cae..00000000000 --- a/experiments/translator/kotstd/include/CodedInputStream.kt +++ /dev/null @@ -1,216 +0,0 @@ -/** - * Created by Dmitry Savvinov on 7/6/16. - * - * Hides details of work with Protobuf encoding - * - * Note that CodedInputStream reads protobuf-defined types from stream (such as int32, sint32, etc), - * while CodedOutputStream has methods for writing Kotlin-types (such as Boolean, Int, Long, Short, etc) - * - */ - -// TODO: refactor correctness checks into readTag -class CodedInputStream(val buffer: ByteArray) { - val inputStream: KotlinInputStream - init { - inputStream = KotlinInputStream(buffer) - } - - fun mark() { - inputStream.mark() - } - - fun reset() { - inputStream.reset() - } - - fun readInt32(expectedFieldNumber: Int): Int { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - val actualFieldNumber = WireFormat.getTagFieldNumber(tag) - val actualWireType = WireFormat.getTagWireType(tag) - checkFieldCorrectness(expectedFieldNumber, actualFieldNumber, WireType.VARINT, actualWireType) - return readInt32NoTag() - } - - // Note that unsigned integer types are stored as their signed counterparts with top bit - // simply stored in the sign bit - similar to Java's protobuf implementation. Hence, all - // methods reading unsigned ints simply redirect call to corresponding signed-reading method - fun readUInt32(expectedFieldNumber: Int): Int { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readUInt32NoTag() - } - - fun readUInt32NoTag(): Int { - return readInt32NoTag() - } - - fun readInt64(expectedFieldNumber: Int): Long { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readInt64NoTag() - } - - // See note on unsigned integers implementations above - fun readUInt64(expectedFieldNumber: Int): Long { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readUInt64NoTag() - } - - fun readUInt64NoTag(): Long { - return readInt64NoTag() - } - - fun readBool(expectedFieldNumber: Int): Boolean { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readBoolNoTag() - } - - fun readBoolNoTag(): Boolean { - val readValue = readInt32NoTag() - val boolValue = when (readValue) { - 0 -> false - 1 -> true - else -> false - } - return boolValue - } - - // Reading enums is like reading one int32 number. Caller is responsible for converting this ordinal to enum-object - fun readEnum(expectedFieldNumber: Int): Int { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readEnumNoTag() - } - - fun readEnumNoTag(): Int { - return readUInt32NoTag() - } - - fun readSInt32(expectedFieldNumber: Int): Int { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readSInt32NoTag() - } - - fun readSInt32NoTag(): Int { - return readZigZag32NoTag() - } - - fun readSInt64(expectedFieldNumber: Int): Long { - val tag = readTag(expectedFieldNumber, WireType.VARINT) - return readSInt64NoTag() - } - - fun readSInt64NoTag(): Long { - return readZigZag64NoTag() - } - fun readBytes(expectedFieldNumber: Int): ByteArray { - val tag = readTag(expectedFieldNumber, WireType.LENGTH_DELIMITED) - return readBytesNoTag() - } - - fun readBytesNoTag(): ByteArray { - val length = readInt32NoTag() - return readRawBytes(length) - } - - /** ============ Utility methods ================== - * They are left non-private for cases when one wants to implement her/his own protocol format. - * Then she/he can re-use low-level methods for operating with raw values, that are not annotated with Protobuf tags. - */ - - fun checkFieldCorrectness( - expectedFieldNumber: Int, - actualFieldNumber: Int, - expectedWireType: WireType, - actualWireType: WireType) { - if (expectedFieldNumber != actualFieldNumber) { - return - } - - if (expectedWireType.id != actualWireType.id) { - return - } - } - - fun readRawBytes(count: Int): ByteArray { - val ba = ByteArray(count) - var i = 0 - while (i < count) { - ba[i] = inputStream.read().toByte() - i++ - } - return ba - } - - // reads tag. Note that it returns 0 for the end of message! - fun readTag(expectedFieldNumber: Int, expectedWireType: WireType): Int { - if (isAtEnd()) { - return 0 // we can safely return 0 as sign of end of message, because 0-tags are illegal - } - val tag = readInt32NoTag() - if (tag == 0) { // if we somehow had read 0-tag, then message is corrupted - return 0 - } - - val actualFieldNumber = WireFormat.getTagFieldNumber(tag) - val actualWireType = WireFormat.getTagWireType(tag) - checkFieldCorrectness(expectedFieldNumber, actualFieldNumber, expectedWireType, actualWireType) - return tag - } - - // reads varint not larger than 32-bit integer according to protobuf varint-encoding - fun readInt32NoTag(): Int { - var done: Boolean = false - var result: Long = 0 - var step: Int = 0 - while (!done) { - val byte: Int = inputStream.read().toInt() - result = result or - ( - (byte and WireFormat.VARINT_INFO_BITS_MASK).toLong() - shl - (WireFormat.VARINT_INFO_BITS_COUNT * step) - ).toLong() - step++ - if ((byte and WireFormat.VARINT_UTIL_BIT_MASK) == 0) { - done = true - } - } - return result.toInt() - } - - // reads varint not larger than 64-bit integer according to protobuf varint-encoding - fun readInt64NoTag(): Long { - var done: Boolean = false - var result: Long = 0 - var step: Int = 0 - while (!done) { - val byte: Int = inputStream.read().toInt() - result = result or - ( - (byte and WireFormat.VARINT_INFO_BITS_MASK).toLong() - shl - (WireFormat.VARINT_INFO_BITS_COUNT * step) - ) - step++ - if ((byte and WireFormat.VARINT_UTIL_BIT_MASK) == 0 /* || byte == -1 ???? */) { - done = true - } - } - return result - } - - // reads zig-zag encoded integer not larger than 32-bit long - fun readZigZag32NoTag(): Int { - val value = readInt32NoTag() - return (value ushr 1) xor (-(value and 1)) // bit magic for decoding zig-zag number - } - - // reads zig-zag encoded integer not larger than 64-bit long - fun readZigZag64NoTag(): Long { - val value = readInt64NoTag() - return (value ushr 1) xor (-(value and 1L)) // bit magic for decoding zig-zag number - } - - // checks if at least one more byte can be read from underlying input stream - fun isAtEnd(): Boolean { - return inputStream.isAtEnd() - } -} diff --git a/experiments/translator/kotstd/include/CodedOutputStream.kt b/experiments/translator/kotstd/include/CodedOutputStream.kt deleted file mode 100644 index 9c40747b99c..00000000000 --- a/experiments/translator/kotstd/include/CodedOutputStream.kt +++ /dev/null @@ -1,167 +0,0 @@ -/** - * Created by user on 7/6/16. - */ - -class CodedOutputStream(val buffer: ByteArray) { - val output = KotlinOutputStream(buffer) - - fun toByteArray(): ByteArray { - return buffer - } - - fun writeTag(fieldNumber: Int, type: WireType) { - val tag = (fieldNumber shl 3) or type.id - writeRawVarint32(tag) - } - - fun writeInt32(fieldNumber: Int, value: Int) { - writeTag(fieldNumber, WireType.VARINT) - writeInt32NoTag(value) - } - - fun writeInt32NoTag(value: Int) { - if (value < 0) { // sign-extend negative values - writeRawVarint64(value.toLong()) - return - } - writeRawVarint32(value) - } - - // Note that unsigned integer types are stored as their signed counterparts with top bit - // simply stored in the sign bit - similar to Java's protobuf implementation. Hence, all - // methods, writing unsigned ints simply redirect call to corresponding signed-writing method - fun writeUInt32(fieldNumber: Int, value: Int) { - writeTag(fieldNumber, WireType.VARINT) - writeUInt32NoTag(value) - } - - fun writeUInt32NoTag(value: Int) { - writeRawVarint32(value) - } - - fun writeInt64(fieldNumber: Int, value: Long) { - writeTag(fieldNumber, WireType.VARINT) - writeInt64NoTag(value) - } - - fun writeInt64NoTag(value: Long) { - writeRawVarint64(value) - } - - // See notes on unsigned integers implementation above - fun writeUInt64(fieldNumber: Int, value: Long) { - writeTag(fieldNumber, WireType.VARINT) - writeUInt64NoTag(value) - } - - fun writeUInt64NoTag(value: Long) { - writeRawVarint64(value) - } - - fun writeBool(fieldNumber: Int, value: Boolean) { - writeTag(fieldNumber, WireType.VARINT) - writeBoolNoTag(value) - } - - fun writeBoolNoTag(value: Boolean) { - writeRawVarint32(if (value) 1 else 0) - } - - // Writing enums is like writing one int32 number. Caller is responsible for converting enum-object to ordinal - fun writeEnum(fieldNumber: Int, value: Int) { - writeTag(fieldNumber, WireType.VARINT) - writeEnumNoTag(value) - } - - fun writeEnumNoTag(value: Int) { - writeRawVarint32(value) - } - - fun writeSInt32(fieldNumber: Int, value: Int) { - writeTag(fieldNumber, WireType.VARINT) - writeSInt32NoTag(value) - } - - fun writeSInt32NoTag(value: Int) { - writeUInt32NoTag((value shl 1) xor (value shr 31)) - } - - fun writeSInt64(fieldNumber: Int, value: Long) { - writeTag(fieldNumber, WireType.VARINT) - writeSInt64NoTag(value) - } - - fun writeSInt64NoTag(value: Long) { - writeUInt64NoTag((value shl 1) xor (value shr 63)) - } - - fun writeBytes(fieldNumber: Int, value: ByteArray) { - if (value.size == 0) { - return - } - writeTag(fieldNumber, WireType.LENGTH_DELIMITED) - writeBytesNoTag(value) - } - - fun writeBytesNoTag(value: ByteArray) { - writeRawVarint32(value.size) - output.write(value) - } - - /** ============ Utility methods ================== - * They are left non-private for cases when one wants to implement her/his own protocol format. - * Then she/he can re-use low-level methods for operating with raw values, that are not annotated with Protobuf tags. - */ - - fun writeRawVarint32(value: Int) { - var curValue: Int = value - - // we have at most 32 information bits. With overhead of 1 bit per 7 bits we need at most 5 bytes for encoding - val res = ByteArray(5) - - var resSize = 0 - do { - // encode current 7 bits - var curByte = (curValue and WireFormat.VARINT_INFO_BITS_MASK) - - // discard encoded bits. Note that unsigned shift is needed for cases with negative numbers - curValue = curValue ushr WireFormat.VARINT_INFO_BITS_COUNT - - // check if there will be next byte in encoding and set util bit if needed - if (curValue != 0) { - curByte = curByte or WireFormat.VARINT_UTIL_BIT_MASK - } - - res[resSize] = curByte.toByte() - resSize++ - } while (curValue != 0) - output.write(res, 0, resSize) - } - - fun writeRawVarint64(value: Long) { - var curValue: Long = value - - // we have at most 64 information bits. With overhead of 1 bit per 7 bits we need at most 10 bytes for encoding - val res = ByteArray(10) - - var resSize = 0 - do { - // encode current 7 bits - var curByte = (curValue and WireFormat.VARINT_INFO_BITS_MASK.toLong()) - - // discard encoded bits. Note that unsigned shift is needed for cases with negative numbers - curValue = curValue ushr WireFormat.VARINT_INFO_BITS_COUNT - - // check if there will be next byte and set util bit if needed - if (curValue != 0L) { - curByte = curByte or WireFormat.VARINT_UTIL_BIT_MASK.toLong() - } - - res[resSize] = curByte.toByte() - resSize++ - } while(curValue != 0L) - output.write(res, 0, resSize) - } - - -} diff --git a/experiments/translator/kotstd/include/Console.kt b/experiments/translator/kotstd/include/Console.kt deleted file mode 100644 index c4077be14d4..00000000000 --- a/experiments/translator/kotstd/include/Console.kt +++ /dev/null @@ -1,171 +0,0 @@ -package kotlin - -/* -* Library for console interaction -*/ - -external fun kotlinclib_print_int(message: Int) -external fun kotlinclib_print_long(message: Long) -external fun kotlinclib_print_byte(message: Byte) -external fun kotlinclib_print_short(message: Short) -external fun kotlinclib_print_char(message: Char) -external fun kotlinclib_print_boolean(message: Boolean) -external fun kotlinclib_print_float(message: Float) -external fun kotlinclib_print_double(message: Double) -external fun kotlinclib_print_string(message: String) -external fun kotlinclib_println_int(message: Int) -external fun kotlinclib_println_long(message: Long) -external fun kotlinclib_println_byte(message: Byte) -external fun kotlinclib_println_short(message: Short) -external fun kotlinclib_println_char(message: Char) -external fun kotlinclib_println_boolean(message: Boolean) -external fun kotlinclib_println_float(message: Float) -external fun kotlinclib_println_double(message: Double) -external fun kotlinclib_println_string(message: String) -external fun kotlinclib_println() - -/** Prints the given message to the standard output stream. */ -fun print(message: Int) { - kotlinclib_print_int(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Long) { - kotlinclib_print_long(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Byte) { - kotlinclib_print_byte(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Short) { - kotlinclib_print_short(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Char) { - kotlinclib_print_char(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Boolean) { - kotlinclib_print_boolean(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Float) { - kotlinclib_print_float(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: Double) { - kotlinclib_print_double(message) -} - -/** Prints the given message to the standard output stream. */ -fun print(message: String) { - kotlinclib_print_string(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun print(message: ByteArray) { - message.print() -} - -/** Prints the given message and newline to the standard output stream. */ -fun print(message: BooleanArray) { - message.print() -} - -/** Prints the given message and newline to the standard output stream. */ -fun print(message: IntArray) { - message.print() -} - -/** Prints the given message and newline to the standard output stream. */ -fun print(message: LongArray) { - message.print() -} - -/** Prints the given message and newline to the standard output stream. */ -fun print(message: ShortArray) { - message.print() -} - - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Int) { - kotlinclib_println_int(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Long) { - kotlinclib_println_long(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Byte) { - kotlinclib_println_byte(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Short) { - kotlinclib_println_short(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Char) { - kotlinclib_println_char(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Boolean) { - kotlinclib_println_boolean(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Float) { - kotlinclib_println_float(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: Double) { - kotlinclib_println_double(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: String) { - kotlinclib_println_string(message) -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: ByteArray) { - message.println() -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: BooleanArray) { - message.println() -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: IntArray) { - message.println() -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: LongArray) { - message.println() -} - -/** Prints the given message and newline to the standard output stream. */ -fun println(message: ShortArray) { - message.println() -} - -/** Prints newline to the standard output stream. */ -fun println() { - kotlinclib_println() -} \ No newline at end of file diff --git a/experiments/translator/kotstd/include/IntArray.kt b/experiments/translator/kotstd/include/IntArray.kt deleted file mode 100644 index 09767b162b9..00000000000 --- a/experiments/translator/kotstd/include/IntArray.kt +++ /dev/null @@ -1,195 +0,0 @@ -package kotlin - -external fun kotlinclib_get_int(src: Int, index: Int): Int -external fun kotlinclib_set_int(src: Int, index: Int, value: Int) -external fun kotlinclib_int_size(): Int - - -class IntArray(var size: Int) { - val data: Int - - /** Returns the number of elements in the array. */ - //size: Int - - init { - this.data = malloc_array(kotlinclib_int_size() * this.size) - var index = 0 - while (index < this.size) { - set(index, 0) - index = index + 1 - } - } - - /** Returns the array element at the given [index]. This method can be called using the index operator. */ - operator fun get(index: Int): Int { - return kotlinclib_get_int(this.data, index) - } - - - /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ - operator fun set(index: Int, value: Int) { - kotlinclib_set_int(this.data, index, value) - } - - - fun clone(): IntArray { - val newInstance = IntArray(this.size) - var index = 0 - while (index < this.size) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance - } - -} - -fun IntArray.print() { - var index = 0 - print('[') - while (index < size) { - print(get(index)) - index++ - if (index < size) { - print(';') - print(' ') - } - } - print(']') -} - -fun IntArray.println() { - this.print() - //println() -} - -fun IntArray.copyOf(newSize: Int): IntArray { - val newInstance = IntArray(newSize) - var index = 0 - val end = if (newSize > this.size) this.size else newSize - while (index < end) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - while (index < newSize) { - newInstance.set(index, 0) - index = index + 1 - } - - return newInstance -} - -fun IntArray.copyOfRange(fromIndex: Int, toIndex: Int): IntArray { - val newInstance = IntArray(toIndex - fromIndex) - var index = fromIndex - while (index < toIndex) { - val value = this.get(index) - newInstance.set(index - fromIndex, value) - index = index + 1 - } - - return newInstance -} - -operator fun IntArray.plus(element: Int): IntArray { - val index = size - val result = this.copyOf(index + 1) - result[index] = element - return result -} - -operator fun IntArray.plus(elements: IntArray): IntArray { - val thisSize = size - val arraySize = elements.size - val resultSize = thisSize + arraySize - val newInstance = this.copyOf(resultSize) - var index = thisSize - - while (index < resultSize) { - val value = elements.get(index - thisSize) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance -} - -fun IntArray.max(from: Int = 0): Int { - var result = from - var i = from - while (i < size - 1) { - result = if (get(i) > get(result)) i else result - i++ - } - - return get(result) -} - -fun IntArray.min(from: Int = 0): Int { - var result = from - var i = from - while (i < size - 1) { - result = if (this.get(i) < this.get(result)) i else result - i++ - } - - return this.get(result) -} - -fun IntArray.sum(): Int { - var result = 0 - var i = 0 - while (i < size - 1) { - result += this.get(i) - i++ - } - - return result -} - -fun IntArray.sort(): IntArray { - val result = this.clone() - var i = 0 - while (i < size - 1) { - result[i] = this.max(i) - i++ - } - - return result -} - -fun IntArray.mean(): Int = - this.sum() / this.size - -fun IntArray.median(): Int = - this.sort()[this.size / 2] - -fun IntArray.filter(predicate: (Int) -> Boolean): IntArray { - var resultSize = 0 - var i = 0 - while (i < size - 1) { - if (predicate(get(i))) { - resultSize++ - } - - i++ - } - - val result = IntArray(resultSize) - var j = 0 - i = 0 - while (i < size - 1) { - if (predicate(get(i))) { - result[j] = get(i) - j++ - } - - i++ - } - - return result -} diff --git a/experiments/translator/kotstd/include/Iterators.kt b/experiments/translator/kotstd/include/Iterators.kt deleted file mode 100644 index 836b06babe9..00000000000 --- a/experiments/translator/kotstd/include/Iterators.kt +++ /dev/null @@ -1,94 +0,0 @@ -package kotlin.collections - -/** An iterator over a sequence of values of type `Byte`. */ -public abstract class ByteIterator { - final fun next() = nextByte() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextByte(): Byte - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Char`. */ -public abstract class CharIterator { - final fun next() = nextChar() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextChar(): Char - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Short`. */ -public abstract class ShortIterator { - final fun next() = nextShort() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextShort(): Short - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Int`. */ -class IntIterator(first: Int, last: Int, val step: Int) { - private var next = first - private val finalElement = last - private var hasNext: Boolean = if (step > 0) first <= last else first >= last - - final fun next() = nextInt () - - fun hasNext(): Boolean = hasNext - - fun nextInt(): Int { - val value = next - if (value == finalElement) { - hasNext = false - } - else { - next += step - } - return value - } -} - - -/** An iterator over a sequence of values of type `Long`. */ -public abstract class LongIterator { - final fun next() = nextLong() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextLong(): Long - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Float`. */ -public abstract class FloatIterator { - final fun next() = nextFloat() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextFloat(): Float - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Double`. */ -public abstract class DoubleIterator { - final fun next() = nextDouble() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextDouble(): Double - - public abstract fun hasNext(): Boolean -} - -/** An iterator over a sequence of values of type `Boolean`. */ -public abstract class BooleanIterator { - final fun next() = nextBoolean() - - /** Returns the next value in the sequence without boxing. */ - public abstract fun nextBoolean(): Boolean - - public abstract fun hasNext(): Boolean -} \ No newline at end of file diff --git a/experiments/translator/kotstd/include/KotlinInputStream.kt b/experiments/translator/kotstd/include/KotlinInputStream.kt deleted file mode 100644 index ee2c40aa387..00000000000 --- a/experiments/translator/kotstd/include/KotlinInputStream.kt +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Created by user on 8/8/16. - */ - -class KotlinInputStream(val buffer: ByteArray) { - var pos = 0 - var mark_ = 0 - - fun read(): Byte { - pos += 1 - return buffer[pos - 1] - } - - fun isAtEnd(): Boolean { - return pos >= buffer.size - } - - fun mark() { - mark_ = pos - } - - fun reset() { - pos = mark_ - } -} diff --git a/experiments/translator/kotstd/include/KotlinOutputStream.kt b/experiments/translator/kotstd/include/KotlinOutputStream.kt deleted file mode 100644 index 51f80aaf766..00000000000 --- a/experiments/translator/kotstd/include/KotlinOutputStream.kt +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Created by user on 8/8/16. - */ - -class KotlinOutputStream(val buffer: ByteArray) { - var pos = 0 - - fun write (data: ByteArray) { - write(data, 0, data.size) - } - - fun write (data: ByteArray, begin: Int, size: Int) { - var i = begin - while (i < begin + size) { - buffer[pos] = data[i] - pos += 1 - i++ - } - } -} diff --git a/experiments/translator/kotstd/include/LongArray.kt b/experiments/translator/kotstd/include/LongArray.kt deleted file mode 100644 index f8ae4fe7d03..00000000000 --- a/experiments/translator/kotstd/include/LongArray.kt +++ /dev/null @@ -1,118 +0,0 @@ -package kotlin - -external fun kotlinclib_get_long(src: Int, index: Int): Long -external fun kotlinclib_set_long(src: Int, index: Int, value: Long) -external fun kotlinclib_long_size(): Int - - -class LongArray(var size: Int) { - val data: Int - - /** Returns the number of elements in the array. */ - //size: Int - - init { - this.data = malloc_array(kotlinclib_long_size() * this.size) - var index = 0 - while (index < this.size) { - set(index, 0) - index = index + 1 - } - } - - /** Returns the array element at the given [index]. This method can be called using the index operator. */ - operator fun get(index: Int): Long { - return kotlinclib_get_long(this.data, index) - } - - - /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ - operator fun set(index: Int, value: Long) { - kotlinclib_set_long(this.data, index, value) - } - - - fun clone(): LongArray { - val newInstance = LongArray(this.size) - var index = 0 - while (index < this.size) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance - } -} - -fun LongArray.print() { - var index = 0 - print('[') - while (index < size) { - print(get(index)) - index++ - if (index < size) { - print(';') - print(' ') - } - } - print(']') -} - -fun LongArray.println() { - this.print() - //println() -} - -fun LongArray.copyOf(newSize: Int): LongArray { - val newInstance = LongArray(newSize) - var index = 0 - val end = if (newSize > this.size) this.size else newSize - while (index < end) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - while (index < newSize) { - newInstance.set(index, 0) - index = index + 1 - } - - return newInstance -} - -fun LongArray.copyOfRange(fromIndex: Int, toIndex: Int): LongArray { - val newInstance = LongArray(toIndex - fromIndex) - var index = fromIndex - while (index < toIndex) { - val value = this.get(index) - newInstance.set(index - fromIndex, value) - index = index + 1 - } - - return newInstance -} - -operator fun LongArray.plus(element: Long): LongArray { - val index = size - val result = this.copyOf(index + 1) - result[index] = element - return result -} - -operator fun LongArray.plus(elements: LongArray): LongArray { - val thisSize = size - val arraySize = elements.size - val resultSize = thisSize + arraySize - val newInstance = this.copyOf(resultSize) - var index = thisSize - - while (index < resultSize) { - val value = elements.get(index - thisSize) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance -} \ No newline at end of file diff --git a/experiments/translator/kotstd/include/Primitives.kt b/experiments/translator/kotstd/include/Primitives.kt deleted file mode 100644 index 3da2e500545..00000000000 --- a/experiments/translator/kotstd/include/Primitives.kt +++ /dev/null @@ -1,251 +0,0 @@ -package kotlin - -external fun kotlinclib_byteToChar(value: Byte): Char -external fun kotlinclib_byteToShort(value: Byte): Short -external fun kotlinclib_byteToInt(value: Byte): Int -external fun kotlinclib_byteToLong(value: Byte): Long -external fun kotlinclib_byteToFloat(value: Byte): Float -external fun kotlinclib_byteToDouble(value: Byte): Double - - -fun Byte.toByte(): Byte { - return this -} - -fun Byte.toInt(): Int { - return kotlinclib_byteToInt(this) -} - -fun Byte.toChar(): Char { - return kotlinclib_byteToChar(this) -} - -fun Byte.toShort(): Short { - return kotlinclib_byteToShort(this) -} - -fun Byte.toLong(): Long { - return kotlinclib_byteToLong(this) -} - -fun Byte.toFloat(): Float { - return kotlinclib_byteToFloat(this) -} - -fun Byte.toDouble(): Double { - return kotlinclib_byteToDouble(this) -} - -external fun kotlinclib_charToByte(value: Char): Byte -external fun kotlinclib_charToShort(value: Char): Short -external fun kotlinclib_charToInt(value: Char): Int -external fun kotlinclib_charToLong(value: Char): Long -external fun kotlinclib_charToFloat(value: Char): Float -external fun kotlinclib_charToDouble(value: Char): Double - - -fun Char.toByte(): Byte { - return kotlinclib_charToByte(this) -} - -fun Char.toInt(): Int { - return kotlinclib_charToInt(this) -} - -fun Char.toChar(): Char { - return this -} - -fun Char.toShort(): Short { - return kotlinclib_charToShort(this) -} - -fun Char.toLong(): Long { - return kotlinclib_charToLong(this) -} - -fun Char.toFloat(): Float { - return kotlinclib_charToFloat(this) -} - -fun Char.toDouble(): Double { - return kotlinclib_charToDouble(this) -} - -external fun kotlinclib_doubleToByte(value: Double): Byte -external fun kotlinclib_doubleToChar(value: Double): Char -external fun kotlinclib_doubleToShort(value: Double): Short -external fun kotlinclib_doubleToInt(value: Double): Int -external fun kotlinclib_doubleToLong(value: Double): Long -external fun kotlinclib_doubleToFloat(value: Double): Float - -fun Double.toByte(): Byte { - return kotlinclib_doubleToByte(this) -} - -fun Double.toChar(): Char { - return kotlinclib_doubleToChar(this) -} - -fun Double.toShort(): Short { - return kotlinclib_doubleToShort(this) -} - -fun Double.toInt(): Int { - return kotlinclib_doubleToInt(this) -} - -fun Double.toLong(): Long { - return kotlinclib_doubleToLong(this) -} - -fun Double.toFloat(): Float { - return kotlinclib_doubleToFloat(this) -} - -fun Double.toDouble(): Double { - return this -} - - -external fun kotlinclib_floatToByte(value: Float): Byte -external fun kotlinclib_floatToChar(value: Float): Char -external fun kotlinclib_floatToShort(value: Float): Short -external fun kotlinclib_floatToInt(value: Float): Int -external fun kotlinclib_floatToLong(value: Float): Long -external fun kotlinclib_floatToDouble(value: Float): Double - -fun Float.toByte(): Byte { - return kotlinclib_floatToByte(this) -} - -fun Float.toChar(): Char { - return kotlinclib_floatToChar(this) -} - -fun Float.toShort(): Short { - return kotlinclib_floatToShort(this) -} - -fun Float.toInt(): Int { - return kotlinclib_floatToInt(this) -} - -fun Float.toLong(): Long { - return kotlinclib_floatToLong(this) -} - -fun Float.toFloat(): Float { - return this -} - -fun Float.toDouble(): Double { - return kotlinclib_floatToDouble(this) -} - - -external fun kotlinclib_intToByte(value: Int): Byte -external fun kotlinclib_intToChar(value: Int): Char -external fun kotlinclib_intToShort(value: Int): Short -external fun kotlinclib_intToLong(value: Int): Long -external fun kotlinclib_intToFloat(value: Int): Float -external fun kotlinclib_intToDouble(value: Int): Double - -fun Int.toByte(): Byte { - return kotlinclib_intToByte(this) -} - -fun Int.toInt(): Int { - return this -} - -fun Int.toChar(): Char { - return kotlinclib_intToChar(this) -} - -fun Int.toShort(): Short { - return kotlinclib_intToShort(this) -} - -fun Int.toLong(): Long { - return kotlinclib_intToLong(this) -} - -fun Int.toFloat(): Float { - return kotlinclib_intToFloat(this) -} - -fun Int.toDouble(): Double { - return kotlinclib_intToDouble(this) -} - -external fun kotlinclib_longToByte(value: Long): Byte -external fun kotlinclib_longToChar(value: Long): Char -external fun kotlinclib_longToShort(value: Long): Short -external fun kotlinclib_longToInt(value: Long): Int -external fun kotlinclib_longToFloat(value: Long): Float -external fun kotlinclib_longToDouble(value: Long): Double - -fun Long.toByte(): Byte { - return kotlinclib_longToByte(this) -} - -fun Long.toLong(): Long { - return this -} - -fun Long.toChar(): Char { - return kotlinclib_longToChar(this) -} - -fun Long.toShort(): Short { - return kotlinclib_longToShort(this) -} - -fun Long.toInt(): Int { - return kotlinclib_longToInt(this) -} - -fun Long.toFloat(): Float { - return kotlinclib_longToFloat(this) -} - -fun Long.toDouble(): Double { - return kotlinclib_longToDouble(this) -} - -external fun kotlinclib_shortToByte(value: Short): Byte -external fun kotlinclib_shortToChar(value: Short): Char -external fun kotlinclib_shortToInt(value: Short): Int -external fun kotlinclib_shortToLong(value: Short): Long -external fun kotlinclib_shortToFloat(value: Short): Float -external fun kotlinclib_shortToDouble(value: Short): Double - - -fun Short.toByte(): Byte { - return kotlinclib_shortToByte(this) -} - -fun Short.toInt(): Int { - return kotlinclib_shortToInt(this) -} - -fun Short.toChar(): Char { - return kotlinclib_shortToChar(this) -} - -fun Short.toShort(): Short { - return this -} - -fun Short.toLong(): Long { - return kotlinclib_shortToLong(this) -} - -fun Short.toFloat(): Float { - return kotlinclib_shortToFloat(this) -} - -fun Short.toDouble(): Double { - return kotlinclib_shortToDouble(this) -} diff --git a/experiments/translator/kotstd/include/Progressions.kt b/experiments/translator/kotstd/include/Progressions.kt deleted file mode 100644 index ec9bbb3ec09..00000000000 --- a/experiments/translator/kotstd/include/Progressions.kt +++ /dev/null @@ -1,50 +0,0 @@ -package kotlin - -/** - * A progression of values of type `Int`. - */ -public open class IntProgression -constructor -( - start: Int, - endInclusive: Int, - val step: Int -) { - init { - if (step == 0) { - println("Step must be non-zero.") - assert(false) - } - } - - /** - * The first element in the progression. - */ - public val first: Int = start - - /** - * The last element in the progression. - */ - public val last: Int = getProgressionLastElement(start.toInt(), endInclusive.toInt(), step).toInt() - - - fun iterator(): IntIterator = IntIterator(first, last, step) - - /** Checks if the progression is empty. */ - public open fun isEmpty(): Boolean = if (step > 0) first > last else first < last - - //[TODO] equals - - override fun hashCode(): Int = - if (isEmpty()) -1 else (31 * (31 * first + last) + step) - - companion object { - /** - * Creates IntProgression within the specified bounds of a closed range. - - * The progression starts with the [rangeStart] value and goes toward the [rangeEnd] value not excluding it, with the specified [step]. - * In order to go backwards the [step] must be negative. - */ - public fun fromClosedRange(rangeStart: Int, rangeEnd: Int, step: Int): IntProgression = IntProgression(rangeStart, rangeEnd, step) - } -} diff --git a/experiments/translator/kotstd/include/Ranges.kt b/experiments/translator/kotstd/include/Ranges.kt deleted file mode 100644 index 4c12faa5e3d..00000000000 --- a/experiments/translator/kotstd/include/Ranges.kt +++ /dev/null @@ -1,25 +0,0 @@ -package kotlin.ranges - -import kotlin.IntProgression -import kotlin.collections.IntIterator - -public class IntRange(val start: Int, val endInclusive: Int) { - val progression = IntProgression(start, endInclusive, 1) - val first: Int - val last: Int - - init { - this.first = progression.first - this.last = progression.last - } - - fun contains(value: Int): Boolean = first <= value && value <= last - - fun isEmpty(): Boolean = first > last - - fun iterator(): IntIterator = progression.iterator() - - override fun hashCode(): Int = - if (isEmpty()) -1 else (31 * first + last) - -} diff --git a/experiments/translator/kotstd/include/ShortArray.kt b/experiments/translator/kotstd/include/ShortArray.kt deleted file mode 100644 index 3d1cf82a40e..00000000000 --- a/experiments/translator/kotstd/include/ShortArray.kt +++ /dev/null @@ -1,120 +0,0 @@ -package kotlin - -external fun kotlinclib_get_short(src: Int, index: Int): Short -external fun kotlinclib_set_short(src: Int, index: Int, value: Short) -external fun kotlinclib_short_size(): Int - - -class ShortArray(var size: Int) { - val data: Int - - /** Returns the number of elements in the array. */ - //size: Int - - init { - this.data = malloc_array(kotlinclib_short_size() * this.size) - var index = 0 - while (index < this.size) { - set(index, 0) - index = index + 1 - } - } - - /** Returns the array element at the given [index]. This method can be called using the index operator. */ - operator fun get(index: Int): Short { - return kotlinclib_get_short(this.data, index) - } - - - /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ - operator fun set(index: Int, value: Short) { - kotlinclib_set_short(this.data, index, value) - } - - - fun clone(): ShortArray { - val newInstance = ShortArray(this.size) - var index = 0 - while (index < this.size) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance - } - -} - -fun ShortArray.print() { - var index = 0 - print('[') - while (index < size) { - print(get(index)) - index++ - if (index < size) { - print(';') - print(' ') - } - } - print(']') -} - -fun ShortArray.println() { - this.print() - //println() -} - - -fun ShortArray.copyOf(newSize: Int): ShortArray { - val newInstance = ShortArray(newSize) - var index = 0 - val end = if (newSize > this.size) this.size else newSize - while (index < end) { - val value = this.get(index) - newInstance.set(index, value) - index = index + 1 - } - - while (index < newSize) { - newInstance.set(index, 0) - index = index + 1 - } - - return newInstance -} - -fun ShortArray.copyOfRange(fromIndex: Int, toIndex: Int): ShortArray { - val newInstance = ShortArray(toIndex - fromIndex) - var index = fromIndex - while (index < toIndex) { - val value = this.get(index) - newInstance.set(index - fromIndex, value) - index = index + 1 - } - - return newInstance -} - -operator fun ShortArray.plus(element: Short): ShortArray { - val index = size - val result = this.copyOf(index + 1) - result[index] = element - return result -} - -operator fun ShortArray.plus(elements: ShortArray): ShortArray { - val thisSize = size - val arraySize = elements.size - val resultSize = thisSize + arraySize - val newInstance = this.copyOf(resultSize) - var index = thisSize - - while (index < resultSize) { - val value = elements.get(index - thisSize) - newInstance.set(index, value) - index = index + 1 - } - - return newInstance -} \ No newline at end of file diff --git a/experiments/translator/kotstd/include/WireFormat.kt b/experiments/translator/kotstd/include/WireFormat.kt deleted file mode 100644 index d43c6e37003..00000000000 --- a/experiments/translator/kotstd/include/WireFormat.kt +++ /dev/null @@ -1,164 +0,0 @@ - -object WireFormat { - // couple of constants for magic numbers - val TAG_TYPE_BITS: Int = 3 - val TAG_TYPE_MASK: Int = (1 shl TAG_TYPE_BITS) - 1 - val VARINT_INFO_BITS_COUNT: Int = 7 - val VARINT_INFO_BITS_MASK: Int = 0b01111111 // mask for separating lowest 7 bits, where actual information stored - val VARINT_UTIL_BIT_MASK: Int = 0b10000000 // mask for separating highest bit, that indicates next byte presence - val FIXED_32_BYTE_SIZE: Int = 4 - val FIXED_64_BYTE_SIZE: Int = 8 - - fun getTagWireType(tag: Int): WireType { - return WireType.from((tag and TAG_TYPE_MASK).toByte()) - } - - fun getTagFieldNumber(tag: Int): Int { - return tag ushr TAG_TYPE_BITS - } - - // TODO: refactor casts into function overloading as soon as translator will support it - fun getTagSize(fieldNumber: Int, wireType: WireType): Int { - return getVarint32Size((fieldNumber shl 3) or wireType.id) - } - - fun getVarint32Size(value: Int): Int { - var curValue = value - var size = 0 - do { - size += 1 - curValue = curValue ushr VARINT_INFO_BITS_COUNT - } while (curValue != 0) - return size - } - - fun getVarint64Size(value: Long): Int { - var curValue = value - var size = 0 - do { - size += 1 - curValue = curValue ushr VARINT_INFO_BITS_COUNT - }while (curValue != 0L) - return size - } - - fun getZigZag32Size(value: Int): Int { - return getVarint32Size((value shl 1) xor (value shr 31)) - } - - fun getZigZag64Size(value: Long): Int { - return getVarint64Size((value shl 1) xor (value shr 63)) - } - - fun getInt32Size(fieldNumber: Int, value: Int): Int { - return getTagSize(fieldNumber, WireType.VARINT) + getInt32SizeNoTag(value) - } - - fun getInt32SizeNoTag(value: Int): Int { - if (value < 0) { - return getVarint64Size(value.toLong()) - } - return getVarint32Size(value) - } - - fun getUInt32Size(fieldNumber: Int, value: Int): Int { - return getTagSize(fieldNumber, WireType.VARINT) + getUInt32SizeNoTag(value) - } - - fun getUInt32SizeNoTag(value: Int): Int { - return getVarint32Size(value) - } - - fun getInt64Size(fieldNumber: Int, value: Long): Int { - return getTagSize(fieldNumber, WireType.VARINT) + getUInt64SizeNoTag(value) - } - - fun getInt64SizeNoTag(value: Long): Int { - return getVarint64Size(value) - } - - fun getUInt64Size(fieldNumber: Int, value: Long): Int { - return getInt64Size(fieldNumber, value) - } - - fun getUInt64SizeNoTag(value: Long): Int { - return getVarint64Size(value) - } - - fun getBoolSize(fieldNumber: Int, value: Boolean): Int { - val intValue = if (value) 1 else 0 - return getInt32Size(fieldNumber, intValue) - } - - fun getBoolSizeNoTag(value: Boolean): Int { - val intValue = if (value) 1 else 0 - return getInt32SizeNoTag(intValue) - } - - fun getEnumSize(fieldNumber: Int, value: Int): Int { - return getInt32Size(fieldNumber, value) - } - - fun getEnumSizeNoTag(value: Int): Int { - return getInt32SizeNoTag(value) - } - - fun getSInt32Size(fieldNumber: Int, value: Int): Int { - return getTagSize(fieldNumber, WireType.VARINT) + getZigZag32Size(value) - } - - fun getSInt32SizeNoTag(value: Int): Int { - return getZigZag32Size(value) - } - - fun getSInt64Size(fieldNumber: Int, value: Long): Int { - return getTagSize(fieldNumber, WireType.VARINT) + getZigZag64Size(value) - } - - fun getSInt64SizeNoTag(value: Long): Int { - return getZigZag64Size(value) - } - - fun getFixed32Size(fieldNumber: Int, value: Int): Int { - return getTagSize(fieldNumber, WireType.FIX_32) + FIXED_32_BYTE_SIZE - } - - fun getFixed32SizeNoTag(value: Int): Int { - return FIXED_32_BYTE_SIZE - } - - fun getFixed64Size(fieldNumber: Int, value: Long): Int { - return getTagSize(fieldNumber, WireType.FIX_64) + FIXED_64_BYTE_SIZE - } - - fun getFixed64SizeNoTag(value: Long): Int { - return FIXED_64_BYTE_SIZE - } - - fun getDoubleSize(fieldNumber: Int, value: Double): Int { - return getTagSize(fieldNumber, WireType.FIX_64) + FIXED_64_BYTE_SIZE - } - - fun getDoubleSizeNoTag(value: Double): Int { - return FIXED_64_BYTE_SIZE - } - - fun getFloatSize(fieldNumber: Int, value: Float): Int { - return getTagSize(fieldNumber, WireType.FIX_32) + FIXED_32_BYTE_SIZE - } - - fun getFloatSizeNoTag(value: Float): Int { - return FIXED_32_BYTE_SIZE - } - - fun getBytesSize(fieldNumber: Int, value: ByteArray): Int { - if (value.size == 0) - return 0 - var size = 0 - return value.size + getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) + getVarint32Size(value.size) - } - - fun getBytesSizeNoTag(value: ByteArray): Int { - return value.size + getVarint32Size(value.size) - } -} diff --git a/experiments/translator/kotstd/include/WireType.kt b/experiments/translator/kotstd/include/WireType.kt deleted file mode 100644 index 4ffc150fa68..00000000000 --- a/experiments/translator/kotstd/include/WireType.kt +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Created by Dmitry Savvinov on 7/6/16. - * Enum for possible WireTypes. - * See details at [official Google reference](https://developers.google.com/protocol-buffers/docs/encoding#structure) - */ - -enum class WireType(val id: Int) { - VARINT(0), // int32, int64, uint32, uint64, sint32, sint64, bool, enum - FIX_64(1), // fixed64, sfixed64, double - LENGTH_DELIMITED(2), // string, bytes, embedded messages, packed repeated fields - START_GROUP(3), // groups (deprecated) - END_GROUP(4), // groups (deprecated) - FIX_32(5), // fixed32, sfixed32, float - UNDEFINED(6); // indicates error when parsing from Int - - companion object { - fun from (value: Byte): WireType { - return when (value) { - 0.toByte() -> VARINT - 1.toByte() -> FIX_64 - 2.toByte() -> LENGTH_DELIMITED - 3.toByte() -> START_GROUP - 4.toByte() -> END_GROUP - 5.toByte() -> FIX_32 - else -> UNDEFINED - } - } - } -} diff --git a/experiments/translator/kotstd/include/progressionUtil.kt b/experiments/translator/kotstd/include/progressionUtil.kt deleted file mode 100644 index a03312f71e4..00000000000 --- a/experiments/translator/kotstd/include/progressionUtil.kt +++ /dev/null @@ -1,71 +0,0 @@ -package kotlin - -// a mod b (in arithmetical sense) -private fun mod(a: Int, b: Int): Int { - val mod = a % b - return if (mod >= 0) mod else mod + b -} - -private fun mod(a: Long, b: Long): Long { - val mod = a % b - return if (mod >= 0) mod else mod + b -} - -// (a - b) mod c -private fun differenceModulo(a: Int, b: Int, c: Int): Int { - return mod(mod(a, c) - mod(b, c), c) -} - -private fun differenceModulo(a: Long, b: Long, c: Long): Long { - return mod(mod(a, c) - mod(b, c), c) -} - -/** - * Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range - * from [start] to [end] in case of a positive [step], or from [end] to [start] in case of a negative - * [step]. - * - * No validation on passed parameters is performed. The given parameters should satisfy the condition: either - * `step > 0` and `start >= end`, or `step < 0` and`start >= end`. - * @param start first element of the progression - * @param end ending bound for the progression - * @param step increment, or difference of successive elements in the progression - * @return the final element of the progression - * @suppress - */ -fun getProgressionLastElement(start: Int, end: Int, step: Int): Int { - if (step > 0) { - return end - differenceModulo(end, start, step) - } else if (step < 0) { - return end + differenceModulo(start, end, -step) - } else { - println("Step is zero.") - assert(false) - return -1 - } -} - -/** - * Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range - * from [start] to [end] in case of a positive [step], or from [end] to [start] in case of a negative - * [step]. - * - * No validation on passed parameters is performed. The given parameters should satisfy the condition: either - * `step > 0` and `start >= end`, or `step < 0` and`start >= end`. - * @param start first element of the progression - * @param end ending bound for the progression - * @param step increment, or difference of successive elements in the progression - * @return the final element of the progression - * @suppress - */ -internal fun getProgressionLastElement(start: Long, end: Long, step: Long): Long { - if (step > 0) { - return end - differenceModulo(end, start, step) - } else if (step < 0) { - return end + differenceModulo(start, end, -step) - } else { - println("Step is zero.") - assert(false) - return -1L - } -} diff --git a/experiments/translator/kotstd/libc/array_c.c b/experiments/translator/kotstd/libc/array_c.c deleted file mode 100644 index 8b80a3534cc..00000000000 --- a/experiments/translator/kotstd/libc/array_c.c +++ /dev/null @@ -1,32 +0,0 @@ -extern char *malloc(int size); - -int malloc_array(int x) { - return (int) malloc(x); -} - -char kotlinclib_get_byte(int data, int index) { - return *((char *) data + index); -} - -void kotlinclib_set_byte(int data, int index, char value) { - char *ptr = (char *) data; - *(ptr + index) = value; -} - -int kotlinclib_get_int(int data, int index) { - return *((int *) data + index); -} - -void kotlinclib_set_int(int data, int index, int value) { - int *ptr = (int *) data; - *(ptr + index) = value; -} - -short kotlinclib_get_short(int data, int index) { - return *((short *) data + index); -} - -void kotlinclib_set_short(int data, int index, short value) { - short *ptr = (short *) data; - *(ptr + index) = value; -} \ No newline at end of file diff --git a/experiments/translator/kotstd/libc/assert_c.c b/experiments/translator/kotstd/libc/assert_c.c deleted file mode 100644 index e526eaaca41..00000000000 --- a/experiments/translator/kotstd/libc/assert_c.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include - -void assert_c(int value) { - if (!value) { - printf("Exception in thread \"main\" java.lang.AssertionError: Assertion failed\n"); - abort(); - } -} \ No newline at end of file diff --git a/experiments/translator/kotstd/libc/memory.c b/experiments/translator/kotstd/libc/memory.c deleted file mode 100644 index 18844c7c0ef..00000000000 --- a/experiments/translator/kotstd/libc/memory.c +++ /dev/null @@ -1,82 +0,0 @@ - -#define STATIC_AREA_SIZE 30000 -#define DYNAMIC_AREA_SIZE 30000 - -#define STATIC_HEAP 0 -#define DYNAMIC_HEAP 1 - -#ifdef ARM - -char static_area[STATIC_AREA_SIZE]; -char dynamic_area[DYNAMIC_AREA_SIZE]; - -char* heaps[2] = { - (char*) static_area, - (char*) dynamic_area -}; - -int heap_tails[2] = {0, 0}; -int active_heap = STATIC_HEAP; - -int dynamic_heap_consume = 0; -int dynamic_heap_max = 0; - -#else -char* malloc(int); -#endif - -#ifdef DBG - static int total = 0; - int printf(const char * restrict format, ... ); -#endif - -char* malloc_heap(int size) { -#ifdef ARM - char* ptr = heaps[active_heap] + heap_tails[active_heap]; - heap_tails[active_heap] += size; - - return ptr; - -#else - #ifdef DBG - total = total + size; - printf("Alloc [%d] TOTAL: [%d]\n", size, total); - #endif - return malloc(size); -#endif -} - -void set_active_heap(int heap) { -#ifdef ARM - active_heap = heap; -#endif -} - -void clean_dynamic_heap() { -#ifdef ARM - dynamic_heap_consume += heap_tails[DYNAMIC_HEAP]; - if (heap_tails[DYNAMIC_HEAP] > dynamic_heap_max) { - dynamic_heap_max = heap_tails[DYNAMIC_HEAP]; - } - - heap_tails[DYNAMIC_HEAP] = 0; -#endif -} - -#ifdef ARM -int dynamic_heap_tail() { - return heap_tails[DYNAMIC_HEAP]; -} - -int static_heap_tail() { - return heap_tails[STATIC_HEAP]; -} - -int dynamic_heap_max_bytes() { - return dynamic_heap_max; -} - -int dynamic_heap_total() { - return dynamic_heap_consume; -} -#endif diff --git a/experiments/translator/kotstd/libc/primitives_c.c b/experiments/translator/kotstd/libc/primitives_c.c deleted file mode 100644 index 5f1eb3c2f52..00000000000 --- a/experiments/translator/kotstd/libc/primitives_c.c +++ /dev/null @@ -1,57 +0,0 @@ -#define MAKE_CONVERT(from, from_type, to, to_type) to_type kotlinclib_ ## from ## To ## to ( from_type value ) { return (to_type) value;} - - -MAKE_CONVERT(int, int, Byte, char) -MAKE_CONVERT(int, int, Char, char) -MAKE_CONVERT(int, int, Short, short) -MAKE_CONVERT(int, int, Long, long) -MAKE_CONVERT(int, int, Float, float) -MAKE_CONVERT(int, int, Double, double) - - -MAKE_CONVERT(byte, char, Char, char) -MAKE_CONVERT(byte, char, Short, short) -MAKE_CONVERT(byte, char, Int, int) -MAKE_CONVERT(byte, char, Long, long) -MAKE_CONVERT(byte, char, Float, float) -MAKE_CONVERT(byte, char, Double, double) - - -MAKE_CONVERT(char, char, Byte, char) -MAKE_CONVERT(char, char, Short, short) -MAKE_CONVERT(char, char, Int, int) -MAKE_CONVERT(char, char, Long, long) -MAKE_CONVERT(char, char, Float, float) -MAKE_CONVERT(char, char, Double, double) - - -MAKE_CONVERT(short, short, Byte, char) -MAKE_CONVERT(short, short, Char, char) -MAKE_CONVERT(short, short, Int, int) -MAKE_CONVERT(short, short, Long, long) -MAKE_CONVERT(short, short, Float, float) -MAKE_CONVERT(short, short, Double, double) - - -MAKE_CONVERT(long, long, Byte, char) -MAKE_CONVERT(long, long, Char, char) -MAKE_CONVERT(long, long, Short, short) -MAKE_CONVERT(long, long, Int, int) -MAKE_CONVERT(long, long, Float, float) -MAKE_CONVERT(long, long, Double, double) - - -MAKE_CONVERT(float, float, Byte, char) -MAKE_CONVERT(float, float, Char, char) -MAKE_CONVERT(float, float, Short, short) -MAKE_CONVERT(float, float, Int, int) -MAKE_CONVERT(float, float, Long, long) -MAKE_CONVERT(float, float, Double, double) - - -MAKE_CONVERT(double, double, Byte, char) -MAKE_CONVERT(double, double, Char, char) -MAKE_CONVERT(double, double, Short, short) -MAKE_CONVERT(double, double, Int, int) -MAKE_CONVERT(double, double, Long, long) -MAKE_CONVERT(double, double, Float, float) \ No newline at end of file diff --git a/experiments/translator/run_one_test.sh b/experiments/translator/run_one_test.sh deleted file mode 100755 index cd3cb154876..00000000000 --- a/experiments/translator/run_one_test.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash -green='\033[0;32m' -red='\033[0;31m' -lightRed='\033[1;31m' -orange='\033[0;33m' -KOTSTD='../kotstd/kt' - -cd ../translator - -i=$1 -TEST=`basename $i ".txt"` -DIRECTORY="src/test/kotlin/tests" -MAIN="$DIRECTORY/$TEST/linked/main.c" -rm -f $DIRECTORY/$TEST/linked/* -mkdir -p $DIRECTORY/$TEST/linked - -echo "#include " >> $MAIN -echo "#include " >> $MAIN -echo "#include " >> $MAIN - -echo "int main(){" >> $MAIN -echo "printf(\"%stest: $TEST%s\n\", \"\x1B[33m\", \"\x1B[0m\");" >> $MAIN -cat "$i" | while read LINE -do - echo " assert($LINE);" >> $MAIN - echo " printf(\"%s[OK]:%s $LINE\n\", \"\x1B[32m\", \"\x1B[0m\");" >> $MAIN -done - -echo "printf(\"TEST RESULT: OK\n\");" >> $MAIN -echo "return 0;}" >> $MAIN - -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Error somewhere in main.c generation${nc}" - exit 1 -fi - -clang-3.6 -S -emit-llvm $DIRECTORY/$TEST/linked/main.c -o $DIRECTORY/$TEST/linked/main.ll -Wno-implicit-function-declaration -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Error building main.c${nc}" - exit 1 -fi - -cp ../kotstd/build/stdlib_x86.ll $DIRECTORY/$TEST/linked/ -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Error copying ../kotstd/build/stdlib_x86.ll to ${DIRECTORY}/${TEST}/linked/${nc}" - exit 1 -fi - -if [ -f "$DIRECTORY/$TEST/$TEST.c" ] - then - clang-3.6 -S -emit-llvm "$DIRECTORY/$TEST/$TEST.c" -o $DIRECTORY/$TEST/linked/$TEST"_c.ll" -Wno-implicit-function-declaration - if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Error building: ${DIRECTORY}/${TEST}/linked/${TEST}_c.ll${nc}" - fi -fi - -java -jar build/libs/translator-1.0.jar -I $KOTSTD $DIRECTORY/$TEST/$TEST.kt > $DIRECTORY/$TEST/linked/$TEST.ll - -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Translation error: ${DIRECTORY}/$TEST/${TEST}.kt${nc}" -fi - -llvm-link-3.6 -S $DIRECTORY/$TEST/linked/*.ll > $DIRECTORY/$TEST/linked/run.ll -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${red}Error linking with llvm${nc}" -fi - -lli-3.6 $DIRECTORY/$TEST/linked/run.ll -if [ $? -ne 0 ]; then - echo -e "${orange}test: ${TEST}${nc}" - echo -e "${lightRed}Error running test${nc}" -fi diff --git a/experiments/translator/run_tests.sh b/experiments/translator/run_tests.sh deleted file mode 100755 index d9ff0f3031b..00000000000 --- a/experiments/translator/run_tests.sh +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/bash -green='\033[0;32m' -red='\033[0;31m' -lightRed='\033[1;31m' -orange='\033[0;33m' -nc='\033[0m' -KOTSTD='../kotstd/kt' - -if [ "$3" == "--debug" ]; then - cd ../kotstd && make clean && make debug -else - cd ../kotstd && make clean && make -fi - -if [ $? -ne 0 ]; then - echo -e "${red}Error building kotstd lib${nc}" - exit 1 -fi - -cd ../translator - -DIRECTORY="src/test/kotlin/tests" -TESTS=$( ls $DIRECTORY/*/*.txt $1) # Note that "ls $DIRECTORY/input $1" is wrong. Why? Because it's bash. - -if [ "$2" == "--proto" ]; then - TESTS=$( ls $DIRECTORY/*/proto*.txt $1) -fi -total_scripts=0 -successful_scripts=0 - -for i in $TESTS; do - TEST=`basename $i ".txt"` - MAIN="$DIRECTORY/$TEST/linked/main.c" - rm -f $DIRECTORY/$TEST/linked/* - mkdir -p $DIRECTORY/$TEST/linked - successful=1 - echo -e "${orange}test: ${TEST}${nc}" - echo "#include " >> $MAIN - echo "#include " >> $MAIN - echo "#include " >> $MAIN - - echo "int main(){" >> $MAIN - cat "$i" | while read LINE - do - echo " assert($LINE);" >> $MAIN - echo " printf(\"%s[OK]:%s $LINE\n\", \"\x1B[32m\", \"\x1B[0m\");" >> $MAIN - done - - echo "printf(\"TEST RESULT: OK\n\");" >> $MAIN - echo "return 0;}" >> $MAIN - - if [ $? -ne 0 ]; then - echo -e "${red}Error somewhere in main.c generation${nc}" - exit 1 - fi - - clang-3.6 -S -emit-llvm $DIRECTORY/$TEST/linked/main.c -o $DIRECTORY/$TEST/linked/main.ll -Wno-implicit-function-declaration - if [ $? -ne 0 ]; then - echo -e "${red}Error building main.c${nc}" - exit 1 - fi - - - cp ../kotstd/build/stdlib_x86.ll $DIRECTORY/$TEST/linked/ - if [ $? -ne 0 ]; then - echo -e "${red}Error copying ../kotstd/build/stdlib_x86.ll to ${DIRECTORY}/${TEST}/linked/${nc}" - exit 1 - fi - - if [ -f "$DIRECTORY/$TEST/$TEST.c" ] - then - clang-3.6 -S -emit-llvm "$DIRECTORY/$TEST/$TEST.c" -o $DIRECTORY/$TEST/linked/$TEST"_c.ll" -Wno-implicit-function-declaration - if [ $? -ne 0 ]; then - echo -e "${red}Error building: ${DIRECTORY}/${TEST}/linked/${TEST}_c.ll${nc}" - fi - fi - - java -jar build/libs/translator-1.0.jar -I $KOTSTD $DIRECTORY/$TEST/$TEST.kt > $DIRECTORY/$TEST/linked/$TEST.ll - - if [ $? -ne 0 ]; then - echo -e "${red}Translation error: ${DIRECTORY}/$TEST/${TEST}.kt${nc}" - successful=0 - fi - - llvm-link-3.6 -S $DIRECTORY/$TEST/linked/*.ll > $DIRECTORY/$TEST/linked/run.ll - if [ $? -ne 0 ]; then - echo -e "${red}Error linking with llvm${nc}" - successful=0 - fi - - lli-3.6 $DIRECTORY/$TEST/linked/run.ll - if [ $? -ne 0 ]; then - echo -e "${lightRed}Error running test${nc}" - successful=0 - fi - - if [ "$2" == "--once" ]; then - exit - fi - successful_scripts=$((successful_scripts+successful)) - total_scripts=$((total_scripts+1)) -done - -echo -e "Result: ${orange} [${successful_scripts}]/[${total_scripts}]" diff --git a/experiments/translator/settings.gradle b/experiments/translator/settings.gradle deleted file mode 100644 index 4636f58628e..00000000000 --- a/experiments/translator/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -rootProject.name = 'translator' - diff --git a/experiments/translator/src/main/kotlin/DefaultArguments.kt b/experiments/translator/src/main/kotlin/DefaultArguments.kt deleted file mode 100644 index 4f5bfcbd9a1..00000000000 --- a/experiments/translator/src/main/kotlin/DefaultArguments.kt +++ /dev/null @@ -1,39 +0,0 @@ -import com.jshmrsn.karg.Arguments -import com.jshmrsn.karg.RawArguments - -class DefaultArguments(raw: RawArguments) : Arguments(raw, name = "default") { - - val includeDir = optionalParameter( - name = "include directory", - aliasNames = listOf("include"), - shortNames = listOf('I') - ) - - val arm = optionalFlag( - name = "arm", - description = "enable arm build", - aliasNames = listOf("arm"), - default = false - ) - - val output = optionalParameter( - name = "output", - description = "output file path", - shortNames = listOf('o') - ) - - val mainClass = optionalParameter( - name = "main class", - aliasNames = listOf("main"), - default = "main", - shortNames = listOf('M') - ) - - //[TODO] files with [] or another marking - val sources = positionalArguments( - name = "sources", - description = "source files", - minCount = 1 - ) - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/main.kt b/experiments/translator/src/main/kotlin/main.kt deleted file mode 100644 index 5a91b7b8633..00000000000 --- a/experiments/translator/src/main/kotlin/main.kt +++ /dev/null @@ -1,30 +0,0 @@ -import com.intellij.openapi.util.Disposer -import com.jshmrsn.karg.parseArguments -import org.kotlinnative.translator.ProjectTranslator -import org.kotlinnative.translator.TranslationState -import java.io.* - -fun main(args: Array) { - // TODO make good help message (ex. is rm --help) - val arguments = parseArguments(args, ::DefaultArguments) - val disposer = Disposer.newDisposable() - val analyzedFiles = arguments.sources.toMutableList() - - if (arguments.includeDir != null) { - val libraryFiles = File(arguments.includeDir).walk().filter { !it.isDirectory }.map { it.absolutePath } - analyzedFiles.addAll(libraryFiles) - } - - val translationState = TranslationState.createTranslationState(analyzedFiles, disposer, arguments.mainClass, arguments.arm) - val code:String = ProjectTranslator( - translationState.environment.getSourceFiles(), - translationState - ).generateCode() - - if (arguments.output == null) { - println(code) - } else { - val output = File(arguments.output) - output.writeText(code) - } -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/ProjectTranslator.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/ProjectTranslator.kt deleted file mode 100644 index 8974b5042da..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/ProjectTranslator.kt +++ /dev/null @@ -1,77 +0,0 @@ -package org.kotlinnative.translator - -import org.jetbrains.kotlin.psi.* -import org.kotlinnative.translator.codegens.ClassCodegen -import org.kotlinnative.translator.codegens.FunctionCodegen -import org.kotlinnative.translator.codegens.ObjectCodegen -import org.kotlinnative.translator.codegens.PropertyCodegen - -class ProjectTranslator(val files: List, - val state: TranslationState) { - private var codeBuilder = state.codeBuilder - - fun generateCode(): String { - with(files) { - map { addClassDeclarations(it) } - map { addObjectDeclarations(it) } - map { addFunctionDeclarations(it) } - map { addPropertyDeclarations(it) } - } - generateProjectBody() - return codeBuilder.toString() - } - - fun addFunctionDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val function = FunctionCodegen(state, variableManager, declaration, codeBuilder) - if (function.external) { - state.externalFunctions.put(function.fullName, function) - } else { - state.functions.put(function.fullName, function) - } - } - } - - fun addClassDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val codegen = ClassCodegen(state, variableManager, declaration, codeBuilder) - state.classes.put(codegen.structName, codegen) - } - } - - fun addPropertyDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val property = PropertyCodegen(state, variableManager, declaration, codeBuilder) - state.properties.put(declaration.name!!, property) - } - } - - fun addObjectDeclarations(file: KtFile) { - val variableManager = VariableManager(state.globalVariableCollection) - for (declaration in file.declarations.filterIsInstance()) { - val codegen = ObjectCodegen(state, variableManager, declaration, codeBuilder) - state.objects.put(codegen.structName, codegen) - } - } - - private fun generateProjectBody() { - with(state) { - properties.values.map { it.generate() } - objects.values.map { it.prepareForGenerate() } - classes.values.map { it.prepareForGenerate() } - objects.values.map { it.generate() } - classes.values.map { it.generate() } - externalFunctions.values.map { it.generate() } - functions.values.filter { it.isExtensionDeclaration }.map { it.generate() } - functions.values.filter { !it.isExtensionDeclaration }.map { it.generate() } - } - - if (state.mainFunction != "main") { - codeBuilder.declareEntryPoint(state.mainFunction) - } - } - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/TranslationState.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/TranslationState.kt deleted file mode 100644 index 8b929412fdc..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/TranslationState.kt +++ /dev/null @@ -1,116 +0,0 @@ -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.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.jvm.TopDownAnalyzerFacadeForJVM -import org.jetbrains.kotlin.utils.PathUtil -import org.kotlinnative.translator.codegens.ClassCodegen -import org.kotlinnative.translator.codegens.FunctionCodegen -import org.kotlinnative.translator.codegens.ObjectCodegen -import org.kotlinnative.translator.codegens.PropertyCodegen -import org.kotlinnative.translator.exceptions.TranslationException -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.LLVMVariable -import java.util.* - - -class TranslationState -private constructor -( - val environment: KotlinCoreEnvironment, - val bindingContext: BindingContext, - val mainFunction: String, arm: Boolean -) { - var externalFunctions = HashMap() - var functions = HashMap() - var classes = HashMap() - var objects = HashMap() - var properties = HashMap() - val codeBuilder = LLVMBuilder(arm) - val extensionFunctions = HashMap>() - val globalVariableCollection = HashMap() - - init { - POINTER_ALIGN = if (arm) 4 else 8 - POINTER_SIZE = if (arm) 4 else 8 - } - - companion object { - var POINTER_ALIGN = 4 - var POINTER_SIZE = 4 - - fun createTranslationState(sources: List, disposer: Disposable, mainFunction: String, arm: Boolean = false): TranslationState { - - 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(JVMConfigurationKeys.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 - } - - } - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/VariableManager.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/VariableManager.kt deleted file mode 100644 index bb0ff4bb229..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/VariableManager.kt +++ /dev/null @@ -1,48 +0,0 @@ -package org.kotlinnative.translator - -import org.kotlinnative.translator.llvm.LLVMScope -import org.kotlinnative.translator.llvm.LLVMVariable -import org.kotlinnative.translator.llvm.types.LLVMType -import java.util.* - -class VariableManager(val globalVariableCollection: HashMap) { - - private var fileVariableCollectionTree = HashMap>>() - - private companion object UniqueGenerator { - private var unique = 0 - fun generateUniqueString() = - ".unique." + unique++ - } - - operator fun get(variableName: String): LLVMVariable? { - return fileVariableCollectionTree[variableName]?.peek()?.first ?: globalVariableCollection[variableName] - } - - operator fun contains(variableName: String): Boolean { - return (fileVariableCollectionTree.contains(variableName) && !fileVariableCollectionTree[variableName]!!.empty()) || globalVariableCollection.containsKey(variableName) - } - - fun pullOneUpwardLevelVariable(variableName: String) { - fileVariableCollectionTree[variableName]?.pop() - } - - fun pullUpwardsLevel(level: Int) { - fileVariableCollectionTree.forEach { s, stack -> while (!stack.empty() && stack.peek().second >= level) stack.pop() } - } - - fun addVariable(name: String, variable: LLVMVariable, level: Int) { - val stack = fileVariableCollectionTree.getOrDefault(name, Stack>()) - stack.push(Pair(variable, level)) - fileVariableCollectionTree.put(name, stack) - } - - fun addGlobalVariable(name: String, variable: LLVMVariable) { - globalVariableCollection.put(name, variable) - } - - fun receiveVariable(name: String, type: LLVMType, scope: LLVMScope, pointer: Int): LLVMVariable { - return LLVMVariable("managed${generateUniqueString()}.$name", type, name, scope, pointer) - } - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/BlockCodegen.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/BlockCodegen.kt deleted file mode 100644 index be04b431c66..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/BlockCodegen.kt +++ /dev/null @@ -1,1121 +0,0 @@ -package org.kotlinnative.translator.codegens - -import com.intellij.psi.PsiElement -import com.intellij.psi.impl.source.tree.LeafPsiElement -import com.intellij.psi.tree.IElementType -import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl -import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.getNextSiblingIgnoringWhitespaceAndComments -import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForReceiver -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.* -import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument -import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument -import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument -import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCallImpl -import org.jetbrains.kotlin.resolve.constants.TypedCompileTimeConstant -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.* -import java.lang.RuntimeException -import java.lang.UnsupportedOperationException -import java.rmi.UnexpectedException -import kotlin.comparisons.compareBy - - -abstract class BlockCodegen(val state: TranslationState, - val variableManager: VariableManager, - val codeBuilder: LLVMBuilder) { - - val topLevelScopeDepth = 2 - var returnType: LLVMVariable? = null - - fun evaluateCodeBlock(expr: PsiElement?, - startLabel: LLVMLabel? = null, - nextIterationLabel: LLVMLabel? = null, - breakLabel: LLVMLabel? = null, - scopeDepth: Int = 0, - isBlock: Boolean = true) { - codeBuilder.markWithLabel(startLabel) - if (isBlock) { - expressionWalker(expr, breakLabel, scopeDepth) - } else { - var result = evaluateExpression(expr, scopeDepth) - ?: throw UnexpectedException("Can't evaluate expression " + expr!!.text) - when (result) { - is LLVMVariable -> { - if (result.type is LLVMReferenceType) { - generateReferenceReturn(result) - } else { - result = codeBuilder.receivePointedArgument(result, requirePointer = 0) - codeBuilder.addReturnOperator(result) - } - } - else -> codeBuilder.addAnyReturn(result.type, result.toString()) - } - - } - codeBuilder.addUnconditionalJump(nextIterationLabel ?: return) - } - - fun evaluateExpression(expr: PsiElement?, - scopeDepth: Int): LLVMSingleValue? = - when (expr) { - is KtBlockExpression -> { - expressionWalker(expr.lBrace, breakLabel = null, scopeDepth = scopeDepth + 1) - null - } - is KtBinaryExpression -> evaluateBinaryExpression(expr, scopeDepth) - is KtPostfixExpression -> evaluatePostfixExpression(expr, scopeDepth) - is KtPrefixExpression -> evaluatePrefixExpression(expr, scopeDepth) - is KtConstantExpression -> evaluateConstantExpression(expr) - is KtCallExpression -> evaluateCallExpression(expr, scopeDepth) - is KtWhenExpression -> evaluateWhenExpression(expr, scopeDepth) - is KtCallableReferenceExpression -> evaluateCallableReferenceExpression(expr) - is KtDotQualifiedExpression -> evaluateDotExpression(expr, scopeDepth) - is KtReferenceExpression -> evaluateReferenceExpression(expr, scopeDepth) - is KtIfExpression -> evaluateIfOperator(expr, scopeDepth + 1) - is KtStringTemplateExpression -> evaluateStringTemplateExpression(expr) - is KtReturnExpression -> evaluateReturnInstruction(expr.firstChild, scopeDepth) - is KtThisExpression -> evaluateThisExpression() - is KtSafeQualifiedExpression -> evaluateSafeAccessExpression(expr, scopeDepth) - is KtParenthesizedExpression -> evaluateExpression(expr.expression, scopeDepth) - null -> null - is PsiElement -> evaluatePsiElement(expr, scopeDepth) - else -> throw UnsupportedOperationException() - } - - fun evaluateConstructorDelegationReferenceExpression(expr: KtConstructorDelegationReferenceExpression, - structCodegen: StructCodegen, - constructorArguments: List, - scopeDepth: Int): LLVMSingleValue? { - val targetCall = state.bindingContext.get(BindingContext.CALL, expr) - val names = parseValueArguments(targetCall!!.valueArguments, scopeDepth) - val args = codeBuilder.loadArgsIfRequired(names, constructorArguments) - return evaluateConstructorCallExpression( - LLVMVariable(structCodegen.structName + LLVMType.mangleFunctionArguments(names), - structCodegen.type, - scope = LLVMVariableScope()), - args) - } - - fun evaluateMemberMethodOrField(receiver: LLVMVariable, - selectorName: String, - scopeDepth: Int, - call: PsiElement? = null): LLVMSingleValue? { - val type = receiver.type as LLVMReferenceType - val clazz = resolveClassOrObjectLocation(type) - ?: throw UnexpectedException(type.toString() + receiver.toString()) - val field = clazz.fieldsIndex[selectorName] - - if (field != null) { - return evaluateClassField(receiver, field) - } else { - return evaluateMemberMethod(receiver, clazz, scopeDepth, call as? KtCallExpression - ?: throw UnexpectedException("$receiver:$selectorName")) - } - } - - fun addPrimitiveBinaryOperation(operator: IElementType, - firstOp: LLVMSingleValue, - secondOp: LLVMSingleValue, - referenceName: KtSimpleNameExpression? = null): LLVMVariable { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - val secondNativeOp = codeBuilder.receiveNativeValue(secondOp) - - val llvmExpression = when (operator) { - KtTokens.PLUS -> firstOp.type.operatorPlus(firstNativeOp, secondNativeOp) - KtTokens.MINUS -> firstOp.type.operatorMinus(firstNativeOp, secondNativeOp) - KtTokens.MUL -> firstOp.type.operatorTimes(firstNativeOp, secondNativeOp) - KtTokens.DIV -> firstOp.type.operatorDiv(firstNativeOp, secondNativeOp) - KtTokens.LT -> firstOp.type.operatorLt(firstNativeOp, secondNativeOp) - KtTokens.GT -> firstOp.type.operatorGt(firstNativeOp, secondNativeOp) - KtTokens.LTEQ -> firstOp.type.operatorLeq(firstNativeOp, secondNativeOp) - KtTokens.GTEQ -> firstOp.type.operatorGeq(firstNativeOp, secondNativeOp) - KtTokens.EQEQ -> - if (LLVMType.isReferredType(firstOp.type) && LLVMType.isReferredType(secondOp.type)) { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorEq(firstPointedArgument, secondPointedArgument) - } else - firstOp.type.operatorEq(firstNativeOp, secondNativeOp) - KtTokens.EQEQEQ -> { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorEq(firstPointedArgument, secondPointedArgument) - } - KtTokens.EXCLEQ -> { - if (LLVMType.isReferredType(firstOp.type) && LLVMType.isReferredType(secondOp.type)) { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorNeq(firstPointedArgument, secondPointedArgument) - } else - firstOp.type.operatorNeq(firstNativeOp, secondNativeOp) - } - KtTokens.EXCLEQEQEQ -> { - val firstPointedArgument = codeBuilder.receivePointedArgument(firstOp, requirePointer = 1) - val secondPointedArgument = codeBuilder.receivePointedArgument(secondOp, requirePointer = 1) - firstOp.type.operatorNeq(firstPointedArgument, secondPointedArgument) - } - KtTokens.EQ -> { - if (secondOp.type is LLVMNullType) { - codeBuilder.storeNull(firstOp as LLVMVariable) - return firstOp - } - - val result = firstOp as LLVMVariable - val sourceArgument: LLVMSingleValue - if ((firstOp.pointer == 2) && secondOp.type.isPrimitive && (secondOp.pointer == 0)) { - sourceArgument = codeBuilder.getNewVariable(secondOp.type, pointer = 1) - codeBuilder.allocStaticVar(sourceArgument, asValue = true) - codeBuilder.storeVariable(sourceArgument, secondOp) - } else { - sourceArgument = if (result.pointer == secondOp.pointer + 1) secondOp else secondNativeOp - } - - codeBuilder.storeVariable(result, sourceArgument) - return result - } - else -> addPrimitiveReferenceOperationByName(referenceName!!.getReferencedName(), firstOp, secondNativeOp) - } - return codeBuilder.saveExpression(llvmExpression) - } - - private fun expressionWalker(expr: PsiElement?, - breakLabel: LLVMLabel?, - scopeDepth: Int) { - when (expr) { - is KtBlockExpression -> expressionWalker(expr.lBrace, breakLabel, scopeDepth + 1) - is KtProperty -> evaluateValExpression(expr, scopeDepth) - is KtPostfixExpression -> evaluatePostfixExpression(expr, scopeDepth) - is KtBinaryExpression -> evaluateBinaryExpression(expr, scopeDepth) - is KtCallExpression -> evaluateCallExpression(expr, scopeDepth) - is KtDoWhileExpression -> evaluateDoWhileExpression(expr, scopeDepth + 1) - is KtBreakExpression -> evaluateBreakExpression(breakLabel!!) - is KtDotQualifiedExpression -> evaluateDotExpression(expr, scopeDepth) - is KtWhenExpression -> evaluateWhenExpression(expr, scopeDepth) - is PsiElement -> evaluateExpression(expr.firstChild, scopeDepth + 1) - null -> { - variableManager.pullUpwardsLevel(scopeDepth) - return - } - else -> UnsupportedOperationException() - } - - expressionWalker(expr.getNextSiblingIgnoringWhitespaceAndComments(), breakLabel, scopeDepth) - } - - private fun evaluateBreakExpression(breakLabel: LLVMLabel) = - codeBuilder.addUnconditionalJump(breakLabel) - - private fun evaluateDoWhileExpression(expr: KtDoWhileExpression, scopeDepth: Int) = - executeWhileBlock(expr.condition!!, expr.body!!, scopeDepth, checkConditionBeforeExecute = false) - - private fun evaluateThisExpression(): LLVMSingleValue? = - variableManager["this"] - - fun evaluateStringTemplateExpression(expr: KtStringTemplateExpression): LLVMSingleValue? { - val receiveValue = state.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, expr) as TypedCompileTimeConstant - val value = receiveValue.getValue(receiveValue.type) ?: return null - val variable = - variableManager.receiveVariable(".str", - LLVMStringType(value.toString().length, isLoaded = false), - LLVMVariableScope(), - pointer = 0) - - codeBuilder.addStringConstant(variable, value.toString()) - return variable - } - - private fun evaluateCallableReferenceExpression(expr: KtCallableReferenceExpression): LLVMSingleValue? { - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)!!.type!! - val result = LLVMInstanceOfStandardType(expr.callableReference.text, kotlinType, LLVMVariableScope(), state) - return LLVMVariable(result.label + (result.type as LLVMFunctionType).mangleArgs(), - result.type, - result.kotlinName, - result.scope, - result.pointer) - } - - private fun evaluateSafeAccessExpression(expr: KtSafeQualifiedExpression, - scopeDepth: Int): LLVMSingleValue? { - val receiver = expr.receiverExpression - val selector = expr.selectorExpression - - val left = evaluateExpression(receiver, scopeDepth)!! - val loadedLeft = codeBuilder.receiveNativeValue(left) - val expectedType = LLVMMapStandardType(state.bindingContext.get(BindingContext.EXPECTED_EXPRESSION_TYPE, expr)!!, state) as LLVMReferenceType - - val result = codeBuilder.getNewVariable(expectedType, pointer = 2) - codeBuilder.allocStaticVar(result, pointer = true) - - val condition = left.type.operatorEq(loadedLeft, LLVMVariable("", LLVMNullType())) - val nullLabel = codeBuilder.getNewLabel(prefix = "safe.access") - val notNullLabel = codeBuilder.getNewLabel(prefix = "safe.access") - val endLabel = codeBuilder.getNewLabel(prefix = "safe.access") - - val conditionResult = codeBuilder.saveExpression(condition) - codeBuilder.addCondition(conditionResult, nullLabel, notNullLabel) - - codeBuilder.markWithLabel(nullLabel) - codeBuilder.storeNull(result) - codeBuilder.addUnconditionalJump(endLabel) - - codeBuilder.markWithLabel(notNullLabel) - val right = evaluateDotBody(receiver, selector!!, scopeDepth) as LLVMVariable - val rightLoaded = codeBuilder.loadAndGetVariable(right) - codeBuilder.storeVariable(result, rightLoaded) - codeBuilder.addUnconditionalJump(endLabel) - - codeBuilder.markWithLabel(endLabel) - - return result - } - - private fun evaluateDotExpression(expr: KtDotQualifiedExpression, - scopeDepth: Int): LLVMSingleValue? { - val receiverExpr = expr.receiverExpression - val selectorExpr = expr.selectorExpression!! - - return evaluateDotBody(receiverExpr, selectorExpr, scopeDepth) - } - - private fun evaluateDotBody(receiverExpr: KtExpression, - selectorExpr: KtExpression, - scopeDepth: Int): LLVMSingleValue? { - var receiverName = receiverExpr.text - var receiver = when (receiverExpr) { - is KtCallExpression, - is KtPrefixExpression, - is KtPostfixExpression, - is KtBinaryExpression -> evaluateExpression(receiverExpr, scopeDepth) as LLVMVariable - is KtDotQualifiedExpression -> { - val codegen = resolveCodegenByName(receiverName) - if (codegen != null) null else evaluateExpression(receiverExpr, scopeDepth) as LLVMVariable - } - is KtNameReferenceExpression -> { - val referenceContext = state.bindingContext.get(BindingContext.REFERENCE_TARGET, receiverExpr) - receiverName = referenceContext!!.fqNameSafe.asString() - when (referenceContext) { - is PropertyDescriptorImpl -> { - val receiverThis = variableManager["this"]!! - evaluateMemberMethodOrField(receiverThis, receiverName, topLevelScopeDepth, call = null)!! as LLVMVariable - } - else -> variableManager[receiverName] - } - } - else -> variableManager[receiverName] - } - - val isExtension = selectorExpr is KtCallExpression && - selectorExpr.getFunctionResolvedCallWithAssert(state.bindingContext).extensionReceiver != null - - if (isExtension) { - return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as KtCallExpression, scopeDepth) - } - - val selectorName = when (selectorExpr) { - is KtNameReferenceExpression -> state.bindingContext.get(BindingContext.REFERENCE_TARGET, selectorExpr) - ?.fqNameSafe?.asString() ?: selectorExpr.text - else -> selectorExpr.text - } - - if (receiver != null) { - if (receiver.pointer == 2) { - receiver = codeBuilder.loadAndGetVariable(receiver) - } - when (receiver.type) { - is LLVMReferenceType -> return evaluateMemberMethodOrField(receiver, selectorName, scopeDepth, selectorExpr) - else -> return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as KtCallExpression, scopeDepth) - } - } - - val clazz = resolveCodegen(receiverExpr) - ?: return evaluateExtensionExpression(receiverExpr, receiver, selectorExpr as? KtCallExpression - ?: throw UnexpectedException("Failed evaluate dot expression: " + selectorExpr.text), scopeDepth) - return evaluateClassScopedDotExpression(clazz, selectorExpr, scopeDepth, receiver) - } - - private fun evaluateExtensionExpression(receiver: KtExpression, - receiverExpressionArgument: LLVMVariable?, - selector: KtCallExpression, - scopeDepth: Int): LLVMSingleValue? { - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, receiver)!!.type!! - val receiverType = LLVMMapStandardType(kotlinType, state) - - val targetFunction = state.bindingContext.get(BindingContext.CALL, selector.calleeExpression) - val candidateDescriptor = state.bindingContext.get(BindingContext.RESOLVED_CALL, targetFunction)!!.candidateDescriptor - val targetFunctionName = candidateDescriptor.fqNameSafe.convertToNativeName() - val nameWithoutMangling = candidateDescriptor.name.asString().replace(Regex("""(.?)"""), "") - val packageNameFirst = targetFunction?.calleeExpression?.getContainingKtFile()?.packageFqName?.convertToNativeName().orEmpty() - val packageNameSecond = candidateDescriptor.containingDeclaration.fqNameSafe.convertToNativeName() - - val names = parseArgList(selector, scopeDepth) - val type = LLVMType.mangleFunctionArguments(names) - - val constructedFunctionName = receiverType.mangle + nameWithoutMangling.addBeforeIfNotEmpty(".") + type - val targetExtension = state.extensionFunctions[receiverType.toString()] - - val extensionCodegen = targetExtension?.get(packageNameFirst.addAfterIfNotEmpty(".") + constructedFunctionName) ?: - targetExtension?.get(packageNameSecond.addAfterIfNotEmpty(".") + constructedFunctionName) ?: - targetExtension?.get(targetFunctionName) - ?: throw UnexpectedException(constructedFunctionName) - val receiverExpression = receiverExpressionArgument ?: evaluateExpression(receiver, scopeDepth + 1)!! - - val args = mutableListOf(codeBuilder.receivePointedArgument(receiverExpression, requirePointer = if (receiverType is LLVMReferenceType) 1 else 0)) - args.addAll(codeBuilder.loadArgsIfRequired(names, extensionCodegen.args)) - return evaluateFunctionCallExpression(LLVMVariable(extensionCodegen.fullName, extensionCodegen.returnType!!.type, scope = LLVMVariableScope()), args) - } - - private fun evaluateClassScopedDotExpression(clazz: StructCodegen, - selector: KtExpression, - scopeDepth: Int, - receiver: LLVMVariable? = null): LLVMSingleValue? = - when (selector) { - is KtCallExpression -> evaluateCallExpression(selector, scopeDepth, clazz, caller = receiver) - is KtReferenceExpression -> evaluateReferenceExpression(selector, scopeDepth, clazz) - else -> throw UnsupportedOperationException() - } - - private fun evaluateClassField(receiver: LLVMVariable, - field: LLVMClassVariable): LLVMVariable { - val result = codeBuilder.getNewVariable(field.type, pointer = field.pointer + 1) - codeBuilder.loadClassField(result, receiver, field.offset) - return result - } - - private fun evaluateMemberMethod(receiver: LLVMVariable, - clazz: StructCodegen, - scopeDepth: Int, - call: KtCallExpression): LLVMSingleValue? { - val resolvedCall = call.getCall(state.bindingContext)!!.getResolvedCallWithAssert(state.bindingContext) - val functionDescriptor = resolvedCall.candidateDescriptor - val functionArguments = functionDescriptor.valueParameters.map { it -> it.type }.map { LLVMMapStandardType(it, state) } - val methodName = functionDescriptor.fqNameSafe.asString() + LLVMType.mangleFunctionTypes(functionArguments) - - val method = clazz.methods[methodName] ?: throw UnexpectedException(methodName) - val returnType = method.returnType!!.type - - val arguments = resolvedCall.valueArguments.toSortedMap(compareBy { it.index }).values - val substitutionArguments = parseArgumentsWithDefaultValues(arguments, method.defaultValues, scopeDepth) - val loadedArgs = codeBuilder.loadArgsIfRequired(substitutionArguments, method.args) - - val callArgs = mutableListOf(receiver) - callArgs.addAll(loadedArgs) - - return evaluateFunctionCallExpression(LLVMVariable(methodName, returnType, scope = LLVMVariableScope()), callArgs) - } - - private fun resolveClassOrObjectLocation(type: LLVMReferenceType): StructCodegen? { - val typeLocations = type.type.split('.') - val currentLocation = StringBuilder() - var codegen: ClassCodegen? = null - var currentIndex = 0 - - do { - currentLocation.append((if (currentIndex > 0) "." else "") + typeLocations[currentIndex]) - if (state.classes.containsKey(currentLocation.toString())) { - codegen = state.classes[currentLocation.toString()] - } else if (state.objects.containsKey(currentLocation.toString())) { - return state.objects[currentLocation.toString()] - } - currentIndex++ - } while ((currentIndex < typeLocations.size) && (codegen == null)) - - while (currentIndex < typeLocations.size - 1) { - currentLocation.append('.' + typeLocations[currentIndex]) - currentIndex++ - codegen = codegen?.nestedClasses?.get(currentLocation.toString()) - } - - if (codegen?.companionObjectCodegen != null && type.type == codegen?.companionObjectCodegen?.structName) { - return codegen?.companionObjectCodegen!! - } - - return if (codegen?.structName == type.type) codegen else codegen?.nestedClasses?.get(type.type) - } - - private fun evaluateArrayAccessExpression(expr: KtArrayAccessExpression, - scope: Int): LLVMSingleValue? { - val arrayNameVariable = evaluateExpression(expr.arrayExpression, scope) as LLVMVariable - return when (arrayNameVariable.type) { - is LLVMReferenceType -> { - val callMaker = state.bindingContext.get(BindingContext.CALL, expr) - when (callMaker!!.callType) { - Call.CallType.ARRAY_SET_METHOD, - Call.CallType.ARRAY_GET_METHOD -> { - val arrayActionType = if (callMaker.callType == Call.CallType.ARRAY_SET_METHOD) "set" else "get" - val explicitReceiver = callMaker.explicitReceiver as ExpressionReceiver - val receiver = evaluateExpression(explicitReceiver.expression, scope)!! as LLVMVariable - val pureReceiver = codeBuilder.receivePointedArgument(receiver, requirePointer = 1) - - val targetClassName = (receiver.type as LLVMReferenceType).type - - val names = parseValueArguments(callMaker.valueArguments, scope) - val methodName = "$targetClassName.$arrayActionType${LLVMType.mangleFunctionArguments(names)}" - val clazz = resolveClassOrObjectLocation(receiver.type) - ?: throw UnexpectedException(receiver.type.toString()) - - val method = clazz.methods[methodName] ?: throw UnexpectedException(expr.text) - val returnType = method.returnType!!.type - - val loadedArgs = codeBuilder.loadArgsIfRequired(names, method.args) - val callArgs = mutableListOf(pureReceiver) - callArgs.addAll(loadedArgs) - - return evaluateFunctionCallExpression(LLVMVariable(methodName, returnType, scope = LLVMVariableScope()), callArgs) - } - else -> throw UnexpectedException("Unknown array access method") - } - } - else -> { - val arrayIndex = evaluateConstantExpression(expr.indexExpressions.first() as KtConstantExpression) - val arrayReceivedVariable = codeBuilder.loadAndGetVariable(arrayNameVariable) - val arrayElementType = (arrayNameVariable.type as LLVMArray).arrayElementType - val arrayElement = codeBuilder.getNewVariable(arrayElementType, pointer = 1) - codeBuilder.loadVariableOffset(arrayElement, arrayReceivedVariable, arrayIndex) - arrayElement - } - } - } - - private fun evaluateReferenceExpression(expr: KtReferenceExpression, - scopeDepth: Int, - classScope: StructCodegen? = null): LLVMSingleValue? { - val targetName = state.bindingContext.get(BindingContext.REFERENCE_TARGET, expr)?.fqNameSafe?.convertToNativeName() - return when { - expr is KtArrayAccessExpression -> evaluateArrayAccessExpression(expr, scopeDepth + 1) - isEnumClassField(expr, classScope) -> resolveEnumClassField(expr, classScope) - (targetName != null) && variableManager.contains(targetName) -> variableManager[targetName] - ((expr is KtNameReferenceExpression) && (classScope != null)) -> - evaluateNameReferenceExpression(targetName!!, classScope.parentCodegen!! as ClassCodegen) - else -> { - val clazz = classScope ?: resolveCodegen(expr) - val receiver = if (clazz != null) variableManager[clazz.structName] ?: variableManager["this"] else variableManager["this"] - targetName ?: throw UnexpectedException("Can't find target in reference expression " + expr.firstChild.text) - evaluateMemberMethodOrField(receiver ?: throw UnexpectedException(targetName), targetName, topLevelScopeDepth) - } - } - } - - private fun evaluateNameReferenceExpression(fieldName: String, - classScope: ClassCodegen): LLVMSingleValue? { - val companionObject = classScope.companionObjectCodegen!! - val field = companionObject.fieldsIndex[fieldName] ?: return null - val receiver = variableManager[companionObject.structName]!! - val result = codeBuilder.getNewVariable(field.type, pointer = 1) - - codeBuilder.loadClassField(result, receiver, field.offset) - return result - } - - private fun resolveEnumClassField(expr: KtReferenceExpression, - classScope: StructCodegen?): LLVMSingleValue = - (classScope ?: resolveCodegen(expr))!!.enumFields[expr.text]!! - - private fun isEnumClassField(expr: KtReferenceExpression, - classScope: StructCodegen?): Boolean = - (classScope ?: resolveCodegen(expr))?.enumFields?.containsKey(expr.text) ?: false - - private fun resolveCodegen(expr: KtExpression): StructCodegen? { - val type = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)?.type - ?: expr.getQualifiedExpressionForReceiver()?.getType(state.bindingContext) - - val name = type?.constructor?.declarationDescriptor?.fqNameSafe?.asString() ?: throw UnexpectedException(expr.text) - - return resolveCodegenByName(name) - } - - private fun resolveCodegenByName(name: String): StructCodegen? = - resolveClassOrObjectLocation(LLVMReferenceType(name, prefix = "class")) - - private fun evaluateCallExpression(expr: KtCallExpression, - scopeDepth: Int, - classScope: StructCodegen? = null, - caller: LLVMVariable? = null): LLVMSingleValue? { - var names = parseArgList(expr, scopeDepth) - val targetFunction = state.bindingContext.get(BindingContext.CALL, expr.calleeExpression) - var resolvedCall = state.bindingContext.get(BindingContext.RESOLVED_CALL, targetFunction) - if (resolvedCall is VariableAsFunctionResolvedCallImpl) { - resolvedCall = resolvedCall.variableCall - } - - val functionDescriptor = resolvedCall!!.candidateDescriptor - val targetFunctionName = functionDescriptor.fqNameSafe.convertToNativeName() - val externalFunctionName = functionDescriptor.name.asString() - val arguments = resolvedCall.valueArguments.toSortedMap(compareBy { it.index }).values - - val external = state.externalFunctions.containsKey(externalFunctionName) - val functionArguments = functionDescriptor.valueParameters.map { it -> it.type }.map { LLVMMapStandardType(it, state) } - val function = "$targetFunctionName${if (!external) LLVMType.mangleFunctionTypes(functionArguments) else ""}" - - if (function in state.functions || externalFunctionName in state.externalFunctions) { - val descriptor = state.functions[function] ?: state.externalFunctions[externalFunctionName]!! - names = parseArgumentsWithDefaultValues(arguments, descriptor.defaultValues, scopeDepth) - val args = codeBuilder.loadArgsIfRequired(names, descriptor.args) - return evaluateFunctionCallExpression(LLVMVariable(descriptor.name, descriptor.returnType!!.type, scope = LLVMVariableScope()), args) - } - - if (targetFunctionName in state.classes || classScope?.structName == targetFunctionName) { - val descriptor = state.classes[targetFunctionName] ?: classScope ?: return null - val detectedConstructor = LLVMType.mangleFunctionTypes(functionArguments) - val args = codeBuilder.loadArgsIfRequired(names, descriptor.constructorFields[detectedConstructor]!!) - return evaluateConstructorCallExpression(LLVMVariable(descriptor.structName + detectedConstructor, descriptor.type, scope = LLVMVariableScope()), args) - } - - if (targetFunctionName in variableManager) { - val type = variableManager[targetFunctionName]!!.type as LLVMFunctionType - val args = codeBuilder.loadArgsIfRequired(names, type.arguments) - return evaluateFunctionCallExpression(LLVMVariable(targetFunctionName, type.returnType.type, scope = LLVMRegisterScope()), args) - } - - val nestedConstructor = classScope?.nestedClasses?.get(expr.calleeExpression!!.text) - if (nestedConstructor != null) { - val args = codeBuilder.loadArgsIfRequired(names, nestedConstructor.constructorFields[nestedConstructor.primaryConstructorIndex]!!) - return evaluateConstructorCallExpression(LLVMVariable(nestedConstructor.structName, nestedConstructor.type, scope = LLVMVariableScope()), args) - } - - val containingClass = resolveContainingClass(expr) ?: return null - val method = containingClass.methods[function] ?: throw RuntimeException("Cannot find function $targetFunctionName") - val args = mutableListOf() - - if (caller != null) { - args.add(caller) - } else if (containingClass.structName in variableManager) { - args.add(variableManager[containingClass.structName]!!) - } else { - args.add(variableManager["this"]!!) - } - - args.addAll(codeBuilder.loadArgsIfRequired(names, method.args)) - - return evaluateFunctionCallExpression(LLVMVariable(method.fullName, method.returnType?.type ?: LLVMVoidType(), scope = LLVMVariableScope()), args) - } - - private fun resolveContainingClass(expr: KtElement): StructCodegen? { - val name = expr.getResolvedCallWithAssert(state.bindingContext).dispatchReceiver?.type?.constructor?.declarationDescriptor?.fqNameSafe?.asString() ?: return null - return resolveCodegenByName(name) - } - - private fun evaluateFunctionCallExpression(function: LLVMVariable, - names: List): LLVMSingleValue? { - val returnType = function.type - when (returnType) { - is LLVMVoidType -> { - codeBuilder.addLLVMCodeToLocalPlace(LLVMCall(LLVMVoidType(), function.toString(), names).toString()) - return null - } - is LLVMReferenceType -> { - val returnVar = codeBuilder.getNewVariable(returnType, pointer = 2) - codeBuilder.allocStaticVar(returnVar, pointer = true) - - val args = mutableListOf(returnVar) - args.addAll(names) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMCall(LLVMVoidType(), function.toString(), args).toString()) - if (returnVar.pointer == 2) { - return returnVar - } else { - return codeBuilder.loadAndGetVariable(returnVar) - } - } - else -> { - val result = codeBuilder.saveExpression(LLVMCall(returnType, function.toString(), names)) - - val resultPtr = codeBuilder.getNewVariable(returnType, pointer = 1) - codeBuilder.allocStackVar(resultPtr, pointer = true) - codeBuilder.storeVariable(resultPtr, result) - return resultPtr - } - } - } - - private fun evaluateConstructorCallExpression(function: LLVMVariable, - names: List): LLVMSingleValue? { - val store = codeBuilder.getNewVariable(function.type, pointer = 1) - codeBuilder.allocStaticVar(store, pointer = true) - - val result = codeBuilder.getNewVariable(function.type, pointer = 2) - codeBuilder.allocStackVar(result, pointer = true) - codeBuilder.storeVariable(result, store) - - val args = mutableListOf(store) - args.addAll(names) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMCall( - LLVMVoidType(), - function.toString(), - args - ).toString()) - - return result - } - - private fun parseArgList(expr: KtCallExpression, - scopeDepth: Int): List = - parseValueArguments(expr.getValueArgumentsInParentheses(), scopeDepth) - - private fun parseValueArguments(args: List, scopeDepth: Int): List = - args.map { evaluateExpression(it.getArgumentExpression(), scopeDepth) as LLVMSingleValue } - - private fun parseArgumentsWithDefaultValues(args: MutableCollection, defaultValues: List, scopeDepth: Int): List = - args.mapIndexed(fun(i: Int, value: ResolvedValueArgument): LLVMSingleValue { - return when (value) { - is DefaultValueArgument -> evaluateExpression(defaultValues[i], scopeDepth)!! - is ExpressionValueArgument -> evaluateExpression((value.valueArgument as KtValueArgument).getArgumentExpression()!!, scopeDepth)!! - else -> throw UnexpectedException("Wrong parser argument") - } - }).toList() - - private fun evaluateBinaryExpression(expr: KtBinaryExpression, - scopeDepth: Int): LLVMVariable? { - val operator = expr.operationToken - - if (operator == KtTokens.ELVIS) { - return evaluateElvisOperator(expr, scopeDepth) - } - - val left = evaluateExpression(expr.left, scopeDepth) - if (expr.left is KtArrayAccessExpression) { - val callMaker = state.bindingContext.get(BindingContext.CALL, expr.left) - if (callMaker!!.callType == Call.CallType.ARRAY_SET_METHOD) { - return left as LLVMVariable? - } - } - - left ?: throw UnsupportedOperationException("Wrong binary expression: ${expr.text}") - val right = evaluateExpression(expr.right, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression: ${expr.text}") - - return addPrimitiveBinaryOperation(operator, left, right, expr.operationReference) - } - - private fun evaluatePostfixExpression(expr: KtPostfixExpression, - scopeDepth: Int): LLVMSingleValue? { - val operator = expr.operationToken - val left = evaluateExpression(expr.baseExpression, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression: ${expr.text}") - return addPrimitivePostfixOperation(operator, left as LLVMVariable) - } - - private fun evaluatePrefixExpression(expr: KtPrefixExpression, - scopeDepth: Int): LLVMSingleValue? { - val operator = expr.operationToken - val left = evaluateExpression(expr.baseExpression, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression") - return addPrimitivePrefixOperation(operator, left) - } - - private fun addPrimitivePostfixOperation(operator: IElementType?, - firstOp: LLVMVariable): LLVMSingleValue? = - when (operator) { - KtTokens.PLUSPLUS, KtTokens.MINUSMINUS -> { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - val oldValue = codeBuilder.getNewVariable(firstOp.type, firstOp.pointer) - codeBuilder.allocStackVar(oldValue, asValue = true) - codeBuilder.copyVariable(firstOp, oldValue) - - val llvmExpression = when (operator) { - KtTokens.PLUSPLUS -> firstOp.type.operatorInc(firstNativeOp) - KtTokens.MINUSMINUS -> firstOp.type.operatorDec(firstNativeOp) - else -> throw IllegalAccessError() - } - - val resultOp = codeBuilder.saveExpression(llvmExpression) - codeBuilder.storeVariable(firstOp, resultOp) - oldValue - } - KtTokens.EXCLEXCL -> { - var result = firstOp - val nullLabel = codeBuilder.getNewLabel(prefix = "nullCheck") - val notNullLabel = codeBuilder.getNewLabel(prefix = "nullCheck") - val nullCheck = codeBuilder.nullCheck(firstOp) - codeBuilder.addCondition(nullCheck, nullLabel, notNullLabel) - codeBuilder.markWithLabel(nullLabel) - codeBuilder.addExceptionCall("KotlinNullPointerException") - codeBuilder.addUnconditionalJump(notNullLabel) - codeBuilder.markWithLabel(notNullLabel) - if (firstOp.type.isPrimitive) { - result = codeBuilder.receivePointedArgument(firstOp, requirePointer = 0) as LLVMVariable - } - result - } - else -> throw UnsupportedOperationException() - } - - - private fun addPrimitivePrefixOperation(operator: IElementType?, - firstOp: LLVMSingleValue): LLVMSingleValue? = - when (operator) { - KtTokens.MINUS, - KtTokens.PLUS -> addPrimitiveBinaryOperation(operator!!, LLVMConstant("0", firstOp.type), firstOp) - KtTokens.EXCL -> { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - val llvmExpression = addPrimitiveReferenceOperationByName("xor", LLVMConstant("true", LLVMBooleanType()), firstNativeOp) - codeBuilder.saveExpression(llvmExpression) - } - else -> throw UnsupportedOperationException() - } - - - private fun evaluateElvisOperator(expr: KtBinaryExpression, - scopeDepth: Int): LLVMVariable { - val left = evaluateExpression(expr.left, scopeDepth) - ?: throw UnsupportedOperationException("Wrong binary expression") - val lptr = codeBuilder.loadAndGetVariable(left as LLVMVariable) - - val condition = lptr.type.operatorEq(lptr, LLVMVariable("", LLVMNullType())) - - val conditionResult = codeBuilder.saveExpression(condition) - - val notNull = codeBuilder.getNewLabel(prefix = "elvis") - val endLabel = codeBuilder.getNewLabel(prefix = "elvis") - - codeBuilder.addCondition(conditionResult, notNull, endLabel) - - codeBuilder.markWithLabel(notNull) - var right = evaluateExpression(expr.right, scopeDepth + 1) - if (right != null) { - right = codeBuilder.loadAndGetVariable(right as LLVMVariable) - codeBuilder.storeVariable(left, right) - } - - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(endLabel) - - return left - } - - private fun addPrimitiveReferenceOperationByName(operator: String, - firstOp: LLVMSingleValue, - secondNativeOp: LLVMSingleValue): LLVMExpression { - val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) - - return when (operator) { - "||", - "or" -> firstNativeOp.type.operatorOr(firstNativeOp, secondNativeOp) - "xor" -> firstNativeOp.type.operatorXor(firstNativeOp, secondNativeOp) - "&&", - "and" -> firstNativeOp.type.operatorAnd(firstNativeOp, secondNativeOp) - "%" -> firstNativeOp.type.operatorMod(firstNativeOp, secondNativeOp) - "shl" -> firstNativeOp.type.operatorShl(firstNativeOp, codeBuilder.convertVariableToType(secondNativeOp, firstNativeOp.type)) - "shr" -> firstNativeOp.type.operatorShr(firstNativeOp, codeBuilder.convertVariableToType(secondNativeOp, firstNativeOp.type)) - "ushr" -> firstNativeOp.type.operatorUshr(firstNativeOp, codeBuilder.convertVariableToType(secondNativeOp, firstNativeOp.type)) - "+=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorPlus(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - "-=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorMinus(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - "*=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorTimes(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - "%=" -> { - val resultOp = codeBuilder.saveExpression(firstNativeOp.type.operatorMod(firstNativeOp, secondNativeOp)) - codeBuilder.storeVariable(firstOp, resultOp) - return LLVMExpression(resultOp.type, "load ${firstOp.pointedType} $firstOp, align ${firstOp.type.align}") - } - ".." -> { - val descriptor = state.classes["kotlin.ranges.${firstOp.type.mangle}Range"] - val arguments = listOf(firstOp, secondNativeOp) - val detectedConstructor = LLVMType.mangleFunctionTypes(arguments.map { it.type }) - val result = evaluateConstructorCallExpression(LLVMVariable(descriptor!!.structName + detectedConstructor, descriptor.type, scope = LLVMVariableScope()), arguments) - return LLVMExpression(result!!.type, "load ${descriptor.type}** $result, align ${descriptor.type.align}", pointer = 1) - } - else -> throw UnsupportedOperationException("Unknown binary operator: $operator(${firstNativeOp.type}, ${secondNativeOp.type})") - } - } - - private fun evaluateConstantExpression(expr: KtConstantExpression): LLVMConstant { - val expressionKotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)!!.type!! - val expressionValue = state.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, expr)?.getValue(expressionKotlinType) - val type = LLVMMapStandardType(expressionKotlinType, state) - return LLVMConstant(expressionValue?.toString().orEmpty(), type, pointer = 0) - } - - private fun evaluatePsiElement(element: PsiElement, - scopeDepth: Int): LLVMSingleValue? = - when (element) { - is LeafPsiElement -> evaluateLeafPsiElement(element, scopeDepth) - is KtConstantExpression -> evaluateConstantExpression(element) - else -> null - } - - - private fun evaluateLeafPsiElement(element: LeafPsiElement, - scopeDepth: Int): LLVMVariable? { - return when (element.elementType) { - KtTokens.RETURN_KEYWORD -> evaluateReturnInstruction(element, scopeDepth) - KtTokens.IF_KEYWORD -> evaluateIfOperator(element.context as KtIfExpression, scopeDepth, isExpression = false) - KtTokens.WHILE_KEYWORD -> evaluateWhileOperator(element.context as KtWhileExpression, scopeDepth) - KtTokens.FOR_KEYWORD -> evaluateForOperator(element.context as KtForExpression, scopeDepth) - else -> null - } - } - - private fun evaluateForOperator(expr: KtForExpression, - scopeDepth: Int): LLVMVariable? { - val range = evaluateExpression(expr.loopRange, scopeDepth + 1)!! - val conditionLabel = codeBuilder.getNewLabel(prefix = "for_condition") - val bodyLabel = codeBuilder.getNewLabel(prefix = "for_body") - val exitLabel = codeBuilder.getNewLabel(prefix = "for_exit") - val rangeTypeName = (range.type as LLVMReferenceType).type - - val descriptor = state.classes[rangeTypeName] ?: throw UnexpectedException("Error occurred in evaluating range expression") - val method = descriptor.methods["$rangeTypeName.iterator"] ?: throw UnexpectedException("Cant receive iterator $rangeTypeName.iterator") - val returnType = method.returnType!!.type - val returnTypeName = (returnType as LLVMReferenceType).type - val iteratorDescriptor = state.classes[returnTypeName] - val nextDescriptor = iteratorDescriptor!!.methods["$returnTypeName.next"] ?: throw UnexpectedException("$returnTypeName.nextInt") - - val conditionIterator = evaluateFunctionCallExpression(LLVMVariable("$rangeTypeName.iterator", returnType, scope = LLVMVariableScope()), listOf(range))!! - val iteratorThisArgument = codeBuilder.receivePointedArgument(conditionIterator, requirePointer = 1) - codeBuilder.addUnconditionalJump(conditionLabel) - codeBuilder.markWithLabel(conditionLabel) - var conditionResult = evaluateFunctionCallExpression(LLVMVariable("$returnTypeName.hasNext", LLVMBooleanType(), scope = LLVMVariableScope()), listOf(iteratorThisArgument))!! - conditionResult = codeBuilder.receivePointedArgument(conditionResult, requirePointer = 0) - codeBuilder.addCondition(conditionResult, bodyLabel, exitLabel) - - codeBuilder.addUnconditionalJump(bodyLabel) - codeBuilder.markWithLabel(bodyLabel) - val loopParameter = evaluateFunctionCallExpression(LLVMVariable("$returnTypeName.next", LLVMIntType(), scope = LLVMVariableScope()), listOf(iteratorThisArgument))!! - val loopParameterDescriptor = state.bindingContext.get(BindingContext.VALUE_PARAMETER, expr.loopParameter!!)?.fqNameSafe?.asString() ?: expr.loopParameter!!.name!! - - val allocVar = variableManager.receiveVariable(loopParameterDescriptor, nextDescriptor.returnType!!.type, LLVMRegisterScope(), pointer = - nextDescriptor.returnType!!.pointer + 1) - variableManager.addVariable(loopParameterDescriptor, allocVar, scopeDepth + 1) - codeBuilder.allocStackVar(allocVar, pointer = true) - - addPrimitiveBinaryOperation(KtTokens.EQ, allocVar, loopParameter, null) - - evaluateCodeBlock(expr.body, startLabel = null, nextIterationLabel = conditionLabel, breakLabel = exitLabel, scopeDepth = scopeDepth + 1) - codeBuilder.markWithLabel(exitLabel) - - return null - } - - private fun evaluateWhenItem(item: KtWhenEntry, - target: LLVMSingleValue, - resultVariable: LLVMVariable, - elseLabel: LLVMLabel, - endLabel: LLVMLabel, - isElse: Boolean, - scopeDepth: Int) { - val successConditionsLabel = codeBuilder.getNewLabel(prefix = "when_condition_success") - var nextLabel = codeBuilder.getNewLabel(prefix = "when_condition_condition") - - codeBuilder.addUnconditionalJump(nextLabel) - - for (condition in item.conditions) { - codeBuilder.markWithLabel(nextLabel) - nextLabel = codeBuilder.getNewLabel(prefix = "when_condition_condition") - - val currentConditionExpression = - evaluateExpression((condition as KtWhenConditionWithExpression).expression, scopeDepth + 1)!! - val conditionResult = addPrimitiveBinaryOperation(KtTokens.EQEQ, target, currentConditionExpression) - - codeBuilder.addCondition(conditionResult, successConditionsLabel, nextLabel) - } - - codeBuilder.markWithLabel(nextLabel) - codeBuilder.addUnconditionalJump(if (isElse) successConditionsLabel else elseLabel) - codeBuilder.markWithLabel(successConditionsLabel) - - var successExpression = evaluateExpression(item.expression, scopeDepth + 1) - - if (successExpression != null && !LLVMType.nullOrVoidType(resultVariable.type)) { - successExpression = codeBuilder.receivePointedArgument(successExpression, requirePointer = 0) - codeBuilder.storeVariable(resultVariable, successExpression) - } - - codeBuilder.addUnconditionalJump(endLabel) - } - - private fun evaluateWhenExpression(expr: KtWhenExpression, - scopeDepth: Int): LLVMVariable? { - codeBuilder.addComment("start when expression") - val whenExpression = expr.subjectExpression - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)!!.type!! - val expressionType = LLVMMapStandardType(kotlinType, state) - - val targetExpression = evaluateExpression(whenExpression, scopeDepth + 1) ?: LLVMConstant("true", LLVMBooleanType()) - val resultVariable = codeBuilder.getNewVariable(expressionType, pointer = 1) - - when (expressionType) { - is LLVMVoidType, - is LLVMNullType -> { - } - is LLVMReferenceType -> codeBuilder.allocStaticVar(resultVariable, asValue = true) - else -> codeBuilder.allocStackVar(resultVariable, asValue = true) - } - - var nextLabel = codeBuilder.getNewLabel(prefix = "when_start") - val endLabel = codeBuilder.getNewLabel(prefix = "when_end") - codeBuilder.addUnconditionalJump(nextLabel) - for (item in expr.entries) { - codeBuilder.markWithLabel(nextLabel) - nextLabel = codeBuilder.getNewLabel(prefix = "when_item") - evaluateWhenItem(item, targetExpression, resultVariable, nextLabel, endLabel, item.isElse, scopeDepth + 1) - } - - codeBuilder.markWithLabel(nextLabel) - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(endLabel) - return resultVariable - } - - private fun evaluateWhileOperator(expr: KtWhileExpression, - scopeDepth: Int): LLVMVariable? = - executeWhileBlock(expr.condition!!, expr.body!!, scopeDepth, checkConditionBeforeExecute = true) - - private fun executeWhileBlock(condition: KtExpression, bodyExpression: PsiElement, scopeDepth: Int, checkConditionBeforeExecute: Boolean): LLVMVariable? { - val conditionLabel = codeBuilder.getNewLabel(prefix = "while") - val bodyLabel = codeBuilder.getNewLabel(prefix = "while") - val exitLabel = codeBuilder.getNewLabel(prefix = "while") - - codeBuilder.addUnconditionalJump(if (checkConditionBeforeExecute) conditionLabel else bodyLabel) - codeBuilder.markWithLabel(conditionLabel) - var conditionResult = evaluateExpression(condition, scopeDepth + 1)!! - conditionResult = codeBuilder.receivePointedArgument(conditionResult, requirePointer = 0) - - codeBuilder.addCondition(conditionResult, bodyLabel, exitLabel) - evaluateCodeBlock(bodyExpression, startLabel = bodyLabel, nextIterationLabel = conditionLabel, breakLabel = exitLabel, scopeDepth = scopeDepth + 1) - codeBuilder.markWithLabel(exitLabel) - - return null - } - - private fun evaluateIfOperator(element: KtIfExpression, - scopeDepth: Int, - isExpression: Boolean = true): LLVMVariable? { - val conditionResult = evaluateExpression(element.condition, scopeDepth)!! - val conditionNativeResult = codeBuilder.receivePointedArgument(conditionResult, requirePointer = 0) - - return if (isExpression) - executeIfExpression(conditionNativeResult, element.then!!, element.`else`, element, scopeDepth + 1) - else - executeIfBlock(conditionNativeResult, element.then!!, element.`else`, scopeDepth + 1) - } - - private fun executeIfExpression(conditionResult: LLVMSingleValue, - thenExpression: KtExpression, - elseExpression: PsiElement?, - ifExpression: KtIfExpression, - scopeDepth: Int): LLVMVariable? { - val kotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, ifExpression)!!.type!! - val expressionType = LLVMInstanceOfStandardType("type", kotlinType, LLVMVariableScope(), state).type - val resultVariable = codeBuilder.getNewVariable(expressionType, pointer = 1) - - when (resultVariable.type) { - is LLVMReferenceType -> codeBuilder.allocStaticVar(resultVariable, asValue = true) - else -> codeBuilder.allocStackVar(resultVariable, asValue = true) - } - val thenLabel = codeBuilder.getNewLabel(prefix = "if_then") - val elseLabel = codeBuilder.getNewLabel(prefix = "if_else") - val endLabel = codeBuilder.getNewLabel(prefix = "if_end") - - codeBuilder.addCondition(conditionResult, thenLabel, elseLabel) - codeBuilder.markWithLabel(thenLabel) - val thenResultExpression = evaluateExpression(thenExpression, scopeDepth + 1) ?: throw UnexpectedException("Can't evaluate then in if expression") - val thenResultNativeExpression = codeBuilder.receiveNativeValue(thenResultExpression) - codeBuilder.storeVariable(resultVariable, thenResultNativeExpression) - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(elseLabel) - - val elseResultExpression = evaluateExpression(elseExpression, scopeDepth + 1) ?: throw UnexpectedException("Can't evaluate else in if expression") - val elseResultNativeExpression = codeBuilder.receiveNativeValue(elseResultExpression) - codeBuilder.storeVariable(resultVariable, elseResultNativeExpression) - codeBuilder.addUnconditionalJump(endLabel) - codeBuilder.markWithLabel(endLabel) - return resultVariable - } - - private fun executeIfBlock(conditionResult: LLVMSingleValue, - thenExpression: PsiElement, - elseExpression: PsiElement?, - scopeDepth: Int): LLVMVariable? { - val thenLabel = codeBuilder.getNewLabel(prefix = "if") - val elseLabel = codeBuilder.getNewLabel(prefix = "if") - val endLabel = codeBuilder.getNewLabel(prefix = "if") - - codeBuilder.addCondition(conditionResult, thenLabel, if (elseExpression != null) elseLabel else endLabel) - - evaluateCodeBlock(thenExpression, startLabel = thenLabel, nextIterationLabel = endLabel, breakLabel = endLabel, scopeDepth = scopeDepth + 1) - if (elseExpression != null) { - evaluateCodeBlock(elseExpression, startLabel = elseLabel, nextIterationLabel = endLabel, breakLabel = endLabel, scopeDepth = scopeDepth + 1) - } - - codeBuilder.markWithLabel(endLabel) - return null - } - - private fun evaluateValExpression(element: KtProperty, - scopeDepth: Int): LLVMVariable? { - val variable = state.bindingContext.get(BindingContext.VARIABLE, element)!! - val identifier = variable.fqNameSafe.convertToNativeName() - - val assignExpression = evaluateExpression(element.delegateExpressionOrInitializer, scopeDepth) - val expectedExpressionType = LLVMInstanceOfStandardType("", variable.type, state = state) - - val primitivePointer = LLVMMapStandardType(variable.type, state).isPrimitive - - val allocVar = variableManager.receiveVariable(identifier, expectedExpressionType.type, LLVMRegisterScope(), pointer = expectedExpressionType.pointer + 1) - codeBuilder.allocStackVar(allocVar, pointer = true) - - variableManager.addVariable(identifier, allocVar, scopeDepth) - if (assignExpression != null) { - if ((primitivePointer) && (assignExpression.type is LLVMReferenceType)) { - throw UnexpectedException(element.text) - } - addPrimitiveBinaryOperation(KtTokens.EQ, allocVar, assignExpression, null) - } - - return null - } - - private fun evaluateReturnInstruction(element: PsiElement, - scopeDepth: Int): LLVMVariable? { - val next = element.getNextSiblingIgnoringWhitespaceAndComments() - var retVar = evaluateExpression(next, scopeDepth) - val type = retVar?.type ?: LLVMVoidType() - - when (type) { - is LLVMReferenceType -> generateReferenceReturn(retVar!!) - is LLVMNullType -> { - retVar = when (retVar) { - is LLVMConstant -> LLVMConstant(retVar.value, LLVMNullType(returnType!!.type), returnType!!.pointer - 1) - is LLVMVariable -> LLVMVariable(retVar.label, LLVMNullType(returnType!!.type), retVar.kotlinName, retVar.scope, returnType!!.pointer - 1) - else -> throw UnexpectedException("Unknown inheritor of LLVMSingleValue") - } - generateReferenceReturn(retVar!!) - } - is LLVMVoidType -> codeBuilder.addAnyReturn(LLVMVoidType()) - else -> { - val retNativeValue = codeBuilder.receiveNativeValue(retVar!!) - codeBuilder.addReturnOperator(retNativeValue) - } - } - - return null - } - - private fun generateReferenceReturn(retVar: LLVMSingleValue) { - var result = retVar - if (result.pointer == 2) { - result = codeBuilder.loadAndGetVariable(retVar as LLVMVariable) - } - - codeBuilder.storeVariable(returnType!!, result) - codeBuilder.addAnyReturn(LLVMVoidType()) - } -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/ClassCodegen.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/ClassCodegen.kt deleted file mode 100644 index b9f3619474a..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/ClassCodegen.kt +++ /dev/null @@ -1,84 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.psi.KtClass -import org.jetbrains.kotlin.psi.KtParameter -import org.jetbrains.kotlin.resolve.BindingContext -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.exceptions.TranslationException -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType - -class ClassCodegen(state: TranslationState, - variableManager: VariableManager, - val clazz: KtClass, - codeBuilder: LLVMBuilder, - parentCodegen: StructCodegen? = null) : - StructCodegen(state, variableManager, clazz, codeBuilder, parentCodegen) { - - val annotation: Boolean - val enum: Boolean - var companionObjectCodegen: ObjectCodegen? = null - val descriptor: ClassDescriptor - - override var size: Int = 0 - override val structName: String = clazz.fqName?.asString()!! - override val type: LLVMReferenceType - - init { - type = LLVMReferenceType(structName, "class", align = TranslationState.POINTER_ALIGN, size = TranslationState.POINTER_SIZE, byRef = true) - descriptor = state.bindingContext.get(BindingContext.CLASS, clazz) ?: throw TranslationException("Can't receive descriptor of class " + clazz.name) - - annotation = descriptor.kind == ClassKind.ANNOTATION_CLASS - enum = descriptor.kind == ClassKind.ENUM_CLASS - - type.align = TranslationState.POINTER_ALIGN - } - - override fun prepareForGenerate() { - val parameterList = clazz.getPrimaryConstructorParameterList()?.parameters ?: listOf() - indexFields(parameterList) - generateInnerFields(clazz.declarations) - - type.size = calculateTypeSize() - - if (annotation) { - return - } - - super.prepareForGenerate() - nestedClasses.forEach { x, classCodegen -> classCodegen.prepareForGenerate() } - - if (descriptor.companionObjectDescriptor != null) { - val companionObject = clazz.getCompanionObjects().first() - companionObjectCodegen = ObjectCodegen(state, variableManager, companionObject, codeBuilder, this) - companionObjectCodegen!!.prepareForGenerate() - } - } - - override fun generate() { - if (annotation) { - return - } - - super.generate() - nestedClasses.forEach { x, classCodegen -> classCodegen.generate() } - companionObjectCodegen?.generate() - } - - private fun indexFields(parameters: MutableList) { - if (annotation) { - return - } - - val currentConstructorFields = parameters.mapIndexed { i, it -> resolveType(it, state.bindingContext.get(BindingContext.TYPE, it.typeReference)!!, fields.size + i) } - fields.addAll(currentConstructorFields) - fieldsIndex.putAll(currentConstructorFields.map { Pair(it.label, it) }) - primaryConstructorIndex = LLVMType.mangleFunctionArguments(currentConstructorFields) - constructorFields.put(primaryConstructorIndex!!, currentConstructorFields) - } - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/FunctionCodegen.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/FunctionCodegen.kt deleted file mode 100644 index ed2a4a8df72..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/FunctionCodegen.kt +++ /dev/null @@ -1,138 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtNamedFunction -import org.jetbrains.kotlin.psi.KtParameter -import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.source.KotlinSourceElement -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.LLVMFunctionType -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType -import org.kotlinnative.translator.llvm.types.LLVMVoidType -import java.util.* - - -class FunctionCodegen(state: TranslationState, - variableManager: VariableManager, - val function: KtNamedFunction, - codeBuilder: LLVMBuilder) : - BlockCodegen(state, variableManager, codeBuilder) { - - var name: String - var args = LinkedList() - val isExtensionDeclaration = function.isExtensionDeclaration() - var functionNamePrefix = "" - val external: Boolean - val defaultValues: List - val fullName: String - get() = functionNamePrefix + name - - init { - val descriptor = state.bindingContext.get(BindingContext.FUNCTION, function)!! - args.addAll(descriptor.valueParameters.map { - LLVMInstanceOfStandardType(it?.fqNameSafe?.asString() ?: it.name.toString(), it.type, state = state) - }) - - returnType = LLVMInstanceOfStandardType("instance", descriptor.returnType!!, state = state) - if (returnType!!.type is LLVMReferenceType) { - returnType!!.pointer = 2 - } - external = descriptor.isExternal - name = if (external) function.name!! else function.fqName!!.convertToNativeName() + LLVMType.mangleFunctionArguments(args) - - if (isExtensionDeclaration) { - name = "${function.name}${if (!external) LLVMType.mangleFunctionArguments(args) else ""}" - val receiverType = descriptor.extensionReceiverParameter!!.type - val translatorType = LLVMMapStandardType(receiverType, state) - val packageName = (function.containingFile as KtFile).packageFqName.asString() - functionNamePrefix = packageName.addAfterIfNotEmpty(".") + translatorType.mangle + "." - - val extensionFunctionsOfThisType = state.extensionFunctions.getOrDefault(translatorType.toString(), HashMap()) - extensionFunctionsOfThisType.put(fullName, this) - state.extensionFunctions.put(translatorType.toString(), extensionFunctionsOfThisType) - } - - defaultValues = descriptor.valueParameters.indices.map { - val parameterDescriptor = descriptor.valueParameters[it] - if (parameterDescriptor.declaresDefaultValue()) { - val initializer = (parameterDescriptor.source as KotlinSourceElement).psi as KtParameter - initializer.defaultValue - } else { - null - } - } - } - - fun generate(this_type: LLVMVariable? = null) { - generateDeclaration(this_type) - - if (external) { - return - } - - codeBuilder.addStartExpression() - generateLoadArguments() - evaluateCodeBlock(function.bodyExpression, scopeDepth = topLevelScopeDepth, isBlock = function.hasBlockBody()) - - if (returnType?.type is LLVMVoidType){ - codeBuilder.addAnyReturn(LLVMVoidType()) - } - codeBuilder.addEndExpression() - } - - private fun generateDeclaration(this_type: LLVMVariable? = null) { - var actualReturnType: LLVMType = returnType!!.type - val actualArgs = ArrayList() - - if (returnType!!.pointer > 0) { - actualReturnType = LLVMVoidType() - actualArgs.add(returnType!!) - } - - if (isExtensionDeclaration) { - val receiverParameter = state.bindingContext.get(BindingContext.FUNCTION, function)!!.extensionReceiverParameter!! - val receiverType = receiverParameter.type - val translatorType = LLVMMapStandardType(receiverType, state) - - val classVal = when (translatorType) { - is LLVMReferenceType -> LLVMVariable("classvariable.this", translatorType, pointer = 1) - else -> LLVMVariable("type", translatorType, pointer = 0) - } - - variableManager.addVariable("this", classVal, level = 0) - actualArgs.add(classVal) - } - - if (this_type != null) { - actualArgs.add(this_type) - } - - actualArgs.addAll(args) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMFunctionDescriptor(fullName, actualArgs, actualReturnType, external)) - } - - private fun generateLoadArguments() { - args.forEach(fun(it: LLVMVariable) { - if (it.type is LLVMFunctionType || (it.type is LLVMReferenceType && it.type.byRef)) { - variableManager.addVariable(it.label, LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope(), pointer = 1), topLevelScopeDepth) - return - } - - if (it.type !is LLVMReferenceType || it.type.byRef) { - val loadVariable = LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope(), pointer = it.pointer) - val allocVar = codeBuilder.loadArgument(loadVariable) - variableManager.addVariable(it.label, allocVar, topLevelScopeDepth) - } else { - variableManager.addVariable(it.label, LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope(), pointer = 0), topLevelScopeDepth) - } - }) - } - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/ObjectCodegen.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/ObjectCodegen.kt deleted file mode 100644 index 4f58ad3d000..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/ObjectCodegen.kt +++ /dev/null @@ -1,43 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.psi.KtObjectDeclaration -import org.jetbrains.kotlin.resolve.BindingContext -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.LLVMVariable -import org.kotlinnative.translator.llvm.LLVMVariableScope -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType - -class ObjectCodegen(state: TranslationState, - variableManager: VariableManager, - val objectDeclaration: KtObjectDeclaration, - codeBuilder: LLVMBuilder, - parentCodegen: StructCodegen? = null) : - StructCodegen(state, variableManager, objectDeclaration, codeBuilder, parentCodegen) { - - override var size: Int = 0 - override val structName: String = objectDeclaration.fqName?.asString()!! - override val type = LLVMReferenceType(structName, "class") - - init { - primaryConstructorIndex = LLVMType.mangleFunctionArguments(emptyList()) - constructorFields.put(primaryConstructorIndex!!, arrayListOf()) - } - - override fun prepareForGenerate() { - generateInnerFields(objectDeclaration.declarations) - type.size = calculateTypeSize() - - super.prepareForGenerate() - - val classInstance = LLVMVariable("object.instance.$structName", type, objectDeclaration.name, LLVMVariableScope(), pointer = 1) - codeBuilder.addGlobalInitialize(classInstance, fields, initializedFields.map { - val type = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, it.value)!!.type!! - Pair(it.key, state.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, it.value)!!.getValue(type).toString()) - }.toMap(), type) - variableManager.addGlobalVariable(structName, classInstance) - } - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/PropertyCodegen.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/PropertyCodegen.kt deleted file mode 100644 index ca21816d604..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/PropertyCodegen.kt +++ /dev/null @@ -1,33 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.js.descriptorUtils.nameIfStandardType -import org.jetbrains.kotlin.psi.KtProperty -import org.jetbrains.kotlin.resolve.BindingContext -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.LLVMBuilder -import org.kotlinnative.translator.llvm.LLVMInstanceOfStandardType -import org.kotlinnative.translator.llvm.LLVMVariable -import org.kotlinnative.translator.llvm.LLVMVariableScope - - -class PropertyCodegen(val state: TranslationState, - val variableManager: VariableManager, - val property: KtProperty, - val codeBuilder: LLVMBuilder) { - - fun generate() { - val varInfo = state.bindingContext.get(BindingContext.VARIABLE, property)?.compileTimeInitializer ?: return - - val kotlinType = varInfo.type - val value = varInfo.value - if (kotlinType.nameIfStandardType != null) { - val variableType = LLVMInstanceOfStandardType(property.name ?: return, kotlinType, state = state).type - val variable = LLVMVariable(property.name.toString(), variableType, property.name.toString(), LLVMVariableScope()) - variableManager.addGlobalVariable(property.name.toString(), variable) - codeBuilder.defineGlobalVariable(variable, variableType.parseArg(value.toString())) - variable.pointer++ - } - } - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/StructCodegen.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/StructCodegen.kt deleted file mode 100644 index 92021d7b054..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/codegens/StructCodegen.kt +++ /dev/null @@ -1,252 +0,0 @@ -package org.kotlinnative.translator.codegens - -import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.types.KotlinType -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.VariableManager -import org.kotlinnative.translator.llvm.* -import org.kotlinnative.translator.llvm.types.LLVMCharType -import org.kotlinnative.translator.llvm.types.LLVMReferenceType -import org.kotlinnative.translator.llvm.types.LLVMType -import org.kotlinnative.translator.llvm.types.LLVMVoidType -import java.util.* - -/* - * TODO make high level description of code generation process - * and structure of generated code. - */ -abstract class StructCodegen(val state: TranslationState, - val variableManager: VariableManager, - val classOrObject: KtClassOrObject, - val codeBuilder: LLVMBuilder, - val parentCodegen: StructCodegen? = null) { - - val fields = ArrayList() - val fieldsIndex = HashMap() - val nestedClasses = HashMap() - val enumFields = HashMap() - val constructorFields = HashMap>() - var primaryConstructorIndex: String? = null - val initializedFields = HashMap() - var methods = HashMap() - - abstract val type: LLVMReferenceType - abstract var size: Int - abstract val structName: String - - open fun prepareForGenerate() { - generateStruct() - classOrObject.declarations.filterIsInstance().map { - val function = FunctionCodegen(state, variableManager, it, codeBuilder) - methods.put(function.name, function) - } - } - - fun calculateTypeSize(): Int { - val classAlignment = fields.map { it.type.align }.max()?.toInt() ?: 0 - var alignmentRemainder = 0 - size = 0 - - for (item in fields) { - val currentFieldSize = if (item.pointer > 0) TranslationState.POINTER_ALIGN else item.type.align - alignmentRemainder -= (alignmentRemainder % currentFieldSize) - if (alignmentRemainder < currentFieldSize) { - size += classAlignment - alignmentRemainder = classAlignment - currentFieldSize - } else { - alignmentRemainder -= currentFieldSize - } - } - return size - } - - open fun generate() { - generateEnumFields() - generatePrimaryConstructor() - classOrObject.getSecondaryConstructors().map { generateSecondaryConstructor(it) } - - val classVal = LLVMVariable("classvariable.this", type, pointer = if (type.isPrimitive) 0 else 1) - variableManager.addVariable("this", classVal, level = 0) - - methods.values.map { it.generate(classVal) } - } - - fun generateInnerFields(declarations: List) { - for (declaration in declarations) { - when (declaration) { - is KtProperty -> { - val ktType = state.bindingContext.get(BindingContext.TYPE, declaration.typeReference) - ?: state.bindingContext.get(BindingContext.VARIABLE, declaration)!!.type - val field = resolveType(declaration, ktType, fields.size) - - if (declaration.initializer != null) { - initializedFields.put(field, declaration.initializer!!) - } - - fields.add(field) - fieldsIndex[field.label] = field - } - is KtEnumEntry -> { - val name = declaration.name!! - val field = LLVMVariable("class.$structName.$name", type, scope = LLVMVariableScope(), pointer = 2) - enumFields.put(name, field) - } - is KtClass -> - nestedClasses.put(declaration.fqName!!.asString(), - ClassCodegen(state, - VariableManager(state.globalVariableCollection), - declaration, codeBuilder, this)) - } - } - } - - private fun generateEnumFields() { - val enumEntries = classOrObject.declarations.filterIsInstance() - - for (declaration in enumEntries) { - val name = declaration.name!! - val initializer = declaration.initializerList!!.initializers[0] - val arguments = (initializer as KtSuperTypeCallEntry).valueArguments.map { it.getArgumentExpression()!!.text } - - val field = codeBuilder.getNewVariable(type, scope = LLVMVariableScope()) - val enumField = enumFields[name]!! - - codeBuilder.defineGlobalVariable(field, codeBuilder.makeStructInitializer(constructorFields[primaryConstructorIndex]!!, arguments)) - codeBuilder.defineGlobalVariable(LLVMVariable(enumField.label, enumField.type, enumField.kotlinName, enumField.scope, enumField.pointer - 1), field.toString()) - } - } - - private fun generateStruct() = - codeBuilder.createClass(structName, fields) - - private fun generateSecondaryConstructor(secondaryConstructor: KtSecondaryConstructor) { - val thisCall = secondaryConstructor.getDelegationCall().calleeExpression - val descriptor = state.bindingContext.get(BindingContext.CONSTRUCTOR, secondaryConstructor) - - val classVal = LLVMVariable("classvariable.this", type, pointer = 1) - variableManager.addVariable("this", classVal, level = 0) - - val secondaryConstructorArguments = descriptor!!.valueParameters.map { - LLVMInstanceOfStandardType(it.fqNameSafe.convertToNativeName(), it.type, state = state) - } - - val argFields = mutableListOf(classVal) - argFields.addAll(secondaryConstructorArguments) - val currentConstructorIndex = LLVMType.mangleFunctionArguments(secondaryConstructorArguments) - constructorFields.put(currentConstructorIndex, argFields) - codeBuilder.addLLVMCodeToLocalPlace(LLVMFunctionDescriptor(structName + currentConstructorIndex, argFields, LLVMVoidType())) - - codeBuilder.addStartExpression() - - secondaryConstructorArguments.map { variableManager.addVariable(it.label, it, level = 2) } - - val blockCodegen = object : BlockCodegen(state, variableManager, codeBuilder) {} - val mainConstructorThis = blockCodegen.evaluateConstructorDelegationReferenceExpression(thisCall!!, this, secondaryConstructorArguments, 1) as LLVMVariable - variableManager.addVariable("this", mainConstructorThis, level = 0) - - blockCodegen.evaluateCodeBlock(secondaryConstructor.bodyExpression, scopeDepth = 1) - generateReturn(codeBuilder.receivePointedArgument(variableManager["this"]!!, requirePointer = 1) as LLVMVariable) - codeBuilder.addAnyReturn(LLVMVoidType()) - codeBuilder.addEndExpression() - } - - private fun generatePrimaryConstructor() { - val classVal = LLVMVariable("classvariable.this", type, pointer = 1) - variableManager.addVariable("this", classVal, level = 0) - - val argFields = mutableListOf(classVal) - argFields.addAll(constructorFields[primaryConstructorIndex]!!) - - codeBuilder.addLLVMCodeToLocalPlace(LLVMFunctionDescriptor(structName + primaryConstructorIndex, argFields, LLVMVoidType())) - - codeBuilder.addStartExpression() - generateLoadArguments(classVal) - generateAssignments() - generateReturn(LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1)) - genClassInitializers() - codeBuilder.addAnyReturn(LLVMVoidType()) - codeBuilder.addEndExpression() - } - - private fun generateLoadArguments(thisField: LLVMVariable) { - val thisVariable = LLVMVariable(thisField.label, thisField.type, thisField.label, LLVMRegisterScope(), pointer = 0) - codeBuilder.loadArgument(thisVariable, false) - - constructorFields[primaryConstructorIndex]!!.filter { it.type !is LLVMReferenceType }.forEach { - val loadVariable = LLVMVariable(it.label, it.type, it.label, LLVMRegisterScope()) - codeBuilder.loadArgument(loadVariable) - } - } - - private fun generateAssignments() { - constructorFields[primaryConstructorIndex]!!.forEach { - when (it.type) { - is LLVMReferenceType -> { - val classField = codeBuilder.getNewVariable(it.type, pointer = it.pointer + 1) - codeBuilder.loadClassField(classField, LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1), (it as LLVMClassVariable).offset) - codeBuilder.storeVariable(classField, it) - } - else -> { - val argument = codeBuilder.loadAndGetVariable(LLVMVariable("${it.label}.addr", it.type, scope = LLVMRegisterScope(), pointer = it.pointer + 1)) - val classField = codeBuilder.getNewVariable(it.type, pointer = 1) - codeBuilder.loadClassField(classField, LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1), (it as LLVMClassVariable).offset) - codeBuilder.storeVariable(classField, argument) - } - } - } - - val blockCodegen = object : BlockCodegen(state, variableManager, codeBuilder) {} - val receiverThis = LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1) - variableManager.addVariable("this", receiverThis, level = 2) - - for ((variable, initializer) in initializedFields) { - val left = blockCodegen.evaluateMemberMethodOrField(receiverThis, variable.label, blockCodegen.topLevelScopeDepth, call = null)!! - val right = blockCodegen.evaluateExpression(initializer, scopeDepth = blockCodegen.topLevelScopeDepth)!! - blockCodegen.addPrimitiveBinaryOperation(KtTokens.EQ, left, right) - } - - variableManager.pullOneUpwardLevelVariable("this") - } - - private fun generateReturn(src: LLVMVariable) { - val dst = LLVMVariable("classvariable.this", type, scope = LLVMRegisterScope(), pointer = 1) - - val castedDst = codeBuilder.bitcast(dst, LLVMCharType(), pointer = 1) - val castedSrc = codeBuilder.bitcast(src, LLVMCharType(), pointer = 1) - - codeBuilder.memcpy(castedDst, castedSrc, size) - } - - protected fun resolveType(field: KtNamedDeclaration, ktType: KotlinType, offset: Int): LLVMClassVariable { - val annotations = parseFieldAnnotations(field) - val fieldName = state.bindingContext.get(BindingContext.VALUE_PARAMETER, field as?KtParameter)?.fqNameSafe?.convertToNativeName() - ?: field.fqName?.asString() - ?: field.name!! - - val result = LLVMInstanceOfStandardType(fieldName, ktType, LLVMRegisterScope(), state = state) - - if (state.classes.containsKey(field.name!!)) { - return LLVMClassVariable(result.label, state.classes[fieldName]!!.type, result.pointer) - } - - if (annotations.contains("Plain")) { - result.pointer = 0 - } - - return LLVMClassVariable(result.label, result.type, result.pointer, offset) - } - - private fun parseFieldAnnotations(field: KtNamedDeclaration): Set = - field.annotationEntries.map { state.bindingContext.get(BindingContext.ANNOTATION, it)?.type.toString() }.toHashSet() - - protected fun genClassInitializers() = - classOrObject.getAnonymousInitializers().map { - object : BlockCodegen(state, variableManager, codeBuilder) { - fun generate() = evaluateCodeBlock(it.body, scopeDepth = topLevelScopeDepth) - } - }.map { it.generate() } - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/debug/debug.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/debug/debug.kt deleted file mode 100644 index 345a7416faa..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/debug/debug.kt +++ /dev/null @@ -1,59 +0,0 @@ -package org.kotlinnative.translator.debug - -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiWhiteSpace -import com.intellij.psi.impl.source.tree.CompositeElement -import org.jetbrains.kotlin.psi.KtClass -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtNamedFunction - -fun debugPrintNode(node: Any?, indent: Int = 0): Unit { - if (node == null) { - return - } - - for (i in 0..indent) { - print(" ") - } - - println(node.toString()) - - when (node) { - is CompositeElement -> { - debugPrintNode(node.firstChildNode, indent + 2) - debugPrintNode(node.treeNext, indent) - } - is PsiElement -> { - debugPrintNode(node.firstChild, indent + 2) - debugPrintNode(node.nextSibling, indent) - } - is PsiWhiteSpace -> { - debugPrintNode(node.firstChild, indent + 2) - debugPrintNode(node.nextSibling, indent) - } - else -> { - print(" not supported: " + node.javaClass.canonicalName) - } - } - -} - -fun printFunction(function: KtNamedFunction) { - debugPrintNode(function.node) -} - -fun printClass(function: KtClass) { - debugPrintNode(function.node) -} - -fun printFile(file: KtFile) { - - for (declaration in file.declarations) { - - when (declaration) { - is KtNamedFunction -> printFunction(declaration) - is KtClass -> printClass(declaration) - else -> println(declaration.toString()) - } - } -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/exceptions/TranslationException.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/exceptions/TranslationException.kt deleted file mode 100644 index 4b132fcbbcc..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/exceptions/TranslationException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.kotlinnative.translator.exceptions - -import java.lang.Exception - -class TranslationException(message: String) : Exception(message) diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/exceptions/UnimplementedException.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/exceptions/UnimplementedException.kt deleted file mode 100644 index e4b2b0dd4bc..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/exceptions/UnimplementedException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.kotlinnative.translator.exceptions - -import java.lang.Exception - -class UnimplementedException() : Exception() diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt deleted file mode 100644 index 894419bdc56..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt +++ /dev/null @@ -1,252 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.types.* -import java.rmi.UnexpectedException -import java.util.* - -class LLVMBuilder(arm: Boolean = false) { - - private val localCode: StringBuilder = StringBuilder() - private val globalCode: StringBuilder = StringBuilder() - private var variableCount = 0 - private var labelCount = 0 - private val exceptions = mapOf( - Pair("KotlinNullPointerException", initializeExceptionString("Exception in thread main kotlin.KotlinNullPointerException"))) - - - init { - val declares = arrayOf( - "declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1)", - "declare i8* @malloc_heap(i32)", - "declare i32 @printf(i8*, ...)", - "declare void @abort()", - "%class.Nothing = type { }") - - declares.forEach { addLLVMCodeToGlobalPlace(it) } - - if (arm) { - val functionAttributes = """attributes #0 = { nounwind "stack-protector-buffer-size"="8" "target-cpu"="cortex-m3" "target-features"="+hwdiv,+strict-align" }""" - addLLVMCodeToGlobalPlace(functionAttributes) - } - } - - fun addLLVMCodeToLocalPlace(code: String) = - localCode.appendln(code) - - fun addLLVMCodeToGlobalPlace(code: String) = - globalCode.appendln(code) - - fun addComment(comment: String) = - addLLVMCodeToLocalPlace("; " + comment) - - fun addStartExpression() = - addLLVMCodeToLocalPlace("{") - - fun addEndExpression() = - addLLVMCodeToLocalPlace("unreachable\n}") - - fun addAssignment(lhs: LLVMVariable, rhs: LLVMNode) = - addLLVMCodeToLocalPlace("$lhs = $rhs") - - fun addReturnOperator(llvmVariable: LLVMSingleValue) = - addLLVMCodeToLocalPlace("ret ${llvmVariable.type} $llvmVariable") - - fun addAnyReturn(type: LLVMType, value: String = type.defaultValue, pointer: Int = 0) = - addLLVMCodeToLocalPlace("ret $type${"*".repeat(pointer)} $value") - - fun addStringConstant(variable: LLVMVariable, value: String) = - addLLVMCodeToGlobalPlace("$variable = private unnamed_addr constant ${(variable.type as LLVMStringType).fullArrayType} c\"${value.replace("\"", "\\\"")}\\00\", align 1") - - fun addCondition(condition: LLVMSingleValue, thenLabel: LLVMLabel, elseLabel: LLVMLabel) = - addLLVMCodeToLocalPlace("br ${condition.pointedType} $condition, label $thenLabel, label $elseLabel") - - fun addUnconditionalJump(label: LLVMLabel) = - addLLVMCodeToLocalPlace("br label $label") - - fun addExceptionCall(exceptionName: String) { - val exception = exceptions[exceptionName] - val printResult = getNewVariable(LLVMIntType(), pointer = 0) - addLLVMCodeToLocalPlace("$printResult = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds (${(exception!!.type as LLVMStringType).fullArrayType}* $exception, i32 0, i32 0))") - addFunctionCall(LLVMVariable("abort", LLVMVoidType(), scope = LLVMVariableScope()), emptyList()) - } - - fun addFunctionCall(functionName: LLVMVariable, arguments: List) = - addLLVMCodeToLocalPlace("call ${functionName.type} $functionName(${arguments.joinToString { it -> "${it.type} $it" }})") - - fun allocStackVar(target: LLVMVariable, asValue: Boolean = false, pointer: Boolean = false) { - val type = if (asValue) target.type.toString() else target.pointedType - addLLVMCodeToLocalPlace("$target = alloca ${if (pointer) type.removeSuffix("*") else type}, align ${target.type.align}") - } - - fun allocStaticVar(target: LLVMVariable, asValue: Boolean = false, pointer: Boolean = false) { - val allocated = getNewVariable(LLVMCharType(), pointer = 1) - val size = if ((target.pointer >= 2) || (target.pointer >= 1 && !pointer)) TranslationState.POINTER_SIZE else target.type.size - - addLLVMCodeToLocalPlace("$allocated = call i8* @malloc_heap(i32 $size)") - addLLVMCodeToLocalPlace("$target = bitcast ${allocated.pointedType} $allocated to ${if (asValue) target.type.toString() else target.pointedType}" + if (pointer) "" else "*") - } - - fun addGlobalInitialize(target: LLVMVariable, fields: ArrayList, initializers: Map, classType: LLVMType) { - val code = "$target = internal global $classType { ${ - fields.map { it.pointedType + " " + if (initializers.containsKey(it)) initializers[it] else "0" }.joinToString() - } }, align ${classType.align}" - addLLVMCodeToGlobalPlace(code) - } - - fun bitcast(src: LLVMVariable, llvmType: LLVMType, pointer: Int): LLVMVariable { - val empty = getNewVariable(llvmType, pointer = pointer) - addLLVMCodeToLocalPlace("$empty = bitcast ${src.pointedType} $src to ${llvmType.toString() + "*".repeat(pointer)}") - return empty - } - - fun convertVariableToType(variable: LLVMSingleValue, targetType: LLVMType): LLVMSingleValue { - var resultVariable = variable - if (variable.type != targetType) { - val convertedExpression = targetType.convertFrom(variable) - resultVariable = saveExpression(convertedExpression) - } - return resultVariable - } - - fun copyVariable(from: LLVMVariable, to: LLVMVariable) = - when { - from.type is LLVMStringType && !from.type.isLoaded -> storeString(to, from, 0) - else -> copyVariableValue(to, from) - } - - fun createClass(name: String, fields: List) = - addLLVMCodeToGlobalPlace("%class.$name = type { ${fields.map { it.pointedType }.joinToString()} }") - - fun declareEntryPoint(name: String) { - addLLVMCodeToLocalPlace("define weak void @main()") - addStartExpression() - addFunctionCall(LLVMVariable(name, LLVMVoidType(), scope = LLVMVariableScope()), listOf()) - addAnyReturn(LLVMVoidType()) - addEndExpression() - } - - fun defineGlobalVariable(variable: LLVMVariable, defaultValue: String = variable.type.defaultValue) = - addLLVMCodeToLocalPlace("$variable = global ${variable.pointedType} $defaultValue, align ${variable.type.align}") - - fun getNewVariable(type: LLVMType, pointer: Int = 0, kotlinName: String? = null, scope: LLVMScope = LLVMRegisterScope(), prefix: String = "var"): LLVMVariable { - variableCount++ - return LLVMVariable("$prefix$variableCount", type, kotlinName, scope, pointer) - } - - fun getNewLabel(scope: LLVMScope = LLVMRegisterScope(), prefix: String): LLVMLabel { - labelCount++ - return LLVMLabel("label.$prefix.$labelCount", scope) - } - - fun loadArgsIfRequired(names: List, args: List) = - names.mapIndexed(fun(i: Int, value: LLVMSingleValue): LLVMSingleValue { - return receivePointedArgument(value, args[i].pointer) - }).toList() - - fun loadArgument(llvmVariable: LLVMVariable, store: Boolean = true): LLVMVariable { - val allocVar = LLVMVariable("${llvmVariable.label}.addr", llvmVariable.type, llvmVariable.kotlinName, LLVMRegisterScope(), pointer = llvmVariable.pointer + 1) - allocStackVar(allocVar, asValue = false, pointer = true) - if (store) { - storeVariable(allocVar, llvmVariable) - } - return allocVar - } - - fun loadClassField(target: LLVMVariable, source: LLVMVariable, offset: Int) = - addLLVMCodeToLocalPlace("$target = getelementptr inbounds ${source.pointedType} $source, i32 0, i32 $offset") - - fun loadVariableOffset(target: LLVMVariable, source: LLVMVariable, index: LLVMConstant) = - addLLVMCodeToLocalPlace("$target = getelementptr inbounds ${source.type} $source, ${index.type} ${index.value}") - - fun loadAndGetVariable(source: LLVMVariable): LLVMVariable { - assert(source.pointer > 0) - val target = getNewVariable(source.type, source.pointer - 1, source.kotlinName) - addLLVMCodeToLocalPlace("$target = load ${source.pointedType} $source, align ${target.type.align}") - return target - } - - fun makeStructInitializer(args: List, values: List) - = "{ ${args.mapIndexed { i: Int, variable: LLVMVariable -> "${variable.type} ${values[i]}" }.joinToString()} }" - - fun markWithLabel(label: LLVMLabel?) { - if (label != null) - addLLVMCodeToLocalPlace("${label.label}:") - } - - fun memcpy(castedDst: LLVMVariable, castedSrc: LLVMVariable, size: Int, align: Int = 4, volatile: Boolean = false) = - addLLVMCodeToLocalPlace("call void @llvm.memcpy.p0i8.p0i8.i64(i8* $castedDst, i8* $castedSrc, i64 $size, i32 $align, i1 $volatile)") - - fun nullCheck(variable: LLVMVariable): LLVMVariable { - val result = getNewVariable(LLVMBooleanType(), pointer = 0) - val loaded = loadAndGetVariable(variable) - addLLVMCodeToLocalPlace("$result = icmp eq ${loaded.pointedType} null, $loaded") - return result - } - - fun receiveNativeValue(firstOp: LLVMSingleValue): LLVMSingleValue = - when { - firstOp is LLVMConstant || firstOp.pointer == 0 -> firstOp - firstOp is LLVMVariable -> loadAndGetVariable(firstOp) - else -> throw UnexpectedException("Unknown inheritor of LLVMSingleValue") - } - - fun receivePointedArgument(value: LLVMSingleValue, requirePointer: Int): LLVMSingleValue { - var result = value - - while (result.pointer > requirePointer) { - result = receiveNativeValue(result) - } - - if ((value.type is LLVMStringType) && !(value.type.isLoaded)) { - val newVariable = getNewVariable(value.type, pointer = result.pointer + 1) - allocStackVar(newVariable, asValue = true) - copyVariable(result as LLVMVariable, newVariable) - result = loadAndGetVariable(newVariable) - } - - return result - } - - fun storeString(target: LLVMVariable, source: LLVMVariable, offset: Int) { - val code = "store ${target.type} getelementptr inbounds (" + - "${(source.type as LLVMStringType).fullArrayType}* $source, i32 0, i32 $offset), ${target.pointedType} $target, align ${source.type.align}" - (target.type as LLVMStringType).isLoaded = true - addLLVMCodeToLocalPlace(code) - } - - fun storeVariable(target: LLVMSingleValue, source: LLVMSingleValue) { - if ((source.type is LLVMStringType) && !(source.type.isLoaded)) { - storeString(target as LLVMVariable, source as LLVMVariable, 0) - } else { - addLLVMCodeToLocalPlace("store ${source.pointedType} $source, ${target.pointedType} $target, align ${source.type.align}") - } - } - - fun saveExpression(expression: LLVMSingleValue): LLVMVariable { - val resultOp = getNewVariable(expression.type, pointer = expression.pointer) - addAssignment(resultOp, expression) - return resultOp - } - - fun storeNull(result: LLVMVariable) = - addLLVMCodeToLocalPlace("store ${result.pointedType.dropLast(1)} null, ${result.pointedType} $result, align ${TranslationState.POINTER_ALIGN}") - - override fun toString() = globalCode.toString() + localCode.toString() - - private fun copyVariableValue(target: LLVMVariable, source: LLVMVariable) { - var from = source - if (source.pointer > 0) { - from = getNewVariable(source.type, source.pointer) - addLLVMCodeToLocalPlace("$from = load ${source.pointedType} $source, align ${from.type.align}") - } - addLLVMCodeToLocalPlace("store ${target.type} $from, ${target.pointedType} $target, align ${from.type.align}") - } - - private fun initializeExceptionString(string: String): LLVMVariable { - val result = getNewVariable(LLVMStringType(string.length), pointer = 0, scope = LLVMVariableScope(), prefix = "exceptions.str.") - addStringConstant(result, string) - return result - } - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMCall.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMCall.kt deleted file mode 100644 index b704798aa0d..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMCall.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -class LLVMCall(val returnType: LLVMType, - val name: String, - val arguments: Collection) : LLVMSingleValue(returnType) { - - override fun toString() = "call $returnType $name(${arguments.joinToString { "${it.pointedType} ${it.toString()}" }})" - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMClassVariable.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMClassVariable.kt deleted file mode 100644 index 780fb40d759..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMClassVariable.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -class LLVMClassVariable(label: String, - type: LLVMType, - pointer: Int = 0, - var offset: Int = 0) : LLVMVariable(label, type, pointer = pointer) \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMConstant.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMConstant.kt deleted file mode 100644 index 17a4bd69af2..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMConstant.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -open class LLVMConstant(value: String, - type: LLVMType, - pointer: Int = 0) : LLVMSingleValue(type, pointer) { - - val value = type.parseArg(value) - - override fun toString() = value - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMExpression.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMExpression.kt deleted file mode 100644 index bd67bac1daa..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMExpression.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -class LLVMExpression(type: LLVMType, val llvmCode: String, pointer: Int = 0) : LLVMSingleValue(type, pointer) { - - override fun toString() = llvmCode - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMLabel.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMLabel.kt deleted file mode 100644 index ea6e23d2a07..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMLabel.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.kotlinnative.translator.llvm - -class LLVMLabel(val label: String, val scope: LLVMScope) : LLVMNode() { - - override fun toString() = "$scope$label" - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMNode.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMNode.kt deleted file mode 100644 index 402b191f78e..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMNode.kt +++ /dev/null @@ -1,3 +0,0 @@ -package org.kotlinnative.translator.llvm - -abstract class LLVMNode \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMScope.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMScope.kt deleted file mode 100644 index 6932d837bc9..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMScope.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.kotlinnative.translator.llvm - -abstract class LLVMScope - -class LLVMVariableScope : LLVMScope() { - override fun toString() = "@" -} - -class LLVMRegisterScope : LLVMScope() { - override fun toString() = "%" -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMSingleValue.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMSingleValue.kt deleted file mode 100644 index 5a8ccc6ff71..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMSingleValue.kt +++ /dev/null @@ -1,10 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -open class LLVMSingleValue(val type: LLVMType, var pointer: Int = 0) : LLVMNode() { - - open val pointedType: String - get() = type.toString() + "*".repeat(pointer) - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMVariable.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMVariable.kt deleted file mode 100644 index 342a12977db..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMVariable.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.kotlinnative.translator.llvm.types.LLVMType - -open class LLVMVariable(val label: String, - type: LLVMType, - var kotlinName: String? = null, - val scope: LLVMScope = LLVMRegisterScope(), - pointer: Int = 0) : LLVMSingleValue(type, pointer) { - - override fun toString() = "$scope$label" - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/generators.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/generators.kt deleted file mode 100644 index ea1b234f28a..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/generators.kt +++ /dev/null @@ -1,63 +0,0 @@ -package org.kotlinnative.translator.llvm - -import org.jetbrains.kotlin.builtins.isFunctionTypeOrSubtype -import org.jetbrains.kotlin.js.descriptorUtils.nameIfStandardType -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.types.KotlinType -import org.jetbrains.kotlin.types.typeUtil.isUnit -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.types.* - - -fun LLVMFunctionDescriptor(name: String, - argTypes: List?, - returnType: LLVMType, - declare: Boolean = false) = - "${if (declare) "declare" else "define weak"} $returnType @$name(${ - argTypes?.mapIndexed { i: Int, s: LLVMVariable -> - "${s.pointedType} ${if (s.type is LLVMReferenceType && !s.type.byRef) "byval" else ""} %${s.label}" - }?.joinToString()}) #0" - -fun LLVMInstanceOfStandardType(name: String, - type: KotlinType, - scope: LLVMScope = LLVMRegisterScope(), - state: TranslationState): LLVMVariable { - val typeName = type.toString().dropLastWhile { it == '?' } - val pointerMark = if (type.isMarkedNullable) 1 else 0 - return when { - type.isFunctionTypeOrSubtype -> LLVMVariable(name, LLVMFunctionType(type, state), name, scope, pointer = 1) - typeName == "Boolean" -> LLVMVariable(name, LLVMBooleanType(), name, scope, pointerMark) - typeName == "Byte" -> LLVMVariable(name, LLVMByteType(), name, scope, pointerMark) - typeName == "Char" -> LLVMVariable(name, LLVMCharType(), name, scope, pointerMark) - typeName == "Short" -> LLVMVariable(name, LLVMShortType(), name, scope, pointerMark) - typeName == "Int" -> LLVMVariable(name, LLVMIntType(), name, scope, pointerMark) - typeName == "Long" -> LLVMVariable(name, LLVMLongType(), name, scope, pointerMark) - typeName == "Float" -> LLVMVariable(name, LLVMFloatType(), name, scope, pointerMark) - typeName == "Double" -> LLVMVariable(name, LLVMDoubleType(), name, scope, pointerMark) - typeName == "String" -> LLVMVariable(name, LLVMStringType(0), name, scope, pointerMark) - type.nameIfStandardType.toString() == "Nothing" -> LLVMVariable(name, LLVMNullType(), name, scope) - type.isUnit() -> LLVMVariable("", LLVMVoidType(), name, scope) - type.isMarkedNullable -> LLVMVariable(name, LLVMReferenceType(typeName, prefix = "class"), name, scope, pointer = pointerMark) - else -> { - val declarationDescriptor = type.constructor.declarationDescriptor!! - val refName = declarationDescriptor.fqNameSafe.asString() - val refType = state.classes[type.toString()]?.type ?: LLVMReferenceType(refName, align = TranslationState.POINTER_ALIGN, prefix = "class") - - LLVMVariable(name, refType, name, scope, pointer = 1) - } - } -} - -fun LLVMMapStandardType(type: KotlinType, - state: TranslationState) = - LLVMInstanceOfStandardType("type", type, LLVMRegisterScope(), state).type - -fun String.addBeforeIfNotEmpty(add: String): String = - if (this.length > 0) add + this else this - -fun String.addAfterIfNotEmpty(add: String): String = - if (this.length > 0) this + add else this - -fun FqName.convertToNativeName(): String = - this.asString().replace(".", "") \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMArray.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMArray.kt deleted file mode 100644 index 7176186a117..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMArray.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -interface LLVMArray { - - val arrayElementType: LLVMType - val fullArrayType: String - val length: Int - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt deleted file mode 100644 index 856a030be72..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt +++ /dev/null @@ -1,69 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue -import java.lang.IllegalArgumentException - - -class LLVMBooleanType() : LLVMType() { - - override val align = 4 - override var size: Int = 1 - override val defaultValue = "0" - override val mangle = "Boolean" - override val isPrimitive = true - override val typename = "i1" - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "sub nsw i1 $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "mul nsw i1 $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "add nsw i1 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "sdiv i1 $firstOp, $secondOp") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i1 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i1 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i1 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i1 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i1" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i1" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "or i1 $firstOp, $secondOp") - - override fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "and i1 $firstOp, $secondOp") - - override fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "xor i1 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMBooleanType - - override fun parseArg(inputArg: String) = - when (inputArg.toLowerCase()) { - "true" -> "1" - "false" -> "0" - else -> throw IllegalArgumentException("Failed to parse boolean type") - } - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMByteType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMByteType.kt deleted file mode 100644 index 372b3c1cfe7..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMByteType.kt +++ /dev/null @@ -1,42 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -class LLVMByteType() : LLVMType() { - - override val align = 1 - override var size: Int = 1 - override val mangle = "Byte" - override val typename = "i8" - override val defaultValue = "0" - override val isPrimitive = true - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i8 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i8 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i8 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i8 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMByteType(), "srem i8 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMByteType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt deleted file mode 100644 index 75dbd3bc2c5..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt +++ /dev/null @@ -1,41 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -class LLVMCharType() : LLVMType() { - - override val align = 1 - override var size: Int = 1 - override val mangle = "Char" - override val typename = "i8" - override val defaultValue = "0" - override val isPrimitive = true - - override fun parseArg(inputArg: String) = inputArg.first().toInt().toString() - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i8 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i8 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i8 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i8 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i8" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMCharType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt deleted file mode 100644 index f2530e92d11..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt +++ /dev/null @@ -1,61 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMDoubleType() : LLVMType() { - - override val align = 8 - override var size: Int = 8 - override val mangle = "Double" - override val typename = "double" - override val defaultValue = "0.0" - override val isPrimitive = true - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fsub double $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fmul double $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fadd double $firstOp, $secondOp") - - override fun operatorInc(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fadd double $firstOp, 1.0") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fdiv double $firstOp, $secondOp") - - override fun operatorDec(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fsub double $firstOp, 1.0") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp olt double $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ogt double $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ole double i32 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oge double i32 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oeq double $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp one double $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "frem double $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMDoubleType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt deleted file mode 100644 index b98b18d0b59..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt +++ /dev/null @@ -1,61 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMFloatType() : LLVMType() { - - override val align = 4 - override var size: Int = 4 - override val mangle = "Float" - override val typename = "float" - override val defaultValue = "0.0" - override val isPrimitive = true - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fsub float $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fmul float $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fadd float $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "fdiv float $firstOp, $secondOp") - - override fun operatorInc(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fadd float $firstOp, 1.0") - - override fun operatorDec(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMDoubleType(), "fsub float $firstOp, 1.0") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp olt float $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ogt float $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp ole float i32 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oge float i32 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp oeq float" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "fcmp one float" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMFloatType(), "frem float $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMFloatType - - override fun hashCode() = - typename.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt deleted file mode 100644 index 06304e8c0e1..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt +++ /dev/null @@ -1,37 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.jetbrains.kotlin.types.KotlinType -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.LLVMInstanceOfStandardType -import org.kotlinnative.translator.llvm.LLVMVariable - -class LLVMFunctionType(type: KotlinType, state: TranslationState) : LLVMType() { - - override val defaultValue = "" - override val align: Int = 4 - override var size: Int = 4 - override val mangle: String - override val typename = "FunctionType" - - val arguments: List - val returnType: LLVMVariable - - init { - val types = type.arguments.map { LLVMInstanceOfStandardType("", it.type, state = state) }.toList() - returnType = types.last() - arguments = types.dropLast(1) - mangle = "F.${LLVMType.mangleFunctionArguments(arguments)}.EF" - } - - fun mangleArgs() = LLVMType.mangleFunctionArguments(arguments) - - override fun toString() = - "${returnType.type} (${arguments.map { it.pointedType }.joinToString()})" - - override fun equals(other: Any?) = - (other is LLVMFunctionType) && (mangle == other.mangle) - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMIntType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMIntType.kt deleted file mode 100644 index efd61f3a4ed..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMIntType.kt +++ /dev/null @@ -1,89 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMIntType() : LLVMType() { - - override val align = 4 - override var size: Int = 4 - override val defaultValue = "0" - override val mangle = "Int" - override val typename = "i32" - override val isPrimitive = true - - override fun convertFrom(source: LLVMSingleValue) = - when (source.type) { - is LLVMBooleanType, - is LLVMByteType, - is LLVMCharType, - is LLVMShortType -> LLVMExpression(LLVMIntType(), " sext ${source.type} $source to i32") - else -> throw UnimplementedException() - } - - override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "or i32 $firstOp, $secondOp") - - override fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "and i32 $firstOp, $secondOp") - - override fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "xor i32 $firstOp, $secondOp") - - override fun operatorShl(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "shl i32 $firstOp, $secondOp") - - override fun operatorShr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "ashr i32 $firstOp, $secondOp") - - override fun operatorUshr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "lshr i32 $firstOp, $secondOp") - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "sub nsw i32 $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "mul nsw i32 $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "add nsw i32 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "sdiv i32 $firstOp, $secondOp") - - override fun operatorInc(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "add nsw i32 $firstOp, 1") - - override fun operatorDec(firstOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "sub nsw i32 $firstOp, 1") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i32 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i32 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i32 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i32 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i32" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i32" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMIntType(), "srem i32 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMIntType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMLongType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMLongType.kt deleted file mode 100644 index eafcde9c8ef..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMLongType.kt +++ /dev/null @@ -1,84 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - - -class LLVMLongType() : LLVMType() { - - override val align = 8 - override var size = 8 - override val defaultValue = "0" - override val typename = "i64" - override val mangle = "Long" - override val isPrimitive = true - - override fun convertFrom(source: LLVMSingleValue) = - when (source.type) { - is LLVMBooleanType, - is LLVMByteType, - is LLVMCharType, - is LLVMShortType, - is LLVMIntType -> LLVMExpression(LLVMLongType(), " sext ${source.type} $source to i64") - else -> throw UnimplementedException() - } - - override fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "or i64 $firstOp, $secondOp") - - override fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "and i64 $firstOp, $secondOp") - - override fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "xor i64 $firstOp, $secondOp") - - override fun operatorShl(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "shl i64 $firstOp, $secondOp") - - override fun operatorShr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "ashr i64 $firstOp, $secondOp") - - override fun operatorUshr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "lshr i64 $firstOp, $secondOp") - - override fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "sub nsw i64 $firstOp, $secondOp") - - override fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "mul nsw i64 $firstOp, $secondOp") - - override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "add nsw i64 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "sdiv i64 $firstOp, $secondOp") - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i64 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i64 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i64 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i64 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i64" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i64" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMLongType(), "srem i64 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMLongType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMNullType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMNullType.kt deleted file mode 100644 index c5d3c935c2b..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMNullType.kt +++ /dev/null @@ -1,20 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -class LLVMNullType(var baseType: LLVMType? = null) : LLVMType() { - - override val align = 1 - override var size = 0 - override val defaultValue = "null" - override val mangle = "" - override val typename = baseType?.typename.orEmpty() - - override fun parseArg(inputArg: String) = "null" - override fun toString() = baseType?.toString().orEmpty() - - override fun equals(other: Any?) = - other is LLVMNullType - - override fun hashCode() = - "null".hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt deleted file mode 100644 index 86182e1ef4c..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt +++ /dev/null @@ -1,32 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.TranslationState -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue -import org.kotlinnative.translator.llvm.addAfterIfNotEmpty - - -class LLVMReferenceType(val type: String, - var prefix: String = "", - override var align: Int = TranslationState.POINTER_ALIGN, - override var size: Int = TranslationState.POINTER_SIZE, - var byRef: Boolean = true) : LLVMType() { - - override val defaultValue: String = "null" - override val mangle = "Ref_$type" - override val typename = prefix.addAfterIfNotEmpty(".") + type - - override fun toString() = "%$typename" - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq ${firstOp.pointedType} $firstOp, ${if (secondOp.type is LLVMNullType) "null" else "$secondOp"}") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne ${firstOp.pointedType} $firstOp, ${if (secondOp.type is LLVMNullType) "null" else "$secondOp"}") - - override fun equals(other: Any?) = - (other is LLVMReferenceType) and (typename.equals((other as LLVMReferenceType).typename)) - - override fun hashCode() = - typename.hashCode() -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMShortType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMShortType.kt deleted file mode 100644 index bb4b07167cf..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMShortType.kt +++ /dev/null @@ -1,45 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -class LLVMShortType() : LLVMType() { - - override val align = 2 - override var size: Int = 2 - override val defaultValue = "0" - override val typename = "i16" - override val mangle = "Short" - override val isPrimitive = true - - override fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp slt i16 $firstOp, $secondOp") - - override fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sgt i16 $firstOp, $secondOp") - - override fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sle i16 $firstOp, $secondOp") - - override fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp sge i16 $firstOp, $secondOp") - - override fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp eq i16" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMBooleanType(), "icmp ne i16" + (if ((firstOp.pointer > 0) || (secondOp.pointer > 0)) "*" else "") + " $firstOp, $secondOp") - - override fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMShortType(), "srem i16 $firstOp, $secondOp") - - override fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue) = - LLVMExpression(LLVMShortType(), "sdiv i16 $firstOp, $secondOp") - - override fun equals(other: Any?) = - other is LLVMShortType - - override fun hashCode() = - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMStringType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMStringType.kt deleted file mode 100644 index 463429c9249..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMStringType.kt +++ /dev/null @@ -1,23 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -class LLVMStringType(override val length: Int, var isLoaded: Boolean = true) : LLVMArray, LLVMType() { - - override val align = 8 - override var size: Int = 1 - override val defaultValue = "" - override val typename = "i8*" - override val mangle = "String" - override val arrayElementType = LLVMCharType() - override val fullArrayType = "[${length + 1} x i8]" - - override fun equals(other: Any?) = - when (other) { - is LLVMStringType -> this.length == other.length - else -> false - } - - override fun hashCode() = - length * 31 + if (isLoaded) 1 else 0 + - mangle.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMType.kt deleted file mode 100644 index 09bb453ae22..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMType.kt +++ /dev/null @@ -1,55 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -import org.kotlinnative.translator.exceptions.UnimplementedException -import org.kotlinnative.translator.llvm.LLVMExpression -import org.kotlinnative.translator.llvm.LLVMSingleValue - -abstract class LLVMType() { - - companion object { - fun mangleFunctionArguments(names: List) = - mangleFunctionTypes(names.map { it.type }) - - fun mangleFunctionTypes(names: List) = - if (names.size > 0) "_${names.joinToString(separator = "_", transform = { it.mangle })}" else "" - - fun nullOrVoidType(type: LLVMType): Boolean = - (type is LLVMNullType) or (type is LLVMVoidType) - - fun isReferredType(type: LLVMType?): Boolean = - (type is LLVMNullType) or (type is LLVMReferenceType) - - } - - abstract val align: Int - abstract val typename: String - abstract var size: Int - abstract val defaultValue: String - abstract val mangle: String - open val isPrimitive: Boolean = false - - open fun parseArg(inputArg: String) = inputArg - open fun convertFrom(source: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - override fun toString() = typename - - open fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorTimes(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorMinus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorDiv(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorLt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorGt(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorLeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorGeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorEq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorOr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorAnd(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorXor(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorShl(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorShr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorUshr(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorMod(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorInc(firstOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - open fun operatorDec(firstOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException() - -} \ No newline at end of file diff --git a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt b/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt deleted file mode 100644 index 74d7359ad53..00000000000 --- a/experiments/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.kotlinnative.translator.llvm.types - -class LLVMVoidType() : LLVMType() { - - override val align = 0 - override var size = 0 - override val defaultValue = "" - override val typename = "void" - override val mangle = "" - - override fun equals(other: Any?) = - other is LLVMVoidType - - override fun hashCode() = - typename.hashCode() - -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt b/experiments/translator/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt deleted file mode 100644 index 0e36a037c22..00000000000 --- a/experiments/translator/src/test/kotlin/tests/array_extensions_1/array_extensions_1.kt +++ /dev/null @@ -1,63 +0,0 @@ -fun array_extensions_1_copyOf(): Int { - val array = IntArray(3) - array[0] = 1 - array[1] = 20 - array[2] = 333 - val minimize = array.copyOf(2) - return minimize[1] + minimize.size -} - -fun array_extensions_1_copyOf_extend(): Int { - val array = IntArray(3) - array[0] = 1 - array[1] = 20 - array[2] = 333 - val minimize = array.copyOf(7) - return minimize[2] + minimize[3] + minimize[4] + minimize[5] + minimize[6] + minimize.size -} - -fun array_extensions_1_copyOfRange(): Int { - val array = IntArray(7) - array[0] = 1 - array[1] = 20 - array[2] = 333 - array[3] = 444 - array[4] = 555 - array[5] = 666 - array[6] = 777 - - val minimize = array.copyOfRange(2, 4) - val ans = minimize[0] + minimize[1] + minimize.size - return ans -} - -fun array_extensions_1_plus_element(): Int { - val array = IntArray(7) - array[0] = 1 - array[1] = 20 - array[2] = 333 - array[3] = 444 - array[4] = 555 - array[5] = 666 - array[6] = 777 - - val minimize = array.plus(2148) - return minimize[6] + minimize[7] + minimize.size -} - -fun array_extensions_1_plus_array(): Int { - val array = IntArray(3) - array[0] = 1 - array[1] = 20 - array[2] = 333 - val secondArray = IntArray(4) - secondArray[0] = 9999 - secondArray[1] = 2789 - secondArray[2] = 11792 - secondArray[3] = 67820 - - val maximize = array.plus(secondArray) - val ans = maximize[2] + maximize[5] + maximize.size - return ans -} - diff --git a/experiments/translator/src/test/kotlin/tests/array_extensions_1/array_extensions_1.txt b/experiments/translator/src/test/kotlin/tests/array_extensions_1/array_extensions_1.txt deleted file mode 100644 index 7856f082977..00000000000 --- a/experiments/translator/src/test/kotlin/tests/array_extensions_1/array_extensions_1.txt +++ /dev/null @@ -1,5 +0,0 @@ -array_extensions_1_copyOf() == 22 -array_extensions_1_copyOfRange() == 779 -array_extensions_1_copyOf_extend() == 340 -array_extensions_1_plus_element() == 2933 -array_extensions_1_plus_array() == 12132 diff --git a/experiments/translator/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt b/experiments/translator/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt deleted file mode 100644 index 3fa1227e323..00000000000 --- a/experiments/translator/src/test/kotlin/tests/array_extensions_2/array_extensions_2.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun array_extensions_2_plus_array_slave(): Int { - var array = IntArray(0) - array = array.plus(10) - println(array[0]) - - return array[0] -} - -fun array_extensions_2_plus_array(): Int{ - return array_extensions_2_plus_array_slave() -} diff --git a/experiments/translator/src/test/kotlin/tests/array_extensions_2/array_extensions_2.txt b/experiments/translator/src/test/kotlin/tests/array_extensions_2/array_extensions_2.txt deleted file mode 100644 index 5c5aa70cd5d..00000000000 --- a/experiments/translator/src/test/kotlin/tests/array_extensions_2/array_extensions_2.txt +++ /dev/null @@ -1 +0,0 @@ -array_extensions_2_plus_array() == 10 diff --git a/experiments/translator/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.kt b/experiments/translator/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.kt deleted file mode 100644 index 7e05899e992..00000000000 --- a/experiments/translator/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.kt +++ /dev/null @@ -1,17 +0,0 @@ -fun assignment_operators_1_plus(x: Int): Int { - var nzk = x - nzk += 6 - return nzk -} - -fun assignment_operators_1_minus(x: Int): Int { - var nzk = x - nzk -= 6 - return nzk -} - -fun assignment_operators_1_times(x: Int): Int { - var nzk = x - nzk *= 6 - return nzk -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.txt b/experiments/translator/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.txt deleted file mode 100644 index e1d861a6018..00000000000 --- a/experiments/translator/src/test/kotlin/tests/assignment_operators_1/assignment_operators_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -assignment_operators_1_plus_Int(11) == 17 -assignment_operators_1_minus_Int(11) == 5 -assignment_operators_1_times_Int(11) == 66 diff --git a/experiments/translator/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt b/experiments/translator/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt deleted file mode 100644 index b05d0a9e391..00000000000 --- a/experiments/translator/src/test/kotlin/tests/booleanarray_1/booleanarray_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -fun booleanarray_1_slave(x: Boolean): Boolean { - val z = BooleanArray(10) - z.set(1, x) - return z.get(1) -} - -fun booleanarray_1(x: Boolean): Int { - return if (booleanarray_1_slave(x)) 1 else 0 -} - diff --git a/experiments/translator/src/test/kotlin/tests/booleanarray_1/booleanarray_1.txt b/experiments/translator/src/test/kotlin/tests/booleanarray_1/booleanarray_1.txt deleted file mode 100644 index b63930e4883..00000000000 --- a/experiments/translator/src/test/kotlin/tests/booleanarray_1/booleanarray_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -booleanarray_1_Boolean(1) == 1 -booleanarray_1_Boolean(0) == 0 diff --git a/experiments/translator/src/test/kotlin/tests/bytearray_1/bytearray_1.kt b/experiments/translator/src/test/kotlin/tests/bytearray_1/bytearray_1.kt deleted file mode 100644 index 416ad831173..00000000000 --- a/experiments/translator/src/test/kotlin/tests/bytearray_1/bytearray_1.kt +++ /dev/null @@ -1,25 +0,0 @@ -fun bytearray_1(x: Byte): Byte { - val z = ByteArray(10) - z.set(1, x) - val r = z.clone() - return r.get(1) -} - -fun bytearray_1_array(): Int { - val size = 256 - val z= ByteArray(size) - var ind = 0 - while(ind < size){ - z[ind] = ind.toByte() - ind +=1 - } - val newInstance = z.clone() - ind = 0 - var result = true - while(ind < size){ - result = result and (newInstance[ind] == ind.toByte()) - ind += 1 - } - assert(result) - return 1 -} diff --git a/experiments/translator/src/test/kotlin/tests/bytearray_1/bytearray_1.txt b/experiments/translator/src/test/kotlin/tests/bytearray_1/bytearray_1.txt deleted file mode 100644 index 21a08e21200..00000000000 --- a/experiments/translator/src/test/kotlin/tests/bytearray_1/bytearray_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -bytearray_1_Byte(123) == 123 -bytearray_1_array() == 1 diff --git a/experiments/translator/src/test/kotlin/tests/callbacks_1/callbacks_1.c b/experiments/translator/src/test/kotlin/tests/callbacks_1/callbacks_1.c deleted file mode 100644 index 2e4fdfd61c0..00000000000 --- a/experiments/translator/src/test/kotlin/tests/callbacks_1/callbacks_1.c +++ /dev/null @@ -1,4 +0,0 @@ - -int apply_c(int x, int (*foo)(int)) { - return foo(x); -} diff --git a/experiments/translator/src/test/kotlin/tests/callbacks_1/callbacks_1.kt b/experiments/translator/src/test/kotlin/tests/callbacks_1/callbacks_1.kt deleted file mode 100644 index 6142fd0e975..00000000000 --- a/experiments/translator/src/test/kotlin/tests/callbacks_1/callbacks_1.kt +++ /dev/null @@ -1,26 +0,0 @@ - -external fun apply_c(arg: Int, x: (Int)-> Int): Int - -fun callback_1_inc(i: Int): Int { - return i + 1 -} - -fun callback_1_dec(i: Int): Int { - return i - 1 -} - -fun callback_1_apply(arg: Int, x: (Int) -> Int): Int { - return x(arg) -} - -fun compact_test(x: Int): Int { - return callback_1_apply(callback_1_apply(callback_1_apply(x, ::callback_1_inc), ::callback_1_inc), ::callback_1_dec) -} - -fun external_test(x: Int): Int { - return apply_c(apply_c(apply_c(x, ::callback_1_dec), ::callback_1_dec), ::callback_1_inc) -} - -fun mixed_test(x: Int): Int { - return callback_1_apply(apply_c(callback_1_apply(apply_c(callback_1_apply(x, ::callback_1_inc), ::callback_1_inc), ::callback_1_inc), ::callback_1_dec), ::callback_1_inc) -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/callbacks_1/callbacks_1.txt b/experiments/translator/src/test/kotlin/tests/callbacks_1/callbacks_1.txt deleted file mode 100644 index b52a69f4b95..00000000000 --- a/experiments/translator/src/test/kotlin/tests/callbacks_1/callbacks_1.txt +++ /dev/null @@ -1,6 +0,0 @@ -compact_test_Int(1) == 2 -compact_test_Int(3) == 4 -external_test_Int(3) == 2 -external_test_Int(4) == 3 -mixed_test_Int(1) == 4 -mixed_test_Int(9) == 12 diff --git a/experiments/translator/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt b/experiments/translator/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt deleted file mode 100644 index 38519d4616d..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_alignment_1/class_alignment_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -class class_alignment_1_class(var field1: Long, var field2: Int, var field3: Long) - - -fun class_alignment_1(): Long { - val b = class_alignment_1_class(100L, 200, 300L) - assert(b.field1 == 100L) - assert(b.field2 == 200) - assert(b.field3 == 300L) - return b.field3 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/class_alignment_1/class_alignment_1.txt b/experiments/translator/src/test/kotlin/tests/class_alignment_1/class_alignment_1.txt deleted file mode 100644 index 5a69fd59e36..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_alignment_1/class_alignment_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_alignment_1() == 300 diff --git a/experiments/translator/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.kt b/experiments/translator/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.kt deleted file mode 100644 index 053600335da..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.kt +++ /dev/null @@ -1,12 +0,0 @@ -class class_class_argument_1_slave - -class class_class_argument_1_master(val buffer: class_class_argument_1_slave) { - var pos = 99999 -} - - -fun class_class_argument_1(): Int { - val buffer = class_class_argument_1_slave() - val output = class_class_argument_1_master(buffer) - return output.pos -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.txt b/experiments/translator/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.txt deleted file mode 100644 index ce212b26272..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_class_argument_1/class_class_argument_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_class_argument_1() == 99999 diff --git a/experiments/translator/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.kt b/experiments/translator/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.kt deleted file mode 100644 index 06e3bce17f3..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -class class_default_argument_1_class(val classArg: Int) { - fun getDefaultValue(arg1: Int, arg2: Int = 11): Int { - return arg1 + arg2 - } -} - -fun class_default_argument_1(z:Int):Int{ - val instance = class_default_argument_1_class(11) - return instance.getDefaultValue(z) -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.txt b/experiments/translator/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.txt deleted file mode 100644 index 275f8749e76..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_default_argument_1/class_default_argument_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_default_argument_1_Int(34) == 45 diff --git a/experiments/translator/src/test/kotlin/tests/class_init_section_1/class_init_section_1.kt b/experiments/translator/src/test/kotlin/tests/class_init_section_1/class_init_section_1.kt deleted file mode 100644 index c072acd3d22..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_init_section_1/class_init_section_1.kt +++ /dev/null @@ -1,14 +0,0 @@ -class className(var z: Int) { - init { - this.z = this.z + 12345 - } - - fun getVal(): Int { - return this.z - } -} - -fun class_init_section_1(x: Int): Int { - val z = className(x) - return z.getVal() -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/class_init_section_1/class_init_section_1.txt b/experiments/translator/src/test/kotlin/tests/class_init_section_1/class_init_section_1.txt deleted file mode 100644 index 45ca7bb7f25..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_init_section_1/class_init_section_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_init_section_1_Int(523) == 12868 diff --git a/experiments/translator/src/test/kotlin/tests/class_method_access_1/class_method_access_1.kt b/experiments/translator/src/test/kotlin/tests/class_method_access_1/class_method_access_1.kt deleted file mode 100644 index 2ec083afedd..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_method_access_1/class_method_access_1.kt +++ /dev/null @@ -1,20 +0,0 @@ -class class_method_access_1_donor(var size: Int) { - fun getSizeVal(): Int { - return size + 4 - } -} - -class class_method_access_1_owner(val arg: class_method_access_1_donor) { - val tKIopsD = 56 - fun getSize(): Int { - return arg.getSizeVal() + 8 - } -} - - -fun class_method_access_1_test(x: Int): Int { - val instance_donor = class_method_access_1_donor(x) - val instance_owner = class_method_access_1_owner(instance_donor) - - return instance_owner.getSize() -} diff --git a/experiments/translator/src/test/kotlin/tests/class_method_access_1/class_method_access_1.txt b/experiments/translator/src/test/kotlin/tests/class_method_access_1/class_method_access_1.txt deleted file mode 100644 index a0bfb5a12c1..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_method_access_1/class_method_access_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_method_access_1_test_Int(110) == 122 diff --git a/experiments/translator/src/test/kotlin/tests/class_methods_1/class_methods_1.kt b/experiments/translator/src/test/kotlin/tests/class_methods_1/class_methods_1.kt deleted file mode 100644 index e96a4229bf4..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_methods_1/class_methods_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -class class_methods_1_class() { - fun method(t : Int): Int { - return t + 5 - } -} - -fun class_methods_1(zz: Int): Int { - val x = class_methods_1_class() - return x.method(zz) -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/class_methods_1/class_methods_1.txt b/experiments/translator/src/test/kotlin/tests/class_methods_1/class_methods_1.txt deleted file mode 100644 index 47c91b155cf..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_methods_1/class_methods_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_methods_1_Int(55) == 60 diff --git a/experiments/translator/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.kt b/experiments/translator/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.kt deleted file mode 100644 index aa04098aae1..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.kt +++ /dev/null @@ -1,12 +0,0 @@ -class class_reassignment_1_class(val field: Int) - -fun class_reassignment_1_base(): class_reassignment_1_class { - val instance = class_reassignment_1_class(567) - return instance -} - -fun class_reassignment_1(): Int { - var instance = class_reassignment_1_class(123) - instance = class_reassignment_1_base() - return instance.field -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.txt b/experiments/translator/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.txt deleted file mode 100644 index 1a15c1493a0..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_reassignment_1/class_reassignment_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_reassignment_1() == 567 diff --git a/experiments/translator/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.kt b/experiments/translator/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.kt deleted file mode 100644 index 0614be58541..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.kt +++ /dev/null @@ -1,15 +0,0 @@ -class class_reassignment_2_Node { - var left: class_reassignment_2_Node? = null - var right: class_reassignment_2_Node? = null - var value: Int = 0 -} - -fun class_reassignment_2(): Int { - val root: class_reassignment_2_Node = class_reassignment_2_Node() - root.value = 12 - root.left = class_reassignment_2_Node() - var current: class_reassignment_2_Node? = root - current = root.left - current!!.value = 10593 - return current.value + root.value -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.txt b/experiments/translator/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.txt deleted file mode 100644 index bc9cdca2635..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_reassignment_2/class_reassignment_2.txt +++ /dev/null @@ -1 +0,0 @@ -class_reassignment_2() == 10605 diff --git a/experiments/translator/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.kt b/experiments/translator/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.kt deleted file mode 100644 index 5b26f1dd992..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.kt +++ /dev/null @@ -1,18 +0,0 @@ -class class_variable_access_1_donor(var size: Int) { - val data: Int = 5 -} - -class class_variable_access_1_owner(val arg: class_variable_access_1_donor) { - val tKIopsD = 56 - fun getSize(): Int { - return arg.size + 8 - } -} - - -fun class_variable_access_1_test(x: Int): Int { - val instance_donor = class_variable_access_1_donor(x) - val instance_owner = class_variable_access_1_owner(instance_donor) - - return instance_owner.getSize() -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.txt b/experiments/translator/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.txt deleted file mode 100644 index 70a561973bc..00000000000 --- a/experiments/translator/src/test/kotlin/tests/class_variable_access_1/class_variable_access_1.txt +++ /dev/null @@ -1 +0,0 @@ -class_variable_access_1_test_Int(22) == 30 diff --git a/experiments/translator/src/test/kotlin/tests/classfields_1/classfields_1.kt b/experiments/translator/src/test/kotlin/tests/classfields_1/classfields_1.kt deleted file mode 100644 index 336e735340b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/classfields_1/classfields_1.kt +++ /dev/null @@ -1,19 +0,0 @@ - -class WithFields(var i: Int) { - - var j: Int - - init { - this.j = this.i - } -} - -fun test_simple_field(): Int { - val i = WithFields(1) - return i.j -} - -fun test_field_assignment(i: Int): Int { - val k = WithFields(i) - return k.j -} diff --git a/experiments/translator/src/test/kotlin/tests/classfields_1/classfields_1.txt b/experiments/translator/src/test/kotlin/tests/classfields_1/classfields_1.txt deleted file mode 100644 index c9752a96500..00000000000 --- a/experiments/translator/src/test/kotlin/tests/classfields_1/classfields_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -test_simple_field() == 1 -test_field_assignment_Int(10) == 10 diff --git a/experiments/translator/src/test/kotlin/tests/classfields_2/classfields_2.kt b/experiments/translator/src/test/kotlin/tests/classfields_2/classfields_2.kt deleted file mode 100644 index df314f3ef48..00000000000 --- a/experiments/translator/src/test/kotlin/tests/classfields_2/classfields_2.kt +++ /dev/null @@ -1,26 +0,0 @@ -class classfields_2_class { - var i = 0 - - fun method() { - i = 5 - } - - fun changeI(): Int { - method() - return i - } -} - -fun test1(): Int { - val main = classfields_2_class() - return main.changeI() -} - -fun test2(): Int { - val main = classfields_2_class() - return main.i -} - -fun test3(): Int { - return classfields_2_class().changeI() -} diff --git a/experiments/translator/src/test/kotlin/tests/classfields_2/classfields_2.txt b/experiments/translator/src/test/kotlin/tests/classfields_2/classfields_2.txt deleted file mode 100644 index bfd66e4ee12..00000000000 --- a/experiments/translator/src/test/kotlin/tests/classfields_2/classfields_2.txt +++ /dev/null @@ -1,3 +0,0 @@ -test1() == 5 -test2() == 0 -test3() == 5 diff --git a/experiments/translator/src/test/kotlin/tests/companion_object_1/companion_object_1.kt b/experiments/translator/src/test/kotlin/tests/companion_object_1/companion_object_1.kt deleted file mode 100644 index e5f449ac530..00000000000 --- a/experiments/translator/src/test/kotlin/tests/companion_object_1/companion_object_1.kt +++ /dev/null @@ -1,13 +0,0 @@ -class companion_object_1 { - companion object { - val fieldCompanion: Int = 5790 - - fun create(): Int { - return 5 - } - } -} - -fun companion_object_1_test(): Int { - return companion_object_1.create() -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/companion_object_1/companion_object_1.txt b/experiments/translator/src/test/kotlin/tests/companion_object_1/companion_object_1.txt deleted file mode 100644 index 36a4313f03d..00000000000 --- a/experiments/translator/src/test/kotlin/tests/companion_object_1/companion_object_1.txt +++ /dev/null @@ -1 +0,0 @@ -companion_object_1_test() == 5 diff --git a/experiments/translator/src/test/kotlin/tests/companion_object_2/companion_object_2.kt b/experiments/translator/src/test/kotlin/tests/companion_object_2/companion_object_2.kt deleted file mode 100644 index 8e41a27e35f..00000000000 --- a/experiments/translator/src/test/kotlin/tests/companion_object_2/companion_object_2.kt +++ /dev/null @@ -1,14 +0,0 @@ -class companion_object_2 { - companion object { - var fieldCompanion: Int = 5790 - - fun create(): Int { - return 5 - } - } -} - -fun companion_object_2_test(v: Int): Int { - companion_object_2.fieldCompanion = 239 + v - return companion_object_2.fieldCompanion -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/companion_object_2/companion_object_2.txt b/experiments/translator/src/test/kotlin/tests/companion_object_2/companion_object_2.txt deleted file mode 100644 index 15cd9d8666f..00000000000 --- a/experiments/translator/src/test/kotlin/tests/companion_object_2/companion_object_2.txt +++ /dev/null @@ -1 +0,0 @@ -companion_object_2_test_Int(5) == 244 diff --git a/experiments/translator/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.kt b/experiments/translator/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.kt deleted file mode 100644 index 0957a99f4c0..00000000000 --- a/experiments/translator/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.kt +++ /dev/null @@ -1,7 +0,0 @@ - -class complex_dot_expr_MyClass(val i: Int) - -fun gen(i: Int) = complex_dot_expr_MyClass(i) -fun test1(q: Int) = gen(q).i -fun test2(w: Int) = complex_dot_expr_MyClass(w).i - diff --git a/experiments/translator/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.txt b/experiments/translator/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.txt deleted file mode 100644 index 680416f84f3..00000000000 --- a/experiments/translator/src/test/kotlin/tests/complex_dot_expr/complex_dot_expr.txt +++ /dev/null @@ -1,2 +0,0 @@ -test1_Int(1) == 1 -test2_Int(2) == 2 diff --git a/experiments/translator/src/test/kotlin/tests/declaration_test_1/declaration_test_1.kt b/experiments/translator/src/test/kotlin/tests/declaration_test_1/declaration_test_1.kt deleted file mode 100644 index 8fe160d884c..00000000000 --- a/experiments/translator/src/test/kotlin/tests/declaration_test_1/declaration_test_1.kt +++ /dev/null @@ -1,18 +0,0 @@ -class declaration_test_1_cls() - -fun declaration_test_1_variable(): Int { - val a: Int - a = 85 - return a -} - -fun declaration_test_1_class_slave(): declaration_test_1_cls { - val a: declaration_test_1_cls - a = declaration_test_1_cls() - return a -} - - -fun declaration_test_1_class(): Int { - return if (declaration_test_1_class_slave() == null) 10 else 96799 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/declaration_test_1/declaration_test_1.txt b/experiments/translator/src/test/kotlin/tests/declaration_test_1/declaration_test_1.txt deleted file mode 100644 index f083d5e5193..00000000000 --- a/experiments/translator/src/test/kotlin/tests/declaration_test_1/declaration_test_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -declaration_test_1_variable() == 85 -declaration_test_1_class() == 96799 diff --git a/experiments/translator/src/test/kotlin/tests/dfs_1/dfs_1.kt b/experiments/translator/src/test/kotlin/tests/dfs_1/dfs_1.kt deleted file mode 100644 index dcd5fedb968..00000000000 --- a/experiments/translator/src/test/kotlin/tests/dfs_1/dfs_1.kt +++ /dev/null @@ -1,45 +0,0 @@ -class dfs_1_Node { - var left: dfs_1_Node? = null - var right: dfs_1_Node? = null - var value: Int = 0 -} - -fun dfs_1_search(x: dfs_1_Node, value: Int): dfs_1_Node? { - if (x.value == value) { - return x - } - - if (x.left != null) { - val result = dfs_1_search(x.left!!, value) - if (result != null) { - return result - } - } - if (x.right != null) { - val result = dfs_1_search(x.right!!, value) - if (result != null) { - return result - } - } - return null -} - -fun dfs_1(searchObject: Int): Int { - var i = 0 - val root: dfs_1_Node? = dfs_1_Node() - root!!.value = 111 - var current = root - while (i < 10) { - current!!.left = dfs_1_Node() - current.right = dfs_1_Node() - current.value = i - current = current.left - i++ - } - val result = dfs_1_search(root, searchObject) - if (result == null) { - return -101 - } else { - return result.value - } -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/dfs_1/dfs_1.txt b/experiments/translator/src/test/kotlin/tests/dfs_1/dfs_1.txt deleted file mode 100644 index 98f7941352e..00000000000 --- a/experiments/translator/src/test/kotlin/tests/dfs_1/dfs_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -dfs_1_Int(73) == -101 -dfs_1_Int(8) == 8 -dfs_1_Int(9) == 9 diff --git a/experiments/translator/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.kt b/experiments/translator/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.kt deleted file mode 100644 index d7379034506..00000000000 --- a/experiments/translator/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun different_type_binary_operator_1_shr(x: Int, y: Long): Long { - return y shr x -} - -fun different_type_binary_operator_1_shl(x: Int, y: Long): Long { - return y shl x -} - -fun different_type_binary_operator_1_ushr(x: Int, y: Long): Long { - return y ushr x -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.txt b/experiments/translator/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.txt deleted file mode 100644 index 2e6342034ce..00000000000 --- a/experiments/translator/src/test/kotlin/tests/different_type_binary_operator_1/different_type_binary_operator_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -different_type_binary_operator_1_shl_Int_Long(10, 5) == 5120 -different_type_binary_operator_1_shr_Int_Long(5, 5000) == 156 -different_type_binary_operator_1_ushr_Int_Long(5, 5000) == 156 diff --git a/experiments/translator/src/test/kotlin/tests/do_while_1/do_while_1.kt b/experiments/translator/src/test/kotlin/tests/do_while_1/do_while_1.kt deleted file mode 100644 index 528bf62c37b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/do_while_1/do_while_1.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun do_while_test_1(x: Int): Int { - var t = x - do { - t = t + 1 - } while (2 > 3) - return t -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/do_while_1/do_while_1.txt b/experiments/translator/src/test/kotlin/tests/do_while_1/do_while_1.txt deleted file mode 100644 index 623a6c1cd84..00000000000 --- a/experiments/translator/src/test/kotlin/tests/do_while_1/do_while_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -do_while_test_1_Int(5) == 6 -do_while_test_1_Int(57) == 58 diff --git a/experiments/translator/src/test/kotlin/tests/elvis_1/elvis_1.kt b/experiments/translator/src/test/kotlin/tests/elvis_1/elvis_1.kt deleted file mode 100644 index e586e3ca698..00000000000 --- a/experiments/translator/src/test/kotlin/tests/elvis_1/elvis_1.kt +++ /dev/null @@ -1,20 +0,0 @@ - -class elvis_1_MyClass(val i: Int) - -fun elvis_test_1(x: Int): Int { - var z: elvis_1_MyClass? = null - - if (x > 1) { - z = elvis_1_MyClass(1) - } else { - } - - z ?: return 0 - return 1 -} - -fun elvis_test_2(): Int { - val i: elvis_1_MyClass? = null - i ?: return 1 - return 0 -} diff --git a/experiments/translator/src/test/kotlin/tests/elvis_1/elvis_1.txt b/experiments/translator/src/test/kotlin/tests/elvis_1/elvis_1.txt deleted file mode 100644 index 5d10fe216cc..00000000000 --- a/experiments/translator/src/test/kotlin/tests/elvis_1/elvis_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -elvis_test_1_Int(0) == 0 -elvis_test_1_Int(2) == 1 -elvis_test_2() == 1 diff --git a/experiments/translator/src/test/kotlin/tests/enum_complex/enum_complex.kt b/experiments/translator/src/test/kotlin/tests/enum_complex/enum_complex.kt deleted file mode 100644 index 3754ffc5bb2..00000000000 --- a/experiments/translator/src/test/kotlin/tests/enum_complex/enum_complex.kt +++ /dev/null @@ -1,20 +0,0 @@ - -class Holder() { - - enum class nested(val id: Int) { - FIRST(0), - SECOND(1), - THIRD(3); - - companion object { - fun functor(ord: Int): Int { - return nested.FIRST.id - } - } - } -} - -fun enum_complex_test1(): Int { - val h = Holder() - return Holder.nested.functor(0) -} diff --git a/experiments/translator/src/test/kotlin/tests/enum_complex/enum_complex.txt b/experiments/translator/src/test/kotlin/tests/enum_complex/enum_complex.txt deleted file mode 100644 index 4eea6541a24..00000000000 --- a/experiments/translator/src/test/kotlin/tests/enum_complex/enum_complex.txt +++ /dev/null @@ -1 +0,0 @@ -enum_complex_test1() == 0 diff --git a/experiments/translator/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt b/experiments/translator/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt deleted file mode 100644 index b9aa36677d4..00000000000 --- a/experiments/translator/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.kt +++ /dev/null @@ -1,4 +0,0 @@ - -fun enum_field_test1(i: Byte): Int { - return WireType.from(i).id -} diff --git a/experiments/translator/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.txt b/experiments/translator/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.txt deleted file mode 100644 index b569ec5c82d..00000000000 --- a/experiments/translator/src/test/kotlin/tests/enum_inner_fields/enum_inner_fields.txt +++ /dev/null @@ -1,2 +0,0 @@ -enum_field_test1_Byte(1) == 1 -enum_field_test1_Byte(2) == 2 diff --git a/experiments/translator/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.kt b/experiments/translator/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.kt deleted file mode 100644 index 951a1fb499b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.kt +++ /dev/null @@ -1,12 +0,0 @@ -fun floating_point_operators_1_double_leq(x: Double, y: Double): Int { - if (x < y){ - return 1 - } - else{ - return 0 - } -} - -fun floating_point_operators_1_getValue(b: Boolean): Boolean{ - return b -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.txt b/experiments/translator/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.txt deleted file mode 100644 index af281b291ce..00000000000 --- a/experiments/translator/src/test/kotlin/tests/floating_point_operators_1/floating_point_operators_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -floating_point_operators_1_double_leq_Double_Double(14.9301, 5.6) == 0 -floating_point_operators_1_double_leq_Double_Double(1.49301, 5.6) == 1 diff --git a/experiments/translator/src/test/kotlin/tests/for_1/for_1.kt b/experiments/translator/src/test/kotlin/tests/for_1/for_1.kt deleted file mode 100644 index a540d0fe8ef..00000000000 --- a/experiments/translator/src/test/kotlin/tests/for_1/for_1.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun for_1_simple(): Int { - var sum = 0 - for (i in 10..20) { - sum += i - } - return sum -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/for_1/for_1.txt b/experiments/translator/src/test/kotlin/tests/for_1/for_1.txt deleted file mode 100644 index 3fa1d39457b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/for_1/for_1.txt +++ /dev/null @@ -1 +0,0 @@ -for_1_simple() == 165 diff --git a/experiments/translator/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.kt b/experiments/translator/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.kt deleted file mode 100644 index d61ee8e9c67..00000000000 --- a/experiments/translator/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.kt +++ /dev/null @@ -1,59 +0,0 @@ -class function_default_arguments_1_argClass(val classArgument: Int) - -fun function_default_arguments_1_add(x: Int, t: function_default_arguments_1_argClass = function_default_arguments_1_argClass(124), y: Int = 53, z: Int = 777): Int { - return x + y -} - -fun function_default_arguments_1_add_class(x: Int, t: function_default_arguments_1_argClass = function_default_arguments_1_argClass(124), y: Int = 53, z: Int = 777): Int { - return x + t.classArgument -} - -fun function_default_arguments_1_add_class_arg(): Int { - return function_default_arguments_1_add_class(190) -} - -fun function_default_arguments_1_mixed(): Int { - return function_default_arguments_1_add(23, t = function_default_arguments_1_argClass(29), z = 8) -} - -fun function_default_arguments_1_last_missed_fun(z: Int, u: Int = 954): Int { - return z + u -} - -fun function_default_arguments_1_last_missed(x: Int): Int { - return function_default_arguments_1_last_missed_fun(x) -} - -fun function_default_arguments_1_last_present(x: Int): Int { - return function_default_arguments_1_last_missed_fun(x, 29) -} - -fun function_default_arguments_1_position_fun(first: Int, second: Int = 324 - , third: Int = 2531): Int { - return first + 2 * second + 3 * third -} - -fun function_default_arguments_1_position_third_only(x: Int): Int { - return function_default_arguments_1_position_fun(11, third = x) -} - -fun function_default_arguments_1_position_all_reverse(x: Int): Int { - return function_default_arguments_1_position_fun(11, third = x, second = 32) -} - -fun function_default_arguments_1_position_all_right_order(x: Int): Int { - return function_default_arguments_1_position_fun(11, second = 32, third = x) -} - -fun function_default_arguments_1_position_all_default(x: Int): Int { - return function_default_arguments_1_position_fun(x) -} - -fun function_default_arguments_1_all_position_fun(first: Int = 31, second: Int = 32 - , third: Int = 33): Int { - return first + 2 * second + 3 * third -} - -fun function_default_arguments_1_all_position(): Int { - return function_default_arguments_1_all_position_fun() -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.txt b/experiments/translator/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.txt deleted file mode 100644 index 11457898ed6..00000000000 --- a/experiments/translator/src/test/kotlin/tests/function_default_arguments_1/function_default_arguments_1.txt +++ /dev/null @@ -1,9 +0,0 @@ -function_default_arguments_1_mixed() == 76 -function_default_arguments_1_last_missed_Int(23) == 977 -function_default_arguments_1_last_present_Int(25) == 54 -function_default_arguments_1_position_third_only_Int(19) == 716 -function_default_arguments_1_position_all_reverse_Int(17) == 126 -function_default_arguments_1_position_all_right_order_Int(17) == 126 -function_default_arguments_1_position_all_default_Int(27) ==8268 -function_default_arguments_1_all_position() == 194 -function_default_arguments_1_add_class_arg() == 314 diff --git a/experiments/translator/src/test/kotlin/tests/function_eq/function_eq.kt b/experiments/translator/src/test/kotlin/tests/function_eq/function_eq.kt deleted file mode 100644 index c4a81cd9a52..00000000000 --- a/experiments/translator/src/test/kotlin/tests/function_eq/function_eq.kt +++ /dev/null @@ -1,7 +0,0 @@ -class function_eq_MyClass(val i: Int) - -fun function_eq_inc(i: Int) = i + 1 -fun function_eq_dinc(i: Int) = function_eq_inc(function_eq_inc(i)) -fun function_eq_sum(i: Int, j: Int) = i + j -fun function_eq_gen() = function_eq_MyClass(1) - diff --git a/experiments/translator/src/test/kotlin/tests/function_eq/function_eq.txt b/experiments/translator/src/test/kotlin/tests/function_eq/function_eq.txt deleted file mode 100644 index d82c425eb18..00000000000 --- a/experiments/translator/src/test/kotlin/tests/function_eq/function_eq.txt +++ /dev/null @@ -1,3 +0,0 @@ -function_eq_inc_Int(1) == 2 -function_eq_dinc_Int(1) == 3 -function_eq_sum_Int_Int(1, 1) == 2 \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/function_extensions_1/function_extensions_1.kt b/experiments/translator/src/test/kotlin/tests/function_extensions_1/function_extensions_1.kt deleted file mode 100644 index 8629bc20b33..00000000000 --- a/experiments/translator/src/test/kotlin/tests/function_extensions_1/function_extensions_1.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun Int.compareTo(x: Int) : Int{ - return this + x + 5 -} - -fun function_extensions_1(x : Int): Int { - return x.compareTo(1) + 39.compareTo(123) -} diff --git a/experiments/translator/src/test/kotlin/tests/function_extensions_1/function_extensions_1.txt b/experiments/translator/src/test/kotlin/tests/function_extensions_1/function_extensions_1.txt deleted file mode 100644 index 02d21684ce2..00000000000 --- a/experiments/translator/src/test/kotlin/tests/function_extensions_1/function_extensions_1.txt +++ /dev/null @@ -1 +0,0 @@ -function_extensions_1_Int(118) == 291 diff --git a/experiments/translator/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt b/experiments/translator/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt deleted file mode 100644 index 1e752421e68..00000000000 --- a/experiments/translator/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.kt +++ /dev/null @@ -1,31 +0,0 @@ -class function_extensions_double_argument_1_slave(val buffer: IntArray) { - var pos = 0 - - fun read(): Int { - pos += 1 - val pe = pos - 1 - return buffer[pe] - } - - fun isAtEnd(): Boolean { - return pos >= buffer.size - } -} - -fun function_extensions_double_argument_1_master(inputStream: function_extensions_double_argument_1_slave): Int { - return inputStream.read().toInt() -} - -fun function_extensions_double_argument_1(): Int { - val array = IntArray(7) - array[0] = 129 - array[1] = 20 - array[2] = 333 - array[3] = 444 - array[4] = 555 - array[5] = 666 - array[6] = 777 - - val kis = function_extensions_double_argument_1_slave(array) - return function_extensions_double_argument_1_master(kis) -} diff --git a/experiments/translator/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.txt b/experiments/translator/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.txt deleted file mode 100644 index 9707169f1ff..00000000000 --- a/experiments/translator/src/test/kotlin/tests/function_extensions_double_argument_1/function_extensions_double_argument_1.txt +++ /dev/null @@ -1 +0,0 @@ -function_extensions_double_argument_1() == 129 diff --git a/experiments/translator/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.kt b/experiments/translator/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.kt deleted file mode 100644 index be0cf8f2055..00000000000 --- a/experiments/translator/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.kt +++ /dev/null @@ -1,22 +0,0 @@ -class get_set_operators_1_class { - var cap = 9 - - operator fun get(x: Int): Int { - return x + 8 - } - - operator fun set(x: Int, y: Int): Unit { - cap = x + y - } -} - -fun get_set_operators_1_get(arg: Int): Int { - val b = get_set_operators_1_class() - return b[arg] -} - -fun get_set_operators_1_set(ind: Int, arg: Int): Int { - val b = get_set_operators_1_class() - b[ind] = arg - return b.cap -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.txt b/experiments/translator/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.txt deleted file mode 100644 index 3d5585514ca..00000000000 --- a/experiments/translator/src/test/kotlin/tests/get_set_operators_1/get_set_operators_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -get_set_operators_1_get_Int(210) == 218 -get_set_operators_1_set_Int_Int(8, 903) == 911 diff --git a/experiments/translator/src/test/kotlin/tests/global_vars_1/global_vars_1.kt b/experiments/translator/src/test/kotlin/tests/global_vars_1/global_vars_1.kt deleted file mode 100644 index e3b461b4d81..00000000000 --- a/experiments/translator/src/test/kotlin/tests/global_vars_1/global_vars_1.kt +++ /dev/null @@ -1,11 +0,0 @@ - -val MY_FIRST_CONSTANT: Int = 3000 -val MY_SECOND_CONSTANT: Int = 4000 - -fun global_test1(): Int { - return MY_FIRST_CONSTANT -} - -fun global_test2(): Int { - return MY_SECOND_CONSTANT + 1 -} diff --git a/experiments/translator/src/test/kotlin/tests/global_vars_1/global_vars_1.txt b/experiments/translator/src/test/kotlin/tests/global_vars_1/global_vars_1.txt deleted file mode 100644 index 49891d465b9..00000000000 --- a/experiments/translator/src/test/kotlin/tests/global_vars_1/global_vars_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -global_test1() == 3000 -global_test2() == 4001 diff --git a/experiments/translator/src/test/kotlin/tests/if_1/if_1.kt b/experiments/translator/src/test/kotlin/tests/if_1/if_1.kt deleted file mode 100644 index 59a1cace462..00000000000 --- a/experiments/translator/src/test/kotlin/tests/if_1/if_1.kt +++ /dev/null @@ -1,30 +0,0 @@ -fun if_test_1(x: Int): Int { - var a = 0 - if (x > 5) { - a = 10 - } else { - - } - return a -} - -class MyClass_if_1() - -fun if_test_null(x: Int): Int { - val y: MyClass_if_1? = null - if (y == null) { - return 1 - } else { - return 0 - } -} - -fun if_test_null_2(x: Int): Int { - val y: MyClass_if_1? = MyClass_if_1() - - if (y == null) { - return 1 - } else { - return 0 - } -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/if_1/if_1.txt b/experiments/translator/src/test/kotlin/tests/if_1/if_1.txt deleted file mode 100644 index 04b802d5ac2..00000000000 --- a/experiments/translator/src/test/kotlin/tests/if_1/if_1.txt +++ /dev/null @@ -1,4 +0,0 @@ -if_test_1_Int(11) == 10 -if_test_1_Int(0) == 0 -if_test_null_Int(0) == 1 -if_test_null_2_Int(0) == 0 diff --git a/experiments/translator/src/test/kotlin/tests/if_2/if_2.kt b/experiments/translator/src/test/kotlin/tests/if_2/if_2.kt deleted file mode 100644 index a8285242c9e..00000000000 --- a/experiments/translator/src/test/kotlin/tests/if_2/if_2.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun if_without_else_2(x: Int): Int { - var res = 1256 - if (x > 10) { - res = res + 64 - } - return res -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/if_2/if_2.txt b/experiments/translator/src/test/kotlin/tests/if_2/if_2.txt deleted file mode 100644 index 8032016fa28..00000000000 --- a/experiments/translator/src/test/kotlin/tests/if_2/if_2.txt +++ /dev/null @@ -1,2 +0,0 @@ -if_without_else_2_Int(5) == 1256 -if_without_else_2_Int(55) == 1320 diff --git a/experiments/translator/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.kt b/experiments/translator/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.kt deleted file mode 100644 index 3d0dc982a00..00000000000 --- a/experiments/translator/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.kt +++ /dev/null @@ -1,3 +0,0 @@ -fun if_boolean_argument_1(value: Boolean): Int { - return if (value) 11 else 411 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.txt b/experiments/translator/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.txt deleted file mode 100644 index ac65c173312..00000000000 --- a/experiments/translator/src/test/kotlin/tests/if_boolean_argument_1/if_boolean_argument_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -if_boolean_argument_1_Boolean(1) == 11 -if_boolean_argument_1_Boolean(0) == 411 diff --git a/experiments/translator/src/test/kotlin/tests/if_expression_1/if_expression_1.kt b/experiments/translator/src/test/kotlin/tests/if_expression_1/if_expression_1.kt deleted file mode 100644 index f54b5975929..00000000000 --- a/experiments/translator/src/test/kotlin/tests/if_expression_1/if_expression_1.kt +++ /dev/null @@ -1,9 +0,0 @@ -fun if_expression_1(x: Int): Int{ - return if (x > 55) 2323 else 678934 -} - -fun if_expression_1_variable(x: Int): Int{ - val first = 5 - val second = 7 - return if (x > 55) first else second -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/if_expression_1/if_expression_1.txt b/experiments/translator/src/test/kotlin/tests/if_expression_1/if_expression_1.txt deleted file mode 100644 index 7de745ef4c7..00000000000 --- a/experiments/translator/src/test/kotlin/tests/if_expression_1/if_expression_1.txt +++ /dev/null @@ -1,4 +0,0 @@ -if_expression_1_Int(56) == 2323 -if_expression_1_Int(-58) == 678934 -if_expression_1_variable_Int(100) == 5 -if_expression_1_variable_Int(-100) == 7 diff --git a/experiments/translator/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.kt b/experiments/translator/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.kt deleted file mode 100644 index 9e933327051..00000000000 --- a/experiments/translator/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.kt +++ /dev/null @@ -1,21 +0,0 @@ -class initialization_in_place_and_this_1_slave_1(var size: Int) - -class initialization_in_place_and_this_1_master(var buffer: initialization_in_place_and_this_1_slave_1) { - var output = initialization_in_place_and_this_1_slave_2(buffer) -} - -class initialization_in_place_and_this_1_slave_2(val buffer: initialization_in_place_and_this_1_slave_1) { - var pos = 897 - var sz: Int - - init { - sz = buffer.size - } -} - - -fun initialization_in_place_and_this_1(): Int { - val slave = initialization_in_place_and_this_1_slave_1(100) - val master = initialization_in_place_and_this_1_master(slave) - return master.output.sz -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.txt b/experiments/translator/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.txt deleted file mode 100644 index c36054ac9bd..00000000000 --- a/experiments/translator/src/test/kotlin/tests/initialization_in_place_and_this_1/initialization_in_place_and_this_1.txt +++ /dev/null @@ -1 +0,0 @@ -initialization_in_place_and_this_1() == 100 diff --git a/experiments/translator/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.kt b/experiments/translator/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.kt deleted file mode 100644 index 7fd9f5e7010..00000000000 --- a/experiments/translator/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.kt +++ /dev/null @@ -1,8 +0,0 @@ -class initialized_class_fields_1_class { - var pos: Int = 524 -} - -fun initialized_class_fields_1(): Int { - val instance = initialized_class_fields_1_class() - return instance.pos -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.txt b/experiments/translator/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.txt deleted file mode 100644 index b84e32f984d..00000000000 --- a/experiments/translator/src/test/kotlin/tests/initialized_class_fields_1/initialized_class_fields_1.txt +++ /dev/null @@ -1 +0,0 @@ -initialized_class_fields_1() == 524 diff --git a/experiments/translator/src/test/kotlin/tests/intarray_1/intarray_1.kt b/experiments/translator/src/test/kotlin/tests/intarray_1/intarray_1.kt deleted file mode 100644 index 7260c911f01..00000000000 --- a/experiments/translator/src/test/kotlin/tests/intarray_1/intarray_1.kt +++ /dev/null @@ -1,5 +0,0 @@ -fun intarray_1(x: Int): Int { - val z = IntArray(10) - z.set(1, x) - return z.get(1) -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/intarray_1/intarray_1.txt b/experiments/translator/src/test/kotlin/tests/intarray_1/intarray_1.txt deleted file mode 100644 index c80b9ebecd9..00000000000 --- a/experiments/translator/src/test/kotlin/tests/intarray_1/intarray_1.txt +++ /dev/null @@ -1 +0,0 @@ -intarray_1_Int(123) == 123 diff --git a/experiments/translator/src/test/kotlin/tests/long_operations_1/long_operations_1.kt b/experiments/translator/src/test/kotlin/tests/long_operations_1/long_operations_1.kt deleted file mode 100644 index 9d89e8603c5..00000000000 --- a/experiments/translator/src/test/kotlin/tests/long_operations_1/long_operations_1.kt +++ /dev/null @@ -1,5 +0,0 @@ -fun long_operations_1_Multiplication():Int { - assert(546344378L * 54321678L == 29678343378826284L) - assert(4556656L*67879230 == 309302300654880L) - return 29 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/long_operations_1/long_operations_1.txt b/experiments/translator/src/test/kotlin/tests/long_operations_1/long_operations_1.txt deleted file mode 100644 index 9ed3453cf6b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/long_operations_1/long_operations_1.txt +++ /dev/null @@ -1 +0,0 @@ -long_operations_1_Multiplication() == 29 diff --git a/experiments/translator/src/test/kotlin/tests/nested_classes/nested_classes.kt b/experiments/translator/src/test/kotlin/tests/nested_classes/nested_classes.kt deleted file mode 100644 index c0dfd2b4f93..00000000000 --- a/experiments/translator/src/test/kotlin/tests/nested_classes/nested_classes.kt +++ /dev/null @@ -1,24 +0,0 @@ - -class Outer() { - - class Nested(var i: Int) { - - fun test(): Int { - this.i = 5 - return this.i - } - } -} - -fun nested_test_1(k: Int): Int { - val j = Outer.Nested(k - 1) - j.i = k - - return j.i -} - -fun nested_test_2(k: Int): Int { - val j = Outer.Nested(k - 1) - - return j.test() -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/nested_classes/nested_classes.txt b/experiments/translator/src/test/kotlin/tests/nested_classes/nested_classes.txt deleted file mode 100644 index bf3c12da2a9..00000000000 --- a/experiments/translator/src/test/kotlin/tests/nested_classes/nested_classes.txt +++ /dev/null @@ -1,2 +0,0 @@ -nested_test_1_Int(1) == 1 -nested_test_2_Int(1) == 5 diff --git a/experiments/translator/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt b/experiments/translator/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt deleted file mode 100644 index 6c767687bff..00000000000 --- a/experiments/translator/src/test/kotlin/tests/null_comparison_1/null_comparison_1.kt +++ /dev/null @@ -1,32 +0,0 @@ -class null_comparison_1_class - -fun null_comparison_1_getClass(): null_comparison_1_class? { - return null -} - -fun null_comparison_1(): Int { - val a: null_comparison_1_class? = null_comparison_1_getClass() - println(if (a == null) 555 else 9990) - if (a == null) { - return 87 - } - return 945 -} - -fun null_comparison_1_reassigned(): Int { - var a: null_comparison_1_class? = null_comparison_1_class() - a = null_comparison_1_getClass() - if (a == null) { - return 87 - } - return 945 -} - -fun null_comparison_1_declaration(): Int { - val a: null_comparison_1_class? - a = null_comparison_1_getClass() - if (a == null) { - return 87 - } - return 945 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/null_comparison_1/null_comparison_1.txt b/experiments/translator/src/test/kotlin/tests/null_comparison_1/null_comparison_1.txt deleted file mode 100644 index 697fbb8bfa7..00000000000 --- a/experiments/translator/src/test/kotlin/tests/null_comparison_1/null_comparison_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -null_comparison_1() == 87 -null_comparison_1_reassigned() == 87 -null_comparison_1_declaration() == 87 diff --git a/experiments/translator/src/test/kotlin/tests/nullable_1/nullable_1.kt b/experiments/translator/src/test/kotlin/tests/nullable_1/nullable_1.kt deleted file mode 100644 index 854042d2a9d..00000000000 --- a/experiments/translator/src/test/kotlin/tests/nullable_1/nullable_1.kt +++ /dev/null @@ -1,30 +0,0 @@ -class nullable_1_MyAwesomeClass(var i: Int) - -fun nullable_1_test(i: Int): Int { - var x: nullable_1_MyAwesomeClass? = null - x = nullable_1_MyAwesomeClass(i) - return x.i -} - -fun nullable_1_test_2(i: Int): Int { - var x: nullable_1_MyAwesomeClass? = nullable_1_MyAwesomeClass(i) - x = null - x = nullable_1_MyAwesomeClass(i) - - return x.i + 1 -} - -fun nullable_1_test_2_npe_operator(i: Int): Int { - val x: nullable_1_MyAwesomeClass? = nullable_1_MyAwesomeClass(i) - x!! - return x.i + 555 -} - -fun nullable_1_test_null_return_slave():nullable_1_MyAwesomeClass?{ - return null -} - -fun nullable_1_test_null_return():Int{ - return 11 - //return if (nullable_1_test_null_return_slave() == null) 11 else -24 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/nullable_1/nullable_1.txt b/experiments/translator/src/test/kotlin/tests/nullable_1/nullable_1.txt deleted file mode 100644 index 94d6b6a5c9b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/nullable_1/nullable_1.txt +++ /dev/null @@ -1,4 +0,0 @@ -nullable_1_test_Int(1) == 1 -nullable_1_test_2_Int(4) == 5 -nullable_1_test_2_npe_operator_Int(23) == 578 -nullable_1_test_null_return() == 11 diff --git a/experiments/translator/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.kt b/experiments/translator/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.kt deleted file mode 100644 index 71f3a410e08..00000000000 --- a/experiments/translator/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.kt +++ /dev/null @@ -1,32 +0,0 @@ -class nullable_class_fields_1_class { - var left: nullable_class_fields_1_class? = null - var right: Int? = null -} - -fun nullable_class_fields_1_primitives(): Int { - val a = nullable_class_fields_1_class() - if (a.right == null) { - return 29 - } else { - return 28 - } -} - -fun nullable_class_fields_1_classes(): Int { - val a = nullable_class_fields_1_class() - if (a.left == null) { - return 29 - } else { - return 28 - } -} - -fun nullable_class_fields_1_classes_not_null(): Int { - val a = nullable_class_fields_1_class() - a.left = nullable_class_fields_1_class() - if (a.left == null) { - return 29 - } else { - return 28 - } -} diff --git a/experiments/translator/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.txt b/experiments/translator/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.txt deleted file mode 100644 index 3269ec40847..00000000000 --- a/experiments/translator/src/test/kotlin/tests/nullable_class_fields_1/nullable_class_fields_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -nullable_class_fields_1_primitives() == 29 -nullable_class_fields_1_classes() == 29 -nullable_class_fields_1_classes_not_null() == 28 diff --git a/experiments/translator/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.kt b/experiments/translator/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.kt deleted file mode 100644 index 2f8d1b053d9..00000000000 --- a/experiments/translator/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.kt +++ /dev/null @@ -1,41 +0,0 @@ -fun nullable_primitive_types_1_small(): Int { - var variable: Int? = null - variable = 29 - val art: Int? = variable - return art!! -} - -fun nullable_primitive_types_1_extern(x: Int): Int { - val variable: Int? = x - val art: Int? = variable!! + 8 - return art!! -} - -fun nullable_primitive_types_1_if_null(): Int { - val variable: Int? = null - if (variable == null) { - return 11 - } else { - return 2245 - } -} - -fun nullable_primitive_types_1_if_not_null(): Int { - val variable: Int? = null - if (variable != null) { - return 11 - } else { - return 2245 - } -} - -fun nullable_primitive_types_1_reassignment(): Int { - var z: Int? = 32 - z = null - val r = z - if (r == null) { - return 5678 - } else { - return 13 - } -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.txt b/experiments/translator/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.txt deleted file mode 100644 index 34fb6ab22e3..00000000000 --- a/experiments/translator/src/test/kotlin/tests/nullable_primitive_types_1/nullable_primitive_types_1.txt +++ /dev/null @@ -1,5 +0,0 @@ -nullable_primitive_types_1_small() == 29 -nullable_primitive_types_1_extern_Int(11) == 19 -nullable_primitive_types_1_if_null() == 11 -nullable_primitive_types_1_if_not_null() == 2245 -nullable_primitive_types_1_reassignment() == 5678 diff --git a/experiments/translator/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.kt b/experiments/translator/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.kt deleted file mode 100644 index f28935d2e7f..00000000000 --- a/experiments/translator/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.kt +++ /dev/null @@ -1,13 +0,0 @@ -fun numeric_literals_1(x: Int): Int { - return x -} - -fun numeric_literals_1_LL(): Long { - val k = 320L - return k -} - -fun numeric_literals_1_Binary(): Int { - val k = 0b01111111 - return k -} diff --git a/experiments/translator/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.txt b/experiments/translator/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.txt deleted file mode 100644 index 067b988201b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/numeric_literals_1/numeric_literals_1.txt +++ /dev/null @@ -1,3 +0,0 @@ -numeric_literals_1_Int(0x20) == 32 -numeric_literals_1_LL() == 320 -numeric_literals_1_Binary() == 127 diff --git a/experiments/translator/src/test/kotlin/tests/object_1/object_1.kt b/experiments/translator/src/test/kotlin/tests/object_1/object_1.kt deleted file mode 100644 index 4c1cc3eac15..00000000000 --- a/experiments/translator/src/test/kotlin/tests/object_1/object_1.kt +++ /dev/null @@ -1,16 +0,0 @@ -object Singleton { - - val i: Int = 123456789 - - fun create(x : Int): Int { - return x * 8 - } -} - -fun singleton_test(i: Int): Int { - return Singleton.create(i) -} - -fun singleton_test2(): Int { - return Singleton.i -} diff --git a/experiments/translator/src/test/kotlin/tests/object_1/object_1.txt b/experiments/translator/src/test/kotlin/tests/object_1/object_1.txt deleted file mode 100644 index b98970c95f2..00000000000 --- a/experiments/translator/src/test/kotlin/tests/object_1/object_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -singleton_test_Int(5) == 40 -singleton_test2() == 123456789 diff --git a/experiments/translator/src/test/kotlin/tests/postfix_1/postfix_1.kt b/experiments/translator/src/test/kotlin/tests/postfix_1/postfix_1.kt deleted file mode 100644 index 593be691da8..00000000000 --- a/experiments/translator/src/test/kotlin/tests/postfix_1/postfix_1.kt +++ /dev/null @@ -1,35 +0,0 @@ -fun postfix_1_plus_before(x: Int): Int { - var xx = x - val z = xx++ - return z -} - -fun postfix_1_plus_after(x: Int): Int { - var xx = x - val z = xx++ - return xx -} - -fun postfix_1_plus_inside(x: Int): Int { - var xx = x - xx++ - return xx -} - -fun postfix_1_minus_before(x: Int): Int { - var xx = x - val z = xx-- - return z -} - -fun postfix_1_minus_after(x: Int): Int { - var xx = x - val z = xx-- - return xx -} - -fun postfix_1_minus_inside(x: Int): Int { - var xx = x - xx-- - return xx -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/postfix_1/postfix_1.txt b/experiments/translator/src/test/kotlin/tests/postfix_1/postfix_1.txt deleted file mode 100644 index eca52ca3003..00000000000 --- a/experiments/translator/src/test/kotlin/tests/postfix_1/postfix_1.txt +++ /dev/null @@ -1,6 +0,0 @@ -postfix_1_plus_before_Int(20) == 20 -postfix_1_plus_after_Int(20) == 21 -postfix_1_plus_inside_Int(20) == 21 -postfix_1_minus_before_Int(20) == 20 -postfix_1_minus_after_Int(20) == 19 -postfix_1_minus_inside_Int(20) == 19 diff --git a/experiments/translator/src/test/kotlin/tests/primitives_1/primitives_1.kt b/experiments/translator/src/test/kotlin/tests/primitives_1/primitives_1.kt deleted file mode 100644 index ca3ea2ee390..00000000000 --- a/experiments/translator/src/test/kotlin/tests/primitives_1/primitives_1.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun testCastToByte(X : Byte): Boolean{ - return 34.toByte() == X -} - -fun testCastToInt(X : Int): Boolean{ - return 34.toInt() == X -} - -fun testCastToShort(X : Short): Boolean{ - return 34.toShort() == X -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/primitives_1/primitives_1.txt b/experiments/translator/src/test/kotlin/tests/primitives_1/primitives_1.txt deleted file mode 100644 index 3da9e622a39..00000000000 --- a/experiments/translator/src/test/kotlin/tests/primitives_1/primitives_1.txt +++ /dev/null @@ -1,6 +0,0 @@ -testCastToInt_Int(32) == 0 -testCastToInt_Int(34) == 1 -testCastToByte_Byte(32) == 0 -testCastToByte_Byte(34) == 1 -testCastToShort_Short(32) == 0 -testCastToShort_Short(34) == 1 diff --git a/experiments/translator/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt b/experiments/translator/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt deleted file mode 100644 index 706ab3efe01..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.kt +++ /dev/null @@ -1,1073 +0,0 @@ -class CrossBranch private constructor () { - //========== Properties =========== - var errorCode: Int = 0 - - //========== Nested classes declarations =========== - class Grandfather private constructor (var rf: CrossBranch.Grandfather.RightFather) { - //========== Properties =========== - //message rf = 1 - - var errorCode: Int = 0 - - //========== Nested classes declarations =========== - class LeftFather private constructor () { - //========== Properties =========== - var errorCode: Int = 0 - - //========== Nested classes declarations =========== - class LeftLeftSon private constructor (var son_field: Int) { - //========== Properties =========== - //int32 son_field = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 son_field = 1 - if (son_field != 0) { - output.writeInt32 (1, son_field) - } - - } - - fun mergeWith (other: CrossBranch.Grandfather.LeftFather.LeftLeftSon) { - son_field = other.son_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - return size - } - - //========== Builder =========== - class BuilderLeftLeftSon constructor (var son_field: Int) { - //========== Properties =========== - //int32 son_field = 1 - fun setSon_field(value: Int): CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon { - son_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 son_field = 1 - if (son_field != 0) { - output.writeInt32 (1, son_field) - } - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.LeftFather.LeftLeftSon { - val res = CrossBranch.Grandfather.LeftFather.LeftLeftSon(son_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - son_field = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - return size - } - - } - - } - - class LeftRightSon private constructor (var son_field: Int) { - //========== Properties =========== - //int32 son_field = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 son_field = 1 - if (son_field != 0) { - output.writeInt32 (1, son_field) - } - - } - - fun mergeWith (other: CrossBranch.Grandfather.LeftFather.LeftRightSon) { - son_field = other.son_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - return size - } - - //========== Builder =========== - class BuilderLeftRightSon constructor (var son_field: Int) { - //========== Properties =========== - //int32 son_field = 1 - fun setSon_field(value: Int): CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon { - son_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 son_field = 1 - if (son_field != 0) { - output.writeInt32 (1, son_field) - } - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.LeftFather.LeftRightSon { - val res = CrossBranch.Grandfather.LeftFather.LeftRightSon(son_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - son_field = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != 0) { - size += WireFormat.getInt32Size(1, son_field) - } - return size - } - - } - - } - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - } - - fun mergeWith (other: CrossBranch.Grandfather.LeftFather) { - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.LeftFather.BuilderLeftFather() - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.LeftFather.BuilderLeftFather() - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - val size = 0 - return size - } - - //========== Builder =========== - class BuilderLeftFather constructor () { - //========== Properties =========== - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.LeftFather { - val res = CrossBranch.Grandfather.LeftFather() - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.LeftFather.BuilderLeftFather { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.LeftFather.BuilderLeftFather { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - val size = 0 - return size - } - - } - - } - - class RightFather private constructor (var rls: CrossBranch.Grandfather.RightFather.RightLeftSon, var rrs: CrossBranch.Grandfather.RightFather.RightRightSon) { - //========== Properties =========== - //message rls = 1 - - //message rrs = 2 - - var errorCode: Int = 0 - - //========== Nested classes declarations =========== - class RightLeftSon private constructor (var son_field: CrossBranch.Grandfather.LeftFather.LeftLeftSon) { - //========== Properties =========== - //message son_field = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message son_field = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(son_field.getSizeNoTag()) - son_field.writeTo(output) - - } - - fun mergeWith (other: CrossBranch.Grandfather.RightFather.RightLeftSon) { - son_field = other.son_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) { - size += son_field.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) { - size += son_field.getSize(1) - } - return size - } - - //========== Builder =========== - class BuilderRightLeftSon constructor (var son_field: CrossBranch.Grandfather.LeftFather.LeftLeftSon) { - //========== Properties =========== - //message son_field = 1 - fun setSon_field(value: CrossBranch.Grandfather.LeftFather.LeftLeftSon): CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon { - son_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message son_field = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(son_field.getSizeNoTag()) - son_field.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.RightFather.RightLeftSon { - val res = CrossBranch.Grandfather.RightFather.RightLeftSon(son_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - son_field.mergeFromWithSize(input, expectedSize) - if (expectedSize != son_field.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) { - size += son_field.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()) { - size += son_field.getSize(1) - } - return size - } - - } - - } - - class RightRightSon private constructor (var son_field: CrossBranch.Grandfather.LeftFather.LeftRightSon) { - //========== Properties =========== - //message son_field = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message son_field = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(son_field.getSizeNoTag()) - son_field.writeTo(output) - - } - - fun mergeWith (other: CrossBranch.Grandfather.RightFather.RightRightSon) { - son_field = other.son_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) { - size += son_field.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) { - size += son_field.getSize(1) - } - return size - } - - //========== Builder =========== - class BuilderRightRightSon constructor (var son_field: CrossBranch.Grandfather.LeftFather.LeftRightSon) { - //========== Properties =========== - //message son_field = 1 - fun setSon_field(value: CrossBranch.Grandfather.LeftFather.LeftRightSon): CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon { - son_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message son_field = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(son_field.getSizeNoTag()) - son_field.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.RightFather.RightRightSon { - val res = CrossBranch.Grandfather.RightFather.RightRightSon(son_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - son_field.mergeFromWithSize(input, expectedSize) - if (expectedSize != son_field.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) { - size += son_field.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (son_field != CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()) { - size += son_field.getSize(1) - } - return size - } - - } - - } - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message rls = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rls.getSizeNoTag()) - rls.writeTo(output) - - //message rrs = 2 - output.writeTag(2, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rrs.getSizeNoTag()) - rrs.writeTo(output) - - } - - fun mergeWith (other: CrossBranch.Grandfather.RightFather) { - rls = other.rls - rrs = other.rrs - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (rls != CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build()) { - size += rls.getSize(1) - } - if (rrs != CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) { - size += rrs.getSize(2) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (rls != CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build()) { - size += rls.getSize(1) - } - if (rrs != CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) { - size += rrs.getSize(2) - } - return size - } - - //========== Builder =========== - class BuilderRightFather constructor (var rls: CrossBranch.Grandfather.RightFather.RightLeftSon, var rrs: CrossBranch.Grandfather.RightFather.RightRightSon) { - //========== Properties =========== - //message rls = 1 - fun setRls(value: CrossBranch.Grandfather.RightFather.RightLeftSon): CrossBranch.Grandfather.RightFather.BuilderRightFather { - rls = value - return this - } - - //message rrs = 2 - fun setRrs(value: CrossBranch.Grandfather.RightFather.RightRightSon): CrossBranch.Grandfather.RightFather.BuilderRightFather { - rrs = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message rls = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rls.getSizeNoTag()) - rls.writeTo(output) - - //message rrs = 2 - output.writeTag(2, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rrs.getSizeNoTag()) - rrs.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather.RightFather { - val res = CrossBranch.Grandfather.RightFather(rls, rrs) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - rls.mergeFromWithSize(input, expectedSize) - if (expectedSize != rls.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - 2 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - rrs.mergeFromWithSize(input, expectedSize) - if (expectedSize != rrs.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.RightFather.BuilderRightFather { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.RightFather.BuilderRightFather { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (rls != CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build()) { - size += rls.getSize(1) - } - if (rrs != CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) { - size += rrs.getSize(2) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (rls != CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build()) { - size += rls.getSize(1) - } - if (rrs != CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()) { - size += rrs.getSize(2) - } - return size - } - - } - - } - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message rf = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rf.getSizeNoTag()) - rf.writeTo(output) - - } - - fun mergeWith (other: CrossBranch.Grandfather) { - rf = other.rf - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.Grandfather.BuilderGrandfather(CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.Grandfather.BuilderGrandfather(CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (rf != CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) { - size += rf.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (rf != CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) { - size += rf.getSize(1) - } - return size - } - - //========== Builder =========== - class BuilderGrandfather constructor (var rf: CrossBranch.Grandfather.RightFather) { - //========== Properties =========== - //message rf = 1 - fun setRf(value: CrossBranch.Grandfather.RightFather): CrossBranch.Grandfather.BuilderGrandfather { - rf = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message rf = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(rf.getSizeNoTag()) - rf.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): CrossBranch.Grandfather { - val res = CrossBranch.Grandfather(rf) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - rf.mergeFromWithSize(input, expectedSize) - if (expectedSize != rf.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.Grandfather.BuilderGrandfather { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.Grandfather.BuilderGrandfather { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (rf != CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) { - size += rf.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (rf != CrossBranch.Grandfather.RightFather.BuilderRightFather(CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon(CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon(0).build()).build(), CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon(CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon(0).build()).build()).build()) { - size += rf.getSize(1) - } - return size - } - - } - - } - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - } - - fun mergeWith (other: CrossBranch) { - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = CrossBranch.BuilderCrossBranch() - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = CrossBranch.BuilderCrossBranch() - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - val size = 0 - return size - } - - //========== Builder =========== - class BuilderCrossBranch constructor () { - //========== Properties =========== - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - } - - //========== Mutating methods =========== - fun build(): CrossBranch { - val res = CrossBranch() - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): CrossBranch.BuilderCrossBranch { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): CrossBranch.BuilderCrossBranch { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - val size = 0 - return size - } - - } - -} - -fun compareGrandfathers(lhs: CrossBranch.Grandfather, rhs: CrossBranch.Grandfather): Boolean { - return (lhs.rf.rls.son_field.son_field == rhs.rf.rls.son_field.son_field) and - (lhs.rf.rrs.son_field.son_field == rhs.rf.rrs.son_field.son_field) -} - -fun buildGrandfather(val1: Int, val2: Int): CrossBranch.Grandfather { - return CrossBranch.Grandfather.BuilderGrandfather( - CrossBranch.Grandfather.RightFather.BuilderRightFather( - CrossBranch.Grandfather.RightFather.RightLeftSon.BuilderRightLeftSon( - CrossBranch.Grandfather.LeftFather.LeftLeftSon.BuilderLeftLeftSon( - val1 - ).build() - ).build() - , - CrossBranch.Grandfather.RightFather.RightRightSon.BuilderRightRightSon( - CrossBranch.Grandfather.LeftFather.LeftRightSon.BuilderLeftRightSon( - val2 - ).build() - ).build() - ).build() - ).build() -} - -fun checkGFSerializationIdentity(msg: CrossBranch.Grandfather): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = buildGrandfather(0, 0) - readMsg.mergeFrom(ins) - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareGrandfathers(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun testTrivialValues(): Int { - val msg = buildGrandfather(3213213, -217864283) - return checkGFSerializationIdentity(msg) -} - -fun testMaxValues(): Int { - val msg = buildGrandfather(2147483647, 2147483647) - return checkGFSerializationIdentity(msg) -} - -fun testMinValues(): Int { - val msg = buildGrandfather(-2147483647, -2147483647) - return checkGFSerializationIdentity(msg) -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.txt b/experiments/translator/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.txt deleted file mode 100644 index 5587dda54e7..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_crossbranch_test/proto_crossbranch_test.txt +++ /dev/null @@ -1,3 +0,0 @@ -testTrivialValues() == 0 -testMaxValues() == 0 -testMinValues() == 0 diff --git a/experiments/translator/src/test/kotlin/tests/proto_location_test/proto_location_test.kt b/experiments/translator/src/test/kotlin/tests/proto_location_test/proto_location_test.kt deleted file mode 100644 index d15fbba9d83..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_location_test/proto_location_test.kt +++ /dev/null @@ -1,466 +0,0 @@ -class LocationResponse private constructor (var locationResponseData: LocationResponse.LocationData, var code: Int, var errorMsg: Int) { - //========== Properties =========== - //message locationResponseData = 1 - - //int32 code = 2 - - //int32 errorMsg = 3 - - var errorCode: Int = 0 - - //========== Nested classes declarations =========== - class LocationData private constructor (var x: Int, var y: Int, var angle: Int) { - //========== Properties =========== - //int32 x = 1 - - //int32 y = 2 - - //int32 angle = 3 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 x = 1 - if (x != 0) { - output.writeInt32 (1, x) - } - - //int32 y = 2 - if (y != 0) { - output.writeInt32 (2, y) - } - - //int32 angle = 3 - if (angle != 0) { - output.writeInt32 (3, angle) - } - - } - - fun mergeWith (other: LocationResponse.LocationData) { - x = other.x - y = other.y - angle = other.angle - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = LocationResponse.LocationData.BuilderLocationData(0, 0, 0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = LocationResponse.LocationData.BuilderLocationData(0, 0, 0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (x != 0) { - size += WireFormat.getInt32Size(1, x) - } - if (y != 0) { - size += WireFormat.getInt32Size(2, y) - } - if (angle != 0) { - size += WireFormat.getInt32Size(3, angle) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (x != 0) { - size += WireFormat.getInt32Size(1, x) - } - if (y != 0) { - size += WireFormat.getInt32Size(2, y) - } - if (angle != 0) { - size += WireFormat.getInt32Size(3, angle) - } - return size - } - - //========== Builder =========== - class BuilderLocationData constructor (var x: Int, var y: Int, var angle: Int) { - //========== Properties =========== - //int32 x = 1 - fun setX(value: Int): LocationResponse.LocationData.BuilderLocationData { - x = value - return this - } - - //int32 y = 2 - fun setY(value: Int): LocationResponse.LocationData.BuilderLocationData { - y = value - return this - } - - //int32 angle = 3 - fun setAngle(value: Int): LocationResponse.LocationData.BuilderLocationData { - angle = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 x = 1 - if (x != 0) { - output.writeInt32 (1, x) - } - - //int32 y = 2 - if (y != 0) { - output.writeInt32 (2, y) - } - - //int32 angle = 3 - if (angle != 0) { - output.writeInt32 (3, angle) - } - - } - - //========== Mutating methods =========== - fun build(): LocationResponse.LocationData { - val res = LocationResponse.LocationData(x, y, angle) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - x = input.readInt32NoTag() - } - 2 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - y = input.readInt32NoTag() - } - 3 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - angle = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): LocationResponse.LocationData.BuilderLocationData { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): LocationResponse.LocationData.BuilderLocationData { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (x != 0) { - size += WireFormat.getInt32Size(1, x) - } - if (y != 0) { - size += WireFormat.getInt32Size(2, y) - } - if (angle != 0) { - size += WireFormat.getInt32Size(3, angle) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (x != 0) { - size += WireFormat.getInt32Size(1, x) - } - if (y != 0) { - size += WireFormat.getInt32Size(2, y) - } - if (angle != 0) { - size += WireFormat.getInt32Size(3, angle) - } - return size - } - - } - - } - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message locationResponseData = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(locationResponseData.getSizeNoTag()) - locationResponseData.writeTo(output) - - //int32 code = 2 - if (code != 0) { - output.writeInt32 (2, code) - } - - //int32 errorMsg = 3 - if (errorMsg != 0) { - output.writeInt32 (3, errorMsg) - } - - } - - fun mergeWith (other: LocationResponse) { - locationResponseData = other.locationResponseData - code = other.code - errorMsg = other.errorMsg - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = LocationResponse.BuilderLocationResponse(LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build(), 0, 0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = LocationResponse.BuilderLocationResponse(LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build(), 0, 0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (locationResponseData != LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build()) { - size += locationResponseData.getSize(1) - } - if (code != 0) { - size += WireFormat.getInt32Size(2, code) - } - if (errorMsg != 0) { - size += WireFormat.getInt32Size(3, errorMsg) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (locationResponseData != LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build()) { - size += locationResponseData.getSize(1) - } - if (code != 0) { - size += WireFormat.getInt32Size(2, code) - } - if (errorMsg != 0) { - size += WireFormat.getInt32Size(3, errorMsg) - } - return size - } - - //========== Builder =========== - class BuilderLocationResponse constructor (var locationResponseData: LocationResponse.LocationData, var code: Int, var errorMsg: Int) { - //========== Properties =========== - //message locationResponseData = 1 - fun setLocationResponseData(value: LocationResponse.LocationData): LocationResponse.BuilderLocationResponse { - locationResponseData = value - return this - } - - //int32 code = 2 - fun setCode(value: Int): LocationResponse.BuilderLocationResponse { - code = value - return this - } - - //int32 errorMsg = 3 - fun setErrorMsg(value: Int): LocationResponse.BuilderLocationResponse { - errorMsg = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message locationResponseData = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(locationResponseData.getSizeNoTag()) - locationResponseData.writeTo(output) - - //int32 code = 2 - if (code != 0) { - output.writeInt32 (2, code) - } - - //int32 errorMsg = 3 - if (errorMsg != 0) { - output.writeInt32 (3, errorMsg) - } - - } - - //========== Mutating methods =========== - fun build(): LocationResponse { - val res = LocationResponse(locationResponseData, code, errorMsg) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - locationResponseData.mergeFromWithSize(input, expectedSize) - if (expectedSize != locationResponseData.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - 2 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - code = input.readInt32NoTag() - } - 3 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - errorMsg = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): LocationResponse.BuilderLocationResponse { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): LocationResponse.BuilderLocationResponse { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (locationResponseData != LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build()) { - size += locationResponseData.getSize(1) - } - if (code != 0) { - size += WireFormat.getInt32Size(2, code) - } - if (errorMsg != 0) { - size += WireFormat.getInt32Size(3, errorMsg) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (locationResponseData != LocationResponse.LocationData.BuilderLocationData(0, 0, 0).build()) { - size += locationResponseData.getSize(1) - } - if (code != 0) { - size += WireFormat.getInt32Size(2, code) - } - if (errorMsg != 0) { - size += WireFormat.getInt32Size(3, errorMsg) - } - return size - } - - } - -} - -fun compareLocationDatas(lhs: LocationResponse.LocationData, rhs: LocationResponse.LocationData): Boolean { - return (lhs.angle == rhs.angle) and (lhs.x == rhs.x) and (lhs.y == rhs.y) -} - -fun compareLocationResponses(lhs: LocationResponse, rhs: LocationResponse): Boolean { - return (lhs.code == rhs.code) and - (lhs.errorMsg == rhs.errorMsg) and - compareLocationDatas(lhs.locationResponseData, rhs.locationResponseData) -} - -fun buildLocationResponse(code: Int, errorMsg: Int, angle: Int, x: Int, y: Int): LocationResponse.BuilderLocationResponse { - return LocationResponse.BuilderLocationResponse( - LocationResponse.LocationData.BuilderLocationData( - x, y, angle - ).build(), - code, - errorMsg - ) -} - -fun checkLocationResponse(msg: LocationResponse): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = buildLocationResponse(0, 0, 0, 0, 0).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareLocationResponses(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun testTrivialLocationResponse(): Int { - val msg = buildLocationResponse(3125321, -12673123, 4334, 423542673, 234516534).build() - return checkLocationResponse(msg) -} - -fun testMaxLocationResponse(): Int { - val msg = buildLocationResponse(2147483647, 2147483647, 2147483647, 2147483647, 2147483647).build() - return checkLocationResponse(msg) -} - -fun testMinLocationResponse(): Int { - val msg = buildLocationResponse(-2147483647, -2147483647, -2147483647, -2147483647, -2147483647).build() - return checkLocationResponse(msg) -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/proto_location_test/proto_location_test.txt b/experiments/translator/src/test/kotlin/tests/proto_location_test/proto_location_test.txt deleted file mode 100644 index 1d001fca6b8..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_location_test/proto_location_test.txt +++ /dev/null @@ -1,3 +0,0 @@ -testTrivialLocationResponse() == 0 -testMaxLocationResponse() == 0 -testMinLocationResponse() == 0 diff --git a/experiments/translator/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt b/experiments/translator/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt deleted file mode 100644 index d29b594db5f..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.kt +++ /dev/null @@ -1,495 +0,0 @@ -class ThirdMessage private constructor (var second_msg: SecondMessage) { - //========== Properties =========== - //message second_msg = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message second_msg = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(second_msg.getSizeNoTag()) - second_msg.writeTo(output) - - } - - fun mergeWith (other: ThirdMessage) { - second_msg = other.second_msg - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = ThirdMessage.BuilderThirdMessage(SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = ThirdMessage.BuilderThirdMessage(SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (second_msg != SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) { - size += second_msg.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (second_msg != SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) { - size += second_msg.getSize(1) - } - return size - } - - //========== Builder =========== - class BuilderThirdMessage constructor (var second_msg: SecondMessage) { - //========== Properties =========== - //message second_msg = 1 - fun setSecond_msg(value: SecondMessage): ThirdMessage.BuilderThirdMessage { - second_msg = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message second_msg = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(second_msg.getSizeNoTag()) - second_msg.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): ThirdMessage { - val res = ThirdMessage(second_msg) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - second_msg.mergeFromWithSize(input, expectedSize) - if (expectedSize != second_msg.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): ThirdMessage.BuilderThirdMessage { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): ThirdMessage.BuilderThirdMessage { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (second_msg != SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) { - size += second_msg.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (second_msg != SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()).build()) { - size += second_msg.getSize(1) - } - return size - } - - } - -} - -class SecondMessage private constructor (var first_msg: FirstMessage) { - //========== Properties =========== - //message first_msg = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message first_msg = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(first_msg.getSizeNoTag()) - first_msg.writeTo(output) - - } - - fun mergeWith (other: SecondMessage) { - first_msg = other.first_msg - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = SecondMessage.BuilderSecondMessage(FirstMessage.BuilderFirstMessage(0).build()) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (first_msg != FirstMessage.BuilderFirstMessage(0).build()) { - size += first_msg.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (first_msg != FirstMessage.BuilderFirstMessage(0).build()) { - size += first_msg.getSize(1) - } - return size - } - - //========== Builder =========== - class BuilderSecondMessage constructor (var first_msg: FirstMessage) { - //========== Properties =========== - //message first_msg = 1 - fun setFirst_msg(value: FirstMessage): SecondMessage.BuilderSecondMessage { - first_msg = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //message first_msg = 1 - output.writeTag(1, WireType.LENGTH_DELIMITED) - output.writeInt32NoTag(first_msg.getSizeNoTag()) - first_msg.writeTo(output) - - } - - //========== Mutating methods =========== - fun build(): SecondMessage { - val res = SecondMessage(first_msg) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - do { - val expectedSize = input.readInt32NoTag() - first_msg.mergeFromWithSize(input, expectedSize) - if (expectedSize != first_msg.getSizeNoTag()) { errorCode = 3; return false } - } while(false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): SecondMessage.BuilderSecondMessage { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): SecondMessage.BuilderSecondMessage { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (first_msg != FirstMessage.BuilderFirstMessage(0).build()) { - size += first_msg.getSize(1) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (first_msg != FirstMessage.BuilderFirstMessage(0).build()) { - size += first_msg.getSize(1) - } - return size - } - - } - -} - -class FirstMessage private constructor (var int_field: Int) { - //========== Properties =========== - //int32 int_field = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 int_field = 1 - if (int_field != 0) { - output.writeInt32 (1, int_field) - } - - } - - fun mergeWith (other: FirstMessage) { - int_field = other.int_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = FirstMessage.BuilderFirstMessage(0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = FirstMessage.BuilderFirstMessage(0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int_field != 0) { - size += WireFormat.getInt32Size(1, int_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int_field != 0) { - size += WireFormat.getInt32Size(1, int_field) - } - return size - } - - //========== Builder =========== - class BuilderFirstMessage constructor (var int_field: Int) { - //========== Properties =========== - //int32 int_field = 1 - fun setInt_field(value: Int): FirstMessage.BuilderFirstMessage { - int_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 int_field = 1 - if (int_field != 0) { - output.writeInt32 (1, int_field) - } - - } - - //========== Mutating methods =========== - fun build(): FirstMessage { - val res = FirstMessage(int_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - int_field = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): FirstMessage.BuilderFirstMessage { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): FirstMessage.BuilderFirstMessage { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int_field != 0) { - size += WireFormat.getInt32Size(1, int_field) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int_field != 0) { - size += WireFormat.getInt32Size(1, int_field) - } - return size - } - - } - -} - -fun compareThirdMessages(kt1: ThirdMessage, kt2: ThirdMessage): Boolean { - return kt1.second_msg.first_msg.int_field == kt2.second_msg.first_msg.int_field -} - -fun compareSecondMessages(lhs: SecondMessage, rhs: SecondMessage): Boolean { - return lhs.first_msg.int_field == rhs.first_msg.int_field -} - -fun compareFirstMessages(lhs: FirstMessage, rhs: FirstMessage): Boolean { - return lhs.int_field == rhs.int_field -} - -fun buildThirdMessage(value: Int): ThirdMessage.BuilderThirdMessage { - return ThirdMessage.BuilderThirdMessage( - SecondMessage.BuilderSecondMessage( - FirstMessage.BuilderFirstMessage( - value - ).build() - ).build() - ) -} - -fun buildSecondMessage(value: Int): SecondMessage.BuilderSecondMessage { - return SecondMessage.BuilderSecondMessage( - FirstMessage.BuilderFirstMessage( - value - ).build() - ) -} - -fun buildFirstMessage(value: Int): FirstMessage.BuilderFirstMessage { - return FirstMessage.BuilderFirstMessage(value) -} - -fun checkThird(msg: ThirdMessage): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = buildThirdMessage(0).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareThirdMessages(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun checkSecond(msg: SecondMessage): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = buildSecondMessage(0).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareSecondMessages(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun checkFirst(msg: FirstMessage): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = buildFirstMessage(0).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareFirstMessages(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun testThirdCase(): Int { - val msg = buildThirdMessage(5).build() - return checkThird(msg) -} - -fun testSecondCase(): Int { - val msg = buildSecondMessage(-31241501).build() - return checkSecond(msg) -} - -fun testFirstCase(): Int { - val msg = buildFirstMessage(321311430).build() - return checkFirst(msg) -} - diff --git a/experiments/translator/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.txt b/experiments/translator/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.txt deleted file mode 100644 index 9c2f4ecabd7..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_multiple_messages/proto_multiple_messages.txt +++ /dev/null @@ -1,3 +0,0 @@ -testThirdCase() == 0 -testSecondCase() == 0 -testFirstCase() == 0 diff --git a/experiments/translator/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt b/experiments/translator/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt deleted file mode 100644 index 5f90d979678..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.kt +++ /dev/null @@ -1,1365 +0,0 @@ -class MessageRepeatedVarints private constructor (var int: IntArray, var long: LongArray, var sint: IntArray, var slong: LongArray, var bl: BooleanArray, var uint: IntArray, var ulong: LongArray) { - //========== Properties =========== - //repeated int32 int = 1 - - //repeated int64 long = 2 - - //repeated sint32 sint = 3 - - //repeated sint64 slong = 4 - - //repeated bool bl = 5 - - //repeated uint32 uint = 7 - - //repeated uint64 ulong = 8 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated int32 int = 1 - if (int.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (int.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < int.size) { - output.writeInt32NoTag (int[i]) - i += 1 - } - } while(false) - } - - //repeated int64 long = 2 - if (long.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (long.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < long.size) { - output.writeInt64NoTag (long[i]) - i += 1 - } - } while(false) - } - - //repeated sint32 sint = 3 - if (sint.size > 0) { - output.writeTag(3, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (sint.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < sint.size) { - output.writeSInt32NoTag (sint[i]) - i += 1 - } - } while(false) - } - - //repeated sint64 slong = 4 - if (slong.size > 0) { - output.writeTag(4, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong.size) { - output.writeSInt64NoTag (slong[i]) - i += 1 - } - } while(false) - } - - //repeated bool bl = 5 - if (bl.size > 0) { - output.writeTag(5, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (bl.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < bl.size) { - output.writeBoolNoTag (bl[i]) - i += 1 - } - } while(false) - } - - //repeated uint32 uint = 7 - if (uint.size > 0) { - output.writeTag(7, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (uint.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < uint.size) { - output.writeUInt32NoTag (uint[i]) - i += 1 - } - } while(false) - } - - //repeated uint64 ulong = 8 - if (ulong.size > 0) { - output.writeTag(8, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (ulong.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < ulong.size) { - output.writeUInt64NoTag (ulong[i]) - i += 1 - } - } while(false) - } - - } - - fun mergeWith (other: MessageRepeatedVarints) { - int = int.plus((other.int)) - long = long.plus((other.long)) - sint = sint.plus((other.sint)) - slong = slong.plus((other.slong)) - bl = bl.plus((other.bl)) - uint = uint.plus((other.uint)) - ulong = ulong.plus((other.ulong)) - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = MessageRepeatedVarints.BuilderMessageRepeatedVarints(IntArray(0), LongArray(0), IntArray(0), LongArray(0), BooleanArray(0), IntArray(0), LongArray(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = MessageRepeatedVarints.BuilderMessageRepeatedVarints(IntArray(0), LongArray(0), IntArray(0), LongArray(0), BooleanArray(0), IntArray(0), LongArray(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (sint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(3, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (slong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(4, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (bl.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(5, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (uint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(7, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (ulong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(8, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (sint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(3, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (slong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(4, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (bl.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(5, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (uint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(7, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (ulong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(8, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - //========== Builder =========== - class BuilderMessageRepeatedVarints constructor (var int: IntArray, var long: LongArray, var sint: IntArray, var slong: LongArray, var bl: BooleanArray, var uint: IntArray, var ulong: LongArray) { - //========== Properties =========== - //repeated int32 int = 1 - fun setInt(value: IntArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - int = value - return this - } - fun setintByIndex(index: Int, value: Int): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - int[index] = value - return this - } - - //repeated int64 long = 2 - fun setLong(value: LongArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - long = value - return this - } - fun setlongByIndex(index: Int, value: Long): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - long[index] = value - return this - } - - //repeated sint32 sint = 3 - fun setSint(value: IntArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - sint = value - return this - } - fun setsintByIndex(index: Int, value: Int): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - sint[index] = value - return this - } - - //repeated sint64 slong = 4 - fun setSlong(value: LongArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - slong = value - return this - } - fun setslongByIndex(index: Int, value: Long): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - slong[index] = value - return this - } - - //repeated bool bl = 5 - fun setBl(value: BooleanArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - bl = value - return this - } - fun setblByIndex(index: Int, value: Boolean): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - bl[index] = value - return this - } - - //repeated uint32 uint = 7 - fun setUint(value: IntArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - uint = value - return this - } - fun setuintByIndex(index: Int, value: Int): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - uint[index] = value - return this - } - - //repeated uint64 ulong = 8 - fun setUlong(value: LongArray): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - ulong = value - return this - } - fun setulongByIndex(index: Int, value: Long): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - ulong[index] = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated int32 int = 1 - if (int.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (int.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < int.size) { - output.writeInt32NoTag (int[i]) - i += 1 - } - } while(false) - } - - //repeated int64 long = 2 - if (long.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (long.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < long.size) { - output.writeInt64NoTag (long[i]) - i += 1 - } - } while(false) - } - - //repeated sint32 sint = 3 - if (sint.size > 0) { - output.writeTag(3, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (sint.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < sint.size) { - output.writeSInt32NoTag (sint[i]) - i += 1 - } - } while(false) - } - - //repeated sint64 slong = 4 - if (slong.size > 0) { - output.writeTag(4, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong.size) { - output.writeSInt64NoTag (slong[i]) - i += 1 - } - } while(false) - } - - //repeated bool bl = 5 - if (bl.size > 0) { - output.writeTag(5, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (bl.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < bl.size) { - output.writeBoolNoTag (bl[i]) - i += 1 - } - } while(false) - } - - //repeated uint32 uint = 7 - if (uint.size > 0) { - output.writeTag(7, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (uint.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < uint.size) { - output.writeUInt32NoTag (uint[i]) - i += 1 - } - } while(false) - } - - //repeated uint64 ulong = 8 - if (ulong.size > 0) { - output.writeTag(8, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (ulong.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < ulong.size) { - output.writeUInt64NoTag (ulong[i]) - i += 1 - } - } while(false) - } - - } - - //========== Mutating methods =========== - fun build(): MessageRepeatedVarints { - val res = MessageRepeatedVarints(int, long, sint, slong, bl, uint, ulong) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0 - tmp = input.readInt32NoTag() - arraySize += 1 - readSize += WireFormat.getInt32SizeNoTag(tmp) - } - } while (false) - val newArray = IntArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readInt32NoTag() - i += 1 - } - int = newArray - } while (false) - } - 2 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0L - tmp = input.readInt64NoTag() - arraySize += 1 - readSize += WireFormat.getInt64SizeNoTag(tmp) - } - } while (false) - val newArray = LongArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readInt64NoTag() - i += 1 - } - long = newArray - } while (false) - } - 3 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0 - tmp = input.readSInt32NoTag() - arraySize += 1 - readSize += WireFormat.getSInt32SizeNoTag(tmp) - } - } while (false) - val newArray = IntArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readSInt32NoTag() - i += 1 - } - sint = newArray - } while (false) - } - 4 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0L - tmp = input.readSInt64NoTag() - arraySize += 1 - readSize += WireFormat.getSInt64SizeNoTag(tmp) - } - } while (false) - val newArray = LongArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readSInt64NoTag() - i += 1 - } - slong = newArray - } while (false) - } - 5 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = false - tmp = input.readBoolNoTag() - arraySize += 1 - readSize += WireFormat.getBoolSizeNoTag(tmp) - } - } while (false) - val newArray = BooleanArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readBoolNoTag() - i += 1 - } - bl = newArray - } while (false) - } - 7 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0 - tmp = input.readUInt32NoTag() - arraySize += 1 - readSize += WireFormat.getUInt32SizeNoTag(tmp) - } - } while (false) - val newArray = IntArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readUInt32NoTag() - i += 1 - } - uint = newArray - } while (false) - } - 8 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0L - tmp = input.readUInt64NoTag() - arraySize += 1 - readSize += WireFormat.getUInt64SizeNoTag(tmp) - } - } while (false) - val newArray = LongArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readUInt64NoTag() - i += 1 - } - ulong = newArray - } while (false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): MessageRepeatedVarints.BuilderMessageRepeatedVarints { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (sint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(3, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (slong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(4, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (bl.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(5, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (uint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(7, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (ulong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(8, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (sint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(3, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < sint.size) { - arraySize += WireFormat.getSInt32SizeNoTag(sint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (slong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(4, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (bl.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(5, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < bl.size) { - arraySize += WireFormat.getBoolSizeNoTag(bl[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (uint.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(7, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < uint.size) { - arraySize += WireFormat.getUInt32SizeNoTag(uint[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (ulong.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(8, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < ulong.size) { - arraySize += WireFormat.getUInt64SizeNoTag(ulong[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - } - -} - -fun compareIntArrays(lhs: IntArray, rhs: IntArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareLongArrays(lhs: LongArray, rhs: LongArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareBooleanArrays(lhs: BooleanArray, rhs: BooleanArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareRepeatedVarints(kt1: MessageRepeatedVarints, kt2: MessageRepeatedVarints): Boolean { - return compareIntArrays(kt1.int, kt2.int) and - compareLongArrays(kt1.long, kt2.long) and - compareIntArrays(kt1.sint, kt2.sint) and - compareLongArrays(kt1.slong, kt2.slong) and - compareBooleanArrays(kt1.bl, kt2.bl) and - compareIntArrays(kt1.uint, kt2.uint) and - compareLongArrays(kt1.ulong, kt2.ulong) -} - -fun checkRepSerializationIdentity(msg: MessageRepeatedVarints): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = MessageRepeatedVarints.BuilderMessageRepeatedVarints( - IntArray(0), - LongArray(0), - IntArray(0), - LongArray(0), - BooleanArray(0), - IntArray(0), - LongArray(0) - ).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareRepeatedVarints(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - - -object Rng { - var rngState = 0.6938893903907228 - - val point = 762939453125 - fun rng(): Double { - rngState *= point.toDouble() - rngState -= rngState.toLong().toDouble() - return rngState - } -} - -fun nextInt(minVal: Int, maxVal: Int): Int { - return (Rng.rng() * (maxVal - minVal + 1).toDouble()).toInt() -} - -fun nextLong(): Long { - val lowerHalf = nextInt(-2147483647, 2147483647) - val upperHalf = nextInt(-2147483647, 2147483647) - return (upperHalf.toLong() shl 32) + lowerHalf.toLong() -} - -fun generateIntArray(): IntArray { - val size = nextInt(0, 10000) - val arr = IntArray(size) - var i = 0 - while (i < size) { - arr[i] = nextInt(-2147483647, 2147483647) - i += 1 - } - return arr -} - -fun generateLongArray(): LongArray { - val size = nextInt(0, 10000) - val arr = LongArray(size) - var i = 0 - while (i < size) { - arr[i] = nextLong() - i += 1 - } - return arr -} - - -fun nextBool(): Boolean { - val int = nextInt(-2147483647, 2147483647) - if (int and 1 == 1) { - return true - } - return false -} - -fun generateBooleanArray(): BooleanArray { - val size = nextInt(0, 10000) - val arr = BooleanArray(size) - var i = 0 - while (i < size) { - arr[i] = nextBool() - i += 1 - } - return arr -} - -fun generateRandomMessage(): MessageRepeatedVarints { - return MessageRepeatedVarints.BuilderMessageRepeatedVarints( - generateIntArray(), - generateLongArray(), - generateIntArray(), - generateLongArray(), - generateBooleanArray(), - generateIntArray(), - generateLongArray() - ).build() -} - -fun testRepVarints(): Int { - var i = 0 - val testRuns = 100 - while (i < testRuns) { - val msg = generateRandomMessage() - if (checkRepSerializationIdentity(msg) == 1) { - return 1 - } - i += 1 - } - return 0 -} - -fun testArraysOfMinValues(): Int { - val intArr = IntArray(100) - var i = 0 - while (i < 100) { - intArr[i] = -2147483647 - i += 1 - } - - val longArr = LongArray(100) - i = 0 - while (i < 100) { - longArr[i] = -9223372036854775807L - i += 1 - } - - val boolArr = BooleanArray(100) - i = 1 - while (i < 100) { - boolArr[i] = false - i += 1 - } - - val msg = MessageRepeatedVarints.BuilderMessageRepeatedVarints( - intArr, longArr, intArr, longArr, boolArr, intArr, longArr - ).build() - return checkRepSerializationIdentity(msg) -} - -fun testArraysOfMaxValues(): Int { - val intArr = IntArray(100) - var i = 0 - while (i < 100) { - intArr[i] = 2147483647 - i += 1 - } - - val longArr = LongArray(100) - i = 0 - while (i < 100) { - longArr[i] = 9223372036854775807L - i += 1 - } - - val boolArr = BooleanArray(100) - i = 1 - while (i < 100) { - boolArr[i] = true - i += 1 - } - - val msg = MessageRepeatedVarints.BuilderMessageRepeatedVarints( - intArr, longArr, intArr, longArr, boolArr, intArr, longArr - ).build() - return checkRepSerializationIdentity(msg) -} - -fun testArraysOfDefaultValues(): Int { - val intArr = IntArray(100) - - val longArr = LongArray(100) - - val boolArr = BooleanArray(100) - - val msg = MessageRepeatedVarints.BuilderMessageRepeatedVarints( - intArr, longArr, intArr, longArr, boolArr, intArr, longArr - ).build() - - return checkRepSerializationIdentity(msg) -} diff --git a/experiments/translator/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.txt b/experiments/translator/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.txt deleted file mode 100644 index d5e5ffa9e09..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_repeated_varint/proto_repeated_varint.txt +++ /dev/null @@ -1,4 +0,0 @@ -testArraysOfDefaultValues() == 0 -testArraysOfMinValues() == 0 -testArraysOfMaxValues() == 0 -testRepVarints() == 0 diff --git a/experiments/translator/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt b/experiments/translator/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt deleted file mode 100644 index 9973ce5a2a7..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.kt +++ /dev/null @@ -1,567 +0,0 @@ -class MessageRepeatedZigZag private constructor (var int: IntArray, var long: LongArray) { - //========== Properties =========== - //repeated sint32 int = 1 - - //repeated sint64 long = 2 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated sint32 int = 1 - if (int.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (int.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < int.size) { - output.writeSInt32NoTag (int[i]) - i += 1 - } - } while(false) - } - - //repeated sint64 long = 2 - if (long.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (long.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < long.size) { - output.writeSInt64NoTag (long[i]) - i += 1 - } - } while(false) - } - - } - - fun mergeWith (other: MessageRepeatedZigZag) { - int = int.plus((other.int)) - long = long.plus((other.long)) - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag(IntArray(0), LongArray(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag(IntArray(0), LongArray(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - //========== Builder =========== - class BuilderMessageRepeatedZigZag constructor (var int: IntArray, var long: LongArray) { - //========== Properties =========== - //repeated sint32 int = 1 - fun setInt(value: IntArray): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - int = value - return this - } - fun setintByIndex(index: Int, value: Int): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - int[index] = value - return this - } - - //repeated sint64 long = 2 - fun setLong(value: LongArray): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - long = value - return this - } - fun setlongByIndex(index: Int, value: Long): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - long[index] = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated sint32 int = 1 - if (int.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (int.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < int.size) { - output.writeSInt32NoTag (int[i]) - i += 1 - } - } while(false) - } - - //repeated sint64 long = 2 - if (long.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (long.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < long.size) { - output.writeSInt64NoTag (long[i]) - i += 1 - } - } while(false) - } - - } - - //========== Mutating methods =========== - fun build(): MessageRepeatedZigZag { - val res = MessageRepeatedZigZag(int, long) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0 - tmp = input.readSInt32NoTag() - arraySize += 1 - readSize += WireFormat.getSInt32SizeNoTag(tmp) - } - } while (false) - val newArray = IntArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readSInt32NoTag() - i += 1 - } - int = newArray - } while (false) - } - 2 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var readSize = 0 - var arraySize = 0 - input.mark() - do { - var i = 0 - while(readSize < expectedByteSize) { - var tmp = 0L - tmp = input.readSInt64NoTag() - arraySize += 1 - readSize += WireFormat.getSInt64SizeNoTag(tmp) - } - } while (false) - val newArray = LongArray(arraySize) - input.reset() - do { - var i = 0 - while(i < arraySize) { - newArray[i] = input.readSInt64NoTag() - i += 1 - } - long = newArray - } while (false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): MessageRepeatedZigZag.BuilderMessageRepeatedZigZag { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < int.size) { - arraySize += WireFormat.getSInt32SizeNoTag(int[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (long.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < long.size) { - arraySize += WireFormat.getSInt64SizeNoTag(long[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - } - -} - -fun compareIntArrays(lhs: IntArray, rhs: IntArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareLongArrays(lhs: LongArray, rhs: LongArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareBooleanArrays(lhs: BooleanArray, rhs: BooleanArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareRepeatedZigZags(kt1: MessageRepeatedZigZag, kt2: MessageRepeatedZigZag): Boolean { - return compareIntArrays(kt1.int, kt2.int) and - compareLongArrays(kt1.long, kt2.long) -} - -fun checkRepZZSerializationIdentity(msg: MessageRepeatedZigZag): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag( - IntArray(0), - LongArray(0) - ).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareRepeatedZigZags(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - - -object Rng { - var rngState = 0.6938893903907228 - - val point = 762939453125 - fun rng(): Double { - rngState *= point.toDouble() - rngState -= rngState.toLong().toDouble() - return rngState - } -} - -fun nextInt(minVal: Int, maxVal: Int): Int { - return (Rng.rng() * (maxVal - minVal + 1).toDouble()).toInt() -} - -fun nextLong(): Long { - val lowerHalf = nextInt(-2147483647, 2147483647) - val upperHalf = nextInt(-2147483647, 2147483647) - return (upperHalf.toLong() shl 32) + lowerHalf.toLong() -} - -fun generateIntArray(): IntArray { - val size = nextInt(0, 10000) - val arr = IntArray(size) - var i = 0 - while (i < size) { - arr[i] = nextInt(-2147483647, 2147483647) - i += 1 - } - return arr -} - -fun generateLongArray(): LongArray { - val size = nextInt(0, 10000) - val arr = LongArray(size) - var i = 0 - while (i < size) { - arr[i] = nextLong() - i += 1 - } - return arr -} - -fun generateRandomMessage(): MessageRepeatedZigZag { - return MessageRepeatedZigZag.BuilderMessageRepeatedZigZag( - generateIntArray(), - generateLongArray() - ).build() -} - -fun testRepZigZag(): Int { - var i = 0 - val testRuns = 8 - while (i < testRuns) { - val msg = generateRandomMessage() - if (checkRepZZSerializationIdentity(msg) == 1) { - return 1 - } - i += 1 - } - return 0 -} - -fun testArraysOfMinValues(): Int { - val intArr = IntArray(100) - var i = 0 - while (i < 100) { - intArr[i] = -2147483647 - i += 1 - } - - val longArr = LongArray(100) - i = 0 - while (i < 100) { - longArr[i] = -9223372036854775807L - i += 1 - } - - val msg = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag(intArr, longArr).build() - return checkRepZZSerializationIdentity(msg) -} - -fun testArraysOfMaxValues(): Int { - val intArr = IntArray(100) - var i = 0 - while (i < 100) { - intArr[i] = 2147483647 - i += 1 - } - - val longArr = LongArray(100) - i = 0 - while (i < 100) { - longArr[i] = 9223372036854775807L - i += 1 - } - - val msg = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag(intArr, longArr).build() - return checkRepZZSerializationIdentity(msg) -} - -fun testArraysOfDefaultValues(): Int { - val intArr = IntArray(100) - - val longArr = LongArray(100) - - val msg = MessageRepeatedZigZag.BuilderMessageRepeatedZigZag(intArr, longArr).build() - return checkRepZZSerializationIdentity(msg) -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.txt b/experiments/translator/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.txt deleted file mode 100644 index 1ffd5649916..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_repeated_zigzag/proto_repeated_zigzag.txt +++ /dev/null @@ -1,4 +0,0 @@ -testRepZigZag() == 0 -testArraysOfMinValues() == 0 -testArraysOfMaxValues() == 0 -testArraysOfDefaultValues() == 0 diff --git a/experiments/translator/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt b/experiments/translator/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt deleted file mode 100644 index d5af1f20460..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.kt +++ /dev/null @@ -1,788 +0,0 @@ -class TagOrder private constructor (var sint: Int, var int: Int, var slong_array: LongArray, var enum_field: TagOrder.Enum) { - //========== Properties =========== - //sint32 sint = 8 - - //int32 int = 3423 - - //repeated sint64 slong_array = 12321 - - //enum enum_field = 938423 - - var errorCode: Int = 0 - - //========== Nested enums declarations =========== - enum class Enum(val id: Int) { - first_val (0), - second_val (1), - Unexpected(2); - - companion object { - fun fromIntToEnum (ord: Int): Enum { - return when (ord) { - 0 -> Enum.first_val - 1 -> Enum.second_val - else -> Unexpected - } - } - } - } - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 sint = 8 - if (sint != 0) { - output.writeSInt32 (8, sint) - } - - //int32 int = 3423 - if (int != 0) { - output.writeInt32 (3423, int) - } - - //repeated sint64 slong_array = 12321 - if (slong_array.size > 0) { - output.writeTag(12321, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong_array.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong_array.size) { - output.writeSInt64NoTag (slong_array[i]) - i += 1 - } - } while(false) - } - - //enum enum_field = 938423 - if (enum_field.id != TagOrder.Enum.fromIntToEnum(0).id) { - output.writeEnum (938423, enum_field.id) - } - - } - - fun mergeWith (other: TagOrder) { - sint = other.sint - int = other.int - slong_array = slong_array.plus((other.slong_array)) - enum_field = other.enum_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = TagOrder.BuilderTagOrder(0, 0, LongArray(0), TagOrder.Enum.fromIntToEnum(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = TagOrder.BuilderTagOrder(0, 0, LongArray(0), TagOrder.Enum.fromIntToEnum(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrder.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrder.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - return size - } - - //========== Builder =========== - class BuilderTagOrder constructor (var sint: Int, var int: Int, var slong_array: LongArray, var enum_field: TagOrder.Enum) { - //========== Properties =========== - //sint32 sint = 8 - fun setSint(value: Int): TagOrder.BuilderTagOrder { - sint = value - return this - } - - //int32 int = 3423 - fun setInt(value: Int): TagOrder.BuilderTagOrder { - int = value - return this - } - - //repeated sint64 slong_array = 12321 - fun setSlong_array(value: LongArray): TagOrder.BuilderTagOrder { - slong_array = value - return this - } - fun setslong_arrayByIndex(index: Int, value: Long): TagOrder.BuilderTagOrder { - slong_array[index] = value - return this - } - - //enum enum_field = 938423 - fun setEnum_field(value: TagOrder.Enum): TagOrder.BuilderTagOrder { - enum_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 sint = 8 - if (sint != 0) { - output.writeSInt32 (8, sint) - } - - //int32 int = 3423 - if (int != 0) { - output.writeInt32 (3423, int) - } - - //repeated sint64 slong_array = 12321 - if (slong_array.size > 0) { - output.writeTag(12321, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong_array.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong_array.size) { - output.writeSInt64NoTag (slong_array[i]) - i += 1 - } - } while(false) - } - - //enum enum_field = 938423 - if (enum_field.id != TagOrder.Enum.fromIntToEnum(0).id) { - output.writeEnum (938423, enum_field.id) - } - - } - - //========== Mutating methods =========== - fun build(): TagOrder { - val res = TagOrder(sint, int, slong_array, enum_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 8 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - sint = input.readSInt32NoTag() - } - 3423 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - int = input.readInt32NoTag() - } - 12321 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = LongArray(0) - var readSize = 0 - do { - var i = 0 - while(readSize < expectedByteSize) { - val tmp = LongArray(1) - tmp[0] = input.readSInt64NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getSInt64SizeNoTag(tmp[0]) - } - slong_array = newArray - } while (false) - } - 938423 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - enum_field = TagOrder.Enum.fromIntToEnum(input.readEnumNoTag()) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): TagOrder.BuilderTagOrder { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): TagOrder.BuilderTagOrder { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrder.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrder.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - return size - } - - } - -} - -class TagOrderShuffled private constructor (var sint: Int, var int: Int, var slong_array: LongArray, var enum_field: TagOrderShuffled.Enum) { - //========== Properties =========== - //sint32 sint = 8 - - //int32 int = 3423 - - //repeated sint64 slong_array = 12321 - - //enum enum_field = 938423 - - var errorCode: Int = 0 - - //========== Nested enums declarations =========== - enum class Enum(val id: Int) { - first_val (0), - second_val (1), - Unexpected(2); - - companion object { - fun fromIntToEnum (ord: Int): Enum { - return when (ord) { - 0 -> Enum.first_val - 1 -> Enum.second_val - else -> Unexpected - } - } - } - } - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 sint = 8 - if (sint != 0) { - output.writeSInt32 (8, sint) - } - - //int32 int = 3423 - if (int != 0) { - output.writeInt32 (3423, int) - } - - //repeated sint64 slong_array = 12321 - if (slong_array.size > 0) { - output.writeTag(12321, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong_array.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong_array.size) { - output.writeSInt64NoTag (slong_array[i]) - i += 1 - } - } while(false) - } - - //enum enum_field = 938423 - if (enum_field.id != TagOrderShuffled.Enum.fromIntToEnum(0).id) { - output.writeEnum (938423, enum_field.id) - } - - } - - fun mergeWith (other: TagOrderShuffled) { - sint = other.sint - int = other.int - slong_array = slong_array.plus((other.slong_array)) - enum_field = other.enum_field - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = TagOrderShuffled.BuilderTagOrderShuffled(0, 0, LongArray(0), TagOrderShuffled.Enum.fromIntToEnum(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = TagOrderShuffled.BuilderTagOrderShuffled(0, 0, LongArray(0), TagOrderShuffled.Enum.fromIntToEnum(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrderShuffled.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrderShuffled.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - return size - } - - //========== Builder =========== - class BuilderTagOrderShuffled constructor (var sint: Int, var int: Int, var slong_array: LongArray, var enum_field: TagOrderShuffled.Enum) { - //========== Properties =========== - //sint32 sint = 8 - fun setSint(value: Int): TagOrderShuffled.BuilderTagOrderShuffled { - sint = value - return this - } - - //int32 int = 3423 - fun setInt(value: Int): TagOrderShuffled.BuilderTagOrderShuffled { - int = value - return this - } - - //repeated sint64 slong_array = 12321 - fun setSlong_array(value: LongArray): TagOrderShuffled.BuilderTagOrderShuffled { - slong_array = value - return this - } - fun setslong_arrayByIndex(index: Int, value: Long): TagOrderShuffled.BuilderTagOrderShuffled { - slong_array[index] = value - return this - } - - //enum enum_field = 938423 - fun setEnum_field(value: TagOrderShuffled.Enum): TagOrderShuffled.BuilderTagOrderShuffled { - enum_field = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 sint = 8 - if (sint != 0) { - output.writeSInt32 (8, sint) - } - - //int32 int = 3423 - if (int != 0) { - output.writeInt32 (3423, int) - } - - //repeated sint64 slong_array = 12321 - if (slong_array.size > 0) { - output.writeTag(12321, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (slong_array.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < slong_array.size) { - output.writeSInt64NoTag (slong_array[i]) - i += 1 - } - } while(false) - } - - //enum enum_field = 938423 - if (enum_field.id != TagOrderShuffled.Enum.fromIntToEnum(0).id) { - output.writeEnum (938423, enum_field.id) - } - - } - - //========== Mutating methods =========== - fun build(): TagOrderShuffled { - val res = TagOrderShuffled(sint, int, slong_array, enum_field) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 8 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - sint = input.readSInt32NoTag() - } - 3423 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - int = input.readInt32NoTag() - } - 12321 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = LongArray(0) - var readSize = 0 - do { - var i = 0 - while(readSize < expectedByteSize) { - val tmp = LongArray(1) - tmp[0] = input.readSInt64NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getSInt64SizeNoTag(tmp[0]) - } - slong_array = newArray - } while (false) - } - 938423 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - enum_field = TagOrderShuffled.Enum.fromIntToEnum(input.readEnumNoTag()) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): TagOrderShuffled.BuilderTagOrderShuffled { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): TagOrderShuffled.BuilderTagOrderShuffled { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrderShuffled.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (sint != 0) { - size += WireFormat.getSInt32Size(8, sint) - } - if (int != 0) { - size += WireFormat.getInt32Size(3423, int) - } - if (slong_array.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(12321, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < slong_array.size) { - arraySize += WireFormat.getSInt64SizeNoTag(slong_array[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (enum_field != TagOrderShuffled.Enum.fromIntToEnum(0)) { - size += WireFormat.getEnumSize(938423, enum_field.id) - } - return size - } - - } - -} - -fun compareLongArrays(lhs: LongArray, rhs: LongArray): Boolean { - if (lhs.size != rhs.size) { - return false - } - - var i = 0 - while (i < lhs.size) { - if (lhs[i] != rhs[i]) { - return false - } - i += 1 - } - return true -} - -fun compareTagAndShuffledTag(kt1: TagOrder, kt2: TagOrderShuffled): Boolean { - return (kt1.enum_field.id == kt2.enum_field.id) and - (kt1.int == kt2.int) and - (kt1.sint == kt2.sint) and - compareLongArrays(kt1.slong_array, kt2.slong_array) -} - -fun checkTagToShuffled(msg: TagOrder): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = TagOrderShuffled.BuilderTagOrderShuffled(0, 0, LongArray(0), TagOrderShuffled.Enum.first_val).parseFrom(ins).build() - - if (compareTagAndShuffledTag(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun checkShuffledToTag(msg: TagOrderShuffled): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = TagOrder.BuilderTagOrder(0, 0, LongArray(0), TagOrder.Enum.first_val).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareTagAndShuffledTag(readMsg, msg)) { - return 0 - } else { - return 1 - } -} - -fun testTagToShuffled(): Int { - val arr = LongArray(3) - arr[0] = 94289342345678289L - arr[1] = -423643342423442342L - - val msg = TagOrder.BuilderTagOrder(312321, -34268, arr, TagOrder.Enum.first_val).build() - return checkTagToShuffled(msg) -} - -fun testShuffledToTag(): Int { - val arr = LongArray(3) - arr[0] = 94289342345678289L - arr[1] = -423643342423442342L - - val msg = TagOrderShuffled.BuilderTagOrderShuffled(312321, -34268, arr, TagOrderShuffled.Enum.first_val).build() - return checkShuffledToTag(msg) -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.txt b/experiments/translator/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.txt deleted file mode 100644 index 374a1b28f17..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_tagorder_test/proto_tagorder_test.txt +++ /dev/null @@ -1,2 +0,0 @@ -testTagToShuffled() == 0 -testShuffledToTag() == 0 diff --git a/experiments/translator/src/test/kotlin/tests/proto_varint/proto_varint.kt b/experiments/translator/src/test/kotlin/tests/proto_varint/proto_varint.kt deleted file mode 100644 index dc1043ed696..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_varint/proto_varint.kt +++ /dev/null @@ -1,491 +0,0 @@ -class MessageVarints private constructor (var int: Int, var long: Long, var sint: Int, var slong: Long, var bl: Boolean, var enumField: MessageVarints.TestEnum, var uint: Int, var ulong: Long) { - //========== Properties =========== - //int32 int = 1 - - //int64 long = 2 - - //sint32 sint = 3 - - //sint64 slong = 4 - - //bool bl = 5 - - //enum enumField = 6 - - //uint32 uint = 7 - - //uint64 ulong = 8 - - var errorCode: Int = 0 - - //========== Nested enums declarations =========== - enum class TestEnum(val id: Int) { - firstVal (0), - secondVal (1), - thirdVal (2), - Unexpected(3); - - companion object { - fun fromIntToTestEnum (ord: Int): TestEnum { - return when (ord) { - 0 -> TestEnum.firstVal - 1 -> TestEnum.secondVal - 2 -> TestEnum.thirdVal - else -> Unexpected - } - } - } - } - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 int = 1 - if (int != 0) { - output.writeInt32 (1, int) - } - - //int64 long = 2 - if (long != 0L) { - output.writeInt64 (2, long) - } - - //sint32 sint = 3 - if (sint != 0) { - output.writeSInt32 (3, sint) - } - - //sint64 slong = 4 - if (slong != 0L) { - output.writeSInt64 (4, slong) - } - - //bool bl = 5 - if (bl != false) { - output.writeBool (5, bl) - } - - //enum enumField = 6 - if (enumField.id != MessageVarints.TestEnum.fromIntToTestEnum(0).id) { - output.writeEnum (6, enumField.id) - } - - //uint32 uint = 7 - if (uint != 0) { - output.writeUInt32 (7, uint) - } - - //uint64 ulong = 8 - if (ulong != 0L) { - output.writeUInt64 (8, ulong) - } - - } - - fun mergeWith (other: MessageVarints) { - int = other.int - long = other.long - sint = other.sint - slong = other.slong - bl = other.bl - enumField = other.enumField - uint = other.uint - ulong = other.ulong - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = MessageVarints.BuilderMessageVarints(0, 0L, 0, 0L, false, MessageVarints.TestEnum.fromIntToTestEnum(0), 0, 0L) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = MessageVarints.BuilderMessageVarints(0, 0L, 0, 0L, false, MessageVarints.TestEnum.fromIntToTestEnum(0), 0, 0L) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getInt64Size(2, long) - } - if (sint != 0) { - size += WireFormat.getSInt32Size(3, sint) - } - if (slong != 0L) { - size += WireFormat.getSInt64Size(4, slong) - } - if (bl != false) { - size += WireFormat.getBoolSize(5, bl) - } - if (enumField != MessageVarints.TestEnum.fromIntToTestEnum(0)) { - size += WireFormat.getEnumSize(6, enumField.id) - } - if (uint != 0) { - size += WireFormat.getUInt32Size(7, uint) - } - if (ulong != 0L) { - size += WireFormat.getUInt64Size(8, ulong) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getInt64Size(2, long) - } - if (sint != 0) { - size += WireFormat.getSInt32Size(3, sint) - } - if (slong != 0L) { - size += WireFormat.getSInt64Size(4, slong) - } - if (bl != false) { - size += WireFormat.getBoolSize(5, bl) - } - if (enumField != MessageVarints.TestEnum.fromIntToTestEnum(0)) { - size += WireFormat.getEnumSize(6, enumField.id) - } - if (uint != 0) { - size += WireFormat.getUInt32Size(7, uint) - } - if (ulong != 0L) { - size += WireFormat.getUInt64Size(8, ulong) - } - return size - } - - //========== Builder =========== - class BuilderMessageVarints constructor (var int: Int, var long: Long, var sint: Int, var slong: Long, var bl: Boolean, var enumField: MessageVarints.TestEnum, var uint: Int, var ulong: Long) { - //========== Properties =========== - //int32 int = 1 - fun setInt(value: Int): MessageVarints.BuilderMessageVarints { - int = value - return this - } - - //int64 long = 2 - fun setLong(value: Long): MessageVarints.BuilderMessageVarints { - long = value - return this - } - - //sint32 sint = 3 - fun setSint(value: Int): MessageVarints.BuilderMessageVarints { - sint = value - return this - } - - //sint64 slong = 4 - fun setSlong(value: Long): MessageVarints.BuilderMessageVarints { - slong = value - return this - } - - //bool bl = 5 - fun setBl(value: Boolean): MessageVarints.BuilderMessageVarints { - bl = value - return this - } - - //enum enumField = 6 - fun setEnumField(value: MessageVarints.TestEnum): MessageVarints.BuilderMessageVarints { - enumField = value - return this - } - - //uint32 uint = 7 - fun setUint(value: Int): MessageVarints.BuilderMessageVarints { - uint = value - return this - } - - //uint64 ulong = 8 - fun setUlong(value: Long): MessageVarints.BuilderMessageVarints { - ulong = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 int = 1 - if (int != 0) { - output.writeInt32 (1, int) - } - - //int64 long = 2 - if (long != 0L) { - output.writeInt64 (2, long) - } - - //sint32 sint = 3 - if (sint != 0) { - output.writeSInt32 (3, sint) - } - - //sint64 slong = 4 - if (slong != 0L) { - output.writeSInt64 (4, slong) - } - - //bool bl = 5 - if (bl != false) { - output.writeBool (5, bl) - } - - //enum enumField = 6 - if (enumField.id != MessageVarints.TestEnum.fromIntToTestEnum(0).id) { - output.writeEnum (6, enumField.id) - } - - //uint32 uint = 7 - if (uint != 0) { - output.writeUInt32 (7, uint) - } - - //uint64 ulong = 8 - if (ulong != 0L) { - output.writeUInt64 (8, ulong) - } - - } - - //========== Mutating methods =========== - fun build(): MessageVarints { - val res = MessageVarints(int, long, sint, slong, bl, enumField, uint, ulong) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - int = input.readInt32NoTag() - } - 2 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - long = input.readInt64NoTag() - } - 3 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - sint = input.readSInt32NoTag() - } - 4 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - slong = input.readSInt64NoTag() - } - 5 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - bl = input.readBoolNoTag() - } - 6 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - enumField = MessageVarints.TestEnum.fromIntToTestEnum(input.readEnumNoTag()) - } - 7 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - uint = input.readUInt32NoTag() - } - 8 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - ulong = input.readUInt64NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): MessageVarints.BuilderMessageVarints { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): MessageVarints.BuilderMessageVarints { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getInt64Size(2, long) - } - if (sint != 0) { - size += WireFormat.getSInt32Size(3, sint) - } - if (slong != 0L) { - size += WireFormat.getSInt64Size(4, slong) - } - if (bl != false) { - size += WireFormat.getBoolSize(5, bl) - } - if (enumField != MessageVarints.TestEnum.fromIntToTestEnum(0)) { - size += WireFormat.getEnumSize(6, enumField.id) - } - if (uint != 0) { - size += WireFormat.getUInt32Size(7, uint) - } - if (ulong != 0L) { - size += WireFormat.getUInt64Size(8, ulong) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getInt64Size(2, long) - } - if (sint != 0) { - size += WireFormat.getSInt32Size(3, sint) - } - if (slong != 0L) { - size += WireFormat.getSInt64Size(4, slong) - } - if (bl != false) { - size += WireFormat.getBoolSize(5, bl) - } - if (enumField != MessageVarints.TestEnum.fromIntToTestEnum(0)) { - size += WireFormat.getEnumSize(6, enumField.id) - } - if (uint != 0) { - size += WireFormat.getUInt32Size(7, uint) - } - if (ulong != 0L) { - size += WireFormat.getUInt64Size(8, ulong) - } - return size - } - - } - -} - -fun compareVarints(kt1: MessageVarints, kt2: MessageVarints): Boolean { - return (kt1.int == kt2.int) and - (kt1.long == kt2.long) and - (kt1.sint == kt2.sint) and - (kt1.slong == kt2.slong) and - (kt1.bl == kt2.bl) and - (kt1.uint == kt2.uint) and - (kt1.ulong == kt2.ulong) and - (kt1.enumField.id == kt2.enumField.id) -} - -fun checkVarintsSerializationIdentity(msg: MessageVarints): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = MessageVarints.BuilderMessageVarints(0, 0L, 0, 0L, false, MessageVarints.TestEnum.fromIntToTestEnum(0), 0, 0L) - .parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareVarints(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun testVarintDefaultMessage(): Int { - val msg = MessageVarints.BuilderMessageVarints(0, 0L, 0, 0L, false, MessageVarints.TestEnum.fromIntToTestEnum(0), 0, 0L).build() - return checkVarintsSerializationIdentity(msg) -} - -fun testVarintTrivialMessage(): Int { - val msg = MessageVarints.BuilderMessageVarints( - 21312, -2131231231L, 5346734, 42121313211L, true, MessageVarints.TestEnum.fromIntToTestEnum(2), 3672356, 3478787863467834678L - ).build() - return checkVarintsSerializationIdentity(msg) -} - -fun testVarintNegativeMessage(): Int { - val msg = MessageVarints.BuilderMessageVarints( - -312732, -2131231231L, -5346734, -42121313211L, true, MessageVarints.TestEnum.fromIntToTestEnum(3), 3672356, 3478787863467834678L - ).build() - - return checkVarintsSerializationIdentity(msg) -} - -fun testVarintMaxValues(): Int { - val msg = MessageVarints.BuilderMessageVarints( - 2147483647, - 9223372036854775807L, - 2147483647, - 9223372036854775807L, - true, - MessageVarints.TestEnum.fromIntToTestEnum(3), - 2147483647, - 9223372036854775807L - ).build() - - return checkVarintsSerializationIdentity(msg) -} - -fun testVarintMinValues(): Int { - val msg = MessageVarints.BuilderMessageVarints( - -2147483647, - -9223372036854775807L, - -2147483647, - -9223372036854775807L, - false, - MessageVarints.TestEnum.fromIntToTestEnum(0), - -2147483647, - -9223372036854775807L - ).build() - - return checkVarintsSerializationIdentity(msg) -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/proto_varint/proto_varint.txt b/experiments/translator/src/test/kotlin/tests/proto_varint/proto_varint.txt deleted file mode 100644 index c610d8177a3..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_varint/proto_varint.txt +++ /dev/null @@ -1,5 +0,0 @@ -testVarintDefaultMessage() == 0 -testVarintTrivialMessage() == 0 -testVarintNegativeMessage() == 0 -testVarintMaxValues() == 0 -testVarintMinValues() == 0 diff --git a/experiments/translator/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt b/experiments/translator/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt deleted file mode 100644 index 3fad3b92846..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_zigzag/proto_zigzag.kt +++ /dev/null @@ -1,217 +0,0 @@ -class MessageZigZag private constructor (var int: Int, var long: Long) { - //========== Properties =========== - //sint32 int = 1 - - //sint64 long = 2 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 int = 1 - if (int != 0) { - output.writeSInt32 (1, int) - } - - //sint64 long = 2 - if (long != 0L) { - output.writeSInt64 (2, long) - } - - } - - fun mergeWith (other: MessageZigZag) { - int = other.int - long = other.long - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = MessageZigZag.BuilderMessageZigZag(0, 0L) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = MessageZigZag.BuilderMessageZigZag(0, 0L) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getSInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getSInt64Size(2, long) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getSInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getSInt64Size(2, long) - } - return size - } - - //========== Builder =========== - class BuilderMessageZigZag constructor (var int: Int, var long: Long) { - //========== Properties =========== - //sint32 int = 1 - fun setInt(value: Int): MessageZigZag.BuilderMessageZigZag { - int = value - return this - } - - //sint64 long = 2 - fun setLong(value: Long): MessageZigZag.BuilderMessageZigZag { - long = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //sint32 int = 1 - if (int != 0) { - output.writeSInt32 (1, int) - } - - //sint64 long = 2 - if (long != 0L) { - output.writeSInt64 (2, long) - } - - } - - //========== Mutating methods =========== - fun build(): MessageZigZag { - val res = MessageZigZag(int, long) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - int = input.readSInt32NoTag() - } - 2 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - long = input.readSInt64NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): MessageZigZag.BuilderMessageZigZag { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): MessageZigZag.BuilderMessageZigZag { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getSInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getSInt64Size(2, long) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (int != 0) { - size += WireFormat.getSInt32Size(1, int) - } - if (long != 0L) { - size += WireFormat.getSInt64Size(2, long) - } - return size - } - - } - -} - -fun compareZigZags(kt1: MessageZigZag, kt2: MessageZigZag): Boolean { - return (kt1.int == kt2.int) and (kt1.long == kt2.long) -} - -fun checkZigZagSerializationIdentity(msg: MessageZigZag): Int { - val outs = CodedOutputStream(ByteArray(msg.getSizeNoTag())) - msg.writeTo(outs) - - val ins = CodedInputStream(outs.buffer) - val readMsg = MessageZigZag.BuilderMessageZigZag(0, 0L).parseFrom(ins).build() - - if (readMsg.errorCode != 0) { - return 1 - } - if (compareZigZags(msg, readMsg)) { - return 0 - } else { - return 1 - } -} - -fun testZigZagDefaultValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(0, 0L).build() - return checkZigZagSerializationIdentity(msg) -} - -fun testZigZagRandomValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(321782363, -466328364782634782L).build() - return checkZigZagSerializationIdentity(msg) -} - -fun testZigZagNegativeValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(-1321782363, -323721963313L).build() - return checkZigZagSerializationIdentity(msg) -} - -fun testZigZagPositiveValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(4788923, 240384293674L).build() - return checkZigZagSerializationIdentity(msg) -} - -fun testZigZagMaxValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(2147483647, 9223372036854775807L).build() - return checkZigZagSerializationIdentity(msg) -} - -fun testZigZagMinValues(): Int { - val msg = MessageZigZag.BuilderMessageZigZag(-2147483647, -9223372036854775807L).build() - return checkZigZagSerializationIdentity(msg) -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/proto_zigzag/proto_zigzag.txt b/experiments/translator/src/test/kotlin/tests/proto_zigzag/proto_zigzag.txt deleted file mode 100644 index 15156624cfd..00000000000 --- a/experiments/translator/src/test/kotlin/tests/proto_zigzag/proto_zigzag.txt +++ /dev/null @@ -1,6 +0,0 @@ -testZigZagDefaultValues() == 0 -testZigZagRandomValues() == 0 -testZigZagNegativeValues() == 0 -testZigZagPositiveValues() == 0 -testZigZagMaxValues() == 0 -testZigZagMinValues() == 0 diff --git a/experiments/translator/src/test/kotlin/tests/range_operator_1/range_operator_1.kt b/experiments/translator/src/test/kotlin/tests/range_operator_1/range_operator_1.kt deleted file mode 100644 index f9625d7bf92..00000000000 --- a/experiments/translator/src/test/kotlin/tests/range_operator_1/range_operator_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -fun range_operator_1(): Int { - val progression = 10..20 - val a = progression.iterator() - var result = 0 - while (a.hasNext()) { - val nxt = a.nextInt() - result += nxt - } - return result -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/range_operator_1/range_operator_1.txt b/experiments/translator/src/test/kotlin/tests/range_operator_1/range_operator_1.txt deleted file mode 100644 index 3e48da2bc65..00000000000 --- a/experiments/translator/src/test/kotlin/tests/range_operator_1/range_operator_1.txt +++ /dev/null @@ -1 +0,0 @@ -range_operator_1() == 165 diff --git a/experiments/translator/src/test/kotlin/tests/reassigment_0/reassigment_0.kt b/experiments/translator/src/test/kotlin/tests/reassigment_0/reassigment_0.kt deleted file mode 100644 index d5becc81789..00000000000 --- a/experiments/translator/src/test/kotlin/tests/reassigment_0/reassigment_0.kt +++ /dev/null @@ -1,4 +0,0 @@ -fun reassigment_0(x: Int): Int { - val b = x + 1 - return b -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/reassigment_0/reassigment_0.txt b/experiments/translator/src/test/kotlin/tests/reassigment_0/reassigment_0.txt deleted file mode 100644 index d4a18813a63..00000000000 --- a/experiments/translator/src/test/kotlin/tests/reassigment_0/reassigment_0.txt +++ /dev/null @@ -1 +0,0 @@ -reassigment_0_Int(5) == 6 diff --git a/experiments/translator/src/test/kotlin/tests/reassigment_1/reassigment_1.kt b/experiments/translator/src/test/kotlin/tests/reassigment_1/reassigment_1.kt deleted file mode 100644 index 395d1db6fa9..00000000000 --- a/experiments/translator/src/test/kotlin/tests/reassigment_1/reassigment_1.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun reassigment_1(x: Int): Int { - var a = x - a = a + 1 - var b = a + 1 - b = b + 1 - return b -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/reassigment_1/reassigment_1.txt b/experiments/translator/src/test/kotlin/tests/reassigment_1/reassigment_1.txt deleted file mode 100644 index 70e248f4187..00000000000 --- a/experiments/translator/src/test/kotlin/tests/reassigment_1/reassigment_1.txt +++ /dev/null @@ -1 +0,0 @@ -reassigment_1_Int(5) == 8 diff --git a/experiments/translator/src/test/kotlin/tests/referential_equality_1/referential_equality_1.kt b/experiments/translator/src/test/kotlin/tests/referential_equality_1/referential_equality_1.kt deleted file mode 100644 index 987067d3b19..00000000000 --- a/experiments/translator/src/test/kotlin/tests/referential_equality_1/referential_equality_1.kt +++ /dev/null @@ -1,54 +0,0 @@ -class referential_equality_1 - -fun referential_equality_1_EQEQ_true(): Int { - val instance = referential_equality_1() - var instance2 = referential_equality_1() - instance2 = instance - //problem with boolean in auto generated functions in clang - return if (instance == instance2) 1 else 0 -} - -fun referential_equality_1_EQEQ_false(): Int { - val instance = referential_equality_1() - val instance2 = referential_equality_1() - return if (instance == instance2) 1 else 0 -} - -fun referential_equality_1_EQEQEQ_true(): Int { - val instance = referential_equality_1() - var instance2 = referential_equality_1() - instance2 = instance - return if (instance === instance2) 1 else 0 -} - -fun referential_equality_1_EQEQEQ_false(): Int { - val instance = referential_equality_1() - val instance2 = referential_equality_1() - return if (instance === instance2) 1 else 0 -} - -fun referential_equality_1_EXCLEQEQ_false(): Int { - val instance = referential_equality_1() - var instance2 = referential_equality_1() - instance2 = instance - return if (instance != instance2) 1 else 0 -} - -fun referential_equality_1_EXCLEQEQ_true(): Int { - val instance = referential_equality_1() - val instance2 = referential_equality_1() - return if (instance != instance2) 1 else 0 -} - -fun referential_equality_1_EXCLEQEQEQ_false(): Int { - val instance = referential_equality_1() - var instance2 = referential_equality_1() - instance2 = instance - return if (instance !== instance2) 1 else 0 -} - -fun referential_equality_1_EXCLEQEQEQ_true(): Int { - val instance = referential_equality_1() - val instance2 = referential_equality_1() - return if (instance !== instance2) 1 else 0 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/referential_equality_1/referential_equality_1.txt b/experiments/translator/src/test/kotlin/tests/referential_equality_1/referential_equality_1.txt deleted file mode 100644 index 11f8b1d968b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/referential_equality_1/referential_equality_1.txt +++ /dev/null @@ -1,8 +0,0 @@ -referential_equality_1_EQEQ_true() == 1 -referential_equality_1_EQEQ_false() == 0 -referential_equality_1_EQEQEQ_true() == 1 -referential_equality_1_EQEQEQ_false() == 0 -referential_equality_1_EXCLEQEQ_true() == 1 -referential_equality_1_EXCLEQEQ_false() == 0 -referential_equality_1_EXCLEQEQEQ_true() == 1 -referential_equality_1_EXCLEQEQEQ_false() == 0 diff --git a/experiments/translator/src/test/kotlin/tests/referential_equality_2/referential_equality_2.kt b/experiments/translator/src/test/kotlin/tests/referential_equality_2/referential_equality_2.kt deleted file mode 100644 index 2884645fe7f..00000000000 --- a/experiments/translator/src/test/kotlin/tests/referential_equality_2/referential_equality_2.kt +++ /dev/null @@ -1,28 +0,0 @@ -class referential_equality_2_A - -fun referential_equality_2_build(): referential_equality_2_A { - return referential_equality_2_A() -} - -fun referential_equality_2_EQ_slave(second_msg: referential_equality_2_A): Int { - if (second_msg == referential_equality_2_build()) { - return 0 - } - return 1 -} - -fun referential_equality_2_NEQ_slave(second_msg: referential_equality_2_A): Int { - if (second_msg != referential_equality_2_build()) { - return 1 - } - return 0 -} - - -fun referential_equality_2_EQ_master(): Int { - return referential_equality_2_EQ_slave(referential_equality_2_build()) -} - -fun referential_equality_2_NEQ_master(): Int { - return referential_equality_2_NEQ_slave(referential_equality_2_build()) -} diff --git a/experiments/translator/src/test/kotlin/tests/referential_equality_2/referential_equality_2.txt b/experiments/translator/src/test/kotlin/tests/referential_equality_2/referential_equality_2.txt deleted file mode 100644 index 1312315a8b2..00000000000 --- a/experiments/translator/src/test/kotlin/tests/referential_equality_2/referential_equality_2.txt +++ /dev/null @@ -1,2 +0,0 @@ -referential_equality_2_EQ_master() == 1 -referential_equality_2_NEQ_master() == 1 diff --git a/experiments/translator/src/test/kotlin/tests/return_1/return_1.kt b/experiments/translator/src/test/kotlin/tests/return_1/return_1.kt deleted file mode 100644 index c1651707bb3..00000000000 --- a/experiments/translator/src/test/kotlin/tests/return_1/return_1.kt +++ /dev/null @@ -1,3 +0,0 @@ -fun return_test_1(x: Int): Int { - return 101 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/return_1/return_1.txt b/experiments/translator/src/test/kotlin/tests/return_1/return_1.txt deleted file mode 100644 index f6e4102f1ad..00000000000 --- a/experiments/translator/src/test/kotlin/tests/return_1/return_1.txt +++ /dev/null @@ -1 +0,0 @@ -return_test_1_Int(101) == 101 diff --git a/experiments/translator/src/test/kotlin/tests/safe_access_operator/safe_access_operator.kt b/experiments/translator/src/test/kotlin/tests/safe_access_operator/safe_access_operator.kt deleted file mode 100644 index 8e3df0e76de..00000000000 --- a/experiments/translator/src/test/kotlin/tests/safe_access_operator/safe_access_operator.kt +++ /dev/null @@ -1,14 +0,0 @@ -class save_access_operator_Gen(val i: Int) -class save_access_operator_MyClass(val i: save_access_operator_Gen?) - -fun save_access_operator_test1(): Int { - val x: save_access_operator_MyClass? = null - val y = save_access_operator_MyClass(x?.i) - - if (y == null) { - return 0 - } else { - return 1 - } -} - diff --git a/experiments/translator/src/test/kotlin/tests/safe_access_operator/safe_access_operator.txt b/experiments/translator/src/test/kotlin/tests/safe_access_operator/safe_access_operator.txt deleted file mode 100644 index f7b1137a7d9..00000000000 --- a/experiments/translator/src/test/kotlin/tests/safe_access_operator/safe_access_operator.txt +++ /dev/null @@ -1 +0,0 @@ -save_access_operator_test1() == 1 diff --git a/experiments/translator/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt b/experiments/translator/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt deleted file mode 100644 index c4025d93bac..00000000000 --- a/experiments/translator/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.kt +++ /dev/null @@ -1,28 +0,0 @@ -class secondary_constructor_1_class(var field1: Int) { - constructor(field1: Int, field2: Int) : this(field1) { - this.field1 = field1 + field2 - } -} - -fun secondary_constructor_1(x: Int): Int { - val cls = secondary_constructor_1_class(12, x) - return cls.field1 -} - -class secondary_constructor_1_class2() { - var field1: IntArray - - init { - field1 = IntArray(0) - } - - constructor(x: Int) : this() { - this.field1 = this.field1.plus(x) - } -} - -fun secondary_constructor_1_arrays(): Int { - val cls = secondary_constructor_1_class2(56) - println(cls.field1) - return cls.field1.size + cls.field1[0] -} diff --git a/experiments/translator/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.txt b/experiments/translator/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.txt deleted file mode 100644 index 399810aa54b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/secondary_constructor_1/secondary_constructor_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -secondary_constructor_1_Int(1389) == 1401 -secondary_constructor_1_arrays() == 57 diff --git a/experiments/translator/src/test/kotlin/tests/serialization_test/serialization_test.kt b/experiments/translator/src/test/kotlin/tests/serialization_test/serialization_test.kt deleted file mode 100644 index 69ee598a321..00000000000 --- a/experiments/translator/src/test/kotlin/tests/serialization_test/serialization_test.kt +++ /dev/null @@ -1,556 +0,0 @@ - -class DirectionResponse private constructor(var code: Int) { - //========== Properties =========== - //int32 code = 1 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo(output: CodedOutputStream) { - //int32 code = 1 - if (code != 0) { - output.writeInt32(1, code) - } - - } - - fun mergeWith(other: DirectionResponse) { - code = other.code - this.errorCode = other.errorCode - } - - fun mergeFromWithSize(input: CodedInputStream, expectedSize: Int) { - val builder = DirectionResponse.BuilderDirectionResponse(0) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom(input: CodedInputStream) { - val builder = DirectionResponse.BuilderDirectionResponse(0) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (code != 0) { - size += WireFormat.getInt32Size(1, code) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (code != 0) { - size += WireFormat.getInt32Size(1, code) - } - return size - } - - //========== Builder =========== - class BuilderDirectionResponse constructor(var code: Int) { - //========== Properties =========== - //int32 code = 1 - fun setCode(value: Int): DirectionResponse.BuilderDirectionResponse { - code = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo(output: CodedOutputStream) { - //int32 code = 1 - if (code != 0) { - output.writeInt32(1, code) - } - - } - - //========== Mutating methods =========== - fun build(): DirectionResponse { - val res = DirectionResponse(code) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { - return false - } - val tag = input.readInt32NoTag() - if (tag == 0) { - return false - } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when (fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - code = input.readInt32NoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): DirectionResponse.BuilderDirectionResponse { - while (getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { - errorCode = 2 - } - return this - } - - fun parseFrom(input: CodedInputStream): DirectionResponse.BuilderDirectionResponse { - while (parseFieldFrom(input)) { - } - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (code != 0) { - size += WireFormat.getInt32Size(1, code) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (code != 0) { - size += WireFormat.getInt32Size(1, code) - } - return size - } - - } - -} - -class RouteRequest private constructor(var distances: IntArray, var angles: IntArray) { - //========== Properties =========== - //repeated int32 distances = 1 - - //repeated int32 angles = 2 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo(output: CodedOutputStream) { - //repeated int32 distances = 1 - if (distances.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - arrayByteSize += arraySize - } while (false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < distances.size) { - output.writeInt32NoTag(distances[i]) - i += 1 - } - } while (false) - } - - //repeated int32 angles = 2 - if (angles.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - arrayByteSize += arraySize - } while (false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < angles.size) { - output.writeInt32NoTag(angles[i]) - i += 1 - } - } while (false) - } - - } - - fun mergeWith(other: RouteRequest) { - distances = distances.plus((other.distances)) - angles = angles.plus((other.angles)) - this.errorCode = other.errorCode - } - - fun mergeFromWithSize(input: CodedInputStream, expectedSize: Int) { - val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom(input: CodedInputStream) { - val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - return size - } - - //========== Builder =========== - class BuilderRouteRequest constructor(var distances: IntArray, var angles: IntArray) { - //========== Properties =========== - //repeated int32 distances = 1 - fun setDistances(value: IntArray): RouteRequest.BuilderRouteRequest { - distances = value - return this - } - - fun setdistancesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { - distances[index] = value - return this - } - - //repeated int32 angles = 2 - fun setAngles(value: IntArray): RouteRequest.BuilderRouteRequest { - angles = value - return this - } - - fun setanglesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { - angles[index] = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo(output: CodedOutputStream) { - //repeated int32 distances = 1 - if (distances.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - arrayByteSize += arraySize - } while (false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < distances.size) { - output.writeInt32NoTag(distances[i]) - i += 1 - } - } while (false) - } - - //repeated int32 angles = 2 - if (angles.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - arrayByteSize += arraySize - } while (false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < angles.size) { - output.writeInt32NoTag(angles[i]) - i += 1 - } - } while (false) - } - - } - - //========== Mutating methods =========== - fun build(): RouteRequest { - val res = RouteRequest(distances, angles) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { - return false - } - val tag = input.readInt32NoTag() - if (tag == 0) { - return false - } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when (fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = IntArray(0) - var readSize = 0 - do { - var i = 0 - while (readSize < expectedByteSize) { - val tmp = IntArray(1) - tmp[0] = input.readInt32NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getInt32SizeNoTag(tmp[0]) - } - distances = newArray - } while (false) - } - 2 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = IntArray(0) - var readSize = 0 - do { - var i = 0 - while (readSize < expectedByteSize) { - val tmp = IntArray(1) - tmp[0] = input.readInt32NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getInt32SizeNoTag(tmp[0]) - } - angles = newArray - } while (false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): RouteRequest.BuilderRouteRequest { - while (getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { - errorCode = 2 - } - return this - } - - fun parseFrom(input: CodedInputStream): RouteRequest.BuilderRouteRequest { - while (parseFieldFrom(input)) { - } - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while (false) - } - return size - } - - } - -} - -fun serialization_test1(i: Int): Int { - val msg = DirectionResponse.BuilderDirectionResponse(i).build() - val buffer = ByteArray(msg.getSizeNoTag()) - val output = CodedOutputStream(buffer) - msg.writeTo(output) - - val input = CodedInputStream(buffer) - val msg2 = DirectionResponse.BuilderDirectionResponse(1).parseFrom(input) - - return msg2.code -} - -fun serialization_test2(size: Int) { - val arr = IntArray(size) - - var i = 0 - while (i < size) { - arr[i] = i - i++ - } - - val message = RouteRequest.BuilderRouteRequest(arr, arr).build() - val buffer = ByteArray(message.getSizeNoTag()) - - i = 0 - while (i < buffer.size) { - buffer[i] = 0 - i++ - } - - - val outputStream = CodedOutputStream(buffer) - message.writeTo(outputStream) - - val inputStream = CodedInputStream(buffer) - val receivedMessage = RouteRequest.BuilderRouteRequest(IntArray(1), IntArray(1)).parseFrom(inputStream).build() - - i = 0 - while (i < size) { - assert(message.distances[i] == receivedMessage.distances[i]) - i++ - } -} diff --git a/experiments/translator/src/test/kotlin/tests/serialization_test/serialization_test.txt b/experiments/translator/src/test/kotlin/tests/serialization_test/serialization_test.txt deleted file mode 100644 index 26a1fd0a657..00000000000 --- a/experiments/translator/src/test/kotlin/tests/serialization_test/serialization_test.txt +++ /dev/null @@ -1,2 +0,0 @@ -serialization_test1_Int(1442) == 1442 -serialization_test2_Int(5) diff --git a/experiments/translator/src/test/kotlin/tests/simple_class_2/simple_class_2.kt b/experiments/translator/src/test/kotlin/tests/simple_class_2/simple_class_2.kt deleted file mode 100644 index 41b23a122ba..00000000000 --- a/experiments/translator/src/test/kotlin/tests/simple_class_2/simple_class_2.kt +++ /dev/null @@ -1,20 +0,0 @@ -class simple_class_2_MyClass(val b: Int, var c: Int) - -fun simple_class_2_genMyClass(i: Int): simple_class_2_MyClass { - return simple_class_2_MyClass(i, i) -} - -fun simple_class_2_change(x: Int): Int { - val y = simple_class_2_MyClass(x, x) - y.c = x - y.c = x - y.c = 1 - y.c = x + 1 - - return y.c -} - -fun simple_class_2_testGen(i: Int): Int { - val j = simple_class_2_genMyClass(i) - return j.b -} diff --git a/experiments/translator/src/test/kotlin/tests/simple_class_2/simple_class_2.txt b/experiments/translator/src/test/kotlin/tests/simple_class_2/simple_class_2.txt deleted file mode 100644 index 25648e5b636..00000000000 --- a/experiments/translator/src/test/kotlin/tests/simple_class_2/simple_class_2.txt +++ /dev/null @@ -1,3 +0,0 @@ -simple_class_2_change_Int(0) == 1 -simple_class_2_change_Int(1) == 2 -simple_class_2_testGen_Int(10) == 10 diff --git a/experiments/translator/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt b/experiments/translator/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt deleted file mode 100644 index 128b2cf90bc..00000000000 --- a/experiments/translator/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.kt +++ /dev/null @@ -1,296 +0,0 @@ -class simple_test private constructor (var field1: Int, var field2: Long, var field3: Int, var field4: Long, var field5: Boolean) { - //========== Properties =========== - //int32 field1 = 1 - - //int64 field2 = 2 - - //sint32 field3 = 3 - - //sint64 field4 = 4 - - //bool field5 = 5 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 field1 = 1 - if (field1 != 0) { - output.writeInt32 (1, field1) - } - - //int64 field2 = 2 - if (field2 != 0L) { - output.writeInt64 (2, field2) - } - - //sint32 field3 = 3 - if (field3 != 0) { - output.writeSInt32 (3, field3) - } - - //sint64 field4 = 4 - if (field4 != 0L) { - output.writeSInt64 (4, field4) - } - - //bool field5 = 5 - if (field5 != false) { - output.writeBool (5, field5) - } - - } - - fun mergeWith (other: simple_test) { - field1 = other.field1 - field2 = other.field2 - field3 = other.field3 - field4 = other.field4 - field5 = other.field5 - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = simple_test.Buildersimple_test(0, 0L, 0, 0L, false) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = simple_test.Buildersimple_test(0, 0L, 0, 0L, false) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (field1 != 0) { - size += WireFormat.getInt32Size(1, field1) - } - if (field2 != 0L) { - size += WireFormat.getInt64Size(2, field2) - } - if (field3 != 0) { - size += WireFormat.getSInt32Size(3, field3) - } - if (field4 != 0L) { - size += WireFormat.getSInt64Size(4, field4) - } - if (field5 != false) { - size += WireFormat.getBoolSize(5, field5) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (field1 != 0) { - size += WireFormat.getInt32Size(1, field1) - } - if (field2 != 0L) { - size += WireFormat.getInt64Size(2, field2) - } - if (field3 != 0) { - size += WireFormat.getSInt32Size(3, field3) - } - if (field4 != 0L) { - size += WireFormat.getSInt64Size(4, field4) - } - if (field5 != false) { - size += WireFormat.getBoolSize(5, field5) - } - return size - } - - //========== Builder =========== - class Buildersimple_test constructor (var field1: Int, var field2: Long, var field3: Int, var field4: Long, var field5: Boolean) { - //========== Properties =========== - //int32 field1 = 1 - fun setField1(value: Int): simple_test.Buildersimple_test { - field1 = value - return this - } - - //int64 field2 = 2 - fun setField2(value: Long): simple_test.Buildersimple_test { - field2 = value - return this - } - - //sint32 field3 = 3 - fun setField3(value: Int): simple_test.Buildersimple_test { - field3 = value - return this - } - - //sint64 field4 = 4 - fun setField4(value: Long): simple_test.Buildersimple_test { - field4 = value - return this - } - - //bool field5 = 5 - fun setField5(value: Boolean): simple_test.Buildersimple_test { - field5 = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //int32 field1 = 1 - if (field1 != 0) { - output.writeInt32 (1, field1) - } - - //int64 field2 = 2 - if (field2 != 0L) { - output.writeInt64 (2, field2) - } - - //sint32 field3 = 3 - if (field3 != 0) { - output.writeSInt32 (3, field3) - } - - //sint64 field4 = 4 - if (field4 != 0L) { - output.writeSInt64 (4, field4) - } - - //bool field5 = 5 - if (field5 != false) { - output.writeBool (5, field5) - } - - } - - //========== Mutating methods =========== - fun build(): simple_test { - val res = simple_test(field1, field2, field3, field4, field5) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - field1 = input.readInt32NoTag() - } - 2 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - field2 = input.readInt64NoTag() - } - 3 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - field3 = input.readSInt32NoTag() - } - 4 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - field4 = input.readSInt64NoTag() - } - 5 -> { - if (wireType.id != WireType.VARINT.id) { - errorCode = 1 - return false - } - field5 = input.readBoolNoTag() - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): simple_test.Buildersimple_test { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): simple_test.Buildersimple_test { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (field1 != 0) { - size += WireFormat.getInt32Size(1, field1) - } - if (field2 != 0L) { - size += WireFormat.getInt64Size(2, field2) - } - if (field3 != 0) { - size += WireFormat.getSInt32Size(3, field3) - } - if (field4 != 0L) { - size += WireFormat.getSInt64Size(4, field4) - } - if (field5 != false) { - size += WireFormat.getBoolSize(5, field5) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (field1 != 0) { - size += WireFormat.getInt32Size(1, field1) - } - if (field2 != 0L) { - size += WireFormat.getInt64Size(2, field2) - } - if (field3 != 0) { - size += WireFormat.getSInt32Size(3, field3) - } - if (field4 != 0L) { - size += WireFormat.getSInt64Size(4, field4) - } - if (field5 != false) { - size += WireFormat.getBoolSize(5, field5) - } - return size - } - - } - -} - -fun simple_proto_test(): Int{ - val instance = simple_test.Buildersimple_test(100, 200, 300, 400, true).build() - val buffer = ByteArray(instance.getSizeNoTag()) - val outputStream = CodedOutputStream(buffer) - instance.writeTo(outputStream) - val inputStream = CodedInputStream(buffer) - val receivedMesssage = simple_test.Buildersimple_test(112, 222, 333, 444, false).parseFrom(inputStream).build() - - assert(receivedMesssage.field1 == 100) - assert(receivedMesssage.field2 == 200L) - assert(receivedMesssage.field3 == 300) - assert(receivedMesssage.field4 == 400L) - assert(receivedMesssage.field5 == true) - return 1 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.txt b/experiments/translator/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.txt deleted file mode 100644 index eaa33bf8d8c..00000000000 --- a/experiments/translator/src/test/kotlin/tests/simple_proto_test_1/simple_proto_test_1.txt +++ /dev/null @@ -1 +0,0 @@ -simple_proto_test() == 1 diff --git a/experiments/translator/src/test/kotlin/tests/simply_class_1/simply_class_1.kt b/experiments/translator/src/test/kotlin/tests/simply_class_1/simply_class_1.kt deleted file mode 100644 index b0bc005f92b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/simply_class_1/simply_class_1.kt +++ /dev/null @@ -1,10 +0,0 @@ -class classname_A(val x: Int) { - fun method(): Int { - return this.x + 5 - } -} - -fun simply_class_1(zz: Int): Int { - val x = classname_A(zz) - return x.method() -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/simply_class_1/simply_class_1.txt b/experiments/translator/src/test/kotlin/tests/simply_class_1/simply_class_1.txt deleted file mode 100644 index 2ca18d2e3ff..00000000000 --- a/experiments/translator/src/test/kotlin/tests/simply_class_1/simply_class_1.txt +++ /dev/null @@ -1 +0,0 @@ -simply_class_1_Int(6789) == 6794 diff --git a/experiments/translator/src/test/kotlin/tests/smartcast_1/smartcast_1.kt b/experiments/translator/src/test/kotlin/tests/smartcast_1/smartcast_1.kt deleted file mode 100644 index 1ba463a1ae2..00000000000 --- a/experiments/translator/src/test/kotlin/tests/smartcast_1/smartcast_1.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun smartcast_1_CastCheck(x: Int): Int { - return x + 1 -} - -fun smartcast_1(): Int { - var x: Int? = null - x = 3 - val y = x - val uio = smartcast_1_CastCheck(y) - return uio -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/smartcast_1/smartcast_1.txt b/experiments/translator/src/test/kotlin/tests/smartcast_1/smartcast_1.txt deleted file mode 100644 index 5343a057e00..00000000000 --- a/experiments/translator/src/test/kotlin/tests/smartcast_1/smartcast_1.txt +++ /dev/null @@ -1 +0,0 @@ -smartcast_1() == 4 diff --git a/experiments/translator/src/test/kotlin/tests/stress_test_1/stress_test_1.kt b/experiments/translator/src/test/kotlin/tests/stress_test_1/stress_test_1.kt deleted file mode 100644 index 551b6889a6d..00000000000 --- a/experiments/translator/src/test/kotlin/tests/stress_test_1/stress_test_1.kt +++ /dev/null @@ -1,414 +0,0 @@ -class RouteRequest private constructor (var distances: IntArray, var angles: IntArray) { - //========== Properties =========== - //repeated int32 distances = 1 - - //repeated int32 angles = 2 - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated int32 distances = 1 - if (distances.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < distances.size) { - output.writeInt32NoTag (distances[i]) - i += 1 - } - } while(false) - } - - //repeated int32 angles = 2 - if (angles.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < angles.size) { - output.writeInt32NoTag (angles[i]) - i += 1 - } - } while(false) - } - - } - - fun mergeWith (other: RouteRequest) { - distances = distances.plus((other.distances)) - angles = angles.plus((other.angles)) - this.errorCode = other.errorCode - } - - fun mergeFromWithSize (input: CodedInputStream, expectedSize: Int) { - val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) - mergeWith(builder.parseFromWithSize(input, expectedSize).build()) - } - - fun mergeFrom (input: CodedInputStream) { - val builder = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)) - mergeWith(builder.parseFrom(input).build()) - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - //========== Builder =========== - class BuilderRouteRequest constructor (var distances: IntArray, var angles: IntArray) { - //========== Properties =========== - //repeated int32 distances = 1 - fun setDistances(value: IntArray): RouteRequest.BuilderRouteRequest { - distances = value - return this - } - fun setdistancesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { - distances[index] = value - return this - } - - //repeated int32 angles = 2 - fun setAngles(value: IntArray): RouteRequest.BuilderRouteRequest { - angles = value - return this - } - fun setanglesByIndex(index: Int, value: Int): RouteRequest.BuilderRouteRequest { - angles[index] = value - return this - } - - var errorCode: Int = 0 - - //========== Serialization methods =========== - fun writeTo (output: CodedOutputStream) { - //repeated int32 distances = 1 - if (distances.size > 0) { - output.writeTag(1, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (distances.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < distances.size) { - output.writeInt32NoTag (distances[i]) - i += 1 - } - } while(false) - } - - //repeated int32 angles = 2 - if (angles.size > 0) { - output.writeTag(2, WireType.LENGTH_DELIMITED) - var arrayByteSize = 0 - - if (angles.size != 0) { - do { - var arraySize = 0 - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - arrayByteSize += arraySize - } while(false) - } - output.writeInt32NoTag(arrayByteSize) - - do { - var i = 0 - while (i < angles.size) { - output.writeInt32NoTag (angles[i]) - i += 1 - } - } while(false) - } - - } - - //========== Mutating methods =========== - fun build(): RouteRequest { - val res = RouteRequest(distances, angles) - res.errorCode = errorCode - return res - } - - fun parseFieldFrom(input: CodedInputStream): Boolean { - if (input.isAtEnd()) { return false } - val tag = input.readInt32NoTag() - if (tag == 0) { return false } - val fieldNumber = WireFormat.getTagFieldNumber(tag) - val wireType = WireFormat.getTagWireType(tag) - when(fieldNumber) { - 1 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = IntArray(0) - var readSize = 0 - do { - var i = 0 - while(readSize < expectedByteSize) { - val tmp = IntArray(1) - tmp[0] = input.readInt32NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getInt32SizeNoTag(tmp[0]) - } - distances = newArray - } while (false) - } - 2 -> { - if (wireType.id != WireType.LENGTH_DELIMITED.id) { - errorCode = 1 - return false - } - val expectedByteSize = input.readInt32NoTag() - var newArray = IntArray(0) - var readSize = 0 - do { - var i = 0 - while(readSize < expectedByteSize) { - val tmp = IntArray(1) - tmp[0] = input.readInt32NoTag() - newArray = newArray.plus(tmp) - readSize += WireFormat.getInt32SizeNoTag(tmp[0]) - } - angles = newArray - } while (false) - } - else -> errorCode = 4 - } - return true - } - - fun parseFromWithSize(input: CodedInputStream, expectedSize: Int): RouteRequest.BuilderRouteRequest { - while(getSizeNoTag() < expectedSize) { - parseFieldFrom(input) - } - if (getSizeNoTag() > expectedSize) { errorCode = 2 } - return this - } - - fun parseFrom(input: CodedInputStream): RouteRequest.BuilderRouteRequest { - while(parseFieldFrom(input)) {} - return this - } - - //========== Size-related methods =========== - fun getSize(fieldNumber: Int): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - size += WireFormat.getVarint32Size(size) + WireFormat.getTagSize(fieldNumber, WireType.LENGTH_DELIMITED) - return size - } - - fun getSizeNoTag(): Int { - var size = 0 - if (distances.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(1, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < distances.size) { - arraySize += WireFormat.getInt32SizeNoTag(distances[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - if (angles.size != 0) { - do { - var arraySize = 0 - size += WireFormat.getTagSize(2, WireType.LENGTH_DELIMITED) - var i = 0 - while (i < angles.size) { - arraySize += WireFormat.getInt32SizeNoTag(angles[i]) - i += 1 - } - size += arraySize - size += WireFormat.getInt32SizeNoTag(arraySize) - } while(false) - } - return size - } - - } - -} - -fun echoProto() { - var i = 0 - while (i < 100) { - val route = readRoute() - go(route) - i++ - } -} - -fun receiveByteArray(): ByteArray { - val result = ByteArray(10) - result[0] = 10 - result[1] = 4 - result[2] = 232.toByte() - result[3] = 7 - result[4] = 232.toByte() - result[5] = 7 - result[6] = 18 - result[7] = 2 - result[8] = 0 - result[9] = 0 - - return result -} - -fun readRoute(): RouteRequest { - val buffer = receiveByteArray() - val stream = CodedInputStream(buffer) - val result = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)).parseFrom(stream).build() - - return result -} - -fun wait(i: Int) { -} - -fun go(request: RouteRequest) { - val times = request.distances - var j = 0 - - while (j < times.size) { - val time = times[j] - wait(time) - j++ - } - -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/stress_test_1/stress_test_1.txt b/experiments/translator/src/test/kotlin/tests/stress_test_1/stress_test_1.txt deleted file mode 100644 index 477ef1303c2..00000000000 --- a/experiments/translator/src/test/kotlin/tests/stress_test_1/stress_test_1.txt +++ /dev/null @@ -1 +0,0 @@ -echoProto() diff --git a/experiments/translator/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt b/experiments/translator/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt deleted file mode 100644 index e553c80f108..00000000000 --- a/experiments/translator/src/test/kotlin/tests/string_print_test_1/string_print_test_1.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun string_print_test_1_inline(): Int { - println("STRING INLINE PRINT WORKS") - return 23 -} - -fun string_print_test_1_variable(): Int { - val x = "STRING VARIABLE WORKS" - val y = x - println(y) - return 1 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/string_print_test_1/string_print_test_1.txt b/experiments/translator/src/test/kotlin/tests/string_print_test_1/string_print_test_1.txt deleted file mode 100644 index 11a3bfdf37d..00000000000 --- a/experiments/translator/src/test/kotlin/tests/string_print_test_1/string_print_test_1.txt +++ /dev/null @@ -1,2 +0,0 @@ -string_print_test_1_inline() == 23 -string_print_test_1_variable() == 1 diff --git a/experiments/translator/src/test/kotlin/tests/this_test_1/this_test_1.kt b/experiments/translator/src/test/kotlin/tests/this_test_1/this_test_1.kt deleted file mode 100644 index 6471202d711..00000000000 --- a/experiments/translator/src/test/kotlin/tests/this_test_1/this_test_1.kt +++ /dev/null @@ -1,12 +0,0 @@ -class this_test_1_class { - var data: Int = 5 - fun f(x: Int) { - data = x + 5 - } -} - -fun this_test_1(arg: Int): Int { - val instance = this_test_1_class() - instance.f(arg) - return instance.data -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/this_test_1/this_test_1.txt b/experiments/translator/src/test/kotlin/tests/this_test_1/this_test_1.txt deleted file mode 100644 index dd4d81be586..00000000000 --- a/experiments/translator/src/test/kotlin/tests/this_test_1/this_test_1.txt +++ /dev/null @@ -1 +0,0 @@ -this_test_1_Int(48) == 53 diff --git a/experiments/translator/src/test/kotlin/tests/unary_operators_1/unary_operators_1.kt b/experiments/translator/src/test/kotlin/tests/unary_operators_1/unary_operators_1.kt deleted file mode 100644 index c45d721e185..00000000000 --- a/experiments/translator/src/test/kotlin/tests/unary_operators_1/unary_operators_1.kt +++ /dev/null @@ -1,11 +0,0 @@ -fun unary_operator_1_minus(x : Int): Int { - return -x -} - -fun unary_operator_1_plus(x : Int): Int { - return x -} - -fun unary_operator_1_not(x : Boolean): Boolean { - return !x -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/unary_operators_1/unary_operators_1.txt b/experiments/translator/src/test/kotlin/tests/unary_operators_1/unary_operators_1.txt deleted file mode 100644 index 752ab97e7db..00000000000 --- a/experiments/translator/src/test/kotlin/tests/unary_operators_1/unary_operators_1.txt +++ /dev/null @@ -1,6 +0,0 @@ -unary_operator_1_minus_Int(-5) == 5 -unary_operator_1_minus_Int(5) == -5 -unary_operator_1_plus_Int(-5) == -5 -unary_operator_1_plus_Int(5) == 5 -unary_operator_1_not_Boolean(1) == 0 -unary_operator_1_not_Boolean(0) == 1 diff --git a/experiments/translator/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.kt b/experiments/translator/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.kt deleted file mode 100644 index 2306ec0805c..00000000000 --- a/experiments/translator/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.kt +++ /dev/null @@ -1,6 +0,0 @@ -fun variables_assigment_1(x: Int): Int { - var z = x - z++ - return x -} - diff --git a/experiments/translator/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.txt b/experiments/translator/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.txt deleted file mode 100644 index 065f58fb725..00000000000 --- a/experiments/translator/src/test/kotlin/tests/variables_assigment_1/variables_assigment_1.txt +++ /dev/null @@ -1 +0,0 @@ -variables_assigment_1_Int(56789) == 56789 diff --git a/experiments/translator/src/test/kotlin/tests/when_block/when_block.kt b/experiments/translator/src/test/kotlin/tests/when_block/when_block.kt deleted file mode 100644 index 22a1a996c4a..00000000000 --- a/experiments/translator/src/test/kotlin/tests/when_block/when_block.kt +++ /dev/null @@ -1,9 +0,0 @@ - -fun when_block_test1(i: Int): Boolean { - when (i) { - 0 -> return true - 1 -> return false - } - - return false -} diff --git a/experiments/translator/src/test/kotlin/tests/when_block/when_block.txt b/experiments/translator/src/test/kotlin/tests/when_block/when_block.txt deleted file mode 100644 index 59450fdc4d8..00000000000 --- a/experiments/translator/src/test/kotlin/tests/when_block/when_block.txt +++ /dev/null @@ -1,3 +0,0 @@ -when_block_test1_Int(0) == 1 -when_block_test1_Int(1) == 0 -when_block_test1_Int(2) == 0 diff --git a/experiments/translator/src/test/kotlin/tests/when_expression_1/when_expression_1.kt b/experiments/translator/src/test/kotlin/tests/when_expression_1/when_expression_1.kt deleted file mode 100644 index ebd1fe4f40b..00000000000 --- a/experiments/translator/src/test/kotlin/tests/when_expression_1/when_expression_1.kt +++ /dev/null @@ -1,22 +0,0 @@ -fun when_expression_1(x: Int): Int { - val z = when (x) { - 21234 -> 20 - 55555 -> 50 - else -> 100 - } - return z -} - -fun when_expression_2 (value: Byte): Int { - val result = when (value) { - 0.toByte() -> 100 - 1.toByte() -> 101 - 2.toByte() -> 102 - 3.toByte() -> 103 - 4.toByte() -> 104 - 5.toByte() -> 105 - else -> 199 - } - - return result -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/when_expression_1/when_expression_1.txt b/experiments/translator/src/test/kotlin/tests/when_expression_1/when_expression_1.txt deleted file mode 100644 index 9e1a1287947..00000000000 --- a/experiments/translator/src/test/kotlin/tests/when_expression_1/when_expression_1.txt +++ /dev/null @@ -1,7 +0,0 @@ -when_expression_1_Int(21234) == 20 -when_expression_1_Int(55555) == 50 -when_expression_1_Int(345626) == 100 -when_expression_1_Int(756754) == 100 -when_expression_2_Byte(0) == 100 -when_expression_2_Byte(5) == 105 -when_expression_2_Byte(155) == 199 diff --git a/experiments/translator/src/test/kotlin/tests/while_1/while_1.kt b/experiments/translator/src/test/kotlin/tests/while_1/while_1.kt deleted file mode 100644 index 7a5836cf05c..00000000000 --- a/experiments/translator/src/test/kotlin/tests/while_1/while_1.kt +++ /dev/null @@ -1,8 +0,0 @@ -fun while_test_1(x: Int): Int { - var a = 5 - while (2 < 3) { - a = 10 - return a - } - return 5 -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/while_1/while_1.txt b/experiments/translator/src/test/kotlin/tests/while_1/while_1.txt deleted file mode 100644 index 02f167597f8..00000000000 --- a/experiments/translator/src/test/kotlin/tests/while_1/while_1.txt +++ /dev/null @@ -1 +0,0 @@ -while_test_1_Int(6) == 10 diff --git a/experiments/translator/src/test/kotlin/tests/while_2/while_2.c b/experiments/translator/src/test/kotlin/tests/while_2/while_2.c deleted file mode 100644 index 23987f1e9a9..00000000000 --- a/experiments/translator/src/test/kotlin/tests/while_2/while_2.c +++ /dev/null @@ -1,3 +0,0 @@ -int link_example(){ - return 5; -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/while_2/while_2.kt b/experiments/translator/src/test/kotlin/tests/while_2/while_2.kt deleted file mode 100644 index 41441e899a9..00000000000 --- a/experiments/translator/src/test/kotlin/tests/while_2/while_2.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun while_test_2(x: Int): Int { - var a = x - while (2 < 3) { - a = x + 1 - return a - } -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/while_2/while_2.txt b/experiments/translator/src/test/kotlin/tests/while_2/while_2.txt deleted file mode 100644 index d0b8a70ce30..00000000000 --- a/experiments/translator/src/test/kotlin/tests/while_2/while_2.txt +++ /dev/null @@ -1 +0,0 @@ -while_test_2_Int(77) == 78 diff --git a/experiments/translator/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.kt b/experiments/translator/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.kt deleted file mode 100644 index 85599858a3c..00000000000 --- a/experiments/translator/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.kt +++ /dev/null @@ -1,15 +0,0 @@ -object while_argument_side_effects_1_Counter{ - var cnt = 0 - fun isEnd():Boolean{ - cnt += 1 - return cnt < 10 - } -} - -fun while_argument_side_effects_1():Int{ - var iter = 0 - while(while_argument_side_effects_1_Counter.isEnd()){ - iter += 1 - } - return iter+ 1009*while_argument_side_effects_1_Counter.cnt -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.txt b/experiments/translator/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.txt deleted file mode 100644 index aab348e4066..00000000000 --- a/experiments/translator/src/test/kotlin/tests/while_argument_side_effects_1/while_argument_side_effects_1.txt +++ /dev/null @@ -1 +0,0 @@ -while_argument_side_effects_1() == 10099 diff --git a/experiments/translator/src/test/kotlin/tests/while_break_1/while_break_1.kt b/experiments/translator/src/test/kotlin/tests/while_break_1/while_break_1.kt deleted file mode 100644 index 07a4acd4d09..00000000000 --- a/experiments/translator/src/test/kotlin/tests/while_break_1/while_break_1.kt +++ /dev/null @@ -1,9 +0,0 @@ -fun while_break_1(): Int { - var i = 1 - while (true) { - i = i + 1 - break - i = -100 - } - return i -} \ No newline at end of file diff --git a/experiments/translator/src/test/kotlin/tests/while_break_1/while_break_1.txt b/experiments/translator/src/test/kotlin/tests/while_break_1/while_break_1.txt deleted file mode 100644 index 7fde1413cc1..00000000000 --- a/experiments/translator/src/test/kotlin/tests/while_break_1/while_break_1.txt +++ /dev/null @@ -1 +0,0 @@ -while_break_1() == 2 diff --git a/experiments/translator/translate.sh b/experiments/translator/translate.sh deleted file mode 100755 index 2eb68f20216..00000000000 --- a/experiments/translator/translate.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -java -jar $DIR/build/libs/translator-1.0.jar -I $DIR/kotstd/include $@