Commit Graph

37632 Commits

Author SHA1 Message Date
Alexander Udalov 1c735948d1 IR: cleanup SymbolTable
Extract duplicated code, remove unused methods and unneeded OptIn.

Also, check original for descriptors only in case the symbol is not
computed yet. Checking it on every access is not needed.
2021-10-05 12:16:24 +02:00
Alexander Udalov eb28d662d4 IR: use HashMap instead of LinkedHashMap in SymbolTable
It's not important for these maps to be linked hash maps because they
are not iterated over.
2021-10-05 12:16:24 +02:00
Alexander Udalov 6e93006a94 JVM IR: slightly optimize keepTrackOfOverridesForPossiblyClashingFakeOverride
Collecting all outer classes into a hash set and looking up classifiers
in that set for each type of each fake override is noticeably slow.
Instead, check that function types reference any type parameter whose
container is a class; if the function is not local, it means such type
parameter belongs to one of the outer classes.

 #KT-42020
2021-10-05 12:16:24 +02:00
Igor Chevdar 0cece79856 [K/N][IR][codegen] Use LazyIr for cached libraries
It's not that simple because we still need inline functions bodies
and classes fields which aren't present in Lazy IR. To overcome this,
save additional binary info for a cached library and then use it when needed
2021-10-05 10:47:52 +05:00
Mark Punzalan 56cc40f639 FIR: Rename SAM constructor parameter name from "block" to "function".
This matches FE 1.0 (see
core/descriptors/src/org/jetbrains/kotlin/resolve/sam/samConstructorUtils.kt).
2021-10-04 19:38:44 +03:00
Mark Punzalan d16454b9af FIR: Set resolve phase to BODY_RESOLVE for SAM constructor value
parameters.

This was causing exceptions with analysis API trying to resolve the
synthetic FirValueParameter because it could not find a KtDeclaration
for it. Using BODY_RESOLVE should be safe; the SAM constructor function
is also on BODY_RESOLVE and the type of the value parameter is known.
2021-10-04 19:38:43 +03:00
Mikhail Zarechenskiy 472eceb13c Mark KtDestructuringDeclarationReference as multi reference entity
This change fixes tests related to components:
 - org.jetbrains.kotlin.idea.codeInsight.InsertImportOnPasteTestGenerated$Copy.testMultiDeclaration
 - org.jetbrains.kotlin.idea.codeInsight.InsertImportOnPasteTestGenerated$Cut.testMultiDeclaration

 Initially, it was marked as multi reference in https://github.com/JetBrains/intellij-community/blob/388ff78e61a7e0599c85b07766a03d956d7583da/plugins/kotlin/frontend-independent/src/org/jetbrains/kotlin/idea/references/KtDestructuringDeclarationReference.kt#L14

 But then this change was lost during commonization of this
implementation with FIR

 ^KTIJ-19815 Fixed
2021-10-04 18:17:18 +03:00
Igor Chevdar 232608e300 [box-tests] Added a test 2021-10-04 14:34:56 +00:00
Victor Petukhov 6ee1599efa Provide proxy for deprecated org.jetbrains.kotlin.resolve.calls.callUtil.getValueArgumentForExpression 2021-10-04 15:01:09 +03:00
Svyatoslav Kuzmich 4dd4853c31 [Wasm] Use common StringConcatenationLowering 2021-10-04 08:51:43 +00:00
Ivan Kochurkin 75b40e4b75 [FIR] Add INVISIBLE_SETTER 2021-10-03 17:10:06 +03:00
Ivan Kochurkin c97587cc53 [FIR] Fix containingClassForStaticMemberAttr initialization 2021-10-03 17:10:05 +03:00
Svyatoslav Kuzmich fa3e75463e [Wasm] Support throwIAE and throwNoBranchMatchedException
Add a couple of test stubs
Unmute tests
2021-10-02 06:14:36 +00:00
Svyatoslav Kuzmich 6eb81517a0 [Wasm] Unmute passed Wasm tests 2021-10-02 06:14:35 +00:00
Svyatoslav Kuzmich c88cde2f8b [Wasm] DONT_TARGET_WASM_BACKEND => IGNORE_BACKEND in testdata 2021-10-02 06:14:35 +00:00
Georgy Bronnikov 41e38d5a1a JVM_IR: move serialized IR to a separate annotation 2021-10-02 00:56:46 +03:00
Roman Artemev fcf44be785 [JS IR] Add test for KT-46225 2021-10-01 23:36:41 +03:00
Roman Artemev 0621b79505 Add test for KT-46225 2021-10-01 23:36:40 +03:00
Roman Artemev 38f21b7139 [JS IR] Add test to check proper type substitution 2021-10-01 23:02:24 +03:00
Roman Artemev d4ace2ffe8 [JS IR] Make sure TypeOperatorLowering is after Interop CR Lowering 2021-10-01 23:02:23 +03:00
Roman Artemev f3035ac78e [IR] Add descriptive error message instead of NPE 2021-10-01 23:02:22 +03:00
Roman Artemev fe4a25eba1 [JS IR] Use context-dependent names for lambdas
Partially fix KT-46525

Now the code like
```
fun foo(a: () -> Unit) {}
interface A {
    fun run()
}
fun main() {
    foo {
        println()
    }
    val a = object : A {
        override fun run() {
            TODO()
        }
    }
}
```

is being compiled into

```
  function foo(a) {
  }
  function A() {
  }
  A.$metadata$ = {
    simpleName: 'A',
    kind: 'interface',
    interfaces: []
  };
  function main() {
    foo(main$lambda());
    var a = new _no_name_provided_();
  }
  function main$lambda() {
    return function () {
      println();
    };
  }

  // TODO
  function _no_name_provided_() {
  }
  _no_name_provided_.$metadata$ = {
    kind: 'class',
    interfaces: [A]
  };
```
2021-10-01 23:02:21 +03:00
Roman Artemev 76e08356d8 [JS IR] Change logic of InteropCallableReferenceLowering a bit
Now it first transforms Lambda classes and after fixes the call sites
2021-10-01 23:02:12 +03:00
Roman Artemev 7ec593b22a [JS IR] Inline lambda class into its interop wrapper 2021-10-01 23:02:10 +03:00
Roman Artemev a1b223e33d [JS IR] Set proper statement origin for bound receiver save 2021-10-01 23:02:09 +03:00
Victor Petukhov abd2507107 Don't discriminate generics during callable references resolution
^KT-49038 Fixed
2021-10-01 22:09:33 +03:00
Victor Petukhov 23f6c29efc Provide some additional proxies for external use of deprecate package org.jetbrains.kotlin.resolve.calls.callUtil
Provided API is `getCalleeExpressionIfAny` and `createLookupLocation`
2021-10-01 19:29:44 +03:00
Tianyu Geng 154ceaa89f FIR: Make default visitor only visit single parent 2021-10-01 18:57:35 +03:00
Tianyu Geng 263f6b1fd8 FIR: generate FirDefaultVisitor and FirDefaultVisitorVoid...
so they won't be outdated when FIR class tree is updated.
2021-10-01 18:57:34 +03:00
Jinseong Jeon 8f3b06ac06 RAW FIR: record annotations on destructuring declarations 2021-10-01 18:54:16 +03:00
Ilya Kirillov e95313acbb ULC: do not use synchronized lazy as safe publication lazy is enough for LC 2021-10-01 16:48:35 +02:00
Ilya Kirillov f90fc8a46e ULC: do not break laziness contract when computing declaration qualified name
^KTIJ-19780 fixed
2021-10-01 16:48:35 +02:00
Ilya Kirillov c8c1ee2b5a Fix usage of readWriteAccess without resolve
^KTIJ-19777 fixed
2021-10-01 16:48:35 +02:00
Tianyu Geng c1754ad427 FIR: fix label on non-lambda anonymous function 2021-10-01 17:21:42 +03:00
Tianyu Geng d3b9419837 FIR checker: FirReturnAllowedChecker -> FirReturnSyntaxAndLabelChecker 2021-10-01 17:21:42 +03:00
Tianyu Geng fadde98a86 FIR: fix label stealling and crash with multiple labels
Consider the code below

```
fun test() {
  a@ b@ {
    {}
  }
}
```

Currently when the code is converted to FIR, label `b` is bound to the
outer lambda and `a` gets bound to the inner lambda because it's not
consumed. This is wrong and also leads transfromation to fail with
exceptions because of the unexpected consumption of `a`.

This change fixes the above issue by designating a specific node in the
AST as the allowed user of a label when the label is added.
2021-10-01 17:21:40 +03:00
Tianyu Geng 5c716ea979 FIR checker: report NOT_A_FUNCTION_LABEL 2021-10-01 17:21:39 +03:00
Svyatoslav Kuzmich ab9a23cbfa [Wasm][Stdlib] Reuse K/N collections and StringBuilder 2021-10-01 17:18:49 +03:00
Ilya Goncharov 8bd009c5fd [JS IR] Eager initialization on side effect test 2021-10-01 13:32:13 +00:00
Ilya Goncharov dedb9d9018 [JS IR] Fix assertion to enable early created declarations 2021-10-01 13:32:12 +00:00
Ilya Goncharov 4c0045b136 [JS IR] Add test on initialization calling only once 2021-10-01 13:32:11 +00:00
Ilya Goncharov 01fbe6bacc [JS IR] Use property lazy initialization by default 2021-10-01 13:32:11 +00:00
Ilya Goncharov c2cf221965 [JS IR] Add annotation for eager property initialization 2021-10-01 13:32:10 +00:00
pyos 73adcd7b62 JVM_IR: copy code from JvmDefaultParameterInjector to JvmTailrecLowering
Some weird edge case for inline classes wrapping primitives?
2021-10-01 14:37:55 +02:00
pyos cb505d1101 IR: keep capture sets the same when copying objects for tailrec funs
tailrec f(x: () -> T = { y }, y: T = ...) = f()

-- at the call we know that in `x` the observed value of `y` is `null`,
but the constructor should still have a single parameter.
2021-10-01 14:37:54 +02:00
pyos a4d1358e57 FIR: permit tailrec calls in inline lambdas 2021-10-01 14:37:54 +02:00
pyos 2afab62dae JVM_IR: optimize tailrec calls in inline lambdas
^KT-48600 Fixed
2021-10-01 14:37:54 +02:00
pyos 7c63d50d1c IR: create more temporary vals when optimizing tailrec calls
This is needed so that SharedVariablesLowering doesn't get confused, and
SharedVariablesLowering should run after TailrecLowering to properly
optimize tailrec calls in inline lambdas.
2021-10-01 14:37:54 +02:00
pyos b2315a4a05 IR: optimize f(); return in tailrec fun f(): Unit
It's equivalent to `return f()`.
2021-10-01 14:37:54 +02:00
Dmitry Petrov aea2db97c5 JVM_IR simplify null check on trivially initialized vals only 2021-10-01 14:31:48 +03:00