Nikolay Igotti
cc1b2b9684
Add CheckCast().
2016-11-16 18:41:36 +03:00
Nikolay Igotti
060163d1c4
Add ClassCastException thrower, small refactoring. ( #67 )
2016-11-16 18:34:35 +03:00
Nikolay Igotti
16a44ef765
Fix test that would require autoboxing.
2016-11-16 16:28:25 +03:00
Nikolay Igotti
26e8b4860a
Enable array1 test.
2016-11-16 16:24:33 +03:00
Vasily Levchenko
ab83f5b681
pasto fixed in const evaluation
2016-11-16 15:11:44 +03:00
Nikolay Igotti
0f12daa591
Fix expectations.
2016-11-16 11:23:05 +03:00
Svyatoslav Scherbina
1ff59e2cd2
backend: add some trivial tests for RTTI
2016-11-16 14:58:57 +07:00
Svyatoslav Scherbina
f147860fea
backend: fix some bugs and improve RTTI
...
* fix incorrect assert at RTTIGenerator.kt:109
* add `final override` methods to methods table (aka openMethods)
* fix NPE when building vtable with `final override` methods
* make vtable generation impl more clear
2016-11-16 14:58:57 +07:00
Nikolay Igotti
db15540a74
Review feedback on previous changes. ( #64 )
2016-11-16 10:46:56 +03:00
Alexander Gorshenev
ca193efa5c
Introduced shims for LLVM StubGenerator.
...
Run your gradlew task with -Dshims=true to dump the trace
This is not a complete executable solution yet, but already very useful for llvm api tracing
2016-11-16 02:07:51 +04:00
SvyatoslavScherbina
755194486b
backend, runtime: improve support for abstract methods ( #62 )
...
backend, runtime: improve support for abstract methods
Do not generate vtable and openMethods for abstract classes and interfaces
2016-11-15 17:30:49 +07:00
Nikolay Igotti
c5cfa0ac4f
Add String.subSequence implementation. ( #61 )
2016-11-15 13:27:21 +03:00
Konstantin Anisimov
69b7cdb866
Support for built in types com parision implemented
...
for following code snipped:
---------------8<---------------
> cat ../backend.native/tests/codegen/function/eqeq.kt
fun eqeqB (a:Byte, b:Byte ) = a == b
fun eqeqS (a:Short, b:Short ) = a == b
fun eqeqI (a:Int, b:Int ) = a == b
fun eqeqL (a:Long, b:Long ) = a == b
fun eqeqF (a:Float, b:Float ) = a == b
fun eqeqD (a:Double, b:Double) = a == b
fun eqeqStr(a:String, b:String) = a == b
fun gtI (a:Int, b:Int ) = a > b
fun ltI (a:Int, b:Int ) = a > b
fun geI (a:Int, b:Int ) = a >= b
fun leI (a:Int, b:Int ) = a <= b
fun neI (a:Int, b:Int ) = a != b
fun gtF (a:Float, b:Float ) = a > b
fun ltF (a:Float, b:Float ) = a > b
fun geF (a:Float, b:Float ) = a >= b
fun leF (a:Float, b:Float ) = a <= b
fun neF (a:Float, b:Float ) = a != b
fun helloString() = "Hello"
fun goodbyeString() = "Goodbye"
---------------8<---------------
interesting cases here are '==' for primitive and objects and any < =< > >= and separatelly !=
---------------8<---------------
; ModuleID = '../backend.native/tests/codegen/function/eqeq.kt.bc'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.12.0"
...
define i1 @"kfun:eqeqB(Byte;Byte)"(i8, i8) {
entry:
%a = alloca i8
store i8 %0, i8* %a
%b = alloca i8
store i8 %1, i8* %b
%tmp_1 = load i8, i8* %a
%tmp_2 = load i8, i8* %b
%tmp_0 = icmp eq i8 %tmp_1, %tmp_2 <- '==' for primitive
ret i1 %tmp_0
}
...
define i1 @"kfun:eqeqStr(String;String)"(i8*, i8*) {
entry:
%a = alloca i8*
store i8* %0, i8** %a
%b = alloca i8*
store i8* %1, i8** %b
%tmp_1 = load i8*, i8** %a
%tmp_2 = load i8*, i8** %b
%tmp_0 = call i1 @Kotlin_String_equals(i8* %tmp_1, i8* %tmp_2) <-- '==' for object
ret i1 %tmp_0
}
...
define i1 @"kfun:gtI(Int;Int)"(i32, i32) {
entry:
%a = alloca i32
store i32 %0, i32* %a
%b = alloca i32
store i32 %1, i32* %b
%tmp_2 = load i32, i32* %a
%tmp_3 = load i32, i32* %b
%tmp_1 = call i32 @Kotlin_Int_compareTo_Int(i32 %tmp_2, i32 %tmp_3) <-- '>' for primitive
%tmp_0 = icmp sgt i32 %tmp_1, 0 <--/
ret i1 %tmp_0
}
...
define i1 @"kfun:neI(Int;Int)"(i32, i32) {
entry:
%a = alloca i32
store i32 %0, i32* %a
%b = alloca i32
store i32 %1, i32* %b
%tmp_2 = load i32, i32* %a
%tmp_3 = load i32, i32* %b
%tmp_1 = icmp eq i32 %tmp_2, %tmp_3 <--- '!=' fro primitive
%tmp_0 = icmp ne i1 %tmp_1, true <--/
ret i1 %tmp_0
}
---------------8<---------------
2016-11-15 09:41:25 +03:00
Konstantin Anisimov
04822dda69
Tests for integer cmp operation added
2016-11-15 09:41:25 +03:00
Konstantin Anisimov
59fff52e0c
to_master: formatting fix
...
(cherry picked from commit f7b1ce10f84371bc9f00e91c1f1fb7ed56df9a87)
2016-11-15 09:22:57 +03:00
Vasily Levchenko
c99baeaf5d
kotlin-compiler: 1.1-20161111.171344-253
2016-11-14 14:41:22 +03:00
Nikolay Igotti
fe032a8ba9
Add missing classes to work without builtins. ( #57 )
2016-11-14 14:08:20 +03:00
Nikolay Igotti
ae5e838305
Add overrides by name. ( #54 )
2016-11-14 13:25:50 +03:00
SvyatoslavScherbina
248d9ad2ef
Merge pull request #56 from JetBrains/add-fun-signatures
...
Add function signatures to symbol names and RTTI
2016-11-14 14:13:12 +07:00
Svyatoslav Scherbina
3d36973022
backend/build: improve LLVM link options
...
Update options according to llvm-config:
* delete "--stdlib=libc++" (it seems to provoke runtime link errors on Linux)
* remove "-lffi" (it doesn't seem to be required)
* remove "-lc++" on macOS
Also move Linux system libs options to llvm.def (as for macOS)
2016-11-14 14:12:25 +07:00
Konstantin Anisimov
d1a303bb25
Refactoring:
...
1. generator -> codegen
2. tmpVariable -> newVar
3. All calls for LLVM* functions migrated to CodeGenerator
4. mutable list -> list for arguments.
2016-11-14 10:01:23 +03:00
Svyatoslav Scherbina
f389ebf687
backend/tests: update resolved symbol names
...
according to new mangling scheme
2016-11-14 13:33:47 +07:00
Svyatoslav Scherbina
cc4f0ca1a4
backend: add basic support for override by name
2016-11-14 13:31:14 +07:00
Konstantin Anisimov
c47a58d34f
codegen: implementation virtual calls and bit refactoring... callVirtual and callDirect become members of Ir2Bitcode.
...
some details: this is runtime based function resolving will be replaced with compile time soon.
example:
-----------------8<-----------------
> cat ../backend.native/tests/runtime/basic/hello2.kt
// TODO: remove kotlin_native.io once overrides are in place.
fun main(args : Array<String>) {
print("you entered '" + readLine() + "'")
}
-----------------8<-----------------
translator generates following (reduced)
-----------------8<-----------------
> llvm-dis-mp-3.8 ../backend.native/tests/runtime/basic/hello2.kt.bc -o -
; ModuleID = '../backend.native/tests/runtime/basic/hello2.kt.bc'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.12.0"
...
define void @"kfun:main"(i8*) {
entry:
%args = alloca i8*
store i8* %0, i8** %args
%tmp_3 = call i8* @Kotlin_io_Console_readLine()
%tmp_1 = call i8* @"kfun:kotlin.String.plus"(i8* @"kstr:bwW55yLpGKEB25tD4IQg8ZiUSe0=", i8* %tmp_3)
%tmp_0 = call i8* @"kfun:kotlin.String.plus"(i8* %tmp_1, i8* @"kstr:u1idBiHlRy9HD6NCWiNMdLHiAug=")
call void @Kotlin_io_Console_print(i8* %tmp_0)
ret void
}
declare i8* @Kotlin_io_Console_readLine()
define i8* @"kfun:kotlin.String.plus"(i8*, i8*) {
entry:
%this = alloca i8*
store i8* %0, i8** %this
%other = alloca i8*
store i8* %1, i8** %other
%tmp_1 = load i8*, i8** %this
%tmp_3 = load i8*, i8** %other
%tmp_4 = bitcast i8* %tmp_3 to i8**
%tmp_5 = load i8*, i8** %tmp_4
%tmp_6 = bitcast i8* %tmp_5 to %struct.TypeInfo*
%tmp_7 = call i8* @LookupOpenMethod(%struct.TypeInfo* %tmp_6, i64 5382438289122769377) <-- runtime resolve method
%tmp_8 = bitcast i8* %tmp_7 to i8* (i8*)*
%tmp_2 = call i8* %tmp_8(i8* %tmp_3)
%tmp_0 = call i8* @Kotlin_String_plusImpl(i8* %tmp_1, i8* %tmp_2)
ret i8* %tmp_0
}
-----------------8<-----------------
2016-11-11 17:43:44 +03:00
Konstantin Anisimov
24e0ae7d00
rtti: introduces functionName extension function to FunctionDescriptor for filling vtable with hashcode and reusing it in codegeneration
2016-11-11 17:43:44 +03:00
Konstantin Anisimov
fa3943c8bd
TEST: enabled hello2 test case
2016-11-11 17:43:44 +03:00
Nikolay Igotti
4a0b78f7b4
Make builtin classes final. ( #53 )
2016-11-11 17:35:37 +03:00
Nikolay Igotti
4b7f67d976
Fix array accessor signatures, add array test to fix.
2016-11-11 16:21:48 +03:00
Svyatoslav Scherbina
edf3708515
build: fix linking tests on Linux
...
runtime now requires "-lm"
2016-11-11 19:22:34 +07:00
Svyatoslav Scherbina
66bd698270
build: make clang using gcc toolchain on Linux
...
also fix Mac build failure related to 'ar'
2016-11-11 19:22:34 +07:00
Svyatoslav Scherbina
bee2a76008
build: refactor platform checks
...
also improve verbosity when downloading dependencies fails
2016-11-11 19:22:34 +07:00
Nikolay Igotti
720947facb
Alloc arrays, fix RTTI for Any ( #49 )
2016-11-11 15:03:49 +03:00
Nikolay Igotti
af85121b2c
Add primitive types to String conversion. ( #50 )
2016-11-11 14:16:15 +03:00
Konstantin Anisimov
a910627357
tests: added eqeq test
...
tests: sum-test: emproved test sum of int with various types of second argument (byte, short and etc)
tests: hello2 minor fix in test
2016-11-10 15:25:08 +03:00
Konstantin Anisimov
265f688425
runtime: operators' (+, -, %, /, *, inc, dec, boolean arithmetic, compareTo, unaryPlus, unaryMinus, conversions) implementations for primitive types (byte, short, int, long, float, double)
2016-11-10 15:25:08 +03:00
Konstantin Anisimov
cb39f650f3
codegen: operator processing for primitive and other types
2016-11-10 15:25:08 +03:00
Nikolay Igotti
6c90ab1176
Use toolchain with relative paths on Linux.
2016-11-09 17:05:18 +03:00
Nikolay Igotti
71088c85ad
Add more runtime, avoid codegen for interfaces. ( #47 )
...
* Add more runtime, avoid codegen for interfaces.
* backend: fix bug in RTTIGenerator
kotlin.Nothing has no supertypes
* runtime: enable kotlin.Nothing
2016-11-09 09:20:34 +03:00
Nikolay Igotti
00fdc90d43
Hack to run tests on Linux.
2016-11-08 18:31:45 +03:00
Nikolay Igotti
91035b692b
Add more console operations, nicer naming in natives. ( #46 )
2016-11-08 17:38:36 +03:00
Vasily Levchenko
5b7d0257e8
upgrade kotlin-compiler: 20161108.133759-248
2016-11-08 17:38:09 +03:00
Alexander Udalov
a7bef2d0ee
Lower priority of compiler built-ins in resolution ( #43 )
...
* Remove unneeded module context creation in K2Native
Calling this method is useful only when its result is used
* Use JvmAbi from compiler instead of reflection implementation
Package "kotlin.reflect.jvm.internal.impl" is internal implementation detail of
kotlin-reflect and should not be used
* Run native back-end with "-ea"
This allows to get more detailed messages in case something fails
* Lower priority of compiler built-ins in resolution
CREATE_BUILT_INS_FROM_MODULE_DEPENDENCIES makes sure that the "built-ins" that
the compiler front-end uses during the resolution are loaded from the module
being resolved itself, i.e. from its sources and/or dependencies. E.g. if
there's a class named kotlin.Any in module sources, it'll become the default
supertype for any class without an explicit supertype.
ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES adds the built-ins from the
compiler jar to the end of the dependencies list of the module being resolved.
This option makes sure that if there's no built-in class in module
sources/dependencies and it is required by the front-end, the class definition
from the compiler jar will be taken instead of failing with an exception.
If both of these options are turned on, the effect is basically that compiler
built-ins are still there in the classpath, but have a lower priority than
classes explicitly declared in sources
2016-11-08 16:20:33 +03:00
Nikolay Igotti
a354f4b605
Make String CharSequence compatible.
2016-11-08 14:16:59 +03:00
alexander-gorshenev
d2bf3a6ceb
Merge pull request #44 from JetBrains/relocation
...
Further relocation from 'native' to 'kotlin'
2016-11-08 14:52:47 +04:00
Alexander Gorshenev
67889cb31c
Further relocation from 'native' to 'kotlin'
...
Moved the left behind files and renamed the package.
2016-11-08 13:22:24 +03:00
Konstantin Anisimov
4a20e37c9f
code generator fixes:
...
1. IR visitor does not stop children processing on IrClass entry.
2. method call (namely property getter).
2016-11-08 11:13:26 +03:00
Svyatoslav Scherbina
55f8257f92
build: simplify clang(++) configuration
...
also introduce 'execClang' block
2016-11-08 13:51:25 +07:00
Konstantin Anisimov
4e5e7d37ee
Implemented support for loop codegeneration: "while" and "do-while".
...
for code "while loop":
-------------8<-------------
> cat ../backend.native/tests/codegen/cycles/cycle.kt
fun cycle(cnt: Int): Int {
var sum = 1
while (sum == cnt) {
sum = sum + 1
}
return sum
}
-------------8<-------------
translator generates:
-------------8<-------------
> llvm-dis-mp-3.8 ../backend.native/tests/codegen/cycles/cycle.kt.bc -o -
; ModuleID = '../backend.native/tests/codegen/cycles/cycle.kt.bc'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.12.0"
...
define i32 @"kfun:cycle"(i32) {
entry:
%cnt = alloca i32
store i32 %0, i32* %cnt
%sum = alloca i32
store i32 1, i32* %sum
br label %label_0
label_0: ; preds = %label_1, %entry
%tmp1 = load i32, i32* %sum
%tmp2 = load i32, i32* %cnt
%tmp0 = icmp eq i32 %tmp1, %tmp2
br i1 %tmp0, label %label_1, label %label_2
label_1: ; preds = %label_0
%tmp6 = load i32, i32* %sum
%tmp5 = add i32 %tmp6, 1
store i32 %tmp5, i32* %sum
br label %label_0
label_2: ; preds = %label_0
%tmp8 = load i32, i32* %sum
ret i32 %tmp8
}
-------------8<-------------
for "do-while" code:
-------------8<-------------
> cat ../backend.native/tests/codegen/cycles/cycle_do.kt
fun cycle_do(cnt: Int): Int {
var sum = 1
do {
sum = sum + 2
} while (sum == cnt)
return sum
}
-------------8<-------------
translator produces:
-------------8<-------------
> llvm-dis-mp-3.8 ../backend.native/tests/codegen/cycles/cycle_do.kt.bc -o -
; ModuleID = '../backend.native/tests/codegen/cycles/cycle_do.kt.bc'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.12.0"
define i32 @"kfun:cycle_do"(i32) {
entry:
%cnt = alloca i32
store i32 %0, i32* %cnt
%sum = alloca i32
store i32 1, i32* %sum
br label %label_0
label_0: ; preds = %label_1, %entry
%tmp3 = load i32, i32* %sum
%tmp2 = add i32 %tmp3, 2
store i32 %tmp2, i32* %sum
br label %label_1
label_1: ; preds = %label_0
%tmp6 = load i32, i32* %sum
%tmp7 = load i32, i32* %cnt
%tmp5 = icmp eq i32 %tmp6, %tmp7
br i1 %tmp5, label %label_0, label %label_2
label_2: ; preds = %label_1
%tmp8 = load i32, i32* %sum
ret i32 %tmp8
}
-------------8<-------------
2016-11-08 06:35:50 +03:00
Konstantin Anisimov
152e738e23
Tests for "while" and "do-while" loop generation
2016-11-08 06:35:50 +03:00
Nikolay Igotti
bfb6e448c5
Remove gradle wrapper in experiments.
2016-11-07 19:22:56 +03:00