diff --git a/translator/.idea/uiDesigner.xml b/translator/.idea/uiDesigner.xml new file mode 100644 index 00000000000..e96534fb27b --- /dev/null +++ b/translator/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/translator/run.sh b/translator/run.sh new file mode 100755 index 00000000000..10b7baad87f --- /dev/null +++ b/translator/run.sh @@ -0,0 +1,10 @@ +rm -f src/test/kotlin/tests/linked/* + +/usr/lib/jvm/default-java/bin/java -Didea.launcher.port=7540 -Didea.launcher.bin.path=/opt/idea-IU-145.1617.8/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/default-java/jre/lib/charsets.jar:/usr/lib/jvm/default-java/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/default-java/jre/lib/ext/dnsns.jar:/usr/lib/jvm/default-java/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/default-java/jre/lib/ext/jaccess.jar:/usr/lib/jvm/default-java/jre/lib/ext/localedata.jar:/usr/lib/jvm/default-java/jre/lib/ext/nashorn.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunec.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/default-java/jre/lib/ext/zipfs.jar:/usr/lib/jvm/default-java/jre/lib/jce.jar:/usr/lib/jvm/default-java/jre/lib/jsse.jar:/usr/lib/jvm/default-java/jre/lib/management-agent.jar:/usr/lib/jvm/default-java/jre/lib/resources.jar:/usr/lib/jvm/default-java/jre/lib/rt.jar:/home/user/Kotlin/carkot/translator/build/classes/test:/home/user/Kotlin/carkot/translator/build/classes/main:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.0.1/68cddd9aec83d23f789f72bfdc933db245c4a635/kotlin-stdlib-1.0.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler/1.0.3/5dbeb14062996a5c2208861d6364cc97a21b06b8/kotlin-compiler-1.0.3.jar:/home/user/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-runtime/1.0.1/124852ea8cdd3d89827923b5e79627e8a7c314b2/kotlin-runtime-1.0.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar:/opt/idea-IU-145.1617.8/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain TestmainKt + + + +cd src/test/kotlin/tests/linked +rm -f main.c +llvm-link * > run.ll +lli run.ll diff --git a/translator/src/test/kotlin/testmain.kt b/translator/src/test/kotlin/testmain.kt new file mode 100644 index 00000000000..24d0cbfe1b7 --- /dev/null +++ b/translator/src/test/kotlin/testmain.kt @@ -0,0 +1,48 @@ +import java.io.BufferedReader +import java.io.File +import java.io.InputStreamReader + +val directory = "src/test/kotlin/tests" + +fun main(args: Array) { + val mainFileWriter = File("$directory/linked/main.c").printWriter() + mainFileWriter.println("#include \n" + + "#include \n" + + "#include \n\n"); + + + mainFileWriter.println("\n") + mainFileWriter.println("int main(){") + + for (input in File("$directory/input").listFiles()) { + val inputLine = input.readLines() + val outputLine = File("$directory/output/" + input.name).readLines() + + for (line in 0..inputLine.count() - 1) { + mainFileWriter.println("\tassert (${inputLine.get(line)} == ${outputLine.get(line)} );") + mainFileWriter.println("\tprintf(\"OK: ${inputLine.get(line)} == ${outputLine.get(line)} \\n\");") + } + } + mainFileWriter.println("printf(\"TEST RESULT: OK\\n\");") + mainFileWriter.println("\treturn 0;") + mainFileWriter.println("}") + mainFileWriter.flush() + + + Runtime.getRuntime().exec("clang -S -emit-llvm $directory/linked/main.c -o $directory/linked/main.ll").waitFor() + Runtime.getRuntime().exec("rm -f $directory/linked/main.c").waitFor() + + for (file in File("$directory/source").listFiles()) { + val res = Runtime.getRuntime().exec("/usr/lib/jvm/default-java/bin/java -Didea.launcher.port=7539 " + + "-Didea.launcher.bin.path=/opt/idea-IU-145.1617.8/bin -Dfile.encoding=UTF-8 " + + "-classpath /usr/lib/jvm/default-java/jre/lib/charsets.jar:/usr/lib/jvm/default-java/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/default-java/jre/lib/ext/dnsns.jar:/usr/lib/jvm/default-java/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/default-java/jre/lib/ext/jaccess.jar:/usr/lib/jvm/default-java/jre/lib/ext/localedata.jar:/usr/lib/jvm/default-java/jre/lib/ext/nashorn.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunec.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/default-java/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/default-java/jre/lib/ext/zipfs.jar:/usr/lib/jvm/default-java/jre/lib/jce.jar:/usr/lib/jvm/default-java/jre/lib/jsse.jar:/usr/lib/jvm/default-java/jre/lib/management-agent.jar:/usr/lib/jvm/default-java/jre/lib/resources.jar:/usr/lib/jvm/default-java/jre/lib/rt.jar:/home/user/Kotlin/carkot/translator/build/classes/main:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.0.1/68cddd9aec83d23f789f72bfdc933db245c4a635/kotlin-stdlib-1.0.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler/1.0.3/5dbeb14062996a5c2208861d6364cc97a21b06b8/kotlin-compiler-1.0.3.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-runtime/1.0.1/124852ea8cdd3d89827923b5e79627e8a7c314b2/kotlin-runtime-1.0.1.jar:/opt/idea-IU-145.1617.8/lib/idea_rt.jar " + + "com.intellij.rt.execution.application.AppMain MainKt " + file.absoluteFile) + res.waitFor() + val reader = BufferedReader(InputStreamReader(res.getInputStream())) + val currentFileWriter = File("$directory/linked/" + file.nameWithoutExtension + ".ll").printWriter() + for (line in reader.lines()) { + currentFileWriter.println(line) + } + currentFileWriter.flush() + } +} diff --git a/translator/src/test/kotlin/tests/input/return_1.txt b/translator/src/test/kotlin/tests/input/return_1.txt new file mode 100644 index 00000000000..e8cc966ac61 --- /dev/null +++ b/translator/src/test/kotlin/tests/input/return_1.txt @@ -0,0 +1 @@ +return_test_1(101) \ No newline at end of file diff --git a/translator/src/test/kotlin/tests/linked/main.ll b/translator/src/test/kotlin/tests/linked/main.ll new file mode 100644 index 00000000000..c76c889a7f1 --- /dev/null +++ b/translator/src/test/kotlin/tests/linked/main.ll @@ -0,0 +1,50 @@ +; ModuleID = 'src/test/kotlin/tests/linked/main.c' +source_filename = "src/test/kotlin/tests/linked/main.c" +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@.str = private unnamed_addr constant [26 x i8] c"return_test_1(101) == 101\00", align 1 +@.str.1 = private unnamed_addr constant [36 x i8] c"src/test/kotlin/tests/linked/main.c\00", align 1 +@__PRETTY_FUNCTION__.main = private unnamed_addr constant [11 x i8] c"int main()\00", align 1 +@.str.2 = private unnamed_addr constant [32 x i8] c"OK: return_test_1(101) == 101 \0A\00", align 1 +@.str.3 = private unnamed_addr constant [17 x i8] c"TEST RESULT: OK\0A\00", align 1 + +; Function Attrs: nounwind uwtable +define i32 @main() #0 { +entry: + %retval = alloca i32, align 4 + store i32 0, i32* %retval, align 4 + %call = call i32 (i32, ...) bitcast (i32 (...)* @return_test_1 to i32 (i32, ...)*)(i32 101) + %cmp = icmp eq i32 %call, 101 + br i1 %cmp, label %cond.true, label %cond.false + +cond.true: ; preds = %entry + br label %cond.end + +cond.false: ; preds = %entry + call void @__assert_fail(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.1, i32 0, i32 0), i32 9, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @__PRETTY_FUNCTION__.main, i32 0, i32 0)) #3 + unreachable + ; No predecessors! + br label %cond.end + +cond.end: ; preds = %0, %cond.true + %call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.2, i32 0, i32 0)) + %call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.3, i32 0, i32 0)) + ret i32 0 +} + +declare i32 @return_test_1(...) #1 + +; Function Attrs: noreturn nounwind +declare void @__assert_fail(i8*, i8*, i32, i8*) #2 + +declare i32 @printf(i8*, ...) #1 + +attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #2 = { noreturn nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #3 = { noreturn nounwind } + +!llvm.ident = !{!0} + +!0 = !{!"clang version 3.9.0 (trunk 274621) (llvm/trunk 274620)"} diff --git a/translator/src/test/kotlin/tests/linked/return_1.ll b/translator/src/test/kotlin/tests/linked/return_1.ll new file mode 100644 index 00000000000..f12dd71d30e --- /dev/null +++ b/translator/src/test/kotlin/tests/linked/return_1.ll @@ -0,0 +1,8 @@ +declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) +define i32 @return_test_1(i32 %x) +{ +%x.addr = alloca i32, align 4 +store i32 %x, i32* %x.addr, align 4 +ret i32 101 +} + diff --git a/translator/src/test/kotlin/tests/linked/run.ll b/translator/src/test/kotlin/tests/linked/run.ll new file mode 100644 index 00000000000..96a7efaf4af Binary files /dev/null and b/translator/src/test/kotlin/tests/linked/run.ll differ diff --git a/translator/src/test/kotlin/tests/output/return_1.txt b/translator/src/test/kotlin/tests/output/return_1.txt new file mode 100644 index 00000000000..97a55e1d749 --- /dev/null +++ b/translator/src/test/kotlin/tests/output/return_1.txt @@ -0,0 +1 @@ +101 \ No newline at end of file diff --git a/translator/src/test/kotlin/tests/source/return_1.kt b/translator/src/test/kotlin/tests/source/return_1.kt new file mode 100644 index 00000000000..c1651707bb3 --- /dev/null +++ b/translator/src/test/kotlin/tests/source/return_1.kt @@ -0,0 +1,3 @@ +fun return_test_1(x: Int): Int { + return 101 +} \ No newline at end of file