Merge pull request #10909 from smowton/smowton/fix/kotlin-varargs-dataflow

Kotlin: Fix varargs dataflow, and varargs default handling
This commit is contained in:
Chris Smowton
2022-10-21 13:32:34 +01:00
committed by GitHub
9 changed files with 473 additions and 16 deletions

View File

@@ -7,6 +7,394 @@ test.kt:
# 1| 0: [Parameter] a
# 1| 0: [TypeAccess] Object
# 1| 5: [BlockStmt] { ... }
# 184| 2: [Method] varargsTest
# 184| 3: [TypeAccess] Unit
#-----| 4: (Parameters)
# 184| 0: [Parameter] x
# 184| 0: [TypeAccess] String
# 184| 1: [Parameter] y
# 184| 0: [TypeAccess] String[]
# 184| 0: [WildcardTypeAccess] ? ...
# 184| 0: [TypeAccess] String
# 184| 2: [Parameter] z
# 184| 0: [TypeAccess] String
# 184| 5: [BlockStmt] { ... }
# 185| 0: [ExprStmt] <Expr>;
# 185| 0: [MethodAccess] sink(...)
# 185| -1: [TypeAccess] TestKt
# 185| 0: [VarAccess] x
# 186| 1: [ExprStmt] <Expr>;
# 186| 0: [MethodAccess] sink(...)
# 186| -1: [TypeAccess] TestKt
# 186| 0: [ArrayAccess] ...[...]
# 186| 0: [VarAccess] y
# 186| 1: [IntegerLiteral] 0
# 187| 2: [ExprStmt] <Expr>;
# 187| 0: [MethodAccess] sink(...)
# 187| -1: [TypeAccess] TestKt
# 187| 0: [VarAccess] z
# 184| 3: [Method] varargsTest$default
# 184| 3: [TypeAccess] Unit
#-----| 4: (Parameters)
# 184| 0: [Parameter] p0
# 184| 0: [TypeAccess] String
# 184| 1: [Parameter] p1
# 184| 0: [TypeAccess] String[]
# 184| 2: [Parameter] p2
# 184| 0: [TypeAccess] String
# 184| 3: [Parameter] p3
# 184| 0: [TypeAccess] int
# 184| 4: [Parameter] p4
# 184| 0: [TypeAccess] Object
# 184| 5: [BlockStmt] { ... }
# 184| 0: [IfStmt] if (...)
# 184| 0: [EQExpr] ... == ...
# 184| 0: [AndBitwiseExpr] ... & ...
# 184| 0: [IntegerLiteral] 1
# 184| 1: [VarAccess] p3
# 184| 1: [IntegerLiteral] 0
# 184| 1: [ExprStmt] <Expr>;
# 184| 0: [AssignExpr] ...=...
# 184| 0: [VarAccess] p0
# 184| 1: [StringLiteral] before-vararg-default sunk
# 184| 1: [IfStmt] if (...)
# 184| 0: [EQExpr] ... == ...
# 184| 0: [AndBitwiseExpr] ... & ...
# 184| 0: [IntegerLiteral] 2
# 184| 1: [VarAccess] p3
# 184| 1: [IntegerLiteral] 0
# 184| 1: [ExprStmt] <Expr>;
# 184| 0: [AssignExpr] ...=...
# 184| 0: [VarAccess] p1
# 184| 1: [ArrayCreationExpr] new String[]
# 184| -2: [ArrayInit] {...}
# 184| 0: [StringLiteral] first-vararg-default sunk
# 184| 1: [StringLiteral] second-vararg-default sunk
# 184| -1: [TypeAccess] String
# 184| 0: [IntegerLiteral] 2
# 184| 2: [IfStmt] if (...)
# 184| 0: [EQExpr] ... == ...
# 184| 0: [AndBitwiseExpr] ... & ...
# 184| 0: [IntegerLiteral] 4
# 184| 1: [VarAccess] p3
# 184| 1: [IntegerLiteral] 0
# 184| 1: [ExprStmt] <Expr>;
# 184| 0: [AssignExpr] ...=...
# 184| 0: [VarAccess] p2
# 184| 1: [StringLiteral] after-vararg-default sunk
# 184| 3: [ReturnStmt] return ...
# 184| 0: [MethodAccess] varargsTest(...)
# 184| -1: [TypeAccess] TestKt
# 184| 0: [VarAccess] p0
# 184| 1: [VarAccess] p1
# 184| 2: [VarAccess] p2
# 190| 4: [Method] varargsUser
# 190| 3: [TypeAccess] Unit
# 190| 5: [BlockStmt] { ... }
# 191| 0: [ExprStmt] <Expr>;
# 191| 0: [MethodAccess] varargsTest$default(...)
# 191| -1: [TypeAccess] TestKt
# 1| 0: [NullLiteral] null
# 1| 1: [NullLiteral] null
# 1| 2: [NullLiteral] null
# 1| 3: [IntegerLiteral] 0
# 1| 4: [NullLiteral] null
# 192| 1: [ExprStmt] <Expr>;
# 192| 0: [MethodAccess] varargsTest$default(...)
# 192| -1: [TypeAccess] TestKt
# 192| 0: [StringLiteral] no-varargs-before, no-z-parameter sunk
# 1| 1: [NullLiteral] null
# 1| 2: [NullLiteral] null
# 1| 3: [IntegerLiteral] 1
# 1| 4: [NullLiteral] null
# 193| 2: [ExprStmt] <Expr>;
# 193| 0: [MethodAccess] varargsTest$default(...)
# 193| -1: [TypeAccess] TestKt
# 193| 0: [StringLiteral] no-varargs-before sunk
# 1| 1: [NullLiteral] null
# 193| 2: [StringLiteral] no-varargs-after sunk
# 1| 3: [IntegerLiteral] 5
# 1| 4: [NullLiteral] null
# 194| 3: [ExprStmt] <Expr>;
# 194| 0: [MethodAccess] varargsTest(...)
# 194| -1: [TypeAccess] TestKt
# 194| 0: [StringLiteral] one-vararg-before sunk
# 194| 1: [StringLiteral] one-vararg sunk
# 194| 2: [StringLiteral] one-vararg-after sunk
# 195| 4: [ExprStmt] <Expr>;
# 195| 0: [MethodAccess] varargsTest(...)
# 195| -1: [TypeAccess] TestKt
# 195| 0: [StringLiteral] two-varargs-before sunk
# 195| 1: [StringLiteral] two-vararg-first sunk
# 195| 2: [StringLiteral] two-vararg-second sunk
# 195| 3: [StringLiteral] two-varargs-after sunk
# 196| 5: [ExprStmt] <Expr>;
# 196| 0: [MethodAccess] varargsTest$default(...)
# 196| -1: [TypeAccess] TestKt
# 196| 0: [StringLiteral] no-z-parmeter sunk
# 196| 1: [ArrayCreationExpr] new String[]
# 196| -2: [ArrayInit] {...}
# 196| 0: [StringLiteral] no-z-parameter first vararg sunk
# 196| 1: [StringLiteral] no-z-parameter second vararg sunk
# 196| -1: [TypeAccess] String
# 196| 0: [IntegerLiteral] 2
# 1| 2: [NullLiteral] null
# 1| 3: [IntegerLiteral] 3
# 1| 4: [NullLiteral] null
# 199| 5: [Method] varargsTestOnlySinkVarargs
# 199| 3: [TypeAccess] Unit
#-----| 4: (Parameters)
# 199| 0: [Parameter] x
# 199| 0: [TypeAccess] String
# 199| 1: [Parameter] y
# 199| 0: [TypeAccess] String[]
# 199| 0: [WildcardTypeAccess] ? ...
# 199| 0: [TypeAccess] String
# 199| 2: [Parameter] z
# 199| 0: [TypeAccess] String
# 199| 5: [BlockStmt] { ... }
# 200| 0: [ExprStmt] <Expr>;
# 200| 0: [MethodAccess] sink(...)
# 200| -1: [TypeAccess] TestKt
# 200| 0: [ArrayAccess] ...[...]
# 200| 0: [VarAccess] y
# 200| 1: [IntegerLiteral] 0
# 199| 6: [Method] varargsTestOnlySinkVarargs$default
# 199| 3: [TypeAccess] Unit
#-----| 4: (Parameters)
# 199| 0: [Parameter] p0
# 199| 0: [TypeAccess] String
# 199| 1: [Parameter] p1
# 199| 0: [TypeAccess] String[]
# 199| 2: [Parameter] p2
# 199| 0: [TypeAccess] String
# 199| 3: [Parameter] p3
# 199| 0: [TypeAccess] int
# 199| 4: [Parameter] p4
# 199| 0: [TypeAccess] Object
# 199| 5: [BlockStmt] { ... }
# 199| 0: [IfStmt] if (...)
# 199| 0: [EQExpr] ... == ...
# 199| 0: [AndBitwiseExpr] ... & ...
# 199| 0: [IntegerLiteral] 1
# 199| 1: [VarAccess] p3
# 199| 1: [IntegerLiteral] 0
# 199| 1: [ExprStmt] <Expr>;
# 199| 0: [AssignExpr] ...=...
# 199| 0: [VarAccess] p0
# 199| 1: [StringLiteral] before-vararg-default not sunk 2
# 199| 1: [IfStmt] if (...)
# 199| 0: [EQExpr] ... == ...
# 199| 0: [AndBitwiseExpr] ... & ...
# 199| 0: [IntegerLiteral] 2
# 199| 1: [VarAccess] p3
# 199| 1: [IntegerLiteral] 0
# 199| 1: [ExprStmt] <Expr>;
# 199| 0: [AssignExpr] ...=...
# 199| 0: [VarAccess] p1
# 199| 1: [ArrayCreationExpr] new String[]
# 199| -2: [ArrayInit] {...}
# 199| 0: [StringLiteral] first-vararg-default sunk 2
# 199| 1: [StringLiteral] second-vararg-default sunk 2
# 199| -1: [TypeAccess] String
# 199| 0: [IntegerLiteral] 2
# 199| 2: [IfStmt] if (...)
# 199| 0: [EQExpr] ... == ...
# 199| 0: [AndBitwiseExpr] ... & ...
# 199| 0: [IntegerLiteral] 4
# 199| 1: [VarAccess] p3
# 199| 1: [IntegerLiteral] 0
# 199| 1: [ExprStmt] <Expr>;
# 199| 0: [AssignExpr] ...=...
# 199| 0: [VarAccess] p2
# 199| 1: [StringLiteral] after-vararg-default not sunk 2
# 199| 3: [ReturnStmt] return ...
# 199| 0: [MethodAccess] varargsTestOnlySinkVarargs(...)
# 199| -1: [TypeAccess] TestKt
# 199| 0: [VarAccess] p0
# 199| 1: [VarAccess] p1
# 199| 2: [VarAccess] p2
# 203| 7: [Method] varargsUserOnlySinkVarargs
# 203| 3: [TypeAccess] Unit
# 203| 5: [BlockStmt] { ... }
# 204| 0: [ExprStmt] <Expr>;
# 204| 0: [MethodAccess] varargsTestOnlySinkVarargs$default(...)
# 204| -1: [TypeAccess] TestKt
# 1| 0: [NullLiteral] null
# 1| 1: [NullLiteral] null
# 1| 2: [NullLiteral] null
# 1| 3: [IntegerLiteral] 0
# 1| 4: [NullLiteral] null
# 205| 1: [ExprStmt] <Expr>;
# 205| 0: [MethodAccess] varargsTestOnlySinkVarargs$default(...)
# 205| -1: [TypeAccess] TestKt
# 205| 0: [StringLiteral] no-varargs-before, no-z-parameter not sunk 2
# 1| 1: [NullLiteral] null
# 1| 2: [NullLiteral] null
# 1| 3: [IntegerLiteral] 1
# 1| 4: [NullLiteral] null
# 206| 2: [ExprStmt] <Expr>;
# 206| 0: [MethodAccess] varargsTestOnlySinkVarargs$default(...)
# 206| -1: [TypeAccess] TestKt
# 206| 0: [StringLiteral] no-varargs-before not sunk 2
# 1| 1: [NullLiteral] null
# 206| 2: [StringLiteral] no-varargs-after not sunk 2
# 1| 3: [IntegerLiteral] 5
# 1| 4: [NullLiteral] null
# 207| 3: [ExprStmt] <Expr>;
# 207| 0: [MethodAccess] varargsTestOnlySinkVarargs(...)
# 207| -1: [TypeAccess] TestKt
# 207| 0: [StringLiteral] one-vararg-before not sunk 2
# 207| 1: [StringLiteral] one-vararg sunk 2
# 207| 2: [StringLiteral] one-vararg-after not sunk 2
# 208| 4: [ExprStmt] <Expr>;
# 208| 0: [MethodAccess] varargsTestOnlySinkVarargs(...)
# 208| -1: [TypeAccess] TestKt
# 208| 0: [StringLiteral] two-varargs-before not sunk 2
# 208| 1: [StringLiteral] two-vararg-first sunk 2
# 208| 2: [StringLiteral] two-vararg-second sunk 2
# 208| 3: [StringLiteral] two-varargs-after not sunk 2
# 209| 5: [ExprStmt] <Expr>;
# 209| 0: [MethodAccess] varargsTestOnlySinkVarargs$default(...)
# 209| -1: [TypeAccess] TestKt
# 209| 0: [StringLiteral] no-z-parmeter not sunk 2
# 209| 1: [ArrayCreationExpr] new String[]
# 209| -2: [ArrayInit] {...}
# 209| 0: [StringLiteral] no-z-parameter first vararg sunk 2
# 209| 1: [StringLiteral] no-z-parameter second vararg sunk 2
# 209| -1: [TypeAccess] String
# 209| 0: [IntegerLiteral] 2
# 1| 2: [NullLiteral] null
# 1| 3: [IntegerLiteral] 3
# 1| 4: [NullLiteral] null
# 212| 8: [Method] varargsTestOnlySinkRegularArgs
# 212| 3: [TypeAccess] Unit
#-----| 4: (Parameters)
# 212| 0: [Parameter] x
# 212| 0: [TypeAccess] String
# 212| 1: [Parameter] y
# 212| 0: [TypeAccess] String[]
# 212| 0: [WildcardTypeAccess] ? ...
# 212| 0: [TypeAccess] String
# 212| 2: [Parameter] z
# 212| 0: [TypeAccess] String
# 212| 5: [BlockStmt] { ... }
# 213| 0: [ExprStmt] <Expr>;
# 213| 0: [MethodAccess] sink(...)
# 213| -1: [TypeAccess] TestKt
# 213| 0: [VarAccess] x
# 214| 1: [ExprStmt] <Expr>;
# 214| 0: [MethodAccess] sink(...)
# 214| -1: [TypeAccess] TestKt
# 214| 0: [VarAccess] z
# 212| 9: [Method] varargsTestOnlySinkRegularArgs$default
# 212| 3: [TypeAccess] Unit
#-----| 4: (Parameters)
# 212| 0: [Parameter] p0
# 212| 0: [TypeAccess] String
# 212| 1: [Parameter] p1
# 212| 0: [TypeAccess] String[]
# 212| 2: [Parameter] p2
# 212| 0: [TypeAccess] String
# 212| 3: [Parameter] p3
# 212| 0: [TypeAccess] int
# 212| 4: [Parameter] p4
# 212| 0: [TypeAccess] Object
# 212| 5: [BlockStmt] { ... }
# 212| 0: [IfStmt] if (...)
# 212| 0: [EQExpr] ... == ...
# 212| 0: [AndBitwiseExpr] ... & ...
# 212| 0: [IntegerLiteral] 1
# 212| 1: [VarAccess] p3
# 212| 1: [IntegerLiteral] 0
# 212| 1: [ExprStmt] <Expr>;
# 212| 0: [AssignExpr] ...=...
# 212| 0: [VarAccess] p0
# 212| 1: [StringLiteral] before-vararg-default sunk 3
# 212| 1: [IfStmt] if (...)
# 212| 0: [EQExpr] ... == ...
# 212| 0: [AndBitwiseExpr] ... & ...
# 212| 0: [IntegerLiteral] 2
# 212| 1: [VarAccess] p3
# 212| 1: [IntegerLiteral] 0
# 212| 1: [ExprStmt] <Expr>;
# 212| 0: [AssignExpr] ...=...
# 212| 0: [VarAccess] p1
# 212| 1: [ArrayCreationExpr] new String[]
# 212| -2: [ArrayInit] {...}
# 212| 0: [StringLiteral] first-vararg-default not sunk 3
# 212| 1: [StringLiteral] second-vararg-default not sunk 3
# 212| -1: [TypeAccess] String
# 212| 0: [IntegerLiteral] 2
# 212| 2: [IfStmt] if (...)
# 212| 0: [EQExpr] ... == ...
# 212| 0: [AndBitwiseExpr] ... & ...
# 212| 0: [IntegerLiteral] 4
# 212| 1: [VarAccess] p3
# 212| 1: [IntegerLiteral] 0
# 212| 1: [ExprStmt] <Expr>;
# 212| 0: [AssignExpr] ...=...
# 212| 0: [VarAccess] p2
# 212| 1: [StringLiteral] after-vararg-default sunk 3
# 212| 3: [ReturnStmt] return ...
# 212| 0: [MethodAccess] varargsTestOnlySinkRegularArgs(...)
# 212| -1: [TypeAccess] TestKt
# 212| 0: [VarAccess] p0
# 212| 1: [VarAccess] p1
# 212| 2: [VarAccess] p2
# 217| 10: [Method] varargsUserOnlySinkRegularArgs
# 217| 3: [TypeAccess] Unit
# 217| 5: [BlockStmt] { ... }
# 218| 0: [ExprStmt] <Expr>;
# 218| 0: [MethodAccess] varargsTestOnlySinkRegularArgs$default(...)
# 218| -1: [TypeAccess] TestKt
# 1| 0: [NullLiteral] null
# 1| 1: [NullLiteral] null
# 1| 2: [NullLiteral] null
# 1| 3: [IntegerLiteral] 0
# 1| 4: [NullLiteral] null
# 219| 1: [ExprStmt] <Expr>;
# 219| 0: [MethodAccess] varargsTestOnlySinkRegularArgs$default(...)
# 219| -1: [TypeAccess] TestKt
# 219| 0: [StringLiteral] no-varargs-before, no-z-parameter sunk 3
# 1| 1: [NullLiteral] null
# 1| 2: [NullLiteral] null
# 1| 3: [IntegerLiteral] 1
# 1| 4: [NullLiteral] null
# 220| 2: [ExprStmt] <Expr>;
# 220| 0: [MethodAccess] varargsTestOnlySinkRegularArgs$default(...)
# 220| -1: [TypeAccess] TestKt
# 220| 0: [StringLiteral] no-varargs-before sunk 3
# 1| 1: [NullLiteral] null
# 220| 2: [StringLiteral] no-varargs-after sunk 3
# 1| 3: [IntegerLiteral] 5
# 1| 4: [NullLiteral] null
# 221| 3: [ExprStmt] <Expr>;
# 221| 0: [MethodAccess] varargsTestOnlySinkRegularArgs(...)
# 221| -1: [TypeAccess] TestKt
# 221| 0: [StringLiteral] one-vararg-before sunk 3
# 221| 1: [StringLiteral] one-vararg not sunk 3
# 221| 2: [StringLiteral] one-vararg-after sunk 3
# 222| 4: [ExprStmt] <Expr>;
# 222| 0: [MethodAccess] varargsTestOnlySinkRegularArgs(...)
# 222| -1: [TypeAccess] TestKt
# 222| 0: [StringLiteral] two-varargs-before sunk 3
# 222| 1: [StringLiteral] two-vararg-first not sunk 3
# 222| 2: [StringLiteral] two-vararg-second not sunk 3
# 222| 3: [StringLiteral] two-varargs-after sunk 3
# 223| 5: [ExprStmt] <Expr>;
# 223| 0: [MethodAccess] varargsTestOnlySinkRegularArgs$default(...)
# 223| -1: [TypeAccess] TestKt
# 223| 0: [StringLiteral] no-z-parmeter sunk 3
# 223| 1: [ArrayCreationExpr] new String[]
# 223| -2: [ArrayInit] {...}
# 223| 0: [StringLiteral] no-z-parameter first vararg not sunk 3
# 223| 1: [StringLiteral] no-z-parameter second vararg not sunk 3
# 223| -1: [TypeAccess] String
# 223| 0: [IntegerLiteral] 2
# 1| 2: [NullLiteral] null
# 1| 3: [IntegerLiteral] 3
# 1| 4: [NullLiteral] null
# 3| 2: [Class] TestMember
# 3| 1: [Constructor] TestMember
# 3| 5: [BlockStmt] { ... }

View File

@@ -13,3 +13,6 @@
| test.kt:171:3:171:97 | f | test.kt:171:3:171:97 | f$default |
| test.kt:179:3:179:46 | f | test.kt:179:3:179:46 | f$default |
| test.kt:180:3:180:34 | f | test.kt:180:3:180:34 | f$default |
| test.kt:184:1:188:1 | varargsTest | test.kt:184:1:188:1 | varargsTest$default |
| test.kt:199:1:201:1 | varargsTestOnlySinkVarargs | test.kt:199:1:201:1 | varargsTestOnlySinkVarargs$default |
| test.kt:212:1:215:1 | varargsTestOnlySinkRegularArgs | test.kt:212:1:215:1 | varargsTestOnlySinkRegularArgs$default |

View File

@@ -180,3 +180,45 @@ class TestOverloadsWithDefaults {
fun f(z: String, w: Int = 0) { }
}
fun varargsTest(x: String = "before-vararg-default sunk", vararg y: String = arrayOf("first-vararg-default sunk", "second-vararg-default sunk"), z: String = "after-vararg-default sunk") {
sink(x)
sink(y[0])
sink(z)
}
fun varargsUser() {
varargsTest()
varargsTest(x = "no-varargs-before, no-z-parameter sunk")
varargsTest(x = "no-varargs-before sunk", z = "no-varargs-after sunk")
varargsTest(x = "one-vararg-before sunk", "one-vararg sunk", z = "one-vararg-after sunk")
varargsTest(x = "two-varargs-before sunk", "two-vararg-first sunk", "two-vararg-second sunk", z = "two-varargs-after sunk")
varargsTest("no-z-parmeter sunk", "no-z-parameter first vararg sunk", "no-z-parameter second vararg sunk")
}
fun varargsTestOnlySinkVarargs(x: String = "before-vararg-default not sunk 2", vararg y: String = arrayOf("first-vararg-default sunk 2", "second-vararg-default sunk 2"), z: String = "after-vararg-default not sunk 2") {
sink(y[0])
}
fun varargsUserOnlySinkVarargs() {
varargsTestOnlySinkVarargs()
varargsTestOnlySinkVarargs(x = "no-varargs-before, no-z-parameter not sunk 2")
varargsTestOnlySinkVarargs(x = "no-varargs-before not sunk 2", z = "no-varargs-after not sunk 2")
varargsTestOnlySinkVarargs(x = "one-vararg-before not sunk 2", "one-vararg sunk 2", z = "one-vararg-after not sunk 2")
varargsTestOnlySinkVarargs(x = "two-varargs-before not sunk 2", "two-vararg-first sunk 2", "two-vararg-second sunk 2", z = "two-varargs-after not sunk 2")
varargsTestOnlySinkVarargs("no-z-parmeter not sunk 2", "no-z-parameter first vararg sunk 2", "no-z-parameter second vararg sunk 2")
}
fun varargsTestOnlySinkRegularArgs(x: String = "before-vararg-default sunk 3", vararg y: String = arrayOf("first-vararg-default not sunk 3", "second-vararg-default not sunk 3"), z: String = "after-vararg-default sunk 3") {
sink(x)
sink(z)
}
fun varargsUserOnlySinkRegularArgs() {
varargsTestOnlySinkRegularArgs()
varargsTestOnlySinkRegularArgs(x = "no-varargs-before, no-z-parameter sunk 3")
varargsTestOnlySinkRegularArgs(x = "no-varargs-before sunk 3", z = "no-varargs-after sunk 3")
varargsTestOnlySinkRegularArgs(x = "one-vararg-before sunk 3", "one-vararg not sunk 3", z = "one-vararg-after sunk 3")
varargsTestOnlySinkRegularArgs(x = "two-varargs-before sunk 3", "two-vararg-first not sunk 3", "two-vararg-second not sunk 3", z = "two-varargs-after sunk 3")
varargsTestOnlySinkRegularArgs("no-z-parmeter sunk 3", "no-z-parameter first vararg not sunk 3", "no-z-parameter second vararg not sunk 3")
}

View File

@@ -16,6 +16,9 @@
| test.kt:36:40:36:41 | 30 | test.kt:25:10:25:18 | ...[...] |
| test.kt:36:44:36:45 | 31 | test.kt:25:10:25:18 | ...[...] |
| test.kt:36:48:36:49 | 32 | test.kt:25:10:25:18 | ...[...] |
| test.kt:37:33:37:34 | 41 | test.kt:29:10:29:18 | ...[...] |
| test.kt:37:37:37:38 | 42 | test.kt:29:10:29:18 | ...[...] |
| test.kt:37:41:37:42 | 43 | test.kt:29:10:29:18 | ...[...] |
| test.kt:41:26:41:27 | 51 | test.kt:9:10:9:18 | ...[...] |
| test.kt:41:30:41:31 | 52 | test.kt:9:10:9:18 | ...[...] |
| test.kt:41:34:41:35 | 53 | test.kt:9:10:9:18 | ...[...] |