diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt index 19fda5d0369..0b42b779a43 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt @@ -105,6 +105,13 @@ open class KotlinFileExtractor( // (yielding a `0:0:0:0` location); this makes both frontends anchor it to the `when`. private var currentSyntheticWhenLocation: Label? = null + // Set only while extracting the statements of a desugared increment/decrement block + // (`x++`, `--x`, ...). Holds the block's induction temporary and the canonical name to + // emit for it. The K2 frontend names this temp with the uniform special name ``, + // whereas K1 names it `tmp` using a per-scope counter that cannot be reproduced + // faithfully under K2. Emitting `` from both frontends makes the output converge. + private var currentDesugarTemp: Pair? = null + private inline fun with(kind: String, element: IrElement, f: () -> T): T { val name = when (element) { @@ -3495,7 +3502,11 @@ open class KotlinFileExtractor( // source spelling `_`. Emit `_` so both frontends produce the same, source-faithful // name (D15). val varName = - if (v.name == SpecialNames.UNDERSCORE_FOR_UNUSED_VAR) "_" else v.name.asString() + when { + currentDesugarTemp?.first === v -> currentDesugarTemp!!.second + v.name == SpecialNames.UNDERSCORE_FOR_UNUSED_VAR -> "_" + else -> v.name.asString() + } tw.writeLocalvars(varId, varName, type.javaResult.id, exprId) tw.writeLocalvarsKotlinType(varId, type.kotlinResult.id) tw.writeHasLocation(varId, locId) @@ -7211,9 +7222,30 @@ open class KotlinFileExtractor( val locId = getPsiBasedLocation(e) ?: tw.getLocation(e) tw.writeStmts_block(id, parent, idx, callable) tw.writeHasLocation(id, locId) - statements.forEachIndexed { i, s -> extractStatement(s, callable, id, i) } + // A desugared increment/decrement (`x++`, `--x`, ...) is an IrBlock whose induction + // temporary is named `tmp` under K1 but `` under K2. K1's counter-based name + // cannot be reproduced under K2, so emit the uniform `` from both frontends. + val prevDesugarTemp = currentDesugarTemp + val inductionTemp = + (e as? IrContainerExpression)?.takeIf { isUnaryDesugarOrigin(it.origin) } + ?.statements + ?.firstOrNull() as? IrVariable + if (inductionTemp != null) { + currentDesugarTemp = Pair(inductionTemp, "") + } + try { + statements.forEachIndexed { i, s -> extractStatement(s, callable, id, i) } + } finally { + currentDesugarTemp = prevDesugarTemp + } } + private fun isUnaryDesugarOrigin(origin: IrStatementOrigin?) = + origin == IrStatementOrigin.PREFIX_INCR || + origin == IrStatementOrigin.PREFIX_DECR || + origin == IrStatementOrigin.POSTFIX_INCR || + origin == IrStatementOrigin.POSTFIX_DECR + private inline fun getBoundSymbolOwner( symbol: IrBindableSymbol, e: IrExpression diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStmts.expected b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStmts.expected index 3d1c6c3b6b7..5f5e84d319f 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStmts.expected +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStmts.expected @@ -192,23 +192,23 @@ | Test.kt:38:9:38:13 | After ... > ... [true] | 11 | Test.kt:40:4:40:6 | Before | | Test.kt:38:9:38:13 | After ... > ... [true] | 12 | Test.kt:40:4:40:6 | { ... } | | Test.kt:38:9:38:13 | After ... > ... [true] | 13 | Test.kt:40:4:40:6 | var ...; | -| Test.kt:38:9:38:13 | After ... > ... [true] | 14 | Test.kt:40:4:40:6 | Before tmp0 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 14 | Test.kt:40:4:40:6 | Before | | Test.kt:38:9:38:13 | After ... > ... [true] | 15 | Test.kt:40:4:40:4 | x | -| Test.kt:38:9:38:13 | After ... > ... [true] | 16 | Test.kt:40:4:40:6 | tmp0 | -| Test.kt:38:9:38:13 | After ... > ... [true] | 17 | Test.kt:40:4:40:6 | After tmp0 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 16 | Test.kt:40:4:40:6 | | +| Test.kt:38:9:38:13 | After ... > ... [true] | 17 | Test.kt:40:4:40:6 | After | | Test.kt:38:9:38:13 | After ... > ... [true] | 18 | Test.kt:40:4:40:6 | After var ...; | | Test.kt:38:9:38:13 | After ... > ... [true] | 19 | Test.kt:40:4:40:6 | ; | | Test.kt:38:9:38:13 | After ... > ... [true] | 20 | Test.kt:40:4:40:6 | Before ...=... | | Test.kt:38:9:38:13 | After ... > ... [true] | 21 | Test.kt:40:4:40:4 | x | | Test.kt:38:9:38:13 | After ... > ... [true] | 22 | Test.kt:40:4:40:6 | Before dec(...) | -| Test.kt:38:9:38:13 | After ... > ... [true] | 23 | Test.kt:40:4:40:6 | tmp0 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 23 | Test.kt:40:4:40:6 | | | Test.kt:38:9:38:13 | After ... > ... [true] | 24 | Test.kt:40:4:40:6 | dec(...) | | Test.kt:38:9:38:13 | After ... > ... [true] | 25 | Test.kt:40:4:40:6 | After dec(...) | | Test.kt:38:9:38:13 | After ... > ... [true] | 26 | Test.kt:40:4:40:6 | ...=... | | Test.kt:38:9:38:13 | After ... > ... [true] | 27 | Test.kt:40:4:40:6 | After ...=... | | Test.kt:38:9:38:13 | After ... > ... [true] | 28 | Test.kt:40:4:40:6 | After ; | | Test.kt:38:9:38:13 | After ... > ... [true] | 29 | Test.kt:40:4:40:6 | ; | -| Test.kt:38:9:38:13 | After ... > ... [true] | 30 | Test.kt:40:4:40:6 | tmp0 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 30 | Test.kt:40:4:40:6 | | | Test.kt:38:9:38:13 | After ... > ... [true] | 31 | Test.kt:40:4:40:6 | After ; | | Test.kt:38:9:38:13 | After ... > ... [true] | 32 | Test.kt:40:4:40:6 | After { ... } | | Test.kt:38:9:38:13 | After ... > ... [true] | 33 | Test.kt:40:4:40:6 | | diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.expected b/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.expected index f82608c7bd8..f41dc406d9c 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.expected +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.expected @@ -95,18 +95,18 @@ | Test.kt:39:4:39:9 | ...=... | AssignExpr | Test.kt:40:4:40:6 | ; | ExprStmt | | Test.kt:39:4:39:9 | ; | ExprStmt | Test.kt:39:4:39:4 | y | VarAccess | | Test.kt:39:8:39:9 | 10 | LongLiteral | Test.kt:39:4:39:9 | ...=... | AssignExpr | -| Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | tmp0 | LocalVariableDeclExpr | -| Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | tmp0 | VarAccess | +| Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | | LocalVariableDeclExpr | +| Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | | VarAccess | | Test.kt:40:4:40:6 | ...=... | AssignExpr | Test.kt:40:4:40:6 | ; | ExprStmt | | Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:4 | x | VarAccess | -| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | tmp0 | VarAccess | +| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | | VarAccess | | Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | { ... } | BlockStmt | | Test.kt:40:4:40:6 | | StmtExpr | Test.kt:40:4:40:6 | | ImplicitCoercionToUnitExpr | | Test.kt:40:4:40:6 | | ImplicitCoercionToUnitExpr | Test.kt:38:9:38:9 | x | VarAccess | +| Test.kt:40:4:40:6 | | LocalVariableDeclExpr | Test.kt:40:4:40:6 | ; | ExprStmt | +| Test.kt:40:4:40:6 | | VarAccess | Test.kt:40:4:40:6 | | StmtExpr | +| Test.kt:40:4:40:6 | | VarAccess | Test.kt:40:4:40:6 | dec(...) | MethodCall | | Test.kt:40:4:40:6 | dec(...) | MethodCall | Test.kt:40:4:40:6 | ...=... | AssignExpr | -| Test.kt:40:4:40:6 | tmp0 | LocalVariableDeclExpr | Test.kt:40:4:40:6 | ; | ExprStmt | -| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | | StmtExpr | -| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | dec(...) | MethodCall | | Test.kt:40:4:40:6 | var ...; | LocalVariableDeclStmt | Test.kt:40:4:40:4 | x | VarAccess | | Test.kt:40:4:40:6 | { ... } | BlockStmt | Test.kt:40:4:40:6 | var ...; | LocalVariableDeclStmt | | Test.kt:43:3:43:3 | z | VarAccess | Test.kt:43:7:43:8 | 30 | IntegerLiteral | diff --git a/java/ql/test-kotlin1/library-tests/exprs/PrintAst.expected b/java/ql/test-kotlin1/library-tests/exprs/PrintAst.expected index fa3fcb4f07d..9224ac81976 100644 --- a/java/ql/test-kotlin1/library-tests/exprs/PrintAst.expected +++ b/java/ql/test-kotlin1/library-tests/exprs/PrintAst.expected @@ -2527,15 +2527,15 @@ exprs.kt: # 138| 1: [StmtExpr] # 138| 0: [BlockStmt] { ... } # 138| 0: [LocalVariableDeclStmt] var ...; -# 138| 1: [LocalVariableDeclExpr] tmp0 +# 138| 1: [LocalVariableDeclExpr] # 138| 0: [VarAccess] variable # 138| 1: [ExprStmt] ; # 138| 0: [AssignExpr] ...=... # 138| 0: [VarAccess] variable # 138| 1: [MethodCall] dec(...) -# 138| -1: [VarAccess] tmp0 +# 138| -1: [VarAccess] # 138| 2: [ExprStmt] ; -# 138| 0: [VarAccess] tmp0 +# 138| 0: [VarAccess] # 141| 119: [ReturnStmt] return ... # 141| 0: [AddExpr] ... + ... # 141| 0: [IntegerLiteral] 123 @@ -2933,15 +2933,15 @@ exprs.kt: # 292| 1: [StmtExpr] # 292| 0: [BlockStmt] { ... } # 292| 0: [LocalVariableDeclStmt] var ...; -# 292| 1: [LocalVariableDeclExpr] tmp0 +# 292| 1: [LocalVariableDeclExpr] # 292| 0: [VarAccess] i0 # 292| 1: [ExprStmt] ; # 292| 0: [AssignExpr] ...=... # 292| 0: [VarAccess] i0 # 292| 1: [MethodCall] inc(...) -# 292| -1: [VarAccess] tmp0 +# 292| -1: [VarAccess] # 292| 2: [ExprStmt] ; -# 292| 0: [VarAccess] tmp0 +# 292| 0: [VarAccess] # 293| 7: [ExprStmt] ; # 293| 0: [ImplicitCoercionToUnitExpr] # 293| 0: [TypeAccess] Unit @@ -2960,15 +2960,15 @@ exprs.kt: # 294| 1: [StmtExpr] # 294| 0: [BlockStmt] { ... } # 294| 0: [LocalVariableDeclStmt] var ...; -# 294| 1: [LocalVariableDeclExpr] tmp1 +# 294| 1: [LocalVariableDeclExpr] # 294| 0: [VarAccess] i0 # 294| 1: [ExprStmt] ; # 294| 0: [AssignExpr] ...=... # 294| 0: [VarAccess] i0 # 294| 1: [MethodCall] dec(...) -# 294| -1: [VarAccess] tmp1 +# 294| -1: [VarAccess] # 294| 2: [ExprStmt] ; -# 294| 0: [VarAccess] tmp1 +# 294| 0: [VarAccess] # 295| 9: [ExprStmt] ; # 295| 0: [ImplicitCoercionToUnitExpr] # 295| 0: [TypeAccess] Unit @@ -3028,15 +3028,15 @@ exprs.kt: # 306| 1: [StmtExpr] # 306| 0: [BlockStmt] { ... } # 306| 0: [LocalVariableDeclStmt] var ...; -# 306| 1: [LocalVariableDeclExpr] tmp2 +# 306| 1: [LocalVariableDeclExpr] # 306| 0: [VarAccess] b0 # 306| 1: [ExprStmt] ; # 306| 0: [AssignExpr] ...=... # 306| 0: [VarAccess] b0 # 306| 1: [MethodCall] inc(...) -# 306| -1: [VarAccess] tmp2 +# 306| -1: [VarAccess] # 306| 2: [ExprStmt] ; -# 306| 0: [VarAccess] tmp2 +# 306| 0: [VarAccess] # 307| 20: [ExprStmt] ; # 307| 0: [ImplicitCoercionToUnitExpr] # 307| 0: [TypeAccess] Unit @@ -3055,15 +3055,15 @@ exprs.kt: # 308| 1: [StmtExpr] # 308| 0: [BlockStmt] { ... } # 308| 0: [LocalVariableDeclStmt] var ...; -# 308| 1: [LocalVariableDeclExpr] tmp3 +# 308| 1: [LocalVariableDeclExpr] # 308| 0: [VarAccess] b0 # 308| 1: [ExprStmt] ; # 308| 0: [AssignExpr] ...=... # 308| 0: [VarAccess] b0 # 308| 1: [MethodCall] dec(...) -# 308| -1: [VarAccess] tmp3 +# 308| -1: [VarAccess] # 308| 2: [ExprStmt] ; -# 308| 0: [VarAccess] tmp3 +# 308| 0: [VarAccess] # 309| 22: [ExprStmt] ; # 309| 0: [ImplicitCoercionToUnitExpr] # 309| 0: [TypeAccess] Unit @@ -3123,15 +3123,15 @@ exprs.kt: # 320| 1: [StmtExpr] # 320| 0: [BlockStmt] { ... } # 320| 0: [LocalVariableDeclStmt] var ...; -# 320| 1: [LocalVariableDeclExpr] tmp4 +# 320| 1: [LocalVariableDeclExpr] # 320| 0: [VarAccess] s0 # 320| 1: [ExprStmt] ; # 320| 0: [AssignExpr] ...=... # 320| 0: [VarAccess] s0 # 320| 1: [MethodCall] inc(...) -# 320| -1: [VarAccess] tmp4 +# 320| -1: [VarAccess] # 320| 2: [ExprStmt] ; -# 320| 0: [VarAccess] tmp4 +# 320| 0: [VarAccess] # 321| 33: [ExprStmt] ; # 321| 0: [ImplicitCoercionToUnitExpr] # 321| 0: [TypeAccess] Unit @@ -3150,15 +3150,15 @@ exprs.kt: # 322| 1: [StmtExpr] # 322| 0: [BlockStmt] { ... } # 322| 0: [LocalVariableDeclStmt] var ...; -# 322| 1: [LocalVariableDeclExpr] tmp5 +# 322| 1: [LocalVariableDeclExpr] # 322| 0: [VarAccess] s0 # 322| 1: [ExprStmt] ; # 322| 0: [AssignExpr] ...=... # 322| 0: [VarAccess] s0 # 322| 1: [MethodCall] dec(...) -# 322| -1: [VarAccess] tmp5 +# 322| -1: [VarAccess] # 322| 2: [ExprStmt] ; -# 322| 0: [VarAccess] tmp5 +# 322| 0: [VarAccess] # 323| 35: [ExprStmt] ; # 323| 0: [ImplicitCoercionToUnitExpr] # 323| 0: [TypeAccess] Unit @@ -3218,15 +3218,15 @@ exprs.kt: # 334| 1: [StmtExpr] # 334| 0: [BlockStmt] { ... } # 334| 0: [LocalVariableDeclStmt] var ...; -# 334| 1: [LocalVariableDeclExpr] tmp6 +# 334| 1: [LocalVariableDeclExpr] # 334| 0: [VarAccess] l0 # 334| 1: [ExprStmt] ; # 334| 0: [AssignExpr] ...=... # 334| 0: [VarAccess] l0 # 334| 1: [MethodCall] inc(...) -# 334| -1: [VarAccess] tmp6 +# 334| -1: [VarAccess] # 334| 2: [ExprStmt] ; -# 334| 0: [VarAccess] tmp6 +# 334| 0: [VarAccess] # 335| 46: [ExprStmt] ; # 335| 0: [ImplicitCoercionToUnitExpr] # 335| 0: [TypeAccess] Unit @@ -3245,15 +3245,15 @@ exprs.kt: # 336| 1: [StmtExpr] # 336| 0: [BlockStmt] { ... } # 336| 0: [LocalVariableDeclStmt] var ...; -# 336| 1: [LocalVariableDeclExpr] tmp7 +# 336| 1: [LocalVariableDeclExpr] # 336| 0: [VarAccess] l0 # 336| 1: [ExprStmt] ; # 336| 0: [AssignExpr] ...=... # 336| 0: [VarAccess] l0 # 336| 1: [MethodCall] dec(...) -# 336| -1: [VarAccess] tmp7 +# 336| -1: [VarAccess] # 336| 2: [ExprStmt] ; -# 336| 0: [VarAccess] tmp7 +# 336| 0: [VarAccess] # 337| 48: [ExprStmt] ; # 337| 0: [ImplicitCoercionToUnitExpr] # 337| 0: [TypeAccess] Unit diff --git a/java/ql/test-kotlin1/library-tests/exprs/exprs.expected b/java/ql/test-kotlin1/library-tests/exprs/exprs.expected index ddf7e523c5e..dbb49dd195d 100644 --- a/java/ql/test-kotlin1/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin1/library-tests/exprs/exprs.expected @@ -1395,11 +1395,11 @@ | exprs.kt:138:9:138:18 | ...=... | exprs.kt:4:1:142:1 | topLevelMethod | AssignExpr | | exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | StmtExpr | | exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | ImplicitCoercionToUnitExpr | +| exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | +| exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:138:9:138:18 | Unit | exprs.kt:4:1:142:1 | topLevelMethod | TypeAccess | | exprs.kt:138:9:138:18 | dec(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:138:9:138:18 | tmp0 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:138:9:138:18 | tmp0 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:138:9:138:18 | tmp0 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:141:12:141:14 | 123 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | | exprs.kt:141:12:141:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:141:18:141:20 | 456 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | @@ -1802,11 +1802,11 @@ | exprs.kt:292:5:292:8 | ...=... | exprs.kt:285:1:346:1 | unaryExprs | AssignExpr | | exprs.kt:292:5:292:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:292:5:292:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | +| exprs.kt:292:5:292:8 | | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | +| exprs.kt:292:5:292:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | +| exprs.kt:292:5:292:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:292:5:292:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | | exprs.kt:292:5:292:8 | inc(...) | exprs.kt:285:1:346:1 | unaryExprs | MethodCall | -| exprs.kt:292:5:292:8 | tmp0 | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | -| exprs.kt:292:5:292:8 | tmp0 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | -| exprs.kt:292:5:292:8 | tmp0 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:293:5:293:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:293:5:293:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | | exprs.kt:293:5:293:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | @@ -1820,11 +1820,11 @@ | exprs.kt:294:5:294:8 | ...=... | exprs.kt:285:1:346:1 | unaryExprs | AssignExpr | | exprs.kt:294:5:294:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:294:5:294:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | +| exprs.kt:294:5:294:8 | | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | +| exprs.kt:294:5:294:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | +| exprs.kt:294:5:294:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:294:5:294:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | | exprs.kt:294:5:294:8 | dec(...) | exprs.kt:285:1:346:1 | unaryExprs | MethodCall | -| exprs.kt:294:5:294:8 | tmp1 | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | -| exprs.kt:294:5:294:8 | tmp1 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | -| exprs.kt:294:5:294:8 | tmp1 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:295:5:295:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:295:5:295:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | | exprs.kt:295:5:295:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | @@ -1870,11 +1870,11 @@ | exprs.kt:306:5:306:8 | ...=... | exprs.kt:285:1:346:1 | unaryExprs | AssignExpr | | exprs.kt:306:5:306:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:306:5:306:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | +| exprs.kt:306:5:306:8 | | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | +| exprs.kt:306:5:306:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | +| exprs.kt:306:5:306:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:306:5:306:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | | exprs.kt:306:5:306:8 | inc(...) | exprs.kt:285:1:346:1 | unaryExprs | MethodCall | -| exprs.kt:306:5:306:8 | tmp2 | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | -| exprs.kt:306:5:306:8 | tmp2 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | -| exprs.kt:306:5:306:8 | tmp2 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:307:5:307:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:307:5:307:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | | exprs.kt:307:5:307:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | @@ -1888,11 +1888,11 @@ | exprs.kt:308:5:308:8 | ...=... | exprs.kt:285:1:346:1 | unaryExprs | AssignExpr | | exprs.kt:308:5:308:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:308:5:308:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | +| exprs.kt:308:5:308:8 | | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | +| exprs.kt:308:5:308:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | +| exprs.kt:308:5:308:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:308:5:308:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | | exprs.kt:308:5:308:8 | dec(...) | exprs.kt:285:1:346:1 | unaryExprs | MethodCall | -| exprs.kt:308:5:308:8 | tmp3 | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | -| exprs.kt:308:5:308:8 | tmp3 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | -| exprs.kt:308:5:308:8 | tmp3 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:309:5:309:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:309:5:309:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | | exprs.kt:309:5:309:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | @@ -1938,11 +1938,11 @@ | exprs.kt:320:5:320:8 | ...=... | exprs.kt:285:1:346:1 | unaryExprs | AssignExpr | | exprs.kt:320:5:320:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:320:5:320:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | +| exprs.kt:320:5:320:8 | | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | +| exprs.kt:320:5:320:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | +| exprs.kt:320:5:320:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:320:5:320:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | | exprs.kt:320:5:320:8 | inc(...) | exprs.kt:285:1:346:1 | unaryExprs | MethodCall | -| exprs.kt:320:5:320:8 | tmp4 | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | -| exprs.kt:320:5:320:8 | tmp4 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | -| exprs.kt:320:5:320:8 | tmp4 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:321:5:321:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:321:5:321:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | | exprs.kt:321:5:321:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | @@ -1956,11 +1956,11 @@ | exprs.kt:322:5:322:8 | ...=... | exprs.kt:285:1:346:1 | unaryExprs | AssignExpr | | exprs.kt:322:5:322:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:322:5:322:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | +| exprs.kt:322:5:322:8 | | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | +| exprs.kt:322:5:322:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | +| exprs.kt:322:5:322:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:322:5:322:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | | exprs.kt:322:5:322:8 | dec(...) | exprs.kt:285:1:346:1 | unaryExprs | MethodCall | -| exprs.kt:322:5:322:8 | tmp5 | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | -| exprs.kt:322:5:322:8 | tmp5 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | -| exprs.kt:322:5:322:8 | tmp5 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:323:5:323:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:323:5:323:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | | exprs.kt:323:5:323:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | @@ -2006,11 +2006,11 @@ | exprs.kt:334:5:334:8 | ...=... | exprs.kt:285:1:346:1 | unaryExprs | AssignExpr | | exprs.kt:334:5:334:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:334:5:334:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | +| exprs.kt:334:5:334:8 | | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | +| exprs.kt:334:5:334:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | +| exprs.kt:334:5:334:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:334:5:334:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | | exprs.kt:334:5:334:8 | inc(...) | exprs.kt:285:1:346:1 | unaryExprs | MethodCall | -| exprs.kt:334:5:334:8 | tmp6 | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | -| exprs.kt:334:5:334:8 | tmp6 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | -| exprs.kt:334:5:334:8 | tmp6 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:335:5:335:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:335:5:335:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | | exprs.kt:335:5:335:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | @@ -2024,11 +2024,11 @@ | exprs.kt:336:5:336:8 | ...=... | exprs.kt:285:1:346:1 | unaryExprs | AssignExpr | | exprs.kt:336:5:336:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:336:5:336:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | +| exprs.kt:336:5:336:8 | | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | +| exprs.kt:336:5:336:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | +| exprs.kt:336:5:336:8 | | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:336:5:336:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess | | exprs.kt:336:5:336:8 | dec(...) | exprs.kt:285:1:346:1 | unaryExprs | MethodCall | -| exprs.kt:336:5:336:8 | tmp7 | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr | -| exprs.kt:336:5:336:8 | tmp7 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | -| exprs.kt:336:5:336:8 | tmp7 | exprs.kt:285:1:346:1 | unaryExprs | VarAccess | | exprs.kt:337:5:337:8 | | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr | | exprs.kt:337:5:337:8 | | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr | | exprs.kt:337:5:337:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess |