Extract field receiver in field read/write

This commit is contained in:
Tamas Vajk
2021-12-20 16:11:50 +01:00
committed by Ian Lynagh
parent 10ae157682
commit 1e64887903
5 changed files with 40 additions and 14 deletions

View File

@@ -1632,6 +1632,11 @@ open class KotlinFileExtractor(
val vId = useField(owner)
tw.writeVariableBinding(id, vId)
tw.writeStatementEnclosingExpr(id, exprParent.enclosingStmt)
val receiver = e.receiver
if (receiver != null) {
extractExpressionExpr(receiver, callable, id, -1, exprParent.enclosingStmt)
}
}
is IrGetEnumValue -> {
val exprParent = parent.expr(e, callable)
@@ -1679,6 +1684,11 @@ open class KotlinFileExtractor(
val vId = useField(e.symbol.owner)
tw.writeVariableBinding(lhsId, vId)
extractExpressionExpr(e.value, callable, id, 1, exprParent.enclosingStmt)
val receiver = e.receiver
if (receiver != null) {
extractExpressionExpr(receiver, callable, lhsId, -1, exprParent.enclosingStmt)
}
}
else -> {
logger.warnElement(Severity.ErrorSevere, "Unhandled IrSet* element.", e)

View File

@@ -703,10 +703,12 @@ exprs.kt:
# 162| 1: [VarAccess] r
# 163| 1: [LocalVariableDeclStmt] var ...;
# 163| 1: [LocalVariableDeclExpr] height
# 163| 0: [VarAccess] height
# 163| 0: [VarAccess] r2.height
# 163| -1: [VarAccess] r2
# 164| 2: [ExprStmt] <Expr>;
# 164| 0: [AssignExpr] ...=...
# 164| 0: [VarAccess] height
# 164| 0: [VarAccess] r2.height
# 164| -1: [VarAccess] r2
# 164| 1: [IntegerLiteral] 3
# 178| 5: [Method] enums
# 178| 5: [BlockStmt] { ... }
@@ -746,7 +748,8 @@ exprs.kt:
# 142| 3: [Method] getN
# 142| 5: [BlockStmt] { ... }
# 142| 0: [ReturnStmt] return ...
# 142| 0: [VarAccess] n
# 142| 0: [VarAccess] this.n
# 142| -1: [ThisAccess] this
# 142| 3: [FieldDeclaration] int n;
# 142| -1: [TypeAccess] int
# 143| 5: [Method] foo
@@ -808,7 +811,8 @@ exprs.kt:
# 172| 7: [Method] getRgb
# 172| 5: [BlockStmt] { ... }
# 172| 0: [ReturnStmt] return ...
# 172| 0: [VarAccess] rgb
# 172| 0: [VarAccess] this.rgb
# 172| -1: [ThisAccess] this
# 172| 7: [FieldDeclaration] int rgb;
# 172| -1: [TypeAccess] int
# 183| 8: [Interface] Interface1
@@ -821,7 +825,8 @@ exprs.kt:
# 186| 3: [Method] getA1
# 186| 5: [BlockStmt] { ... }
# 186| 0: [ReturnStmt] return ...
# 186| 0: [VarAccess] a1
# 186| 0: [VarAccess] this.a1
# 186| -1: [ThisAccess] this
# 186| 3: [FieldDeclaration] int a1;
# 186| -1: [TypeAccess] int
# 186| 0: [IntegerLiteral] 1
@@ -843,7 +848,8 @@ exprs.kt:
# 190| 3: [Method] getA3
# 190| 5: [BlockStmt] { ... }
# 190| 0: [ReturnStmt] return ...
# 190| 0: [VarAccess] a3
# 190| 0: [VarAccess] this.a3
# 190| -1: [ThisAccess] this
# 190| 3: [FieldDeclaration] String a3;
# 190| -1: [TypeAccess] String
# 190| 0: [MethodAccess] toString(...)

View File

@@ -477,7 +477,8 @@
| exprs.kt:139:13:139:23 | ::class | exprs.kt:138:1:140:1 | getClass | ClassExpr |
| exprs.kt:142:1:144:1 | <obinit>(...) | exprs.kt:142:1:144:1 | C | MethodAccess |
| exprs.kt:142:9:142:18 | int | file://:0:0:0:0 | <none> | TypeAccess |
| exprs.kt:142:9:142:18 | n | exprs.kt:142:9:142:18 | getN | VarAccess |
| exprs.kt:142:9:142:18 | this | exprs.kt:142:9:142:18 | getN | ThisAccess |
| exprs.kt:142:9:142:18 | this.n | exprs.kt:142:9:142:18 | getN | VarAccess |
| exprs.kt:143:27:143:31 | C | exprs.kt:143:5:143:33 | foo | TypeAccess |
| exprs.kt:143:27:143:31 | new C(...) | exprs.kt:143:5:143:33 | foo | ClassInstanceExpr |
| exprs.kt:143:29:143:30 | 42 | exprs.kt:143:5:143:33 | foo | IntegerLiteral |
@@ -528,9 +529,11 @@
| exprs.kt:162:29:162:29 | Rectangle | exprs.kt:159:1:166:1 | foo | TypeAccess |
| exprs.kt:162:29:162:29 | r | exprs.kt:159:1:166:1 | foo | VarAccess |
| exprs.kt:163:9:163:30 | height | exprs.kt:159:1:166:1 | foo | LocalVariableDeclExpr |
| exprs.kt:163:25:163:30 | height | exprs.kt:159:1:166:1 | foo | VarAccess |
| exprs.kt:163:22:163:23 | r2 | exprs.kt:159:1:166:1 | foo | VarAccess |
| exprs.kt:163:25:163:30 | r2.height | exprs.kt:159:1:166:1 | foo | VarAccess |
| exprs.kt:164:9:164:10 | r2 | exprs.kt:159:1:166:1 | foo | VarAccess |
| exprs.kt:164:9:164:17 | ...=... | exprs.kt:159:1:166:1 | foo | AssignExpr |
| exprs.kt:164:9:164:17 | height | exprs.kt:159:1:166:1 | foo | VarAccess |
| exprs.kt:164:9:164:17 | r2.height | exprs.kt:159:1:166:1 | foo | VarAccess |
| exprs.kt:164:21:164:21 | 3 | exprs.kt:159:1:166:1 | foo | IntegerLiteral |
| exprs.kt:168:1:170:1 | <obinit>(...) | exprs.kt:168:6:170:1 | Direction | MethodAccess |
| exprs.kt:168:1:170:1 | Direction | exprs.kt:168:6:170:1 | Direction | TypeAccess |
@@ -541,7 +544,8 @@
| exprs.kt:172:1:176:1 | Unit | exprs.kt:172:6:176:1 | Color | TypeAccess |
| exprs.kt:172:1:176:1 | new Enum(...) | exprs.kt:172:6:176:1 | Color | ClassInstanceExpr |
| exprs.kt:172:18:172:29 | int | file://:0:0:0:0 | <none> | TypeAccess |
| exprs.kt:172:18:172:29 | rgb | exprs.kt:172:18:172:29 | getRgb | VarAccess |
| exprs.kt:172:18:172:29 | this | exprs.kt:172:18:172:29 | getRgb | ThisAccess |
| exprs.kt:172:18:172:29 | this.rgb | exprs.kt:172:18:172:29 | getRgb | VarAccess |
| exprs.kt:179:5:179:31 | south | exprs.kt:178:1:181:1 | enums | LocalVariableDeclExpr |
| exprs.kt:179:27:179:31 | SOUTH | exprs.kt:178:1:181:1 | enums | VarAccess |
| exprs.kt:180:5:180:27 | green | exprs.kt:178:1:181:1 | enums | LocalVariableDeclExpr |
@@ -549,8 +553,9 @@
| exprs.kt:185:1:193:1 | <obinit>(...) | exprs.kt:185:1:193:1 | Class1 | MethodAccess |
| exprs.kt:186:5:186:14 | ...=... | exprs.kt:185:1:193:1 | <obinit> | AssignExpr |
| exprs.kt:186:5:186:14 | a1 | exprs.kt:185:1:193:1 | <obinit> | VarAccess |
| exprs.kt:186:5:186:14 | a1 | exprs.kt:186:5:186:14 | getA1 | VarAccess |
| exprs.kt:186:5:186:14 | int | file://:0:0:0:0 | <none> | TypeAccess |
| exprs.kt:186:5:186:14 | this | exprs.kt:186:5:186:14 | getA1 | ThisAccess |
| exprs.kt:186:5:186:14 | this.a1 | exprs.kt:186:5:186:14 | getA1 | VarAccess |
| exprs.kt:186:14:186:14 | 1 | exprs.kt:185:1:193:1 | <obinit> | IntegerLiteral |
| exprs.kt:188:9:188:18 | a2 | exprs.kt:187:13:192:5 | getObject | LocalVariableDeclExpr |
| exprs.kt:188:18:188:18 | 2 | exprs.kt:187:13:192:5 | getObject | IntegerLiteral |
@@ -561,7 +566,8 @@
| exprs.kt:190:13:190:49 | ...=... | exprs.kt:189:16:191:9 | <obinit> | AssignExpr |
| exprs.kt:190:13:190:49 | String | file://:0:0:0:0 | <none> | TypeAccess |
| exprs.kt:190:13:190:49 | a3 | exprs.kt:189:16:191:9 | <obinit> | VarAccess |
| exprs.kt:190:13:190:49 | a3 | exprs.kt:190:13:190:49 | getA3 | VarAccess |
| exprs.kt:190:13:190:49 | this | exprs.kt:190:13:190:49 | getA3 | ThisAccess |
| exprs.kt:190:13:190:49 | this.a3 | exprs.kt:190:13:190:49 | getA3 | VarAccess |
| exprs.kt:190:31:190:32 | getA1(...) | exprs.kt:189:16:191:9 | <obinit> | MethodAccess |
| exprs.kt:190:31:190:32 | this | exprs.kt:189:16:191:9 | <obinit> | ThisAccess |
| exprs.kt:190:31:190:37 | ... + ... | exprs.kt:189:16:191:9 | <obinit> | AddExpr |

View File

@@ -20,6 +20,8 @@ parameterizedType
| generics.kt:13:1:18:1 | C1<String,Integer> | generics.kt:13:1:18:1 | C1 | 1 | Integer |
| generics.kt:13:1:18:1 | C1<String,String> | generics.kt:13:1:18:1 | C1 | 0 | String |
| generics.kt:13:1:18:1 | C1<String,String> | generics.kt:13:1:18:1 | C1 | 1 | String |
| generics.kt:13:1:18:1 | C1<T,W> | generics.kt:13:1:18:1 | C1 | 0 | T |
| generics.kt:13:1:18:1 | C1<T,W> | generics.kt:13:1:18:1 | C1 | 1 | W |
| generics.kt:13:1:18:1 | C1<U,U> | generics.kt:13:1:18:1 | C1 | 0 | U |
| generics.kt:13:1:18:1 | C1<U,U> | generics.kt:13:1:18:1 | C1 | 1 | U |
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:1:40:1 | BoundedTest | 0 | T |

View File

@@ -1,9 +1,11 @@
varAcc
| variables.kt:3:5:3:21 | prop |
| variables.kt:3:5:3:21 | prop |
| variables.kt:3:5:3:21 | this.prop |
| variables.kt:10:1:10:21 | topLevel |
| variables.kt:16:11:16:18 | o |
| variables.kt:16:11:16:18 | this.o |
instAcc
| variables.kt:3:5:3:21 | this |
| variables.kt:16:11:16:18 | this |
| variables.kt:21:9:21:9 | this |
| variables.kt:21:11:21:15 | this |
| variables.kt:24:9:24:9 | this |