Commit Graph

2729 Commits

Author SHA1 Message Date
Georgy Bronnikov 4742057b51 IR: generate lambdas in place in Psi2Ir
even when arguments are to be rearranged.
Lambdas have no side effects, and storing them in temporary variables
prevents processing in the backend
(such as inserting continuation parameter in AddContinuationLowering).
2020-03-23 11:09:30 +03:00
pyos 186302d84e JVM_IR: restore InnerClasses for objects in lambdas 2020-03-19 15:23:44 +01:00
pyos e0a5ab7146 Do not regenerate objects if all captured lambdas are noinline 2020-03-19 15:11:20 +01:00
Jinseong Jeon 2352b1fec5 JVM_IR: use fresh source map when generating lambda body for inline. 2020-03-19 08:28:38 +01:00
pyos 72b80ef158 Detect inline cycles faster
E.g. in the following code

    fun x() {}
    inline fun f() { x(); g() }
    inline fun g() { x(); f() }

the old implementation of inline cycle detection bailed out after
generating 3 calls of x() in each function, while the new one stops
after 2. In other words, code generation for a single function is no
longer reentered.
2020-03-19 08:13:19 +01:00
Jiaxiang Chen 03613d4708 JVM_IR: preserve old backend's logic for special mutable collection class stub methods 2020-03-18 19:28:04 +01:00
Mikhail Glukhikh 0f0e5e603d [FIR2IR] Use IR built-in types, their symbols & constructors directly 2020-03-18 17:09:36 +03:00
pyos 2c06503311 JVM_IR: partially fix inline methods using captured crossinline lambdas
The fields containing crossinline lambdas should be package-private to
avoid generating synthetic accessors, which break object regeneration.

Note that the inline methods cannot actually be called, as call sites
will attempt to read the captured lambda from a field through a *copy*
of the local containing the object, so these reads will not be inlined,
causing an exception at runtime:

    inline fun f(crossinline g: () -> Unit) = object : I {
        inline fun h() = g()
        // effectively `val tmp = this; return tmp.$g()`:
        override fun run() = h()
    }

    f {}.run() // NoSuchFieldError: $g

This particular example can be fixed by reusing locals for receiver
parameters in IrInlineCodegen, but explicitly assigning `this` to
another variable and calling an inline method on it will break it again.
(This is only applicable to the JVM_IR backend, as the non-IR one fails
to generate `f` at all for some other reason.)
2020-03-18 13:13:54 +01:00
Dmitry Petrov dd27b3d4f1 KT-36973 Keep private default interface members private 2020-03-18 14:18:47 +03:00
Dmitry Petrov 1c24a97b9e KT-36972 Don't create proxies for companion @JvmStatic $default in host
When creating proxy functions in a host class for @JvmStatic members of
companion object, skip functions for default parameters handling.
2020-03-18 13:33:56 +03:00
Dmitry Petrov ade18d144a KT-36810 Implement javaPrimitiveType intrinsic in JVM_IR 2020-03-17 22:56:45 +03:00
Dmitry Petrov 2851fab281 KT-36809 Implement javaObjectType intrinsic in JVM_IR 2020-03-17 22:56:45 +03:00
pyos 2e542da91d JVM_IR: fix accesses from crossinline lambdas in other packages again 2020-03-17 16:38:32 +01:00
Dmitry Petrov 6809f4439c Fix range-based 'for' loop with 'continue' in range bounds
1. Search for increment function in range element type, not in inferred
induction variable type
(which can be inappropriate, e.g., 'Nothing' in case of 'continue').

2. Handle nested loops with shared exit labels
(generated by JVM_IR for KT-37370 case).

KT-37370 KT-37373
2020-03-17 12:18:48 +03:00
Steven Schäfer 6a1e35389c JVM IR: Mangle interface implementation methods in inline classes 2020-03-16 18:48:16 +01:00
Roman Artemev 8e295de593 [KLIB] Make sure float/double bits have fixed representation for NaN.
- Store float and double constants as fixed32/64 proto value
 and encode/decode them in our side.
2020-03-16 16:49:39 +03:00
Igor Chevdar a1eff7f4af [IR] Set source offsets in SAM lowering
This is needed for debug info generating in K/N
2020-03-16 11:58:36 +03:00
pyos bdd88e1655 JVM_IR: place suspend markers in faux lambdas around inline references
Otherwise, the assumption that coroutine codegen makes about every
inlined function already having the markers breaks and it is no longer
true that calls to inline lambdas do not require them.
2020-03-13 18:33:41 +01:00
Roman Artemev d27954a6d4 [IR] Use erased types in backing field initializer in case of generic delegated property
- Since neither IrProperty nor IrField is Type Parameter container
 using of proprty's type parameter in IrField related code leads to
 creation of "hanging" type parameters which should be considered as
 incorrect IR.
 - Such code designed to be prohibited in LV 1.5
 - The fix makes use of erased type in such case
 where type parameter is expected.
2020-03-13 17:28:31 +03:00
Roman Artemev 13a73b67de [IR] Fix IrPropertyReference for delegated property
- Make sure that property CR passed to `getValue` doesn't have type
 arguments.
2020-03-13 17:28:30 +03:00
Zalim Bashorov 7cf8697e30 [JS BEs] use star projection when type parameter used recursively
#KT-37128 Fixed
2020-03-13 10:15:56 +03:00
Georgy Bronnikov 426738b7d4 JVM_IR: Cache stubs in CollectionStubMethodLowering 2020-03-12 23:14:17 +03:00
Georgy Bronnikov 92268c8144 JVM_IR: do not generate excessive stubs for immutable collections 2020-03-12 23:14:17 +03:00
Alexander Udalov 244db9bcf9 JVM IR: don't rename fake overrides for fields
In case derived class has a field with the same name as the base class,
RenameFieldsLowering previously tried to rename one of the fields by
adding the "...$1" suffix, which led to NoSuchFieldError.
2020-03-12 13:51:40 +01:00
Dmitry Petrov c0b15b1768 KT-37448 'this' in delegating constructor call may refer to outer object 2020-03-12 13:40:14 +03:00
Ilmir Usmanov 7efab887aa JVM_IR: Do not generate accessor for private function
if the function is called in suspendCoroutine's lambda.
 #KT-37242 Fixed
2020-03-12 11:15:46 +01:00
Georgy Bronnikov fded6fb494 JVM_IR: fix suspendCoroutineUninterceptedOrReturn 2020-03-12 11:28:42 +03:00
Ilmir Usmanov fd70b10b17 JVM_IR: Generate suspend fun main wrapper as class instead of reference
This way, there is no getName, getOwner and getSignature generated.
 #KT-37404: Open
2020-03-11 15:34:38 +01:00
Mark Punzalan 2239b5ceab [JVM IR] Maintain KT-36188 bug compatibility between non-IR and IR
backends.
2020-03-11 14:33:31 +01:00
Svyatoslav Kuzmich f113c22450 [JS IR BE] Fix enum entry initialization
Keep helper fields uninitialized. This way thier initialization
would not depend on field initialization order.
2020-03-11 14:28:20 +03:00
Zalim Bashorov 7dc9a2fc64 [JS IR BE] Add intrinsic for hashCode on Boolean 2020-03-11 12:54:43 +03:00
Zalim Bashorov 2103c0e0f8 [JS IR BE] Add intrinsic for hashCode on String 2020-03-11 12:54:43 +03:00
Zalim Bashorov 9e59d93ad5 [JS IR BE] Add intrinsics for hashCode on primitive number types 2020-03-11 12:54:42 +03:00
Zalim Bashorov 62014e6711 [JS IR BE] Add better error message when some function not found during init JsIrBackendContext 2020-03-11 12:54:41 +03:00
Zalim Bashorov d22e4495de [JS IR DCE] Improve handling overrides
Introduce the notion of contagious for overridable declarations.
So, now overriding uncontagious declaration will not lead to becoming a declaration reachable.
By default, all declarations treated as contagious, it's not the most efficient, but it's safest.
In case when we access a declaration through a fake-override declaration,
the original (real) one will not be marked as contagious, so, later,
other overrides will not be processed unconditionally only because
it overrides a reachable declaration.
2020-03-11 12:54:40 +03:00
Zalim Bashorov 2a7e32d3ae [JS IR DCE] Add CLI option to print reachability info 2020-03-11 12:54:39 +03:00
Zalim Bashorov 16cd3f0cef [JS IR DCE] Print reachability info 2020-03-11 12:54:39 +03:00
Zalim Bashorov e6657b016f [JS IR DCE] Move withNested fun to get better diff in the next commit 2020-03-11 12:54:39 +03:00
Zalim Bashorov 95d248189f [JS IR BE] JsClassGenerator: don't use descriptor for error message 2020-03-11 12:54:39 +03:00
Dmitry Petrov 90d012cecb Handle unbound extension receiver in callable reference adaptation 2020-03-10 16:56:48 +03:00
Alexander Udalov 795d6ab407 Migrate UseExperimental->OptIn in project sources 2020-03-10 12:07:14 +01:00
Roman Artemev 7fff4e78e5 [KLIB] Do not include return type into mangle 2020-03-10 11:12:09 +03:00
Roman Artemev 62621de4fc [KLIB] Don't have a special mangle for internal declarations 2020-03-10 11:12:09 +03:00
Roman Artemev 7034edac4c [JS IR] Move signature consistency checker into appropriate place 2020-03-10 11:12:08 +03:00
pyos 735fae0e5a JVM_IR: apply TailCallOptimizationLowering to all suspend functions
Even if a function is known to be tail call because it's a compiler
generated bridge, the tail return might still need to be added in case
of Unit return type.
2020-03-09 19:21:32 +01:00
pyos 862cd5665b JVM_IR: add continuations to inline suspend lambdas in the lowering
Delaying suspend view generation until the inliner is not a good idea
because it prevents lowerings after AddContinuationLowering from
further transforming the declarations.
2020-03-09 17:05:42 +01:00
pyos b393f2f680 JVM_IR: merge suspend view and suspend stub maps 2020-03-09 17:05:42 +01:00
Victor Petukhov 92a0ddfe71 NI: discard def not null types if they appear in return positions, in inv or in variance
^KT-37343 Fixed
2020-03-08 19:00:27 +03:00
Mark Punzalan 368b0d9b0b [JVM IR] Use reference equality when comparing enums. 2020-03-06 23:01:32 +01:00
Mark Punzalan a732e8f5fe [JVM IR] Ensure there is one accessor for each super access from a
subclass when there are multiple subclasses in a file.
2020-03-06 22:59:52 +01:00