Commit Graph

1363 Commits

Author SHA1 Message Date
Nikolay Igotti 90577d440a Improve object arrays support. (#182)
Also fix the way how symbol names are being generated. Before arrays2.kt was not linking.
2017-01-16 12:22:27 +03:00
Svyatoslav Scherbina 3b4c25988e backend/tests: add defaults{4,5,6} 2017-01-16 10:57:40 +07:00
Vasily Levchenko 81d77c39f4 IR: default parameter extension support
for code
```
fun Int.foo(a:Int, b:Int = a + 1, c:Int = a + b) = a + b +c

fun main(arg:Array<String>) {
  42.foo(0)
}
```
we generate IR representation corresponding to the following code
```
fun Int.foo(a:Int, b:Int, c:Int) = a + b +c

fun foo_default(a:Int, b:Int, c:Int, __mask__:Int, __receiver__:Int):Int {
    var tmpb:Int = 0
    if ((__mask__ and (1 shl 1)) != 0)
        tmpb = a + 1
    else
        tmpb = b
    var tmpc:Int = 0
    if ((__mask__ and (1 shl 2)) != 0)
        tmpc = a + tmpb
    else
        tmpc = c
    return __receiver__.foo(a, tmpb, tmpc)
}

fun main(arg:Array<String>) {
  foo_default(0, 0, 0, 6 /* (1 shl 1) | (1 shl 2)*/, 42)
}
```

NOTE: if call provides all arguents we don't emit call of _default function.
2017-01-13 13:42:02 +03:00
Vasily Levchenko a8caf7c7d8 TEST: test for default parameters
(cherry picked from commit 7999d68d812aedd5863f04b7fd2171e284b8f332)
2017-01-13 13:42:02 +03:00
Svyatoslav Scherbina b994fabadd backend: update kotlin-compiler and remove code contributed to Kotlin
Update kotlin-compiler to 1.1-20170112.203631-353

Also remove workarounds for fixed bugs.
2017-01-13 16:13:49 +07:00
Nikolay Igotti 239a573142 GC interface. (#178) 2017-01-13 12:03:38 +03:00
Nikolay Igotti b1101ba43e Cycle collector. (#175) 2017-01-11 17:38:03 +03:00
Svyatoslav Scherbina 8b83cb2adf backend: enable some tests 2017-01-11 19:32:25 +07:00
Svyatoslav Scherbina 26dd735240 runtime: enable some stdlib code 2017-01-11 19:32:25 +07:00
Svyatoslav Scherbina 7464b2cb09 backend: improve support for references to vararg functions
(doesn't happen for now)
2017-01-11 19:32:25 +07:00
Svyatoslav Scherbina f08bd7aa6f backend: erase types in callable reference targets
(required because function types are not specialized yet)
2017-01-11 19:32:25 +07:00
Svyatoslav Scherbina 0e6d8c3a7c backend: support boxing when generics involved 2017-01-11 19:32:25 +07:00
Svyatoslav Scherbina 83bdae5d02 backend: use "erased" types for LLVM function signatures 2017-01-11 19:32:25 +07:00
Svyatoslav Scherbina 92b462255c runtime: implement remaining boxing 2017-01-11 19:32:25 +07:00
Svyatoslav Scherbina 7986598591 runtime: add missing toChar implementations
(required for boxes)
2017-01-11 19:32:25 +07:00
Vasily Levchenko 1b79ae1ade .gitignore: .bc.o added
(cherry picked from commit 02ebe718f1da06a2286ddab56da09a146a491000)
2017-01-09 12:29:17 +03:00
Nikolay Igotti 61d6967f3c Support missing when branch exception throwing. (#174) 2016-12-31 12:01:56 +03:00
Svyatoslav Scherbina 3a9ba76d91 backend/build: rebuild stdlib and start if Kotlin sources changed 2016-12-30 14:48:51 +07:00
Svyatoslav Scherbina d1892a35ba stdlib: disable HashMap views caching because it leads to memory leaks
due to reference cycles
2016-12-30 14:48:51 +07:00
Svyatoslav Scherbina 5d8a28e5fc backend/tests: add runtime/memory/throw_cleanup.kt 2016-12-30 14:48:51 +07:00
Svyatoslav Scherbina 4cfe569001 backend: perform cleanup if leaving the frame with exception
Also unify `call` & `invoke`, allow `call` without landingpad only if
target function is nounwind
2016-12-30 14:48:51 +07:00
Svyatoslav Scherbina d389897631 backend: generate refs cleanup code for exceptional unwind 2016-12-30 14:48:51 +07:00
Svyatoslav Scherbina 57ae3a1cc7 runtime: mark some functions as not throwing (nounwind) 2016-12-30 14:48:51 +07:00
Svyatoslav Scherbina 7374ea642f backend: import external functions with proper attributes 2016-12-30 14:48:51 +07:00
Svyatoslav Scherbina b531d984c8 backend/build: add hack to workaround missing interop features 2016-12-30 14:48:51 +07:00
Nikolay Igotti 667d3b9356 Switch when to phi. (#172) 2016-12-29 16:33:23 +03:00
Alexander Gorshenev c15fb6833d Profiling machinery. 2016-12-29 16:07:43 +04:00
Alexander Gorshenev 3f65eeaeab Changed byte array copying to a more efficient mechanism. 2016-12-29 16:07:43 +04:00
Nikolay Igotti 174cdc321c Properly keep track of references. (#169) 2016-12-29 14:11:17 +03:00
Svyatoslav Scherbina b25225ba5e Review feedback 2016-12-29 17:46:28 +07:00
Svyatoslav Scherbina 4f1004c8f5 backend: reorder basic blocks to improve bitcode readability.
* Insert created basic block after the current one in `codegen.basicBlock()`.
* Slightly reorder calls to `codegen.basicBlock()`.
2016-12-29 17:46:28 +07:00
Nikolay Igotti 7ba096b169 Group slots together. (#166) 2016-12-29 09:00:01 +03:00
Svyatoslav Scherbina 276e3bcd44 backend/tests:
* enable 'expression_as_statement'
* add unit{1..4}
2016-12-29 12:18:15 +07:00
Svyatoslav Scherbina 43b3902a0f backend: refactor evaluateExpression
* Do not encode `Unit`- and `Nothing`-typed values as `null`;
  make `evaluateExpression` return type not nullable.

* Evaluate only expressions, not statements.

* Reduce usage of recursive visiting in `CodeGeneratorVisitor`
  because it usually leads to errors.
2016-12-29 12:18:15 +07:00
Svyatoslav Scherbina dfa07836fd backend: add workaround for phi nodes with zero entries 2016-12-29 12:18:15 +07:00
Svyatoslav Scherbina 7797b0efdc backend: treat kotlin.Unit type specially only when used as return type
also remove some hacks related to Unit.
2016-12-29 12:18:15 +07:00
Svyatoslav Scherbina 9a3bcd4c19 backend: statically instantiate kotlin.Unit
and optimize IrGetObjectValue(Unit)
2016-12-29 12:18:15 +07:00
Svyatoslav Scherbina 462d2b5123 backend/StaticData: weaken existing global assertion
to handle the case when global is used before defined
(e.g. kotlin.Unit in stdlib).
2016-12-29 12:18:15 +07:00
Svyatoslav Scherbina 361bb7a101 runtime, backend: simplify static objects layout:
mark static objects with container_offset_negative_ == 0
2016-12-29 12:18:15 +07:00
Nikolay Igotti ddf47e9359 Add more init tests. 2016-12-28 15:26:44 +03:00
Svyatoslav Scherbina c0914825d9 backend/tests: add disabled test 'fields2'
Checks properties with custom accessors and backing fields.
2016-12-28 14:00:45 +07:00
Svyatoslav Scherbina 8b40b9645a backend/tests: add disabled tests memory_var{1..4} 2016-12-28 13:51:14 +07:00
Alexander Gorshenev 413f47fda5 Removed 'clang' invocations in favour of llvm tools and 'ld'.
Introduced LinkStage in the compiler.

Removed the link stage from 'konanc'.

Removed duplicate :stdlib and :start targets.

Simplified test run task a lot.
2016-12-28 02:13:07 +04:00
Nikolay Igotti e65b86ab21 Memory management design and implementation. (#148) 2016-12-27 15:01:18 +02:00
Alexander Gorshenev c9fbd37f90 Use lower case for phase names. 2016-12-27 16:11:45 +04:00
Vasily Levchenko 3fe59cc46c TEST: convertion unit tests into run tests 2016-12-27 13:56:03 +03:00
Svyatoslav Scherbina 7fd4b4fe34 backend: use IR builders in CallableReferenceLowering 2016-12-27 16:04:40 +07:00
Svyatoslav Scherbina 7b29f4854c backend: lower safe casts 2016-12-27 16:04:40 +07:00
Svyatoslav Scherbina 008b8ec031 backend: connect lowering with IR generators 2016-12-27 16:04:40 +07:00
Svyatoslav Scherbina 96611c1222 backend: add some trivial utils to IR builders 2016-12-27 16:04:40 +07:00