@@ -18,16 +18,10 @@ import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
18
18
import org.jetbrains.kotlin.ir.builders.*
19
19
import org.jetbrains.kotlin.ir.builders.declarations.buildField
20
20
import org.jetbrains.kotlin.ir.declarations.*
21
- import org.jetbrains.kotlin.ir.expressions.IrBlockBody
22
- import org.jetbrains.kotlin.ir.expressions.IrBody
23
- import org.jetbrains.kotlin.ir.expressions.IrExpression
24
- import org.jetbrains.kotlin.ir.expressions.IrGetObjectValue
21
+ import org.jetbrains.kotlin.ir.expressions.*
25
22
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
26
23
import org.jetbrains.kotlin.ir.types.makeNullable
27
- import org.jetbrains.kotlin.ir.util.defaultType
28
- import org.jetbrains.kotlin.ir.util.isEffectivelyExternal
29
- import org.jetbrains.kotlin.ir.util.parentAsClass
30
- import org.jetbrains.kotlin.ir.util.primaryConstructor
24
+ import org.jetbrains.kotlin.ir.util.*
31
25
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
32
26
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
33
27
import org.jetbrains.kotlin.name.Name
@@ -87,7 +81,18 @@ class ObjectUsageLowering(
87
81
val initInstanceField = context.createIrBuilder(container.symbol).buildStatement(UNDEFINED_OFFSET , UNDEFINED_OFFSET ) {
88
82
irSetField(null , instanceField, irGet(irClass.thisReceiver!! ))
89
83
}
90
- (irBody as IrBlockBody ).statements.add(0 , initInstanceField)
84
+ if (context.es6mode) {
85
+ // find `superCall` and put after
86
+ (irBody as IrBlockBody ).statements.transformFlat {
87
+ if (it is IrDelegatingConstructorCall ) listOf (it, initInstanceField)
88
+ else if (it is IrVariable && it.origin == = ES6_THIS_VARIABLE_ORIGIN ) {
89
+ initInstanceField.value = JsIrBuilder .buildGetValue(it.symbol)
90
+ listOf (it, initInstanceField)
91
+ } else null
92
+ }
93
+ } else {
94
+ (irBody as IrBlockBody ).statements.add(0 , initInstanceField)
95
+ }
91
96
}
92
97
}
93
98
0 commit comments