JS IR: minor fix for callable ref translation
The caching variable has to have no initializers so that there is no dependence on evaluation order.
This commit is contained in:
+4
-4
@@ -257,12 +257,12 @@ class CallableReferenceLowering(val context: JsIrBackendContext) : FileLoweringP
|
|||||||
val cacheName = "${getterFunction.name}_${Namer.KCALLABLE_CACHE_SUFFIX}"
|
val cacheName = "${getterFunction.name}_${Namer.KCALLABLE_CACHE_SUFFIX}"
|
||||||
val cacheVarSymbol =
|
val cacheVarSymbol =
|
||||||
JsSymbolBuilder.buildVar(getterFunction.descriptor.containingDeclaration, getterFunction.returnType, cacheName, true)
|
JsSymbolBuilder.buildVar(getterFunction.descriptor.containingDeclaration, getterFunction.returnType, cacheName, true)
|
||||||
val irCacheNull = JsIrBuilder.buildNull(cacheVarSymbol.descriptor.type)
|
val irNull = JsIrBuilder.buildNull(cacheVarSymbol.descriptor.type)
|
||||||
val irCacheDeclaration = JsIrBuilder.buildVar(cacheVarSymbol, irCacheNull)
|
val irCacheDeclaration = JsIrBuilder.buildVar(cacheVarSymbol)
|
||||||
val irCacheValue = JsIrBuilder.buildGetValue(cacheVarSymbol)
|
val irCacheValue = JsIrBuilder.buildGetValue(cacheVarSymbol)
|
||||||
val irIfCondition = JsIrBuilder.buildCall(context.irBuiltIns.eqeqeqSymbol).apply {
|
val irIfCondition = JsIrBuilder.buildCall(context.irBuiltIns.eqeqSymbol).apply {
|
||||||
putValueArgument(0, irCacheValue)
|
putValueArgument(0, irCacheValue)
|
||||||
putValueArgument(1, irCacheNull)
|
putValueArgument(1, irNull)
|
||||||
}
|
}
|
||||||
val irSetCache = JsIrBuilder.buildSetVariable(cacheVarSymbol, JsIrBuilder.buildGetValue(varSymbol))
|
val irSetCache = JsIrBuilder.buildSetVariable(cacheVarSymbol, JsIrBuilder.buildGetValue(varSymbol))
|
||||||
val thenStatements = mutableListOf<IrStatement>().apply {
|
val thenStatements = mutableListOf<IrStatement>().apply {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JS_IR
|
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class Delegate<T>(val f: (T) -> Int) {
|
class Delegate<T>(val f: (T) -> Int) {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JS_IR
|
|
||||||
class A {
|
class A {
|
||||||
companion object
|
companion object
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JS_IR
|
|
||||||
package a.b
|
package a.b
|
||||||
|
|
||||||
interface Test {
|
interface Test {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JS_IR
|
|
||||||
typealias S = String
|
typealias S = String
|
||||||
|
|
||||||
typealias SF<T> = (T) -> S
|
typealias SF<T> = (T) -> S
|
||||||
|
|||||||
Vendored
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JS_IR
|
|
||||||
// NO_CHECK_LAMBDA_INLINING
|
// NO_CHECK_LAMBDA_INLINING
|
||||||
// FILE: 1.kt
|
// FILE: 1.kt
|
||||||
package test
|
package test
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JS_IR
|
|
||||||
// EXPECTED_REACHABLE_NODES: 1114
|
// EXPECTED_REACHABLE_NODES: 1114
|
||||||
package foo
|
package foo
|
||||||
|
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JS_IR
|
|
||||||
// EXPECTED_REACHABLE_NODES: 1116
|
// EXPECTED_REACHABLE_NODES: 1116
|
||||||
package foo
|
package foo
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JS_IR
|
|
||||||
// EXPECTED_REACHABLE_NODES: 1111
|
// EXPECTED_REACHABLE_NODES: 1111
|
||||||
package foo
|
package foo
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JS_IR
|
|
||||||
// EXPECTED_REACHABLE_NODES: 1112
|
// EXPECTED_REACHABLE_NODES: 1112
|
||||||
/*
|
/*
|
||||||
* Copy of JVM-backend test
|
* Copy of JVM-backend test
|
||||||
|
|||||||
Reference in New Issue
Block a user