diff --git a/unified/ql/lib/codeql/unified/internal/FacadeAst.qll b/unified/ql/lib/codeql/unified/internal/FacadeAst.qll index 54efc88a473d..2952765114ec 100644 --- a/unified/ql/lib/codeql/unified/internal/FacadeAst.qll +++ b/unified/ql/lib/codeql/unified/internal/FacadeAst.qll @@ -152,6 +152,8 @@ module Unified { } class MemberAccessExpr extends G::MemberAccessExpr { + override string toString() { result = "... ." + this.getMemberName() } + /** Gets the member name of this access. */ string getMemberName() { result = this.getMemberNameNode().getValue() } } @@ -183,12 +185,34 @@ module Unified { /** A binary expression. */ class BinaryExpr extends G::BinaryExpr { + override string toString() { result = "... " + this.getOperator().getValue() + " ..." } + /** Gets an operand of this binary expression. */ Expr getAnOperand() { result = [this.getLeft(), this.getRight()] } } + /** A unary expression. */ + class UnaryExpr extends G::UnaryExpr { + override string toString() { + result = this.getOperator().(PrefixOperator).getValue() + " ..." or + result = "... " + this.getOperator().(PostfixOperator).getValue() + } + } + /** A function call */ class CallExpr extends G::CallExpr { + override string toString() { + exists(Expr callee | callee = this.getCallee() | + result = callee.(Token).getValue() + "(...)" + or + result = "... ." + callee.(MemberAccessExpr).getMemberName() + "(...)" + or + not callee instanceof Token and + not callee instanceof MemberAccessExpr and + result = "...(...)" + ) + } + /** Gets the named argument with the given `name`. */ Expr getNamedArgument(string name) { exists(Argument arg | diff --git a/unified/ql/test/library-tests/controlflow/basicblock-slices.expected b/unified/ql/test/library-tests/controlflow/basicblock-slices.expected index f34783a37dc0..97a1d1a279f0 100644 --- a/unified/ql/test/library-tests/controlflow/basicblock-slices.expected +++ b/unified/ql/test/library-tests/controlflow/basicblock-slices.expected @@ -1,123 +1,123 @@ | 1 | cfg.swift:1:1:604:2 | Block | 'Block -V VariableDeclaration -V topLevelDecl -> Int -> 0' | | 2 | cfg.swift:2:1:2:1 | 0 | '0' | -| 3 | cfg.swift:3:1:3:12 | topLevelDecl | 'topLevelDecl -> 1 -^ BinaryExpr' | +| 3 | cfg.swift:3:1:3:12 | topLevelDecl | 'topLevelDecl -> 1 -^ ... + ...' | | 5 | cfg.swift:5:1:5:37 | Block | 'Block -V 0 -^ ReturnExpr' | | 5 | cfg.swift:5:1:5:37 | FunctionDeclaration | 'FunctionDeclaration' | -| 7 | cfg.swift:7:1:7:10 | returnZero | 'returnZero -^ CallExpr' | -| 8 | cfg.swift:8:1:8:6 | Double | 'Double -> Argument -V topLevelDecl -^ CallExpr' | +| 7 | cfg.swift:7:1:7:10 | returnZero | 'returnZero -^ returnZero(...)' | +| 8 | cfg.swift:8:1:8:6 | Double | 'Double -> Argument -V topLevelDecl -^ Double(...)' | | 10 | cfg.swift:10:1:13:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V MyError -^ BaseType -V Error' | | 11 | cfg.swift:11:10:11:16 | VariableDeclaration | 'VariableDeclaration -V error1 -> VariableDeclaration -V error2' | | 12 | cfg.swift:12:10:12:31 | ClassLikeDeclaration | 'ClassLikeDeclaration -V error3 -^ ConstructorDeclaration' | | 12 | cfg.swift:12:17:12:25 | withParam | 'withParam -^ Block' | | 15 | cfg.swift:15:1:17:1 | FunctionDeclaration | 'FunctionDeclaration' | | 15 | cfg.swift:15:13:15:13 | x | 'x -^ Block' | -| 16 | cfg.swift:16:10:16:10 | x | 'x -> 0 -^ BinaryExpr -^ ReturnExpr' | +| 16 | cfg.swift:16:10:16:10 | x | 'x -> 0 -^ ... == ... -^ ReturnExpr' | | 19 | cfg.swift:19:1:26:1 | FunctionDeclaration | 'FunctionDeclaration' | | 19 | cfg.swift:19:17:19:17 | x | 'x -^ Block' | -| 20 | cfg.swift:20:3:22:3 | GuardIfStmt | 'GuardIfStmt -V x -> 0 -^ BinaryExpr' | +| 20 | cfg.swift:20:3:22:3 | GuardIfStmt | 'GuardIfStmt -V x -> 0 -^ ... >= ...' | | 20 | cfg.swift:20:21:22:3 | Block | 'Block' | -| 21 | cfg.swift:21:11:21:17 | MyError | 'MyError -^ MemberAccessExpr -^ ThrowExpr' | -| 23 | cfg.swift:23:3:25:3 | GuardIfStmt | 'GuardIfStmt -V x -> 0 -^ BinaryExpr' | +| 21 | cfg.swift:21:11:21:17 | MyError | 'MyError -^ ... .error1 -^ ThrowExpr' | +| 23 | cfg.swift:23:3:25:3 | GuardIfStmt | 'GuardIfStmt -V x -> 0 -^ ... <= ...' | | 23 | cfg.swift:23:21:25:3 | Block | 'Block' | -| 24 | cfg.swift:24:11:24:17 | MyError | 'MyError -^ MemberAccessExpr -> Argument -V x -> 1 -^ BinaryExpr -^ CallExpr -^ ThrowExpr' | +| 24 | cfg.swift:24:11:24:17 | MyError | 'MyError -^ ... .error3 -> Argument -V x -> 1 -^ ... + ... -^ ... .error3(...) -^ ThrowExpr' | | 28 | cfg.swift:28:1:45:1 | FunctionDeclaration | 'FunctionDeclaration' | | 28 | cfg.swift:28:15:28:15 | x | 'x -^ Block' | | 29 | cfg.swift:29:3:43:3 | TryExpr | 'TryExpr -V Block' | -| 30 | cfg.swift:30:5:30:24 | UnaryExpr | 'UnaryExpr' | -| 30 | cfg.swift:30:9:30:18 | mightThrow | 'mightThrow -> Argument -V 0 -^ CallExpr' | -| 31 | cfg.swift:31:5:31:9 | print | 'print -> Argument -V "Did not throw." -^ CallExpr' | -| 32 | cfg.swift:32:10:32:19 | mightThrow | 'mightThrow -> Argument -V 0 -^ CallExpr -^ UnaryExpr' | -| 33 | cfg.swift:33:5:33:9 | print | 'print -> Argument -V "Still did not throw." -^ CallExpr' | -| 35 | cfg.swift:35:5:37:3 | CatchClause | 'CatchClause -V MyError -^ MemberAccessExpr -> isZero -> Argument -V x -^ CallExpr -? MyError -^ MemberAccessExpr -^ ConditionalPattern -^ OrPattern' | +| 30 | cfg.swift:30:5:30:24 | try ... | 'try ...' | +| 30 | cfg.swift:30:9:30:18 | mightThrow | 'mightThrow -> Argument -V 0 -^ mightThrow(...)' | +| 31 | cfg.swift:31:5:31:9 | print | 'print -> Argument -V "Did not throw." -^ print(...)' | +| 32 | cfg.swift:32:10:32:19 | mightThrow | 'mightThrow -> Argument -V 0 -^ mightThrow(...) -^ try! ...' | +| 33 | cfg.swift:33:5:33:9 | print | 'print -> Argument -V "Still did not throw." -^ print(...)' | +| 35 | cfg.swift:35:5:37:3 | CatchClause | 'CatchClause -V MyError -^ ... .error1 -> isZero -> Argument -V x -^ isZero(...) -? MyError -^ ... .error2 -^ ConditionalPattern -^ OrPattern' | | 35 | cfg.swift:35:62:37:3 | Block | 'Block' | | 36 | cfg.swift:36:12:36:12 | 0 | '0 -^ ReturnExpr' | -| 37 | cfg.swift:37:5:39:3 | CatchClause | 'CatchClause -V MyError -^ MemberAccessExpr -> Argument -V withParam -^ ExprPattern -^ CallExpr' | +| 37 | cfg.swift:37:5:39:3 | CatchClause | 'CatchClause -V MyError -^ ... .error3 -> Argument -V withParam -^ ExprPattern -^ ... .error3(...)' | | 37 | cfg.swift:37:41:39:3 | Block | 'Block' | | 38 | cfg.swift:38:12:38:20 | withParam | 'withParam -^ ReturnExpr' | | 39 | cfg.swift:39:5:41:3 | CatchClause | 'CatchClause -V ' | | 39 | cfg.swift:39:22:41:3 | Block | 'Block' | -| 40 | cfg.swift:40:5:40:9 | print | 'print -> Argument -V "MyError" -^ CallExpr' | +| 40 | cfg.swift:40:5:40:9 | print | 'print -> Argument -V "MyError" -^ print(...)' | | 41 | cfg.swift:41:5:43:3 | CatchClause | 'CatchClause -V Block' | -| 42 | cfg.swift:42:5:42:9 | print | 'print -> Argument -V Unknown error -> interpolation -V Argument -V error -^ CallExpr -> -^ StringInterpolationExpr -^ CallExpr' | +| 42 | cfg.swift:42:5:42:9 | print | 'print -> Argument -V Unknown error -> interpolation -V Argument -V error -^ interpolation(...) -> -^ StringInterpolationExpr -^ print(...)' | | 44 | cfg.swift:44:10:44:10 | 0 | '0 -^ ReturnExpr' | | 47 | cfg.swift:47:1:51:1 | FunctionDeclaration | 'FunctionDeclaration' | | 47 | cfg.swift:47:21:47:21 | s | 's -^ Block' | | 48 | cfg.swift:48:10:50:3 | Block | 'Block' | | 48 | cfg.swift:48:10:50:3 | FunctionExpr | 'FunctionExpr -^ ReturnExpr' | -| 49 | cfg.swift:49:12:49:12 | s | 's -> "" -^ BinaryExpr -^ ReturnExpr' | +| 49 | cfg.swift:49:12:49:12 | s | 's -> "" -^ ... + ... -^ ReturnExpr' | | 53 | cfg.swift:53:1:58:1 | FunctionDeclaration | 'FunctionDeclaration' | | 53 | cfg.swift:53:21:53:21 | x | 'x -^ Block' | | 54 | cfg.swift:54:3:56:3 | FunctionDeclaration | 'FunctionDeclaration' | | 54 | cfg.swift:54:10:54:10 | y | 'y -^ Block' | -| 55 | cfg.swift:55:12:55:12 | x | 'x -> y -^ BinaryExpr -^ ReturnExpr' | +| 55 | cfg.swift:55:12:55:12 | x | 'x -> y -^ ... + ... -^ ReturnExpr' | | 57 | cfg.swift:57:10:57:10 | f | 'f -^ ReturnExpr' | | 60 | cfg.swift:60:1:64:1 | FunctionDeclaration | 'FunctionDeclaration' | | 60 | cfg.swift:60:21:60:21 | x | 'x -^ Block' | | 61 | cfg.swift:61:10:63:3 | Block | 'Block' | | 61 | cfg.swift:61:10:63:3 | FunctionExpr | 'FunctionExpr -^ ReturnExpr' | | 62 | cfg.swift:62:6:62:6 | y | 'y' | -| 62 | cfg.swift:62:19:62:19 | x | 'x -> y -^ BinaryExpr' | +| 62 | cfg.swift:62:19:62:19 | x | 'x -> y -^ ... + ...' | | 66 | cfg.swift:66:1:70:1 | Block | 'Block' | | 66 | cfg.swift:66:1:70:1 | FunctionDeclaration | 'FunctionDeclaration' | -| 67 | cfg.swift:67:3:67:34 | VariableDeclaration | 'VariableDeclaration -V x1 -> createClosure1 -> Argument -V "" -^ CallExpr -^ CallExpr' | -| 68 | cfg.swift:68:3:68:35 | VariableDeclaration | 'VariableDeclaration -V x2 -> createClosure2 -> Argument -V 0 -^ CallExpr -> Argument -V 10 -^ CallExpr' | -| 69 | cfg.swift:69:3:69:35 | VariableDeclaration | 'VariableDeclaration -V x3 -> createClosure3 -> Argument -V 0 -^ CallExpr -> Argument -V 10 -^ CallExpr' | +| 67 | cfg.swift:67:3:67:34 | VariableDeclaration | 'VariableDeclaration -V x1 -> createClosure1 -> Argument -V "" -^ createClosure1(...) -^ ...(...)' | +| 68 | cfg.swift:68:3:68:35 | VariableDeclaration | 'VariableDeclaration -V x2 -> createClosure2 -> Argument -V 0 -^ createClosure2(...) -> Argument -V 10 -^ ...(...)' | +| 69 | cfg.swift:69:3:69:35 | VariableDeclaration | 'VariableDeclaration -V x3 -> createClosure3 -> Argument -V 0 -^ createClosure3(...) -> Argument -V 10 -^ ...(...)' | | 72 | cfg.swift:72:1:75:1 | FunctionDeclaration | 'FunctionDeclaration' | | 72 | cfg.swift:72:20:72:20 | s | 's -^ Block' | -| 73 | cfg.swift:73:3:73:23 | VariableDeclaration | 'VariableDeclaration -V n -> Optional -V Int -^ GenericTypeExpr -> Int -> Argument -V s -^ CallExpr' | +| 73 | cfg.swift:73:3:73:23 | VariableDeclaration | 'VariableDeclaration -V n -> Optional -V Int -^ GenericTypeExpr -> Int -> Argument -V s -^ Int(...)' | | 74 | cfg.swift:74:10:74:10 | n | 'n -^ ReturnExpr' | | 77 | cfg.swift:77:1:81:1 | Block | 'Block' | | 77 | cfg.swift:77:1:81:1 | FunctionDeclaration | 'FunctionDeclaration' | -| 78 | cfg.swift:78:3:78:36 | VariableDeclaration | 'VariableDeclaration -V nBang -> maybeParseInt -> Argument -V "42" -^ CallExpr -^ UnaryExpr' | -| 79 | cfg.swift:79:3:79:31 | VariableDeclaration | 'VariableDeclaration -V n -> maybeParseInt -> Argument -V "42" -^ CallExpr' | -| 80 | cfg.swift:80:10:80:14 | nBang | 'nBang -> n -^ UnaryExpr -^ BinaryExpr -^ ReturnExpr' | +| 78 | cfg.swift:78:3:78:36 | VariableDeclaration | 'VariableDeclaration -V nBang -> maybeParseInt -> Argument -V "42" -^ maybeParseInt(...) -^ ... !' | +| 79 | cfg.swift:79:3:79:31 | VariableDeclaration | 'VariableDeclaration -V n -> maybeParseInt -> Argument -V "42" -^ maybeParseInt(...)' | +| 80 | cfg.swift:80:10:80:14 | nBang | 'nBang -> n -^ ... ! -^ ... + ... -^ ReturnExpr' | | 83 | cfg.swift:83:1:98:1 | Block | 'Block' | | 83 | cfg.swift:83:1:98:1 | FunctionDeclaration | 'FunctionDeclaration' | | 84 | cfg.swift:84:3:84:15 | VariableDeclaration | 'VariableDeclaration -V temp -> 10' | | 86 | cfg.swift:86:3:88:3 | FunctionDeclaration | 'FunctionDeclaration' | | 86 | cfg.swift:86:12:86:12 | a | 'a -^ Block' | -| 87 | cfg.swift:87:5:87:5 | a | 'a -> a -> 1 -^ BinaryExpr -^ BinaryExpr' | +| 87 | cfg.swift:87:5:87:5 | a | 'a -> a -> 1 -^ ... + ... -^ ... = ...' | | 90 | cfg.swift:90:3:92:3 | FunctionDeclaration | 'FunctionDeclaration' | | 90 | cfg.swift:90:20:90:20 | a | 'a -^ Block' | -| 91 | cfg.swift:91:5:91:5 | a | 'a -> nil -^ BinaryExpr' | -| 94 | cfg.swift:94:3:94:5 | add | 'add -> Argument -V -^ CallExpr' | +| 91 | cfg.swift:91:5:91:5 | a | 'a -> nil -^ ... = ...' | +| 94 | cfg.swift:94:3:94:5 | add | 'add -> Argument -V -^ add(...)' | | 95 | cfg.swift:95:3:95:30 | VariableDeclaration | 'VariableDeclaration -V tempOptional -> Optional -V Int -^ GenericTypeExpr -> 10' | -| 96 | cfg.swift:96:3:96:13 | addOptional | 'addOptional -> Argument -V -^ CallExpr' | -| 97 | cfg.swift:97:10:97:13 | temp | 'temp -> tempOptional -^ UnaryExpr -^ BinaryExpr -^ ReturnExpr' | +| 96 | cfg.swift:96:3:96:13 | addOptional | 'addOptional -> Argument -V -^ addOptional(...)' | +| 97 | cfg.swift:97:10:97:13 | temp | 'temp -> tempOptional -^ ... ! -^ ... + ... -^ ReturnExpr' | | 100 | cfg.swift:100:1:109:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V C' | | 101 | cfg.swift:101:3:101:16 | VariableDeclaration | 'VariableDeclaration -V myInt -> Int' | | 102 | cfg.swift:102:3:104:3 | ConstructorDeclaration | 'ConstructorDeclaration' | | 102 | cfg.swift:102:8:102:8 | n | 'n -^ Block' | -| 103 | cfg.swift:103:5:103:9 | myInt | 'myInt -> n -^ BinaryExpr' | +| 103 | cfg.swift:103:5:103:9 | myInt | 'myInt -> n -^ ... = ...' | | 106 | cfg.swift:106:3:108:3 | Block | 'Block' | | 106 | cfg.swift:106:3:108:3 | FunctionDeclaration | 'FunctionDeclaration' | | 107 | cfg.swift:107:12:107:16 | myInt | 'myInt -^ ReturnExpr' | | 111 | cfg.swift:111:1:137:1 | FunctionDeclaration | 'FunctionDeclaration' | | 111 | cfg.swift:111:20:111:24 | param | 'param -> inoutParam -> opt -^ Block' | -| 112 | cfg.swift:112:3:112:18 | VariableDeclaration | 'VariableDeclaration -V c -> C -> Argument -V 42 -^ CallExpr' | -| 113 | cfg.swift:113:3:113:18 | VariableDeclaration | 'VariableDeclaration -V n1 -> c -^ MemberAccessExpr' | -| 114 | cfg.swift:114:3:114:23 | VariableDeclaration | 'VariableDeclaration -V n2 -> c -^ MemberAccessExpr -^ MemberAccessExpr' | -| 115 | cfg.swift:115:3:115:23 | VariableDeclaration | 'VariableDeclaration -V n3 -> c -^ MemberAccessExpr -^ CallExpr' | -| 116 | cfg.swift:116:3:116:28 | VariableDeclaration | 'VariableDeclaration -V n4 -> c -^ MemberAccessExpr -^ MemberAccessExpr -^ CallExpr' | -| 117 | cfg.swift:117:3:117:22 | VariableDeclaration | 'VariableDeclaration -V n5 -> param -^ MemberAccessExpr' | -| 118 | cfg.swift:118:3:118:27 | VariableDeclaration | 'VariableDeclaration -V n6 -> param -^ MemberAccessExpr -^ MemberAccessExpr' | -| 120 | cfg.swift:120:3:120:32 | VariableDeclaration | 'VariableDeclaration -V n8 -> param -^ MemberAccessExpr -^ MemberAccessExpr -^ CallExpr' | -| 122 | cfg.swift:122:3:122:27 | VariableDeclaration | 'VariableDeclaration -V n9 -> inoutParam -^ MemberAccessExpr' | -| 123 | cfg.swift:123:3:123:27 | VariableDeclaration | 'VariableDeclaration -V n7 -> param -^ MemberAccessExpr -^ CallExpr' | -| 124 | cfg.swift:124:3:124:33 | VariableDeclaration | 'VariableDeclaration -V n10 -> inoutParam -^ MemberAccessExpr -^ MemberAccessExpr' | -| 125 | cfg.swift:125:3:125:33 | VariableDeclaration | 'VariableDeclaration -V n11 -> inoutParam -^ MemberAccessExpr -^ CallExpr' | -| 126 | cfg.swift:126:3:126:38 | VariableDeclaration | 'VariableDeclaration -V n12 -> inoutParam -^ MemberAccessExpr -^ MemberAccessExpr -^ CallExpr' | -| 128 | cfg.swift:128:3:128:22 | VariableDeclaration | 'VariableDeclaration -V n13 -> opt -^ UnaryExpr -^ MemberAccessExpr' | -| 129 | cfg.swift:129:3:129:27 | VariableDeclaration | 'VariableDeclaration -V n14 -> opt -^ UnaryExpr -^ MemberAccessExpr -^ MemberAccessExpr' | -| 130 | cfg.swift:130:3:130:27 | VariableDeclaration | 'VariableDeclaration -V n15 -> opt -^ UnaryExpr -^ MemberAccessExpr -^ CallExpr' | -| 131 | cfg.swift:131:3:131:32 | VariableDeclaration | 'VariableDeclaration -V n16 -> opt -^ UnaryExpr -^ MemberAccessExpr -^ MemberAccessExpr -^ CallExpr' | -| 133 | cfg.swift:133:3:133:22 | VariableDeclaration | 'VariableDeclaration -V n17 -> opt -^ MemberAccessExpr' | -| 134 | cfg.swift:134:3:134:27 | VariableDeclaration | 'VariableDeclaration -V n18 -> opt -^ MemberAccessExpr -^ MemberAccessExpr' | -| 135 | cfg.swift:135:3:135:27 | VariableDeclaration | 'VariableDeclaration -V n19 -> opt -^ MemberAccessExpr -^ CallExpr' | -| 136 | cfg.swift:136:3:136:32 | VariableDeclaration | 'VariableDeclaration -V n20 -> opt -^ MemberAccessExpr -^ MemberAccessExpr -^ CallExpr' | +| 112 | cfg.swift:112:3:112:18 | VariableDeclaration | 'VariableDeclaration -V c -> C -> Argument -V 42 -^ C(...)' | +| 113 | cfg.swift:113:3:113:18 | VariableDeclaration | 'VariableDeclaration -V n1 -> c -^ ... .myInt' | +| 114 | cfg.swift:114:3:114:23 | VariableDeclaration | 'VariableDeclaration -V n2 -> c -^ ... .self -^ ... .myInt' | +| 115 | cfg.swift:115:3:115:23 | VariableDeclaration | 'VariableDeclaration -V n3 -> c -^ ... .getMyInt -^ ... .getMyInt(...)' | +| 116 | cfg.swift:116:3:116:28 | VariableDeclaration | 'VariableDeclaration -V n4 -> c -^ ... .self -^ ... .getMyInt -^ ... .getMyInt(...)' | +| 117 | cfg.swift:117:3:117:22 | VariableDeclaration | 'VariableDeclaration -V n5 -> param -^ ... .myInt' | +| 118 | cfg.swift:118:3:118:27 | VariableDeclaration | 'VariableDeclaration -V n6 -> param -^ ... .self -^ ... .myInt' | +| 120 | cfg.swift:120:3:120:32 | VariableDeclaration | 'VariableDeclaration -V n8 -> param -^ ... .self -^ ... .getMyInt -^ ... .getMyInt(...)' | +| 122 | cfg.swift:122:3:122:27 | VariableDeclaration | 'VariableDeclaration -V n9 -> inoutParam -^ ... .myInt' | +| 123 | cfg.swift:123:3:123:27 | VariableDeclaration | 'VariableDeclaration -V n7 -> param -^ ... .getMyInt -^ ... .getMyInt(...)' | +| 124 | cfg.swift:124:3:124:33 | VariableDeclaration | 'VariableDeclaration -V n10 -> inoutParam -^ ... .self -^ ... .myInt' | +| 125 | cfg.swift:125:3:125:33 | VariableDeclaration | 'VariableDeclaration -V n11 -> inoutParam -^ ... .getMyInt -^ ... .getMyInt(...)' | +| 126 | cfg.swift:126:3:126:38 | VariableDeclaration | 'VariableDeclaration -V n12 -> inoutParam -^ ... .self -^ ... .getMyInt -^ ... .getMyInt(...)' | +| 128 | cfg.swift:128:3:128:22 | VariableDeclaration | 'VariableDeclaration -V n13 -> opt -^ ... ! -^ ... .myInt' | +| 129 | cfg.swift:129:3:129:27 | VariableDeclaration | 'VariableDeclaration -V n14 -> opt -^ ... ! -^ ... .self -^ ... .myInt' | +| 130 | cfg.swift:130:3:130:27 | VariableDeclaration | 'VariableDeclaration -V n15 -> opt -^ ... ! -^ ... .getMyInt -^ ... .getMyInt(...)' | +| 131 | cfg.swift:131:3:131:32 | VariableDeclaration | 'VariableDeclaration -V n16 -> opt -^ ... ! -^ ... .self -^ ... .getMyInt -^ ... .getMyInt(...)' | +| 133 | cfg.swift:133:3:133:22 | VariableDeclaration | 'VariableDeclaration -V n17 -> opt -^ ... .myInt' | +| 134 | cfg.swift:134:3:134:27 | VariableDeclaration | 'VariableDeclaration -V n18 -> opt -^ ... .self -^ ... .myInt' | +| 135 | cfg.swift:135:3:135:27 | VariableDeclaration | 'VariableDeclaration -V n19 -> opt -^ ... .getMyInt -^ ... .getMyInt(...)' | +| 136 | cfg.swift:136:3:136:32 | VariableDeclaration | 'VariableDeclaration -V n20 -> opt -^ ... .self -^ ... .getMyInt -^ ... .getMyInt(...)' | | 139 | cfg.swift:139:1:166:1 | FunctionDeclaration | 'FunctionDeclaration' | | 139 | cfg.swift:139:15:139:15 | x | 'x -^ Block' | -| 140 | cfg.swift:140:3:141:12 | ForEachStmt | 'ForEachStmt -V 0 -> 10 -^ BinaryExpr' | +| 140 | cfg.swift:140:3:141:12 | ForEachStmt | 'ForEachStmt -V 0 -> 10 -^ ... ... ...' | | 140 | cfg.swift:140:7:140:7 | _ | '_' | | 141 | cfg.swift:141:9:141:12 | Block | 'Block' | | 143 | cfg.swift:143:3:153:3 | SwitchExpr | 'SwitchExpr -V x' | @@ -127,8 +127,8 @@ | 147 | cfg.swift:147:5:150:17 | Block | 'Block' | | 147 | cfg.swift:147:5:150:17 | SwitchCase | 'SwitchCase' | | 147 | cfg.swift:147:10:147:10 | x | 'x -^ ConditionalPattern' | -| 148 | cfg.swift:148:9:149:17 | BinaryExpr | 'BinaryExpr -V x -> 2 -^ BinaryExpr' | -| 149 | cfg.swift:149:13:149:13 | x | 'x -> 5 -^ BinaryExpr' | +| 148 | cfg.swift:148:9:149:17 | ... && ... | '... && ... -V x -> 2 -^ ... >= ...' | +| 149 | cfg.swift:149:13:149:13 | x | 'x -> 5 -^ ... < ...' | | 150 | cfg.swift:150:14:150:17 | true | 'true -^ ReturnExpr' | | 151 | cfg.swift:151:5:152:18 | SwitchCase | 'SwitchCase -V Block' | | 152 | cfg.swift:152:14:152:18 | false | 'false -^ ReturnExpr' | @@ -139,16 +139,16 @@ | 178 | cfg.swift:178:3:183:3 | | '' | | 186 | cfg.swift:186:1:198:1 | FunctionDeclaration | 'FunctionDeclaration' | | 186 | cfg.swift:186:9:186:9 | x | 'x -^ Block' | -| 187 | cfg.swift:187:3:197:3 | IfExpr | 'IfExpr -V x -> 2 -^ BinaryExpr' | +| 187 | cfg.swift:187:3:197:3 | IfExpr | 'IfExpr -V x -> 2 -^ ... > ...' | | 187 | cfg.swift:187:12:189:3 | Block | 'Block' | -| 188 | cfg.swift:188:5:188:9 | print | 'print -> Argument -V "x is greater than 2" -^ CallExpr' | -| 190 | cfg.swift:190:8:197:3 | IfExpr | 'IfExpr -V BinaryExpr -V BinaryExpr -V x -> 2 -^ BinaryExpr' | -| 191 | cfg.swift:191:13:191:13 | x | 'x -> 0 -^ BinaryExpr' | -| 192 | cfg.swift:192:13:192:21 | UnaryExpr | 'UnaryExpr -V x -> 5 -^ BinaryExpr' | +| 188 | cfg.swift:188:5:188:9 | print | 'print -> Argument -V "x is greater than 2" -^ print(...)' | +| 190 | cfg.swift:190:8:197:3 | IfExpr | 'IfExpr -V ... && ... -V ... && ... -V x -> 2 -^ ... <= ...' | +| 191 | cfg.swift:191:13:191:13 | x | 'x -> 0 -^ ... > ...' | +| 192 | cfg.swift:192:13:192:21 | ! ... | '! ... -V x -> 5 -^ ... == ...' | | 192 | cfg.swift:192:23:194:3 | Block | 'Block' | -| 193 | cfg.swift:193:5:193:9 | print | 'print -> Argument -V "x is 1" -^ CallExpr' | +| 193 | cfg.swift:193:5:193:9 | print | 'print -> Argument -V "x is 1" -^ print(...)' | | 195 | cfg.swift:195:8:197:3 | Block | 'Block' | -| 196 | cfg.swift:196:5:196:9 | print | 'print -> Argument -V "I can't guess the number" -^ CallExpr' | +| 196 | cfg.swift:196:5:196:9 | print | 'print -> Argument -V "I can't guess the number" -^ print(...)' | | 200 | cfg.swift:200:1:205:1 | FunctionDeclaration | 'FunctionDeclaration' | | 200 | cfg.swift:200:9:200:9 | b | 'b -^ Block' | | 201 | cfg.swift:201:3:203:3 | IfExpr | 'IfExpr -V b' | @@ -157,12 +157,12 @@ | 204 | cfg.swift:204:10:204:10 | 1 | '1 -^ ReturnExpr' | | 207 | cfg.swift:207:1:215:1 | FunctionDeclaration | 'FunctionDeclaration' | | 207 | cfg.swift:207:9:207:9 | x | 'x -^ Block' | -| 208 | cfg.swift:208:3:213:3 | IfExpr | 'IfExpr -V x -> 0 -^ BinaryExpr' | +| 208 | cfg.swift:208:3:213:3 | IfExpr | 'IfExpr -V x -> 0 -^ ... < ...' | | 208 | cfg.swift:208:12:213:3 | Block | 'Block' | -| 209 | cfg.swift:209:5:209:5 | x | 'x -> x -^ UnaryExpr -^ BinaryExpr' | -| 210 | cfg.swift:210:5:212:5 | IfExpr | 'IfExpr -V x -> 10 -^ BinaryExpr' | +| 209 | cfg.swift:209:5:209:5 | x | 'x -> x -^ - ... -^ ... = ...' | +| 210 | cfg.swift:210:5:212:5 | IfExpr | 'IfExpr -V x -> 10 -^ ... > ...' | | 210 | cfg.swift:210:15:212:5 | Block | 'Block' | -| 211 | cfg.swift:211:7:211:7 | x | 'x -> x -> 1 -^ BinaryExpr -^ BinaryExpr' | +| 211 | cfg.swift:211:7:211:7 | x | 'x -> x -> 1 -^ ... - ... -^ ... = ...' | | 214 | cfg.swift:214:10:214:10 | x | 'x -^ ReturnExpr' | | 217 | cfg.swift:217:1:223:1 | FunctionDeclaration | 'FunctionDeclaration' | | 217 | cfg.swift:217:10:217:11 | b1 | 'b1 -> b2 -> b3 -^ Block' | @@ -176,171 +176,171 @@ | 225 | cfg.swift:225:31:225:31 | b | 'b -^ Block' | | 226 | cfg.swift:226:3:233:3 | IfExpr | 'IfExpr -V IfExpr -V b' | | 227 | cfg.swift:227:8:227:11 | true | 'true' | -| 228 | cfg.swift:228:7:228:10 | Bool | 'Bool -> Argument -V false -^ CallExpr' | +| 228 | cfg.swift:228:7:228:10 | Bool | 'Bool -> Argument -V false -^ Bool(...)' | | 228 | cfg.swift:228:19:230:3 | Block | 'Block' | | 229 | cfg.swift:229:12:229:14 | "b" | '"b" -^ ReturnExpr' | | 231 | cfg.swift:231:8:233:3 | Block | 'Block' | | 232 | cfg.swift:232:12:232:15 | "!b" | '"!b" -^ ReturnExpr' | | 236 | cfg.swift:236:1:240:1 | Block | 'Block' | | 236 | cfg.swift:236:1:240:1 | FunctionDeclaration | 'FunctionDeclaration' | -| 237 | cfg.swift:237:3:239:3 | IfExpr | 'IfExpr -V UnaryExpr -V true' | +| 237 | cfg.swift:237:3:239:3 | IfExpr | 'IfExpr -V ! ... -V true' | | 242 | cfg.swift:242:1:248:1 | FunctionDeclaration | 'FunctionDeclaration' | | 242 | cfg.swift:242:17:242:17 | b | 'b -^ Block' | | 243 | cfg.swift:243:3:246:9 | IfExpr | 'IfExpr -V b' | | 243 | cfg.swift:243:8:245:3 | Block | 'Block' | -| 244 | cfg.swift:244:5:244:9 | print | 'print -> Argument -V "true" -^ CallExpr' | +| 244 | cfg.swift:244:5:244:9 | print | 'print -> Argument -V "true" -^ print(...)' | | 246 | cfg.swift:246:8:246:9 | Block | 'Block' | -| 247 | cfg.swift:247:3:247:7 | print | 'print -> Argument -V "done" -^ CallExpr' | +| 247 | cfg.swift:247:3:247:7 | print | 'print -> Argument -V "done" -^ print(...)' | | 250 | cfg.swift:250:1:254:1 | FunctionDeclaration | 'FunctionDeclaration' | | 250 | cfg.swift:250:16:250:17 | b1 | 'b1 -> b2 -^ Block' | -| 251 | cfg.swift:251:3:253:3 | IfExpr | 'IfExpr -V BinaryExpr -V b1' | +| 251 | cfg.swift:251:3:253:3 | IfExpr | 'IfExpr -V ... \|\| ... -V b1' | | 251 | cfg.swift:251:13:251:14 | b2 | 'b2' | | 251 | cfg.swift:251:17:253:3 | Block | 'Block' | -| 252 | cfg.swift:252:5:252:9 | print | 'print -> Argument -V "b1 or b2" -^ CallExpr' | +| 252 | cfg.swift:252:5:252:9 | print | 'print -> Argument -V "b1 or b2" -^ print(...)' | | 256 | cfg.swift:256:1:273:1 | FunctionDeclaration | 'FunctionDeclaration' | | 256 | cfg.swift:256:18:256:18 | a | 'a -> b -^ Block' | -| 257 | cfg.swift:257:3:257:15 | VariableDeclaration | 'VariableDeclaration -V c -> a -> b -^ BinaryExpr' | -| 258 | cfg.swift:258:3:258:15 | VariableDeclaration | 'VariableDeclaration -V d -> a -> b -^ BinaryExpr' | -| 259 | cfg.swift:259:3:259:15 | VariableDeclaration | 'VariableDeclaration -V e -> a -> b -^ BinaryExpr' | -| 260 | cfg.swift:260:3:260:15 | VariableDeclaration | 'VariableDeclaration -V f -> a -> b -^ BinaryExpr' | -| 261 | cfg.swift:261:3:261:15 | VariableDeclaration | 'VariableDeclaration -V g -> a -> b -^ BinaryExpr' | -| 262 | cfg.swift:262:3:262:15 | VariableDeclaration | 'VariableDeclaration -V h -> a -> b -^ BinaryExpr' | -| 263 | cfg.swift:263:3:263:15 | VariableDeclaration | 'VariableDeclaration -V i -> a -> b -^ BinaryExpr' | -| 264 | cfg.swift:264:3:264:15 | VariableDeclaration | 'VariableDeclaration -V j -> a -> b -^ BinaryExpr' | -| 265 | cfg.swift:265:3:265:16 | VariableDeclaration | 'VariableDeclaration -V k -> a -> b -^ BinaryExpr' | -| 266 | cfg.swift:266:3:266:16 | VariableDeclaration | 'VariableDeclaration -V l -> a -> b -^ BinaryExpr' | -| 267 | cfg.swift:267:3:267:16 | VariableDeclaration | 'VariableDeclaration -V o -> a -> b -^ BinaryExpr' | -| 268 | cfg.swift:268:3:268:16 | VariableDeclaration | 'VariableDeclaration -V p -> a -> b -^ BinaryExpr' | -| 269 | cfg.swift:269:3:269:15 | VariableDeclaration | 'VariableDeclaration -V q -> a -> b -^ BinaryExpr' | -| 270 | cfg.swift:270:3:270:16 | VariableDeclaration | 'VariableDeclaration -V r -> a -> b -^ BinaryExpr' | -| 271 | cfg.swift:271:3:271:15 | VariableDeclaration | 'VariableDeclaration -V s -> a -> b -^ BinaryExpr' | -| 272 | cfg.swift:272:3:272:16 | VariableDeclaration | 'VariableDeclaration -V t -> a -> b -^ BinaryExpr' | +| 257 | cfg.swift:257:3:257:15 | VariableDeclaration | 'VariableDeclaration -V c -> a -> b -^ ... + ...' | +| 258 | cfg.swift:258:3:258:15 | VariableDeclaration | 'VariableDeclaration -V d -> a -> b -^ ... - ...' | +| 259 | cfg.swift:259:3:259:15 | VariableDeclaration | 'VariableDeclaration -V e -> a -> b -^ ... * ...' | +| 260 | cfg.swift:260:3:260:15 | VariableDeclaration | 'VariableDeclaration -V f -> a -> b -^ ... / ...' | +| 261 | cfg.swift:261:3:261:15 | VariableDeclaration | 'VariableDeclaration -V g -> a -> b -^ ... % ...' | +| 262 | cfg.swift:262:3:262:15 | VariableDeclaration | 'VariableDeclaration -V h -> a -> b -^ ... & ...' | +| 263 | cfg.swift:263:3:263:15 | VariableDeclaration | 'VariableDeclaration -V i -> a -> b -^ ... \| ...' | +| 264 | cfg.swift:264:3:264:15 | VariableDeclaration | 'VariableDeclaration -V j -> a -> b -^ ... ^ ...' | +| 265 | cfg.swift:265:3:265:16 | VariableDeclaration | 'VariableDeclaration -V k -> a -> b -^ ... << ...' | +| 266 | cfg.swift:266:3:266:16 | VariableDeclaration | 'VariableDeclaration -V l -> a -> b -^ ... >> ...' | +| 267 | cfg.swift:267:3:267:16 | VariableDeclaration | 'VariableDeclaration -V o -> a -> b -^ ... == ...' | +| 268 | cfg.swift:268:3:268:16 | VariableDeclaration | 'VariableDeclaration -V p -> a -> b -^ ... != ...' | +| 269 | cfg.swift:269:3:269:15 | VariableDeclaration | 'VariableDeclaration -V q -> a -> b -^ ... < ...' | +| 270 | cfg.swift:270:3:270:16 | VariableDeclaration | 'VariableDeclaration -V r -> a -> b -^ ... <= ...' | +| 271 | cfg.swift:271:3:271:15 | VariableDeclaration | 'VariableDeclaration -V s -> a -> b -^ ... > ...' | +| 272 | cfg.swift:272:3:272:16 | VariableDeclaration | 'VariableDeclaration -V t -> a -> b -^ ... >= ...' | | 275 | cfg.swift:275:1:277:1 | FunctionDeclaration | 'FunctionDeclaration' | | 275 | cfg.swift:275:25:275:25 | x | 'x -> y -^ Block' | -| 276 | cfg.swift:276:11:276:10 | | ' -> interpolation -V Argument -V x -^ CallExpr -> + -> interpolation -V Argument -V y -^ CallExpr -> is equal to -> interpolation -V Argument -V x -> y -^ BinaryExpr -^ CallExpr -> and here is a zero: -> interpolation -V Argument -V returnZero -^ CallExpr -^ CallExpr -> -^ StringInterpolationExpr -^ ReturnExpr' | +| 276 | cfg.swift:276:11:276:10 | | ' -> interpolation -V Argument -V x -^ interpolation(...) -> + -> interpolation -V Argument -V y -^ interpolation(...) -> is equal to -> interpolation -V Argument -V x -> y -^ ... + ... -^ interpolation(...) -> and here is a zero: -> interpolation -V Argument -V returnZero -^ returnZero(...) -^ interpolation(...) -> -^ StringInterpolationExpr -^ ReturnExpr' | | 279 | cfg.swift:279:1:310:1 | Block | 'Block' | | 279 | cfg.swift:279:1:310:1 | FunctionDeclaration | 'FunctionDeclaration' | | 280 | cfg.swift:280:3:280:44 | VariableDeclaration | 'VariableDeclaration -V a -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10 -^ ArrayLiteral' | -| 281 | cfg.swift:281:3:281:3 | a | 'a -> Argument -V 0 -^ CallExpr -> 0 -^ BinaryExpr' | -| 282 | cfg.swift:282:3:282:3 | a | 'a -> Argument -V 1 -^ CallExpr -> 1 -^ BinaryExpr' | -| 283 | cfg.swift:283:3:283:3 | a | 'a -> Argument -V 2 -^ CallExpr -> 1 -^ BinaryExpr' | -| 284 | cfg.swift:284:3:284:3 | a | 'a -> Argument -V 3 -^ CallExpr -> 1 -^ BinaryExpr' | -| 285 | cfg.swift:285:3:285:3 | a | 'a -> Argument -V 4 -^ CallExpr -> 1 -^ BinaryExpr' | -| 286 | cfg.swift:286:3:286:3 | a | 'a -> Argument -V 5 -^ CallExpr -> 1 -^ BinaryExpr' | -| 287 | cfg.swift:287:3:287:3 | a | 'a -> Argument -V 6 -^ CallExpr -> 1 -^ BinaryExpr' | -| 288 | cfg.swift:288:3:288:3 | a | 'a -> Argument -V 7 -^ CallExpr -> 1 -^ BinaryExpr' | -| 289 | cfg.swift:289:3:289:3 | a | 'a -> Argument -V 8 -^ CallExpr -> 1 -^ BinaryExpr' | -| 290 | cfg.swift:290:3:290:3 | a | 'a -> Argument -V 9 -^ CallExpr -> 1 -^ BinaryExpr' | -| 291 | cfg.swift:291:3:291:3 | a | 'a -> Argument -V 10 -^ CallExpr -> 1 -^ BinaryExpr' | -| 293 | cfg.swift:293:3:293:49 | VariableDeclaration | 'VariableDeclaration -V tupleWithA -> Argument -V a -> Argument -V 0 -^ CallExpr -> Argument -V a -> Argument -V 1 -^ CallExpr -> Argument -V a -> Argument -V 2 -^ CallExpr -> Argument -V a -> Argument -V 3 -^ CallExpr -> Argument -V a -> Argument -V 4 -^ CallExpr -^ TupleExpr' | +| 281 | cfg.swift:281:3:281:3 | a | 'a -> Argument -V 0 -^ a(...) -> 0 -^ ... = ...' | +| 282 | cfg.swift:282:3:282:3 | a | 'a -> Argument -V 1 -^ a(...) -> 1 -^ ... += ...' | +| 283 | cfg.swift:283:3:283:3 | a | 'a -> Argument -V 2 -^ a(...) -> 1 -^ ... -= ...' | +| 284 | cfg.swift:284:3:284:3 | a | 'a -> Argument -V 3 -^ a(...) -> 1 -^ ... *= ...' | +| 285 | cfg.swift:285:3:285:3 | a | 'a -> Argument -V 4 -^ a(...) -> 1 -^ ... /= ...' | +| 286 | cfg.swift:286:3:286:3 | a | 'a -> Argument -V 5 -^ a(...) -> 1 -^ ... %= ...' | +| 287 | cfg.swift:287:3:287:3 | a | 'a -> Argument -V 6 -^ a(...) -> 1 -^ ... &= ...' | +| 288 | cfg.swift:288:3:288:3 | a | 'a -> Argument -V 7 -^ a(...) -> 1 -^ ... \|= ...' | +| 289 | cfg.swift:289:3:289:3 | a | 'a -> Argument -V 8 -^ a(...) -> 1 -^ ... ^= ...' | +| 290 | cfg.swift:290:3:290:3 | a | 'a -> Argument -V 9 -^ a(...) -> 1 -^ ... <<= ...' | +| 291 | cfg.swift:291:3:291:3 | a | 'a -> Argument -V 10 -^ a(...) -> 1 -^ ... >>= ...' | +| 293 | cfg.swift:293:3:293:49 | VariableDeclaration | 'VariableDeclaration -V tupleWithA -> Argument -V a -> Argument -V 0 -^ a(...) -> Argument -V a -> Argument -V 1 -^ a(...) -> Argument -V a -> Argument -V 2 -^ a(...) -> Argument -V a -> Argument -V 3 -^ a(...) -> Argument -V a -> Argument -V 4 -^ a(...) -^ TupleExpr' | | 295 | cfg.swift:295:3:295:48 | VariableDeclaration | 'VariableDeclaration -V b -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10 -> 11 -^ ArrayLiteral' | -| 296 | cfg.swift:296:3:296:3 | b | 'b -> Argument -V 0 -^ CallExpr -> a -> Argument -V 10 -^ CallExpr -^ BinaryExpr' | -| 297 | cfg.swift:297:3:297:3 | b | 'b -> Argument -V 1 -^ CallExpr -> b -> Argument -V 0 -^ CallExpr -> 1 -^ BinaryExpr -^ BinaryExpr' | -| 298 | cfg.swift:298:3:298:3 | b | 'b -> Argument -V 2 -^ CallExpr -> b -> Argument -V 1 -^ CallExpr -> 1 -^ BinaryExpr -^ BinaryExpr' | -| 299 | cfg.swift:299:3:299:3 | b | 'b -> Argument -V 3 -^ CallExpr -> b -> Argument -V 2 -^ CallExpr -> 1 -^ BinaryExpr -^ BinaryExpr' | -| 300 | cfg.swift:300:3:300:3 | b | 'b -> Argument -V 4 -^ CallExpr -> b -> Argument -V 3 -^ CallExpr -> 1 -^ BinaryExpr -^ BinaryExpr' | -| 301 | cfg.swift:301:3:301:3 | b | 'b -> Argument -V 5 -^ CallExpr -> b -> Argument -V 4 -^ CallExpr -> 1 -^ BinaryExpr -^ BinaryExpr' | -| 302 | cfg.swift:302:3:302:3 | b | 'b -> Argument -V 6 -^ CallExpr -> b -> Argument -V 5 -^ CallExpr -> 1 -^ BinaryExpr -^ BinaryExpr' | -| 303 | cfg.swift:303:3:303:3 | b | 'b -> Argument -V 7 -^ CallExpr -> b -> Argument -V 6 -^ CallExpr -> 1 -^ BinaryExpr -^ BinaryExpr' | -| 304 | cfg.swift:304:3:304:3 | b | 'b -> Argument -V 8 -^ CallExpr -> b -> Argument -V 7 -^ CallExpr -> 1 -^ BinaryExpr -^ BinaryExpr' | -| 305 | cfg.swift:305:3:305:3 | b | 'b -> Argument -V 9 -^ CallExpr -> b -> Argument -V 8 -^ CallExpr -> 1 -^ BinaryExpr -^ BinaryExpr' | -| 306 | cfg.swift:306:3:306:3 | b | 'b -> Argument -V 10 -^ CallExpr -> b -> Argument -V 9 -^ CallExpr -> 1 -^ BinaryExpr -^ BinaryExpr' | +| 296 | cfg.swift:296:3:296:3 | b | 'b -> Argument -V 0 -^ b(...) -> a -> Argument -V 10 -^ a(...) -^ ... = ...' | +| 297 | cfg.swift:297:3:297:3 | b | 'b -> Argument -V 1 -^ b(...) -> b -> Argument -V 0 -^ b(...) -> 1 -^ ... + ... -^ ... = ...' | +| 298 | cfg.swift:298:3:298:3 | b | 'b -> Argument -V 2 -^ b(...) -> b -> Argument -V 1 -^ b(...) -> 1 -^ ... - ... -^ ... = ...' | +| 299 | cfg.swift:299:3:299:3 | b | 'b -> Argument -V 3 -^ b(...) -> b -> Argument -V 2 -^ b(...) -> 1 -^ ... * ... -^ ... = ...' | +| 300 | cfg.swift:300:3:300:3 | b | 'b -> Argument -V 4 -^ b(...) -> b -> Argument -V 3 -^ b(...) -> 1 -^ ... / ... -^ ... = ...' | +| 301 | cfg.swift:301:3:301:3 | b | 'b -> Argument -V 5 -^ b(...) -> b -> Argument -V 4 -^ b(...) -> 1 -^ ... % ... -^ ... = ...' | +| 302 | cfg.swift:302:3:302:3 | b | 'b -> Argument -V 6 -^ b(...) -> b -> Argument -V 5 -^ b(...) -> 1 -^ ... & ... -^ ... = ...' | +| 303 | cfg.swift:303:3:303:3 | b | 'b -> Argument -V 7 -^ b(...) -> b -> Argument -V 6 -^ b(...) -> 1 -^ ... \| ... -^ ... = ...' | +| 304 | cfg.swift:304:3:304:3 | b | 'b -> Argument -V 8 -^ b(...) -> b -> Argument -V 7 -^ b(...) -> 1 -^ ... ^ ... -^ ... = ...' | +| 305 | cfg.swift:305:3:305:3 | b | 'b -> Argument -V 9 -^ b(...) -> b -> Argument -V 8 -^ b(...) -> 1 -^ ... << ... -^ ... = ...' | +| 306 | cfg.swift:306:3:306:3 | b | 'b -> Argument -V 10 -^ b(...) -> b -> Argument -V 9 -^ b(...) -> 1 -^ ... >> ... -^ ... = ...' | | 308 | cfg.swift:308:3:308:39 | VariableDeclaration | 'VariableDeclaration -V Argument -V a1 -> Argument -V a2 -> Argument -V a3 -> Argument -V a4 -> Argument -V a5 -^ TupleExpr -> tupleWithA' | -| 309 | cfg.swift:309:11:309:20 | Argument | 'Argument -V a1 -> b -> Argument -V 0 -^ CallExpr -^ BinaryExpr -> Argument -V a2 -> b -> Argument -V 1 -^ CallExpr -^ BinaryExpr -> Argument -V a3 -> b -> Argument -V 2 -^ CallExpr -^ BinaryExpr -> Argument -V a4 -> b -> Argument -V 3 -^ CallExpr -^ BinaryExpr -> Argument -V a5 -> b -> Argument -V 4 -^ CallExpr -^ BinaryExpr -^ TupleExpr -^ ReturnExpr' | +| 309 | cfg.swift:309:11:309:20 | Argument | 'Argument -V a1 -> b -> Argument -V 0 -^ b(...) -^ ... + ... -> Argument -V a2 -> b -> Argument -V 1 -^ b(...) -^ ... + ... -> Argument -V a3 -> b -> Argument -V 2 -^ b(...) -^ ... + ... -> Argument -V a4 -> b -> Argument -V 3 -^ b(...) -^ ... + ... -> Argument -V a5 -> b -> Argument -V 4 -^ b(...) -^ ... + ... -^ TupleExpr -^ ReturnExpr' | | 312 | cfg.swift:312:1:317:1 | FunctionDeclaration | 'FunctionDeclaration' | | 312 | cfg.swift:312:12:312:12 | x | 'x -^ Block' | | 313 | cfg.swift:313:3:316:3 | WhileStmt | 'WhileStmt' | -| 313 | cfg.swift:313:9:313:9 | x | 'x -> 0 -^ BinaryExpr' | +| 313 | cfg.swift:313:9:313:9 | x | 'x -> 0 -^ ... >= ...' | | 313 | cfg.swift:313:16:316:3 | Block | 'Block' | -| 314 | cfg.swift:314:5:314:9 | print | 'print -> Argument -V x -^ CallExpr' | -| 315 | cfg.swift:315:5:315:5 | x | 'x -> 1 -^ BinaryExpr' | +| 314 | cfg.swift:314:5:314:9 | print | 'print -> Argument -V x -^ print(...)' | +| 315 | cfg.swift:315:5:315:5 | x | 'x -> 1 -^ ... -= ...' | | 319 | cfg.swift:319:1:332:1 | FunctionDeclaration | 'FunctionDeclaration' | | 319 | cfg.swift:319:12:319:12 | x | 'x -^ Block' | | 320 | cfg.swift:320:3:330:3 | WhileStmt | 'WhileStmt' | -| 320 | cfg.swift:320:9:320:9 | x | 'x -> 0 -^ BinaryExpr' | +| 320 | cfg.swift:320:9:320:9 | x | 'x -> 0 -^ ... >= ...' | | 320 | cfg.swift:320:16:330:3 | Block | 'Block' | -| 321 | cfg.swift:321:5:321:9 | print | 'print -> Argument -V x -^ CallExpr' | -| 322 | cfg.swift:322:5:322:5 | x | 'x -> 1 -^ BinaryExpr' | -| 323 | cfg.swift:323:5:328:5 | IfExpr | 'IfExpr -V x -> 100 -^ BinaryExpr' | +| 321 | cfg.swift:321:5:321:9 | print | 'print -> Argument -V x -^ print(...)' | +| 322 | cfg.swift:322:5:322:5 | x | 'x -> 1 -^ ... -= ...' | +| 323 | cfg.swift:323:5:328:5 | IfExpr | 'IfExpr -V x -> 100 -^ ... > ...' | | 323 | cfg.swift:323:16:325:5 | Block | 'Block' | | 324 | cfg.swift:324:7:324:11 | BreakExpr | 'BreakExpr' | -| 326 | cfg.swift:326:10:328:5 | IfExpr | 'IfExpr -V x -> 50 -^ BinaryExpr' | +| 326 | cfg.swift:326:10:328:5 | IfExpr | 'IfExpr -V x -> 50 -^ ... > ...' | | 326 | cfg.swift:326:20:328:5 | Block | 'Block' | | 327 | cfg.swift:327:7:327:14 | ContinueExpr | 'ContinueExpr' | -| 329 | cfg.swift:329:5:329:9 | print | 'print -> Argument -V "Iter" -^ CallExpr' | -| 331 | cfg.swift:331:3:331:7 | print | 'print -> Argument -V "Done" -^ CallExpr' | +| 329 | cfg.swift:329:5:329:9 | print | 'print -> Argument -V "Iter" -^ print(...)' | +| 331 | cfg.swift:331:3:331:7 | print | 'print -> Argument -V "Done" -^ print(...)' | | 334 | cfg.swift:334:1:349:1 | FunctionDeclaration | 'FunctionDeclaration' | | 334 | cfg.swift:334:18:334:18 | x | 'x -^ Block' | | 335 | cfg.swift:335:3:348:3 | LabeledStmt | 'LabeledStmt -V WhileStmt' | -| 335 | cfg.swift:335:16:335:16 | x | 'x -> 0 -^ BinaryExpr' | +| 335 | cfg.swift:335:16:335:16 | x | 'x -> 0 -^ ... >= ...' | | 335 | cfg.swift:335:23:348:3 | Block | 'Block' | | 336 | cfg.swift:336:5:346:5 | LabeledStmt | 'LabeledStmt -V WhileStmt' | -| 336 | cfg.swift:336:18:336:18 | x | 'x -> 0 -^ BinaryExpr' | +| 336 | cfg.swift:336:18:336:18 | x | 'x -> 0 -^ ... >= ...' | | 336 | cfg.swift:336:25:346:5 | Block | 'Block' | -| 337 | cfg.swift:337:7:337:11 | print | 'print -> Argument -V x -^ CallExpr' | -| 338 | cfg.swift:338:7:338:7 | x | 'x -> 1 -^ BinaryExpr' | -| 339 | cfg.swift:339:7:344:7 | IfExpr | 'IfExpr -V x -> 100 -^ BinaryExpr' | +| 337 | cfg.swift:337:7:337:11 | print | 'print -> Argument -V x -^ print(...)' | +| 338 | cfg.swift:338:7:338:7 | x | 'x -> 1 -^ ... -= ...' | +| 339 | cfg.swift:339:7:344:7 | IfExpr | 'IfExpr -V x -> 100 -^ ... > ...' | | 339 | cfg.swift:339:18:341:7 | Block | 'Block' | | 340 | cfg.swift:340:9:340:19 | BreakExpr | 'BreakExpr' | -| 342 | cfg.swift:342:12:344:7 | IfExpr | 'IfExpr -V x -> 50 -^ BinaryExpr' | +| 342 | cfg.swift:342:12:344:7 | IfExpr | 'IfExpr -V x -> 50 -^ ... > ...' | | 342 | cfg.swift:342:22:344:7 | Block | 'Block' | | 343 | cfg.swift:343:9:343:22 | ContinueExpr | 'ContinueExpr' | -| 345 | cfg.swift:345:7:345:11 | print | 'print -> Argument -V "Iter" -^ CallExpr' | -| 347 | cfg.swift:347:5:347:9 | print | 'print -> Argument -V "Done" -^ CallExpr' | +| 345 | cfg.swift:345:7:345:11 | print | 'print -> Argument -V "Iter" -^ print(...)' | +| 347 | cfg.swift:347:5:347:9 | print | 'print -> Argument -V "Done" -^ print(...)' | | 351 | cfg.swift:351:1:356:1 | FunctionDeclaration | 'FunctionDeclaration' | | 351 | cfg.swift:351:17:351:17 | x | 'x -^ Block' | | 352 | cfg.swift:352:3:355:16 | DoWhileStmt | 'DoWhileStmt' | | 352 | cfg.swift:352:10:355:3 | Block | 'Block' | -| 353 | cfg.swift:353:5:353:9 | print | 'print -> Argument -V x -^ CallExpr' | -| 354 | cfg.swift:354:5:354:5 | x | 'x -> 1 -^ BinaryExpr' | -| 355 | cfg.swift:355:11:355:11 | x | 'x -> 0 -^ BinaryExpr' | +| 353 | cfg.swift:353:5:353:9 | print | 'print -> Argument -V x -^ print(...)' | +| 354 | cfg.swift:354:5:354:5 | x | 'x -> 1 -^ ... -= ...' | +| 355 | cfg.swift:355:11:355:11 | x | 'x -> 0 -^ ... >= ...' | | 358 | cfg.swift:358:1:363:1 | Block | 'Block' | | 358 | cfg.swift:358:1:363:1 | FunctionDeclaration | 'FunctionDeclaration' | | 359 | cfg.swift:359:3:359:11 | VariableDeclaration | 'VariableDeclaration -V x -> 0' | | 360 | cfg.swift:360:3:362:3 | WhileStmt | 'WhileStmt' | -| 360 | cfg.swift:360:9:360:9 | x | 'x -> 10 -^ BinaryExpr' | +| 360 | cfg.swift:360:9:360:9 | x | 'x -> 10 -^ ... < ...' | | 360 | cfg.swift:360:17:362:3 | Block | 'Block' | -| 361 | cfg.swift:361:5:361:5 | x | 'x -> 1 -^ BinaryExpr' | +| 361 | cfg.swift:361:5:361:5 | x | 'x -> 1 -^ ... += ...' | | 365 | cfg.swift:365:1:374:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V OptionalC' | | 366 | cfg.swift:366:3:366:11 | VariableDeclaration | 'VariableDeclaration -V c -> Optional -V C -^ GenericTypeExpr' | | 367 | cfg.swift:367:3:369:3 | ConstructorDeclaration | 'ConstructorDeclaration' | | 367 | cfg.swift:367:8:367:10 | arg | 'arg -^ Block' | -| 368 | cfg.swift:368:5:368:5 | c | 'c -> arg -^ BinaryExpr' | +| 368 | cfg.swift:368:5:368:5 | c | 'c -> arg -^ ... = ...' | | 371 | cfg.swift:371:3:373:3 | Block | 'Block' | | 371 | cfg.swift:371:3:373:3 | FunctionDeclaration | 'FunctionDeclaration' | | 372 | cfg.swift:372:12:372:12 | c | 'c -^ ReturnExpr' | | 376 | cfg.swift:376:1:378:1 | FunctionDeclaration | 'FunctionDeclaration' | | 376 | cfg.swift:376:19:376:19 | c | 'c -^ Block' | -| 377 | cfg.swift:377:10:377:10 | c | 'c -^ MemberAccessExpr -^ CallExpr -^ MemberAccessExpr -^ CallExpr -^ ReturnExpr' | +| 377 | cfg.swift:377:10:377:10 | c | 'c -^ ... .getOptional -^ ... .getOptional(...) -^ ... .getMyInt -^ ... .getMyInt(...) -^ ReturnExpr' | | 380 | cfg.swift:380:1:384:1 | FunctionDeclaration | 'FunctionDeclaration' | | 380 | cfg.swift:380:18:380:18 | x | 'x -> y -^ Block' | | 381 | cfg.swift:381:10:383:3 | Block | 'Block' | -| 381 | cfg.swift:381:13:381:22 | VariableDeclaration | 'VariableDeclaration -V z -> x -> y -^ BinaryExpr -> VariableDeclaration -V t -> "literal" -^ FunctionExpr -^ ReturnExpr' | +| 381 | cfg.swift:381:13:381:22 | VariableDeclaration | 'VariableDeclaration -V z -> x -> y -^ ... + ... -> VariableDeclaration -V t -> "literal" -^ FunctionExpr -^ ReturnExpr' | | 382 | cfg.swift:382:12:382:12 | z | 'z -^ ReturnExpr' | | 386 | cfg.swift:386:1:388:1 | FunctionDeclaration | 'FunctionDeclaration' | | 386 | cfg.swift:386:23:386:23 | t | 't -^ Block' | -| 387 | cfg.swift:387:10:387:10 | t | 't -^ MemberAccessExpr -> t -^ MemberAccessExpr -^ BinaryExpr -> t -^ MemberAccessExpr -^ BinaryExpr -> Argument -V 1 -> Argument -V 2 -> Argument -V 3 -^ TupleExpr -^ MemberAccessExpr -^ BinaryExpr -^ ReturnExpr' | +| 387 | cfg.swift:387:10:387:10 | t | 't -^ ... .a -> t -^ ... .1 -^ ... + ... -> t -^ ... .c -^ ... + ... -> Argument -V 1 -> Argument -V 2 -> Argument -V 3 -^ TupleExpr -^ ... .0 -^ ... + ... -^ ReturnExpr' | | 390 | cfg.swift:390:1:394:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V Derived -^ BaseType -V C' | | 391 | cfg.swift:391:3:393:3 | Block | 'Block' | | 391 | cfg.swift:391:3:393:3 | ConstructorDeclaration | 'ConstructorDeclaration' | -| 392 | cfg.swift:392:5:392:9 | | ' -^ MemberAccessExpr -> Argument -V 0 -^ CallExpr' | +| 392 | cfg.swift:392:5:392:9 | | ' -^ ... .init -> Argument -V 0 -^ ... .init(...)' | | 396 | cfg.swift:396:1:404:1 | FunctionDeclaration | 'FunctionDeclaration' | | 396 | cfg.swift:396:21:396:21 | x | 'x -^ Block' | | 397 | cfg.swift:397:3:402:3 | TryExpr | 'TryExpr -V Block' | -| 398 | cfg.swift:398:5:398:24 | UnaryExpr | 'UnaryExpr' | -| 398 | cfg.swift:398:9:398:18 | mightThrow | 'mightThrow -> Argument -V 0 -^ CallExpr' | -| 399 | cfg.swift:399:5:399:9 | print | 'print -> Argument -V "Did not throw." -^ CallExpr' | -| 400 | cfg.swift:400:10:400:19 | mightThrow | 'mightThrow -> Argument -V 0 -^ CallExpr -^ UnaryExpr' | -| 401 | cfg.swift:401:5:401:9 | print | 'print -> Argument -V "Still did not throw." -^ CallExpr' | +| 398 | cfg.swift:398:5:398:24 | try ... | 'try ...' | +| 398 | cfg.swift:398:9:398:18 | mightThrow | 'mightThrow -> Argument -V 0 -^ mightThrow(...)' | +| 399 | cfg.swift:399:5:399:9 | print | 'print -> Argument -V "Did not throw." -^ print(...)' | +| 400 | cfg.swift:400:10:400:19 | mightThrow | 'mightThrow -> Argument -V 0 -^ mightThrow(...) -^ try! ...' | +| 401 | cfg.swift:401:5:401:9 | print | 'print -> Argument -V "Still did not throw." -^ print(...)' | | 403 | cfg.swift:403:10:403:10 | 0 | '0 -^ ReturnExpr' | | 406 | cfg.swift:406:1:415:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V Structors' | | 407 | cfg.swift:407:3:407:16 | VariableDeclaration | 'VariableDeclaration -V field -> Int' | | 408 | cfg.swift:408:3:410:3 | Block | 'Block' | | 408 | cfg.swift:408:3:410:3 | ConstructorDeclaration | 'ConstructorDeclaration' | -| 409 | cfg.swift:409:5:409:9 | field | 'field -> 10 -^ BinaryExpr' | +| 409 | cfg.swift:409:5:409:9 | field | 'field -> 10 -^ ... = ...' | | 412 | cfg.swift:412:3:414:3 | Block | 'Block' | | 412 | cfg.swift:412:3:414:3 | DestructorDeclaration | 'DestructorDeclaration' | -| 413 | cfg.swift:413:5:413:9 | field | 'field -> 0 -^ BinaryExpr' | +| 413 | cfg.swift:413:5:413:9 | field | 'field -> 0 -^ ... = ...' | | 417 | cfg.swift:417:1:419:1 | FunctionDeclaration | 'FunctionDeclaration' | | 417 | cfg.swift:417:24:417:24 | x | 'x -> y -^ Block' | | 418 | cfg.swift:418:10:418:25 | MapLiteral | 'MapLiteral -^ ReturnExpr' | @@ -350,12 +350,12 @@ | 423 | cfg.swift:423:5:423:14 | VariableDeclaration | 'VariableDeclaration -V x -> Int' | | 424 | cfg.swift:424:5:426:5 | Block | 'Block' | | 424 | cfg.swift:424:5:426:5 | ConstructorDeclaration | 'ConstructorDeclaration' | -| 425 | cfg.swift:425:7:425:7 | x | 'x -> 10 -^ BinaryExpr' | +| 425 | cfg.swift:425:7:425:7 | x | 'x -> 10 -^ ... = ...' | | 429 | cfg.swift:429:3:434:3 | ClassLikeDeclaration | 'ClassLikeDeclaration -V MyLocalStruct' | | 430 | cfg.swift:430:5:430:14 | VariableDeclaration | 'VariableDeclaration -V x -> Int' | | 431 | cfg.swift:431:5:433:5 | Block | 'Block' | | 431 | cfg.swift:431:5:433:5 | ConstructorDeclaration | 'ConstructorDeclaration' | -| 432 | cfg.swift:432:7:432:7 | x | 'x -> 10 -^ BinaryExpr' | +| 432 | cfg.swift:432:7:432:7 | x | 'x -> 10 -^ ... = ...' | | 436 | cfg.swift:436:3:439:3 | ClassLikeDeclaration | 'ClassLikeDeclaration -V MyLocalEnum' | | 437 | cfg.swift:437:10:437:10 | VariableDeclaration | 'VariableDeclaration -V A' | | 438 | cfg.swift:438:10:438:10 | VariableDeclaration | 'VariableDeclaration -V B' | @@ -373,10 +373,10 @@ | 458 | cfg.swift:458:3:458:31 | VariableDeclaration | 'VariableDeclaration -V kpGet_bs_0_x -> ' | | 459 | cfg.swift:459:3:459:37 | VariableDeclaration | 'VariableDeclaration -V kpGet_mayB_force_x -> ' | | 460 | cfg.swift:460:3:460:31 | VariableDeclaration | 'VariableDeclaration -V kpGet_mayB_x -> ' | -| 462 | cfg.swift:462:3:462:45 | VariableDeclaration | 'VariableDeclaration -V apply_kpGet_b_x -> a -> Argument -V kpGet_b_x -^ CallExpr' | -| 463 | cfg.swift:463:3:463:51 | VariableDeclaration | 'VariableDeclaration -V apply_kpGet_bs_0_x -> a -> Argument -V kpGet_bs_0_x -^ CallExpr' | -| 464 | cfg.swift:464:3:464:63 | VariableDeclaration | 'VariableDeclaration -V apply_kpGet_mayB_force_x -> a -> Argument -V kpGet_mayB_force_x -^ CallExpr' | -| 465 | cfg.swift:465:3:465:51 | VariableDeclaration | 'VariableDeclaration -V apply_kpGet_mayB_x -> a -> Argument -V kpGet_mayB_x -^ CallExpr' | +| 462 | cfg.swift:462:3:462:45 | VariableDeclaration | 'VariableDeclaration -V apply_kpGet_b_x -> a -> Argument -V kpGet_b_x -^ a(...)' | +| 463 | cfg.swift:463:3:463:51 | VariableDeclaration | 'VariableDeclaration -V apply_kpGet_bs_0_x -> a -> Argument -V kpGet_bs_0_x -^ a(...)' | +| 464 | cfg.swift:464:3:464:63 | VariableDeclaration | 'VariableDeclaration -V apply_kpGet_mayB_force_x -> a -> Argument -V kpGet_mayB_force_x -^ a(...)' | +| 465 | cfg.swift:465:3:465:51 | VariableDeclaration | 'VariableDeclaration -V apply_kpGet_mayB_x -> a -> Argument -V kpGet_mayB_x -^ a(...)' | | 468 | cfg.swift:468:1:495:1 | Block | 'Block' | | 468 | cfg.swift:468:1:495:1 | FunctionDeclaration | 'FunctionDeclaration' | | 469 | cfg.swift:469:1:475:6 | | '' | @@ -390,43 +390,43 @@ | 498 | cfg.swift:498:3:498:11 | VariableDeclaration | 'VariableDeclaration -V x -> 0' | | 500 | cfg.swift:500:3:502:3 | IfExpr | 'IfExpr -V ' | | 500 | cfg.swift:500:30:502:3 | Block | 'Block' | -| 501 | cfg.swift:501:5:501:5 | x | 'x -> 1 -^ BinaryExpr' | +| 501 | cfg.swift:501:5:501:5 | x | 'x -> 1 -^ ... += ...' | | 504 | cfg.swift:504:3:506:3 | IfExpr | 'IfExpr -V ' | | 504 | cfg.swift:504:33:506:3 | Block | 'Block' | -| 505 | cfg.swift:505:5:505:5 | x | 'x -> 1 -^ BinaryExpr' | +| 505 | cfg.swift:505:5:505:5 | x | 'x -> 1 -^ ... += ...' | | 508 | cfg.swift:508:3:510:3 | IfExpr | 'IfExpr -V ' | | 508 | cfg.swift:508:49:510:3 | Block | 'Block' | -| 509 | cfg.swift:509:5:509:5 | x | 'x -> 1 -^ BinaryExpr' | +| 509 | cfg.swift:509:5:509:5 | x | 'x -> 1 -^ ... += ...' | | 512 | cfg.swift:512:3:514:3 | GuardIfStmt | 'GuardIfStmt -V ' | | 512 | cfg.swift:512:38:514:3 | Block | 'Block' | -| 513 | cfg.swift:513:5:513:5 | x | 'x -> 1 -^ BinaryExpr' | -| 516 | cfg.swift:516:3:519:3 | IfExpr | 'IfExpr -V BinaryExpr -V ' | +| 513 | cfg.swift:513:5:513:5 | x | 'x -> 1 -^ ... += ...' | +| 516 | cfg.swift:516:3:519:3 | IfExpr | 'IfExpr -V ... && ... -V ' | | 517 | cfg.swift:517:7:517:27 | | '' | | 517 | cfg.swift:517:29:519:3 | Block | 'Block' | -| 518 | cfg.swift:518:5:518:5 | x | 'x -> 1 -^ BinaryExpr' | +| 518 | cfg.swift:518:5:518:5 | x | 'x -> 1 -^ ... += ...' | | 521 | cfg.swift:521:10:521:10 | x | 'x -^ ReturnExpr' | | 524 | cfg.swift:524:1:538:1 | Block | 'Block' | | 524 | cfg.swift:524:1:538:1 | FunctionDeclaration | 'FunctionDeclaration' | -| 525 | cfg.swift:525:5:533:6 | VariableDeclaration | 'VariableDeclaration -V stream -> AsyncStream -> Argument -V Int -^ MemberAccessExpr -> Argument -V . -^ MemberAccessExpr -> Argument -V 5 -^ CallExpr -> Argument -V FunctionExpr -^ CallExpr' | +| 525 | cfg.swift:525:5:533:6 | VariableDeclaration | 'VariableDeclaration -V stream -> AsyncStream -> Argument -V Int -^ ... .self -> Argument -V . -^ ... .bufferingNewest -> Argument -V 5 -^ ... .bufferingNewest(...) -> Argument -V FunctionExpr -^ AsyncStream(...)' | | 525 | cfg.swift:525:78:533:5 | Block | 'Block' | | 526 | cfg.swift:526:9:526:20 | continuation | 'continuation' | -| 527 | cfg.swift:527:13:527:16 | Task | 'Task -^ MemberAccessExpr -^ Argument -V FunctionExpr -^ CallExpr' | +| 527 | cfg.swift:527:13:527:16 | Task | 'Task -^ ... .detached -^ Argument -V FunctionExpr -^ ... .detached(...)' | | 527 | cfg.swift:527:27:532:13 | Block | 'Block' | -| 528 | cfg.swift:528:17:530:17 | ForEachStmt | 'ForEachStmt -V 1 -> 100 -^ BinaryExpr' | +| 528 | cfg.swift:528:17:530:17 | ForEachStmt | 'ForEachStmt -V 1 -> 100 -^ ... ... ...' | | 528 | cfg.swift:528:21:528:21 | i | 'i -> Block' | -| 529 | cfg.swift:529:21:529:32 | continuation | 'continuation -^ MemberAccessExpr -> Argument -V i -^ CallExpr' | -| 531 | cfg.swift:531:17:531:28 | continuation | 'continuation -^ MemberAccessExpr -^ CallExpr' | +| 529 | cfg.swift:529:21:529:32 | continuation | 'continuation -^ ... .yield -> Argument -V i -^ ... .yield(...)' | +| 531 | cfg.swift:531:17:531:28 | continuation | 'continuation -^ ... .finish -^ ... .finish(...)' | | 535 | cfg.swift:535:5:537:5 | ForEachStmt | 'ForEachStmt -V stream' | | 535 | cfg.swift:535:19:535:19 | i | 'i -> Block' | -| 536 | cfg.swift:536:9:536:13 | print | 'print -> Argument -V i -^ CallExpr' | +| 536 | cfg.swift:536:9:536:13 | print | 'print -> Argument -V i -^ print(...)' | | 540 | cfg.swift:540:1:544:1 | FunctionDeclaration | 'FunctionDeclaration' | | 540 | cfg.swift:540:24:540:24 | x | 'x -^ Block' | | 541 | cfg.swift:541:3:543:9 | ReturnExpr | 'ReturnExpr' | -| 542 | cfg.swift:542:5:543:9 | BinaryExpr | 'BinaryExpr -V x' | +| 542 | cfg.swift:542:5:543:9 | ... ?? ... | '... ?? ... -V x' | | 543 | cfg.swift:543:9:543:9 | 0 | '0' | | 546 | cfg.swift:546:1:553:1 | FunctionDeclaration | 'FunctionDeclaration' | | 546 | cfg.swift:546:25:546:25 | x | 'x -^ Block' | -| 547 | cfg.swift:547:3:552:3 | IfExpr | 'IfExpr -V BinaryExpr -V x' | +| 547 | cfg.swift:547:3:552:3 | IfExpr | 'IfExpr -V ... ?? ... -V x' | | 548 | cfg.swift:548:7:548:11 | false | 'false' | | 548 | cfg.swift:548:13:550:3 | Block | 'Block' | | 549 | cfg.swift:549:12:549:12 | 1 | '1 -^ ReturnExpr' | @@ -434,36 +434,36 @@ | 551 | cfg.swift:551:12:551:12 | 0 | '0 -^ ReturnExpr' | | 555 | cfg.swift:555:1:557:1 | FunctionDeclaration | 'FunctionDeclaration' | | 555 | cfg.swift:555:24:555:27 | expr | 'expr -^ Block' | -| 556 | cfg.swift:556:10:556:13 | expr | 'expr -^ CallExpr -^ ReturnExpr' | +| 556 | cfg.swift:556:10:556:13 | expr | 'expr -^ expr(...) -^ ReturnExpr' | | 559 | cfg.swift:559:1:561:1 | Block | 'Block' | | 559 | cfg.swift:559:1:561:1 | FunctionDeclaration | 'FunctionDeclaration' | -| 560 | cfg.swift:560:3:560:17 | usesAutoclosure | 'usesAutoclosure -> Argument -V 1 -^ CallExpr' | +| 560 | cfg.swift:560:3:560:17 | usesAutoclosure | 'usesAutoclosure -> Argument -V 1 -^ usesAutoclosure(...)' | | 565 | cfg.swift:565:1:567:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V MyProtocol' | | 566 | cfg.swift:566:2:566:21 | Block | 'Block' | | 566 | cfg.swift:566:2:566:21 | FunctionDeclaration | 'FunctionDeclaration' | | 569 | cfg.swift:569:1:571:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V MyProcotolImpl -^ BaseType -V MyProtocol' | | 570 | cfg.swift:570:2:570:34 | Block | 'Block -V 0 -^ ReturnExpr' | | 570 | cfg.swift:570:2:570:34 | FunctionDeclaration | 'FunctionDeclaration' | -| 573 | cfg.swift:573:1:573:62 | Block | 'Block -V MyProcotolImpl -^ CallExpr -^ ReturnExpr' | +| 573 | cfg.swift:573:1:573:62 | Block | 'Block -V MyProcotolImpl -^ MyProcotolImpl(...) -^ ReturnExpr' | | 573 | cfg.swift:573:1:573:62 | FunctionDeclaration | 'FunctionDeclaration' | -| 574 | cfg.swift:574:1:574:70 | Block | 'Block -V MyProcotolImpl -^ CallExpr -^ ReturnExpr' | +| 574 | cfg.swift:574:1:574:70 | Block | 'Block -V MyProcotolImpl -^ MyProcotolImpl(...) -^ ReturnExpr' | | 574 | cfg.swift:574:1:574:70 | FunctionDeclaration | 'FunctionDeclaration' | | 576 | cfg.swift:576:1:576:23 | FunctionDeclaration | 'FunctionDeclaration' | | 576 | cfg.swift:576:11:576:13 | arg | 'arg -^ Block' | | 578 | cfg.swift:578:1:583:1 | FunctionDeclaration | 'FunctionDeclaration' | | 578 | cfg.swift:578:30:578:30 | x | 'x -> y -^ Block' | -| 579 | cfg.swift:579:2:579:5 | sink | 'sink -> Argument -V x -^ MemberAccessExpr -^ CallExpr -^ CallExpr' | -| 580 | cfg.swift:580:2:580:5 | sink | 'sink -> Argument -V y -^ MemberAccessExpr -^ CallExpr -^ CallExpr' | -| 581 | cfg.swift:581:2:581:5 | sink | 'sink -> Argument -V getMyProtocol -^ CallExpr -^ MemberAccessExpr -^ CallExpr -^ CallExpr' | -| 582 | cfg.swift:582:2:582:5 | sink | 'sink -> Argument -V getMyProtocolImpl -^ CallExpr -^ MemberAccessExpr -^ CallExpr -^ CallExpr' | +| 579 | cfg.swift:579:2:579:5 | sink | 'sink -> Argument -V x -^ ... .source -^ ... .source(...) -^ sink(...)' | +| 580 | cfg.swift:580:2:580:5 | sink | 'sink -> Argument -V y -^ ... .source -^ ... .source(...) -^ sink(...)' | +| 581 | cfg.swift:581:2:581:5 | sink | 'sink -> Argument -V getMyProtocol -^ getMyProtocol(...) -^ ... .source -^ ... .source(...) -^ sink(...)' | +| 582 | cfg.swift:582:2:582:5 | sink | 'sink -> Argument -V getMyProtocolImpl -^ getMyProtocolImpl(...) -^ ... .source -^ ... .source(...) -^ sink(...)' | | 585 | cfg.swift:585:1:593:1 | FunctionDeclaration | 'FunctionDeclaration' | | 585 | cfg.swift:585:23:585:23 | x | 'x -^ Block' | | 586 | cfg.swift:586:3:589:3 | VariableDeclaration | 'VariableDeclaration -V a -> SwitchExpr -V x' | | 587 | cfg.swift:587:5:587:17 | Block | 'Block -V 1' | -| 587 | cfg.swift:587:5:587:17 | SwitchCase | 'SwitchCase -V 0 -> 5 -^ BinaryExpr' | +| 587 | cfg.swift:587:5:587:17 | SwitchCase | 'SwitchCase -V 0 -> 5 -^ ... ..< ...' | | 588 | cfg.swift:588:5:588:14 | SwitchCase | 'SwitchCase -V Block -V 2' | | 590 | cfg.swift:590:3:592:18 | VariableDeclaration | 'VariableDeclaration -V b' | -| 591 | cfg.swift:591:9:592:18 | IfExpr | 'IfExpr -V x -> 42 -^ BinaryExpr' | +| 591 | cfg.swift:591:9:592:18 | IfExpr | 'IfExpr -V x -> 42 -^ ... < ...' | | 591 | cfg.swift:591:21:591:25 | Block | 'Block -V 1' | | 592 | cfg.swift:592:14:592:18 | Block | 'Block -V 2' | | 596 | cfg.swift:596:1:598:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V ValueGenericsStruct -> TypeParameter -V N -> Int' | @@ -471,5 +471,5 @@ | 600 | cfg.swift:600:1:604:1 | FunctionDeclaration | 'FunctionDeclaration' | | 600 | cfg.swift:600:36:600:40 | value | 'value -^ Block' | | 601 | cfg.swift:601:5:601:13 | VariableDeclaration | 'VariableDeclaration -V x -> N' | -| 602 | cfg.swift:602:5:602:9 | print | 'print -> Argument -V x -^ CallExpr' | -| 603 | cfg.swift:603:5:603:5 | _ | '_ -> value -^ BinaryExpr' | +| 602 | cfg.swift:602:5:602:9 | print | 'print -> Argument -V x -^ print(...)' | +| 603 | cfg.swift:603:5:603:5 | _ | '_ -> value -^ ... = ...' | diff --git a/unified/ql/test/library-tests/controlflow/cfg.expected b/unified/ql/test/library-tests/controlflow/cfg.expected index a97c8b8d74f9..fc1f15c91c5f 100644 --- a/unified/ql/test/library-tests/controlflow/cfg.expected +++ b/unified/ql/test/library-tests/controlflow/cfg.expected @@ -4,46 +4,46 @@ bbContinues | cfg.swift:525:78:525:78 | Block | 'Block goto Task(+2)' | | cfg.swift:526:9:526:20 | continuation | 'continuation goto Block(-1)' | bbStep -| cfg.swift:20:9:20:14 | BinaryExpr | 'BinaryExpr : false -> Block(+0)' | -| cfg.swift:20:9:20:14 | BinaryExpr | 'BinaryExpr : true -> GuardIfStmt(+3)' | -| cfg.swift:23:9:23:14 | BinaryExpr | 'BinaryExpr : false -> Block(+0)' | -| cfg.swift:30:9:30:24 | CallExpr | 'CallExpr : exception -> CatchClause(+5)' | -| cfg.swift:30:9:30:24 | CallExpr | 'CallExpr : successor -> UnaryExpr(+0)' | -| cfg.swift:33:5:33:33 | CallExpr | 'CallExpr : successor -> 0(+11)' | +| cfg.swift:20:9:20:14 | ... >= ... | '... >= ... : false -> Block(+0)' | +| cfg.swift:20:9:20:14 | ... >= ... | '... >= ... : true -> GuardIfStmt(+3)' | +| cfg.swift:23:9:23:14 | ... <= ... | '... <= ... : false -> Block(+0)' | +| cfg.swift:30:9:30:24 | mightThrow(...) | 'mightThrow(...) : exception -> CatchClause(+5)' | +| cfg.swift:30:9:30:24 | mightThrow(...) | 'mightThrow(...) : successor -> try ...(+0)' | +| cfg.swift:33:5:33:33 | print(...) | 'print(...) : successor -> 0(+11)' | | cfg.swift:35:5:35:5 | OrPattern | 'OrPattern : match -> Block(+0)' | | cfg.swift:35:5:35:5 | OrPattern | 'OrPattern : no-match -> CatchClause(+2)' | -| cfg.swift:37:11:37:39 | CallExpr | 'CallExpr : match -> Block(+0)' | -| cfg.swift:37:11:37:39 | CallExpr | 'CallExpr : no-match -> CatchClause(+2)' | +| cfg.swift:37:11:37:39 | ... .error3(...) | '... .error3(...) : match -> Block(+0)' | +| cfg.swift:37:11:37:39 | ... .error3(...) | '... .error3(...) : no-match -> CatchClause(+2)' | | cfg.swift:39:11:39:20 | | ' : match -> Block(+0)' | | cfg.swift:39:11:39:20 | | ' : no-match -> CatchClause(+2)' | -| cfg.swift:40:5:40:20 | CallExpr | 'CallExpr : successor -> 0(+4)' | -| cfg.swift:42:5:42:35 | CallExpr | 'CallExpr : successor -> 0(+2)' | -| cfg.swift:140:12:140:17 | BinaryExpr | 'BinaryExpr : empty -> SwitchExpr(+3)' | -| cfg.swift:140:12:140:17 | BinaryExpr | 'BinaryExpr : non-empty -> _(+0)' | +| cfg.swift:40:5:40:20 | print(...) | 'print(...) : successor -> 0(+4)' | +| cfg.swift:42:5:42:35 | print(...) | 'print(...) : successor -> 0(+2)' | +| cfg.swift:140:12:140:17 | ... ... ... | '... ... ... : empty -> SwitchExpr(+3)' | +| cfg.swift:140:12:140:17 | ... ... ... | '... ... ... : non-empty -> _(+0)' | | cfg.swift:141:9:141:12 | Block | 'Block : successor -> SwitchExpr(+2)' | | cfg.swift:141:9:141:12 | Block | 'Block : successor -> _(-1)' | | cfg.swift:144:5:144:5 | OrPattern | 'OrPattern : match -> Block(+0)' | | cfg.swift:144:5:144:5 | OrPattern | 'OrPattern : no-match -> SwitchCase(+3)' | | cfg.swift:147:10:147:10 | ConditionalPattern | 'ConditionalPattern : match -> Block(+0)' | | cfg.swift:147:10:147:10 | ConditionalPattern | 'ConditionalPattern : no-match -> SwitchCase(+4)' | -| cfg.swift:148:10:148:15 | BinaryExpr | 'BinaryExpr : false -> x(-1)' | -| cfg.swift:148:10:148:15 | BinaryExpr | 'BinaryExpr : true -> x(+1)' | -| cfg.swift:149:13:149:17 | BinaryExpr | 'BinaryExpr : successor -> x(-2)' | -| cfg.swift:187:6:187:10 | BinaryExpr | 'BinaryExpr : false -> IfExpr(+3)' | -| cfg.swift:187:6:187:10 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | -| cfg.swift:190:11:190:16 | BinaryExpr | 'BinaryExpr : false,false,false -> Block(+5)' | -| cfg.swift:190:11:190:16 | BinaryExpr | 'BinaryExpr : true -> x(+1)' | -| cfg.swift:191:13:191:17 | BinaryExpr | 'BinaryExpr : false,false,false -> Block(+4)' | -| cfg.swift:191:13:191:17 | BinaryExpr | 'BinaryExpr : true -> UnaryExpr(+1)' | -| cfg.swift:192:15:192:20 | BinaryExpr | 'BinaryExpr : false -> Block(+0)' | -| cfg.swift:192:15:192:20 | BinaryExpr | 'BinaryExpr : true,false -> Block(+3)' | +| cfg.swift:148:10:148:15 | ... >= ... | '... >= ... : false -> x(-1)' | +| cfg.swift:148:10:148:15 | ... >= ... | '... >= ... : true -> x(+1)' | +| cfg.swift:149:13:149:17 | ... < ... | '... < ... : successor -> x(-2)' | +| cfg.swift:187:6:187:10 | ... > ... | '... > ... : false -> IfExpr(+3)' | +| cfg.swift:187:6:187:10 | ... > ... | '... > ... : true -> Block(+0)' | +| cfg.swift:190:11:190:16 | ... <= ... | '... <= ... : false,false,false -> Block(+5)' | +| cfg.swift:190:11:190:16 | ... <= ... | '... <= ... : true -> x(+1)' | +| cfg.swift:191:13:191:17 | ... > ... | '... > ... : false,false,false -> Block(+4)' | +| cfg.swift:191:13:191:17 | ... > ... | '... > ... : true -> ! ...(+1)' | +| cfg.swift:192:15:192:20 | ... == ... | '... == ... : false -> Block(+0)' | +| cfg.swift:192:15:192:20 | ... == ... | '... == ... : true,false -> Block(+3)' | | cfg.swift:201:6:201:6 | b | 'b : false -> 1(+3)' | | cfg.swift:201:6:201:6 | b | 'b : true -> Block(+0)' | -| cfg.swift:208:6:208:10 | BinaryExpr | 'BinaryExpr : false -> x(+6)' | -| cfg.swift:208:6:208:10 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | -| cfg.swift:210:8:210:13 | BinaryExpr | 'BinaryExpr : false -> x(+4)' | -| cfg.swift:210:8:210:13 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | -| cfg.swift:211:7:211:15 | BinaryExpr | 'BinaryExpr : successor -> x(+3)' | +| cfg.swift:208:6:208:10 | ... < ... | '... < ... : false -> x(+6)' | +| cfg.swift:208:6:208:10 | ... < ... | '... < ... : true -> Block(+0)' | +| cfg.swift:210:8:210:13 | ... > ... | '... > ... : false -> x(+4)' | +| cfg.swift:210:8:210:13 | ... > ... | '... > ... : true -> Block(+0)' | +| cfg.swift:211:7:211:15 | ... = ... | '... = ... : successor -> x(+3)' | | cfg.swift:218:11:218:12 | b1 | 'b1 : false -> b3(+2)' | | cfg.swift:218:11:218:12 | b1 | 'b1 : true -> b2(+1)' | | cfg.swift:219:13:219:14 | b2 | 'b2 : false,false -> "!b2 \|\| !b3"(+3)' | @@ -55,69 +55,69 @@ bbStep | cfg.swift:226:6:226:6 | b | 'b : false -> Bool(+2)' | | cfg.swift:226:6:226:6 | b | 'b : true -> true(+1)' | | cfg.swift:227:8:227:11 | true | 'true : true -> Block(+1)' | -| cfg.swift:228:7:228:17 | CallExpr | 'CallExpr : false -> Block(+3)' | -| cfg.swift:228:7:228:17 | CallExpr | 'CallExpr : true,true -> Block(+0)' | +| cfg.swift:228:7:228:17 | Bool(...) | 'Bool(...) : false -> Block(+3)' | +| cfg.swift:228:7:228:17 | Bool(...) | 'Bool(...) : true,true -> Block(+0)' | | cfg.swift:243:6:243:6 | b | 'b : false -> Block(+3)' | | cfg.swift:243:6:243:6 | b | 'b : true -> Block(+0)' | -| cfg.swift:244:5:244:17 | CallExpr | 'CallExpr : successor -> print(+3)' | +| cfg.swift:244:5:244:17 | print(...) | 'print(...) : successor -> print(+3)' | | cfg.swift:246:8:246:9 | Block | 'Block : successor -> print(+1)' | | cfg.swift:251:7:251:8 | b1 | 'b1 : false -> b2(+0)' | | cfg.swift:251:7:251:8 | b1 | 'b1 : true,true -> Block(+0)' | | cfg.swift:251:13:251:14 | b2 | 'b2 : true,true -> Block(+0)' | | cfg.swift:313:3:313:3 | WhileStmt | 'WhileStmt : successor -> x(+0)' | -| cfg.swift:313:9:313:14 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | -| cfg.swift:315:5:315:10 | BinaryExpr | 'BinaryExpr : successor -> x(-2)' | +| cfg.swift:313:9:313:14 | ... >= ... | '... >= ... : true -> Block(+0)' | +| cfg.swift:315:5:315:10 | ... -= ... | '... -= ... : successor -> x(-2)' | | cfg.swift:320:3:320:3 | WhileStmt | 'WhileStmt : successor -> x(+0)' | -| cfg.swift:320:9:320:14 | BinaryExpr | 'BinaryExpr : false -> print(+11)' | -| cfg.swift:320:9:320:14 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | -| cfg.swift:323:8:323:14 | BinaryExpr | 'BinaryExpr : false -> IfExpr(+3)' | -| cfg.swift:323:8:323:14 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | +| cfg.swift:320:9:320:14 | ... >= ... | '... >= ... : false -> print(+11)' | +| cfg.swift:320:9:320:14 | ... >= ... | '... >= ... : true -> Block(+0)' | +| cfg.swift:323:8:323:14 | ... > ... | '... > ... : false -> IfExpr(+3)' | +| cfg.swift:323:8:323:14 | ... > ... | '... > ... : true -> Block(+0)' | | cfg.swift:324:7:324:11 | BreakExpr | 'BreakExpr : break -> print(+7)' | -| cfg.swift:326:13:326:18 | BinaryExpr | 'BinaryExpr : false -> print(+3)' | -| cfg.swift:326:13:326:18 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | +| cfg.swift:326:13:326:18 | ... > ... | '... > ... : false -> print(+3)' | +| cfg.swift:326:13:326:18 | ... > ... | '... > ... : true -> Block(+0)' | | cfg.swift:327:7:327:14 | ContinueExpr | 'ContinueExpr : continue -> x(-7)' | -| cfg.swift:329:5:329:17 | CallExpr | 'CallExpr : successor -> x(-9)' | +| cfg.swift:329:5:329:17 | print(...) | 'print(...) : successor -> x(-9)' | | cfg.swift:335:10:335:10 | WhileStmt | 'WhileStmt : successor -> x(+0)' | -| cfg.swift:335:16:335:21 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | +| cfg.swift:335:16:335:21 | ... >= ... | '... >= ... : true -> Block(+0)' | | cfg.swift:336:12:336:12 | WhileStmt | 'WhileStmt : successor -> x(+0)' | -| cfg.swift:336:18:336:23 | BinaryExpr | 'BinaryExpr : false -> print(+11)' | -| cfg.swift:336:18:336:23 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | -| cfg.swift:339:10:339:16 | BinaryExpr | 'BinaryExpr : false -> IfExpr(+3)' | -| cfg.swift:339:10:339:16 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | -| cfg.swift:342:15:342:20 | BinaryExpr | 'BinaryExpr : false -> print(+3)' | -| cfg.swift:342:15:342:20 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | +| cfg.swift:336:18:336:23 | ... >= ... | '... >= ... : false -> print(+11)' | +| cfg.swift:336:18:336:23 | ... >= ... | '... >= ... : true -> Block(+0)' | +| cfg.swift:339:10:339:16 | ... > ... | '... > ... : false -> IfExpr(+3)' | +| cfg.swift:339:10:339:16 | ... > ... | '... > ... : true -> Block(+0)' | +| cfg.swift:342:15:342:20 | ... > ... | '... > ... : false -> print(+3)' | +| cfg.swift:342:15:342:20 | ... > ... | '... > ... : true -> Block(+0)' | | cfg.swift:343:9:343:22 | ContinueExpr | 'ContinueExpr : continue -> x(-7)' | -| cfg.swift:345:7:345:19 | CallExpr | 'CallExpr : successor -> x(-9)' | -| cfg.swift:347:5:347:17 | CallExpr | 'CallExpr : successor -> x(-12)' | +| cfg.swift:345:7:345:19 | print(...) | 'print(...) : successor -> x(-9)' | +| cfg.swift:347:5:347:17 | print(...) | 'print(...) : successor -> x(-12)' | | cfg.swift:352:3:352:3 | DoWhileStmt | 'DoWhileStmt : successor -> Block(+0)' | -| cfg.swift:355:11:355:16 | BinaryExpr | 'BinaryExpr : true -> Block(-3)' | +| cfg.swift:355:11:355:16 | ... >= ... | '... >= ... : true -> Block(-3)' | | cfg.swift:360:3:360:3 | WhileStmt | 'WhileStmt : successor -> x(+0)' | -| cfg.swift:360:9:360:14 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | -| cfg.swift:361:5:361:10 | BinaryExpr | 'BinaryExpr : successor -> x(-1)' | -| cfg.swift:398:9:398:24 | CallExpr | 'CallExpr : successor -> UnaryExpr(+0)' | +| cfg.swift:360:9:360:14 | ... < ... | '... < ... : true -> Block(+0)' | +| cfg.swift:361:5:361:10 | ... += ... | '... += ... : successor -> x(-1)' | +| cfg.swift:398:9:398:24 | mightThrow(...) | 'mightThrow(...) : successor -> try ...(+0)' | | cfg.swift:500:6:500:28 | | ' : false -> IfExpr(+4)' | | cfg.swift:500:6:500:28 | | ' : true -> Block(+0)' | -| cfg.swift:501:5:501:10 | BinaryExpr | 'BinaryExpr : successor -> IfExpr(+3)' | +| cfg.swift:501:5:501:10 | ... += ... | '... += ... : successor -> IfExpr(+3)' | | cfg.swift:504:6:504:31 | | ' : false -> IfExpr(+4)' | | cfg.swift:504:6:504:31 | | ' : true -> Block(+0)' | -| cfg.swift:505:5:505:10 | BinaryExpr | 'BinaryExpr : successor -> IfExpr(+3)' | +| cfg.swift:505:5:505:10 | ... += ... | '... += ... : successor -> IfExpr(+3)' | | cfg.swift:508:6:508:47 | | ' : false -> GuardIfStmt(+4)' | | cfg.swift:508:6:508:47 | | ' : true -> Block(+0)' | -| cfg.swift:509:5:509:10 | BinaryExpr | 'BinaryExpr : successor -> GuardIfStmt(+3)' | +| cfg.swift:509:5:509:10 | ... += ... | '... += ... : successor -> GuardIfStmt(+3)' | | cfg.swift:512:9:512:31 | | ' : false -> Block(+0)' | | cfg.swift:512:9:512:31 | | ' : true -> IfExpr(+4)' | -| cfg.swift:513:5:513:10 | BinaryExpr | 'BinaryExpr : successor -> IfExpr(+3)' | +| cfg.swift:513:5:513:10 | ... += ... | '... += ... : successor -> IfExpr(+3)' | | cfg.swift:516:6:516:28 | | ' : false,false -> x(+5)' | | cfg.swift:516:6:516:28 | | ' : true -> (+1)' | | cfg.swift:517:7:517:27 | | ' : false,false -> x(+4)' | | cfg.swift:517:7:517:27 | | ' : true -> Block(+0)' | -| cfg.swift:518:5:518:10 | BinaryExpr | 'BinaryExpr : successor -> x(+3)' | -| cfg.swift:528:26:528:32 | BinaryExpr | 'BinaryExpr : empty -> continuation(+3)' | -| cfg.swift:528:26:528:32 | BinaryExpr | 'BinaryExpr : non-empty -> i(+0)' | -| cfg.swift:529:21:529:41 | CallExpr | 'CallExpr : successor -> continuation(+2)' | -| cfg.swift:529:21:529:41 | CallExpr | 'CallExpr : successor -> i(-1)' | +| cfg.swift:518:5:518:10 | ... += ... | '... += ... : successor -> x(+3)' | +| cfg.swift:528:26:528:32 | ... ... ... | '... ... ... : empty -> continuation(+3)' | +| cfg.swift:528:26:528:32 | ... ... ... | '... ... ... : non-empty -> i(+0)' | +| cfg.swift:529:21:529:41 | ... .yield(...) | '... .yield(...) : successor -> continuation(+2)' | +| cfg.swift:529:21:529:41 | ... .yield(...) | '... .yield(...) : successor -> i(-1)' | | cfg.swift:535:24:535:29 | stream | 'stream : non-empty -> i(+0)' | -| cfg.swift:536:9:536:16 | CallExpr | 'CallExpr : successor -> i(-1)' | +| cfg.swift:536:9:536:16 | print(...) | 'print(...) : successor -> i(-1)' | | cfg.swift:542:5:542:5 | x | 'x : non-null -> ReturnExpr(-1)' | | cfg.swift:542:5:542:5 | x | 'x : null -> 0(+1)' | | cfg.swift:543:9:543:9 | 0 | '0 : successor -> ReturnExpr(-2)' | @@ -125,12 +125,12 @@ bbStep | cfg.swift:547:6:547:6 | x | 'x : non-null,true -> Block(+1)' | | cfg.swift:547:6:547:6 | x | 'x : null -> false(+1)' | | cfg.swift:548:7:548:11 | false | 'false : false -> Block(+2)' | -| cfg.swift:587:10:587:14 | BinaryExpr | 'BinaryExpr : match -> Block(+0)' | -| cfg.swift:587:10:587:14 | BinaryExpr | 'BinaryExpr : no-match -> SwitchCase(+1)' | +| cfg.swift:587:10:587:14 | ... ..< ... | '... ..< ... : match -> Block(+0)' | +| cfg.swift:587:10:587:14 | ... ..< ... | '... ..< ... : no-match -> SwitchCase(+1)' | | cfg.swift:587:17:587:17 | 1 | '1 : successor -> VariableDeclaration(+3)' | | cfg.swift:588:14:588:14 | 2 | '2 : successor -> VariableDeclaration(+2)' | -| cfg.swift:591:13:591:18 | BinaryExpr | 'BinaryExpr : false -> Block(+1)' | -| cfg.swift:591:13:591:18 | BinaryExpr | 'BinaryExpr : true -> Block(+0)' | +| cfg.swift:591:13:591:18 | ... < ... | '... < ... : false -> Block(+1)' | +| cfg.swift:591:13:591:18 | ... < ... | '... < ... : true -> Block(+0)' | noCfg | cfg.swift:47:42:47:47 | String | | cfg.swift:53:34:53:34 | _ | @@ -160,7 +160,7 @@ noCfg | cfg.swift:559:6:559:20 | autoclosureTest | nonSimple | cfg.swift:10:1:10:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V MyError -^ BaseType -V Error' | -| cfg.swift:35:5:35:5 | CatchClause | 'CatchClause -V MyError -^ MemberAccessExpr -> isZero -> Argument -V x -^ CallExpr -? MyError -^ MemberAccessExpr -^ ConditionalPattern -^ OrPattern' | +| cfg.swift:35:5:35:5 | CatchClause | 'CatchClause -V MyError -^ ... .error1 -> isZero -> Argument -V x -^ isZero(...) -? MyError -^ ... .error2 -^ ConditionalPattern -^ OrPattern' | | cfg.swift:390:1:390:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V Derived -^ BaseType -V C' | -| cfg.swift:527:13:527:16 | Task | 'Task -^ MemberAccessExpr -^ Argument -V FunctionExpr -^ CallExpr' | +| cfg.swift:527:13:527:16 | Task | 'Task -^ ... .detached -^ Argument -V FunctionExpr -^ ... .detached(...)' | | cfg.swift:569:1:569:1 | ClassLikeDeclaration | 'ClassLikeDeclaration -V MyProcotolImpl -^ BaseType -V MyProtocol' | diff --git a/unified/ql/test/library-tests/controlflow/cfg.swift b/unified/ql/test/library-tests/controlflow/cfg.swift index d40be313fc66..2061d46cd78a 100644 --- a/unified/ql/test/library-tests/controlflow/cfg.swift +++ b/unified/ql/test/library-tests/controlflow/cfg.swift @@ -17,29 +17,29 @@ func isZero(x : Int) -> Bool { } func mightThrow(x : Int) throws -> Void { - guard x >= 0 else { // $ bbStep='BinaryExpr : false -> Block(+0)' bbStep='BinaryExpr : true -> GuardIfStmt(+3)' + guard x >= 0 else { // $ bbStep='... >= ... : false -> Block(+0)' bbStep='... >= ... : true -> GuardIfStmt(+3)' throw MyError.error1 } - guard x <= 0 else { // $ bbStep='BinaryExpr : false -> Block(+0)' + guard x <= 0 else { // $ bbStep='... <= ... : false -> Block(+0)' throw MyError.error3(withParam: x + 1) } } func tryCatch(x : Int) -> Int { do { - try mightThrow(x: 0) // $ bbStep='CallExpr : exception -> CatchClause(+5)' bbStep='CallExpr : successor -> UnaryExpr(+0)' + try mightThrow(x: 0) // $ bbStep='mightThrow(...) : exception -> CatchClause(+5)' bbStep='mightThrow(...) : successor -> try ...(+0)' print("Did not throw.") try! mightThrow(x: 0) - print("Still did not throw.") // $ bbStep='CallExpr : successor -> 0(+11)' + print("Still did not throw.") // $ bbStep='print(...) : successor -> 0(+11)' - } catch MyError.error1 , MyError.error2 where isZero(x: x) { // $ bbStep='OrPattern : match -> Block(+0)' bbStep='OrPattern : no-match -> CatchClause(+2)' nonSimple='CatchClause -V MyError -^ MemberAccessExpr -> isZero -> Argument -V x -^ CallExpr -? MyError -^ MemberAccessExpr -^ ConditionalPattern -^ OrPattern' + } catch MyError.error1 , MyError.error2 where isZero(x: x) { // $ bbStep='OrPattern : match -> Block(+0)' bbStep='OrPattern : no-match -> CatchClause(+2)' nonSimple='CatchClause -V MyError -^ ... .error1 -> isZero -> Argument -V x -^ isZero(...) -? MyError -^ ... .error2 -^ ConditionalPattern -^ OrPattern' return 0 - } catch MyError.error3(let withParam) { // $ bbStep='CallExpr : match -> Block(+0)' bbStep='CallExpr : no-match -> CatchClause(+2)' + } catch MyError.error3(let withParam) { // $ bbStep='... .error3(...) : match -> Block(+0)' bbStep='... .error3(...) : no-match -> CatchClause(+2)' return withParam } catch is MyError { // $ bbStep=' : match -> Block(+0)' bbStep=' : no-match -> CatchClause(+2)' - print("MyError") // $ bbStep='CallExpr : successor -> 0(+4)' + print("MyError") // $ bbStep='print(...) : successor -> 0(+4)' } catch { - print("Unknown error \(error)") // $ bbStep='CallExpr : successor -> 0(+2)' + print("Unknown error \(error)") // $ bbStep='print(...) : successor -> 0(+2)' } return 0 } @@ -137,7 +137,7 @@ func testMemberRef(param : C, inoutParam : inout C, opt : C?) { } func patterns(x : Int) -> Bool { - for _ in 0...10 // $ bbStep='BinaryExpr : empty -> SwitchExpr(+3)' bbStep='BinaryExpr : non-empty -> _(+0)' + for _ in 0...10 // $ bbStep='... ... ... : empty -> SwitchExpr(+3)' bbStep='... ... ... : non-empty -> _(+0)' { } // $ bbStep='Block : successor -> _(-1)' bbStep='Block : successor -> SwitchExpr(+2)' switch x { @@ -145,8 +145,8 @@ func patterns(x : Int) -> Bool { return true return true // $ noCfg case x where // $ bbContinues='Block goto true(+3)' bbStep='ConditionalPattern : match -> Block(+0)' bbStep='ConditionalPattern : no-match -> SwitchCase(+4)' - (x >= 2) && // $ bbStep='BinaryExpr : false -> x(-1)' bbStep='BinaryExpr : true -> x(+1)' - x < 5: // $ bbStep='BinaryExpr : successor -> x(-2)' + (x >= 2) && // $ bbStep='... >= ... : false -> x(-1)' bbStep='... >= ... : true -> x(+1)' + x < 5: // $ bbStep='... < ... : successor -> x(-2)' return true default: return false @@ -184,12 +184,12 @@ func testDefer(x : inout Int) { } func m1(x : Int) { - if x > 2 { // $ bbStep='BinaryExpr : false -> IfExpr(+3)' bbStep='BinaryExpr : true -> Block(+0)' + if x > 2 { // $ bbStep='... > ... : false -> IfExpr(+3)' bbStep='... > ... : true -> Block(+0)' print("x is greater than 2") } - else if x <= 2 && // $ bbStep='BinaryExpr : true -> x(+1)' bbStep='BinaryExpr : false,false,false -> Block(+5)' - x > 0 && // $ bbStep='BinaryExpr : true -> UnaryExpr(+1)' bbStep='BinaryExpr : false,false,false -> Block(+4)' - !(x == 5) { // $ bbStep='BinaryExpr : false -> Block(+0)' bbStep='BinaryExpr : true,false -> Block(+3)' + else if x <= 2 && // $ bbStep='... <= ... : false,false,false -> Block(+5)' bbStep='... <= ... : true -> x(+1)' + x > 0 && // $ bbStep='... > ... : false,false,false -> Block(+4)' bbStep='... > ... : true -> ! ...(+1)' + !(x == 5) { // $ bbStep='... == ... : false -> Block(+0)' bbStep='... == ... : true,false -> Block(+3)' print("x is 1") } else { @@ -205,10 +205,10 @@ func m2(b : Bool) -> Int { } func m3(x : inout Int) -> Int { - if x < 0 { // $ bbStep='BinaryExpr : true -> Block(+0)' bbStep='BinaryExpr : false -> x(+6)' + if x < 0 { // $ bbStep='... < ... : false -> x(+6)' bbStep='... < ... : true -> Block(+0)' x = -x - if x > 10 { // $ bbStep='BinaryExpr : true -> Block(+0)' bbStep='BinaryExpr : false -> x(+4)' - x = x - 1 // $ bbStep='BinaryExpr : successor -> x(+3)' + if x > 10 { // $ bbStep='... > ... : false -> x(+4)' bbStep='... > ... : true -> Block(+0)' + x = x - 1 // $ bbStep='... = ... : successor -> x(+3)' } } return x @@ -225,7 +225,7 @@ func m4 (b1 : Bool, b2 : Bool, b3 : Bool) -> String { func conversionsInSplitEntry (b : Bool) -> String { if b ? // $ bbStep='b : false -> Bool(+2)' bbStep='b : true -> true(+1)' (true) : // $ bbStep='true : true -> Block(+1)' - Bool(false) { // $ bbStep='CallExpr : true,true -> Block(+0)' bbStep='CallExpr : false -> Block(+3)' + Bool(false) { // $ bbStep='Bool(...) : false -> Block(+3)' bbStep='Bool(...) : true,true -> Block(+0)' return "b" } else { @@ -241,7 +241,7 @@ func constant_condition() { // $ noCfg func empty_else(b : Bool) { if b { // $ bbStep='b : false -> Block(+3)' bbStep='b : true -> Block(+0)' - print("true") // $ bbStep='CallExpr : successor -> print(+3)' + print("true") // $ bbStep='print(...) : successor -> print(+3)' } else {} // $ bbStep='Block : successor -> print(+1)' print("done") @@ -310,41 +310,41 @@ func testSubscriptExpr() -> (Int, Int, Int, Int, Int) { // $ noCfg } func loop1(x : inout Int) { - while x >= 0 { // $ bbStep='WhileStmt : successor -> x(+0)' bbStep='BinaryExpr : true -> Block(+0)' + while x >= 0 { // $ bbStep='WhileStmt : successor -> x(+0)' bbStep='... >= ... : true -> Block(+0)' print(x) - x -= 1 // $ bbStep='BinaryExpr : successor -> x(-2)' + x -= 1 // $ bbStep='... -= ... : successor -> x(-2)' } } func loop2(x : inout Int) { - while x >= 0 { // $ bbStep='WhileStmt : successor -> x(+0)' bbStep='BinaryExpr : false -> print(+11)' bbStep='BinaryExpr : true -> Block(+0)' + while x >= 0 { // $ bbStep='WhileStmt : successor -> x(+0)' bbStep='... >= ... : false -> print(+11)' bbStep='... >= ... : true -> Block(+0)' print(x) x -= 1 - if x > 100 { // $ bbStep='BinaryExpr : false -> IfExpr(+3)' bbStep='BinaryExpr : true -> Block(+0)' + if x > 100 { // $ bbStep='... > ... : false -> IfExpr(+3)' bbStep='... > ... : true -> Block(+0)' break // $ bbStep='BreakExpr : break -> print(+7)' } - else if x > 50 { // $ bbStep='BinaryExpr : false -> print(+3)' bbStep='BinaryExpr : true -> Block(+0)' + else if x > 50 { // $ bbStep='... > ... : false -> print(+3)' bbStep='... > ... : true -> Block(+0)' continue // $ bbStep='ContinueExpr : continue -> x(-7)' } - print("Iter") // $ bbStep='CallExpr : successor -> x(-9)' + print("Iter") // $ bbStep='print(...) : successor -> x(-9)' } print("Done") } func labeledLoop(x : inout Int) { - outer: while x >= 0 { // $ bbStep='WhileStmt : successor -> x(+0)' bbStep='BinaryExpr : true -> Block(+0)' - inner: while x >= 0 { // $ bbStep='BinaryExpr : false -> print(+11)' bbStep='WhileStmt : successor -> x(+0)' bbStep='BinaryExpr : true -> Block(+0)' + outer: while x >= 0 { // $ bbStep='WhileStmt : successor -> x(+0)' bbStep='... >= ... : true -> Block(+0)' + inner: while x >= 0 { // $ bbStep='WhileStmt : successor -> x(+0)' bbStep='... >= ... : false -> print(+11)' bbStep='... >= ... : true -> Block(+0)' print(x) x -= 1 - if x > 100 { // $ bbStep='BinaryExpr : false -> IfExpr(+3)' bbStep='BinaryExpr : true -> Block(+0)' + if x > 100 { // $ bbStep='... > ... : false -> IfExpr(+3)' bbStep='... > ... : true -> Block(+0)' break outer } - else if x > 50 { // $ bbStep='BinaryExpr : false -> print(+3)' bbStep='BinaryExpr : true -> Block(+0)' + else if x > 50 { // $ bbStep='... > ... : false -> print(+3)' bbStep='... > ... : true -> Block(+0)' continue inner // $ bbStep='ContinueExpr : continue -> x(-7)' } - print("Iter") // $ bbStep='CallExpr : successor -> x(-9)' + print("Iter") // $ bbStep='print(...) : successor -> x(-9)' } - print("Done") // $ bbStep='CallExpr : successor -> x(-12)' + print("Done") // $ bbStep='print(...) : successor -> x(-12)' } } @@ -352,13 +352,13 @@ func testRepeat(x : inout Int) { repeat { // $ bbStep='DoWhileStmt : successor -> Block(+0)' print(x) x -= 1 - } while x >= 0 // $ bbStep='BinaryExpr : true -> Block(-3)' + } while x >= 0 // $ bbStep='... >= ... : true -> Block(-3)' } func loop_with_identity_expr() { // $ noCfg var x = 0 - while(x < 10) { // $ bbStep='WhileStmt : successor -> x(+0)' bbStep='BinaryExpr : true -> Block(+0)' - x += 1 // $ bbStep='BinaryExpr : successor -> x(-1)' + while(x < 10) { // $ bbStep='WhileStmt : successor -> x(+0)' bbStep='... < ... : true -> Block(+0)' + x += 1 // $ bbStep='... += ... : successor -> x(-1)' } } @@ -395,7 +395,7 @@ class Derived : C { // $ nonSimple='ClassLikeDeclaration -V Derived -^ BaseType func doWithoutCatch(x : Int) throws -> Int { do { - try mightThrow(x: 0) // $ bbStep='CallExpr : successor -> UnaryExpr(+0)' + try mightThrow(x: 0) // $ bbStep='mightThrow(...) : successor -> try ...(+0)' print("Did not throw.") try! mightThrow(x: 0) print("Still did not throw.") @@ -498,24 +498,24 @@ func testAvailable() -> Int { // $ noCfg var x = 0; if #available(macOS 10, *) { // $ bbStep=' : false -> IfExpr(+4)' bbStep=' : true -> Block(+0)' - x += 1 // $ bbStep='BinaryExpr : successor -> IfExpr(+3)' + x += 1 // $ bbStep='... += ... : successor -> IfExpr(+3)' } if #available(macOS 10.13, *) { // $ bbStep=' : false -> IfExpr(+4)' bbStep=' : true -> Block(+0)' - x += 1 // $ bbStep='BinaryExpr : successor -> IfExpr(+3)' + x += 1 // $ bbStep='... += ... : successor -> IfExpr(+3)' } if #unavailable(iOS 10, watchOS 10, macOS 10) { // $ bbStep=' : false -> GuardIfStmt(+4)' bbStep=' : true -> Block(+0)' - x += 1 // $ bbStep='BinaryExpr : successor -> GuardIfStmt(+3)' + x += 1 // $ bbStep='... += ... : successor -> GuardIfStmt(+3)' } guard #available(macOS 12, *) else { // $ bbStep=' : false -> Block(+0)' bbStep=' : true -> IfExpr(+4)' - x += 1 // $ bbStep='BinaryExpr : successor -> IfExpr(+3)' + x += 1 // $ bbStep='... += ... : successor -> IfExpr(+3)' } if #available(macOS 12, *), // $ bbStep=' : true -> (+1)' bbStep=' : false,false -> x(+5)' #available(iOS 12, *) { // $ bbStep=' : false,false -> x(+4)' bbStep=' : true -> Block(+0)' - x += 1 // $ bbStep='BinaryExpr : successor -> x(+3)' + x += 1 // $ bbStep='... += ... : successor -> x(+3)' } return x @@ -524,16 +524,16 @@ func testAvailable() -> Int { // $ noCfg func testAsyncFor () async { // $ noCfg var stream = AsyncStream(Int.self, bufferingPolicy: .bufferingNewest(5), { // $ bbContinues='Block goto Task(+2)' continuation in // $ bbContinues='continuation goto Block(-1)' - Task.detached { // $ nonSimple='Task -^ MemberAccessExpr -^ Argument -V FunctionExpr -^ CallExpr' - for i in 1...100 { // $ bbStep='BinaryExpr : empty -> continuation(+3)' bbStep='BinaryExpr : non-empty -> i(+0)' - continuation.yield(i) // $ bbStep='CallExpr : successor -> continuation(+2)' bbStep='CallExpr : successor -> i(-1)' + Task.detached { // $ nonSimple='Task -^ ... .detached -^ Argument -V FunctionExpr -^ ... .detached(...)' + for i in 1...100 { // $ bbStep='... ... ... : empty -> continuation(+3)' bbStep='... ... ... : non-empty -> i(+0)' + continuation.yield(i) // $ bbStep='... .yield(...) : successor -> continuation(+2)' bbStep='... .yield(...) : successor -> i(-1)' } continuation.finish() } }) for try await i in stream { // $ bbStep='stream : non-empty -> i(+0)' - print(i) // $ bbStep='CallExpr : successor -> i(-1)' + print(i) // $ bbStep='print(...) : successor -> i(-1)' } } @@ -584,11 +584,11 @@ func testOpenExistentialExpr(x: MyProtocol, y: MyProcotolImpl) { func singleStmtExpr(_ x: Int) { let a = switch x { - case 0..<5: 1 // $ bbStep='BinaryExpr : match -> Block(+0)' bbStep='BinaryExpr : no-match -> SwitchCase(+1)' bbStep='1 : successor -> VariableDeclaration(+3)' + case 0..<5: 1 // $ bbStep='1 : successor -> VariableDeclaration(+3)' bbStep='... ..< ... : match -> Block(+0)' bbStep='... ..< ... : no-match -> SwitchCase(+1)' default: 2 // $ bbStep='2 : successor -> VariableDeclaration(+2)' } let b = - if (x < 42) { 1 } // $ bbStep='BinaryExpr : false -> Block(+1)' bbStep='BinaryExpr : true -> Block(+0)' + if (x < 42) { 1 } // $ bbStep='... < ... : false -> Block(+1)' bbStep='... < ... : true -> Block(+0)' else { 2 } } // --- diff --git a/unified/ql/test/library-tests/dataflow/test.expected b/unified/ql/test/library-tests/dataflow/test.expected index 41ced3845de2..fb4090d3e62f 100644 --- a/unified/ql/test/library-tests/dataflow/test.expected +++ b/unified/ql/test/library-tests/dataflow/test.expected @@ -1,112 +1,112 @@ models edges | implicit-self.swift:11:9:11:12 | [post] self [x] | implicit-self.swift:12:14:12:17 | self [x] | provenance | | -| implicit-self.swift:11:9:11:14 | MemberAccessExpr | implicit-self.swift:11:9:11:12 | [post] self [x] | provenance | | -| implicit-self.swift:11:18:11:31 | CallExpr | implicit-self.swift:11:9:11:14 | MemberAccessExpr | provenance | | -| implicit-self.swift:12:14:12:17 | self [x] | implicit-self.swift:12:14:12:19 | MemberAccessExpr | provenance | | +| implicit-self.swift:11:9:11:14 | ... .x | implicit-self.swift:11:9:11:12 | [post] self [x] | provenance | | +| implicit-self.swift:11:18:11:31 | source(...) | implicit-self.swift:11:9:11:14 | ... .x | provenance | | +| implicit-self.swift:12:14:12:17 | self [x] | implicit-self.swift:12:14:12:19 | ... .x | provenance | | | implicit-self.swift:17:9:17:9 | x | implicit-self.swift:18:14:18:14 | x | provenance | | -| implicit-self.swift:17:13:17:26 | CallExpr | implicit-self.swift:17:9:17:9 | x | provenance | | +| implicit-self.swift:17:13:17:26 | source(...) | implicit-self.swift:17:9:17:9 | x | provenance | | | implicit-self.swift:23:9:23:9 | x | implicit-self.swift:24:14:24:17 | self [x] | provenance | | -| implicit-self.swift:23:13:23:26 | CallExpr | implicit-self.swift:23:9:23:9 | x | provenance | | -| implicit-self.swift:24:14:24:17 | self [x] | implicit-self.swift:24:14:24:19 | MemberAccessExpr | provenance | | +| implicit-self.swift:23:13:23:26 | source(...) | implicit-self.swift:23:9:23:9 | x | provenance | | +| implicit-self.swift:24:14:24:17 | self [x] | implicit-self.swift:24:14:24:19 | ... .x | provenance | | | implicit-self.swift:29:9:29:12 | [post] self [x] | implicit-self.swift:30:14:30:14 | x | provenance | | -| implicit-self.swift:29:9:29:14 | MemberAccessExpr | implicit-self.swift:29:9:29:12 | [post] self [x] | provenance | | -| implicit-self.swift:29:18:29:31 | CallExpr | implicit-self.swift:29:9:29:14 | MemberAccessExpr | provenance | | +| implicit-self.swift:29:9:29:14 | ... .x | implicit-self.swift:29:9:29:12 | [post] self [x] | provenance | | +| implicit-self.swift:29:18:29:31 | source(...) | implicit-self.swift:29:9:29:14 | ... .x | provenance | | | implicit-self.swift:35:9:35:12 | [post] self [box, x] | implicit-self.swift:36:14:36:17 | self [box, x] | provenance | | -| implicit-self.swift:35:9:35:16 | [post] MemberAccessExpr [x] | implicit-self.swift:35:9:35:12 | [post] self [box, x] | provenance | | -| implicit-self.swift:35:9:35:18 | MemberAccessExpr | implicit-self.swift:35:9:35:16 | [post] MemberAccessExpr [x] | provenance | | -| implicit-self.swift:35:22:35:35 | CallExpr | implicit-self.swift:35:9:35:18 | MemberAccessExpr | provenance | | -| implicit-self.swift:36:14:36:17 | self [box, x] | implicit-self.swift:36:14:36:21 | MemberAccessExpr [x] | provenance | | -| implicit-self.swift:36:14:36:21 | MemberAccessExpr [x] | implicit-self.swift:36:14:36:23 | MemberAccessExpr | provenance | | +| implicit-self.swift:35:9:35:16 | [post] ... .box [x] | implicit-self.swift:35:9:35:12 | [post] self [box, x] | provenance | | +| implicit-self.swift:35:9:35:18 | ... .x | implicit-self.swift:35:9:35:16 | [post] ... .box [x] | provenance | | +| implicit-self.swift:35:22:35:35 | source(...) | implicit-self.swift:35:9:35:18 | ... .x | provenance | | +| implicit-self.swift:36:14:36:17 | self [box, x] | implicit-self.swift:36:14:36:21 | ... .box [x] | provenance | | +| implicit-self.swift:36:14:36:21 | ... .box [x] | implicit-self.swift:36:14:36:23 | ... .x | provenance | | | implicit-self.swift:41:9:41:11 | [post] box [x] | implicit-self.swift:42:14:42:16 | box [x] | provenance | | -| implicit-self.swift:41:9:41:13 | MemberAccessExpr | implicit-self.swift:41:9:41:11 | [post] box [x] | provenance | | -| implicit-self.swift:41:17:41:30 | CallExpr | implicit-self.swift:41:9:41:13 | MemberAccessExpr | provenance | | -| implicit-self.swift:42:14:42:16 | box [x] | implicit-self.swift:42:14:42:18 | MemberAccessExpr | provenance | | +| implicit-self.swift:41:9:41:13 | ... .x | implicit-self.swift:41:9:41:11 | [post] box [x] | provenance | | +| implicit-self.swift:41:17:41:30 | source(...) | implicit-self.swift:41:9:41:13 | ... .x | provenance | | +| implicit-self.swift:42:14:42:16 | box [x] | implicit-self.swift:42:14:42:18 | ... .x | provenance | | | implicit-self.swift:47:9:47:11 | [post] box [x] | implicit-self.swift:48:14:48:17 | self [box, x] | provenance | | -| implicit-self.swift:47:9:47:13 | MemberAccessExpr | implicit-self.swift:47:9:47:11 | [post] box [x] | provenance | | -| implicit-self.swift:47:17:47:30 | CallExpr | implicit-self.swift:47:9:47:13 | MemberAccessExpr | provenance | | -| implicit-self.swift:48:14:48:17 | self [box, x] | implicit-self.swift:48:14:48:21 | MemberAccessExpr [x] | provenance | | -| implicit-self.swift:48:14:48:21 | MemberAccessExpr [x] | implicit-self.swift:48:14:48:23 | MemberAccessExpr | provenance | | +| implicit-self.swift:47:9:47:13 | ... .x | implicit-self.swift:47:9:47:11 | [post] box [x] | provenance | | +| implicit-self.swift:47:17:47:30 | source(...) | implicit-self.swift:47:9:47:13 | ... .x | provenance | | +| implicit-self.swift:48:14:48:17 | self [box, x] | implicit-self.swift:48:14:48:21 | ... .box [x] | provenance | | +| implicit-self.swift:48:14:48:21 | ... .box [x] | implicit-self.swift:48:14:48:23 | ... .x | provenance | | | implicit-self.swift:53:9:53:12 | [post] self [box, x] | implicit-self.swift:54:14:54:16 | box [x] | provenance | | -| implicit-self.swift:53:9:53:16 | [post] MemberAccessExpr [x] | implicit-self.swift:53:9:53:12 | [post] self [box, x] | provenance | | -| implicit-self.swift:53:9:53:18 | MemberAccessExpr | implicit-self.swift:53:9:53:16 | [post] MemberAccessExpr [x] | provenance | | -| implicit-self.swift:53:22:53:35 | CallExpr | implicit-self.swift:53:9:53:18 | MemberAccessExpr | provenance | | -| implicit-self.swift:54:14:54:16 | box [x] | implicit-self.swift:54:14:54:18 | MemberAccessExpr | provenance | | +| implicit-self.swift:53:9:53:16 | [post] ... .box [x] | implicit-self.swift:53:9:53:12 | [post] self [box, x] | provenance | | +| implicit-self.swift:53:9:53:18 | ... .x | implicit-self.swift:53:9:53:16 | [post] ... .box [x] | provenance | | +| implicit-self.swift:53:22:53:35 | source(...) | implicit-self.swift:53:9:53:18 | ... .x | provenance | | +| implicit-self.swift:54:14:54:16 | box [x] | implicit-self.swift:54:14:54:18 | ... .x | provenance | | | implicit-self.swift:59:9:59:9 | [incoming] x | implicit-self.swift:60:14:60:14 | x | provenance | | | implicit-self.swift:59:9:59:9 | [incoming] x | implicit-self.swift:61:14:61:17 | self [x] | provenance | | -| implicit-self.swift:59:24:59:37 | CallExpr | implicit-self.swift:59:9:59:9 | [incoming] x | provenance | | -| implicit-self.swift:61:14:61:17 | self [x] | implicit-self.swift:61:14:61:19 | MemberAccessExpr | provenance | | +| implicit-self.swift:59:24:59:37 | source(...) | implicit-self.swift:59:9:59:9 | [incoming] x | provenance | | +| implicit-self.swift:61:14:61:17 | self [x] | implicit-self.swift:61:14:61:19 | ... .x | provenance | | | implicit-self.swift:66:9:66:12 | [post] self [x] | implicit-self.swift:67:14:67:14 | x | provenance | | | implicit-self.swift:66:9:66:12 | [post] self [x] | implicit-self.swift:68:14:68:17 | self [x] | provenance | | -| implicit-self.swift:66:9:66:14 | [incoming] MemberAccessExpr | implicit-self.swift:66:9:66:12 | [post] self [x] | provenance | | -| implicit-self.swift:66:29:66:43 | CallExpr | implicit-self.swift:66:9:66:14 | [incoming] MemberAccessExpr | provenance | | -| implicit-self.swift:68:14:68:17 | self [x] | implicit-self.swift:68:14:68:19 | MemberAccessExpr | provenance | | +| implicit-self.swift:66:9:66:14 | [incoming] ... .x | implicit-self.swift:66:9:66:12 | [post] self [x] | provenance | | +| implicit-self.swift:66:29:66:43 | source(...) | implicit-self.swift:66:9:66:14 | [incoming] ... .x | provenance | | +| implicit-self.swift:68:14:68:17 | self [x] | implicit-self.swift:68:14:68:19 | ... .x | provenance | | | implicit-self.swift:73:9:73:9 | [incoming] x | implicit-self.swift:74:14:74:14 | x | provenance | | | implicit-self.swift:73:9:73:9 | [incoming] x | implicit-self.swift:75:14:75:17 | self [x] | provenance | | -| implicit-self.swift:73:24:73:38 | CallExpr | implicit-self.swift:73:9:73:9 | [incoming] x | provenance | | -| implicit-self.swift:75:14:75:17 | self [x] | implicit-self.swift:75:14:75:19 | MemberAccessExpr | provenance | | +| implicit-self.swift:73:24:73:38 | source(...) | implicit-self.swift:73:9:73:9 | [incoming] x | provenance | | +| implicit-self.swift:75:14:75:17 | self [x] | implicit-self.swift:75:14:75:19 | ... .x | provenance | | | implicit-self.swift:80:9:80:12 | [post] self [x] | implicit-self.swift:81:14:81:14 | x | provenance | | | implicit-self.swift:80:9:80:12 | [post] self [x] | implicit-self.swift:82:14:82:17 | self [x] | provenance | | -| implicit-self.swift:80:9:80:14 | [incoming] MemberAccessExpr | implicit-self.swift:80:9:80:12 | [post] self [x] | provenance | | -| implicit-self.swift:80:29:80:43 | CallExpr | implicit-self.swift:80:9:80:14 | [incoming] MemberAccessExpr | provenance | | -| implicit-self.swift:82:14:82:17 | self [x] | implicit-self.swift:82:14:82:19 | MemberAccessExpr | provenance | | -| test.swift:6:10:6:23 | CallExpr | test.swift:6:10:6:32 | BinaryExpr | provenance | | -| test.swift:7:19:7:32 | CallExpr | test.swift:7:10:7:32 | BinaryExpr | provenance | | -| test.swift:9:13:9:26 | CallExpr | test.swift:9:10:9:33 | StringInterpolationExpr | provenance | | -| test.swift:10:18:10:31 | CallExpr | test.swift:10:10:10:33 | StringInterpolationExpr | provenance | | -| test.swift:11:18:11:31 | CallExpr | test.swift:11:10:11:38 | StringInterpolationExpr | provenance | | -| test.swift:16:10:16:33 | TupleExpr [0] | test.swift:16:10:16:35 | MemberAccessExpr | provenance | | -| test.swift:16:11:16:25 | CallExpr | test.swift:16:10:16:33 | TupleExpr [0] | provenance | | -| test.swift:19:10:19:33 | TupleExpr [1] | test.swift:19:10:19:35 | MemberAccessExpr | provenance | | -| test.swift:19:19:19:32 | CallExpr | test.swift:19:10:19:33 | TupleExpr [1] | provenance | | +| implicit-self.swift:80:9:80:14 | [incoming] ... .x | implicit-self.swift:80:9:80:12 | [post] self [x] | provenance | | +| implicit-self.swift:80:29:80:43 | source(...) | implicit-self.swift:80:9:80:14 | [incoming] ... .x | provenance | | +| implicit-self.swift:82:14:82:17 | self [x] | implicit-self.swift:82:14:82:19 | ... .x | provenance | | +| test.swift:6:10:6:23 | source(...) | test.swift:6:10:6:32 | ... + ... | provenance | | +| test.swift:7:19:7:32 | source(...) | test.swift:7:10:7:32 | ... + ... | provenance | | +| test.swift:9:13:9:26 | source(...) | test.swift:9:10:9:33 | StringInterpolationExpr | provenance | | +| test.swift:10:18:10:31 | source(...) | test.swift:10:10:10:33 | StringInterpolationExpr | provenance | | +| test.swift:11:18:11:31 | source(...) | test.swift:11:10:11:38 | StringInterpolationExpr | provenance | | +| test.swift:16:10:16:33 | TupleExpr [0] | test.swift:16:10:16:35 | ... .0 | provenance | | +| test.swift:16:11:16:25 | source(...) | test.swift:16:10:16:33 | TupleExpr [0] | provenance | | +| test.swift:19:10:19:33 | TupleExpr [1] | test.swift:19:10:19:35 | ... .1 | provenance | | +| test.swift:19:19:19:32 | source(...) | test.swift:19:10:19:33 | TupleExpr [1] | provenance | | | test.swift:23:9:23:9 | a | test.swift:24:10:24:10 | a | provenance | | -| test.swift:23:13:23:26 | CallExpr | test.swift:23:9:23:9 | a | provenance | | +| test.swift:23:13:23:26 | source(...) | test.swift:23:9:23:9 | a | provenance | | | test.swift:28:9:28:14 | TupleExpr [0] | test.swift:28:10:28:10 | a | provenance | | | test.swift:28:10:28:10 | a | test.swift:29:10:29:10 | a | provenance | | | test.swift:28:18:28:41 | TupleExpr [0] | test.swift:28:9:28:14 | TupleExpr [0] | provenance | | -| test.swift:28:19:28:33 | CallExpr | test.swift:28:18:28:41 | TupleExpr [0] | provenance | | +| test.swift:28:19:28:33 | source(...) | test.swift:28:18:28:41 | TupleExpr [0] | provenance | | | test.swift:32:9:32:14 | TupleExpr [1] | test.swift:32:13:32:13 | d | provenance | | | test.swift:32:13:32:13 | d | test.swift:34:10:34:10 | d | provenance | | | test.swift:32:18:32:41 | TupleExpr [1] | test.swift:32:9:32:14 | TupleExpr [1] | provenance | | -| test.swift:32:27:32:40 | CallExpr | test.swift:32:18:32:41 | TupleExpr [1] | provenance | | +| test.swift:32:27:32:40 | source(...) | test.swift:32:18:32:41 | TupleExpr [1] | provenance | | | test.swift:38:9:38:9 | a | test.swift:39:10:39:10 | a | provenance | | -| test.swift:38:13:38:26 | CallExpr | test.swift:38:9:38:9 | a | provenance | | +| test.swift:38:13:38:26 | source(...) | test.swift:38:9:38:9 | a | provenance | | | test.swift:46:5:46:9 | [post] tuple [0] | test.swift:47:10:47:14 | tuple [0] | provenance | | -| test.swift:46:5:46:11 | MemberAccessExpr | test.swift:46:5:46:9 | [post] tuple [0] | provenance | | -| test.swift:46:15:46:28 | CallExpr | test.swift:46:5:46:11 | MemberAccessExpr | provenance | | -| test.swift:47:10:47:14 | tuple [0] | test.swift:47:10:47:16 | MemberAccessExpr | provenance | | +| test.swift:46:5:46:11 | ... .0 | test.swift:46:5:46:9 | [post] tuple [0] | provenance | | +| test.swift:46:15:46:28 | source(...) | test.swift:46:5:46:11 | ... .0 | provenance | | +| test.swift:47:10:47:14 | tuple [0] | test.swift:47:10:47:16 | ... .0 | provenance | | | test.swift:53:5:53:14 | [post] deep_tuple [1, 0] | test.swift:58:10:58:19 | deep_tuple [1, 0] | provenance | | -| test.swift:53:5:53:16 | [post] MemberAccessExpr [0] | test.swift:53:5:53:14 | [post] deep_tuple [1, 0] | provenance | | -| test.swift:53:5:53:18 | MemberAccessExpr | test.swift:53:5:53:16 | [post] MemberAccessExpr [0] | provenance | | -| test.swift:53:22:53:35 | CallExpr | test.swift:53:5:53:18 | MemberAccessExpr | provenance | | -| test.swift:58:10:58:19 | deep_tuple [1, 0] | test.swift:58:10:58:21 | MemberAccessExpr [0] | provenance | | -| test.swift:58:10:58:21 | MemberAccessExpr [0] | test.swift:58:10:58:23 | MemberAccessExpr | provenance | | -| test.swift:64:5:64:16 | TupleExpr [0] | test.swift:64:6:64:12 | MemberAccessExpr | provenance | | +| test.swift:53:5:53:16 | [post] ... .1 [0] | test.swift:53:5:53:14 | [post] deep_tuple [1, 0] | provenance | | +| test.swift:53:5:53:18 | ... .0 | test.swift:53:5:53:16 | [post] ... .1 [0] | provenance | | +| test.swift:53:22:53:35 | source(...) | test.swift:53:5:53:18 | ... .0 | provenance | | +| test.swift:58:10:58:19 | deep_tuple [1, 0] | test.swift:58:10:58:21 | ... .1 [0] | provenance | | +| test.swift:58:10:58:21 | ... .1 [0] | test.swift:58:10:58:23 | ... .0 | provenance | | +| test.swift:64:5:64:16 | TupleExpr [0] | test.swift:64:6:64:12 | ... .1 | provenance | | | test.swift:64:6:64:10 | [post] tuple [1] | test.swift:66:10:66:14 | tuple [1] | provenance | | -| test.swift:64:6:64:12 | MemberAccessExpr | test.swift:64:6:64:10 | [post] tuple [1] | provenance | | +| test.swift:64:6:64:12 | ... .1 | test.swift:64:6:64:10 | [post] tuple [1] | provenance | | | test.swift:64:20:64:51 | TupleExpr [0] | test.swift:64:5:64:16 | TupleExpr [0] | provenance | | -| test.swift:64:21:64:35 | CallExpr | test.swift:64:20:64:51 | TupleExpr [0] | provenance | | -| test.swift:66:10:66:14 | tuple [1] | test.swift:66:10:66:16 | MemberAccessExpr | provenance | | +| test.swift:64:21:64:35 | source(...) | test.swift:64:20:64:51 | TupleExpr [0] | provenance | | +| test.swift:66:10:66:14 | tuple [1] | test.swift:66:10:66:16 | ... .1 | provenance | | | test.swift:74:5:74:9 | [post] tuple [0] | test.swift:75:10:75:14 | tuple [0] | provenance | | -| test.swift:74:5:74:11 | MemberAccessExpr | test.swift:74:5:74:9 | [post] tuple [0] | provenance | | -| test.swift:74:15:74:29 | CallExpr | test.swift:74:5:74:11 | MemberAccessExpr | provenance | | -| test.swift:75:10:75:14 | tuple [0] | test.swift:75:10:75:16 | MemberAccessExpr | provenance | | +| test.swift:74:5:74:11 | ... .0 | test.swift:74:5:74:9 | [post] tuple [0] | provenance | | +| test.swift:74:15:74:29 | source(...) | test.swift:74:5:74:11 | ... .0 | provenance | | +| test.swift:75:10:75:14 | tuple [0] | test.swift:75:10:75:16 | ... .0 | provenance | | | test.swift:86:9:86:9 | x | test.swift:90:10:90:10 | x | provenance | | | test.swift:86:9:86:9 | x | test.swift:99:14:99:14 | x | provenance | | -| test.swift:86:13:86:27 | CallExpr | test.swift:86:9:86:9 | x | provenance | | +| test.swift:86:13:86:27 | source(...) | test.swift:86:9:86:9 | x | provenance | | | test.swift:94:9:94:9 | y | test.swift:96:10:96:10 | y | provenance | | | test.swift:94:9:94:9 | y | test.swift:100:14:100:14 | y | provenance | | -| test.swift:94:13:94:27 | CallExpr | test.swift:94:9:94:9 | y | provenance | | +| test.swift:94:13:94:27 | source(...) | test.swift:94:9:94:9 | y | provenance | | | test.swift:107:9:107:13 | [post] tuple [0] | test.swift:112:10:112:14 | tuple [0] | provenance | | -| test.swift:107:9:107:15 | MemberAccessExpr | test.swift:107:9:107:13 | [post] tuple [0] | provenance | | -| test.swift:107:19:107:33 | CallExpr | test.swift:107:9:107:15 | MemberAccessExpr | provenance | | -| test.swift:112:10:112:14 | tuple [0] | test.swift:112:10:112:16 | MemberAccessExpr | provenance | | +| test.swift:107:9:107:15 | ... .0 | test.swift:107:9:107:13 | [post] tuple [0] | provenance | | +| test.swift:107:19:107:33 | source(...) | test.swift:107:9:107:15 | ... .0 | provenance | | +| test.swift:112:10:112:14 | tuple [0] | test.swift:112:10:112:16 | ... .0 | provenance | | | test.swift:117:9:117:13 | tuple [0] | test.swift:120:17:120:21 | tuple [0] | provenance | | | test.swift:117:9:117:13 | tuple [1] | test.swift:120:17:120:21 | tuple [1] | provenance | | | test.swift:117:17:117:50 | TupleExpr [0] | test.swift:117:9:117:13 | tuple [0] | provenance | | | test.swift:117:17:117:50 | TupleExpr [1] | test.swift:117:9:117:13 | tuple [1] | provenance | | -| test.swift:117:18:117:33 | CallExpr | test.swift:117:17:117:50 | TupleExpr [0] | provenance | | -| test.swift:117:35:117:49 | CallExpr | test.swift:117:17:117:50 | TupleExpr [1] | provenance | | +| test.swift:117:18:117:33 | source(...) | test.swift:117:17:117:50 | TupleExpr [0] | provenance | | +| test.swift:117:35:117:49 | source(...) | test.swift:117:17:117:50 | TupleExpr [1] | provenance | | | test.swift:120:9:120:13 | TupleExpr [0] | test.swift:120:10:120:10 | a | provenance | | | test.swift:120:9:120:13 | TupleExpr [1] | test.swift:120:12:120:12 | b | provenance | | | test.swift:120:10:120:10 | a | test.swift:125:10:125:10 | a | provenance | | @@ -114,171 +114,171 @@ edges | test.swift:120:17:120:21 | tuple [0] | test.swift:120:9:120:13 | TupleExpr [0] | provenance | | | test.swift:120:17:120:21 | tuple [1] | test.swift:120:9:120:13 | TupleExpr [1] | provenance | | | test.swift:131:5:131:5 | a | test.swift:132:10:132:10 | a | provenance | | -| test.swift:131:19:131:33 | CallExpr | test.swift:131:5:131:5 | a | provenance | | +| test.swift:131:19:131:33 | source(...) | test.swift:131:5:131:5 | a | provenance | | | test.swift:137:5:137:5 | [incoming] a | test.swift:138:10:138:10 | a | provenance | | -| test.swift:137:10:137:24 | CallExpr | test.swift:137:5:137:5 | [incoming] a | provenance | | +| test.swift:137:10:137:24 | source(...) | test.swift:137:5:137:5 | [incoming] a | provenance | | | test.swift:143:5:143:5 | [incoming] a | test.swift:144:10:144:10 | a | provenance | | -| test.swift:143:20:143:34 | CallExpr | test.swift:143:5:143:5 | [incoming] a | provenance | | +| test.swift:143:20:143:34 | source(...) | test.swift:143:5:143:5 | [incoming] a | provenance | | | test.swift:149:5:149:5 | [post] a [0] | test.swift:150:10:150:10 | a [0] | provenance | | -| test.swift:149:5:149:7 | MemberAccessExpr | test.swift:149:5:149:5 | [post] a [0] | provenance | | -| test.swift:149:23:149:37 | CallExpr | test.swift:149:5:149:7 | MemberAccessExpr | provenance | | -| test.swift:150:10:150:10 | a [0] | test.swift:150:10:150:12 | MemberAccessExpr | provenance | | -| test.swift:156:5:156:12 | TupleExpr [0] | test.swift:156:6:156:8 | MemberAccessExpr | provenance | | +| test.swift:149:5:149:7 | ... .0 | test.swift:149:5:149:5 | [post] a [0] | provenance | | +| test.swift:149:23:149:37 | source(...) | test.swift:149:5:149:7 | ... .0 | provenance | | +| test.swift:150:10:150:10 | a [0] | test.swift:150:10:150:12 | ... .0 | provenance | | +| test.swift:156:5:156:12 | TupleExpr [0] | test.swift:156:6:156:8 | ... .0 | provenance | | | test.swift:156:6:156:6 | [post] a [0] | test.swift:157:10:157:10 | a [0] | provenance | | -| test.swift:156:6:156:8 | MemberAccessExpr | test.swift:156:6:156:6 | [post] a [0] | provenance | | +| test.swift:156:6:156:8 | ... .0 | test.swift:156:6:156:6 | [post] a [0] | provenance | | | test.swift:156:16:156:61 | TupleExpr [0] | test.swift:156:5:156:12 | TupleExpr [0] | provenance | | -| test.swift:156:17:156:43 | BinaryExpr | test.swift:156:16:156:61 | TupleExpr [0] | provenance | | -| test.swift:156:29:156:43 | CallExpr | test.swift:156:17:156:43 | BinaryExpr | provenance | | -| test.swift:157:10:157:10 | a [0] | test.swift:157:10:157:12 | MemberAccessExpr | provenance | | +| test.swift:156:17:156:43 | ... + ... | test.swift:156:16:156:61 | TupleExpr [0] | provenance | | +| test.swift:156:29:156:43 | source(...) | test.swift:156:17:156:43 | ... + ... | provenance | | +| test.swift:157:10:157:10 | a [0] | test.swift:157:10:157:12 | ... .0 | provenance | | | test.swift:164:5:164:10 | TupleExpr [0] | test.swift:164:6:164:6 | a | provenance | | | test.swift:164:5:164:10 | TupleExpr [1] | test.swift:164:9:164:9 | b | provenance | | | test.swift:164:6:164:6 | a | test.swift:165:10:165:10 | a | provenance | | | test.swift:164:9:164:9 | b | test.swift:166:10:166:10 | b | provenance | | | test.swift:164:14:164:67 | TupleExpr [0] | test.swift:164:5:164:10 | TupleExpr [0] | provenance | | | test.swift:164:14:164:67 | TupleExpr [1] | test.swift:164:5:164:10 | TupleExpr [1] | provenance | | -| test.swift:164:15:164:39 | BinaryExpr | test.swift:164:14:164:67 | TupleExpr [0] | provenance | | -| test.swift:164:25:164:39 | CallExpr | test.swift:164:15:164:39 | BinaryExpr | provenance | | -| test.swift:164:42:164:66 | BinaryExpr | test.swift:164:14:164:67 | TupleExpr [1] | provenance | | -| test.swift:164:52:164:66 | CallExpr | test.swift:164:42:164:66 | BinaryExpr | provenance | | +| test.swift:164:15:164:39 | ... + ... | test.swift:164:14:164:67 | TupleExpr [0] | provenance | | +| test.swift:164:25:164:39 | source(...) | test.swift:164:15:164:39 | ... + ... | provenance | | +| test.swift:164:42:164:66 | ... + ... | test.swift:164:14:164:67 | TupleExpr [1] | provenance | | +| test.swift:164:52:164:66 | source(...) | test.swift:164:42:164:66 | ... + ... | provenance | | nodes | implicit-self.swift:11:9:11:12 | [post] self [x] | semmle.label | [post] self [x] | -| implicit-self.swift:11:9:11:14 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| implicit-self.swift:11:18:11:31 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:11:9:11:14 | ... .x | semmle.label | ... .x | +| implicit-self.swift:11:18:11:31 | source(...) | semmle.label | source(...) | | implicit-self.swift:12:14:12:17 | self [x] | semmle.label | self [x] | -| implicit-self.swift:12:14:12:19 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| implicit-self.swift:12:14:12:19 | ... .x | semmle.label | ... .x | | implicit-self.swift:17:9:17:9 | x | semmle.label | x | -| implicit-self.swift:17:13:17:26 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:17:13:17:26 | source(...) | semmle.label | source(...) | | implicit-self.swift:18:14:18:14 | x | semmle.label | x | | implicit-self.swift:23:9:23:9 | x | semmle.label | x | -| implicit-self.swift:23:13:23:26 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:23:13:23:26 | source(...) | semmle.label | source(...) | | implicit-self.swift:24:14:24:17 | self [x] | semmle.label | self [x] | -| implicit-self.swift:24:14:24:19 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| implicit-self.swift:24:14:24:19 | ... .x | semmle.label | ... .x | | implicit-self.swift:29:9:29:12 | [post] self [x] | semmle.label | [post] self [x] | -| implicit-self.swift:29:9:29:14 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| implicit-self.swift:29:18:29:31 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:29:9:29:14 | ... .x | semmle.label | ... .x | +| implicit-self.swift:29:18:29:31 | source(...) | semmle.label | source(...) | | implicit-self.swift:30:14:30:14 | x | semmle.label | x | | implicit-self.swift:35:9:35:12 | [post] self [box, x] | semmle.label | [post] self [box, x] | -| implicit-self.swift:35:9:35:16 | [post] MemberAccessExpr [x] | semmle.label | [post] MemberAccessExpr [x] | -| implicit-self.swift:35:9:35:18 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| implicit-self.swift:35:22:35:35 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:35:9:35:16 | [post] ... .box [x] | semmle.label | [post] ... .box [x] | +| implicit-self.swift:35:9:35:18 | ... .x | semmle.label | ... .x | +| implicit-self.swift:35:22:35:35 | source(...) | semmle.label | source(...) | | implicit-self.swift:36:14:36:17 | self [box, x] | semmle.label | self [box, x] | -| implicit-self.swift:36:14:36:21 | MemberAccessExpr [x] | semmle.label | MemberAccessExpr [x] | -| implicit-self.swift:36:14:36:23 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| implicit-self.swift:36:14:36:21 | ... .box [x] | semmle.label | ... .box [x] | +| implicit-self.swift:36:14:36:23 | ... .x | semmle.label | ... .x | | implicit-self.swift:41:9:41:11 | [post] box [x] | semmle.label | [post] box [x] | -| implicit-self.swift:41:9:41:13 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| implicit-self.swift:41:17:41:30 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:41:9:41:13 | ... .x | semmle.label | ... .x | +| implicit-self.swift:41:17:41:30 | source(...) | semmle.label | source(...) | | implicit-self.swift:42:14:42:16 | box [x] | semmle.label | box [x] | -| implicit-self.swift:42:14:42:18 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| implicit-self.swift:42:14:42:18 | ... .x | semmle.label | ... .x | | implicit-self.swift:47:9:47:11 | [post] box [x] | semmle.label | [post] box [x] | -| implicit-self.swift:47:9:47:13 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| implicit-self.swift:47:17:47:30 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:47:9:47:13 | ... .x | semmle.label | ... .x | +| implicit-self.swift:47:17:47:30 | source(...) | semmle.label | source(...) | | implicit-self.swift:48:14:48:17 | self [box, x] | semmle.label | self [box, x] | -| implicit-self.swift:48:14:48:21 | MemberAccessExpr [x] | semmle.label | MemberAccessExpr [x] | -| implicit-self.swift:48:14:48:23 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| implicit-self.swift:48:14:48:21 | ... .box [x] | semmle.label | ... .box [x] | +| implicit-self.swift:48:14:48:23 | ... .x | semmle.label | ... .x | | implicit-self.swift:53:9:53:12 | [post] self [box, x] | semmle.label | [post] self [box, x] | -| implicit-self.swift:53:9:53:16 | [post] MemberAccessExpr [x] | semmle.label | [post] MemberAccessExpr [x] | -| implicit-self.swift:53:9:53:18 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| implicit-self.swift:53:22:53:35 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:53:9:53:16 | [post] ... .box [x] | semmle.label | [post] ... .box [x] | +| implicit-self.swift:53:9:53:18 | ... .x | semmle.label | ... .x | +| implicit-self.swift:53:22:53:35 | source(...) | semmle.label | source(...) | | implicit-self.swift:54:14:54:16 | box [x] | semmle.label | box [x] | -| implicit-self.swift:54:14:54:18 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| implicit-self.swift:54:14:54:18 | ... .x | semmle.label | ... .x | | implicit-self.swift:59:9:59:9 | [incoming] x | semmle.label | [incoming] x | -| implicit-self.swift:59:24:59:37 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:59:24:59:37 | source(...) | semmle.label | source(...) | | implicit-self.swift:60:14:60:14 | x | semmle.label | x | | implicit-self.swift:61:14:61:17 | self [x] | semmle.label | self [x] | -| implicit-self.swift:61:14:61:19 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| implicit-self.swift:61:14:61:19 | ... .x | semmle.label | ... .x | | implicit-self.swift:66:9:66:12 | [post] self [x] | semmle.label | [post] self [x] | -| implicit-self.swift:66:9:66:14 | [incoming] MemberAccessExpr | semmle.label | [incoming] MemberAccessExpr | -| implicit-self.swift:66:29:66:43 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:66:9:66:14 | [incoming] ... .x | semmle.label | [incoming] ... .x | +| implicit-self.swift:66:29:66:43 | source(...) | semmle.label | source(...) | | implicit-self.swift:67:14:67:14 | x | semmle.label | x | | implicit-self.swift:68:14:68:17 | self [x] | semmle.label | self [x] | -| implicit-self.swift:68:14:68:19 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| implicit-self.swift:68:14:68:19 | ... .x | semmle.label | ... .x | | implicit-self.swift:73:9:73:9 | [incoming] x | semmle.label | [incoming] x | -| implicit-self.swift:73:24:73:38 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:73:24:73:38 | source(...) | semmle.label | source(...) | | implicit-self.swift:74:14:74:14 | x | semmle.label | x | | implicit-self.swift:75:14:75:17 | self [x] | semmle.label | self [x] | -| implicit-self.swift:75:14:75:19 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| implicit-self.swift:75:14:75:19 | ... .x | semmle.label | ... .x | | implicit-self.swift:80:9:80:12 | [post] self [x] | semmle.label | [post] self [x] | -| implicit-self.swift:80:9:80:14 | [incoming] MemberAccessExpr | semmle.label | [incoming] MemberAccessExpr | -| implicit-self.swift:80:29:80:43 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:80:9:80:14 | [incoming] ... .x | semmle.label | [incoming] ... .x | +| implicit-self.swift:80:29:80:43 | source(...) | semmle.label | source(...) | | implicit-self.swift:81:14:81:14 | x | semmle.label | x | | implicit-self.swift:82:14:82:17 | self [x] | semmle.label | self [x] | -| implicit-self.swift:82:14:82:19 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| test.swift:2:10:2:21 | CallExpr | semmle.label | CallExpr | -| test.swift:6:10:6:23 | CallExpr | semmle.label | CallExpr | -| test.swift:6:10:6:32 | BinaryExpr | semmle.label | BinaryExpr | -| test.swift:7:10:7:32 | BinaryExpr | semmle.label | BinaryExpr | -| test.swift:7:19:7:32 | CallExpr | semmle.label | CallExpr | +| implicit-self.swift:82:14:82:19 | ... .x | semmle.label | ... .x | +| test.swift:2:10:2:21 | source(...) | semmle.label | source(...) | +| test.swift:6:10:6:23 | source(...) | semmle.label | source(...) | +| test.swift:6:10:6:32 | ... + ... | semmle.label | ... + ... | +| test.swift:7:10:7:32 | ... + ... | semmle.label | ... + ... | +| test.swift:7:19:7:32 | source(...) | semmle.label | source(...) | | test.swift:9:10:9:33 | StringInterpolationExpr | semmle.label | StringInterpolationExpr | -| test.swift:9:13:9:26 | CallExpr | semmle.label | CallExpr | +| test.swift:9:13:9:26 | source(...) | semmle.label | source(...) | | test.swift:10:10:10:33 | StringInterpolationExpr | semmle.label | StringInterpolationExpr | -| test.swift:10:18:10:31 | CallExpr | semmle.label | CallExpr | +| test.swift:10:18:10:31 | source(...) | semmle.label | source(...) | | test.swift:11:10:11:38 | StringInterpolationExpr | semmle.label | StringInterpolationExpr | -| test.swift:11:18:11:31 | CallExpr | semmle.label | CallExpr | +| test.swift:11:18:11:31 | source(...) | semmle.label | source(...) | | test.swift:16:10:16:33 | TupleExpr [0] | semmle.label | TupleExpr [0] | -| test.swift:16:10:16:35 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| test.swift:16:11:16:25 | CallExpr | semmle.label | CallExpr | +| test.swift:16:10:16:35 | ... .0 | semmle.label | ... .0 | +| test.swift:16:11:16:25 | source(...) | semmle.label | source(...) | | test.swift:19:10:19:33 | TupleExpr [1] | semmle.label | TupleExpr [1] | -| test.swift:19:10:19:35 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| test.swift:19:19:19:32 | CallExpr | semmle.label | CallExpr | +| test.swift:19:10:19:35 | ... .1 | semmle.label | ... .1 | +| test.swift:19:19:19:32 | source(...) | semmle.label | source(...) | | test.swift:23:9:23:9 | a | semmle.label | a | -| test.swift:23:13:23:26 | CallExpr | semmle.label | CallExpr | +| test.swift:23:13:23:26 | source(...) | semmle.label | source(...) | | test.swift:24:10:24:10 | a | semmle.label | a | | test.swift:28:9:28:14 | TupleExpr [0] | semmle.label | TupleExpr [0] | | test.swift:28:10:28:10 | a | semmle.label | a | | test.swift:28:18:28:41 | TupleExpr [0] | semmle.label | TupleExpr [0] | -| test.swift:28:19:28:33 | CallExpr | semmle.label | CallExpr | +| test.swift:28:19:28:33 | source(...) | semmle.label | source(...) | | test.swift:29:10:29:10 | a | semmle.label | a | | test.swift:32:9:32:14 | TupleExpr [1] | semmle.label | TupleExpr [1] | | test.swift:32:13:32:13 | d | semmle.label | d | | test.swift:32:18:32:41 | TupleExpr [1] | semmle.label | TupleExpr [1] | -| test.swift:32:27:32:40 | CallExpr | semmle.label | CallExpr | +| test.swift:32:27:32:40 | source(...) | semmle.label | source(...) | | test.swift:34:10:34:10 | d | semmle.label | d | | test.swift:38:9:38:9 | a | semmle.label | a | -| test.swift:38:13:38:26 | CallExpr | semmle.label | CallExpr | +| test.swift:38:13:38:26 | source(...) | semmle.label | source(...) | | test.swift:39:10:39:10 | a | semmle.label | a | | test.swift:46:5:46:9 | [post] tuple [0] | semmle.label | [post] tuple [0] | -| test.swift:46:5:46:11 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| test.swift:46:15:46:28 | CallExpr | semmle.label | CallExpr | +| test.swift:46:5:46:11 | ... .0 | semmle.label | ... .0 | +| test.swift:46:15:46:28 | source(...) | semmle.label | source(...) | | test.swift:47:10:47:14 | tuple [0] | semmle.label | tuple [0] | -| test.swift:47:10:47:16 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| test.swift:47:10:47:16 | ... .0 | semmle.label | ... .0 | | test.swift:53:5:53:14 | [post] deep_tuple [1, 0] | semmle.label | [post] deep_tuple [1, 0] | -| test.swift:53:5:53:16 | [post] MemberAccessExpr [0] | semmle.label | [post] MemberAccessExpr [0] | -| test.swift:53:5:53:18 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| test.swift:53:22:53:35 | CallExpr | semmle.label | CallExpr | +| test.swift:53:5:53:16 | [post] ... .1 [0] | semmle.label | [post] ... .1 [0] | +| test.swift:53:5:53:18 | ... .0 | semmle.label | ... .0 | +| test.swift:53:22:53:35 | source(...) | semmle.label | source(...) | | test.swift:58:10:58:19 | deep_tuple [1, 0] | semmle.label | deep_tuple [1, 0] | -| test.swift:58:10:58:21 | MemberAccessExpr [0] | semmle.label | MemberAccessExpr [0] | -| test.swift:58:10:58:23 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| test.swift:58:10:58:21 | ... .1 [0] | semmle.label | ... .1 [0] | +| test.swift:58:10:58:23 | ... .0 | semmle.label | ... .0 | | test.swift:64:5:64:16 | TupleExpr [0] | semmle.label | TupleExpr [0] | | test.swift:64:6:64:10 | [post] tuple [1] | semmle.label | [post] tuple [1] | -| test.swift:64:6:64:12 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| test.swift:64:6:64:12 | ... .1 | semmle.label | ... .1 | | test.swift:64:20:64:51 | TupleExpr [0] | semmle.label | TupleExpr [0] | -| test.swift:64:21:64:35 | CallExpr | semmle.label | CallExpr | +| test.swift:64:21:64:35 | source(...) | semmle.label | source(...) | | test.swift:66:10:66:14 | tuple [1] | semmle.label | tuple [1] | -| test.swift:66:10:66:16 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| test.swift:66:10:66:16 | ... .1 | semmle.label | ... .1 | | test.swift:74:5:74:9 | [post] tuple [0] | semmle.label | [post] tuple [0] | -| test.swift:74:5:74:11 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| test.swift:74:15:74:29 | CallExpr | semmle.label | CallExpr | +| test.swift:74:5:74:11 | ... .0 | semmle.label | ... .0 | +| test.swift:74:15:74:29 | source(...) | semmle.label | source(...) | | test.swift:75:10:75:14 | tuple [0] | semmle.label | tuple [0] | -| test.swift:75:10:75:16 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| test.swift:75:10:75:16 | ... .0 | semmle.label | ... .0 | | test.swift:86:9:86:9 | x | semmle.label | x | -| test.swift:86:13:86:27 | CallExpr | semmle.label | CallExpr | +| test.swift:86:13:86:27 | source(...) | semmle.label | source(...) | | test.swift:90:10:90:10 | x | semmle.label | x | | test.swift:94:9:94:9 | y | semmle.label | y | -| test.swift:94:13:94:27 | CallExpr | semmle.label | CallExpr | +| test.swift:94:13:94:27 | source(...) | semmle.label | source(...) | | test.swift:96:10:96:10 | y | semmle.label | y | | test.swift:99:14:99:14 | x | semmle.label | x | | test.swift:100:14:100:14 | y | semmle.label | y | | test.swift:107:9:107:13 | [post] tuple [0] | semmle.label | [post] tuple [0] | -| test.swift:107:9:107:15 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| test.swift:107:19:107:33 | CallExpr | semmle.label | CallExpr | +| test.swift:107:9:107:15 | ... .0 | semmle.label | ... .0 | +| test.swift:107:19:107:33 | source(...) | semmle.label | source(...) | | test.swift:112:10:112:14 | tuple [0] | semmle.label | tuple [0] | -| test.swift:112:10:112:16 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| test.swift:112:10:112:16 | ... .0 | semmle.label | ... .0 | | test.swift:117:9:117:13 | tuple [0] | semmle.label | tuple [0] | | test.swift:117:9:117:13 | tuple [1] | semmle.label | tuple [1] | | test.swift:117:17:117:50 | TupleExpr [0] | semmle.label | TupleExpr [0] | | test.swift:117:17:117:50 | TupleExpr [1] | semmle.label | TupleExpr [1] | -| test.swift:117:18:117:33 | CallExpr | semmle.label | CallExpr | -| test.swift:117:35:117:49 | CallExpr | semmle.label | CallExpr | +| test.swift:117:18:117:33 | source(...) | semmle.label | source(...) | +| test.swift:117:35:117:49 | source(...) | semmle.label | source(...) | | test.swift:120:9:120:13 | TupleExpr [0] | semmle.label | TupleExpr [0] | | test.swift:120:9:120:13 | TupleExpr [1] | semmle.label | TupleExpr [1] | | test.swift:120:10:120:10 | a | semmle.label | a | @@ -288,85 +288,85 @@ nodes | test.swift:125:10:125:10 | a | semmle.label | a | | test.swift:126:10:126:10 | b | semmle.label | b | | test.swift:131:5:131:5 | a | semmle.label | a | -| test.swift:131:19:131:33 | CallExpr | semmle.label | CallExpr | +| test.swift:131:19:131:33 | source(...) | semmle.label | source(...) | | test.swift:132:10:132:10 | a | semmle.label | a | | test.swift:137:5:137:5 | [incoming] a | semmle.label | [incoming] a | -| test.swift:137:10:137:24 | CallExpr | semmle.label | CallExpr | +| test.swift:137:10:137:24 | source(...) | semmle.label | source(...) | | test.swift:138:10:138:10 | a | semmle.label | a | | test.swift:143:5:143:5 | [incoming] a | semmle.label | [incoming] a | -| test.swift:143:20:143:34 | CallExpr | semmle.label | CallExpr | +| test.swift:143:20:143:34 | source(...) | semmle.label | source(...) | | test.swift:144:10:144:10 | a | semmle.label | a | | test.swift:149:5:149:5 | [post] a [0] | semmle.label | [post] a [0] | -| test.swift:149:5:149:7 | MemberAccessExpr | semmle.label | MemberAccessExpr | -| test.swift:149:23:149:37 | CallExpr | semmle.label | CallExpr | +| test.swift:149:5:149:7 | ... .0 | semmle.label | ... .0 | +| test.swift:149:23:149:37 | source(...) | semmle.label | source(...) | | test.swift:150:10:150:10 | a [0] | semmle.label | a [0] | -| test.swift:150:10:150:12 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| test.swift:150:10:150:12 | ... .0 | semmle.label | ... .0 | | test.swift:156:5:156:12 | TupleExpr [0] | semmle.label | TupleExpr [0] | | test.swift:156:6:156:6 | [post] a [0] | semmle.label | [post] a [0] | -| test.swift:156:6:156:8 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| test.swift:156:6:156:8 | ... .0 | semmle.label | ... .0 | | test.swift:156:16:156:61 | TupleExpr [0] | semmle.label | TupleExpr [0] | -| test.swift:156:17:156:43 | BinaryExpr | semmle.label | BinaryExpr | -| test.swift:156:29:156:43 | CallExpr | semmle.label | CallExpr | +| test.swift:156:17:156:43 | ... + ... | semmle.label | ... + ... | +| test.swift:156:29:156:43 | source(...) | semmle.label | source(...) | | test.swift:157:10:157:10 | a [0] | semmle.label | a [0] | -| test.swift:157:10:157:12 | MemberAccessExpr | semmle.label | MemberAccessExpr | +| test.swift:157:10:157:12 | ... .0 | semmle.label | ... .0 | | test.swift:164:5:164:10 | TupleExpr [0] | semmle.label | TupleExpr [0] | | test.swift:164:5:164:10 | TupleExpr [1] | semmle.label | TupleExpr [1] | | test.swift:164:6:164:6 | a | semmle.label | a | | test.swift:164:9:164:9 | b | semmle.label | b | | test.swift:164:14:164:67 | TupleExpr [0] | semmle.label | TupleExpr [0] | | test.swift:164:14:164:67 | TupleExpr [1] | semmle.label | TupleExpr [1] | -| test.swift:164:15:164:39 | BinaryExpr | semmle.label | BinaryExpr | -| test.swift:164:25:164:39 | CallExpr | semmle.label | CallExpr | -| test.swift:164:42:164:66 | BinaryExpr | semmle.label | BinaryExpr | -| test.swift:164:52:164:66 | CallExpr | semmle.label | CallExpr | +| test.swift:164:15:164:39 | ... + ... | semmle.label | ... + ... | +| test.swift:164:25:164:39 | source(...) | semmle.label | source(...) | +| test.swift:164:42:164:66 | ... + ... | semmle.label | ... + ... | +| test.swift:164:52:164:66 | source(...) | semmle.label | source(...) | | test.swift:165:10:165:10 | a | semmle.label | a | | test.swift:166:10:166:10 | b | semmle.label | b | subpaths testFailures #select -| implicit-self.swift:12:14:12:19 | MemberAccessExpr | implicit-self.swift:11:18:11:31 | CallExpr | implicit-self.swift:12:14:12:19 | MemberAccessExpr | $@ | implicit-self.swift:11:18:11:31 | CallExpr | CallExpr | -| implicit-self.swift:18:14:18:14 | x | implicit-self.swift:17:13:17:26 | CallExpr | implicit-self.swift:18:14:18:14 | x | $@ | implicit-self.swift:17:13:17:26 | CallExpr | CallExpr | -| implicit-self.swift:24:14:24:19 | MemberAccessExpr | implicit-self.swift:23:13:23:26 | CallExpr | implicit-self.swift:24:14:24:19 | MemberAccessExpr | $@ | implicit-self.swift:23:13:23:26 | CallExpr | CallExpr | -| implicit-self.swift:30:14:30:14 | x | implicit-self.swift:29:18:29:31 | CallExpr | implicit-self.swift:30:14:30:14 | x | $@ | implicit-self.swift:29:18:29:31 | CallExpr | CallExpr | -| implicit-self.swift:36:14:36:23 | MemberAccessExpr | implicit-self.swift:35:22:35:35 | CallExpr | implicit-self.swift:36:14:36:23 | MemberAccessExpr | $@ | implicit-self.swift:35:22:35:35 | CallExpr | CallExpr | -| implicit-self.swift:42:14:42:18 | MemberAccessExpr | implicit-self.swift:41:17:41:30 | CallExpr | implicit-self.swift:42:14:42:18 | MemberAccessExpr | $@ | implicit-self.swift:41:17:41:30 | CallExpr | CallExpr | -| implicit-self.swift:48:14:48:23 | MemberAccessExpr | implicit-self.swift:47:17:47:30 | CallExpr | implicit-self.swift:48:14:48:23 | MemberAccessExpr | $@ | implicit-self.swift:47:17:47:30 | CallExpr | CallExpr | -| implicit-self.swift:54:14:54:18 | MemberAccessExpr | implicit-self.swift:53:22:53:35 | CallExpr | implicit-self.swift:54:14:54:18 | MemberAccessExpr | $@ | implicit-self.swift:53:22:53:35 | CallExpr | CallExpr | -| implicit-self.swift:60:14:60:14 | x | implicit-self.swift:59:24:59:37 | CallExpr | implicit-self.swift:60:14:60:14 | x | $@ | implicit-self.swift:59:24:59:37 | CallExpr | CallExpr | -| implicit-self.swift:61:14:61:19 | MemberAccessExpr | implicit-self.swift:59:24:59:37 | CallExpr | implicit-self.swift:61:14:61:19 | MemberAccessExpr | $@ | implicit-self.swift:59:24:59:37 | CallExpr | CallExpr | -| implicit-self.swift:67:14:67:14 | x | implicit-self.swift:66:29:66:43 | CallExpr | implicit-self.swift:67:14:67:14 | x | $@ | implicit-self.swift:66:29:66:43 | CallExpr | CallExpr | -| implicit-self.swift:68:14:68:19 | MemberAccessExpr | implicit-self.swift:66:29:66:43 | CallExpr | implicit-self.swift:68:14:68:19 | MemberAccessExpr | $@ | implicit-self.swift:66:29:66:43 | CallExpr | CallExpr | -| implicit-self.swift:74:14:74:14 | x | implicit-self.swift:73:24:73:38 | CallExpr | implicit-self.swift:74:14:74:14 | x | $@ | implicit-self.swift:73:24:73:38 | CallExpr | CallExpr | -| implicit-self.swift:75:14:75:19 | MemberAccessExpr | implicit-self.swift:73:24:73:38 | CallExpr | implicit-self.swift:75:14:75:19 | MemberAccessExpr | $@ | implicit-self.swift:73:24:73:38 | CallExpr | CallExpr | -| implicit-self.swift:81:14:81:14 | x | implicit-self.swift:80:29:80:43 | CallExpr | implicit-self.swift:81:14:81:14 | x | $@ | implicit-self.swift:80:29:80:43 | CallExpr | CallExpr | -| implicit-self.swift:82:14:82:19 | MemberAccessExpr | implicit-self.swift:80:29:80:43 | CallExpr | implicit-self.swift:82:14:82:19 | MemberAccessExpr | $@ | implicit-self.swift:80:29:80:43 | CallExpr | CallExpr | -| test.swift:2:10:2:21 | CallExpr | test.swift:2:10:2:21 | CallExpr | test.swift:2:10:2:21 | CallExpr | $@ | test.swift:2:10:2:21 | CallExpr | CallExpr | -| test.swift:6:10:6:32 | BinaryExpr | test.swift:6:10:6:23 | CallExpr | test.swift:6:10:6:32 | BinaryExpr | $@ | test.swift:6:10:6:23 | CallExpr | CallExpr | -| test.swift:7:10:7:32 | BinaryExpr | test.swift:7:19:7:32 | CallExpr | test.swift:7:10:7:32 | BinaryExpr | $@ | test.swift:7:19:7:32 | CallExpr | CallExpr | -| test.swift:9:10:9:33 | StringInterpolationExpr | test.swift:9:13:9:26 | CallExpr | test.swift:9:10:9:33 | StringInterpolationExpr | $@ | test.swift:9:13:9:26 | CallExpr | CallExpr | -| test.swift:10:10:10:33 | StringInterpolationExpr | test.swift:10:18:10:31 | CallExpr | test.swift:10:10:10:33 | StringInterpolationExpr | $@ | test.swift:10:18:10:31 | CallExpr | CallExpr | -| test.swift:11:10:11:38 | StringInterpolationExpr | test.swift:11:18:11:31 | CallExpr | test.swift:11:10:11:38 | StringInterpolationExpr | $@ | test.swift:11:18:11:31 | CallExpr | CallExpr | -| test.swift:16:10:16:35 | MemberAccessExpr | test.swift:16:11:16:25 | CallExpr | test.swift:16:10:16:35 | MemberAccessExpr | $@ | test.swift:16:11:16:25 | CallExpr | CallExpr | -| test.swift:19:10:19:35 | MemberAccessExpr | test.swift:19:19:19:32 | CallExpr | test.swift:19:10:19:35 | MemberAccessExpr | $@ | test.swift:19:19:19:32 | CallExpr | CallExpr | -| test.swift:24:10:24:10 | a | test.swift:23:13:23:26 | CallExpr | test.swift:24:10:24:10 | a | $@ | test.swift:23:13:23:26 | CallExpr | CallExpr | -| test.swift:29:10:29:10 | a | test.swift:28:19:28:33 | CallExpr | test.swift:29:10:29:10 | a | $@ | test.swift:28:19:28:33 | CallExpr | CallExpr | -| test.swift:34:10:34:10 | d | test.swift:32:27:32:40 | CallExpr | test.swift:34:10:34:10 | d | $@ | test.swift:32:27:32:40 | CallExpr | CallExpr | -| test.swift:39:10:39:10 | a | test.swift:38:13:38:26 | CallExpr | test.swift:39:10:39:10 | a | $@ | test.swift:38:13:38:26 | CallExpr | CallExpr | -| test.swift:47:10:47:16 | MemberAccessExpr | test.swift:46:15:46:28 | CallExpr | test.swift:47:10:47:16 | MemberAccessExpr | $@ | test.swift:46:15:46:28 | CallExpr | CallExpr | -| test.swift:58:10:58:23 | MemberAccessExpr | test.swift:53:22:53:35 | CallExpr | test.swift:58:10:58:23 | MemberAccessExpr | $@ | test.swift:53:22:53:35 | CallExpr | CallExpr | -| test.swift:66:10:66:16 | MemberAccessExpr | test.swift:64:21:64:35 | CallExpr | test.swift:66:10:66:16 | MemberAccessExpr | $@ | test.swift:64:21:64:35 | CallExpr | CallExpr | -| test.swift:75:10:75:16 | MemberAccessExpr | test.swift:74:15:74:29 | CallExpr | test.swift:75:10:75:16 | MemberAccessExpr | $@ | test.swift:74:15:74:29 | CallExpr | CallExpr | -| test.swift:90:10:90:10 | x | test.swift:86:13:86:27 | CallExpr | test.swift:90:10:90:10 | x | $@ | test.swift:86:13:86:27 | CallExpr | CallExpr | -| test.swift:96:10:96:10 | y | test.swift:94:13:94:27 | CallExpr | test.swift:96:10:96:10 | y | $@ | test.swift:94:13:94:27 | CallExpr | CallExpr | -| test.swift:99:14:99:14 | x | test.swift:86:13:86:27 | CallExpr | test.swift:99:14:99:14 | x | $@ | test.swift:86:13:86:27 | CallExpr | CallExpr | -| test.swift:100:14:100:14 | y | test.swift:94:13:94:27 | CallExpr | test.swift:100:14:100:14 | y | $@ | test.swift:94:13:94:27 | CallExpr | CallExpr | -| test.swift:112:10:112:16 | MemberAccessExpr | test.swift:107:19:107:33 | CallExpr | test.swift:112:10:112:16 | MemberAccessExpr | $@ | test.swift:107:19:107:33 | CallExpr | CallExpr | -| test.swift:125:10:125:10 | a | test.swift:117:18:117:33 | CallExpr | test.swift:125:10:125:10 | a | $@ | test.swift:117:18:117:33 | CallExpr | CallExpr | -| test.swift:126:10:126:10 | b | test.swift:117:35:117:49 | CallExpr | test.swift:126:10:126:10 | b | $@ | test.swift:117:35:117:49 | CallExpr | CallExpr | -| test.swift:132:10:132:10 | a | test.swift:131:19:131:33 | CallExpr | test.swift:132:10:132:10 | a | $@ | test.swift:131:19:131:33 | CallExpr | CallExpr | -| test.swift:138:10:138:10 | a | test.swift:137:10:137:24 | CallExpr | test.swift:138:10:138:10 | a | $@ | test.swift:137:10:137:24 | CallExpr | CallExpr | -| test.swift:144:10:144:10 | a | test.swift:143:20:143:34 | CallExpr | test.swift:144:10:144:10 | a | $@ | test.swift:143:20:143:34 | CallExpr | CallExpr | -| test.swift:150:10:150:12 | MemberAccessExpr | test.swift:149:23:149:37 | CallExpr | test.swift:150:10:150:12 | MemberAccessExpr | $@ | test.swift:149:23:149:37 | CallExpr | CallExpr | -| test.swift:157:10:157:12 | MemberAccessExpr | test.swift:156:29:156:43 | CallExpr | test.swift:157:10:157:12 | MemberAccessExpr | $@ | test.swift:156:29:156:43 | CallExpr | CallExpr | -| test.swift:165:10:165:10 | a | test.swift:164:25:164:39 | CallExpr | test.swift:165:10:165:10 | a | $@ | test.swift:164:25:164:39 | CallExpr | CallExpr | -| test.swift:166:10:166:10 | b | test.swift:164:52:164:66 | CallExpr | test.swift:166:10:166:10 | b | $@ | test.swift:164:52:164:66 | CallExpr | CallExpr | +| implicit-self.swift:12:14:12:19 | ... .x | implicit-self.swift:11:18:11:31 | source(...) | implicit-self.swift:12:14:12:19 | ... .x | $@ | implicit-self.swift:11:18:11:31 | source(...) | source(...) | +| implicit-self.swift:18:14:18:14 | x | implicit-self.swift:17:13:17:26 | source(...) | implicit-self.swift:18:14:18:14 | x | $@ | implicit-self.swift:17:13:17:26 | source(...) | source(...) | +| implicit-self.swift:24:14:24:19 | ... .x | implicit-self.swift:23:13:23:26 | source(...) | implicit-self.swift:24:14:24:19 | ... .x | $@ | implicit-self.swift:23:13:23:26 | source(...) | source(...) | +| implicit-self.swift:30:14:30:14 | x | implicit-self.swift:29:18:29:31 | source(...) | implicit-self.swift:30:14:30:14 | x | $@ | implicit-self.swift:29:18:29:31 | source(...) | source(...) | +| implicit-self.swift:36:14:36:23 | ... .x | implicit-self.swift:35:22:35:35 | source(...) | implicit-self.swift:36:14:36:23 | ... .x | $@ | implicit-self.swift:35:22:35:35 | source(...) | source(...) | +| implicit-self.swift:42:14:42:18 | ... .x | implicit-self.swift:41:17:41:30 | source(...) | implicit-self.swift:42:14:42:18 | ... .x | $@ | implicit-self.swift:41:17:41:30 | source(...) | source(...) | +| implicit-self.swift:48:14:48:23 | ... .x | implicit-self.swift:47:17:47:30 | source(...) | implicit-self.swift:48:14:48:23 | ... .x | $@ | implicit-self.swift:47:17:47:30 | source(...) | source(...) | +| implicit-self.swift:54:14:54:18 | ... .x | implicit-self.swift:53:22:53:35 | source(...) | implicit-self.swift:54:14:54:18 | ... .x | $@ | implicit-self.swift:53:22:53:35 | source(...) | source(...) | +| implicit-self.swift:60:14:60:14 | x | implicit-self.swift:59:24:59:37 | source(...) | implicit-self.swift:60:14:60:14 | x | $@ | implicit-self.swift:59:24:59:37 | source(...) | source(...) | +| implicit-self.swift:61:14:61:19 | ... .x | implicit-self.swift:59:24:59:37 | source(...) | implicit-self.swift:61:14:61:19 | ... .x | $@ | implicit-self.swift:59:24:59:37 | source(...) | source(...) | +| implicit-self.swift:67:14:67:14 | x | implicit-self.swift:66:29:66:43 | source(...) | implicit-self.swift:67:14:67:14 | x | $@ | implicit-self.swift:66:29:66:43 | source(...) | source(...) | +| implicit-self.swift:68:14:68:19 | ... .x | implicit-self.swift:66:29:66:43 | source(...) | implicit-self.swift:68:14:68:19 | ... .x | $@ | implicit-self.swift:66:29:66:43 | source(...) | source(...) | +| implicit-self.swift:74:14:74:14 | x | implicit-self.swift:73:24:73:38 | source(...) | implicit-self.swift:74:14:74:14 | x | $@ | implicit-self.swift:73:24:73:38 | source(...) | source(...) | +| implicit-self.swift:75:14:75:19 | ... .x | implicit-self.swift:73:24:73:38 | source(...) | implicit-self.swift:75:14:75:19 | ... .x | $@ | implicit-self.swift:73:24:73:38 | source(...) | source(...) | +| implicit-self.swift:81:14:81:14 | x | implicit-self.swift:80:29:80:43 | source(...) | implicit-self.swift:81:14:81:14 | x | $@ | implicit-self.swift:80:29:80:43 | source(...) | source(...) | +| implicit-self.swift:82:14:82:19 | ... .x | implicit-self.swift:80:29:80:43 | source(...) | implicit-self.swift:82:14:82:19 | ... .x | $@ | implicit-self.swift:80:29:80:43 | source(...) | source(...) | +| test.swift:2:10:2:21 | source(...) | test.swift:2:10:2:21 | source(...) | test.swift:2:10:2:21 | source(...) | $@ | test.swift:2:10:2:21 | source(...) | source(...) | +| test.swift:6:10:6:32 | ... + ... | test.swift:6:10:6:23 | source(...) | test.swift:6:10:6:32 | ... + ... | $@ | test.swift:6:10:6:23 | source(...) | source(...) | +| test.swift:7:10:7:32 | ... + ... | test.swift:7:19:7:32 | source(...) | test.swift:7:10:7:32 | ... + ... | $@ | test.swift:7:19:7:32 | source(...) | source(...) | +| test.swift:9:10:9:33 | StringInterpolationExpr | test.swift:9:13:9:26 | source(...) | test.swift:9:10:9:33 | StringInterpolationExpr | $@ | test.swift:9:13:9:26 | source(...) | source(...) | +| test.swift:10:10:10:33 | StringInterpolationExpr | test.swift:10:18:10:31 | source(...) | test.swift:10:10:10:33 | StringInterpolationExpr | $@ | test.swift:10:18:10:31 | source(...) | source(...) | +| test.swift:11:10:11:38 | StringInterpolationExpr | test.swift:11:18:11:31 | source(...) | test.swift:11:10:11:38 | StringInterpolationExpr | $@ | test.swift:11:18:11:31 | source(...) | source(...) | +| test.swift:16:10:16:35 | ... .0 | test.swift:16:11:16:25 | source(...) | test.swift:16:10:16:35 | ... .0 | $@ | test.swift:16:11:16:25 | source(...) | source(...) | +| test.swift:19:10:19:35 | ... .1 | test.swift:19:19:19:32 | source(...) | test.swift:19:10:19:35 | ... .1 | $@ | test.swift:19:19:19:32 | source(...) | source(...) | +| test.swift:24:10:24:10 | a | test.swift:23:13:23:26 | source(...) | test.swift:24:10:24:10 | a | $@ | test.swift:23:13:23:26 | source(...) | source(...) | +| test.swift:29:10:29:10 | a | test.swift:28:19:28:33 | source(...) | test.swift:29:10:29:10 | a | $@ | test.swift:28:19:28:33 | source(...) | source(...) | +| test.swift:34:10:34:10 | d | test.swift:32:27:32:40 | source(...) | test.swift:34:10:34:10 | d | $@ | test.swift:32:27:32:40 | source(...) | source(...) | +| test.swift:39:10:39:10 | a | test.swift:38:13:38:26 | source(...) | test.swift:39:10:39:10 | a | $@ | test.swift:38:13:38:26 | source(...) | source(...) | +| test.swift:47:10:47:16 | ... .0 | test.swift:46:15:46:28 | source(...) | test.swift:47:10:47:16 | ... .0 | $@ | test.swift:46:15:46:28 | source(...) | source(...) | +| test.swift:58:10:58:23 | ... .0 | test.swift:53:22:53:35 | source(...) | test.swift:58:10:58:23 | ... .0 | $@ | test.swift:53:22:53:35 | source(...) | source(...) | +| test.swift:66:10:66:16 | ... .1 | test.swift:64:21:64:35 | source(...) | test.swift:66:10:66:16 | ... .1 | $@ | test.swift:64:21:64:35 | source(...) | source(...) | +| test.swift:75:10:75:16 | ... .0 | test.swift:74:15:74:29 | source(...) | test.swift:75:10:75:16 | ... .0 | $@ | test.swift:74:15:74:29 | source(...) | source(...) | +| test.swift:90:10:90:10 | x | test.swift:86:13:86:27 | source(...) | test.swift:90:10:90:10 | x | $@ | test.swift:86:13:86:27 | source(...) | source(...) | +| test.swift:96:10:96:10 | y | test.swift:94:13:94:27 | source(...) | test.swift:96:10:96:10 | y | $@ | test.swift:94:13:94:27 | source(...) | source(...) | +| test.swift:99:14:99:14 | x | test.swift:86:13:86:27 | source(...) | test.swift:99:14:99:14 | x | $@ | test.swift:86:13:86:27 | source(...) | source(...) | +| test.swift:100:14:100:14 | y | test.swift:94:13:94:27 | source(...) | test.swift:100:14:100:14 | y | $@ | test.swift:94:13:94:27 | source(...) | source(...) | +| test.swift:112:10:112:16 | ... .0 | test.swift:107:19:107:33 | source(...) | test.swift:112:10:112:16 | ... .0 | $@ | test.swift:107:19:107:33 | source(...) | source(...) | +| test.swift:125:10:125:10 | a | test.swift:117:18:117:33 | source(...) | test.swift:125:10:125:10 | a | $@ | test.swift:117:18:117:33 | source(...) | source(...) | +| test.swift:126:10:126:10 | b | test.swift:117:35:117:49 | source(...) | test.swift:126:10:126:10 | b | $@ | test.swift:117:35:117:49 | source(...) | source(...) | +| test.swift:132:10:132:10 | a | test.swift:131:19:131:33 | source(...) | test.swift:132:10:132:10 | a | $@ | test.swift:131:19:131:33 | source(...) | source(...) | +| test.swift:138:10:138:10 | a | test.swift:137:10:137:24 | source(...) | test.swift:138:10:138:10 | a | $@ | test.swift:137:10:137:24 | source(...) | source(...) | +| test.swift:144:10:144:10 | a | test.swift:143:20:143:34 | source(...) | test.swift:144:10:144:10 | a | $@ | test.swift:143:20:143:34 | source(...) | source(...) | +| test.swift:150:10:150:12 | ... .0 | test.swift:149:23:149:37 | source(...) | test.swift:150:10:150:12 | ... .0 | $@ | test.swift:149:23:149:37 | source(...) | source(...) | +| test.swift:157:10:157:12 | ... .0 | test.swift:156:29:156:43 | source(...) | test.swift:157:10:157:12 | ... .0 | $@ | test.swift:156:29:156:43 | source(...) | source(...) | +| test.swift:165:10:165:10 | a | test.swift:164:25:164:39 | source(...) | test.swift:165:10:165:10 | a | $@ | test.swift:164:25:164:39 | source(...) | source(...) | +| test.swift:166:10:166:10 | b | test.swift:164:52:164:66 | source(...) | test.swift:166:10:166:10 | b | $@ | test.swift:164:52:164:66 | source(...) | source(...) |