Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9d77941

Browse files
tamasvajkigfoo
authored andcommitted
Fix temporary variable locations
1 parent 5c77131 commit 9d77941

7 files changed

Lines changed: 53 additions & 43 deletions

File tree

java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -605,9 +605,16 @@ open class KotlinFileExtractor(
605605
}
606606
}
607607

608+
private fun getVariableLocationProvider(v: IrVariable): IrElement {
609+
if (v.origin == IrDeclarationOrigin.IR_TEMPORARY_VARIABLE) {
610+
return v.initializer ?: v
611+
}
612+
return v
613+
}
614+
608615
fun extractVariable(v: IrVariable, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
609616
val stmtId = tw.getFreshIdLabel<DbLocalvariabledeclstmt>()
610-
val locId = tw.getLocation(v)
617+
val locId = tw.getLocation(getVariableLocationProvider(v))
611618
tw.writeStmts_localvariabledeclstmt(stmtId, parent, idx, callable)
612619
tw.writeHasLocation(stmtId, locId)
613620
extractVariableExpr(v, callable, stmtId, 1, stmtId)
@@ -616,7 +623,7 @@ open class KotlinFileExtractor(
616623
fun extractVariableExpr(v: IrVariable, callable: Label<out DbCallable>, parent: Label<out DbExprparent>, idx: Int, enclosingStmt: Label<out DbStmt>) {
617624
val varId = useVariable(v)
618625
val exprId = tw.getFreshIdLabel<DbLocalvariabledeclexpr>()
619-
val locId = tw.getLocation(v)
626+
val locId = tw.getLocation(getVariableLocationProvider(v))
620627
val type = useType(v.type)
621628
tw.writeLocalvars(varId, v.name.asString(), type.javaResult.id, type.kotlinResult.id, exprId)
622629
tw.writeHasLocation(varId, locId)

java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@
8282
| Test.kt:38:16:41:3 | { ... } | 4 | Test.kt:40:4:40:6 | <Expr>; |
8383
| Test.kt:38:16:41:3 | { ... } | 5 | Test.kt:40:4:40:6 | <Stmt> |
8484
| Test.kt:38:16:41:3 | { ... } | 6 | Test.kt:40:4:40:6 | { ... } |
85-
| Test.kt:38:16:41:3 | { ... } | 7 | file://:0:0:0:0 | var ...; |
85+
| Test.kt:38:16:41:3 | { ... } | 7 | Test.kt:40:4:40:4 | var ...; |
8686
| Test.kt:38:16:41:3 | { ... } | 8 | Test.kt:40:4:40:4 | x |
87-
| Test.kt:38:16:41:3 | { ... } | 9 | file://:0:0:0:0 | tmp0 |
87+
| Test.kt:38:16:41:3 | { ... } | 9 | Test.kt:40:4:40:4 | tmp0 |
8888
| Test.kt:38:16:41:3 | { ... } | 10 | Test.kt:40:4:40:4 | <Expr>; |
8989
| Test.kt:38:16:41:3 | { ... } | 11 | Test.kt:40:4:40:6 | tmp0 |
9090
| Test.kt:38:16:41:3 | { ... } | 12 | Test.kt:40:4:40:6 | dec(...) |

java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,11 @@
101101
| Test.kt:39:8:39:9 | 10 | LongLiteral | Test.kt:39:4:39:4 | ...=... | AssignExpr |
102102
| Test.kt:40:4:40:4 | ...=... | AssignExpr | Test.kt:40:4:40:6 | <Expr>; | ExprStmt |
103103
| Test.kt:40:4:40:4 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | tmp0 | VarAccess |
104+
| Test.kt:40:4:40:4 | int tmp0 | LocalVariableDecl | file://:0:0:0:0 | <none> | <none> |
105+
| Test.kt:40:4:40:4 | tmp0 | LocalVariableDeclExpr | Test.kt:40:4:40:4 | <Expr>; | ExprStmt |
106+
| Test.kt:40:4:40:4 | var ...; | LocalVariableDeclStmt | Test.kt:40:4:40:4 | x | VarAccess |
107+
| Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:4 | tmp0 | LocalVariableDeclExpr |
104108
| Test.kt:40:4:40:4 | x | VarAccess | file://:0:0:0:0 | <none> | <none> |
105-
| Test.kt:40:4:40:4 | x | VarAccess | file://:0:0:0:0 | tmp0 | LocalVariableDeclExpr |
106109
| Test.kt:40:4:40:6 | (...)... | CastExpr | Test.kt:38:9:38:9 | x | VarAccess |
107110
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | <Stmt> | StmtExpr |
108111
| Test.kt:40:4:40:6 | <Expr>; | ExprStmt | Test.kt:40:4:40:6 | tmp0 | VarAccess |
@@ -111,7 +114,7 @@
111114
| Test.kt:40:4:40:6 | dec(...) | MethodAccess | Test.kt:40:4:40:4 | ...=... | AssignExpr |
112115
| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | (...)... | CastExpr |
113116
| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | dec(...) | MethodAccess |
114-
| Test.kt:40:4:40:6 | { ... } | BlockStmt | file://:0:0:0:0 | var ...; | LocalVariableDeclStmt |
117+
| Test.kt:40:4:40:6 | { ... } | BlockStmt | Test.kt:40:4:40:4 | var ...; | LocalVariableDeclStmt |
115118
| Test.kt:43:3:43:3 | ...=... | AssignExpr | Test.kt:73:3:73:3 | <Expr>; | ExprStmt |
116119
| Test.kt:43:3:43:3 | <Expr>; | ExprStmt | Test.kt:43:7:43:8 | 30 | IntegerLiteral |
117120
| Test.kt:43:3:43:3 | z | VarAccess | file://:0:0:0:0 | <none> | <none> |

0 commit comments

Comments
 (0)