[C14a] Kotlin: name increment/decrement desugar temp <unary> in both frontends

A prefix/postfix increment or decrement (`x++`, `--x`, ...) is desugared into a
block holding an induction temporary. The two frontends name that temporary
differently:

- K1 uses a per-scope counter, `tmp0`, `tmp1`, ... `tmpN`.
- K2 uses the uniform special name `<unary>`.

Decision: adopt the K2 name (`<unary>`) from both frontends. This is the only
robust convergence direction: K1's counter-based `tmpN` numbering depends on the
frontend's temporary allocation order and cannot be reproduced faithfully under
K2 (mapping `<unary>` back to a single `tmp0` would wrongly collapse distinct
temporaries such as `tmp0`..`tmp7` in one function). The uniform `<unary>` name
is frontend-independent and identifies the construct just as well. (This
supersedes the earlier D14 preference for the readable `tmpN` names, which was
made before the numbering infeasibility was established.)

Implementation: `extractBlock` recognises an `IrContainerExpression` whose origin
is one of PREFIX_INCR / PREFIX_DECR / POSTFIX_INCR / POSTFIX_DECR and records its
first statement (the induction temporary) together with the canonical name
`<unary>`. `extractVariableExpr` emits that name for exactly that variable (matched
by identity), leaving all other locals untouched. The recording is saved/restored
around the block's statement extraction so nested blocks behave correctly. The
detection is origin-based and therefore identical for K1 and K2.

Full dual-suite relearn: all 3333 tests pass. The only changed rows are in
test-kotlin1 (exprs/exprs, exprs/PrintAst, controlflow/basic/bbStmts and
getASuccessor), where the K1 increment temporaries converge from `tmpN` to
`<unary>`, matching K2. Remaining exprs.kt differences (unary-operand span, and
the delegatedProperties `<set-?>`/`<get-x>` cluster) are separate location/naming
items tracked elsewhere. The destructuring container temp (`tmp0_container` vs
`<destruct>`) is handled separately in C14b.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Anders Fugmann
2026-07-12 19:44:25 +02:00
parent fa5b17aac8
commit f8e33a2742
5 changed files with 99 additions and 67 deletions

View File

@@ -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<DbLocation>? = 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 `<unary>`,
// whereas K1 names it `tmp<N>` using a per-scope counter that cannot be reproduced
// faithfully under K2. Emitting `<unary>` from both frontends makes the output converge.
private var currentDesugarTemp: Pair<IrVariable, String>? = null
private inline fun <T> 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<N>` under K1 but `<unary>` under K2. K1's counter-based name
// cannot be reproduced under K2, so emit the uniform `<unary>` 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, "<unary>")
}
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 <D : DeclarationDescriptor, reified B : IrSymbolOwner> getBoundSymbolOwner(
symbol: IrBindableSymbol<D, B>,
e: IrExpression

View File

@@ -192,23 +192,23 @@
| Test.kt:38:9:38:13 | After ... > ... [true] | 11 | Test.kt:40:4:40:6 | Before <Stmt> |
| 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 <unary> |
| 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 | <unary> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 17 | Test.kt:40:4:40:6 | After <unary> |
| 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 | <Expr>; |
| 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 | <unary> |
| 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 <Expr>; |
| Test.kt:38:9:38:13 | After ... > ... [true] | 29 | Test.kt:40:4:40:6 | <Expr>; |
| 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 | <unary> |
| Test.kt:38:9:38:13 | After ... > ... [true] | 31 | Test.kt:40:4:40:6 | After <Expr>; |
| 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 | <Stmt> |

View File

@@ -95,18 +95,18 @@
| Test.kt:39:4:39:9 | ...=... | AssignExpr | Test.kt:40:4:40:6 | <Expr>; | ExprStmt |
| Test.kt:39:4:39:9 | <Expr>; | 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 | <unary> | LocalVariableDeclExpr |
| Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | <unary> | VarAccess |
| Test.kt:40:4:40:6 | ...=... | AssignExpr | Test.kt:40:4:40:6 | <Expr>; | ExprStmt |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:4 | x | VarAccess |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | tmp0 | VarAccess |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | <unary> | VarAccess |
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | { ... } | BlockStmt |
| Test.kt:40:4:40:6 | <Stmt> | StmtExpr | Test.kt:40:4:40:6 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr |
| Test.kt:40:4:40:6 | <implicit coercion to unit> | ImplicitCoercionToUnitExpr | Test.kt:38:9:38:9 | x | VarAccess |
| Test.kt:40:4:40:6 | <unary> | LocalVariableDeclExpr | Test.kt:40:4:40:6 | <Expr>; | ExprStmt |
| Test.kt:40:4:40:6 | <unary> | VarAccess | Test.kt:40:4:40:6 | <Stmt> | StmtExpr |
| Test.kt:40:4:40:6 | <unary> | 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 | <Expr>; | ExprStmt |
| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | <Stmt> | 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 |

View File

@@ -2527,15 +2527,15 @@ exprs.kt:
# 138| 1: [StmtExpr] <Stmt>
# 138| 0: [BlockStmt] { ... }
# 138| 0: [LocalVariableDeclStmt] var ...;
# 138| 1: [LocalVariableDeclExpr] tmp0
# 138| 1: [LocalVariableDeclExpr] <unary>
# 138| 0: [VarAccess] variable
# 138| 1: [ExprStmt] <Expr>;
# 138| 0: [AssignExpr] ...=...
# 138| 0: [VarAccess] variable
# 138| 1: [MethodCall] dec(...)
# 138| -1: [VarAccess] tmp0
# 138| -1: [VarAccess] <unary>
# 138| 2: [ExprStmt] <Expr>;
# 138| 0: [VarAccess] tmp0
# 138| 0: [VarAccess] <unary>
# 141| 119: [ReturnStmt] return ...
# 141| 0: [AddExpr] ... + ...
# 141| 0: [IntegerLiteral] 123
@@ -2933,15 +2933,15 @@ exprs.kt:
# 292| 1: [StmtExpr] <Stmt>
# 292| 0: [BlockStmt] { ... }
# 292| 0: [LocalVariableDeclStmt] var ...;
# 292| 1: [LocalVariableDeclExpr] tmp0
# 292| 1: [LocalVariableDeclExpr] <unary>
# 292| 0: [VarAccess] i0
# 292| 1: [ExprStmt] <Expr>;
# 292| 0: [AssignExpr] ...=...
# 292| 0: [VarAccess] i0
# 292| 1: [MethodCall] inc(...)
# 292| -1: [VarAccess] tmp0
# 292| -1: [VarAccess] <unary>
# 292| 2: [ExprStmt] <Expr>;
# 292| 0: [VarAccess] tmp0
# 292| 0: [VarAccess] <unary>
# 293| 7: [ExprStmt] <Expr>;
# 293| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 293| 0: [TypeAccess] Unit
@@ -2960,15 +2960,15 @@ exprs.kt:
# 294| 1: [StmtExpr] <Stmt>
# 294| 0: [BlockStmt] { ... }
# 294| 0: [LocalVariableDeclStmt] var ...;
# 294| 1: [LocalVariableDeclExpr] tmp1
# 294| 1: [LocalVariableDeclExpr] <unary>
# 294| 0: [VarAccess] i0
# 294| 1: [ExprStmt] <Expr>;
# 294| 0: [AssignExpr] ...=...
# 294| 0: [VarAccess] i0
# 294| 1: [MethodCall] dec(...)
# 294| -1: [VarAccess] tmp1
# 294| -1: [VarAccess] <unary>
# 294| 2: [ExprStmt] <Expr>;
# 294| 0: [VarAccess] tmp1
# 294| 0: [VarAccess] <unary>
# 295| 9: [ExprStmt] <Expr>;
# 295| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 295| 0: [TypeAccess] Unit
@@ -3028,15 +3028,15 @@ exprs.kt:
# 306| 1: [StmtExpr] <Stmt>
# 306| 0: [BlockStmt] { ... }
# 306| 0: [LocalVariableDeclStmt] var ...;
# 306| 1: [LocalVariableDeclExpr] tmp2
# 306| 1: [LocalVariableDeclExpr] <unary>
# 306| 0: [VarAccess] b0
# 306| 1: [ExprStmt] <Expr>;
# 306| 0: [AssignExpr] ...=...
# 306| 0: [VarAccess] b0
# 306| 1: [MethodCall] inc(...)
# 306| -1: [VarAccess] tmp2
# 306| -1: [VarAccess] <unary>
# 306| 2: [ExprStmt] <Expr>;
# 306| 0: [VarAccess] tmp2
# 306| 0: [VarAccess] <unary>
# 307| 20: [ExprStmt] <Expr>;
# 307| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 307| 0: [TypeAccess] Unit
@@ -3055,15 +3055,15 @@ exprs.kt:
# 308| 1: [StmtExpr] <Stmt>
# 308| 0: [BlockStmt] { ... }
# 308| 0: [LocalVariableDeclStmt] var ...;
# 308| 1: [LocalVariableDeclExpr] tmp3
# 308| 1: [LocalVariableDeclExpr] <unary>
# 308| 0: [VarAccess] b0
# 308| 1: [ExprStmt] <Expr>;
# 308| 0: [AssignExpr] ...=...
# 308| 0: [VarAccess] b0
# 308| 1: [MethodCall] dec(...)
# 308| -1: [VarAccess] tmp3
# 308| -1: [VarAccess] <unary>
# 308| 2: [ExprStmt] <Expr>;
# 308| 0: [VarAccess] tmp3
# 308| 0: [VarAccess] <unary>
# 309| 22: [ExprStmt] <Expr>;
# 309| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 309| 0: [TypeAccess] Unit
@@ -3123,15 +3123,15 @@ exprs.kt:
# 320| 1: [StmtExpr] <Stmt>
# 320| 0: [BlockStmt] { ... }
# 320| 0: [LocalVariableDeclStmt] var ...;
# 320| 1: [LocalVariableDeclExpr] tmp4
# 320| 1: [LocalVariableDeclExpr] <unary>
# 320| 0: [VarAccess] s0
# 320| 1: [ExprStmt] <Expr>;
# 320| 0: [AssignExpr] ...=...
# 320| 0: [VarAccess] s0
# 320| 1: [MethodCall] inc(...)
# 320| -1: [VarAccess] tmp4
# 320| -1: [VarAccess] <unary>
# 320| 2: [ExprStmt] <Expr>;
# 320| 0: [VarAccess] tmp4
# 320| 0: [VarAccess] <unary>
# 321| 33: [ExprStmt] <Expr>;
# 321| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 321| 0: [TypeAccess] Unit
@@ -3150,15 +3150,15 @@ exprs.kt:
# 322| 1: [StmtExpr] <Stmt>
# 322| 0: [BlockStmt] { ... }
# 322| 0: [LocalVariableDeclStmt] var ...;
# 322| 1: [LocalVariableDeclExpr] tmp5
# 322| 1: [LocalVariableDeclExpr] <unary>
# 322| 0: [VarAccess] s0
# 322| 1: [ExprStmt] <Expr>;
# 322| 0: [AssignExpr] ...=...
# 322| 0: [VarAccess] s0
# 322| 1: [MethodCall] dec(...)
# 322| -1: [VarAccess] tmp5
# 322| -1: [VarAccess] <unary>
# 322| 2: [ExprStmt] <Expr>;
# 322| 0: [VarAccess] tmp5
# 322| 0: [VarAccess] <unary>
# 323| 35: [ExprStmt] <Expr>;
# 323| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 323| 0: [TypeAccess] Unit
@@ -3218,15 +3218,15 @@ exprs.kt:
# 334| 1: [StmtExpr] <Stmt>
# 334| 0: [BlockStmt] { ... }
# 334| 0: [LocalVariableDeclStmt] var ...;
# 334| 1: [LocalVariableDeclExpr] tmp6
# 334| 1: [LocalVariableDeclExpr] <unary>
# 334| 0: [VarAccess] l0
# 334| 1: [ExprStmt] <Expr>;
# 334| 0: [AssignExpr] ...=...
# 334| 0: [VarAccess] l0
# 334| 1: [MethodCall] inc(...)
# 334| -1: [VarAccess] tmp6
# 334| -1: [VarAccess] <unary>
# 334| 2: [ExprStmt] <Expr>;
# 334| 0: [VarAccess] tmp6
# 334| 0: [VarAccess] <unary>
# 335| 46: [ExprStmt] <Expr>;
# 335| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 335| 0: [TypeAccess] Unit
@@ -3245,15 +3245,15 @@ exprs.kt:
# 336| 1: [StmtExpr] <Stmt>
# 336| 0: [BlockStmt] { ... }
# 336| 0: [LocalVariableDeclStmt] var ...;
# 336| 1: [LocalVariableDeclExpr] tmp7
# 336| 1: [LocalVariableDeclExpr] <unary>
# 336| 0: [VarAccess] l0
# 336| 1: [ExprStmt] <Expr>;
# 336| 0: [AssignExpr] ...=...
# 336| 0: [VarAccess] l0
# 336| 1: [MethodCall] dec(...)
# 336| -1: [VarAccess] tmp7
# 336| -1: [VarAccess] <unary>
# 336| 2: [ExprStmt] <Expr>;
# 336| 0: [VarAccess] tmp7
# 336| 0: [VarAccess] <unary>
# 337| 48: [ExprStmt] <Expr>;
# 337| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
# 337| 0: [TypeAccess] Unit

View File

@@ -1395,11 +1395,11 @@
| exprs.kt:138:9:138:18 | ...=... | exprs.kt:4:1:142:1 | topLevelMethod | AssignExpr |
| exprs.kt:138:9:138:18 | <Stmt> | exprs.kt:4:1:142:1 | topLevelMethod | StmtExpr |
| exprs.kt:138:9:138:18 | <implicit coercion to unit> | exprs.kt:4:1:142:1 | topLevelMethod | ImplicitCoercionToUnitExpr |
| exprs.kt:138:9:138:18 | <unary> | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:138:9:138:18 | <unary> | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
| exprs.kt:138:9:138:18 | <unary> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:292:5:292:8 | <implicit coercion to unit> | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr |
| exprs.kt:292:5:292:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr |
| exprs.kt:292:5:292:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | VarAccess |
| exprs.kt:292:5:292:8 | <unary> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:293:5:293:8 | <implicit coercion to unit> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:294:5:294:8 | <implicit coercion to unit> | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr |
| exprs.kt:294:5:294:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr |
| exprs.kt:294:5:294:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | VarAccess |
| exprs.kt:294:5:294:8 | <unary> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:295:5:295:8 | <implicit coercion to unit> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:306:5:306:8 | <implicit coercion to unit> | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr |
| exprs.kt:306:5:306:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr |
| exprs.kt:306:5:306:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | VarAccess |
| exprs.kt:306:5:306:8 | <unary> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:307:5:307:8 | <implicit coercion to unit> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:308:5:308:8 | <implicit coercion to unit> | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr |
| exprs.kt:308:5:308:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr |
| exprs.kt:308:5:308:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | VarAccess |
| exprs.kt:308:5:308:8 | <unary> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:309:5:309:8 | <implicit coercion to unit> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:320:5:320:8 | <implicit coercion to unit> | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr |
| exprs.kt:320:5:320:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr |
| exprs.kt:320:5:320:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | VarAccess |
| exprs.kt:320:5:320:8 | <unary> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:321:5:321:8 | <implicit coercion to unit> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:322:5:322:8 | <implicit coercion to unit> | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr |
| exprs.kt:322:5:322:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr |
| exprs.kt:322:5:322:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | VarAccess |
| exprs.kt:322:5:322:8 | <unary> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:323:5:323:8 | <implicit coercion to unit> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:334:5:334:8 | <implicit coercion to unit> | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr |
| exprs.kt:334:5:334:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr |
| exprs.kt:334:5:334:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | VarAccess |
| exprs.kt:334:5:334:8 | <unary> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:335:5:335:8 | <implicit coercion to unit> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:336:5:336:8 | <implicit coercion to unit> | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr |
| exprs.kt:336:5:336:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | LocalVariableDeclExpr |
| exprs.kt:336:5:336:8 | <unary> | exprs.kt:285:1:346:1 | unaryExprs | VarAccess |
| exprs.kt:336:5:336:8 | <unary> | 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 | <Stmt> | exprs.kt:285:1:346:1 | unaryExprs | StmtExpr |
| exprs.kt:337:5:337:8 | <implicit coercion to unit> | exprs.kt:285:1:346:1 | unaryExprs | ImplicitCoercionToUnitExpr |
| exprs.kt:337:5:337:8 | Unit | exprs.kt:285:1:346:1 | unaryExprs | TypeAccess |