translator: return reference test
This commit is contained in:
@@ -14,12 +14,12 @@ fun main(args: Array<String>) {
|
|||||||
|
|
||||||
val analyzedFiles = ArrayList<String>();
|
val analyzedFiles = ArrayList<String>();
|
||||||
|
|
||||||
val kotlib = ClassLoader.getSystemClassLoader().getResources("kotlib/kotlin")
|
// val kotlib = ClassLoader.getSystemClassLoader().getResources("kotlib/kotlin")
|
||||||
for (resourse in kotlib) {
|
// for (resourse in kotlib) {
|
||||||
for (app in File(resourse.toURI()).listFiles()) {
|
// for (app in File(resourse.toURI()).listFiles()) {
|
||||||
analyzedFiles.add(app.absoluteFile.toString())
|
// analyzedFiles.add(app.absoluteFile.toString())
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
analyzedFiles.addAll(args.toList())
|
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())
|
codeBuilder.addLLVMCode(LLVMCall(LLVMVoidType(), function.toString(), names).toString())
|
||||||
}
|
}
|
||||||
is LLVMReferenceType -> {
|
is LLVMReferenceType -> {
|
||||||
val result = codeBuilder.getNewVariable(returnType, pointer = 1)
|
val returnVar = codeBuilder.getNewVariable(returnType, pointer = 1)
|
||||||
codeBuilder.allocStaticVar(result)
|
codeBuilder.allocStaticVar(returnVar)
|
||||||
|
returnVar.pointer++
|
||||||
|
|
||||||
val args = ArrayList<LLVMSingleValue>()
|
val args = ArrayList<LLVMSingleValue>()
|
||||||
args.add(result)
|
args.add(returnVar)
|
||||||
args.addAll(names)
|
args.addAll(names)
|
||||||
|
|
||||||
codeBuilder.addLLVMCode(LLVMCall(LLVMVoidType(), function.toString(), args).toString())
|
codeBuilder.addLLVMCode(LLVMCall(LLVMVoidType(), function.toString(), args).toString())
|
||||||
|
var result = codeBuilder.loadAndGetVariable(returnVar)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
change(0) == 1
|
change(0) == 1
|
||||||
change(1) == 2
|
change(1) == 2
|
||||||
|
testGen(10) == 10
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
|
|
||||||
class MyClass(val b: Int, var c: Int)
|
class MyClass(val b: Int, var c: Int)
|
||||||
|
|
||||||
|
fun genMyClass(i: Int): MyClass {
|
||||||
|
return MyClass(i, i)
|
||||||
|
}
|
||||||
|
|
||||||
fun change(x: Int): Int {
|
fun change(x: Int): Int {
|
||||||
|
|
||||||
val y = MyClass(x, x)
|
val y = MyClass(x, x)
|
||||||
@@ -11,3 +15,8 @@ fun change(x: Int): Int {
|
|||||||
|
|
||||||
return y.c
|
return y.c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testGen(i: Int): Int {
|
||||||
|
val j = genMyClass(i)
|
||||||
|
return j.b
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user