translator: return reference test

This commit is contained in:
e5l
2016-07-20 16:06:20 +03:00
parent 426fc9de81
commit e50a4ba224
4 changed files with 21 additions and 9 deletions
+6 -6
View File
@@ -14,12 +14,12 @@ fun main(args: Array<String>) {
val analyzedFiles = ArrayList<String>();
val kotlib = ClassLoader.getSystemClassLoader().getResources("kotlib/kotlin")
for (resourse in kotlib) {
for (app in File(resourse.toURI()).listFiles()) {
analyzedFiles.add(app.absoluteFile.toString())
}
}
// val kotlib = ClassLoader.getSystemClassLoader().getResources("kotlib/kotlin")
// for (resourse in kotlib) {
// for (app in File(resourse.toURI()).listFiles()) {
// analyzedFiles.add(app.absoluteFile.toString())
// }
// }
analyzedFiles.addAll(args.toList())
@@ -174,14 +174,16 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM
codeBuilder.addLLVMCode(LLVMCall(LLVMVoidType(), function.toString(), names).toString())
}
is LLVMReferenceType -> {
val result = codeBuilder.getNewVariable(returnType, pointer = 1)
codeBuilder.allocStaticVar(result)
val returnVar = codeBuilder.getNewVariable(returnType, pointer = 1)
codeBuilder.allocStaticVar(returnVar)
returnVar.pointer++
val args = ArrayList<LLVMSingleValue>()
args.add(result)
args.add(returnVar)
args.addAll(names)
codeBuilder.addLLVMCode(LLVMCall(LLVMVoidType(), function.toString(), args).toString())
var result = codeBuilder.loadAndGetVariable(returnVar)
return result
}
@@ -1,2 +1,3 @@
change(0) == 1
change(1) == 2
testGen(10) == 10
@@ -1,6 +1,10 @@
class MyClass(val b: Int, var c: Int)
fun genMyClass(i: Int): MyClass {
return MyClass(i, i)
}
fun change(x: Int): Int {
val y = MyClass(x, x)
@@ -11,3 +15,8 @@ fun change(x: Int): Int {
return y.c
}
fun testGen(i: Int): Int {
val j = genMyClass(i)
return j.b
}