mirror of
https://github.com/github/codeql.git
synced 2026-07-15 00:08:14 +02:00
[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:
@@ -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
|
||||
|
||||
@@ -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> |
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 |
|
||||
|
||||
Reference in New Issue
Block a user