Kotlin: Towards better equality checking

This commit is contained in:
Ian Lynagh
2021-11-19 17:03:11 +00:00
parent 5da15ca03b
commit 78d2ef52c1
4 changed files with 219 additions and 188 deletions

View File

@@ -1544,22 +1544,22 @@ open class KotlinFileExtractor(
binopDisp(id)
}
// != gets desugared into not and ==. Here we resugar it.
// TODO: This is wrong. Kotlin `a == b` is `a?.equals(b) ?: (b === null)`
c.origin == EXCLEQ && isFunction("kotlin", "Boolean", "not") && c.valueArgumentsCount == 0 && dr != null && dr is IrCall && isBuiltinCall(dr, "EQEQ") -> {
val id = tw.getFreshIdLabel<DbNeexpr>()
val type = useType(c.type)
tw.writeExprs_neexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx)
binop(id, dr, callable)
}
// compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrBuiltIns.kt
isBuiltinCall(c, "EQEQ") -> {
if(c.origin != EQEQ) {
logger.warnElement(Severity.ErrorSevere, "Unexpected origin for EQEQ: ${c.origin}", c)
}
val id = tw.getFreshIdLabel<DbEqexpr>()
c.origin == EXCLEQEQ && isFunction("kotlin", "Boolean", "not") && c.valueArgumentsCount == 0 && dr != null && dr is IrCall && isBuiltinCall(dr, "EQEQEQ") -> {
val id = tw.getFreshIdLabel<DbNeexpr>()
val type = useType(c.type)
tw.writeExprs_eqexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx)
binop(id, c, callable)
tw.writeExprs_neexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx)
binop(id, dr, callable)
}
// We need to handle all the builtin operators defines in BuiltInOperatorNames in
// compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrBuiltIns.kt
// as they can't be extracted as external dependencies.
isBuiltinCall(c, "less") -> {
if(c.origin != LT) {
logger.warnElement(Severity.ErrorSevere, "Unexpected origin for LT: ${c.origin}", c)
@@ -1596,6 +1596,25 @@ open class KotlinFileExtractor(
tw.writeExprs_geexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx)
binop(id, c, callable)
}
isBuiltinCall(c, "EQEQ") -> {
if(c.origin != EQEQ) {
logger.warnElement(Severity.ErrorSevere, "Unexpected origin for EQEQ: ${c.origin}", c)
}
// TODO: This is wrong. Kotlin `a == b` is `a?.equals(b) ?: (b === null)`
val id = tw.getFreshIdLabel<DbEqexpr>()
val type = useType(c.type)
tw.writeExprs_eqexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx)
binop(id, c, callable)
}
isBuiltinCall(c, "EQEQEQ") -> {
if(c.origin != EQEQEQ) {
logger.warnElement(Severity.ErrorSevere, "Unexpected origin for EQEQEQ: ${c.origin}", c)
}
val id = tw.getFreshIdLabel<DbEqexpr>()
val type = useType(c.type)
tw.writeExprs_eqexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx)
binop(id, c, callable)
}
else -> {
val id = tw.getFreshIdLabel<DbMethodaccess>()
val type = useType(c.type)

View File

@@ -8,7 +8,9 @@
| exprs.kt:23:15:23:20 | ... <= ... | exprs.kt:23:15:23:15 | x | exprs.kt:23:20:23:20 | y |
| exprs.kt:24:15:24:19 | ... > ... | exprs.kt:24:15:24:15 | x | exprs.kt:24:19:24:19 | y |
| exprs.kt:25:15:25:20 | ... >= ... | exprs.kt:25:15:25:15 | x | exprs.kt:25:20:25:20 | y |
| exprs.kt:50:16:50:26 | ... + ... | exprs.kt:50:16:50:19 | str1 | exprs.kt:50:23:50:26 | str2 |
| exprs.kt:53:12:53:23 | ... > ... | exprs.kt:53:12:53:19 | variable | exprs.kt:53:23:53:23 | 0 |
| exprs.kt:57:12:57:20 | ... + ... | exprs.kt:57:12:57:14 | 123 | exprs.kt:57:18:57:20 | 456 |
| exprs.kt:83:8:83:16 | ... != ... | exprs.kt:83:8:83:8 | r | exprs.kt:83:13:83:16 | null |
| exprs.kt:26:15:26:21 | ... == ... | exprs.kt:26:15:26:15 | x | exprs.kt:26:21:26:21 | y |
| exprs.kt:27:15:27:21 | ... != ... | exprs.kt:27:15:27:15 | x | exprs.kt:27:21:27:21 | y |
| exprs.kt:52:16:52:26 | ... + ... | exprs.kt:52:16:52:19 | str1 | exprs.kt:52:23:52:26 | str2 |
| exprs.kt:55:12:55:23 | ... > ... | exprs.kt:55:12:55:19 | variable | exprs.kt:55:23:55:23 | 0 |
| exprs.kt:59:12:59:20 | ... + ... | exprs.kt:59:12:59:14 | 123 | exprs.kt:59:18:59:20 | 456 |
| exprs.kt:85:8:85:16 | ... != ... | exprs.kt:85:8:85:8 | r | exprs.kt:85:13:85:16 | null |

View File

@@ -1,176 +1,184 @@
| exprs.kt:5:5:5:14 | i1 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:5:14:5:14 | 1 | exprs.kt:4:1:58:1 | topLevelMethod | IntegerLiteral |
| exprs.kt:6:5:6:18 | i2 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:6:14:6:14 | x | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:6:14:6:18 | ... + ... | exprs.kt:4:1:58:1 | topLevelMethod | AddExpr |
| exprs.kt:6:18:6:18 | y | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:7:5:7:18 | i3 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:7:14:7:14 | x | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:7:14:7:18 | ... - ... | exprs.kt:4:1:58:1 | topLevelMethod | SubExpr |
| exprs.kt:7:18:7:18 | y | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:8:5:8:18 | i4 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:8:14:8:14 | x | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:8:14:8:18 | ... / ... | exprs.kt:4:1:58:1 | topLevelMethod | DivExpr |
| exprs.kt:8:18:8:18 | y | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:9:5:9:18 | i5 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:9:14:9:14 | x | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:9:14:9:18 | ... % ... | exprs.kt:4:1:58:1 | topLevelMethod | RemExpr |
| exprs.kt:9:18:9:18 | y | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:20:5:20:20 | i13 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:20:15:20:15 | x | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:20:15:20:20 | ... == ... | exprs.kt:4:1:58:1 | topLevelMethod | EQExpr |
| exprs.kt:20:20:20:20 | y | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:21:5:21:20 | i14 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:21:15:21:15 | x | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:21:15:21:20 | ... != ... | exprs.kt:4:1:58:1 | topLevelMethod | NEExpr |
| exprs.kt:21:20:21:20 | y | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:22:5:22:19 | i15 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:22:15:22:15 | x | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:22:15:22:19 | ... < ... | exprs.kt:4:1:58:1 | topLevelMethod | LTExpr |
| exprs.kt:22:19:22:19 | y | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:23:5:23:20 | i16 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:23:15:23:15 | x | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:23:15:23:20 | ... <= ... | exprs.kt:4:1:58:1 | topLevelMethod | LEExpr |
| exprs.kt:23:20:23:20 | y | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:24:5:24:19 | i17 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:24:15:24:15 | x | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:24:15:24:19 | ... > ... | exprs.kt:4:1:58:1 | topLevelMethod | GTExpr |
| exprs.kt:24:19:24:19 | y | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:25:5:25:20 | i18 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:25:15:25:15 | x | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:25:15:25:20 | ... >= ... | exprs.kt:4:1:58:1 | topLevelMethod | GEExpr |
| exprs.kt:25:20:25:20 | y | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:31:5:31:17 | b1 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:31:14:31:17 | true | exprs.kt:4:1:58:1 | topLevelMethod | BooleanLiteral |
| exprs.kt:32:5:32:18 | b2 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:32:14:32:18 | false | exprs.kt:4:1:58:1 | topLevelMethod | BooleanLiteral |
| exprs.kt:39:5:39:15 | c | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:39:13:39:15 | x | exprs.kt:4:1:58:1 | topLevelMethod | CharacterLiteral |
| exprs.kt:40:5:40:26 | str | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:40:16:40:25 | string lit | exprs.kt:4:1:58:1 | topLevelMethod | StringLiteral |
| exprs.kt:41:5:41:38 | strWithQuote | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:41:25:41:37 | string " lit | exprs.kt:4:1:58:1 | topLevelMethod | StringLiteral |
| exprs.kt:42:5:42:22 | b6 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:42:14:42:15 | i1 | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:42:14:42:22 | ...instanceof... | exprs.kt:4:1:58:1 | topLevelMethod | InstanceOfExpr |
| exprs.kt:42:14:42:22 | int | exprs.kt:4:1:58:1 | topLevelMethod | TypeAccess |
| exprs.kt:43:5:43:23 | b7 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:43:14:43:15 | i1 | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:43:14:43:23 | ... !is ... | exprs.kt:4:1:58:1 | topLevelMethod | NotInstanceOfExpr |
| exprs.kt:43:14:43:23 | int | exprs.kt:4:1:58:1 | topLevelMethod | TypeAccess |
| exprs.kt:44:5:44:26 | b8 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:44:14:44:15 | b7 | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:44:14:44:26 | (...)... | exprs.kt:4:1:58:1 | topLevelMethod | CastExpr |
| exprs.kt:44:14:44:26 | boolean | exprs.kt:4:1:58:1 | topLevelMethod | TypeAccess |
| exprs.kt:45:5:45:35 | str1 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:45:25:45:34 | string lit | exprs.kt:4:1:58:1 | topLevelMethod | StringLiteral |
| exprs.kt:46:5:46:36 | str2 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:46:26:46:35 | string lit | exprs.kt:4:1:58:1 | topLevelMethod | StringLiteral |
| exprs.kt:47:5:47:28 | str3 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:47:25:47:28 | null | exprs.kt:4:1:58:1 | topLevelMethod | NullLiteral |
| exprs.kt:48:5:48:48 | str4 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:48:24:48:48 | "..." | exprs.kt:4:1:58:1 | topLevelMethod | StringTemplateExpr |
| exprs.kt:48:25:48:28 | foo | exprs.kt:4:1:58:1 | topLevelMethod | StringLiteral |
| exprs.kt:48:30:48:33 | str1 | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:48:34:48:38 | bar | exprs.kt:4:1:58:1 | topLevelMethod | StringLiteral |
| exprs.kt:48:40:48:43 | str2 | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:48:44:48:47 | baz | exprs.kt:4:1:58:1 | topLevelMethod | StringLiteral |
| exprs.kt:50:5:50:26 | str6 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:50:16:50:19 | str1 | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:50:16:50:26 | ... + ... | exprs.kt:4:1:58:1 | topLevelMethod | AddExpr |
| exprs.kt:50:23:50:26 | str2 | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:52:5:52:21 | variable | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:52:20:52:21 | 10 | exprs.kt:4:1:58:1 | topLevelMethod | IntegerLiteral |
| exprs.kt:53:12:53:19 | variable | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:53:12:53:23 | ... > ... | exprs.kt:4:1:58:1 | topLevelMethod | GTExpr |
| exprs.kt:53:23:53:23 | 0 | exprs.kt:4:1:58:1 | topLevelMethod | IntegerLiteral |
| exprs.kt:54:9:54:16 | ...=... | exprs.kt:4:1:58:1 | topLevelMethod | AssignExpr |
| exprs.kt:54:9:54:16 | variable | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:54:9:54:18 | (...)... | exprs.kt:4:1:58:1 | topLevelMethod | CastExpr |
| exprs.kt:54:9:54:18 | <Stmt> | exprs.kt:4:1:58:1 | topLevelMethod | StmtExpr |
| exprs.kt:54:9:54:18 | dec(...) | exprs.kt:4:1:58:1 | topLevelMethod | MethodAccess |
| exprs.kt:54:9:54:18 | tmp0 | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:54:9:54:18 | tmp0 | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| exprs.kt:54:9:54:18 | void | exprs.kt:4:1:58:1 | topLevelMethod | TypeAccess |
| exprs.kt:57:12:57:14 | 123 | exprs.kt:4:1:58:1 | topLevelMethod | IntegerLiteral |
| exprs.kt:57:12:57:20 | ... + ... | exprs.kt:4:1:58:1 | topLevelMethod | AddExpr |
| exprs.kt:57:18:57:20 | 456 | exprs.kt:4:1:58:1 | topLevelMethod | IntegerLiteral |
| exprs.kt:61:5:61:23 | d | exprs.kt:60:1:62:1 | getClass | LocalVariableDeclExpr |
| exprs.kt:61:13:61:16 | true | exprs.kt:60:1:62:1 | getClass | BooleanLiteral |
| exprs.kt:61:13:61:23 | ::class | exprs.kt:60:1:62:1 | getClass | ClassExpr |
| exprs.kt:64:1:66:1 | <obinit>(...) | exprs.kt:64:1:66:1 | C | MethodAccess |
| exprs.kt:64:9:64:18 | ...=... | exprs.kt:64:1:66:1 | <obinit> | AssignExpr |
| exprs.kt:64:9:64:18 | n | exprs.kt:64:1:66:1 | <obinit> | VarAccess |
| exprs.kt:64:9:64:18 | n | exprs.kt:64:1:66:1 | <obinit> | VarAccess |
| exprs.kt:64:9:64:18 | n | exprs.kt:64:9:64:18 | <get-n> | VarAccess |
| exprs.kt:65:27:65:31 | new C(...) | exprs.kt:65:5:65:33 | foo | ClassInstanceExpr |
| exprs.kt:65:29:65:30 | 42 | exprs.kt:65:5:65:33 | foo | IntegerLiteral |
| exprs.kt:68:1:68:18 | <obinit>(...) | exprs.kt:68:6:68:18 | Root | MethodAccess |
| exprs.kt:69:1:69:26 | <obinit>(...) | exprs.kt:69:1:69:26 | Subclass1 | MethodAccess |
| exprs.kt:70:1:70:26 | <obinit>(...) | exprs.kt:70:1:70:26 | Subclass2 | MethodAccess |
| exprs.kt:73:5:75:5 | when ... | exprs.kt:72:1:79:1 | typeTests | WhenExpr |
| exprs.kt:73:8:73:8 | x | exprs.kt:72:1:79:1 | typeTests | VarAccess |
| exprs.kt:73:8:73:21 | ...instanceof... | exprs.kt:72:1:79:1 | typeTests | InstanceOfExpr |
| exprs.kt:73:8:73:21 | Subclass1 | exprs.kt:72:1:79:1 | typeTests | TypeAccess |
| exprs.kt:74:9:74:29 | x1 | exprs.kt:72:1:79:1 | typeTests | LocalVariableDeclExpr |
| exprs.kt:74:29:74:29 | (...)... | exprs.kt:72:1:79:1 | typeTests | CastExpr |
| exprs.kt:74:29:74:29 | Subclass1 | exprs.kt:72:1:79:1 | typeTests | TypeAccess |
| exprs.kt:74:29:74:29 | x | exprs.kt:72:1:79:1 | typeTests | VarAccess |
| exprs.kt:76:5:76:60 | y1 | exprs.kt:72:1:79:1 | typeTests | LocalVariableDeclExpr |
| exprs.kt:76:25:76:60 | true | exprs.kt:72:1:79:1 | typeTests | BooleanLiteral |
| exprs.kt:76:25:76:60 | when ... | exprs.kt:72:1:79:1 | typeTests | WhenExpr |
| exprs.kt:76:29:76:29 | x | exprs.kt:72:1:79:1 | typeTests | VarAccess |
| exprs.kt:76:29:76:42 | ...instanceof... | exprs.kt:72:1:79:1 | typeTests | InstanceOfExpr |
| exprs.kt:76:29:76:42 | Subclass1 | exprs.kt:72:1:79:1 | typeTests | TypeAccess |
| exprs.kt:76:45:76:49 | (...)... | exprs.kt:72:1:79:1 | typeTests | CastExpr |
| exprs.kt:76:45:76:49 | <Stmt> | exprs.kt:72:1:79:1 | typeTests | StmtExpr |
| exprs.kt:76:45:76:49 | Subclass1 | exprs.kt:72:1:79:1 | typeTests | TypeAccess |
| exprs.kt:76:47:76:47 | x | exprs.kt:72:1:79:1 | typeTests | VarAccess |
| exprs.kt:76:58:76:58 | y | exprs.kt:72:1:79:1 | typeTests | VarAccess |
| exprs.kt:77:5:77:13 | q | exprs.kt:72:1:79:1 | typeTests | LocalVariableDeclExpr |
| exprs.kt:77:13:77:13 | 1 | exprs.kt:72:1:79:1 | typeTests | IntegerLiteral |
| exprs.kt:78:5:78:48 | true | exprs.kt:72:1:79:1 | typeTests | BooleanLiteral |
| exprs.kt:78:5:78:48 | when ... | exprs.kt:72:1:79:1 | typeTests | WhenExpr |
| exprs.kt:78:9:78:9 | x | exprs.kt:72:1:79:1 | typeTests | VarAccess |
| exprs.kt:78:9:78:22 | ...instanceof... | exprs.kt:72:1:79:1 | typeTests | InstanceOfExpr |
| exprs.kt:78:9:78:22 | Subclass1 | exprs.kt:72:1:79:1 | typeTests | TypeAccess |
| exprs.kt:78:27:78:27 | ...=... | exprs.kt:72:1:79:1 | typeTests | AssignExpr |
| exprs.kt:78:31:78:31 | 2 | exprs.kt:72:1:79:1 | typeTests | IntegerLiteral |
| exprs.kt:78:42:78:42 | ...=... | exprs.kt:72:1:79:1 | typeTests | AssignExpr |
| exprs.kt:78:46:78:46 | 3 | exprs.kt:72:1:79:1 | typeTests | IntegerLiteral |
| exprs.kt:82:5:82:25 | r | exprs.kt:81:1:88:1 | foo | LocalVariableDeclExpr |
| exprs.kt:82:13:82:13 | p | exprs.kt:81:1:88:1 | foo | VarAccess |
| exprs.kt:82:15:82:25 | getBounds(...) | exprs.kt:81:1:88:1 | foo | MethodAccess |
| exprs.kt:83:5:87:5 | when ... | exprs.kt:81:1:88:1 | foo | WhenExpr |
| exprs.kt:83:8:83:8 | r | exprs.kt:81:1:88:1 | foo | VarAccess |
| exprs.kt:83:8:83:16 | ... != ... | exprs.kt:81:1:88:1 | foo | NEExpr |
| exprs.kt:83:13:83:16 | null | exprs.kt:81:1:88:1 | foo | NullLiteral |
| exprs.kt:84:9:84:29 | r2 | exprs.kt:81:1:88:1 | foo | LocalVariableDeclExpr |
| exprs.kt:84:29:84:29 | (...)... | exprs.kt:81:1:88:1 | foo | CastExpr |
| exprs.kt:84:29:84:29 | Rectangle | exprs.kt:81:1:88:1 | foo | TypeAccess |
| exprs.kt:84:29:84:29 | r | exprs.kt:81:1:88:1 | foo | VarAccess |
| exprs.kt:85:9:85:30 | height | exprs.kt:81:1:88:1 | foo | LocalVariableDeclExpr |
| exprs.kt:85:25:85:30 | height | exprs.kt:81:1:88:1 | foo | VarAccess |
| exprs.kt:86:9:86:17 | ...=... | exprs.kt:81:1:88:1 | foo | AssignExpr |
| exprs.kt:86:21:86:21 | 3 | exprs.kt:81:1:88:1 | foo | IntegerLiteral |
| exprs.kt:90:1:92:1 | <obinit>(...) | exprs.kt:90:6:92:1 | Direction | MethodAccess |
| exprs.kt:90:1:92:1 | new Enum(...) | exprs.kt:90:6:92:1 | Direction | ClassInstanceExpr |
| exprs.kt:94:1:98:1 | <obinit>(...) | exprs.kt:94:6:98:1 | Color | MethodAccess |
| exprs.kt:94:1:98:1 | new Enum(...) | exprs.kt:94:6:98:1 | Color | ClassInstanceExpr |
| exprs.kt:94:18:94:29 | ...=... | exprs.kt:94:1:98:1 | <obinit> | AssignExpr |
| exprs.kt:94:18:94:29 | rgb | exprs.kt:94:1:98:1 | <obinit> | VarAccess |
| exprs.kt:94:18:94:29 | rgb | exprs.kt:94:1:98:1 | <obinit> | VarAccess |
| exprs.kt:94:18:94:29 | rgb | exprs.kt:94:18:94:29 | <get-rgb> | VarAccess |
| exprs.kt:101:5:101:31 | south | exprs.kt:100:1:103:1 | enums | LocalVariableDeclExpr |
| exprs.kt:101:27:101:31 | SOUTH | exprs.kt:100:1:103:1 | enums | VarAccess |
| exprs.kt:102:5:102:27 | green | exprs.kt:100:1:103:1 | enums | LocalVariableDeclExpr |
| exprs.kt:102:23:102:27 | GREEN | exprs.kt:100:1:103:1 | enums | VarAccess |
| file://:0:0:0:0 | Color | exprs.kt:94:6:98:1 | Color | TypeAccess |
| file://:0:0:0:0 | Direction | exprs.kt:90:6:92:1 | Direction | TypeAccess |
| file://:0:0:0:0 | height | exprs.kt:81:1:88:1 | foo | VarAccess |
| file://:0:0:0:0 | q | exprs.kt:72:1:79:1 | typeTests | VarAccess |
| file://:0:0:0:0 | q | exprs.kt:72:1:79:1 | typeTests | VarAccess |
| file://:0:0:0:0 | tmp0 | exprs.kt:4:1:58:1 | topLevelMethod | LocalVariableDeclExpr |
| file://:0:0:0:0 | variable | exprs.kt:4:1:58:1 | topLevelMethod | VarAccess |
| file://:0:0:0:0 | void | exprs.kt:90:6:92:1 | Direction | TypeAccess |
| file://:0:0:0:0 | void | exprs.kt:94:6:98:1 | Color | TypeAccess |
| exprs.kt:5:5:5:14 | i1 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:5:14:5:14 | 1 | exprs.kt:4:1:60:1 | topLevelMethod | IntegerLiteral |
| exprs.kt:6:5:6:18 | i2 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:6:14:6:14 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:6:14:6:18 | ... + ... | exprs.kt:4:1:60:1 | topLevelMethod | AddExpr |
| exprs.kt:6:18:6:18 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:7:5:7:18 | i3 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:7:14:7:14 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:7:14:7:18 | ... - ... | exprs.kt:4:1:60:1 | topLevelMethod | SubExpr |
| exprs.kt:7:18:7:18 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:8:5:8:18 | i4 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:8:14:8:14 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:8:14:8:18 | ... / ... | exprs.kt:4:1:60:1 | topLevelMethod | DivExpr |
| exprs.kt:8:18:8:18 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:9:5:9:18 | i5 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:9:14:9:14 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:9:14:9:18 | ... % ... | exprs.kt:4:1:60:1 | topLevelMethod | RemExpr |
| exprs.kt:9:18:9:18 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:20:5:20:20 | i13 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:20:15:20:15 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:20:15:20:20 | ... == ... | exprs.kt:4:1:60:1 | topLevelMethod | EQExpr |
| exprs.kt:20:20:20:20 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:21:5:21:20 | i14 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:21:15:21:15 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:21:15:21:20 | ... != ... | exprs.kt:4:1:60:1 | topLevelMethod | NEExpr |
| exprs.kt:21:20:21:20 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:22:5:22:19 | i15 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:22:15:22:15 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:22:15:22:19 | ... < ... | exprs.kt:4:1:60:1 | topLevelMethod | LTExpr |
| exprs.kt:22:19:22:19 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:23:5:23:20 | i16 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:23:15:23:15 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:23:15:23:20 | ... <= ... | exprs.kt:4:1:60:1 | topLevelMethod | LEExpr |
| exprs.kt:23:20:23:20 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:24:5:24:19 | i17 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:24:15:24:15 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:24:15:24:19 | ... > ... | exprs.kt:4:1:60:1 | topLevelMethod | GTExpr |
| exprs.kt:24:19:24:19 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:25:5:25:20 | i18 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:25:15:25:15 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:25:15:25:20 | ... >= ... | exprs.kt:4:1:60:1 | topLevelMethod | GEExpr |
| exprs.kt:25:20:25:20 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:26:5:26:21 | i19 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:26:15:26:15 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:26:15:26:21 | ... == ... | exprs.kt:4:1:60:1 | topLevelMethod | EQExpr |
| exprs.kt:26:21:26:21 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:27:5:27:21 | i20 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:27:15:27:15 | x | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:27:15:27:21 | ... != ... | exprs.kt:4:1:60:1 | topLevelMethod | NEExpr |
| exprs.kt:27:21:27:21 | y | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:33:5:33:17 | b1 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:33:14:33:17 | true | exprs.kt:4:1:60:1 | topLevelMethod | BooleanLiteral |
| exprs.kt:34:5:34:18 | b2 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:34:14:34:18 | false | exprs.kt:4:1:60:1 | topLevelMethod | BooleanLiteral |
| exprs.kt:41:5:41:15 | c | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:41:13:41:15 | x | exprs.kt:4:1:60:1 | topLevelMethod | CharacterLiteral |
| exprs.kt:42:5:42:26 | str | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:42:16:42:25 | string lit | exprs.kt:4:1:60:1 | topLevelMethod | StringLiteral |
| exprs.kt:43:5:43:38 | strWithQuote | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:43:25:43:37 | string " lit | exprs.kt:4:1:60:1 | topLevelMethod | StringLiteral |
| exprs.kt:44:5:44:22 | b6 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:44:14:44:15 | i1 | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:44:14:44:22 | ...instanceof... | exprs.kt:4:1:60:1 | topLevelMethod | InstanceOfExpr |
| exprs.kt:44:14:44:22 | int | exprs.kt:4:1:60:1 | topLevelMethod | TypeAccess |
| exprs.kt:45:5:45:23 | b7 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:45:14:45:15 | i1 | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:45:14:45:23 | ... !is ... | exprs.kt:4:1:60:1 | topLevelMethod | NotInstanceOfExpr |
| exprs.kt:45:14:45:23 | int | exprs.kt:4:1:60:1 | topLevelMethod | TypeAccess |
| exprs.kt:46:5:46:26 | b8 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:46:14:46:15 | b7 | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:46:14:46:26 | (...)... | exprs.kt:4:1:60:1 | topLevelMethod | CastExpr |
| exprs.kt:46:14:46:26 | boolean | exprs.kt:4:1:60:1 | topLevelMethod | TypeAccess |
| exprs.kt:47:5:47:35 | str1 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:47:25:47:34 | string lit | exprs.kt:4:1:60:1 | topLevelMethod | StringLiteral |
| exprs.kt:48:5:48:36 | str2 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:48:26:48:35 | string lit | exprs.kt:4:1:60:1 | topLevelMethod | StringLiteral |
| exprs.kt:49:5:49:28 | str3 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:49:25:49:28 | null | exprs.kt:4:1:60:1 | topLevelMethod | NullLiteral |
| exprs.kt:50:5:50:48 | str4 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:50:24:50:48 | "..." | exprs.kt:4:1:60:1 | topLevelMethod | StringTemplateExpr |
| exprs.kt:50:25:50:28 | foo | exprs.kt:4:1:60:1 | topLevelMethod | StringLiteral |
| exprs.kt:50:30:50:33 | str1 | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:50:34:50:38 | bar | exprs.kt:4:1:60:1 | topLevelMethod | StringLiteral |
| exprs.kt:50:40:50:43 | str2 | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:50:44:50:47 | baz | exprs.kt:4:1:60:1 | topLevelMethod | StringLiteral |
| exprs.kt:52:5:52:26 | str6 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:52:16:52:19 | str1 | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:52:16:52:26 | ... + ... | exprs.kt:4:1:60:1 | topLevelMethod | AddExpr |
| exprs.kt:52:23:52:26 | str2 | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:54:5:54:21 | variable | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:54:20:54:21 | 10 | exprs.kt:4:1:60:1 | topLevelMethod | IntegerLiteral |
| exprs.kt:55:12:55:19 | variable | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:55:12:55:23 | ... > ... | exprs.kt:4:1:60:1 | topLevelMethod | GTExpr |
| exprs.kt:55:23:55:23 | 0 | exprs.kt:4:1:60:1 | topLevelMethod | IntegerLiteral |
| exprs.kt:56:9:56:16 | ...=... | exprs.kt:4:1:60:1 | topLevelMethod | AssignExpr |
| exprs.kt:56:9:56:16 | variable | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:56:9:56:18 | (...)... | exprs.kt:4:1:60:1 | topLevelMethod | CastExpr |
| exprs.kt:56:9:56:18 | <Stmt> | exprs.kt:4:1:60:1 | topLevelMethod | StmtExpr |
| exprs.kt:56:9:56:18 | dec(...) | exprs.kt:4:1:60:1 | topLevelMethod | MethodAccess |
| exprs.kt:56:9:56:18 | tmp0 | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:56:9:56:18 | tmp0 | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| exprs.kt:56:9:56:18 | void | exprs.kt:4:1:60:1 | topLevelMethod | TypeAccess |
| exprs.kt:59:12:59:14 | 123 | exprs.kt:4:1:60:1 | topLevelMethod | IntegerLiteral |
| exprs.kt:59:12:59:20 | ... + ... | exprs.kt:4:1:60:1 | topLevelMethod | AddExpr |
| exprs.kt:59:18:59:20 | 456 | exprs.kt:4:1:60:1 | topLevelMethod | IntegerLiteral |
| exprs.kt:63:5:63:23 | d | exprs.kt:62:1:64:1 | getClass | LocalVariableDeclExpr |
| exprs.kt:63:13:63:16 | true | exprs.kt:62:1:64:1 | getClass | BooleanLiteral |
| exprs.kt:63:13:63:23 | ::class | exprs.kt:62:1:64:1 | getClass | ClassExpr |
| exprs.kt:66:1:68:1 | <obinit>(...) | exprs.kt:66:1:68:1 | C | MethodAccess |
| exprs.kt:66:9:66:18 | ...=... | exprs.kt:66:1:68:1 | <obinit> | AssignExpr |
| exprs.kt:66:9:66:18 | n | exprs.kt:66:1:68:1 | <obinit> | VarAccess |
| exprs.kt:66:9:66:18 | n | exprs.kt:66:1:68:1 | <obinit> | VarAccess |
| exprs.kt:66:9:66:18 | n | exprs.kt:66:9:66:18 | <get-n> | VarAccess |
| exprs.kt:67:27:67:31 | new C(...) | exprs.kt:67:5:67:33 | foo | ClassInstanceExpr |
| exprs.kt:67:29:67:30 | 42 | exprs.kt:67:5:67:33 | foo | IntegerLiteral |
| exprs.kt:70:1:70:18 | <obinit>(...) | exprs.kt:70:6:70:18 | Root | MethodAccess |
| exprs.kt:71:1:71:26 | <obinit>(...) | exprs.kt:71:1:71:26 | Subclass1 | MethodAccess |
| exprs.kt:72:1:72:26 | <obinit>(...) | exprs.kt:72:1:72:26 | Subclass2 | MethodAccess |
| exprs.kt:75:5:77:5 | when ... | exprs.kt:74:1:81:1 | typeTests | WhenExpr |
| exprs.kt:75:8:75:8 | x | exprs.kt:74:1:81:1 | typeTests | VarAccess |
| exprs.kt:75:8:75:21 | ...instanceof... | exprs.kt:74:1:81:1 | typeTests | InstanceOfExpr |
| exprs.kt:75:8:75:21 | Subclass1 | exprs.kt:74:1:81:1 | typeTests | TypeAccess |
| exprs.kt:76:9:76:29 | x1 | exprs.kt:74:1:81:1 | typeTests | LocalVariableDeclExpr |
| exprs.kt:76:29:76:29 | (...)... | exprs.kt:74:1:81:1 | typeTests | CastExpr |
| exprs.kt:76:29:76:29 | Subclass1 | exprs.kt:74:1:81:1 | typeTests | TypeAccess |
| exprs.kt:76:29:76:29 | x | exprs.kt:74:1:81:1 | typeTests | VarAccess |
| exprs.kt:78:5:78:60 | y1 | exprs.kt:74:1:81:1 | typeTests | LocalVariableDeclExpr |
| exprs.kt:78:25:78:60 | true | exprs.kt:74:1:81:1 | typeTests | BooleanLiteral |
| exprs.kt:78:25:78:60 | when ... | exprs.kt:74:1:81:1 | typeTests | WhenExpr |
| exprs.kt:78:29:78:29 | x | exprs.kt:74:1:81:1 | typeTests | VarAccess |
| exprs.kt:78:29:78:42 | ...instanceof... | exprs.kt:74:1:81:1 | typeTests | InstanceOfExpr |
| exprs.kt:78:29:78:42 | Subclass1 | exprs.kt:74:1:81:1 | typeTests | TypeAccess |
| exprs.kt:78:45:78:49 | (...)... | exprs.kt:74:1:81:1 | typeTests | CastExpr |
| exprs.kt:78:45:78:49 | <Stmt> | exprs.kt:74:1:81:1 | typeTests | StmtExpr |
| exprs.kt:78:45:78:49 | Subclass1 | exprs.kt:74:1:81:1 | typeTests | TypeAccess |
| exprs.kt:78:47:78:47 | x | exprs.kt:74:1:81:1 | typeTests | VarAccess |
| exprs.kt:78:58:78:58 | y | exprs.kt:74:1:81:1 | typeTests | VarAccess |
| exprs.kt:79:5:79:13 | q | exprs.kt:74:1:81:1 | typeTests | LocalVariableDeclExpr |
| exprs.kt:79:13:79:13 | 1 | exprs.kt:74:1:81:1 | typeTests | IntegerLiteral |
| exprs.kt:80:5:80:48 | true | exprs.kt:74:1:81:1 | typeTests | BooleanLiteral |
| exprs.kt:80:5:80:48 | when ... | exprs.kt:74:1:81:1 | typeTests | WhenExpr |
| exprs.kt:80:9:80:9 | x | exprs.kt:74:1:81:1 | typeTests | VarAccess |
| exprs.kt:80:9:80:22 | ...instanceof... | exprs.kt:74:1:81:1 | typeTests | InstanceOfExpr |
| exprs.kt:80:9:80:22 | Subclass1 | exprs.kt:74:1:81:1 | typeTests | TypeAccess |
| exprs.kt:80:27:80:27 | ...=... | exprs.kt:74:1:81:1 | typeTests | AssignExpr |
| exprs.kt:80:31:80:31 | 2 | exprs.kt:74:1:81:1 | typeTests | IntegerLiteral |
| exprs.kt:80:42:80:42 | ...=... | exprs.kt:74:1:81:1 | typeTests | AssignExpr |
| exprs.kt:80:46:80:46 | 3 | exprs.kt:74:1:81:1 | typeTests | IntegerLiteral |
| exprs.kt:84:5:84:25 | r | exprs.kt:83:1:90:1 | foo | LocalVariableDeclExpr |
| exprs.kt:84:13:84:13 | p | exprs.kt:83:1:90:1 | foo | VarAccess |
| exprs.kt:84:15:84:25 | getBounds(...) | exprs.kt:83:1:90:1 | foo | MethodAccess |
| exprs.kt:85:5:89:5 | when ... | exprs.kt:83:1:90:1 | foo | WhenExpr |
| exprs.kt:85:8:85:8 | r | exprs.kt:83:1:90:1 | foo | VarAccess |
| exprs.kt:85:8:85:16 | ... != ... | exprs.kt:83:1:90:1 | foo | NEExpr |
| exprs.kt:85:13:85:16 | null | exprs.kt:83:1:90:1 | foo | NullLiteral |
| exprs.kt:86:9:86:29 | r2 | exprs.kt:83:1:90:1 | foo | LocalVariableDeclExpr |
| exprs.kt:86:29:86:29 | (...)... | exprs.kt:83:1:90:1 | foo | CastExpr |
| exprs.kt:86:29:86:29 | Rectangle | exprs.kt:83:1:90:1 | foo | TypeAccess |
| exprs.kt:86:29:86:29 | r | exprs.kt:83:1:90:1 | foo | VarAccess |
| exprs.kt:87:9:87:30 | height | exprs.kt:83:1:90:1 | foo | LocalVariableDeclExpr |
| exprs.kt:87:25:87:30 | height | exprs.kt:83:1:90:1 | foo | VarAccess |
| exprs.kt:88:9:88:17 | ...=... | exprs.kt:83:1:90:1 | foo | AssignExpr |
| exprs.kt:88:21:88:21 | 3 | exprs.kt:83:1:90:1 | foo | IntegerLiteral |
| exprs.kt:92:1:94:1 | <obinit>(...) | exprs.kt:92:6:94:1 | Direction | MethodAccess |
| exprs.kt:92:1:94:1 | new Enum(...) | exprs.kt:92:6:94:1 | Direction | ClassInstanceExpr |
| exprs.kt:96:1:100:1 | <obinit>(...) | exprs.kt:96:6:100:1 | Color | MethodAccess |
| exprs.kt:96:1:100:1 | new Enum(...) | exprs.kt:96:6:100:1 | Color | ClassInstanceExpr |
| exprs.kt:96:18:96:29 | ...=... | exprs.kt:96:1:100:1 | <obinit> | AssignExpr |
| exprs.kt:96:18:96:29 | rgb | exprs.kt:96:1:100:1 | <obinit> | VarAccess |
| exprs.kt:96:18:96:29 | rgb | exprs.kt:96:1:100:1 | <obinit> | VarAccess |
| exprs.kt:96:18:96:29 | rgb | exprs.kt:96:18:96:29 | <get-rgb> | VarAccess |
| exprs.kt:103:5:103:31 | south | exprs.kt:102:1:105:1 | enums | LocalVariableDeclExpr |
| exprs.kt:103:27:103:31 | SOUTH | exprs.kt:102:1:105:1 | enums | VarAccess |
| exprs.kt:104:5:104:27 | green | exprs.kt:102:1:105:1 | enums | LocalVariableDeclExpr |
| exprs.kt:104:23:104:27 | GREEN | exprs.kt:102:1:105:1 | enums | VarAccess |
| file://:0:0:0:0 | Color | exprs.kt:96:6:100:1 | Color | TypeAccess |
| file://:0:0:0:0 | Direction | exprs.kt:92:6:94:1 | Direction | TypeAccess |
| file://:0:0:0:0 | height | exprs.kt:83:1:90:1 | foo | VarAccess |
| file://:0:0:0:0 | q | exprs.kt:74:1:81:1 | typeTests | VarAccess |
| file://:0:0:0:0 | q | exprs.kt:74:1:81:1 | typeTests | VarAccess |
| file://:0:0:0:0 | tmp0 | exprs.kt:4:1:60:1 | topLevelMethod | LocalVariableDeclExpr |
| file://:0:0:0:0 | variable | exprs.kt:4:1:60:1 | topLevelMethod | VarAccess |
| file://:0:0:0:0 | void | exprs.kt:92:6:94:1 | Direction | TypeAccess |
| file://:0:0:0:0 | void | exprs.kt:96:6:100:1 | Color | TypeAccess |

View File

@@ -23,6 +23,8 @@ TODO
val i16 = x <= y
val i17 = x > y
val i18 = x >= y
val i19 = x === y
val i20 = x !== y
/*
TODO
val i20 = x in x .. y