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:
Anton Bannykh
2018-06-18 13:01:03 +03:00
parent 43e3314255
commit b551afb202
10 changed files with 4 additions and 13 deletions
@@ -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
View File
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JS_IR
package a.b package a.b
interface Test { interface Test {
-1
View File
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JS_IR
typealias S = String typealias S = String
typealias SF<T> = (T) -> S typealias SF<T> = (T) -> S
@@ -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,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