From 498b4423af75ef841d51e00155c97233e112956f Mon Sep 17 00:00:00 2001 From: Alexey Stepanov Date: Fri, 8 Jul 2016 16:09:01 +0300 Subject: [PATCH] translator: adding a skeletons and basic llvm code function generator --- .gitignore | 21 +++ .../2.9/taskArtifacts/cache.properties | 1 + .../2.9/taskArtifacts/cache.properties.lock | Bin 0 -> 17 bytes .../.gradle/2.9/taskArtifacts/fileHashes.bin | Bin 0 -> 18733 bytes .../2.9/taskArtifacts/fileSnapshots.bin | Bin 0 -> 19118 bytes .../2.9/taskArtifacts/outputFileStates.bin | Bin 0 -> 18632 bytes .../2.9/taskArtifacts/taskArtifacts.bin | Bin 0 -> 19236 bytes translator/.idea/compiler.xml | 26 +++ .../.idea/copyright/profiles_settings.xml | 3 + translator/.idea/gradle.xml | 18 ++ .../libraries/Gradle__junit_junit_4_11.xml | 11 ++ ...Gradle__org_hamcrest_hamcrest_core_1_3.xml | 11 ++ ...jetbrains_kotlin_kotlin_compiler_1_0_3.xml | 11 ++ ..._jetbrains_kotlin_kotlin_runtime_1_0_1.xml | 11 ++ ...g_jetbrains_kotlin_kotlin_stdlib_1_0_1.xml | 11 ++ translator/.idea/misc.xml | 35 ++++ translator/.idea/modules.xml | 10 ++ translator/.idea/modules/ast-kotlin.iml | 12 ++ translator/.idea/modules/ast-kotlin_main.iml | 17 ++ translator/.idea/modules/ast-kotlin_test.iml | 21 +++ translator/build.gradle | 27 +++ .../META-INF/ast-kotlin_main.kotlin_module | Bin 0 -> 80 bytes ...inScriptParser$Companion$classPath$2.class | Bin 0 -> 2128 bytes ...tParser$Companion$messageCollector$1.class | Bin 0 -> 3022 bytes .../hello/KotlinScriptParser$Companion.class | Bin 0 -> 3404 bytes .../main/hello/KotlinScriptParser.class | Bin 0 -> 10395 bytes .../build/classes/main/hello/MainKt.class | Bin 0 -> 8484 bytes .../classes/main/hello/llvmVariable.class | Bin 0 -> 2064 bytes .../main/llvmBuilder$llvmBuilder.class | Bin 0 -> 539 bytes .../build/classes/main/llvmBuilder.class | Bin 0 -> 531 bytes .../native/translator/debug/DebugKt.class | Bin 0 -> 3658 bytes translator/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + translator/gradlew | 160 ++++++++++++++++++ translator/gradlew.bat | 90 ++++++++++ translator/settings.gradle | 2 + .../src/main/kotlin/KotlinScriptParser.kt | 121 +++++++++++++ translator/src/main/kotlin/debug.kt | 56 ++++++ translator/src/main/kotlin/llvmBuilder.kt | 14 ++ translator/src/main/kotlin/llvmVariable.kt | 3 + translator/src/main/kotlin/main.kt | 152 +++++++++++++++++ 41 files changed, 850 insertions(+) create mode 100644 .gitignore create mode 100644 translator/.gradle/2.9/taskArtifacts/cache.properties create mode 100644 translator/.gradle/2.9/taskArtifacts/cache.properties.lock create mode 100644 translator/.gradle/2.9/taskArtifacts/fileHashes.bin create mode 100644 translator/.gradle/2.9/taskArtifacts/fileSnapshots.bin create mode 100644 translator/.gradle/2.9/taskArtifacts/outputFileStates.bin create mode 100644 translator/.gradle/2.9/taskArtifacts/taskArtifacts.bin create mode 100644 translator/.idea/compiler.xml create mode 100644 translator/.idea/copyright/profiles_settings.xml create mode 100644 translator/.idea/gradle.xml create mode 100644 translator/.idea/libraries/Gradle__junit_junit_4_11.xml create mode 100644 translator/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml create mode 100644 translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_compiler_1_0_3.xml create mode 100644 translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_runtime_1_0_1.xml create mode 100644 translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_0_1.xml create mode 100644 translator/.idea/misc.xml create mode 100644 translator/.idea/modules.xml create mode 100644 translator/.idea/modules/ast-kotlin.iml create mode 100644 translator/.idea/modules/ast-kotlin_main.iml create mode 100644 translator/.idea/modules/ast-kotlin_test.iml create mode 100644 translator/build.gradle create mode 100644 translator/build/classes/main/META-INF/ast-kotlin_main.kotlin_module create mode 100644 translator/build/classes/main/hello/KotlinScriptParser$Companion$classPath$2.class create mode 100644 translator/build/classes/main/hello/KotlinScriptParser$Companion$messageCollector$1.class create mode 100644 translator/build/classes/main/hello/KotlinScriptParser$Companion.class create mode 100644 translator/build/classes/main/hello/KotlinScriptParser.class create mode 100644 translator/build/classes/main/hello/MainKt.class create mode 100644 translator/build/classes/main/hello/llvmVariable.class create mode 100644 translator/build/classes/main/llvmBuilder$llvmBuilder.class create mode 100644 translator/build/classes/main/llvmBuilder.class create mode 100644 translator/build/classes/main/org/kotlin/native/translator/debug/DebugKt.class create mode 100644 translator/gradle/wrapper/gradle-wrapper.jar create mode 100644 translator/gradle/wrapper/gradle-wrapper.properties create mode 100755 translator/gradlew create mode 100644 translator/gradlew.bat create mode 100644 translator/settings.gradle create mode 100644 translator/src/main/kotlin/KotlinScriptParser.kt create mode 100644 translator/src/main/kotlin/debug.kt create mode 100644 translator/src/main/kotlin/llvmBuilder.kt create mode 100644 translator/src/main/kotlin/llvmVariable.kt create mode 100644 translator/src/main/kotlin/main.kt diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..5b4bbf65181 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +.idea/shelf +/dependencies +/dist +out +tmp +workspace.xml +*.versionsBackup + +.gradle +/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + diff --git a/translator/.gradle/2.9/taskArtifacts/cache.properties b/translator/.gradle/2.9/taskArtifacts/cache.properties new file mode 100644 index 00000000000..8ffd4eec9e1 --- /dev/null +++ b/translator/.gradle/2.9/taskArtifacts/cache.properties @@ -0,0 +1 @@ +#Thu Jul 07 16:26:11 MSK 2016 diff --git a/translator/.gradle/2.9/taskArtifacts/cache.properties.lock b/translator/.gradle/2.9/taskArtifacts/cache.properties.lock new file mode 100644 index 0000000000000000000000000000000000000000..5d12538d200fe76eab4922f28524ed748bb95639 GIT binary patch literal 17 UcmZSnTh{Pwzt;N`3=kj*07T^lmH+?% literal 0 HcmV?d00001 diff --git a/translator/.gradle/2.9/taskArtifacts/fileHashes.bin b/translator/.gradle/2.9/taskArtifacts/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..2097cddd1b2f81084c5415992454ec22cfecc211 GIT binary patch literal 18733 zcmeI&y-UMD7{~EbM6{?xgp$F*iZ8^)f-l7>hz=DT>QHcTQW30EAu6;O6pM6m=szH} zpa@Q)f=dUXi^RdDE~41M#kvX(q8E}I($!7A2gk$n96yfxtcf!#gs%PgO9WRq*wP_@ z00IagfB*srAbBmO+0=BxR`@b3Jro0Thmpyr#~7pL~(&W1n#RC86mxk&q! zf&c;tAbcVklX$9Kcd;akME{ce9GO&tf}-#O^BvsC7r?o6K{Sl+HjqzXYJBJ Td1iPzyL@hZEd*l^`|7%1M5B2` literal 0 HcmV?d00001 diff --git a/translator/.gradle/2.9/taskArtifacts/fileSnapshots.bin b/translator/.gradle/2.9/taskArtifacts/fileSnapshots.bin new file mode 100644 index 0000000000000000000000000000000000000000..15cddfed94eacbd5d669d5c0533d8b06a0ca593e GIT binary patch literal 19118 zcmeI(F-RLx7{KwnToDXyxh~}p2SKSVAzqY{;`bWy=Y#AdA>I#x^K3wH-*5CYak{tq7SzVF_B@cnq(@k)J? zq^VVRNcH1-eMp1=0tg_000IagfB*srAba-tc4MG+S-^MV#(>EC+QigqQ@Qj(ACJF`=yoz<>H~3WGB%|f zNh|omd5oII*kmLnkF+F}#qK}7MY)0Pddf5s2~p4aI_QR72{SITRxFZ~UrlA(4|B~2 zYiB4oVVLq(HGH)4uNuoYP$$*(%&_E};l1|4+wHH7HLj?c)}3D=JG(pkqsP8yek}hd z0p*&sG-Iowq516ZgYWZKntnb$qlKb|v~(udvHGC%e){>RTYsN6jH0MLqkFm6Up6LY U%K7N>RsUykX2kH_IPDZ21I7jwDF6Tf literal 0 HcmV?d00001 diff --git a/translator/.gradle/2.9/taskArtifacts/outputFileStates.bin b/translator/.gradle/2.9/taskArtifacts/outputFileStates.bin new file mode 100644 index 0000000000000000000000000000000000000000..6e981f93221312c3930840ed8c4497defc650026 GIT binary patch literal 18632 zcmeI%ElUJZ6b9fy4XYR?4U0_{MVsL24-mr!gGCU-HiIY|6#OWPQCR#31~CX5#h}4r zo~CTnKd{B>2jeU|Hwr_Qhp#zV_UIn^&V1^26i1+q2Eny&~^~Jlumk+AnSw0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNCf2Z3}ke;nth(mz{M r2cuW@kCozsNqIWge5-ZZuTR6LC#~z+=goL;`1B=fem#6=J7M|@!697a literal 0 HcmV?d00001 diff --git a/translator/.gradle/2.9/taskArtifacts/taskArtifacts.bin b/translator/.gradle/2.9/taskArtifacts/taskArtifacts.bin new file mode 100644 index 0000000000000000000000000000000000000000..1eb8c2e00c533f404c58a82545e998a242543367 GIT binary patch literal 19236 zcmeI%PiqrF9LDiUuorD4cqm2j=1ItGQ7QQ6Qc1ATilq|t7ABi9nRdIo%uEvLp|8M$ zo(1uuAPByLddq3wir_0yciAi?Cj%Y|@*NmvhuPoEJRkP9SzCzB=I?nE%WY$M$_xPn z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1pWtstedB}TqfDvu2+$o*;I(F^?X{}3U9ou zH$HzTmv#@TKMB=1FS%WnG9rKg0tg_000IagfB*srAb{JGbGs3}y0Z81 zUa;{~&(6Ljb|{Bd4I(X7YNS{0*vY9?X{xP!QI5T~4il@q9^|<$eF{d&i4Mk2+h8y8 zk%ZmYLonQZ?yaV54#*G`(=glsq8CX%Y&`G9T?}W z>5sih;;xOp{t#2;rX4tu-Lo_3b5 dQ0!R7YE<^c4c!}M!;zWjzpY + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/translator/.idea/copyright/profiles_settings.xml b/translator/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000000..e7bedf3377d --- /dev/null +++ b/translator/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/translator/.idea/gradle.xml b/translator/.idea/gradle.xml new file mode 100644 index 00000000000..ab6e46d7aef --- /dev/null +++ b/translator/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/translator/.idea/libraries/Gradle__junit_junit_4_11.xml b/translator/.idea/libraries/Gradle__junit_junit_4_11.xml new file mode 100644 index 00000000000..dc26b345fb7 --- /dev/null +++ b/translator/.idea/libraries/Gradle__junit_junit_4_11.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/translator/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml b/translator/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml new file mode 100644 index 00000000000..8262f729c28 --- /dev/null +++ b/translator/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_compiler_1_0_3.xml b/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_compiler_1_0_3.xml new file mode 100644 index 00000000000..340062081ce --- /dev/null +++ b/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_compiler_1_0_3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_runtime_1_0_1.xml b/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_runtime_1_0_1.xml new file mode 100644 index 00000000000..75d28ad69b0 --- /dev/null +++ b/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_runtime_1_0_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_0_1.xml b/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_0_1.xml new file mode 100644 index 00000000000..9c961954a78 --- /dev/null +++ b/translator/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_0_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/translator/.idea/misc.xml b/translator/.idea/misc.xml new file mode 100644 index 00000000000..ee2a58cb493 --- /dev/null +++ b/translator/.idea/misc.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + 1.8 + + + + + + + + \ No newline at end of file diff --git a/translator/.idea/modules.xml b/translator/.idea/modules.xml new file mode 100644 index 00000000000..be261610699 --- /dev/null +++ b/translator/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/translator/.idea/modules/ast-kotlin.iml b/translator/.idea/modules/ast-kotlin.iml new file mode 100644 index 00000000000..8d0ac41cd95 --- /dev/null +++ b/translator/.idea/modules/ast-kotlin.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/translator/.idea/modules/ast-kotlin_main.iml b/translator/.idea/modules/ast-kotlin_main.iml new file mode 100644 index 00000000000..81e1de0dcdd --- /dev/null +++ b/translator/.idea/modules/ast-kotlin_main.iml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/translator/.idea/modules/ast-kotlin_test.iml b/translator/.idea/modules/ast-kotlin_test.iml new file mode 100644 index 00000000000..04f30958348 --- /dev/null +++ b/translator/.idea/modules/ast-kotlin_test.iml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/translator/build.gradle b/translator/build.gradle new file mode 100644 index 00000000000..658e32d3566 --- /dev/null +++ b/translator/build.gradle @@ -0,0 +1,27 @@ +group 'ast-kotlin' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.1" + } +} + +apply plugin: 'java' +apply plugin: 'kotlin' + +sourceCompatibility = 1.5 + +repositories { + mavenCentral() +} + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.1" + // https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-compiler + compile group: 'org.jetbrains.kotlin', name: 'kotlin-compiler', version: '1.0.3' + testCompile group: 'junit', name: 'junit', version: '4.11' +} diff --git a/translator/build/classes/main/META-INF/ast-kotlin_main.kotlin_module b/translator/build/classes/main/META-INF/ast-kotlin_main.kotlin_module new file mode 100644 index 0000000000000000000000000000000000000000..057d2d3830c7fc83fd848487692568e18531fced GIT binary patch literal 80 zcmZQzU|?ooU|@t|1}=Us){NAgoO~fR-^9#3?-DLuE~WgUbiM5SlAO#uy}ZPd%(7Iy blA^@C;+({i{35-S)TGjMA$AuKY=m@+e&Gsblr97?WM8_2m!5l5QwY$^{Q%Ep6*!EREx4& z*^#sDycab~^Qgg9m&4uETybC4rCRe0Q_VS!d|5PHFFZ7Cb=ffW*?Im11}`>}Kuq9P z8~+?b3B(2BhE=x@bb+g5;|;^6w070C%D%37w9(%@KJCwJ5}i;KM9?iTQna02bzk=? zjx-pGv@F|`jj&3#SE`vNH6??v!Uz($Brp{Er`e`SYXJ=T)_%oHpjV(A&?&1 zKI>-a`571ca7DpoTxE1EOj{NbxF#?hI?-}k&7JtaDV<%NZVU)?L+-+x>n zI)k{;h3j}npf@nxhH3)01UjiV?^lh$l_tc2OmIjAL%6NrT?`Z6)98l&`oX%YUvrPS zOCZHuQRjy4+BHYhea5owgeGo}wSm^K5MtJ>s3b;lN5Oj-6Nt*49f7yo?}YU*{w#?! zCc4p&NoF+V=$dZS*$PHo;9A2*kcAe=%)FwTdR4c)K&r3JlangzNg1gZsYA2o=3Lj< zwFE>#piA=sI%FjDrcL=tS5SA%+cSvaRPq0HDR0K-49oE58SdEl78Q*Z#x@ z<0B<95DA{+qu%4A!Op%|Ut}sWB_1h%ejkr?2GUtp{G7CG>t)rhxpePRBl2dV1O_e& zHGvgBfRFvQTutH=eAva^8o^sRGraB{c#Ju3@38fIiiV|^YSoJFY|4tslfI&@Npnj& zhEIowU1erQdNqdvcbYYOy64V}DS;asHOn)qdcmq2u0d_B?qc4Qa!{@QP-Bxeh=+Qm zw!8GTr&}&Z0^M7(G}CqsYnPbs*(}Xu!Lsy5ZR=EWJv6a(#sH=WKnHWesmyL9B1}rG zH^<@C#gh$EH@OO~9qCs{{=khuneTXTILhh4IfrN<`dy$57>@pqo;NJXiDUGy{)C&a zF!BcDB~0G^1$QHOGU4lqV3Y4@njfH!dr*1e@1~HUK7W_R`-pM9PO1BWyY>@^h5_h6CYSK8tu9=-$E;uD+LVafP3D?)`xJXvYsIo{ql8+>bt!I_6LK{p9<9 z-M=C7^fgL9W4$314^>C;1=$gNj;CDzF0ba+m2(RyJXO-=p$1<`FDny6nUHG#R6Kriue5a*?TLVk}fKlk<4T!o0-Wd)6*l_ z$?Qxfn^n?F3Z6027>ayv^HB(31Ec|bNqT|w1EynP8_@!C!T%!iO=_{gv^*?e3Cr6M UEI z4e!_G15Yk}sV_d*hf-uM?c&9?{7vd|pUISlRxaXNnSJ&-XPzG!&TLNQ&?>bO0t~SS*&{(> zsLiW((y~m;W~fQDo@Lm%V#H~~E)|QW zScm#BWUOb{u%cxwZ<&|WNu5h*VDLM6jqci?evnxYg{hCOw74*d;btQJ*vJUzHJw`? zLK$A>mgZdPORt!jaV*Wq^*yo9w3&4Q>T4Zm*uF}QY8a;DZrjSR=?s^2om>goo*f~? z7`Azloh}y?&2YG7sJfCegju$hwIys}Xw2q$c82mvEpU=Z*`6{ATcXOBO7{GVcdZnp zt#~?&r?8Dd@-iocW->;mDIhy9|SbI9-tAl>APfVPm4T%03Tk89T5ujOUPG zKnQK*-|Beumo$BfTM|0L=oE<+REtG!Ofhs;JM1Z3dxv+vPlkeBLPa;_YHxEQgxwYM z(wf2D^i9dwi+#eH{R~?ZsfX)2D0KBQ_&SDoN3Wkis6*Vu=ZY%8`C2SqD zVxf!y;c+Kk{2vf6XRm}~`%uTyivBNgAa>hCAf;AX2qBjuQ+GF1FR% z64GQ_)-)W^Sr|4|L+a&F>scAY7ztwtr^wBFJ&Ym#7$r;wj3QG@!5w30d34E3pyFAt zX0z1E;sj}WGzeKB9y7osmx=T0NOUbUUhiofRzRGgHKC)fO;=$a8h8Zf7*fkg#~`nYOo;-wuEgtUm}He4!9 za?4v;mvPkW%#d32=JC;z;b;Y(GRm5*(V=@!%h8n=iy@pbOIDU2qbHQKCXK94(Km7w ziM&azSWX!Rw+3|8wmG$tCQs>jMP-#Hbi+r{q&lH^)zDarFwu``wwHG36+qn`$Y*XL zvV`bwH1**VqH<*m8?cdPpVAj}SK5ef!e){p6-=X1qP^Sg(WXT_(-D1^XlHc0pbKd2 z^*8x{M=07p2jvbr>5{G{{{niVdx((0fd%wMpRe#o1m92m0+PLfW$6Gdba;!wd7Nxt zz)LsLFptxVm}m+vK%K+kc}%TY&&^>+`#feAVcsWi&7pqfbm?a@zQ%QUkR0I{Lm8LI z)l<-LnYaLA_#Rh?^9wgUI0P3X34z{iG}ErnYitbTbK2b?0@z4QHHG*O zNGl?w3XQ_3K-(=`6TVdkGq5I@3G(U-SL!2tNu!@$4d5&KM2-lbfF^uR^c>CKA~fEf zKurp>?(aI@S)N@_;X2->RlGL=X5)Q)FoAkous3YM)Y@pXvB{+|8=8$~mv6Cg)y9Ya E05pL!(*OVf literal 0 HcmV?d00001 diff --git a/translator/build/classes/main/hello/KotlinScriptParser$Companion.class b/translator/build/classes/main/hello/KotlinScriptParser$Companion.class new file mode 100644 index 0000000000000000000000000000000000000000..d3489af3d52b47b23e409d0d223747c00f66373e GIT binary patch literal 3404 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 z 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 B%gF!$ literal 0 HcmV?d00001 diff --git a/translator/build/classes/main/llvmBuilder$llvmBuilder.class b/translator/build/classes/main/llvmBuilder$llvmBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..8eaeb8d1204f1413d9ac4f67e32e885856667564 GIT binary patch literal 539 zcmYjNO>fgc5Ph>woZ`A^QfQl&77lO#BrwUf73znC6e(>bsB*~xZQ>PdVy`9dI_LZr zPFy)5aX?Xy{ZSQTQY1^eGxOeR-oBZ;``>>6^zfXppCt42qR>gK@|Tsm0V1@faxSAp zny=B#c&a9@0gvFHYNOo;g7@n6Fhm`GfEpTvn){|L;b2hFscN1O+Jjl<5^bU@7u^+?u(XK{qWh6hHhyv;aL6%SlX!%H(Nn%>1-T#+xi3j^OpN_3t#X d{U0^^Xrjd|+9Qy~4jzwCvj{AnSojvZe*x};Z@&Nl literal 0 HcmV?d00001 diff --git a/translator/build/classes/main/llvmBuilder.class b/translator/build/classes/main/llvmBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..bb65853b6cae238f8f36d5542ab38065bb5c2382 GIT binary patch literal 531 zcmYjN&ubb%6#m|@jU6ybR4Oy1R_+g7Kr}=ks>?+nwnSsO=!g$=Ld!+Bxccpjs#sn7EJZ{e%IkNe zb???wekM{ILVZKS;YM7-KB2Nfyq`K&-b*7zs14GIjE6GQavZB4x#8XeZPb@pGFI6m z6MRo+*+hNP`E%GeMrFNNTB~^Z=C_$~I#EMyHJ5)hCUw&3)L673_@CAbQ~qr%yveY| zp0_~p?H_F2a3JuUZMY`!1OcNLeDeZMgNK*w1sZt8K47-aC~x+f@dZa^&I(8H`q=(= eD%kmtDt%N?Wfr?5kVOqoM<`eX7SAkvi@gWk#%y)~ literal 0 HcmV?d00001 diff --git a/translator/build/classes/main/org/kotlin/native/translator/debug/DebugKt.class b/translator/build/classes/main/org/kotlin/native/translator/debug/DebugKt.class new file mode 100644 index 0000000000000000000000000000000000000000..ce174ba60c20c3d20b274b83748a367af079fd13 GIT binary patch literal 3658 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 literal 0 HcmV?d00001 diff --git a/translator/gradle/wrapper/gradle-wrapper.jar b/translator/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..941144813d241db74e1bf25b6804c679fbe7f0a3 GIT binary patch literal 53636 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 DXC5Z7 literal 0 HcmV?d00001 diff --git a/translator/gradle/wrapper/gradle-wrapper.properties b/translator/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000000..87174db222c --- /dev/null +++ b/translator/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#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/translator/gradlew b/translator/gradlew new file mode 100755 index 00000000000..9d82f789151 --- /dev/null +++ b/translator/gradlew @@ -0,0 +1,160 @@ +#!/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:name=$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/translator/gradlew.bat b/translator/gradlew.bat new file mode 100644 index 00000000000..aec99730b4e --- /dev/null +++ b/translator/gradlew.bat @@ -0,0 +1,90 @@ +@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/translator/settings.gradle b/translator/settings.gradle new file mode 100644 index 00000000000..ffc54b24c49 --- /dev/null +++ b/translator/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'ast-kotlin' + diff --git a/translator/src/main/kotlin/KotlinScriptParser.kt b/translator/src/main/kotlin/KotlinScriptParser.kt new file mode 100644 index 00000000000..4183fdb40fe --- /dev/null +++ b/translator/src/main/kotlin/KotlinScriptParser.kt @@ -0,0 +1,121 @@ +package hello + +import com.intellij.openapi.util.Disposer +import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity +import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector +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.addJvmClasspathRoots +import org.jetbrains.kotlin.cli.jvm.config.getModuleName +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.config.JVMConfigurationKeys +import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.config.addKotlinSourceRoot +import org.jetbrains.kotlin.descriptors.PackageFragmentProvider +import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm +import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.resolve.TopDownAnalysisContext +import org.jetbrains.kotlin.resolve.TopDownAnalysisMode +import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade +import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM +import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory +import org.jetbrains.kotlin.utils.PathUtil +import java.io.File +import java.util.* +import java.util.logging.Logger +import org.kotlin.native.translator.debug.* + +/** + * Created by user on 7/8/16. + */ +class KotlinScriptParser { + companion object { + private val LOG = Logger.getLogger(KotlinScriptParser.javaClass.name) + private val messageCollector = object : MessageCollector { + override fun hasErrors(): Boolean { + throw UnsupportedOperationException() + } + + override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation) { + val path = location.path + val position = if (path == null) "" else "$path: (${location.line}, ${location.column}) " + + val text = position + message + + if (CompilerMessageSeverity.VERBOSE.contains(severity)) { + LOG.finest(text) + } else if (CompilerMessageSeverity.ERRORS.contains(severity)) { + LOG.severe(text) + } else if (severity == CompilerMessageSeverity.INFO) { + LOG.info(text) + } else { + LOG.warning(text) + } + } + } + + private val classPath: ArrayList by lazy { + val classpath = arrayListOf() + classpath += PathUtil.getResourcePathForClass(AnnotationTarget.CLASS.javaClass) + classpath + } + } + + fun parse(vararg files: String): TopDownAnalysisContext { + // The Kotlin compiler configuration + val configuration = CompilerConfiguration() + + val groupingCollector = GroupingMessageCollector(messageCollector) + //val severityCollector = MessageSeverityCollector(groupingCollector) + //configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, severityCollector) + + + configuration.addJvmClasspathRoots(PathUtil.getJdkClassesRoots()) + // The path to .kt files sources + files.forEach { configuration.addKotlinSourceRoot(it) } + // Configuring Kotlin class path + configuration.addJvmClasspathRoots(classPath) + configuration.put(JVMConfigurationKeys.MODULE_NAME, JvmAbi.DEFAULT_MODULE_NAME) + //configuration.put>(JVMConfigurationKeys.SCRIPT_PARAMETERS, CommandLineScriptUtils.scriptParameters()) + + val rootDisposable = Disposer.newDisposable() + try { + val environment = KotlinCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) + val ktFiles = environment.getSourceFiles() + //printFile(ktFiles.first()) + val sharedTrace = CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace() + val moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(environment.project, + environment.getModuleName()) + + val project = moduleContext.project + val allFiles = JvmAnalyzerFacade.getAllFilesToAnalyze(project, null, ktFiles) + val providerFactory = FileBasedDeclarationProviderFactory(moduleContext.storageManager, allFiles) + val lookupTracker = LookupTracker.DO_NOTHING + val packagePartProvider = JvmPackagePartProvider(environment) + val container = createContainerForTopDownAnalyzerForJvm( + moduleContext, + sharedTrace, + providerFactory, + GlobalSearchScope.allScope(project), + lookupTracker, + packagePartProvider, LanguageVersion.LATEST) + + val additionalProviders = ArrayList() + + additionalProviders.add(container.javaDescriptorResolver.packageFragmentProvider) + + return container.lazyTopDownAnalyzerForTopLevel.analyzeFiles(TopDownAnalysisMode.LocalDeclarations, allFiles, additionalProviders) + } finally { + rootDisposable.dispose() + //if (severityCollector.anyReported(CompilerMessageSeverity.ERROR)) { + // throw RuntimeException("Compilation error") + //} + } + } +} \ No newline at end of file diff --git a/translator/src/main/kotlin/debug.kt b/translator/src/main/kotlin/debug.kt new file mode 100644 index 00000000000..5b4e584cf6d --- /dev/null +++ b/translator/src/main/kotlin/debug.kt @@ -0,0 +1,56 @@ +/** + * Created by user on 7/8/16. + */ +package org.kotlin.native.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.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 printFile(file: KtFile) { + + for (declaration in file.declarations) { + + when (declaration) { + is KtNamedFunction -> printFunction(declaration) + else -> println(declaration.toString()) + } + } +} \ No newline at end of file diff --git a/translator/src/main/kotlin/llvmBuilder.kt b/translator/src/main/kotlin/llvmBuilder.kt new file mode 100644 index 00000000000..a06fbeb9348 --- /dev/null +++ b/translator/src/main/kotlin/llvmBuilder.kt @@ -0,0 +1,14 @@ +package hello + +class llvmBuilder{ + private val llvmCode : StringBuilder = StringBuilder() + class llvmBuilder constructor() {} + + fun addLlvmCode(code : String){ + llvmCode.appendln(code) + } + + override fun toString(): String { + return llvmCode.toString() + } +} \ No newline at end of file diff --git a/translator/src/main/kotlin/llvmVariable.kt b/translator/src/main/kotlin/llvmVariable.kt new file mode 100644 index 00000000000..7c0f255d22c --- /dev/null +++ b/translator/src/main/kotlin/llvmVariable.kt @@ -0,0 +1,3 @@ +package hello + +data class llvmVariable(val label : String) \ No newline at end of file diff --git a/translator/src/main/kotlin/main.kt b/translator/src/main/kotlin/main.kt new file mode 100644 index 00000000000..7c6ef167d3c --- /dev/null +++ b/translator/src/main/kotlin/main.kt @@ -0,0 +1,152 @@ +package hello + +import com.intellij.openapi.util.Disposer +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiWhiteSpace +import com.intellij.psi.impl.source.tree.LeafPsiElement +import com.intellij.psi.impl.source.tree.TreeElement +import com.intellij.psi.search.GlobalSearchScope +import com.intellij.psi.tree.IElementType +import org.jetbrains.kotlin.KtNodeType +import org.jetbrains.kotlin.KtNodeTypes +import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys +import org.jetbrains.kotlin.cli.common.messages.* +import org.jetbrains.kotlin.cli.jvm.compiler.* +import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots +import org.jetbrains.kotlin.cli.jvm.config.getModuleName +import org.jetbrains.kotlin.descriptors.PackageFragmentProvider +import org.jetbrains.kotlin.frontend.java.di.createContainerForTopDownAnalyzerForJvm +import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.psi.KtBlockExpression +import org.jetbrains.kotlin.resolve. AnalyzingUtils +import org.jetbrains.kotlin.resolve.TopDownAnalysisContext +import org.jetbrains.kotlin.resolve.TopDownAnalysisMode +import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade +import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM +import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory +import org.jetbrains.kotlin.utils.PathUtil +import org.jetbrains.kotlin.cli.jvm.compiler.* +import org.jetbrains.kotlin.config.* +import org.jetbrains.kotlin.lexer.KtKeywordToken +import org.jetbrains.kotlin.lexer.KtSingleValueToken +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.psi.KtBinaryExpression +import org.jetbrains.kotlin.psi.KtConstantExpression +import org.jetbrains.kotlin.psi.KtReturnExpression +import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext +import org.jetbrains.kotlin.psi.psiUtil.getNextSiblingIgnoringWhitespaceAndComments +import org.kotlin.native.translator.debug.debugPrintNode +import org.jetbrains.kotlin.lexer.KtToken +import java.lang.StringBuilder +import java.io.File +import java.util.* +import java.util.logging.Logger + + +var llvmCode = llvmBuilder() + +fun expressionWalker(expr : Any?) { + when(expr){ + is KtBlockExpression -> evaluateBlockExpression(expr) + is PsiElement -> evaluatePsiExpression(expr) + null -> Unit + else -> UnsupportedOperationException() + } +} + + +fun evaluateBlockExpression(expr : KtBlockExpression){ + var element = expr + expressionWalker(element.firstChild) + + expressionWalker(element.getNextSiblingIgnoringWhitespaceAndComments()) +} + +var variableCount = 0 +fun evaluatePsiExpression(expr : PsiElement){ + var element = expr + evaluateExpression(element.firstChild) + + evaluatePsiExpression(element.getNextSiblingIgnoringWhitespaceAndComments() ?: return) +} + +fun evaluateExpression(expr: Any?) : llvmVariable?{ + return when(expr){ + is KtBinaryExpression -> evaluateBinaryExpression(expr) + is PsiWhiteSpace -> null + is PsiElement -> evaluatePsiElement(expr) + is KtConstantExpression -> evaluateConstantExpression(expr) + null -> null + else -> throw UnsupportedOperationException() + } +} + +fun evaluateBinaryExpression(expr : KtBinaryExpression) : llvmVariable{ + val left = evaluateExpression(expr.firstChild) + val right = evaluateExpression(expr.lastChild) + val operator = expr.operationToken + + + + val llvmOperator = when (operator) { + KtTokens.PLUS -> "add nsw i32" + KtTokens.MINUS -> "sub nsw i32" + KtTokens.MUL -> "mul nsw i32" + else -> throw UnsupportedOperationException("Unkbown binary operator") + } + + variableCount++ + llvmCode.addLlvmCode("%var$variableCount = $llvmOperator ${left?.label}, ${right?.label}") + return llvmVariable("%var$variableCount") +} + +fun evaluateConstantExpression(expr : KtConstantExpression) : llvmVariable { + val node = expr.node + return llvmVariable(node.firstChildNode.text) +} + +fun evaluatePsiElement(element : PsiElement) : llvmVariable? { + return when(element){ + is LeafPsiElement -> evaluateLeafPsiElement(element) + is KtConstantExpression -> evaluateConstantExpression(element) + KtTokens.INTEGER_LITERAL -> null + else -> null + } +} + +fun evaluateLeafPsiElement(element : LeafPsiElement) : llvmVariable? { + return when(element.elementType){ + KtTokens.RETURN_KEYWORD -> evaluateReturnInstruction(element) + else -> llvmVariable("") + } + +} + +fun evaluateReturnInstruction(element : LeafPsiElement) : llvmVariable?{ + var next = element.getNextSiblingIgnoringWhitespaceAndComments(); + val retVar = evaluateExpression(next) + + llvmCode.addLlvmCode("ret i32 ${retVar?.label}") + return null +} + +fun main(args: Array) { + val scriptFile = "/home/user/Kotlin/manual/sum.kt" + + val parser = KotlinScriptParser() + + val analyzeContext = parser.parse(scriptFile) + + val function = analyzeContext.functions.keys.first() + var body = function.bodyExpression as KtBlockExpression + + llvmCode.addLlvmCode("define i32 @${function.fqName}() #0{") + + expressionWalker(body); + + llvmCode.addLlvmCode("}") + println(llvmCode) + + +} \ No newline at end of file