FE1.0 descpritor, PSI2IR, and JVM IR backend use that.
FIR2IR is also using that, which implies name "value" in RAW FIR
maybe has not been used anywhere.
Such way those implementations are accessible from the common code.
To avoid putting stub implementations in every variant, it is also
possible to add default implementation from the common code if variant
hasn't register own.
As an example of usage, support for removed in Gradle 7.0 'maven' plugin
was moved into 'main' variant (Gradle 6.7.1 - 6.9.3).
^KT-49227 In Progress
Locals introduced in the body of a do-while loop are not
necessarily live at the do-while condition. For example,
if there is a continue in the body before the declaration:
do {
if (shouldContinue(x))
continue
val y = 32 // not always defined in the condition
doSomething(y)
} while (x < 2)
For locals referenced in the condition such code is rejected
by the frontend because a local referenced in the condition
must be always defined when you get there.
However, locals that are not used in the condition were always
put in the local variable table. This leads to invalid locals
information which can trip of debuggers and other build tools
such as the D8 dexer.
This patch only puts in locals information for locals actually
referenced in the local variable table for the condition.
^Fixes KT-51754
In qualified expression like `foo().`, selector expression is null.
Because of that the whole expression was marked as an error FIR
expression, and `foo()` part was not resolved at all (including
arguments and everything else).
This commit fixes the problem by providing receiver's FIR expression
as an underlying expression for error FIR expression. That way
it will be seen by all resolve transformers and will be successfully
resolved.
^KTIJ-21484 Fixed
When project has toolchain configured and on reusing configuration
cache, 'filteredMapArguments' input was calculated without actual
value of `jvmTarget` provided by toolchain leading to non-UP-TO-DATE
KotlinCompile task state.
^KT-51937 Fixed
Also use "memory manager" instead of "memory model", since this is more correct and matches other documents.
Co-authored-by: Sergey Bogolepov <sergey.bogolepov@jetbrains.com>
If no line number is emitted, the line number of the last line
in the suspend function is used. That combined with the IntelliJ
debuggers handling of breakpoint setting and the D8 dexers
reordering of blocks can lead to cases where breakpoints on
the last line of a suspend function are never hit.
See https://youtrack.jetbrains.com/issue/KT-51936 for details.
^Fixed KT-51936
Just see if every suspend call is followed only by safe instructions or
returns, then insert a suspension point check if there isn't a direct
return.
The first part of this is equivalent to the old implementation, just
refactored. The second part generates strictly more checks; see, for
example, the fixed test, in which the previous implementation failed to
insert a check before a CHECKCAST.
^KT-51818 Fixed
[Gradle, JS] Use assertOutputDoesNotContain
[Gradle, JS] Add test on no output for dry run in gradle tests
[Gradle, JS] No output for dry run in gradle tests
Merge-request: KT-MR-6029
Merged-by: Ilya Goncharov <Ilya.Goncharov@jetbrains.com>
^KT-51895 fixed