Commit Graph

5266 Commits

Author SHA1 Message Date
Dmitry Petrov 1dbbe22c8c JVM_IR serializable indy method references 2021-10-23 11:21:25 +03:00
Dmitry Petrov eec16b83c6 Minor: reformat and fix warnings 2021-10-23 11:21:23 +03:00
Svyatoslav Kuzmich 4fc461a2ff [Wasm] Imporove external interface support
* Support boxing/unboxing when casting to Any
* Support ===, equals, hashCode, toString

* Support adapting String in interop boundary
2021-10-23 01:26:12 +03:00
Dmitry Petrov d5f6674d2d JVM_IR KT-49335 run RepeatedAnnotationLowering per module
Otherwise, we drop annotation constructors in AnnotationLowering,
which breaks RAL in case of annotation container declared in different
file.
2021-10-21 21:22:36 +03:00
Ilya Goncharov f6ba2a958a [JS IR] No generate exportness for overridden properties
[JS IR] Add check on existence of overridden property in tests

^KT-49326 fixed

[JS IR] Add details to comment with exporting properties

^KT-49326 fixed

[JS IR] No generate exportness for overridden properties,

if only no override val -> var

^KT-49326 fixed

Merge-request: KT-MR-4810
2021-10-21 10:52:48 +00:00
Artem Kobzar 876d358fe6 fix(KT-46961): add support of nested external enums. 2021-10-21 06:40:00 +00:00
Artem Kobzar 3dbf996ec6 fix(KT-49225): remove unnecessery boxing. 2021-10-21 06:38:42 +00:00
Sergej Jaskiewicz 9e5520bba8 [JS IR & WASM] Fix executing init blocks for enums with nested objects 2021-10-18 13:37:16 +00:00
Anton Bannykh 283e37c741 [JS IR] fix warnings 2021-10-15 20:14:54 +03:00
Anton Bannykh c2f7ed2fff [JS IR] added a directive to skip IC checks in IR 2021-10-15 20:14:53 +03:00
Anton Bannykh 94ed6a1dbd [JS IR] bring back old ir2js to work alongside with the new one
Should be removed when we're sure the new one is OK
2021-10-15 20:14:53 +03:00
Anton Bannykh 1d42b6cb3f [JS IR] make InnerClassesLowering.kt work with abscent bodies 2021-10-15 20:14:52 +03:00
Anton Bannykh 546ce501cb [JS IR] run IC box tests 2021-10-15 20:14:51 +03:00
Anton Bannykh b1b88a0d11 [JS IR] JS AST serialization 2021-10-15 20:14:50 +03:00
Anton Bannykh 95ab5e1b7e [JS IR] generate JS separately for each file and link at the end
Name clashes are handled as a post-processing step
2021-10-15 20:14:50 +03:00
Anton Bannykh 936383254a [JS IR] explicitly mark JsName's temporary or not 2021-10-15 20:14:49 +03:00
Anton Bannykh 7e7c84fcfb [JS IR] move fragment generation closer to the beginning 2021-10-15 20:14:48 +03:00
Anton Bannykh b1b263615c [JS IR] handle exports per-file 2021-10-15 20:14:47 +03:00
Anton Bannykh aec743d7a6 [JS IR] handle tests per-file 2021-10-15 20:14:47 +03:00
Anton Bannykh 9f2762cfa6 [JS IR] handle main function per-file 2021-10-15 20:14:46 +03:00
Anton Bannykh 1af1d13cf3 [JS IR] split resulting code into fragments 2021-10-15 20:14:45 +03:00
Anton Bannykh d595264cc8 [JS IR] move JsGenerationContext towards it's use 2021-10-15 20:14:43 +03:00
Svyatoslav Kuzmich 0f66f85cf9 [Wasm] Support main function 2021-10-15 13:58:55 +03:00
Dmitry Petrov af18b10da9 JVM_IR KT-49203 generate stubs for not found classes 2021-10-15 12:15:49 +03:00
Igor Laevsky 50ca86838f [WASM] Fix build 2021-10-14 17:24:07 +03:00
Igor Laevsky bede039c08 [Wasm] Add compiler support for the kotlin.test library 2021-10-14 17:24:05 +03:00
Igor Laevsky 049e48e780 [Wasm] Keep error message for the IAE exception 2021-10-14 17:24:03 +03:00
Sergej Jaskiewicz 55ae6d1f3e [JS IR] Optimize pattern-matching of enums into comparing their ordinals
For this code:
```
enum class Season {
    WINTER,
    SPRING,
    SUMMER,
    AUTUMN
}

fun bar1(x : Season) : String {
    return when (x) {
        Season.WINTER, Season.SPRING -> "winter_spring"
        Season.SUMMER -> "summer"
        else -> "autumn"
    }
}
```

previously we generated this:
```
function foo(x) {
    var tmp0_subject = x;
    return (tmp0_subject.equals(Season_WINTER_getInstance())
        ? true
        : tmp0_subject.equals(Season_SPRING_getInstance()))
            ? 'winter_spring'
            : tmp0_subject.equals(Season_SUMMER_getInstance())
                ? 'summer'
                : 'autumn';
}
```

And now we generated this:
```
function bar2(x) {
  var tmp0_subject = x;
  var tmp0 = tmp0_subject._get_ordinal__0_k$();
  var tmp;
  switch (tmp0) {
    case 0:
    case 1:
      tmp = 'winter_spring';
      break;
    case 2:
      tmp = 'summer';
      break;
    case 3:
      tmp = 'autumn';
      break;
    default:
      noWhenBranchMatchedException();
      break;
  }
  return tmp;
}
```
2021-10-14 11:44:01 +00:00
Pavel Kunyavskiy e4a4cd3e16 [K/N] Transform constant varargs to ConstantValue 2021-10-14 11:22:25 +00:00
Pavel Kunyavskiy bf3c343ced Introduce new ir nodes for constant values 2021-10-14 11:22:21 +00:00
Pavel Kunyavskiy 2fe9420ca1 Compatibility hack for instantiating annotations from old klibs
^KT-49181
2021-10-14 11:03:17 +00:00
Dmitry Petrov 6f33259bc3 PSI2IR KT-49203 INVISIBLE_FAKE setter is non-referenceable 2021-10-13 18:38:23 +03:00
Dmitry Petrov 2a00def84e JVM_IR make proxy funs for inline and arrayOf funs non-synthetic 2021-10-13 16:07:53 +03:00
Artem Kobzar f645c89ebf fix(KT-43191): add static qualifier for Companion and non-inner objects. 2021-10-13 11:09:59 +00:00
Alexander Udalov 357f3184bf JVM IR: fix the type of IrGetField
The `irGetField` utility uses the field's own type as the type of the
resulting expression. But the field's type does not make sense outside
of the place of declaration of the field if it references a generic type
parameter of the containing class. Using this non-sensical generic type
led, for example, to an error in Ieee754 intrinsic (KT-48648).

The type of the expression should be kept as is in
JvmPropertiesLowering, i.e. taken from `expression` which the lowering
is replacing with the field access.

 #KT-48648 Fixed
2021-10-12 23:35:17 +02:00
Svyatoslav Kuzmich 3f8dce4b53 [JS IR] Support per-file mode and ES modules 2021-10-12 23:29:39 +03:00
Svyatoslav Kuzmich 5affd9d2f9 Visit declaration reference when visiting member access 2021-10-12 23:01:00 +03:00
Dmitry Petrov b946a284b0 JVM_IR move 'arrayOf' handling to JvmBuiltInsLowering
FunctionReferenceLowering creates calls to 'arrayOf' functions that
should be processed later.
2021-10-12 21:12:44 +03:00
Dmitry Petrov 27e5655480 JVM_IR minor: more JvmIrBuilder helpers 2021-10-12 21:12:43 +03:00
Ilmir Usmanov d0a70e5cc0 Minor. Use safe cast in isStaticInlineClassReplacementDelegatingCall 2021-10-12 15:09:07 +02:00
pyos 226306ac83 IR: check whether local declarations need to throw after Nothing return
^KT-48982 Fixed
2021-10-12 15:09:05 +02:00
Dmitry Petrov b184c72e3d JVM_IR make proxy funs synthetic, fix some typos 2021-10-12 15:56:35 +03:00
Dmitry Petrov e0c2a2efd7 JVM_IR Minor: remove outdated TODO 2021-10-12 15:56:34 +03:00
Dmitry Petrov 005d3b1f6f JVM_IR pass reified type parameters in indy SAM conversion proxy 2021-10-12 15:56:33 +03:00
Dmitry Petrov 40fe67880b JVM_IR wrap function into a proxy if indy SAM-conversion becomes valid 2021-10-12 15:56:31 +03:00
Svyatoslav Kuzmich a6afb7cb41 [JS IR][Wasm] Preload (Suspend)FunctionN needed in lowerings
This reverts commit 15d178d850d15675ee39cbd833d13f4c8aed83ff.
2021-10-12 08:42:01 +03:00
Svyatoslav Kuzmich 3bce0cc055 [Wasm] Support coroutines
- Reuse JS IR Suspend function lowering
  - Fix types
  - Disable reinterpretCast-based optimization for inline
    classes
- Add basic support to Wasm stdlib
- Explicitly transform suspend functions into regular functions
  with continuations
- Clean suspend function handling from JS IR codegen
2021-10-12 08:42:01 +03:00
Svyatoslav Kuzmich e3f826d1b9 [Wasm] Handle IrClass::thisReceiver receiver outside of constructors 2021-10-12 08:42:01 +03:00
Svyatoslav Kuzmich bcab78599f [Wasm] Fix result of statically-know type operators
- Use subclass with erased types to match runtime behavior
- Handle casting to Nothing
2021-10-12 08:42:01 +03:00
Sergej Jaskiewicz 9ee8f1e961 [JS IR] Enable StringTrimLowering for JS IR backend 2021-10-11 15:57:53 +00:00