From 459d16824e2687fbd1bbec29ce052a19939ee926 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Tue, 29 Oct 2024 21:26:59 -0400 Subject: [PATCH 01/35] Java: weak crypto: do not report weak hash algorithms --- java/ql/lib/semmle/code/java/security/Encryption.qll | 5 +---- .../code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll | 6 +++++- java/ql/src/change-notes/2024-10-29-weak-crypto-hash.md | 4 ++++ .../CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected | 6 ------ 4 files changed, 10 insertions(+), 11 deletions(-) create mode 100644 java/ql/src/change-notes/2024-10-29-weak-crypto-hash.md diff --git a/java/ql/lib/semmle/code/java/security/Encryption.qll b/java/ql/lib/semmle/code/java/security/Encryption.qll index 6fc7f6b7d16a..1b28f5cbba61 100644 --- a/java/ql/lib/semmle/code/java/security/Encryption.qll +++ b/java/ql/lib/semmle/code/java/security/Encryption.qll @@ -223,10 +223,7 @@ string getAnInsecureHashAlgorithmName() { } private string rankedInsecureAlgorithm(int i) { - // In this case we know these are being used for encryption, so we want to match - // weak hash algorithms too. - result = - rank[i](string s | s = getAnInsecureAlgorithmName() or s = getAnInsecureHashAlgorithmName()) + result = rank[i](string s | s = getAnInsecureAlgorithmName()) } private string insecureAlgorithmString(int i) { diff --git a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll index 1533b61dd5e4..060a30f87e6a 100644 --- a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll +++ b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll @@ -30,7 +30,11 @@ class InsecureAlgoLiteral extends InsecureAlgorithm, ShortStringLiteral { s.length() > 1 and not s.regexpMatch(getSecureAlgorithmRegex()) and // Exclude results covered by another query. - not s.regexpMatch(getInsecureAlgorithmRegex()) + not s.regexpMatch(getInsecureAlgorithmRegex()) and + // Exclude results covered by `InsecureAlgoProperty`. + // This removes duplicates when a string literal is a default value for the property, + // such as "MD5" in the following: `props.getProperty("hashAlg2", "MD5")`. + not exists(InsecureAlgoProperty insecAlgoProp | this = insecAlgoProp.getAnArgument()) ) } diff --git a/java/ql/src/change-notes/2024-10-29-weak-crypto-hash.md b/java/ql/src/change-notes/2024-10-29-weak-crypto-hash.md new file mode 100644 index 000000000000..b4ac88bcdc6a --- /dev/null +++ b/java/ql/src/change-notes/2024-10-29-weak-crypto-hash.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `java/weak-cryptographic-algorithm` query has been updated to no longer report uses of hash functions such as `MD5` and `SHA1` even if they are known to be weak. These hash algorithms are used very often in non-sensitive contexts, making the query too imprecise in practice. The `java/potentially-weak-cryptographic-algorithm` query has been updated to report these uses instead. diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected b/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected index 612e1c730544..94719b477391 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected @@ -1,14 +1,8 @@ #select | Test.java:19:20:19:50 | getInstance(...) | Test.java:19:45:19:49 | "DES" | Test.java:19:45:19:49 | "DES" | Cryptographic algorithm $@ is weak and should not be used. | Test.java:19:45:19:49 | "DES" | DES | | Test.java:42:14:42:38 | getInstance(...) | Test.java:42:33:42:37 | "RC2" | Test.java:42:33:42:37 | "RC2" | Cryptographic algorithm $@ is weak and should not be used. | Test.java:42:33:42:37 | "RC2" | RC2 | -| WeakHashing.java:21:30:21:92 | getInstance(...) | WeakHashing.java:21:86:21:90 | "MD5" : String | WeakHashing.java:21:56:21:91 | getProperty(...) | Cryptographic algorithm $@ is weak and should not be used. | WeakHashing.java:21:86:21:90 | "MD5" | MD5 | edges -| WeakHashing.java:21:86:21:90 | "MD5" : String | WeakHashing.java:21:56:21:91 | getProperty(...) | provenance | MaD:1 | -models -| 1 | Summary: java.util; Properties; true; getProperty; (String,String); ; Argument[1]; ReturnValue; value; manual | nodes | Test.java:19:45:19:49 | "DES" | semmle.label | "DES" | | Test.java:42:33:42:37 | "RC2" | semmle.label | "RC2" | -| WeakHashing.java:21:56:21:91 | getProperty(...) | semmle.label | getProperty(...) | -| WeakHashing.java:21:86:21:90 | "MD5" : String | semmle.label | "MD5" : String | subpaths From 82f09f1f8bdd73e3be0d9e3bf36df0f9a92b032a Mon Sep 17 00:00:00 2001 From: Napalys Date: Mon, 11 Nov 2024 10:19:32 +0100 Subject: [PATCH 02/35] Updated TS version to 5.7.1-release candidate --- javascript/extractor/lib/typescript/package-lock.json | 8 ++++---- javascript/extractor/lib/typescript/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/javascript/extractor/lib/typescript/package-lock.json b/javascript/extractor/lib/typescript/package-lock.json index 50a9e0a66caa..47015f8f6e31 100644 --- a/javascript/extractor/lib/typescript/package-lock.json +++ b/javascript/extractor/lib/typescript/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "typescript-parser-wrapper", "dependencies": { - "typescript": "^5.6.2" + "typescript": "^5.7.1-rc" }, "devDependencies": { "@types/node": "18.15.3" @@ -20,9 +20,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "version": "5.7.1-rc", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.1-rc.tgz", + "integrity": "sha512-d6m+HT78uZtyUbXbUyIvuJ6kXCTSJEfy+2pZSUwt9d6JZ0kOMNDwhIILfV5FnaxMwVa48Yfw4sK0ISC4Qyq5tw==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", diff --git a/javascript/extractor/lib/typescript/package.json b/javascript/extractor/lib/typescript/package.json index bf650ec457a4..730a3b5f53e4 100644 --- a/javascript/extractor/lib/typescript/package.json +++ b/javascript/extractor/lib/typescript/package.json @@ -2,7 +2,7 @@ "name": "typescript-parser-wrapper", "private": true, "dependencies": { - "typescript": "5.6.2" + "typescript": "^5.7.1-rc" }, "scripts": { "build": "tsc --project tsconfig.json", From c2c6b77b11350fc83773d09b21f9a61faaee73b2 Mon Sep 17 00:00:00 2001 From: Napalys Date: Tue, 12 Nov 2024 11:05:12 +0100 Subject: [PATCH 03/35] Added new test case for TS57 Creating Index Signatures from Non-Literal Method Names in Classes --- .../TypeScript/Types/printAst.expected | 139 ++++++++++++++---- .../TypeScript/Types/tests.expected | 14 ++ .../library-tests/TypeScript/Types/tst.ts | 11 +- 3 files changed, 132 insertions(+), 32 deletions(-) diff --git a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected index 3061a6ba1f04..df304b899bb0 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected @@ -1877,8 +1877,35 @@ nodes | tst.ts:508:17:508:38 | [MethodCallExpr] obj[key ... rCase() | semmle.label | [MethodCallExpr] obj[key ... rCase() | | tst.ts:508:21:508:23 | [VarRef] key | semmle.label | [VarRef] key | | tst.ts:508:26:508:36 | [Label] toUpperCase | semmle.label | [Label] toUpperCase | +| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | semmle.label | [NamespaceDeclaration] namespa ... type. } | +| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | semmle.order | 92 | +| tst.ts:513:11:513:14 | [VarDecl] TS57 | semmle.label | [VarDecl] TS57 | +| tst.ts:514:3:514:26 | [DeclStmt] const a = ... | semmle.label | [DeclStmt] const a = ... | +| tst.ts:514:17:514:17 | [VarDecl] a | semmle.label | [VarDecl] a | +| tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | semmle.label | [VariableDeclarator] a: symbol | +| tst.ts:514:20:514:25 | [KeywordTypeExpr] symbol | semmle.label | [KeywordTypeExpr] symbol | +| tst.ts:515:3:517:3 | [ExportDeclaration] export ... }; } | semmle.label | [ExportDeclaration] export ... }; } | +| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | semmle.label | [ClassDefinition,TypeDefinition] class A ... }; } | +| tst.ts:515:16:515:16 | [VarDecl] A | semmle.label | [VarDecl] A | +| tst.ts:515:18:515:17 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | +| tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | +| tst.ts:515:18:515:17 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | +| tst.ts:515:18:515:17 | [Label] constructor | semmle.label | [Label] constructor | +| tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | semmle.label | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | +| tst.ts:516:7:516:24 | [FunctionExpr] [a]() { return 1 } | semmle.label | [FunctionExpr] [a]() { return 1 } | +| tst.ts:516:8:516:8 | [VarRef] a | semmle.label | [VarRef] a | +| tst.ts:516:13:516:24 | [BlockStmt] { return 1 } | semmle.label | [BlockStmt] { return 1 } | +| tst.ts:516:15:516:22 | [ReturnStmt] return 1 | semmle.label | [ReturnStmt] return 1 | +| tst.ts:516:22:516:22 | [Literal] 1 | semmle.label | [Literal] 1 | +| tst.ts:519:3:519:32 | [DeclStmt] const e1 = ... | semmle.label | [DeclStmt] const e1 = ... | +| tst.ts:519:17:519:18 | [VarDecl] e1 | semmle.label | [VarDecl] e1 | +| tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | semmle.label | [VariableDeclarator] e1: A[typeof a] | +| tst.ts:519:21:519:21 | [LocalTypeAccess] A | semmle.label | [LocalTypeAccess] A | +| tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | semmle.label | [IndexedAccessTypeExpr] A[typeof a] | +| tst.ts:519:23:519:30 | [TypeofTypeExpr] typeof a | semmle.label | [TypeofTypeExpr] typeof a | +| tst.ts:519:30:519:30 | [LocalVarTypeAccess] a | semmle.label | [LocalVarTypeAccess] a | | tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.label | [ExportDeclaration] export ... 'b'; } | -| tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.order | 92 | +| tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.order | 93 | | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | [FunctionDeclStmt] functio ... 'b'; } | | tstModuleCJS.cts:1:17:1:28 | [VarDecl] tstModuleCJS | semmle.label | [VarDecl] tstModuleCJS | | tstModuleCJS.cts:1:33:1:35 | [LiteralTypeExpr] 'a' | semmle.label | [LiteralTypeExpr] 'a' | @@ -1896,7 +1923,7 @@ nodes | tstModuleCJS.cts:2:34:2:36 | [Literal] 'a' | semmle.label | [Literal] 'a' | | tstModuleCJS.cts:2:40:2:42 | [Literal] 'b' | semmle.label | [Literal] 'b' | | tstModuleES.mts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.label | [ExportDeclaration] export ... 'b'; } | -| tstModuleES.mts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.order | 93 | +| tstModuleES.mts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.order | 94 | | tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | [FunctionDeclStmt] functio ... 'b'; } | | tstModuleES.mts:1:25:1:35 | [VarDecl] tstModuleES | semmle.label | [VarDecl] tstModuleES | | tstModuleES.mts:1:40:1:42 | [LiteralTypeExpr] 'a' | semmle.label | [LiteralTypeExpr] 'a' | @@ -1914,7 +1941,7 @@ nodes | tstModuleES.mts:2:34:2:36 | [Literal] 'a' | semmle.label | [Literal] 'a' | | tstModuleES.mts:2:40:2:42 | [Literal] 'b' | semmle.label | [Literal] 'b' | | tstSuffixA.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.label | [ExportDeclaration] export ... .ts'; } | -| tstSuffixA.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 94 | +| tstSuffixA.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 95 | | tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | [FunctionDeclStmt] functio ... .ts'; } | | tstSuffixA.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | [VarDecl] resolvedFile | | tstSuffixA.ts:1:33:1:47 | [LiteralTypeExpr] 'tstSuffixA.ts' | semmle.label | [LiteralTypeExpr] 'tstSuffixA.ts' | @@ -1922,7 +1949,7 @@ nodes | tstSuffixA.ts:2:5:2:27 | [ReturnStmt] return ... xA.ts'; | semmle.label | [ReturnStmt] return ... xA.ts'; | | tstSuffixA.ts:2:12:2:26 | [Literal] 'tstSuffixA.ts' | semmle.label | [Literal] 'tstSuffixA.ts' | | tstSuffixB.ios.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.label | [ExportDeclaration] export ... .ts'; } | -| tstSuffixB.ios.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 95 | +| tstSuffixB.ios.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 96 | | tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | [FunctionDeclStmt] functio ... .ts'; } | | tstSuffixB.ios.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | [VarDecl] resolvedFile | | tstSuffixB.ios.ts:1:33:1:51 | [LiteralTypeExpr] 'tstSuffixB.ios.ts' | semmle.label | [LiteralTypeExpr] 'tstSuffixB.ios.ts' | @@ -1930,7 +1957,7 @@ nodes | tstSuffixB.ios.ts:2:5:2:31 | [ReturnStmt] return ... os.ts'; | semmle.label | [ReturnStmt] return ... os.ts'; | | tstSuffixB.ios.ts:2:12:2:30 | [Literal] 'tstSuffixB.ios.ts' | semmle.label | [Literal] 'tstSuffixB.ios.ts' | | tstSuffixB.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.label | [ExportDeclaration] export ... .ts'; } | -| tstSuffixB.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 96 | +| tstSuffixB.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 97 | | tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | [FunctionDeclStmt] functio ... .ts'; } | | tstSuffixB.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | [VarDecl] resolvedFile | | tstSuffixB.ts:1:33:1:47 | [LiteralTypeExpr] 'tstSuffixB.ts' | semmle.label | [LiteralTypeExpr] 'tstSuffixB.ts' | @@ -1938,16 +1965,16 @@ nodes | tstSuffixB.ts:2:5:2:27 | [ReturnStmt] return ... xB.ts'; | semmle.label | [ReturnStmt] return ... xB.ts'; | | tstSuffixB.ts:2:12:2:26 | [Literal] 'tstSuffixB.ts' | semmle.label | [Literal] 'tstSuffixB.ts' | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | -| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.order | 97 | +| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.order | 98 | | type_alias.ts:1:6:1:6 | [Identifier] B | semmle.label | [Identifier] B | | type_alias.ts:1:10:1:16 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | | type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.label | [DeclStmt] var b = ... | -| type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.order | 98 | +| type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.order | 99 | | type_alias.ts:3:5:3:5 | [VarDecl] b | semmle.label | [VarDecl] b | | type_alias.ts:3:5:3:8 | [VariableDeclarator] b: B | semmle.label | [VariableDeclarator] b: B | | type_alias.ts:3:8:3:8 | [LocalTypeAccess] B | semmle.label | [LocalTypeAccess] B | | type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | semmle.order | 99 | +| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | semmle.order | 100 | | type_alias.ts:5:6:5:17 | [Identifier] ValueOrArray | semmle.label | [Identifier] ValueOrArray | | type_alias.ts:5:19:5:19 | [Identifier] T | semmle.label | [Identifier] T | | type_alias.ts:5:19:5:19 | [TypeParameter] T | semmle.label | [TypeParameter] T | @@ -1959,14 +1986,14 @@ nodes | type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray | semmle.label | [GenericTypeExpr] ValueOrArray | | type_alias.ts:5:47:5:47 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | | type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.label | [DeclStmt] var c = ... | -| type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.order | 100 | +| type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.order | 101 | | type_alias.ts:7:5:7:5 | [VarDecl] c | semmle.label | [VarDecl] c | | type_alias.ts:7:5:7:27 | [VariableDeclarator] c: Valu ... number> | semmle.label | [VariableDeclarator] c: Valu ... number> | | type_alias.ts:7:8:7:19 | [LocalTypeAccess] ValueOrArray | semmle.label | [LocalTypeAccess] ValueOrArray | | type_alias.ts:7:8:7:27 | [GenericTypeExpr] ValueOrArray | semmle.label | [GenericTypeExpr] ValueOrArray | | type_alias.ts:7:21:7:26 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | | type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | -| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.order | 101 | +| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.order | 102 | | type_alias.ts:9:6:9:9 | [Identifier] Json | semmle.label | [Identifier] Json | | type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | semmle.label | [UnionTypeExpr] \| strin ... Json[] | | type_alias.ts:10:7:10:12 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | @@ -1982,12 +2009,12 @@ nodes | type_alias.ts:15:7:15:10 | [LocalTypeAccess] Json | semmle.label | [LocalTypeAccess] Json | | type_alias.ts:15:7:15:12 | [ArrayTypeExpr] Json[] | semmle.label | [ArrayTypeExpr] Json[] | | type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.label | [DeclStmt] var json = ... | -| type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.order | 102 | +| type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.order | 103 | | type_alias.ts:17:5:17:8 | [VarDecl] json | semmle.label | [VarDecl] json | | type_alias.ts:17:5:17:14 | [VariableDeclarator] json: Json | semmle.label | [VariableDeclarator] json: Json | | type_alias.ts:17:11:17:14 | [LocalTypeAccess] Json | semmle.label | [LocalTypeAccess] Json | | type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | -| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.order | 103 | +| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.order | 104 | | type_alias.ts:19:6:19:16 | [Identifier] VirtualNode | semmle.label | [Identifier] VirtualNode | | type_alias.ts:20:5:21:56 | [UnionTypeExpr] \| strin ... Node[]] | semmle.label | [UnionTypeExpr] \| strin ... Node[]] | | type_alias.ts:20:7:20:12 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | @@ -2003,7 +2030,7 @@ nodes | type_alias.ts:21:43:21:53 | [LocalTypeAccess] VirtualNode | semmle.label | [LocalTypeAccess] VirtualNode | | type_alias.ts:21:43:21:55 | [ArrayTypeExpr] VirtualNode[] | semmle.label | [ArrayTypeExpr] VirtualNode[] | | type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.label | [DeclStmt] const myNode = ... | -| type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.order | 104 | +| type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.order | 105 | | type_alias.ts:23:7:23:12 | [VarDecl] myNode | semmle.label | [VarDecl] myNode | | type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | semmle.label | [VariableDeclarator] myNode: ... ] ] | | type_alias.ts:23:15:23:25 | [LocalTypeAccess] VirtualNode | semmle.label | [LocalTypeAccess] VirtualNode | @@ -2028,12 +2055,12 @@ nodes | type_alias.ts:26:23:26:36 | [Literal] "second-child" | semmle.label | [Literal] "second-child" | | type_alias.ts:26:41:26:62 | [Literal] "I'm the second child" | semmle.label | [Literal] "I'm the second child" | | type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.label | [ImportDeclaration] import ... dummy"; | -| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 105 | +| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 106 | | type_definition_objects.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | [ImportSpecifier] * as dummy | | type_definition_objects.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | [VarDecl] dummy | | type_definition_objects.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | [Literal] "./dummy" | | type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.label | [ExportDeclaration] export class C {} | -| type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.order | 106 | +| type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.order | 107 | | type_definition_objects.ts:3:8:3:17 | [ClassDefinition,TypeDefinition] class C {} | semmle.label | [ClassDefinition,TypeDefinition] class C {} | | type_definition_objects.ts:3:14:3:14 | [VarDecl] C | semmle.label | [VarDecl] C | | type_definition_objects.ts:3:16:3:15 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | @@ -2041,36 +2068,36 @@ nodes | type_definition_objects.ts:3:16:3:15 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | | type_definition_objects.ts:3:16:3:15 | [Label] constructor | semmle.label | [Label] constructor | | type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.label | [DeclStmt] let classObj = ... | -| type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.order | 107 | +| type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.order | 108 | | type_definition_objects.ts:4:5:4:12 | [VarDecl] classObj | semmle.label | [VarDecl] classObj | | type_definition_objects.ts:4:5:4:16 | [VariableDeclarator] classObj = C | semmle.label | [VariableDeclarator] classObj = C | | type_definition_objects.ts:4:16:4:16 | [VarRef] C | semmle.label | [VarRef] C | | type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.label | [ExportDeclaration] export enum E {} | -| type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.order | 108 | +| type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.order | 109 | | type_definition_objects.ts:6:8:6:16 | [EnumDeclaration,TypeDefinition] enum E {} | semmle.label | [EnumDeclaration,TypeDefinition] enum E {} | | type_definition_objects.ts:6:13:6:13 | [VarDecl] E | semmle.label | [VarDecl] E | | type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.label | [DeclStmt] let enumObj = ... | -| type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.order | 109 | +| type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.order | 110 | | type_definition_objects.ts:7:5:7:11 | [VarDecl] enumObj | semmle.label | [VarDecl] enumObj | | type_definition_objects.ts:7:5:7:15 | [VariableDeclarator] enumObj = E | semmle.label | [VariableDeclarator] enumObj = E | | type_definition_objects.ts:7:15:7:15 | [VarRef] E | semmle.label | [VarRef] E | | type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.label | [ExportDeclaration] export ... e N {;} | -| type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.order | 110 | +| type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.order | 111 | | type_definition_objects.ts:9:8:9:22 | [NamespaceDeclaration] namespace N {;} | semmle.label | [NamespaceDeclaration] namespace N {;} | | type_definition_objects.ts:9:18:9:18 | [VarDecl] N | semmle.label | [VarDecl] N | | type_definition_objects.ts:9:21:9:21 | [EmptyStmt] ; | semmle.label | [EmptyStmt] ; | | type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.label | [DeclStmt] let namespaceObj = ... | -| type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.order | 111 | +| type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.order | 112 | | type_definition_objects.ts:10:5:10:16 | [VarDecl] namespaceObj | semmle.label | [VarDecl] namespaceObj | | type_definition_objects.ts:10:5:10:20 | [VariableDeclarator] namespaceObj = N | semmle.label | [VariableDeclarator] namespaceObj = N | | type_definition_objects.ts:10:20:10:20 | [VarRef] N | semmle.label | [VarRef] N | | type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.label | [ImportDeclaration] import ... dummy"; | -| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 112 | +| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 113 | | type_definitions.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | [ImportSpecifier] * as dummy | | type_definitions.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | [VarDecl] dummy | | type_definitions.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | [Literal] "./dummy" | | type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.order | 113 | +| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.order | 114 | | type_definitions.ts:3:11:3:11 | [Identifier] I | semmle.label | [Identifier] I | | type_definitions.ts:3:13:3:13 | [Identifier] S | semmle.label | [Identifier] S | | type_definitions.ts:3:13:3:13 | [TypeParameter] S | semmle.label | [TypeParameter] S | @@ -2078,14 +2105,14 @@ nodes | type_definitions.ts:4:3:4:7 | [FieldDeclaration] x: S; | semmle.label | [FieldDeclaration] x: S; | | type_definitions.ts:4:6:4:6 | [LocalTypeAccess] S | semmle.label | [LocalTypeAccess] S | | type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.label | [DeclStmt] let i = ... | -| type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.order | 114 | +| type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.order | 115 | | type_definitions.ts:6:5:6:5 | [VarDecl] i | semmle.label | [VarDecl] i | | type_definitions.ts:6:5:6:16 | [VariableDeclarator] i: I | semmle.label | [VariableDeclarator] i: I | | type_definitions.ts:6:8:6:8 | [LocalTypeAccess] I | semmle.label | [LocalTypeAccess] I | | type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I | semmle.label | [GenericTypeExpr] I | | type_definitions.ts:6:10:6:15 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | | type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.label | [ClassDefinition,TypeDefinition] class C ... x: T } | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.order | 115 | +| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.order | 116 | | type_definitions.ts:8:7:8:7 | [VarDecl] C | semmle.label | [VarDecl] C | | type_definitions.ts:8:8:8:7 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | | type_definitions.ts:8:8:8:7 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | @@ -2097,14 +2124,14 @@ nodes | type_definitions.ts:9:3:9:6 | [FieldDeclaration] x: T | semmle.label | [FieldDeclaration] x: T | | type_definitions.ts:9:6:9:6 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | | type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.label | [DeclStmt] let c = ... | -| type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.order | 116 | +| type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.order | 117 | | type_definitions.ts:11:5:11:5 | [VarDecl] c | semmle.label | [VarDecl] c | | type_definitions.ts:11:5:11:16 | [VariableDeclarator] c: C | semmle.label | [VariableDeclarator] c: C | | type_definitions.ts:11:8:11:8 | [LocalTypeAccess] C | semmle.label | [LocalTypeAccess] C | | type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C | semmle.label | [GenericTypeExpr] C | | type_definitions.ts:11:10:11:15 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | | type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.label | [EnumDeclaration,TypeDefinition] enum Co ... blue } | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.order | 117 | +| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.order | 118 | | type_definitions.ts:13:6:13:10 | [VarDecl] Color | semmle.label | [VarDecl] Color | | type_definitions.ts:14:3:14:5 | [EnumMember,TypeDefinition] red | semmle.label | [EnumMember,TypeDefinition] red | | type_definitions.ts:14:3:14:5 | [VarDecl] red | semmle.label | [VarDecl] red | @@ -2113,29 +2140,29 @@ nodes | type_definitions.ts:14:15:14:18 | [EnumMember,TypeDefinition] blue | semmle.label | [EnumMember,TypeDefinition] blue | | type_definitions.ts:14:15:14:18 | [VarDecl] blue | semmle.label | [VarDecl] blue | | type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.label | [DeclStmt] let color = ... | -| type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.order | 118 | +| type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.order | 119 | | type_definitions.ts:16:5:16:9 | [VarDecl] color | semmle.label | [VarDecl] color | | type_definitions.ts:16:5:16:16 | [VariableDeclarator] color: Color | semmle.label | [VariableDeclarator] color: Color | | type_definitions.ts:16:12:16:16 | [LocalTypeAccess] Color | semmle.label | [LocalTypeAccess] Color | | type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.label | [EnumDeclaration,TypeDefinition] enum En ... ember } | -| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.order | 119 | +| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.order | 120 | | type_definitions.ts:18:6:18:22 | [VarDecl] EnumWithOneMember | semmle.label | [VarDecl] EnumWithOneMember | | type_definitions.ts:18:26:18:31 | [EnumMember,TypeDefinition] member | semmle.label | [EnumMember,TypeDefinition] member | | type_definitions.ts:18:26:18:31 | [VarDecl] member | semmle.label | [VarDecl] member | | type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.label | [DeclStmt] let e = ... | -| type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.order | 120 | +| type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.order | 121 | | type_definitions.ts:19:5:19:5 | [VarDecl] e | semmle.label | [VarDecl] e | | type_definitions.ts:19:5:19:24 | [VariableDeclarator] e: EnumWithOneMember | semmle.label | [VariableDeclarator] e: EnumWithOneMember | | type_definitions.ts:19:8:19:24 | [LocalTypeAccess] EnumWithOneMember | semmle.label | [LocalTypeAccess] EnumWithOneMember | | type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | semmle.order | 121 | +| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | semmle.order | 122 | | type_definitions.ts:21:6:21:10 | [Identifier] Alias | semmle.label | [Identifier] Alias | | type_definitions.ts:21:12:21:12 | [Identifier] T | semmle.label | [Identifier] T | | type_definitions.ts:21:12:21:12 | [TypeParameter] T | semmle.label | [TypeParameter] T | | type_definitions.ts:21:17:21:17 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | | type_definitions.ts:21:17:21:19 | [ArrayTypeExpr] T[] | semmle.label | [ArrayTypeExpr] T[] | | type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.label | [DeclStmt] let aliasForNumberArray = ... | -| type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.order | 122 | +| type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.order | 123 | | type_definitions.ts:22:5:22:23 | [VarDecl] aliasForNumberArray | semmle.label | [VarDecl] aliasForNumberArray | | type_definitions.ts:22:5:22:38 | [VariableDeclarator] aliasFo ... number> | semmle.label | [VariableDeclarator] aliasFo ... number> | | type_definitions.ts:22:26:22:30 | [LocalTypeAccess] Alias | semmle.label | [LocalTypeAccess] Alias | @@ -5534,6 +5561,56 @@ edges | tst.ts:508:17:508:36 | [DotExpr] obj[key].toUpperCase | tst.ts:508:26:508:36 | [Label] toUpperCase | semmle.order | 2 | | tst.ts:508:17:508:38 | [MethodCallExpr] obj[key ... rCase() | tst.ts:508:17:508:36 | [DotExpr] obj[key].toUpperCase | semmle.label | 0 | | tst.ts:508:17:508:38 | [MethodCallExpr] obj[key ... rCase() | tst.ts:508:17:508:36 | [DotExpr] obj[key].toUpperCase | semmle.order | 0 | +| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:513:11:513:14 | [VarDecl] TS57 | semmle.label | 1 | +| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:513:11:513:14 | [VarDecl] TS57 | semmle.order | 1 | +| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:514:3:514:26 | [DeclStmt] const a = ... | semmle.label | 2 | +| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:514:3:514:26 | [DeclStmt] const a = ... | semmle.order | 2 | +| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:515:3:517:3 | [ExportDeclaration] export ... }; } | semmle.label | 3 | +| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:515:3:517:3 | [ExportDeclaration] export ... }; } | semmle.order | 3 | +| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:519:3:519:32 | [DeclStmt] const e1 = ... | semmle.label | 4 | +| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:519:3:519:32 | [DeclStmt] const e1 = ... | semmle.order | 4 | +| tst.ts:514:3:514:26 | [DeclStmt] const a = ... | tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | semmle.label | 1 | +| tst.ts:514:3:514:26 | [DeclStmt] const a = ... | tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | semmle.order | 1 | +| tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | tst.ts:514:17:514:17 | [VarDecl] a | semmle.label | 1 | +| tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | tst.ts:514:17:514:17 | [VarDecl] a | semmle.order | 1 | +| tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | tst.ts:514:20:514:25 | [KeywordTypeExpr] symbol | semmle.label | 2 | +| tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | tst.ts:514:20:514:25 | [KeywordTypeExpr] symbol | semmle.order | 2 | +| tst.ts:515:3:517:3 | [ExportDeclaration] export ... }; } | tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | semmle.label | 1 | +| tst.ts:515:3:517:3 | [ExportDeclaration] export ... }; } | tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | semmle.order | 1 | +| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:515:16:515:16 | [VarDecl] A | semmle.label | 1 | +| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:515:16:515:16 | [VarDecl] A | semmle.order | 1 | +| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 2 | +| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 2 | +| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | semmle.label | 3 | +| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | semmle.order | 3 | +| tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:515:18:515:17 | [FunctionExpr] () {} | semmle.label | 2 | +| tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:515:18:515:17 | [FunctionExpr] () {} | semmle.order | 2 | +| tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:515:18:515:17 | [Label] constructor | semmle.label | 1 | +| tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:515:18:515:17 | [Label] constructor | semmle.order | 1 | +| tst.ts:515:18:515:17 | [FunctionExpr] () {} | tst.ts:515:18:515:17 | [BlockStmt] {} | semmle.label | 5 | +| tst.ts:515:18:515:17 | [FunctionExpr] () {} | tst.ts:515:18:515:17 | [BlockStmt] {} | semmle.order | 5 | +| tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | tst.ts:516:7:516:24 | [FunctionExpr] [a]() { return 1 } | semmle.label | 1 | +| tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | tst.ts:516:7:516:24 | [FunctionExpr] [a]() { return 1 } | semmle.order | 1 | +| tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | tst.ts:516:8:516:8 | [VarRef] a | semmle.label | 2 | +| tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | tst.ts:516:8:516:8 | [VarRef] a | semmle.order | 2 | +| tst.ts:516:7:516:24 | [FunctionExpr] [a]() { return 1 } | tst.ts:516:13:516:24 | [BlockStmt] { return 1 } | semmle.label | 5 | +| tst.ts:516:7:516:24 | [FunctionExpr] [a]() { return 1 } | tst.ts:516:13:516:24 | [BlockStmt] { return 1 } | semmle.order | 5 | +| tst.ts:516:13:516:24 | [BlockStmt] { return 1 } | tst.ts:516:15:516:22 | [ReturnStmt] return 1 | semmle.label | 1 | +| tst.ts:516:13:516:24 | [BlockStmt] { return 1 } | tst.ts:516:15:516:22 | [ReturnStmt] return 1 | semmle.order | 1 | +| tst.ts:516:15:516:22 | [ReturnStmt] return 1 | tst.ts:516:22:516:22 | [Literal] 1 | semmle.label | 1 | +| tst.ts:516:15:516:22 | [ReturnStmt] return 1 | tst.ts:516:22:516:22 | [Literal] 1 | semmle.order | 1 | +| tst.ts:519:3:519:32 | [DeclStmt] const e1 = ... | tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | semmle.label | 1 | +| tst.ts:519:3:519:32 | [DeclStmt] const e1 = ... | tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | semmle.order | 1 | +| tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | tst.ts:519:17:519:18 | [VarDecl] e1 | semmle.label | 1 | +| tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | tst.ts:519:17:519:18 | [VarDecl] e1 | semmle.order | 1 | +| tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | semmle.label | 2 | +| tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | semmle.order | 2 | +| tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | tst.ts:519:21:519:21 | [LocalTypeAccess] A | semmle.label | 1 | +| tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | tst.ts:519:21:519:21 | [LocalTypeAccess] A | semmle.order | 1 | +| tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | tst.ts:519:23:519:30 | [TypeofTypeExpr] typeof a | semmle.label | 2 | +| tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | tst.ts:519:23:519:30 | [TypeofTypeExpr] typeof a | semmle.order | 2 | +| tst.ts:519:23:519:30 | [TypeofTypeExpr] typeof a | tst.ts:519:30:519:30 | [LocalVarTypeAccess] a | semmle.label | 1 | +| tst.ts:519:23:519:30 | [TypeofTypeExpr] typeof a | tst.ts:519:30:519:30 | [LocalVarTypeAccess] a | semmle.order | 1 | | tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | 1 | | tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.order | 1 | | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleCJS.cts:1:17:1:28 | [VarDecl] tstModuleCJS | semmle.label | 0 | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected index b786fae3713e..150ce1867248 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected @@ -728,6 +728,13 @@ getExprType | tst.ts:508:17:508:38 | obj[key ... rCase() | string | | tst.ts:508:21:508:23 | key | string | | tst.ts:508:26:508:36 | toUpperCase | () => string | +| tst.ts:513:11:513:14 | TS57 | typeof TS57 in tst.ts | +| tst.ts:514:17:514:17 | a | symbol | +| tst.ts:515:16:515:16 | A | A | +| tst.ts:516:7:516:24 | [a]() { return 1 } | () => number | +| tst.ts:516:8:516:8 | a | symbol | +| tst.ts:516:22:516:22 | 1 | 1 | +| tst.ts:519:17:519:18 | e1 | () => number | | tstModuleCJS.cts:1:17:1:28 | tstModuleCJS | () => "a" \| "b" | | tstModuleCJS.cts:2:12:2:15 | Math | Math | | tstModuleCJS.cts:2:12:2:22 | Math.random | () => number | @@ -843,6 +850,7 @@ getTypeDefinitionType | tst.ts:447:5:458:5 | class P ... }\\n } | Person | | tst.ts:473:5:476:5 | class S ... ;\\n } | SomeClass | | tst.ts:481:5:481:34 | type Pa ... T, T]; | Pair3 | +| tst.ts:515:10:517:3 | class A ... };\\n } | A | | type_alias.ts:1:1:1:17 | type B = boolean; | boolean | | type_alias.ts:5:1:5:50 | type Va ... ay>; | ValueOrArray | | type_alias.ts:9:1:15:13 | type Js ... Json[]; | Json | @@ -1219,6 +1227,11 @@ getTypeExprType | tst.ts:506:27:506:32 | string | string | | tst.ts:506:35:506:41 | unknown | unknown | | tst.ts:506:50:506:55 | string | string | +| tst.ts:514:20:514:25 | symbol | symbol | +| tst.ts:519:21:519:21 | A | A | +| tst.ts:519:21:519:31 | A[typeof a] | () => number | +| tst.ts:519:23:519:30 | typeof a | symbol | +| tst.ts:519:30:519:30 | a | symbol | | tstModuleCJS.cts:1:33:1:35 | 'a' | "a" | | tstModuleCJS.cts:1:33:1:41 | 'a' \| 'b' | "a" \| "b" | | tstModuleCJS.cts:1:39:1:41 | 'b' | "b" | @@ -1290,6 +1303,7 @@ getTypeExprType missingToString referenceDefinition | A | badTypes.ts:5:1:5:29 | interfa ... is.B {} | +| A | tst.ts:515:10:517:3 | class A ... };\\n } | | Action | tst.ts:252:3:254:50 | type Ac ... ring }; | | Alias | type_definitions.ts:21:1:21:20 | type Alias = T[]; | | Alias | type_definitions.ts:21:1:21:20 | type Alias = T[]; | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts index 4c29465b5645..87f876be9d0f 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts +++ b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts @@ -508,4 +508,13 @@ module TS55 { var str = obj[key].toUpperCase(); // Now okay, previously was error } } -} \ No newline at end of file +} + +namespace TS57{ + declare const a: symbol; + export class A { + [a]() { return 1 }; + } + + declare const e1: A[typeof a]; // Now okay, previously was compilation error TS2538: Type 'symbol' cannot be used as an index type. +} From 37712d2e219b70ac7edb19b4b1718e5fdf1d93ed Mon Sep 17 00:00:00 2001 From: Napalys Date: Wed, 13 Nov 2024 08:58:54 +0100 Subject: [PATCH 04/35] Added a new way to simulate CatastrophicError for integration-tests. In the future environmental variable, might be a more sustainable solution. --- .../internal-error/src/my_failure.ts | 3039 ++++++++++++++++- 1 file changed, 3022 insertions(+), 17 deletions(-) diff --git a/javascript/ql/integration-tests/diagnostics/internal-error/src/my_failure.ts b/javascript/ql/integration-tests/diagnostics/internal-error/src/my_failure.ts index 29e78b136e82..f2a1644e18ff 100644 --- a/javascript/ql/integration-tests/diagnostics/internal-error/src/my_failure.ts +++ b/javascript/ql/integration-tests/diagnostics/internal-error/src/my_failure.ts @@ -1,17 +1,3022 @@ -type Output = { - (...args: S): any; -}; - -declare function createThing( - type: K, - fn: (...args: S) => any -): Output; - -const one = createThing("one", () => ({})); - -const two = createThing("two", () => ({})); - -const three = createThing("three", (cursor: string) => null); -const four = createThing("four", (error: number) => null); - -type Events = Array; +console.log( + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 + + 1 +); From a709fc6a54a4c2f0348d9a3c0a7740472a8ad84b Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 19 Nov 2024 17:20:25 +0100 Subject: [PATCH 05/35] Rust: add some `toString` implementations --- rust/ql/.generated.list | 42 ------------------- rust/ql/.gitattributes | 42 ------------------- .../rust/elements/internal/ArrayExprImpl.qll | 6 ++- .../rust/elements/internal/AwaitExprImpl.qll | 6 ++- .../rust/elements/internal/BecomeExprImpl.qll | 6 ++- .../rust/elements/internal/BlockExprImpl.qll | 6 ++- .../rust/elements/internal/BoxPatImpl.qll | 6 ++- .../rust/elements/internal/BreakExprImpl.qll | 12 ++++++ .../rust/elements/internal/CallExprImpl.qll | 6 ++- .../rust/elements/internal/CastExprImpl.qll | 6 ++- .../elements/internal/ClosureExprImpl.qll | 6 ++- .../rust/elements/internal/CommentImpl.qll | 9 ++++ .../elements/internal/ContinueExprImpl.qll | 11 +++++ .../rust/elements/internal/EnumImpl.qll | 6 ++- .../rust/elements/internal/FieldExprImpl.qll | 6 ++- .../rust/elements/internal/FunctionImpl.qll | 2 +- .../rust/elements/internal/IfExprImpl.qll | 11 ++++- .../rust/elements/internal/ImplImpl.qll | 15 ++++++- .../rust/elements/internal/IndexExprImpl.qll | 6 ++- .../rust/elements/internal/LabelImpl.qll | 6 ++- .../rust/elements/internal/LetElseImpl.qll | 6 ++- .../rust/elements/internal/LetExprImpl.qll | 11 ++++- .../rust/elements/internal/LetStmtImpl.qll | 12 +++++- .../rust/elements/internal/LifetimeImpl.qll | 6 ++- .../rust/elements/internal/LiteralPatImpl.qll | 6 ++- .../rust/elements/internal/LoopExprImpl.qll | 6 ++- .../rust/elements/internal/MacroCallImpl.qll | 6 ++- .../rust/elements/internal/MatchArmImpl.qll | 11 ++++- .../rust/elements/internal/MatchExprImpl.qll | 2 + .../rust/elements/internal/ModuleImpl.qll | 6 ++- .../rust/elements/internal/NeverTypeImpl.qll | 6 ++- .../rust/elements/internal/OrPatImpl.qll | 2 + .../rust/elements/internal/ParamImpl.qll | 8 +++- .../rust/elements/internal/ParenExprImpl.qll | 6 ++- .../rust/elements/internal/ParenPatImpl.qll | 6 ++- .../rust/elements/internal/ParenTypeImpl.qll | 6 ++- .../rust/elements/internal/PathPatImpl.qll | 6 ++- .../rust/elements/internal/PathTypeImpl.qll | 6 ++- .../rust/elements/internal/RangeExprImpl.qll | 6 ++- .../elements/internal/RecordExprFieldImpl.qll | 11 ++++- .../rust/elements/internal/RecordExprImpl.qll | 6 ++- .../rust/elements/internal/RecordPatImpl.qll | 6 ++- .../rust/elements/internal/RefExprImpl.qll | 13 +++++- .../rust/elements/internal/RefPatImpl.qll | 11 ++++- .../rust/elements/internal/RestPatImpl.qll | 6 ++- .../rust/elements/internal/ReturnExprImpl.qll | 8 +++- .../rust/elements/internal/TraitImpl.qll | 6 ++- .../elements/internal/UnderscoreExprImpl.qll | 6 ++- .../rust/elements/internal/WhileExprImpl.qll | 6 ++- .../elements/internal/WildcardPatImpl.qll | 6 ++- 50 files changed, 256 insertions(+), 169 deletions(-) diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index ca25e0533fc8..a26f1d4155e1 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -169,7 +169,6 @@ lib/codeql/rust/elements/internal/AbiImpl.qll 01439712ecadc9dc8da6f74d2e19cee13c lib/codeql/rust/elements/internal/ArgListConstructor.qll a73685c8792ae23a2d628e7357658efb3f6e34006ff6e9661863ef116ec0b015 0bee572a046e8dfc031b1216d729843991519d94ae66280f5e795d20aea07a22 lib/codeql/rust/elements/internal/ArgListImpl.qll 19664651c06b46530f0ae5745ccb3233afc97b9152e053761d641de6e9c62d38 40af167e571f5c255f264b3be7cc7f5ff42ec109661ca03dcee94e92f8facfc6 lib/codeql/rust/elements/internal/ArrayExprConstructor.qll f4ac4efefe5fe4fe1e666f35b1ee92d2243d977b3f3308151c89f61582203c09 4167ae58ec869f7dbd8467093c4a53afd7c1efcf1cc865efa62b4eb484bd7ff8 -lib/codeql/rust/elements/internal/ArrayExprImpl.qll 205db9816ec56409db1a0c3987e3a64b8e88b9942055d4bcf84a5fd5943efded 094c954c2861fa7dea69247c9c16ddc6c8699dcd3201a993c72229450bed1490 lib/codeql/rust/elements/internal/ArrayTypeConstructor.qll 9e92e6c40df992b4d71ae0e80392e81499604c7586a671b89d31d2d98060380e 76a1915a88f50ffa60bf129237bae2d66cf26d2a9018aca8ccb343929e847531 lib/codeql/rust/elements/internal/ArrayTypeImpl.qll e22d4f4eb21ba1ea44dd53e0c80aa60ec3a42818c1fc2d512c92dc496a6e2cb3 1b4a7347dbb9310ace1e9e3d08c3ba53c1dc441539cebcb4a78f64a58097bc0a lib/codeql/rust/elements/internal/AsmExprConstructor.qll 36c68023b58beec30af9f05d9d902a4c49faa0206b5528d6aad494a91da07941 4d91b7d30def03e634b92c0d7b99b47c3aadd75f4499f425b80355bc775ea5b6 @@ -182,25 +181,18 @@ lib/codeql/rust/elements/internal/AssocTypeArgImpl.qll 429f12a1a53c81634fc35331b lib/codeql/rust/elements/internal/AttrConstructor.qll de1dd30692635810277430291ba3889a456344dbd25938d9f8289ab22506d5cd 57b62b2b07dee4a9daeed241e0b4514ba36fd5ec0abb089869a4d5b2c79d6e72 lib/codeql/rust/elements/internal/AttrImpl.qll 486d307f74a48e6475fe014b07d5e0e13bbdf493ea80823e77e39747edf470d7 0847aa78d0e075aedbe46c10935969046bde4a7ab842da9d184739eb99a777c2 lib/codeql/rust/elements/internal/AwaitExprConstructor.qll 44ff1653e73d5b9f6885c0a200b45175bb8f2ceb8942c0816520976c74f1fc77 11e6f4a1e1462a59e2652925c8bd6663e0346c311c0b60ebe80daa3b55b268b0 -lib/codeql/rust/elements/internal/AwaitExprImpl.qll 97eb9abc0f30ead9385f31c87b461e6f1bbfbeaac17810838bb94543bfca181f 66357ffc8c106aae565524d7110e9f50f2b3f573b1508c1d1b02db02af4cc52e lib/codeql/rust/elements/internal/BecomeExprConstructor.qll ba073aaa256cb8827a0307c3128d50f62b11aac0b1f324e48c95f30351a9b942 3a787ded505c3158fa4f4923f66e8ecdcb7b5f86f27f64c5412dc32dca031f18 -lib/codeql/rust/elements/internal/BecomeExprImpl.qll 8522410257ca9ff09e5314c3a39fba02f6ba18e1d4349b91f8823586317f3e47 073a877a6d72c5b762aac64cdd843fd2872aaefb9e264fb90eac8c25753a6e07 lib/codeql/rust/elements/internal/BinaryExprConstructor.qll 7f9b17757f78b9fb7c46e21d2040a77fa50083bef4911c8464991c3d1ad91d87 a59390cd8e896c0bfbdc9ba0674e06d980ffcefa710fbc9886be52ed427e9717 lib/codeql/rust/elements/internal/BlockExprConstructor.qll 438337c807645e98a01440f3f4610d68b0567ba15c8f51dc43bf5a30c9af3696 48ce7a546910c884619762349b8ada9836284f8008298fdb0070a38f7ddf25a0 -lib/codeql/rust/elements/internal/BlockExprImpl.qll 36ac09e4a6eeeec22919b62b1d004bdb5bb2527e67932c308aec383a770768d6 3b4b2a2014f6fe075c63a2d633b297566b548ef2e4343cadf067a9edbcadc876 lib/codeql/rust/elements/internal/BoxPatConstructor.qll 153f110ba25fd6c889092bfd16f73bb610fa60d6e0c8965d5f44d2446fcd48a2 9324cf0d8aa29945551bf8ab64801d598f57aab8cd4e19bcd4e9ef8a4a4e06eb -lib/codeql/rust/elements/internal/BoxPatImpl.qll d62a3cc1d5bab6bd258f702ec731ec57f0e5ef2672ab9de4b6f3b558078629eb 26b4fabb676adbbdb0d7f81449e493ee49380ea04d131f779714ac2434bb323a lib/codeql/rust/elements/internal/BreakExprConstructor.qll 356be043c28e0b34fdf925a119c945632ee883c6f5ebb9a27003c6a8d250afd9 bb77e66b04bb9489340e7506931559b94285c6904b6f9d2f83b214cba4f3cfd5 lib/codeql/rust/elements/internal/CallExprBaseImpl.qll d2749cc1a9d7ee8bf7f34b6c3e0238a576a68e439a8c10a503c164ff45ffcbeb ffc7b0a8841945fe6736b0e1aed7d9ed69185db03dee2b16da121325b39397c7 lib/codeql/rust/elements/internal/CallExprConstructor.qll 742b38e862e2cf82fd1ecc4d4fc5b4782a9c7c07f031452b2bae7aa59d5aa13a cad6e0a8be21d91b20ac2ec16cab9c30eae810b452c0f1992ed87d5c7f4144dc -lib/codeql/rust/elements/internal/CallExprImpl.qll 7e48610680ba6f2876a1a005ab0743496dd2364b9c44aca441bd33e11317e2d7 bb12c3c28156b40796fe3ba112760f87bb5abb323aab3c5b7bb3e0facaef8d35 lib/codeql/rust/elements/internal/CallableImpl.qll 917a7d298583e15246428f32fba4cde6fc57a1790262731be27a96baddd8cf5e c5c0848024e0fe3fbb775e7750cf1a2c2dfa454a5aef0df55fec3d0a6fe99190 lib/codeql/rust/elements/internal/CastExprConstructor.qll f3d6e10c4731f38a384675aeab3fba47d17b9e15648293787092bb3247ed808d d738a7751dbadb70aa1dcffcf8af7fa61d4cf8029798369a7e8620013afff4ed -lib/codeql/rust/elements/internal/CastExprImpl.qll 3c57b75f01efc70013ba3f05bd79fe2747fe1d1de47b84ff73b06ad38b4f1093 da813adc3390d23ec0643e37226a58e8afdb78e889380ad265d7531a344b841c lib/codeql/rust/elements/internal/ClosureBinderConstructor.qll 6e376ab9d40308e95bcdaf1cc892472c92099d477720192cd382d2c4e0d9c8a1 60a0efe50203ad5bb97bdfc06d602182edcc48ac9670f2d27a9675bd9fd8e19f lib/codeql/rust/elements/internal/ClosureBinderImpl.qll 58c6b17d34d678802ce3484f556482f3f6e3c3ff9a4be0e845bc2077818ab6fb 467261e12cba46f324364f5366bdb0034bf3c922b08307d39441ea5181e3f5f8 lib/codeql/rust/elements/internal/ClosureExprConstructor.qll a348229d2b25c7ebd43b58461830b7915e92d31ae83436ec831e0c4873f6218a 70a1d2ac33db3ac4da5826b0e8628f2f29a8f9cdfd8e4fd0e488d90ce0031a38 -lib/codeql/rust/elements/internal/ClosureExprImpl.qll 5ae3d211273b3effc3bff9f06bcef480f8264084e0509e69b8ff29bc29f47b05 ff562bc8d15ecb76ada3111c7c74dd990a0e80f41a32477f5f2f7db9e8f71102 lib/codeql/rust/elements/internal/CommentConstructor.qll 0b4a6a976d667bf7595500dfb91b9cfc87460a501837ba5382d9a8d8321d7736 7d02d8c94a319dc48e7978d5270e33fc5c308d443768ff96b618236d250123f1 lib/codeql/rust/elements/internal/ConstArgConstructor.qll f63021dc1ca2276786da3a981d06c18d7a360b5e75c08bca5d1afece4f7c4a83 487a870cbf5ed6554d671a8e159edd9261d853eba2d28ce2bd459759f47f11f2 lib/codeql/rust/elements/internal/ConstArgImpl.qll 234fe6533c208a1731cdb423aa3a28909bd7e042dbc28bbedfd4f62e42b6f21e c576a49006f7a10483041fc07f2f0d089710ac61840be61a2e71140db709f9c6 @@ -214,7 +206,6 @@ lib/codeql/rust/elements/internal/ContinueExprConstructor.qll cd93f1b35ccdb031d7 lib/codeql/rust/elements/internal/DynTraitTypeConstructor.qll 2bfd81fdf116b76f4a62b47bed5f0a730c04ce79747ecd1d3b683b8de22ff4aa 375c57350c432351396b92f28fded1e95a8002e3a1b31f3b66039f9b3d9bdea9 lib/codeql/rust/elements/internal/DynTraitTypeImpl.qll 8ccf27db0b898f518874ae094e5c97206384ad2fd3f82f81a5ecaad953278f71 e28ab56b8814a804e23afa790ca0f9a2665195b0b316d6cc52936e76ce5c0011 lib/codeql/rust/elements/internal/EnumConstructor.qll eca1a13937faacb1db50e4cf69d175f992f2204a5aaed9144bb6f3cb63814ac5 1bafba78b2729fdb052a25a1ba3f4f70871564aa4df632b4a1d467858a437924 -lib/codeql/rust/elements/internal/EnumImpl.qll c4dfa97b0c656957390417ab09c81b29b67fbff1b7b14976d65625ebea6b2c11 940303d4d4cec130f1981d309f8eaea6803c14a41174bbe9a87dd12ce4975945 lib/codeql/rust/elements/internal/ExprImpl.qll ab20ee174e2e786f34af6e5dedf3ec071bb89fc266b3e91df6377f72aa38d3f2 f68192700f449bf1c229cfbaabd5353c7c559941c915d5a0c88752cf9844194b lib/codeql/rust/elements/internal/ExprStmtConstructor.qll dd6bb06a7d48c12f630aafd611621cc50ce0f3e7d9abba5484a695f90879264b dc8b6ec8acc314e041ae71868803630c5d4cab488c72c1ea929bb756e1847c52 lib/codeql/rust/elements/internal/ExprStmtImpl.qll 420221c64245b490dab85f4e50d6b408cf488349869eb87312c166e185ad8145 2c2a4c71eea8c1ad8823e8e22780fadebb38ae502b3a7b9b062923a188fef692 @@ -226,7 +217,6 @@ lib/codeql/rust/elements/internal/ExternItemImpl.qll 577c8ac387c47746e3b45f94337 lib/codeql/rust/elements/internal/ExternItemListConstructor.qll 9e4f6a036707c848c0553119272fd2b11c1740dd9910a626a9a0cf68a55b249b efde86b18bd419154fb5b6d28790a14ea989b317d84b5c1ddbdfb29c6924fd86 lib/codeql/rust/elements/internal/ExternItemListImpl.qll e89d0cf938f6e137ba1ce7907a923b1ab2be7be2fdd642c3b7a722f11b9199f8 85906d3ce89e5abc301cc96ea5104d53e90af3f5f22f8d54ec437687096e39d8 lib/codeql/rust/elements/internal/FieldExprConstructor.qll b3be2c4ccaf2c8a1283f3d5349d7f4f49f87b35e310ef33491023c5ab6f3abc5 645d0d4073b032f6b7284fc36a10a6ec85596fb95c68f30c09504f2c5a6f789f -lib/codeql/rust/elements/internal/FieldExprImpl.qll bae3828bdee6fa3b36219e831cecc2a09fd3c40c4a945f8a19fb5d8765c6f302 be4b89e39013a380bc172ac46e496f14ebdebb1d93e1b7ffb3bab98e08db3f6f lib/codeql/rust/elements/internal/FieldListImpl.qll 02a09d1d146030c68cead4614f4eef75854f19e55ed1eda60b34c4858a8d4a88 9b9f5e77546434c771d2f785119577ec46569a18473daa4169fb84a097369493 lib/codeql/rust/elements/internal/FnPtrTypeConstructor.qll 494c53ee599039c02145f91394d8dfe7635b32d03f9fcde5efcc99ced437fec8 992462b1b6b9e64b6201f3c6c232ca524f126efcb562c9f0c176677bb559f33c lib/codeql/rust/elements/internal/FnPtrTypeImpl.qll 5d70f71e08341dfa851fc53a47cf362786b57f44244a636e2fbbad3d1c41371e 51d6a1b1132204129bb8ee9d2b72c6d13ce4b3ec8b185d3732d2e64d3f80e807 @@ -246,39 +236,28 @@ lib/codeql/rust/elements/internal/GenericParamListConstructor.qll 7221146d1724e0 lib/codeql/rust/elements/internal/GenericParamListImpl.qll 524aa0949df6d4d2cb9bee6226650f63a6f181d7644933fa265673b281074885 27b0210e5eaa2040bc8a093e35e1394befb6994b25369544738d0447ef269a9c lib/codeql/rust/elements/internal/IdentPatConstructor.qll 09792f5a070996b65f095dc6b1b9e0fb096a56648eed26c0643c59f82377cab0 0bb1a9fcdc62b5197aef3dd6e0ea4d679dde10d5be54b57b5209727ba66e078b lib/codeql/rust/elements/internal/IfExprConstructor.qll 03088b54c8fa623f93a5b5a7eb896f680e8b0e9025488157a02c48aaebc6ad56 906f916c3690d0721a31dd31b302dcdcec4233bb507683007d82cf10793a648f -lib/codeql/rust/elements/internal/IfExprImpl.qll 96dc5be0a650a74f96e0c2214eb58f1af5278ad1695ad790b660fdecb6738c14 06a292fcc459297ef3a0ef5c75c887f993ccd6350eb3fb0d2493e5b7c7199b6b lib/codeql/rust/elements/internal/ImplConstructor.qll 24edccca59f70d812d1458b412a45310ddc096d095332f6e3258903c54c1bb44 7eb673b3ab33a0873ee5ce189105425066b376821cce0fc9eb8ace22995f0bc7 -lib/codeql/rust/elements/internal/ImplImpl.qll 33a57be871fe3ab08467a65f2e2e9fb7df9f096c98e9f86d8a755eaf6da6e446 f01d0e9bfccf3926ae9720d3d660ba97e1c094f318bfb252449b2d387176f6a9 lib/codeql/rust/elements/internal/ImplTraitTypeConstructor.qll b47501280b026a4e9c21ace21d9ae59f4d126a3a1e03a6088ca38cd676cc4f6d 3b0b325ab0139b290a81355559227050ba3096a58f9ff01c4c0f5c5fb5beb6ee lib/codeql/rust/elements/internal/ImplTraitTypeImpl.qll 9826a676525c98c30019f62f3c5943b4f62f278ed738dcc023d15f82f36a9d32 da369a61b95685c29fce3c07082d2a58ab633d526d094fa9eaefa82f564609f6 lib/codeql/rust/elements/internal/IndexExprConstructor.qll 99bdc3d793c4dbd993860da60abe2b7c604345d645e86916462bc55a6939a5d1 3fe9d7da725956903707806aadbecac8d5b3874e8bed63c9bab54fff630e75dd -lib/codeql/rust/elements/internal/IndexExprImpl.qll 7914bace26dadf2c1752b65afad2ed226165507e20f3dba7949696103f3d586e 708a9f7eff1cbfcf93841ee009dc01354f4ea3d2e1e00608924e670070410e20 lib/codeql/rust/elements/internal/InferTypeConstructor.qll fb8f2aec6cd1e681cd84a7bd574459e19b9b2a152009290e2eac550f012a06b7 e2b1694f00a4e6a82b13d08d7bb95c98a73792370c1155263d696e60d39b2c3b lib/codeql/rust/elements/internal/InferTypeImpl.qll 9d0bf471a7e0c2671aae52cebadc763ed13e6a62451bf22da3061d7781d8f0bf 4e9e218862e48700523d882eb64d24135289216653cf92195f74eb8a35f50d7c lib/codeql/rust/elements/internal/ItemImpl.qll 3eaa97dcbdb8870acaebc1e11a37a5cfdfa200751461e54d3a52ca48b90ba9bd 41fbd1110b0e24f4d5a3deee0a51c02d206178111a361a1e94501ca1ab70d7f7 lib/codeql/rust/elements/internal/ItemListConstructor.qll 08af3bd12536941c3dd4a43c81cc861be24325e242e2593c087a3ce632674291 2fa166159c409d2aaffa73a30babb40829a6de580bd40894d909ee6152801082 lib/codeql/rust/elements/internal/ItemListImpl.qll fb27417bb3ee17a739ae966dd7c6f382bc2a1de3e7efdfe1586d76a257c0b573 dee7ded650df8ef46b2ac9d472718536fd76dffee86bc208b5a6144060221886 lib/codeql/rust/elements/internal/LabelConstructor.qll 1f814c94251e664bfa1b1a606aef995382e40e78d4f953350ec951ee0bc8bd34 3157fb8c7c6bd365a739f217ad73ba1e0b65ccd59b922e5ab034e3449915b36c -lib/codeql/rust/elements/internal/LabelImpl.qll e1934c3f01e6c9a2517001285bc8e36166757a50ff63be09f9000171c04130f7 4f93e722af890b5241bf55674b29ac5cb134cfefb47eba983503dbd4212abb20 lib/codeql/rust/elements/internal/LetElseConstructor.qll b2b5d68e5701379a0870aa6278078e09f06aa18ddd14045fc6ae62e90827ece7 7359e70bea8a78bcaf6e6ecc8cc37c5135ae31415b74645594456cc8daa82118 -lib/codeql/rust/elements/internal/LetElseImpl.qll 1c801275993b809e80a847736f080a9b650710ef8862797504495d62904a3a71 b79d4760d8e333893e984e45f21eb463dce7f2a49ebd0708321c8653aa8c20cb lib/codeql/rust/elements/internal/LetExprConstructor.qll 66f27cbdafb2b72b31d99645ec5ed72f4b762a7d6f5d292d7639dd8b86272972 7da048f4d7f677919c41d5c87ead301eacc12ece634d30b30a8ae1fab580ff30 -lib/codeql/rust/elements/internal/LetExprImpl.qll d9e2f8a2f4c7cf3b80178012b5f38b029064a52e705301b99c7477ec1d9fe479 1a059d383a5988b32ade329d2ac809f3a830eb9c54020e3271861aa9ef136ab8 lib/codeql/rust/elements/internal/LetStmtConstructor.qll 7ee0d67bebd6d3b9c7560137c165675d17b231318c084952ba4a2226d61e501f 84199ba755bb6c00579eee245b2bca41da478ca813b202b05abaa1246dcf13d8 -lib/codeql/rust/elements/internal/LetStmtImpl.qll 2f3f387a78d1751652bd22dc0ea6cb39f0e186847b6f0dafd74d0f89e2db495a 2ab5a17f588e385f614c8a104a17a91859389227635bd239694a799643727ffc lib/codeql/rust/elements/internal/LifetimeArgConstructor.qll 270f7de475814d42e242e5bfe45d7365a675e62c10257110286e6a16ce026454 643d644b60bfe9943507a77011e5360231ac520fbc2f48e4064b80454b96c19b lib/codeql/rust/elements/internal/LifetimeArgImpl.qll 2d31b328c07b8922e2c448137d577af429150245170d26fe4a9220cba1a26bfe 18c5f5747ff4be87820c78cadd899d57e1d52c5cd6ae3f4e56ee2f5d3164bd41 lib/codeql/rust/elements/internal/LifetimeConstructor.qll 2babe40165547ac53f69296bb966201e8634d6d46bc413a174f52575e874d8cd ef419ae0e1b334d8b03cdb96bc1696787b8e76de5d1a08716e2ff5bd7d6dc60d -lib/codeql/rust/elements/internal/LifetimeImpl.qll 14ec1a4fa0c84fa9e75ea0babebae9c666909239806ed21325c32e47e11c8806 891168f29d4e06a927ec01ef8fd21ff6e0a0a3deadcf1481c99c74bf2ef20536 lib/codeql/rust/elements/internal/LifetimeParamConstructor.qll 530c59a701d814ebc5e12dc35e3bfb84ed6ee9b5be7a0956ea7ada65f75ff100 ff6507e5d82690e0eec675956813afabbbcfb89626b2dbfffe3da34baeff278c lib/codeql/rust/elements/internal/LifetimeParamImpl.qll 8909288801bff8d3e87096dff4b45f434a4c064a9d69d8943a0b30970e011ef9 6d8f80eca24112b5eb659fe5d5fca4fd91c3df20ecab1085dfee9176091237b8 lib/codeql/rust/elements/internal/LiteralExprConstructor.qll 8ea3569bd50704ce7d57be790d2dfd38f4c40cb0b12e0dd60d6830e8145a686f 88d07ad3298003f314f74bd8e3d64a3094de32080ad42a7e6741c416c3856095 lib/codeql/rust/elements/internal/LiteralPatConstructor.qll b660cb428a0cba0b713fc7b07d5d2921de4a2f65a805535fb6387684c40620de 2dbc9fbc56e9de53d24265d6b13738ef5b9ced33cc3c4c1c270e04dc2fc1330f -lib/codeql/rust/elements/internal/LiteralPatImpl.qll af74456649e3949bf27e91f2127389e5c9f2ee99241958afeaa5b55276170994 b8b744b1d0c1b85ec86c535a35fc75d6289636a0e1988500debf236faf24a2cd lib/codeql/rust/elements/internal/LoopExprConstructor.qll 45f3f8f7441fcab6adc58831421679ee07bac68ac0417f3cbc90c97426cc805b f7ab3361b4a11e898126378ea277d76949466946762cd6cb5e9e9b4bb9860420 -lib/codeql/rust/elements/internal/LoopExprImpl.qll 068b98978296b22ae59bf9e941e7e2683f4fee0f6c1affbda1fa42c93f015114 e40e384aeff61099d102a681e5dca1aabc6dd6694731f8570d6358e0197368b0 lib/codeql/rust/elements/internal/MacroCallConstructor.qll 707fee4fba1fd632cd00128f493e8919eaaea552ad653af4c1b7a138e362907d b49e7e36bf9306199f2326af042740ff858871b5c79f6aeddf3d5037044dbf1f -lib/codeql/rust/elements/internal/MacroCallImpl.qll 7732221a0d8677f32695be3e6263f6e5f8857225cf98cc31eb91592e175df260 7c4e15e092abbf3a6070141669f2614909eb0accaaee0da6f70495de6087337b lib/codeql/rust/elements/internal/MacroDefConstructor.qll 382a3bdf46905d112ee491620cc94f87d584d72f49e01eb1483f749e4709c055 eb61b90d8d8d655c2b00ff576ae20c8da9709eeef754212bc64d8e1558ad05ce lib/codeql/rust/elements/internal/MacroDefImpl.qll f26e787ffd43e8cb079db01eba04412dbf32c338938acf1bc09a2f094bbdfdfe 044f43bc94fe4b6df22afae32e9f039d1d0d9e85ad9f24b6388be71211c37ce5 lib/codeql/rust/elements/internal/MacroExprConstructor.qll b12edb21ea189a1b28d96309c69c3d08e08837621af22edd67ff9416c097d2df d35bc98e7b7b5451930214c0d93dce33a2c7b5b74f36bf99f113f53db1f19c14 @@ -294,7 +273,6 @@ lib/codeql/rust/elements/internal/MacroStmtsImpl.qll 27faff9da93ad7f22a6236c73eb lib/codeql/rust/elements/internal/MacroTypeConstructor.qll 0a23573a6f69b38f3d7470050b16197601d67bdd5a4b1a43a155b0b99ccdf6b5 19b623962e8e1f73e55e3ed9712d2a3fe84b9510b99062173902feb2458ec12a lib/codeql/rust/elements/internal/MacroTypeImpl.qll b8711279f09f521b05bb67568c089271b7913f863ee64dfdeec2c502de2cbdc8 51bd9d3a2fb2065bce7b193b485e225ca5c8ba2029e60cab427d43a90baf0880 lib/codeql/rust/elements/internal/MatchArmConstructor.qll b41c1d5822d54127ce376ef62c6a5fa60e11697319fc7d9c9c54fd313d784a93 96cca80e5684e5893c0e9c0dff365ef8ad9e15ff648c9969ba42d91f95abea05 -lib/codeql/rust/elements/internal/MatchArmImpl.qll 065dff16fc70b51924eb4db57be121283f4b5651105320901558bc93bfdf2641 37f4f6ecd23c5170ee5cb0041625c19a8d3245d56f6f1587a2e588eb86baecf9 lib/codeql/rust/elements/internal/MatchArmListConstructor.qll 8bc5ac978fe1158ef70d0ac06bdad9e02aadd657decb64abcc4ea03f6715a87a 4604ab0e524d0de6e19c16711b713f2090c95a8708909816a2b046f1bd83fe24 lib/codeql/rust/elements/internal/MatchArmListImpl.qll 896c6f1650e7ceb60d0b3d90e2b95fe7f8dc529203ddfec58edb063fa9b2871f a668fed1eb68806abfb021913786168d124de47b25da470e7b57f56bf8556891 lib/codeql/rust/elements/internal/MatchExprConstructor.qll 0355ca543a0f9ad56697bc2e1e2511fa3f233bc1f6344d9e1c2369106901c696 78622807a1c4bff61b751c715639510146c7a713e0c4f63246e9a2cf302f4875 @@ -306,46 +284,35 @@ lib/codeql/rust/elements/internal/MethodCallExprConstructor.qll a1b3c4587f0ae60d lib/codeql/rust/elements/internal/MissingConstructor.qll aab0b7f2846f14a5914661a18c7c9eae71b9bde2162a3c5e5e8a8ecafa20e854 8f30b00b5b7918a7500786cc749b61695158b5b3cc8e9f2277b6b6bf0f7850a0 lib/codeql/rust/elements/internal/MissingImpl.qll e81caa383797dfe837cf101fb78d23ab150b32fef7b47ffcc5489bfcd942ac3e 9f3212d45d77e5888e435e7babd55c1e6b42c3c16f5b1f71170ac41f93ee8d0b lib/codeql/rust/elements/internal/ModuleConstructor.qll 31cc83c9d8f25ac07375d19e568f05c068e1f5aa205ff3d9ac31c2510e6f8468 8a70f3f1c18ff87f17e6baf2f05ccaed55c70469288192fc39ef0bb5531b8c0e -lib/codeql/rust/elements/internal/ModuleImpl.qll bbff32cadbad54bdb613df8c1ac6da8cd2a80d0576361b843f1529e6c63b1938 7342473026561b8e4923625a083ba52c31d3b6797f9061accd1a712598244410 lib/codeql/rust/elements/internal/NameConstructor.qll a760134c6d4fc785746e1a5dc042a6bf25b8adaa3947a6897c31e50fd91dd5fd 1359f903d57112bcc1f62a609febb288301bfa810e569aa12e1045fd48b5b5c9 lib/codeql/rust/elements/internal/NameRefConstructor.qll 5ff6eacc614fd41f98b54cbb4960a07a1471cf4ea291758d33e54a48fd5d1bc4 c538d65414a24dfdbeb49cfd997588227559ba038f0b55d14bb5d89ed1a016f2 lib/codeql/rust/elements/internal/NeverTypeConstructor.qll 6a86bff9d885eddf39a159698710def40d693ccfd0888aefd090a283cb59ae95 9c51d6569f267dde5597067a8470d19d7714304399de4f730e7b85ca21feee20 -lib/codeql/rust/elements/internal/NeverTypeImpl.qll 8c7464cb76f9d081dab318d743817d87ecd69672f382d27323ade94c82e8e0f6 55351661214854bbf7faed6c7d17d598459d4e88eaba130a9b3a9f43f6665c37 lib/codeql/rust/elements/internal/OffsetOfExprConstructor.qll 616e146562adb3ac0fba4d6f55dd6ce60518ed377c0856f1f09ba49593e7bfab 80518ce90fc6d08011d6f5fc2a543958067739e1b0a6a5f2ed90fc9b1db078f0 lib/codeql/rust/elements/internal/OffsetOfExprImpl.qll e52d4596068cc54719438121f7d5afcaab04e0c70168ac5e4df1a3a0969817a6 6ab37e659d79e02fb2685d6802ae124157bf14b6f790b31688f437c87f40f52c lib/codeql/rust/elements/internal/OrPatConstructor.qll 4ef583e07298487c0c4c6d7c76ffcc04b1e5fe58aba0c1da3e2c8446a9e0c92b 980a6bd176ae5e5b11c134569910c5468ba91f480982d846e222d031a6a05f1a lib/codeql/rust/elements/internal/ParamConstructor.qll b98a2d8969f289fdcc8c0fb11cbd19a3b0c71be038c4a74f5988295a2bae52f0 77d81b31064167945b79b19d9697b57ca24462c3a7cc19e462c4693ce87db532 -lib/codeql/rust/elements/internal/ParamImpl.qll 8a5101559f5d636b60ab80237057944b537823ce054d760c3dbd58b2acf05a46 e7a08cefeb6a290a975899045b7b19a9624f5a2b0946cba0866b1854cc0c0fb0 lib/codeql/rust/elements/internal/ParamListConstructor.qll 3123142ab3cab46fb53d7f3eff6ba2d3ff7a45b78839a53dc1979a9c6a54920e 165f3d777ea257cfcf142cc4ba9a0ebcd1902eb99842b8a6657c87087f3df6fe lib/codeql/rust/elements/internal/ParamListImpl.qll 0ed6e9affe1dc0144641502292c2ddd51958fe3d503419caf15198176e3a4174 92d053cc5fdf40a2d98acb665083b5da15403d7da205779a97a4ee66fac0add4 lib/codeql/rust/elements/internal/ParenExprConstructor.qll 104b67dc3fd53ab52e2a42ffde37f3a3a50647aa7bf35df9ba9528e9670da210 d1f5937756e87a477710c61698d141cdad0ccce8b07ecb51bab00330a1ca9835 -lib/codeql/rust/elements/internal/ParenExprImpl.qll 185e7c0f8f377f62a7ccf1c0d168caf500afd0654b82d47569bfcb97e368a26d 25a41998ce0ff3490d677676bf02fea1861d6c01db99a02fc940cc37ae580db6 lib/codeql/rust/elements/internal/ParenPatConstructor.qll 9aea3c3b677755177d85c63e20234c234f530a16db20ab699de05ca3f1b59787 29f24aed0d880629a53b30550467ade09a0a778dbf88891769c1e11b0b239f98 -lib/codeql/rust/elements/internal/ParenPatImpl.qll 39c45b3736c4d0329af7a1eec28a8470c3f244efd58a6ba62af482a0e9b4a842 d8aa9e6f8987666cd51cb65f81700d3b4584d3dc7d070836e52a9bc64e572d9e lib/codeql/rust/elements/internal/ParenTypeConstructor.qll d62e656a4a3c8ffd4eb87d49585a7a3bfb5dbe3826fbcbd11cb87b46f34c19ae febf6535965afa0f6eac4d2b08730f5a07bbb36a7434abe0a7663d7264961a3f -lib/codeql/rust/elements/internal/ParenTypeImpl.qll 6f7b4fade4ac0af69bf9766ee7d73da3da1742ba8a7c12d2a067b71c7f96d849 f065ea466111a5abca33d97b9878ef2fcc221f286fc65bec87f3a9c2fd5d57fc lib/codeql/rust/elements/internal/PatImpl.qll 37c9b1da7aa625117644e2cd74ec0b174f69a38cf66926add01786a05d5ad2ad 143685a0b4873fa0b73b204285dca956e59b32d527bfac6cc336326d244994b7 lib/codeql/rust/elements/internal/PathConstructor.qll 5c6354c28faf9f28f3efee8e19bdb82773adcf4b0c1a38788b06af25bcb6bc4a 3e2aeef7b6b9cda7f7f45a6c8119c98803aa644cf6a492cf0fce318eba40fe8f lib/codeql/rust/elements/internal/PathExprBaseImpl.qll e8b09447ee41b4123f7d94c6b366b2602d8022c9644f1088c670c7794307ab2e 96b9b328771aaf19ba18d0591e85fcc915c0f930b2479b433de3bfdd2ea25249 lib/codeql/rust/elements/internal/PathExprConstructor.qll cf6e0a338a8ed2d1042bdee4c2c49be5827e8c572d8c56e828db265d39e59ae3 36a3d1b7c5cc2cf527616be787b32071b9e2a6613a4f6b3f82e2a3b0e02a516f lib/codeql/rust/elements/internal/PathPatConstructor.qll 966c4ea22218ef71e000d7ce8dd5b570c39ad96b9239a3aa8a38292e2a9f36d2 8a1f348e9257ffc6e6bedcd70389b8e7ec2a3ed6e7b3733744ddfab284826e57 -lib/codeql/rust/elements/internal/PathPatImpl.qll 6ab5b5959cfd94e74f60422cbdbd764a5f51ff541db428938c36ba3a512d1d6b 47585157460e8384047de307b0b05deaab758d0f07fd0183d874f7bb9d8bda4b lib/codeql/rust/elements/internal/PathSegmentConstructor.qll 2d9639e42035dc7e73b7d6ddb8a977beadc6b4492dee4292b2f85b4409344441 c337fc3b9ef56366428772563e3f25f711474d16e860d3e89c1395a95d9e83e7 lib/codeql/rust/elements/internal/PathTypeConstructor.qll 8949742c7ab7fcfa3a3f6469e87355a6888931ab9ac7a6a07d2bd51e3fdf8283 fb1a402e94e9a1f33b7757338d7e95b107933339615a4fe86de33e41206dd94a -lib/codeql/rust/elements/internal/PathTypeImpl.qll 0e3b85df054d1194505796e457ee31a8dac2a2a77284c077cbf1a3bfc179294e c198d4fdf8d1d55f1cf57685a9ad2adf88cc2d6d4f84bafa1e9f039192761399 lib/codeql/rust/elements/internal/PrefixExprConstructor.qll 90c50b0df2d4b4cbf5e2b7d67a9d243a1af9bfff660b7a70d8b9c7859c28bca7 1a1b5ea1f06ed8d41a658c872e8e1915c241a7c799c691df81b9a7b55d8f2f1e lib/codeql/rust/elements/internal/PtrTypeConstructor.qll ee3c4326ea3f198d2537a914dd6eb51d0cf247310f037e13e87632fbd6cfb50a 3814218b5271f3c6c45b52082cca2a3250a2573abced43fe53e1b4145374afe3 lib/codeql/rust/elements/internal/PtrTypeImpl.qll ff4283ffab39b4a3c0e55e7d655dfdb846171cde0907bf1f893c86b35d2c1135 e54d3a6fb0b5a1484f00fd5a4631455902bab80642c3bb076e538ddcc29a85a4 lib/codeql/rust/elements/internal/RangeExprConstructor.qll a0aa90a1c38c5deea56475399016afae2a00a858b961fbbab8ddeb3bc6a08103 0ddf1bcf28aafc56d7334e6138fb268f9b36a429e4cbdd982cd8384e0644076b -lib/codeql/rust/elements/internal/RangeExprImpl.qll a6ff92a27e44c2184f5c2d8483de1d0d4a77eb7a5154ff93a8f3a9fc8b63e561 d53d44bc1c1ae426f208595002adcddb88643e1027bbee7445095ca09e433331 lib/codeql/rust/elements/internal/RangePatConstructor.qll fe4345cb41d970ab64196ca37eccb26e5b9cf85fab4253cacfd2b31de03bd070 1d09d5ec8203d76aed2dfb7e7f14c0c07d6559c8f589e11860fff8a2c682c1a6 lib/codeql/rust/elements/internal/RangePatImpl.qll ef11ab2c002896036553231741a7cf896fafa09e22e920e15661b9cbe4393cae 24ac2dcce3055a77f3a5e0b38cf13aebefd2eeaefa53674ff144a6225634ac0d lib/codeql/rust/elements/internal/RecordExprConstructor.qll 742198bd8223902b5625b4a574a9e3539a8b6cf8e48eecc57cc2de4e980fba6e 0a99e454e234e8b7b59dc11b167172a5fcd31b8a5282349956d6fd861ec735df lib/codeql/rust/elements/internal/RecordExprFieldConstructor.qll 11620bc4e2dc7b3903be764cd9510a8e002892722b502876cf3467994aa7a63c e42e50747dd9453a44705b2d6a05e7a4a8c6debed988a0335a774a547d8f7157 -lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll 8af196cbaeeb7997e933fde9ddba50ec099df51f66e03501f00157f238505fe7 29ae10546577a354b0439876ce5deb5ab13455028f02c01fe3903b11eaee35e2 lib/codeql/rust/elements/internal/RecordExprFieldListConstructor.qll 3a0d6ec872792c400d3a0a5ed1c5051b248a597a4b17ada1a078ea5d972b6721 52bae8222e7aa5bc89b73bec3fd1c3c1de0fe11bf30ccf5668454f63fbfc9b83 lib/codeql/rust/elements/internal/RecordExprFieldListImpl.qll 1210c23c0495f5d1a72409afc8c559f8da2b8c71340ff2944af9d1f684d0a856 fea96b053cad4135ab09b1c070a4c9f26507dd890a62c30772cf3e2358686640 -lib/codeql/rust/elements/internal/RecordExprImpl.qll 233b3f7ee8dbd1e5431bea5436c6b7ee38e631c041111dcf53e45c6c4c08a6cf 9537497edb739c535d75ce80122f597ad93241bff5399b1dae17a7bfff1c15cd lib/codeql/rust/elements/internal/RecordFieldConstructor.qll 9fc05f5101e48a45a028c479b35ec3d2f1a3cc33f0938667fcb813c5a4ab9526 98791dcf7f3209524f6132f9c26980e499cbcf94c1559e95c67544732245f05b lib/codeql/rust/elements/internal/RecordFieldImpl.qll 2612dae3c95c9064420a3494872213f7fd7a3e1133243f4adea8a30808a209ae 143b75bb539a1bfea16e1c764a1f549522ef9c8d6d5de3fef377bbf67ba42075 lib/codeql/rust/elements/internal/RecordFieldListConstructor.qll 9f1d916f3784092dcbff7224451c8f4f0daf6f8293a466b0a30ec9b92cd41358 8aafe377714a134287362c4b96439c1c6baa5a31c2c36a544bd5f73e9213477a @@ -355,22 +322,17 @@ lib/codeql/rust/elements/internal/RecordPatFieldConstructor.qll 6e1880ed05401b39 lib/codeql/rust/elements/internal/RecordPatFieldImpl.qll 04bc31b857c8250096d9d1bf3fad1e556a28d83bb3f3b48a3f049048d1e6785f 5853105e55650d05a4b196f17b89baf12b898df0a010e4f88289ce01d16a0379 lib/codeql/rust/elements/internal/RecordPatFieldListConstructor.qll b8f0ef9b75ffe6be6ce7e601d528f0a1b871123c63e39cead3fd13b8bd4f54b7 166f07c708ab8b3de6bfaf193bac93081b2aacad046aa86de7441085dd20a8c5 lib/codeql/rust/elements/internal/RecordPatFieldListImpl.qll 2d1dd9910480eb65c59fcef2e1576ce639be85c35d90e4bce721ce22ec742ba3 1e788a2d7d00e9f96dbf7e93d3a18d5bfb4d7749194ff8e9810e9053fa88a94b -lib/codeql/rust/elements/internal/RecordPatImpl.qll 3c7086be84e336c069f4c7b538c7ad32a7728e7fbf42e4dc7f04c4c99d393c0d 8020215f38639965398c62ddb36c3560579d63928e71e0d773b254e121a68cc3 lib/codeql/rust/elements/internal/RefExprConstructor.qll 9ad08c0f3d980a56a2af8857cb84db589941d20ab3ae5c8ece004ccaccaaf950 4cac3ace31b7ed77a72e989fce9cdbae2247f03c28a3f0c50d67385d02c7f193 -lib/codeql/rust/elements/internal/RefExprImpl.qll 56ed831a3b30ed375e7369b0a60b9b7635a1b00f058364a6b15078031a85af5f ca7e772b409514363e49d56a174ae9bd2e076755cbd09c4e7e5b732d09acdb25 lib/codeql/rust/elements/internal/RefPatConstructor.qll d8b88c2c468b08072f6f853306eb61eb88ee1e6c5cfb63958f115a64a9715bb3 0c1d6a8af6a66912698acce47e89d4e3239e67f89c228a36a141f9c685c36394 -lib/codeql/rust/elements/internal/RefPatImpl.qll 3e06e8130d412b47267497097cffc9f4b930b9e54bc90465ab5ac620fbe52048 b8ac844ec99f30605ce476f89ced4fb1159d2df0df43c631f60b3c868e0e1fd7 lib/codeql/rust/elements/internal/RefTypeConstructor.qll e1952aa69586b440f878400a52d09b2d12d5a29dbe9651360344631cb9493cd4 e4ae45e89472dfd4547d647c75e1635cf065a7d221ed60ed34554f265c0c5405 lib/codeql/rust/elements/internal/RefTypeImpl.qll f72b760a8a26be21170435da2cb2981638513617fd82742f45f38bc437d9f2c4 f32df49f0b6df85ca5fc4393ccd341ac4304b4947a282ccea48468a26837ef3d lib/codeql/rust/elements/internal/RenameConstructor.qll 65fa2e938978d154701e6cac05b56320b176ee014ef5c20a7b66f3e94fd5c4a7 dfc0ff4606b8e1c14003cc93a0811f4d62ec993b07ff3c1aa0776746577ed103 lib/codeql/rust/elements/internal/RenameImpl.qll 4f5943fbda4ec772203e651ed4b7dd1fb072219ddc0cb208c0a0951af5e72bd6 b9854cdcf02e70ee372330a4e0bfdb03012bc81af79dd12af2a567fd7fc4672b lib/codeql/rust/elements/internal/ResolvableImpl.qll 7599625454fe81c3490a122943363a2a2522a7877b78a80649e93155a418fedd 442072c3d70bdaababd7de8bc6c9382f4a50bab41d13759dcd1a5bee9ea32e49 lib/codeql/rust/elements/internal/RestPatConstructor.qll 45430925ddf08fba70ede44c7f413ddb41b3113c149b7efc276e0c2bf72507b4 25c678898d72446e7a975bb8b7f2fde51e55b59dbd42f2cca997c833b1a995f1 -lib/codeql/rust/elements/internal/RestPatImpl.qll 1b83464367e5fdc28b0b3946ae74c67c64d30b286c39268b4118337539250e51 83a03308cba4cb3344d48f0a0730b1d3e41a73f16f729d39dc2bae6d3f57f232 lib/codeql/rust/elements/internal/RetTypeConstructor.qll a96d803c6e4b40be49cfed0853a3e04ae917c47351e5c880fcab06eddf1af9cc d06a0a191cb14c270c0441ffc3d289263808170dcbe05e01847a35ac9d61dfb3 lib/codeql/rust/elements/internal/RetTypeImpl.qll 0e96f1075ccade28ce5664ab0f5c2e98984ae1d0ed708bc02e40e882672d9e2f 350725d16bcb1e8911bfdd87d9dd21be73ec66d23c2a35827c8c8525c48dc885 lib/codeql/rust/elements/internal/ReturnExprConstructor.qll 57be5afbe20aa8db6e63c1f2871914c19c186730ad7dccaa424038c6305730d5 4d3c4f2e9b38a4b54ff26a0032455cdcca3d35fec201b6c932072a9e31fbb4fe -lib/codeql/rust/elements/internal/ReturnExprImpl.qll eef4960a8c27eaa0540d048fe88893cfe9a6ac377a770cc23d72ebe05d5782f1 b7f35650d80f2f8b4893f0091fea74646341af406b6248f75c477112aca96dea lib/codeql/rust/elements/internal/ReturnTypeSyntaxConstructor.qll 8994672e504d1674e5773157d0ad8a0dc3aad3d64ef295e7722e647e78e36c11 abe7df754721f4ff7f3e3bb22d275976b2e9a1ef51436a461fe52ebd2d29cff1 lib/codeql/rust/elements/internal/ReturnTypeSyntaxImpl.qll d47a3dcfcc2b02a6a9eaeefe9a7a4be2074ecd2019da129dda0f218bc3fbd94b 87198db7c0620ed49369da160f09287015e0cd1718784e1ba28ec3ec5a0bb4a8 lib/codeql/rust/elements/internal/SelfParamConstructor.qll a63af1d1ccde6013c09e0397f1247f5ab3efd97f3410dd1b6c15e1fb6cd96e54 0d8977653c074d5010c78144327f8b6c4da07f09d21e5cc3342082cd50107a81 @@ -394,7 +356,6 @@ lib/codeql/rust/elements/internal/TokenTreeImpl.qll c61574f2b551db24640258117e0c lib/codeql/rust/elements/internal/TraitAliasConstructor.qll d2f159cac53b9d65ec8176b8c8ccb944541cd35c64f0d1ceabb32cd975c000bf 6564981793de762af2775cc729e25054ea788648509d151cbfdbdf99fc9ed364 lib/codeql/rust/elements/internal/TraitAliasImpl.qll f338dba5388973ec0c5928d4c60664737f75a93d0c7db5fb34053bc41c107641 f2e437469e4ba1d8dd321bc670978e7eed76508e728d1e08e52ddcf52a461d3a lib/codeql/rust/elements/internal/TraitConstructor.qll 1f790e63c32f1a22ae1b039ca585b5fe6ffef6339c1e2bf8bca108febb433035 535cebd676001bfbbb724d8006fa2da94e585951b8fd54c7dc092732214615b5 -lib/codeql/rust/elements/internal/TraitImpl.qll 776a0c10c944146b89d616e3bf1311502de9e1e84f0c9d5d7de5aecfc97b87e3 3795d920e98620b30f7e2c218cfb57ae91b37956f9165325b5da6705df8beffa lib/codeql/rust/elements/internal/TryExprConstructor.qll 98e3077ebc4d76f687488b344f532b698512af215b66f0a74b5cea8ed180836c b95603c10c262911eeffdf4ccba14849e8443916b360e287963d5f2582d8e434 lib/codeql/rust/elements/internal/TryExprImpl.qll 00635685db339557cfb89fad0bfc134e53efc6d88c68cce400b72c2dd428ef9f 43559b46e45c009f985b58896b542881b81a3e6b82a6f51b784e8a712ae3da2b lib/codeql/rust/elements/internal/TupleExprConstructor.qll 71c38786723225d3d90399b8a085b2b2664c62256654db9e1288fadd56745b9d 639ad70b49ebadc027127fbdc9de14e5180169a4285908233bc38ccac6f14110 @@ -421,7 +382,6 @@ lib/codeql/rust/elements/internal/TypeParamConstructor.qll a6e57cccd6b54fa68742d lib/codeql/rust/elements/internal/TypeParamImpl.qll 9e7169e8254e2d9d13b11a17cbe04e874f72fb67a75c3585e70eddec71ba5c7f b8c862b2cd53bc211caea23261d9832613418aae51f63ef08922d300c2d1f4f2 lib/codeql/rust/elements/internal/TypeRefImpl.qll cfc08bdcc8e7e588f533c7e64c0c08d317d63cdb50f4cba4b4b3e589b37b0fea b46ee7de9b5e9894807004e1bedf39e7d25912ed79de6ac5adfb37a43aa4804b lib/codeql/rust/elements/internal/UnderscoreExprConstructor.qll 8dc27831adb49c1a47b9f8997d6065e82b4e48e41e3c35bd8d35255cea459905 6c5a5272d37f83f1c1b17475f8adb7d867e95025d201320e20a32dab1f69f7bf -lib/codeql/rust/elements/internal/UnderscoreExprImpl.qll 4277b23a09a4ba5e53ca2cfbb20eba6a5f66039b6268da79410e0be30332fedd b9ed79468157a7e751f78aa7597165672cbc38191d5f85ecc15cfdaff388a26a lib/codeql/rust/elements/internal/UnextractedImpl.qll 5c23df7e448184d76ccab2c22757ace24663b8be2592a3fa2a44bef43159ebd3 77b0c9fe75a307adc08c422cc88423c5349756878793cf9e79c006c83b4c403b lib/codeql/rust/elements/internal/UnimplementedConstructor.qll 70b0489fdc75fed389de8203947ed9c8eabb91373a1264eb2c8018ddbb2d9baa 0f2592c1697a2f2f913014ecd73b0e3ff1ec5b038ba1c3a22e7939bf8759e664 lib/codeql/rust/elements/internal/UnimplementedImpl.qll 06771abc088e0a8fc24032c9d2633618e8e40343ef8757a68cc0a70f1617165a 5738f626f1f4f573fdf7dcd5bd57a0948d290ed89342b9160e95ef3c84044f9a @@ -444,9 +404,7 @@ lib/codeql/rust/elements/internal/WhereClauseImpl.qll 59d33533e641ce3851e493de30 lib/codeql/rust/elements/internal/WherePredConstructor.qll f331c37085792a01159e8c218e9ef827e80e99b7c3d5978b6489808f05bd11f8 179cad3e4c5aaaf27755891694ef3569322fcf34c5290e6af49e5b5e3f8aa732 lib/codeql/rust/elements/internal/WherePredImpl.qll aad95f448ca051d5dcd462429fa1ca95dcec6df2e70b6f64a480bd6839307581 411a66a5d866aa8cb4911c5106849adb103a063e1b90a9ecc5d16db3022bb1f8 lib/codeql/rust/elements/internal/WhileExprConstructor.qll 01eb17d834584b3cba0098d367324d137aacfc60860752d9053ec414180897e7 e5e0999fb48a48ba9b3e09f87d8f44f43cc3d8a276059d9f67e7714a1852b8a5 -lib/codeql/rust/elements/internal/WhileExprImpl.qll 5e716498402be3a1a8ed3594e13a03938bb793ac80f2a648bc93c0d746028d8b efcee38fe5e984a690c33f8bfdc78c677c2b0cdc5902525e2196a68fdabb6823 lib/codeql/rust/elements/internal/WildcardPatConstructor.qll 5980c4e5724f88a8cb91365fc2b65a72a47183d01a37f3ff11dcd2021e612dd9 c015e94953e02dc405f8cdc1f24f7cae6b7c1134d69878e99c6858143fc7ab34 -lib/codeql/rust/elements/internal/WildcardPatImpl.qll 01e5fac111cce3bb139fc290dbdb2a80e7369a90952178228efeb025915d40b7 875e91fb1354ab8d94d5fa426b63714c70904f53d7bab15158fcbc290c62a0f1 lib/codeql/rust/elements/internal/YeetExprConstructor.qll 7763e1717d3672156587250a093dd21680ad88c8224a815b472e1c9bba18f976 70dd1fd50824902362554c8c6075468060d0abbe3b3335957be335057512a417 lib/codeql/rust/elements/internal/YeetExprImpl.qll e8924147c3ebe0c32d04c5b33edfd82ae965c32479acfd4429eeab525cf42efb b2debcfa42df901f254c58705a5009825ec153464c9ab4b323aa439e5924e59e lib/codeql/rust/elements/internal/YieldExprConstructor.qll 8cbfa6405acb151ee31ccc7c89336948a597d783e8890e5c3e53853850871712 966f685eb6b9063bc359213323d3ff760b536158ecd17608e7618a3e9adf475f diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index a532f142ec98..8e644be8e461 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -171,7 +171,6 @@ /lib/codeql/rust/elements/internal/ArgListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ArgListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ArrayExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ArrayExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ArrayTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ArrayTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/AsmExprConstructor.qll linguist-generated @@ -184,25 +183,18 @@ /lib/codeql/rust/elements/internal/AttrConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/AttrImpl.qll linguist-generated /lib/codeql/rust/elements/internal/AwaitExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/AwaitExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/BecomeExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/BecomeExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/BinaryExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/BlockExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/BlockExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/BoxPatConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/BoxPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/BreakExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/CallExprBaseImpl.qll linguist-generated /lib/codeql/rust/elements/internal/CallExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/CallExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/CallableImpl.qll linguist-generated /lib/codeql/rust/elements/internal/CastExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/CastExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ClosureBinderConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ClosureBinderImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ClosureExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ClosureExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/CommentConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ConstArgConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ConstArgImpl.qll linguist-generated @@ -216,7 +208,6 @@ /lib/codeql/rust/elements/internal/DynTraitTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/DynTraitTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/EnumConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/EnumImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ExprStmtConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ExprStmtImpl.qll linguist-generated @@ -228,7 +219,6 @@ /lib/codeql/rust/elements/internal/ExternItemListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ExternItemListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/FieldExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/FieldExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/FieldListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/FnPtrTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/FnPtrTypeImpl.qll linguist-generated @@ -248,39 +238,28 @@ /lib/codeql/rust/elements/internal/GenericParamListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/IdentPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/IfExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/IfExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ImplConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ImplImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ImplTraitTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ImplTraitTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/IndexExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/IndexExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/InferTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/InferTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ItemImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ItemListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ItemListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/LabelConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/LabelImpl.qll linguist-generated /lib/codeql/rust/elements/internal/LetElseConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/LetElseImpl.qll linguist-generated /lib/codeql/rust/elements/internal/LetExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/LetExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/LetStmtConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/LetStmtImpl.qll linguist-generated /lib/codeql/rust/elements/internal/LifetimeArgConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/LifetimeArgImpl.qll linguist-generated /lib/codeql/rust/elements/internal/LifetimeConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/LifetimeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/LifetimeParamConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/LifetimeParamImpl.qll linguist-generated /lib/codeql/rust/elements/internal/LiteralExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/LiteralPatConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/LiteralPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/LoopExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/LoopExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MacroCallConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/MacroCallImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MacroDefConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/MacroDefImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MacroExprConstructor.qll linguist-generated @@ -296,7 +275,6 @@ /lib/codeql/rust/elements/internal/MacroTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/MacroTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MatchArmConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/MatchArmImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MatchArmListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/MatchArmListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MatchExprConstructor.qll linguist-generated @@ -308,46 +286,35 @@ /lib/codeql/rust/elements/internal/MissingConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/MissingImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ModuleConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ModuleImpl.qll linguist-generated /lib/codeql/rust/elements/internal/NameConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/NameRefConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/NeverTypeConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/NeverTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/OffsetOfExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/OffsetOfExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/OrPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParamConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ParamImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ParamListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParamListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ParenExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ParenExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ParenPatConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ParenPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ParenTypeConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ParenTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/PatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/PathConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/PathExprBaseImpl.qll linguist-generated /lib/codeql/rust/elements/internal/PathExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/PathPatConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/PathPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/PathSegmentConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/PathTypeConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/PathTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/PrefixExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/PtrTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/PtrTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RangeExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/RangeExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RangePatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RangePatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RecordExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RecordExprFieldConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RecordExprFieldListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RecordExprFieldListImpl.qll linguist-generated -/lib/codeql/rust/elements/internal/RecordExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RecordFieldConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RecordFieldImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RecordFieldListConstructor.qll linguist-generated @@ -357,22 +324,17 @@ /lib/codeql/rust/elements/internal/RecordPatFieldImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RecordPatFieldListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RecordPatFieldListImpl.qll linguist-generated -/lib/codeql/rust/elements/internal/RecordPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RefExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/RefExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RefPatConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/RefPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RefTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RefTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RenameConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RenameImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ResolvableImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RestPatConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/RestPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RetTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RetTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ReturnExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ReturnExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ReturnTypeSyntaxConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ReturnTypeSyntaxImpl.qll linguist-generated /lib/codeql/rust/elements/internal/SelfParamConstructor.qll linguist-generated @@ -396,7 +358,6 @@ /lib/codeql/rust/elements/internal/TraitAliasConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/TraitAliasImpl.qll linguist-generated /lib/codeql/rust/elements/internal/TraitConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/TraitImpl.qll linguist-generated /lib/codeql/rust/elements/internal/TryExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/TryExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/TupleExprConstructor.qll linguist-generated @@ -423,7 +384,6 @@ /lib/codeql/rust/elements/internal/TypeParamImpl.qll linguist-generated /lib/codeql/rust/elements/internal/TypeRefImpl.qll linguist-generated /lib/codeql/rust/elements/internal/UnderscoreExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/UnderscoreExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/UnextractedImpl.qll linguist-generated /lib/codeql/rust/elements/internal/UnimplementedConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/UnimplementedImpl.qll linguist-generated @@ -446,9 +406,7 @@ /lib/codeql/rust/elements/internal/WherePredConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/WherePredImpl.qll linguist-generated /lib/codeql/rust/elements/internal/WhileExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/WhileExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/WildcardPatConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/WildcardPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/YeetExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/YeetExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/YieldExprConstructor.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/internal/ArrayExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ArrayExprImpl.qll index ff4ce2248209..8bda9a2d46e2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ArrayExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ArrayExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `ArrayExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.ArrayExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * An array expression. For example: * ```rust @@ -19,5 +19,7 @@ module Impl { * [1; 10]; * ``` */ - class ArrayExpr extends Generated::ArrayExpr { } + class ArrayExpr extends Generated::ArrayExpr { + override string toString() { result = "[...]" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AwaitExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AwaitExprImpl.qll index 39bbe3017df6..17abcfdaaba0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AwaitExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AwaitExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `AwaitExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.AwaitExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * An `await` expression. For example: * ```rust @@ -21,5 +21,7 @@ module Impl { * } * ``` */ - class AwaitExpr extends Generated::AwaitExpr { } + class AwaitExpr extends Generated::AwaitExpr { + override string toString() { result = "await ..." } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/BecomeExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BecomeExprImpl.qll index 748659cfdd32..806e1d7506dc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BecomeExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BecomeExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `BecomeExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.BecomeExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A `become` expression. For example: * ```rust @@ -24,5 +24,7 @@ module Impl { * } * ``` */ - class BecomeExpr extends Generated::BecomeExpr { } + class BecomeExpr extends Generated::BecomeExpr { + override string toString() { result = "become ..." } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll index 9011109b194e..bdfc8a56d7d3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `BlockExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.BlockExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A block expression. For example: * ```rust @@ -26,5 +26,7 @@ module Impl { * } * ``` */ - class BlockExpr extends Generated::BlockExpr { } + class BlockExpr extends Generated::BlockExpr { + override string toString() { result = "{ ... }" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/BoxPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BoxPatImpl.qll index 06fb2c0fbfa2..5c6ffe229eb3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BoxPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BoxPatImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `BoxPat`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.BoxPat * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A box pattern. For example: * ```rust @@ -21,5 +21,7 @@ module Impl { * }; * ``` */ - class BoxPat extends Generated::BoxPat { } + class BoxPat extends Generated::BoxPat { + override string toString() { result = "box ..." } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll index 4b302674a444..49bca4b25a28 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll @@ -102,5 +102,17 @@ module Impl { isLabelled(result, label) ) } + + override string toString() { + exists(string label, string expr | + ( + result = " " + this.getLifetime().toString() + or + not this.hasLifetime() and result = "" + ) and + (if this.hasExpr() then expr = " ..." else expr = "") and + result = "break" + label + expr + ) + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll index c03a7b9ac138..8b0ae58e2d98 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `CallExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.CallExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A function call expression. For example: * ```rust @@ -21,5 +21,7 @@ module Impl { * foo(1) = 4; * ``` */ - class CallExpr extends Generated::CallExpr { } + class CallExpr extends Generated::CallExpr { + override string toString() { result = "... (...)" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll index 308c321dfbd2..3d021e4955d3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `CastExpr`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.CastExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A cast expression. For example: * ```rust * value as u64; * ``` */ - class CastExpr extends Generated::CastExpr { } + class CastExpr extends Generated::CastExpr { + override string toString() { result = "... as " + this.getTy().toString() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ClosureExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ClosureExprImpl.qll index b1c6574b17f9..861a258ec8e3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ClosureExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ClosureExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `ClosureExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.ClosureExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A closure expression. For example: * ```rust @@ -24,5 +24,7 @@ module Impl { * static |x| yield x; * ``` */ - class ClosureExpr extends Generated::ClosureExpr { } + class ClosureExpr extends Generated::ClosureExpr { + override string toString() { result = "|...| ..." } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CommentImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CommentImpl.qll index 32a4f415ab7c..2e7beca481df 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CommentImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CommentImpl.qll @@ -20,11 +20,20 @@ module Impl { * ``` */ class Comment extends Generated::Comment { + override string getText() { result = this.getCommentMarker() + " ..." } + /** * Gets the text of this comment, excluding the comment marker. */ string getCommentText() { exists(string s | s = this.getText() | result = s.regexpCapture("///?\\s*(.*)", 1)) } + + /** + * Gets the marker of this comment, that is `//` or `///`. + */ + string getCommentMarker() { + exists(string s | s = this.getText() | result = s.regexpCapture("(///?).*", 1)) + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll index 4328fdfc9f93..8c67382498c8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll @@ -49,6 +49,17 @@ module Impl { * ``` */ class ContinueExpr extends Generated::ContinueExpr { + override string toString() { + exists(string label | + ( + label = " " + this.getLifetime().getText() + or + not this.hasLifetime() and label = "" + ) and + result = "continue" + label + ) + } + /** * Gets the target of this `continue` expression. * diff --git a/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll index bef9d3da903a..532fa3ed0b3b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Enum`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.Enum * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A Enum. For example: * ```rust * todo!() * ``` */ - class Enum extends Generated::Enum { } + class Enum extends Generated::Enum { + override string toString() { result = "enum " + this.getName().toString() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll index 003d2789e683..ccfcc4fd7b71 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `FieldExpr`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.FieldExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A field access expression. For example: * ```rust * x.foo * ``` */ - class FieldExpr extends Generated::FieldExpr { } + class FieldExpr extends Generated::FieldExpr { + override string toString() { result = "... ." + this.getNameRef().toString() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll index bff68da5620b..791cf4f9d7fc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll @@ -25,6 +25,6 @@ module Impl { * ``` */ class Function extends Generated::Function { - override string toString() { result = this.getName().getText() } + override string toString() { result = "fn " + this.getName().getText() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/IfExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/IfExprImpl.qll index f9aec6faed35..59c0638c42ed 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/IfExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/IfExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `IfExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.IfExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * An `if` expression. For example: * ```rust @@ -27,5 +27,12 @@ module Impl { * }; * ``` */ - class IfExpr extends Generated::IfExpr { } + class IfExpr extends Generated::IfExpr { + override string toString() { + exists(string elseString | + (if this.hasElse() then elseString = " else { ... }" else elseString = "") and + result = "if ... { ... }" + elseString + ) + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll index b1918d16e56e..d8ec0ca9d372 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Impl`. * @@ -12,11 +11,23 @@ private import codeql.rust.elements.internal.generated.Impl * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A Impl. For example: * ```rust * todo!() * ``` */ - class Impl extends Generated::Impl { } + class Impl extends Generated::Impl { + override string toString() { + exists(string trait | + ( + trait = this.getTrait().toString() + " for " + or + not this.hasTrait() and trait = "" + ) and + result = "impl " + trait + this.getSelfTy().toString() + " { ... }" + ) + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll index 94ff116cf1d4..28db84aa873b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `IndexExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.IndexExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * An index expression. For example: * ```rust @@ -19,5 +19,7 @@ module Impl { * list[42] = 1; * ``` */ - class IndexExpr extends Generated::IndexExpr { } + class IndexExpr extends Generated::IndexExpr { + override string toString() { result = "...[...]" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LabelImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LabelImpl.qll index 6740bb23ea88..e1b3eb4e4d79 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LabelImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LabelImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Label`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.Label * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A label. For example: * ```rust @@ -21,5 +21,7 @@ module Impl { * }; * ``` */ - class Label extends Generated::Label { } + class Label extends Generated::Label { + override string toString() { result = this.getLifetime().toString() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll index 2399964cf1af..7924d8d8453e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `LetElse`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.LetElse * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A LetElse. For example: * ```rust * todo!() * ``` */ - class LetElse extends Generated::LetElse { } + class LetElse extends Generated::LetElse { + override string toString() { result = "else { ... }" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LetExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LetExprImpl.qll index 4a99a43ba0fe..8a54a005cf58 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LetExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LetExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `LetExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.LetExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A `let` expression. For example: * ```rust @@ -20,5 +20,12 @@ module Impl { * } * ``` */ - class LetExpr extends Generated::LetExpr { } + class LetExpr extends Generated::LetExpr { + override string toString() { + exists(string expr | + (if this.hasExpr() then expr = " = ..." else expr = "") and + result = "let " + this.getPat().toString() + expr + ) + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll index 2bcaa6d7905c..fce6aa3de44c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `LetStmt`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.LetStmt * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A let statement. For example: * ```rust @@ -25,5 +25,13 @@ module Impl { * }; * ``` */ - class LetStmt extends Generated::LetStmt { } + class LetStmt extends Generated::LetStmt { + override string toString() { + exists(string expr, string elseStr | + (if this.hasInitializer() then expr = " = ..." else expr = "") and + (if this.hasLetElse() then elseStr = " else { ... }" else elseStr = "") and + result = "let " + this.getPat().toString() + expr + elseStr + ) + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll index 3eb13ac87e5c..a51bf3c6b122 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Lifetime`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.Lifetime * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A Lifetime. For example: * ```rust * todo!() * ``` */ - class Lifetime extends Generated::Lifetime { } + class Lifetime extends Generated::Lifetime { + override string toString() { result = "'" + this.getText() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll index a71d9b1bf848..5bf0c13576a6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `LiteralPat`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.LiteralPat * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A literal pattern. For example: * ```rust @@ -21,5 +21,7 @@ module Impl { * } * ``` */ - class LiteralPat extends Generated::LiteralPat { } + class LiteralPat extends Generated::LiteralPat { + override string toString() { result = this.getLiteral().toString() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LoopExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LoopExprImpl.qll index c56ea8770d48..f91a14489c5c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LoopExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LoopExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `LoopExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.LoopExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A loop expression. For example: * ```rust @@ -36,5 +36,7 @@ module Impl { * }; * ``` */ - class LoopExpr extends Generated::LoopExpr { } + class LoopExpr extends Generated::LoopExpr { + override string toString() { result = "loop {...}" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll index 76fcd7645a6f..eed9a65d4327 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `MacroCall`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.MacroCall * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A MacroCall. For example: * ```rust * todo!() * ``` */ - class MacroCall extends Generated::MacroCall { } + class MacroCall extends Generated::MacroCall { + override string toString() { result = this.getPath().toString() + "!..." } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MatchArmImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MatchArmImpl.qll index 117e6eb3498b..280eb4ea7c87 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MatchArmImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MatchArmImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `MatchArm`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.MatchArm * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A match arm. For example: * ```rust @@ -27,5 +27,12 @@ module Impl { * }; * ``` */ - class MatchArm extends Generated::MatchArm { } + class MatchArm extends Generated::MatchArm { + override string toString() { + exists(string guard | + (if this.hasGuard() then guard = "if ... " else guard = "") and + result = this.getPat().toString() + guard + " => ..." + ) + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll index c8cb535b526d..530e9cc50a76 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll @@ -28,6 +28,8 @@ module Impl { * ``` */ class MatchExpr extends Generated::MatchExpr { + override string toString() { result = "match ... { ... }" } + /** * Gets the `index`th arm of this match expression. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/ModuleImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ModuleImpl.qll index 2e94fad609ca..505495862b7f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ModuleImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ModuleImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Module`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.Module * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A module declaration. For example: * ```rust @@ -23,5 +23,7 @@ module Impl { * } * ``` */ - class Module extends Generated::Module { } + class Module extends Generated::Module { + override string toString() { result = "mod " + this.getName() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/NeverTypeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/NeverTypeImpl.qll index 9c04237f38c1..985ec81cdeb7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/NeverTypeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/NeverTypeImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `NeverType`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.NeverType * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A NeverType. For example: * ```rust * todo!() * ``` */ - class NeverType extends Generated::NeverType { } + class NeverType extends Generated::NeverType { + override string toString() { result = "!" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll index f29e3d1865fc..ffc3fb3d5b83 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll @@ -21,6 +21,8 @@ module Impl { * ``` */ class OrPat extends Generated::OrPat { + override string toString() { result = "... | ..." } + /** Gets the last pattern in this or pattern. */ pragma[nomagic] Pat getLastPat() { result = this.getPat(this.getNumberOfPats() - 1) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll index 7015d097e9f4..5a9613830946 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Param`. * @@ -12,11 +11,16 @@ private import codeql.rust.elements.internal.generated.Param * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A Param. For example: * ```rust * todo!() * ``` */ - class Param extends Generated::Param { } + class Param extends Generated::Param { + override string toString() { + result = this.getPat().toString() + ": " + this.getTy().toString() + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll index 98c3cab9267c..5dce46343400 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `ParenExpr`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.ParenExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A ParenExpr. For example: * ```rust * todo!() * ``` */ - class ParenExpr extends Generated::ParenExpr { } + class ParenExpr extends Generated::ParenExpr { + override string toString() { result = "(...)" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll index cdba455451c6..5eb8a4860307 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `ParenPat`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.ParenPat * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A ParenPat. For example: * ```rust * todo!() * ``` */ - class ParenPat extends Generated::ParenPat { } + class ParenPat extends Generated::ParenPat { + override string toString() { result = "(...)" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenTypeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenTypeImpl.qll index ab49c9c4fcfc..95c022d651a3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenTypeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenTypeImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `ParenType`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.ParenType * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A ParenType. For example: * ```rust * todo!() * ``` */ - class ParenType extends Generated::ParenType { } + class ParenType extends Generated::ParenType { + override string toString() { result = "(...)" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll index 0acf7a588ba6..2c6d94cbccea 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `PathPat`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.PathPat * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A path pattern. For example: * ```rust @@ -21,5 +21,7 @@ module Impl { * } * ``` */ - class PathPat extends Generated::PathPat { } + class PathPat extends Generated::PathPat { + override string toString() { result = this.getPath().toString() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll index 74fa536e08b5..9c2f4e50052a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `PathType`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.PathType * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A PathType. For example: * ```rust * todo!() * ``` */ - class PathType extends Generated::PathType { } + class PathType extends Generated::PathType { + override string toString() { result = this.getPath().toString() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RangeExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RangeExprImpl.qll index c015171253f7..53dccb24fbd5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RangeExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RangeExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `RangeExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.RangeExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A range expression. For example: * ```rust @@ -23,5 +23,7 @@ module Impl { * let x = ..; * ``` */ - class RangeExpr extends Generated::RangeExpr { } + class RangeExpr extends Generated::RangeExpr { + override string toString() { result = "... " + this.getOperatorName().toString() + " ..." } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll index 12b86bb1e4ab..f5462ab29c3d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `RecordExprField`. * @@ -12,11 +11,19 @@ private import codeql.rust.elements.internal.generated.RecordExprField * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A field in a record expression. For example `a: 1` in: * ```rust * Foo { a: 1, b: 2 }; * ``` */ - class RecordExprField extends Generated::RecordExprField { } + class RecordExprField extends Generated::RecordExprField { + override string toString() { + exists(string init | + (if this.hasExpr() then init = ": ..." else init = "") and + result = this.getNameRef().toString() + init + ) + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RecordExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RecordExprImpl.qll index befc9b26ebbd..a59d3bc22e2e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RecordExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RecordExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `RecordExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.RecordExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A record expression. For example: * ```rust @@ -21,5 +21,7 @@ module Impl { * Foo { .. } = second; * ``` */ - class RecordExpr extends Generated::RecordExpr { } + class RecordExpr extends Generated::RecordExpr { + override string toString() { result = this.getPath().toString() + " {...}" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RecordPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RecordPatImpl.qll index 6378e3220e0f..39ccad020655 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RecordPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RecordPatImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `RecordPat`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.RecordPat * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A record pattern. For example: * ```rust @@ -21,5 +21,7 @@ module Impl { * } * ``` */ - class RecordPat extends Generated::RecordPat { } + class RecordPat extends Generated::RecordPat { + override string toString() { result = this.getPath().toString() + " {...}" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RefExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RefExprImpl.qll index abc45e0d5c21..cf3ade0ad148 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RefExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RefExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `RefExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.RefExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A reference expression. For example: * ```rust @@ -21,5 +21,14 @@ module Impl { * let raw_mut: &mut i32 = &raw mut foo; * ``` */ - class RefExpr extends Generated::RefExpr { } + class RefExpr extends Generated::RefExpr { + override string toString() { + exists(string raw, string const, string mut | + (if this.isRaw() then raw = "raw " else raw = "") and + (if this.isConst() then const = "const " else const = "") and + (if this.isMut() then mut = "mut " else mut = "") and + result = "&" + raw + const + mut + "..." + ) + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RefPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RefPatImpl.qll index 03b1abf5a4f9..a28574c1c071 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RefPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RefPatImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `RefPat`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.RefPat * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A reference pattern. For example: * ```rust @@ -21,5 +21,12 @@ module Impl { * }; * ``` */ - class RefPat extends Generated::RefPat { } + class RefPat extends Generated::RefPat { + override string toString() { + exists(string mut | + (if this.isMut() then mut = "mut " else mut = "") and + result = "&" + mut + "..." + ) + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll index bd483e4ba9a6..a4ae812b72b0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `RestPat`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.RestPat * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A RestPat. For example: * ```rust * todo!() * ``` */ - class RestPat extends Generated::RestPat { } + class RestPat extends Generated::RestPat { + override string toString() { result = ".." } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ReturnExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ReturnExprImpl.qll index fd185c01b1df..245f7e873acb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ReturnExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ReturnExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `ReturnExpr`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.ReturnExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A return expression. For example: * ```rust @@ -25,5 +25,9 @@ module Impl { * } * ``` */ - class ReturnExpr extends Generated::ReturnExpr { } + class ReturnExpr extends Generated::ReturnExpr { + override string toString() { + if this.hasExpr() then result = "return ..." else result = "return" + } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll index a6fa19517f41..59d685a18e81 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Trait`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.Trait * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A Trait. For example: * ``` @@ -24,5 +24,7 @@ module Impl { * pub trait Foo where T::Frobinator: Eq {} * ``` */ - class Trait extends Generated::Trait { } + class Trait extends Generated::Trait { + override string toString() { result = "trait " + this.getName() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/UnderscoreExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UnderscoreExprImpl.qll index 03709c54b545..26487fbfe4fa 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UnderscoreExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UnderscoreExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `UnderscoreExpr`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.UnderscoreExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * An underscore expression. For example: * ```rust * _ = 42; * ``` */ - class UnderscoreExpr extends Generated::UnderscoreExpr { } + class UnderscoreExpr extends Generated::UnderscoreExpr { + override string toString() { result = "_" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll index 647864d46592..43f9510be1ba 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `WhileExpr`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.WhileExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A WhileExpr. For example: * ```rust * todo!() * ``` */ - class WhileExpr extends Generated::WhileExpr { } + class WhileExpr extends Generated::WhileExpr { + override string toString() { result = "while ... { ... }" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/WildcardPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/WildcardPatImpl.qll index d12e49e1daa9..d7973866d912 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/WildcardPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/WildcardPatImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `WildcardPat`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.WildcardPat * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A wildcard pattern. For example: * ```rust * let _ = 42; * ``` */ - class WildcardPat extends Generated::WildcardPat { } + class WildcardPat extends Generated::WildcardPat { + override string toString() { result = "_" } + } } From fce13aeb352035acb7b193cd8bc367a3e17000ea Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 19 Nov 2024 17:50:14 +0100 Subject: [PATCH 06/35] Rust: accept test changes --- .../canonical_path/canonical_paths.expected | 54 ++++++++-------- .../generated/ArrayExpr/ArrayExpr.expected | 4 +- .../ArrayExpr/ArrayExpr_getExpr.expected | 10 +-- .../AsmExpr/AsmExpr_getExpr.expected | 2 +- .../generated/AwaitExpr/AwaitExpr.expected | 2 +- .../AwaitExpr/AwaitExpr_getExpr.expected | 2 +- .../generated/BecomeExpr/BecomeExpr.expected | 2 +- .../BecomeExpr/BecomeExpr_getExpr.expected | 2 +- .../generated/BlockExpr/BlockExpr.expected | 6 +- .../BlockExpr/BlockExpr_getLabel.expected | 2 +- .../BlockExpr/BlockExpr_getStmtList.expected | 6 +- .../generated/BoxPat/BoxPat.expected | 4 +- .../generated/BoxPat/BoxPat_getPat.expected | 4 +- .../generated/BreakExpr/BreakExpr.expected | 6 +- .../BreakExpr/BreakExpr_getExpr.expected | 4 +- .../BreakExpr/BreakExpr_getLifetime.expected | 4 +- .../generated/CallExpr/CallExpr.expected | 8 +-- .../CallExpr/CallExpr_getArgList.expected | 8 +-- .../CallExpr/CallExpr_getExpr.expected | 8 +-- .../generated/CastExpr/CastExpr.expected | 2 +- .../CastExpr/CastExpr_getExpr.expected | 2 +- .../CastExpr/CastExpr_getTy.expected | 2 +- .../ClosureExpr/ClosureExpr.expected | 10 +-- .../ClosureExpr/ClosureExpr_getAttr.expected | 4 +- .../ClosureExpr/ClosureExpr_getBody.expected | 10 +-- .../ClosureExpr_getParamList.expected | 10 +-- .../ClosureExpr_getRetType.expected | 2 +- .../ConstBlockPat_getBlockExpr.expected | 2 +- .../ContinueExpr/ContinueExpr.expected | 4 +- .../ContinueExpr_getLifetime.expected | 2 +- .../ExprStmt/ExprStmt_getExpr.expected | 4 +- .../generated/FieldExpr/FieldExpr.expected | 2 +- .../FieldExpr/FieldExpr_getExpr.expected | 2 +- .../FieldExpr/FieldExpr_getNameRef.expected | 2 +- .../generated/Function/Function.expected | 4 +- .../Function/Function_getBody.expected | 2 +- .../Function/Function_getCrateOrigin.expected | 4 +- ...Function_getExtendedCanonicalPath.expected | 4 +- .../Function/Function_getName.expected | 4 +- .../Function/Function_getParamList.expected | 4 +- .../Function/Function_getRetType.expected | 2 +- .../generated/IfExpr/IfExpr.expected | 4 +- .../IfExpr/IfExpr_getCondition.expected | 4 +- .../generated/IfExpr/IfExpr_getElse.expected | 2 +- .../generated/IfExpr/IfExpr_getThen.expected | 4 +- .../generated/IndexExpr/IndexExpr.expected | 4 +- .../IndexExpr/IndexExpr_getBase.expected | 4 +- .../IndexExpr/IndexExpr_getIndex.expected | 4 +- .../generated/Label/Label.expected | 2 +- .../Label/Label_getLifetime.expected | 2 +- .../generated/LetExpr/LetExpr.expected | 2 +- .../LetExpr/LetExpr_getExpr.expected | 2 +- .../generated/LetExpr/LetExpr_getPat.expected | 2 +- .../generated/LetStmt/LetStmt.expected | 12 ++-- .../LetStmt/LetStmt_getInitializer.expected | 8 +-- .../LetStmt/LetStmt_getLetElse.expected | 2 +- .../generated/LetStmt/LetStmt_getPat.expected | 12 ++-- .../generated/LetStmt/LetStmt_getTy.expected | 4 +- .../generated/LiteralPat/LiteralPat.expected | 2 +- .../LiteralPat/LiteralPat_getLiteral.expected | 2 +- .../generated/LoopExpr/LoopExpr.expected | 6 +- .../LoopExpr/LoopExpr_getLabel.expected | 2 +- .../LoopExpr/LoopExpr_getLoopBody.expected | 6 +- .../generated/MacroCall/MacroCall.expected | 2 +- .../MacroCall/MacroCall_getExpanded.expected | 2 +- .../MacroCall/MacroCall_getPath.expected | 2 +- .../MacroCall/MacroCall_getTokenTree.expected | 2 +- .../MacroExpr/MacroExpr_getMacroCall.expected | 2 +- .../CONSISTENCY/DataFlowConsistency.expected | 4 +- .../MacroItems/MacroItems_getItem.expected | 2 +- .../MacroStmts/MacroStmts_getExpr.expected | 2 +- .../generated/MatchArm/MatchArm.expected | 8 +-- .../MatchArm/MatchArm_getGuard.expected | 2 +- .../MatchArm/MatchArm_getPat.expected | 8 +-- .../generated/MatchExpr/MatchExpr.expected | 4 +- .../MatchExpr/MatchExpr_getExpr.expected | 4 +- .../MatchExpr_getMatchArmList.expected | 4 +- .../generated/Module/Module.expected | 6 +- .../Module/Module_getCrateOrigin.expected | 6 +- .../Module_getExtendedCanonicalPath.expected | 6 +- .../Module/Module_getItemList.expected | 2 +- .../generated/Module/Module_getName.expected | 6 +- .../OffsetOfExpr/OffsetOfExpr_getTy.expected | 2 +- .../generated/OrPat/OrPat.expected | 2 +- .../generated/OrPat/OrPat_getPat.expected | 4 +- .../generated/PathPat/PathPat.expected | 2 +- .../PathPat/PathPat_getPath.expected | 2 +- .../generated/RangeExpr/RangeExpr.expected | 12 ++-- .../RangeExpr/RangeExpr_getEnd.expected | 8 +-- .../RangeExpr_getOperatorName.expected | 12 ++-- .../RangeExpr/RangeExpr_getStart.expected | 6 +- .../RangePat/RangePat_getEnd.expected | 4 +- .../RangePat/RangePat_getStart.expected | 4 +- .../generated/RecordExpr/RecordExpr.expected | 8 +-- .../RecordExpr/RecordExpr_getPath.expected | 8 +-- ...RecordExpr_getRecordExprFieldList.expected | 8 +-- .../RecordExprField/RecordExprField.expected | 4 +- .../RecordExprField_getExpr.expected | 4 +- .../RecordExprField_getNameRef.expected | 4 +- .../generated/RecordPat/RecordPat.expected | 4 +- .../RecordPat/RecordPat_getPath.expected | 4 +- .../RecordPat_getRecordPatFieldList.expected | 4 +- .../RecordPatField_getPat.expected | 4 +- .../generated/RefExpr/RefExpr.expected | 8 +-- .../RefExpr/RefExpr_getExpr.expected | 8 +-- .../generated/RefPat/RefPat.expected | 4 +- .../generated/RefPat/RefPat_getPat.expected | 4 +- .../generated/ReturnExpr/ReturnExpr.expected | 4 +- .../ReturnExpr/ReturnExpr_getExpr.expected | 2 +- .../SlicePat/SlicePat_getPat.expected | 20 +++--- .../SourceFile/SourceFile_getItem.expected | 4 +- .../Trait/AssocItemList_getAssocItem.expected | 2 +- .../generated/Trait/Trait.expected | 4 +- .../Trait/Trait_getAssocItemList.expected | 4 +- .../Trait/Trait_getCrateOrigin.expected | 4 +- .../Trait_getExtendedCanonicalPath.expected | 4 +- .../Trait/Trait_getGenericParamList.expected | 2 +- .../generated/Trait/Trait_getName.expected | 4 +- .../Trait/Trait_getVisibility.expected | 2 +- .../Trait/Trait_getWhereClause.expected | 2 +- .../TuplePat/TuplePat_getField.expected | 2 +- .../TupleStructPat_getField.expected | 14 ++-- .../UnderscoreExpr/UnderscoreExpr.expected | 2 +- .../WildcardPat/WildcardPat.expected | 2 +- .../ql/test/extractor-tests/utf8/ast.expected | 16 ++--- .../controlflow-unstable/Cfg.expected | 64 +++++++++---------- .../dataflow/global/viableCallable.expected | 48 +++++++------- .../dataflow/local/DataFlowStep.expected | 58 ++++++++--------- .../test/library-tests/variables/Ssa.expected | 16 ++--- .../DataFlowConsistencyCounts.expected | 2 +- .../diagnostics/SummaryStats.expected | 2 +- .../CONSISTENCY/DataFlowConsistency.expected | 14 ++++ 132 files changed, 417 insertions(+), 403 deletions(-) diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected index 622652e091f7..d9919af198c2 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected @@ -1,36 +1,36 @@ canonicalPaths -| canonical_paths.rs:1:1:34:1 | Module | repo::test | crate::canonical_paths::a | +| canonical_paths.rs:1:1:34:1 | mod a | repo::test | crate::canonical_paths::a | | canonical_paths.rs:2:5:3:22 | Struct | repo::test | crate::canonical_paths::a::Struct | -| canonical_paths.rs:5:5:7:5 | Trait | repo::test | crate::canonical_paths::a::Trait | -| canonical_paths.rs:6:9:6:20 | f | repo::test | crate::canonical_paths::a::Trait::f | -| canonical_paths.rs:9:5:11:5 | Impl | None | None | -| canonical_paths.rs:10:9:10:22 | f | repo::test | ::f | -| canonical_paths.rs:13:5:15:5 | Impl | None | None | -| canonical_paths.rs:14:9:14:22 | g | repo::test | ::g | -| canonical_paths.rs:17:5:19:5 | Trait | repo::test | crate::canonical_paths::a::TraitWithBlanketImpl | -| canonical_paths.rs:18:9:18:20 | h | repo::test | crate::canonical_paths::a::TraitWithBlanketImpl::h | -| canonical_paths.rs:21:5:23:5 | Impl | None | None | -| canonical_paths.rs:22:9:22:22 | h | repo::test | <_ as crate::canonical_paths::a::TraitWithBlanketImpl>::h | -| canonical_paths.rs:25:5:25:16 | free | repo::test | crate::canonical_paths::a::free | -| canonical_paths.rs:27:5:33:5 | usage | repo::test | crate::canonical_paths::a::usage | -| canonical_paths.rs:36:1:73:1 | Module | repo::test | crate::canonical_paths::without | +| canonical_paths.rs:5:5:7:5 | trait Trait | repo::test | crate::canonical_paths::a::Trait | +| canonical_paths.rs:6:9:6:20 | fn f | repo::test | crate::canonical_paths::a::Trait::f | +| canonical_paths.rs:9:5:11:5 | impl Trait for Struct { ... } | None | None | +| canonical_paths.rs:10:9:10:22 | fn f | repo::test | ::f | +| canonical_paths.rs:13:5:15:5 | impl Struct { ... } | None | None | +| canonical_paths.rs:14:9:14:22 | fn g | repo::test | ::g | +| canonical_paths.rs:17:5:19:5 | trait TraitWithBlanketImpl | repo::test | crate::canonical_paths::a::TraitWithBlanketImpl | +| canonical_paths.rs:18:9:18:20 | fn h | repo::test | crate::canonical_paths::a::TraitWithBlanketImpl::h | +| canonical_paths.rs:21:5:23:5 | impl TraitWithBlanketImpl for T { ... } | None | None | +| canonical_paths.rs:22:9:22:22 | fn h | repo::test | <_ as crate::canonical_paths::a::TraitWithBlanketImpl>::h | +| canonical_paths.rs:25:5:25:16 | fn free | repo::test | crate::canonical_paths::a::free | +| canonical_paths.rs:27:5:33:5 | fn usage | repo::test | crate::canonical_paths::a::usage | +| canonical_paths.rs:36:1:73:1 | mod without | repo::test | crate::canonical_paths::without | | canonical_paths.rs:37:5:37:24 | Use | None | None | -| canonical_paths.rs:39:5:68:5 | canonicals | repo::test | crate::canonical_paths::without::canonicals | +| canonical_paths.rs:39:5:68:5 | fn canonicals | repo::test | crate::canonical_paths::without::canonicals | | canonical_paths.rs:40:9:40:27 | Struct | repo::test | {34}::OtherStruct | -| canonical_paths.rs:42:9:44:9 | Trait | repo::test | {34}::OtherTrait | -| canonical_paths.rs:43:13:43:24 | g | repo::test | {34}::OtherTrait::g | -| canonical_paths.rs:46:9:48:9 | Impl | None | None | -| canonical_paths.rs:47:13:47:26 | g | repo::test | <{34}::OtherStruct as {34}::OtherTrait>::g | -| canonical_paths.rs:50:9:52:9 | Impl | None | None | -| canonical_paths.rs:51:13:51:26 | g | repo::test | ::g | -| canonical_paths.rs:54:9:56:9 | Impl | None | None | -| canonical_paths.rs:55:13:55:26 | f | repo::test | <{34}::OtherStruct as crate::canonical_paths::a::Trait>::f | -| canonical_paths.rs:58:9:60:9 | nested | repo::test | {34}::nested | +| canonical_paths.rs:42:9:44:9 | trait OtherTrait | repo::test | {34}::OtherTrait | +| canonical_paths.rs:43:13:43:24 | fn g | repo::test | {34}::OtherTrait::g | +| canonical_paths.rs:46:9:48:9 | impl OtherTrait for OtherStruct { ... } | None | None | +| canonical_paths.rs:47:13:47:26 | fn g | repo::test | <{34}::OtherStruct as {34}::OtherTrait>::g | +| canonical_paths.rs:50:9:52:9 | impl OtherTrait for crate::canonical_paths::a::Struct { ... } | None | None | +| canonical_paths.rs:51:13:51:26 | fn g | repo::test | ::g | +| canonical_paths.rs:54:9:56:9 | impl crate::canonical_paths::a::Trait for OtherStruct { ... } | None | None | +| canonical_paths.rs:55:13:55:26 | fn f | repo::test | <{34}::OtherStruct as crate::canonical_paths::a::Trait>::f | +| canonical_paths.rs:58:9:60:9 | fn nested | repo::test | {34}::nested | | canonical_paths.rs:59:13:59:31 | Struct | repo::test | {35}::OtherStruct | -| canonical_paths.rs:62:9:67:9 | usage | repo::test | {34}::usage | -| canonical_paths.rs:70:5:72:5 | other | repo::test | crate::canonical_paths::without::other | +| canonical_paths.rs:62:9:67:9 | fn usage | repo::test | {34}::usage | +| canonical_paths.rs:70:5:72:5 | fn other | repo::test | crate::canonical_paths::without::other | | canonical_paths.rs:71:9:71:27 | Struct | repo::test | {36}::OtherStruct | -| lib.rs:1:1:1:20 | Module | repo::test | crate::canonical_paths | +| lib.rs:1:1:1:20 | mod canonical_paths | repo::test | crate::canonical_paths | resolvedPaths | canonical_paths.rs:2:7:2:12 | derive | None | None | | canonical_paths.rs:9:10:9:14 | Trait | repo::test | crate::canonical_paths::a::Trait | diff --git a/rust/ql/test/extractor-tests/generated/ArrayExpr/ArrayExpr.expected b/rust/ql/test/extractor-tests/generated/ArrayExpr/ArrayExpr.expected index 549f43fc9892..e1ab176fe514 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayExpr/ArrayExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ArrayExpr/ArrayExpr.expected @@ -1,2 +1,2 @@ -| gen_array_expr.rs:5:5:5:13 | ArrayExpr | getNumberOfAttrs: | 0 | getNumberOfExprs: | 3 | -| gen_array_expr.rs:6:5:6:11 | ArrayExpr | getNumberOfAttrs: | 0 | getNumberOfExprs: | 2 | +| gen_array_expr.rs:5:5:5:13 | [...] | getNumberOfAttrs: | 0 | getNumberOfExprs: | 3 | +| gen_array_expr.rs:6:5:6:11 | [...] | getNumberOfAttrs: | 0 | getNumberOfExprs: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/ArrayExpr/ArrayExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/ArrayExpr/ArrayExpr_getExpr.expected index 97da5ba1c2af..393fb28f2bfa 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayExpr/ArrayExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ArrayExpr/ArrayExpr_getExpr.expected @@ -1,5 +1,5 @@ -| gen_array_expr.rs:5:5:5:13 | ArrayExpr | 0 | gen_array_expr.rs:5:6:5:6 | 1 | -| gen_array_expr.rs:5:5:5:13 | ArrayExpr | 1 | gen_array_expr.rs:5:9:5:9 | 2 | -| gen_array_expr.rs:5:5:5:13 | ArrayExpr | 2 | gen_array_expr.rs:5:12:5:12 | 3 | -| gen_array_expr.rs:6:5:6:11 | ArrayExpr | 0 | gen_array_expr.rs:6:6:6:6 | 1 | -| gen_array_expr.rs:6:5:6:11 | ArrayExpr | 1 | gen_array_expr.rs:6:9:6:10 | 10 | +| gen_array_expr.rs:5:5:5:13 | [...] | 0 | gen_array_expr.rs:5:6:5:6 | 1 | +| gen_array_expr.rs:5:5:5:13 | [...] | 1 | gen_array_expr.rs:5:9:5:9 | 2 | +| gen_array_expr.rs:5:5:5:13 | [...] | 2 | gen_array_expr.rs:5:12:5:12 | 3 | +| gen_array_expr.rs:6:5:6:11 | [...] | 0 | gen_array_expr.rs:6:6:6:6 | 1 | +| gen_array_expr.rs:6:5:6:11 | [...] | 1 | gen_array_expr.rs:6:9:6:10 | 10 | diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getExpr.expected index 7a4af543f311..07aec8f5fe0d 100644 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getExpr.expected @@ -1 +1 @@ -| gen_asm_expr.rs:6:9:6:24 | AsmExpr | gen_asm_expr.rs:6:23:6:23 | UnderscoreExpr | +| gen_asm_expr.rs:6:9:6:24 | AsmExpr | gen_asm_expr.rs:6:23:6:23 | _ | diff --git a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.expected b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.expected index 2ed01b9058e1..9104ba77e5fe 100644 --- a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.expected +++ b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.expected @@ -1 +1 @@ -| gen_await_expr.rs:6:17:6:27 | AwaitExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_await_expr.rs:6:17:6:27 | await ... | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected index c34a6012f4c3..528d6f097a09 100644 --- a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected @@ -1 +1 @@ -| gen_await_expr.rs:6:17:6:27 | AwaitExpr | gen_await_expr.rs:6:17:6:21 | CallExpr | +| gen_await_expr.rs:6:17:6:27 | await ... | gen_await_expr.rs:6:17:6:21 | ... (...) | diff --git a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.expected b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.expected index 75840ec81fed..ce3e6a096909 100644 --- a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.expected @@ -1 +1 @@ -| gen_become_expr.rs:8:10:8:36 | BecomeExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_become_expr.rs:8:10:8:36 | become ... | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected index 8992c4868ca2..4fbba61bc8cf 100644 --- a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected @@ -1 +1 @@ -| gen_become_expr.rs:8:10:8:36 | BecomeExpr | gen_become_expr.rs:8:17:8:36 | CallExpr | +| gen_become_expr.rs:8:10:8:36 | become ... | gen_become_expr.rs:8:17:8:36 | ... (...) | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected index 39ec1d6a7e1a..3efd724a0133 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected @@ -1,3 +1,3 @@ -| gen_block_expr.rs:3:28:12:1 | BlockExpr | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | no | hasStmtList: | yes | -| gen_block_expr.rs:5:5:7:5 | BlockExpr | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | no | hasStmtList: | yes | -| gen_block_expr.rs:8:5:11:5 | BlockExpr | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | yes | hasStmtList: | yes | +| gen_block_expr.rs:3:28:12:1 | { ... } | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | no | hasStmtList: | yes | +| gen_block_expr.rs:5:5:7:5 | { ... } | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | no | hasStmtList: | yes | +| gen_block_expr.rs:8:5:11:5 | { ... } | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | yes | hasStmtList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected index 3a935228e051..354199e9a073 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected @@ -1 +1 @@ -| gen_block_expr.rs:8:5:11:5 | BlockExpr | gen_block_expr.rs:8:5:8:11 | Label | +| gen_block_expr.rs:8:5:11:5 | { ... } | gen_block_expr.rs:8:5:8:11 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected index 21eb195289a2..226f57703929 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected @@ -1,3 +1,3 @@ -| gen_block_expr.rs:3:28:12:1 | BlockExpr | gen_block_expr.rs:3:28:12:1 | StmtList | -| gen_block_expr.rs:5:5:7:5 | BlockExpr | gen_block_expr.rs:5:5:7:5 | StmtList | -| gen_block_expr.rs:8:5:11:5 | BlockExpr | gen_block_expr.rs:8:13:11:5 | StmtList | +| gen_block_expr.rs:3:28:12:1 | { ... } | gen_block_expr.rs:3:28:12:1 | StmtList | +| gen_block_expr.rs:5:5:7:5 | { ... } | gen_block_expr.rs:5:5:7:5 | StmtList | +| gen_block_expr.rs:8:5:11:5 | { ... } | gen_block_expr.rs:8:13:11:5 | StmtList | diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected index 95c8bdebd47a..20bc2bf7cc1b 100644 --- a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected @@ -1,2 +1,2 @@ -| gen_box_pat.rs:6:9:6:27 | BoxPat | hasPat: | yes | -| gen_box_pat.rs:7:9:7:24 | BoxPat | hasPat: | yes | +| gen_box_pat.rs:6:9:6:27 | box ... | hasPat: | yes | +| gen_box_pat.rs:7:9:7:24 | box ... | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected index cac8ee05d3c4..d98d750d3a8e 100644 --- a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_box_pat.rs:6:9:6:27 | BoxPat | gen_box_pat.rs:6:13:6:27 | TupleStructPat | -| gen_box_pat.rs:7:9:7:24 | BoxPat | gen_box_pat.rs:7:13:7:24 | PathPat | +| gen_box_pat.rs:6:9:6:27 | box ... | gen_box_pat.rs:6:13:6:27 | TupleStructPat | +| gen_box_pat.rs:7:9:7:24 | box ... | gen_box_pat.rs:7:13:7:24 | Option::None | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected index 763fae60866a..f4c8df0a1005 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected @@ -1,3 +1,3 @@ -| gen_break_expr.rs:7:13:7:17 | BreakExpr | getNumberOfAttrs: | 0 | hasExpr: | no | hasLifetime: | no | -| gen_break_expr.rs:12:13:12:27 | BreakExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | -| gen_break_expr.rs:17:13:17:27 | BreakExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | +| gen_break_expr.rs:7:13:7:17 | (no string representation) | getNumberOfAttrs: | 0 | hasExpr: | no | hasLifetime: | no | +| gen_break_expr.rs:12:13:12:27 | (no string representation) | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | +| gen_break_expr.rs:17:13:17:27 | (no string representation) | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected index 0bd373a4bbc1..f99723114fba 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected @@ -1,2 +1,2 @@ -| gen_break_expr.rs:12:13:12:27 | BreakExpr | gen_break_expr.rs:12:26:12:27 | 42 | -| gen_break_expr.rs:17:13:17:27 | BreakExpr | gen_break_expr.rs:17:26:17:27 | 42 | +| gen_break_expr.rs:12:13:12:27 | (no string representation) | gen_break_expr.rs:12:26:12:27 | 42 | +| gen_break_expr.rs:17:13:17:27 | (no string representation) | gen_break_expr.rs:17:26:17:27 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected index b993a2eebf5a..a1a828c744aa 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected @@ -1,2 +1,2 @@ -| gen_break_expr.rs:12:13:12:27 | BreakExpr | gen_break_expr.rs:12:19:12:24 | Lifetime | -| gen_break_expr.rs:17:13:17:27 | BreakExpr | gen_break_expr.rs:17:19:17:24 | Lifetime | +| gen_break_expr.rs:12:13:12:27 | (no string representation) | gen_break_expr.rs:12:19:12:24 | ''label | +| gen_break_expr.rs:17:13:17:27 | (no string representation) | gen_break_expr.rs:17:19:17:24 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected index 5414108064cd..9e01b6bdc630 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected @@ -1,4 +1,4 @@ -| gen_call_expr.rs:5:5:5:11 | CallExpr | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | -| gen_call_expr.rs:6:5:6:23 | CallExpr | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | -| gen_call_expr.rs:7:5:7:14 | CallExpr | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | -| gen_call_expr.rs:8:5:8:10 | CallExpr | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_call_expr.rs:5:5:5:11 | ... (...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_call_expr.rs:6:5:6:23 | ... (...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_call_expr.rs:7:5:7:14 | ... (...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_call_expr.rs:8:5:8:10 | ... (...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected index a42cc13bf39c..1876a5b58d8a 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected @@ -1,4 +1,4 @@ -| gen_call_expr.rs:5:5:5:11 | CallExpr | gen_call_expr.rs:5:8:5:11 | ArgList | -| gen_call_expr.rs:6:5:6:23 | CallExpr | gen_call_expr.rs:6:20:6:23 | ArgList | -| gen_call_expr.rs:7:5:7:14 | CallExpr | gen_call_expr.rs:7:11:7:14 | ArgList | -| gen_call_expr.rs:8:5:8:10 | CallExpr | gen_call_expr.rs:8:8:8:10 | ArgList | +| gen_call_expr.rs:5:5:5:11 | ... (...) | gen_call_expr.rs:5:8:5:11 | ArgList | +| gen_call_expr.rs:6:5:6:23 | ... (...) | gen_call_expr.rs:6:20:6:23 | ArgList | +| gen_call_expr.rs:7:5:7:14 | ... (...) | gen_call_expr.rs:7:11:7:14 | ArgList | +| gen_call_expr.rs:8:5:8:10 | ... (...) | gen_call_expr.rs:8:8:8:10 | ArgList | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected index 544937866b78..017a4656ffd6 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected @@ -1,4 +1,4 @@ -| gen_call_expr.rs:5:5:5:11 | CallExpr | gen_call_expr.rs:5:5:5:7 | foo | -| gen_call_expr.rs:6:5:6:23 | CallExpr | gen_call_expr.rs:6:5:6:19 | foo::<...> | -| gen_call_expr.rs:7:5:7:14 | CallExpr | gen_call_expr.rs:7:5:7:10 | IndexExpr | -| gen_call_expr.rs:8:5:8:10 | CallExpr | gen_call_expr.rs:8:5:8:7 | foo | +| gen_call_expr.rs:5:5:5:11 | ... (...) | gen_call_expr.rs:5:5:5:7 | foo | +| gen_call_expr.rs:6:5:6:23 | ... (...) | gen_call_expr.rs:6:5:6:19 | foo::<...> | +| gen_call_expr.rs:7:5:7:14 | ... (...) | gen_call_expr.rs:7:5:7:10 | ...[...] | +| gen_call_expr.rs:8:5:8:10 | ... (...) | gen_call_expr.rs:8:5:8:7 | foo | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected index 6050eb022593..157e06c3f2b2 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | CastExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | hasTy: | yes | +| gen_cast_expr.rs:5:5:5:16 | ... as u64 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasTy: | yes | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected index f3e1d4c7ec94..fda7db77d90d 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | CastExpr | gen_cast_expr.rs:5:5:5:9 | value | +| gen_cast_expr.rs:5:5:5:16 | ... as u64 | gen_cast_expr.rs:5:5:5:9 | value | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected index 29cc49cc3b9f..90fa37e4f97a 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | CastExpr | gen_cast_expr.rs:5:14:5:16 | PathType | +| gen_cast_expr.rs:5:5:5:16 | ... as u64 | gen_cast_expr.rs:5:14:5:16 | u64 | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected index fb665ca8f605..3ea9f463a00d 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected @@ -1,5 +1,5 @@ -| gen_closure_expr.rs:5:5:5:13 | ClosureExpr | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | -| gen_closure_expr.rs:6:5:6:34 | ClosureExpr | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | yes | isStatic: | no | hasRetType: | yes | -| gen_closure_expr.rs:7:5:7:27 | ClosureExpr | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | yes | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | -| gen_closure_expr.rs:8:6:9:15 | ClosureExpr | hasParamList: | yes | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | -| gen_closure_expr.rs:10:6:11:23 | ClosureExpr | hasParamList: | yes | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | yes | hasRetType: | no | +| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | yes | isStatic: | no | hasRetType: | yes | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasClosureBinder: | no | isAsync: | yes | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | yes | hasRetType: | no | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.expected index f1859d594d18..4de6e17d785a 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.expected +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.expected @@ -1,2 +1,2 @@ -| gen_closure_expr.rs:8:6:9:15 | ClosureExpr | 0 | gen_closure_expr.rs:8:6:8:17 | Attr | -| gen_closure_expr.rs:10:6:11:23 | ClosureExpr | 0 | gen_closure_expr.rs:10:6:10:17 | Attr | +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | 0 | gen_closure_expr.rs:8:6:8:17 | Attr | +| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | 0 | gen_closure_expr.rs:10:6:10:17 | Attr | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.expected index 71bc3cccda3c..d7b6180e63b2 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.expected +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.expected @@ -1,5 +1,5 @@ -| gen_closure_expr.rs:5:5:5:13 | ClosureExpr | gen_closure_expr.rs:5:9:5:13 | ... + ... | -| gen_closure_expr.rs:6:5:6:34 | ClosureExpr | gen_closure_expr.rs:6:26:6:34 | BlockExpr | -| gen_closure_expr.rs:7:5:7:27 | ClosureExpr | gen_closure_expr.rs:7:23:7:27 | ... + ... | -| gen_closure_expr.rs:8:6:9:15 | ClosureExpr | gen_closure_expr.rs:9:9:9:15 | YieldExpr | -| gen_closure_expr.rs:10:6:11:23 | ClosureExpr | gen_closure_expr.rs:11:17:11:23 | YieldExpr | +| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | gen_closure_expr.rs:5:9:5:13 | ... + ... | +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | gen_closure_expr.rs:6:26:6:34 | { ... } | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | gen_closure_expr.rs:7:23:7:27 | ... + ... | +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | gen_closure_expr.rs:9:9:9:15 | YieldExpr | +| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | gen_closure_expr.rs:11:17:11:23 | YieldExpr | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.expected index d0e6aaeac064..5945738433bd 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.expected +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.expected @@ -1,5 +1,5 @@ -| gen_closure_expr.rs:5:5:5:13 | ClosureExpr | gen_closure_expr.rs:5:5:5:7 | ParamList | -| gen_closure_expr.rs:6:5:6:34 | ClosureExpr | gen_closure_expr.rs:6:10:6:17 | ParamList | -| gen_closure_expr.rs:7:5:7:27 | ClosureExpr | gen_closure_expr.rs:7:11:7:21 | ParamList | -| gen_closure_expr.rs:8:6:9:15 | ClosureExpr | gen_closure_expr.rs:9:5:9:7 | ParamList | -| gen_closure_expr.rs:10:6:11:23 | ClosureExpr | gen_closure_expr.rs:11:13:11:15 | ParamList | +| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | gen_closure_expr.rs:5:5:5:7 | ParamList | +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | gen_closure_expr.rs:6:10:6:17 | ParamList | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | gen_closure_expr.rs:7:11:7:21 | ParamList | +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | gen_closure_expr.rs:9:5:9:7 | ParamList | +| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | gen_closure_expr.rs:11:13:11:15 | ParamList | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.expected index e018209cb53f..d7ec1024953c 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.expected +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.expected @@ -1 +1 @@ -| gen_closure_expr.rs:6:5:6:34 | ClosureExpr | gen_closure_expr.rs:6:19:6:24 | RetType | +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | gen_closure_expr.rs:6:19:6:24 | RetType | diff --git a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.expected b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.expected index 58a885a48578..42cdb5ef4c30 100644 --- a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.expected @@ -1 +1 @@ -| gen_const_block_pat.rs:6:9:6:27 | ConstBlockPat | gen_const_block_pat.rs:6:15:6:27 | BlockExpr | +| gen_const_block_pat.rs:6:9:6:27 | ConstBlockPat | gen_const_block_pat.rs:6:15:6:27 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected index ab921873d620..a09556b9a3ff 100644 --- a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected @@ -1,2 +1,2 @@ -| gen_continue_expr.rs:7:13:7:20 | ContinueExpr | getNumberOfAttrs: | 0 | hasLifetime: | no | -| gen_continue_expr.rs:12:13:12:27 | ContinueExpr | getNumberOfAttrs: | 0 | hasLifetime: | yes | +| gen_continue_expr.rs:7:13:7:20 | continue | getNumberOfAttrs: | 0 | hasLifetime: | no | +| gen_continue_expr.rs:12:13:12:27 | continue 'label | getNumberOfAttrs: | 0 | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected index 525d2bb55a8e..d81d276ce0ae 100644 --- a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected @@ -1 +1 @@ -| gen_continue_expr.rs:12:13:12:27 | ContinueExpr | gen_continue_expr.rs:12:22:12:27 | Lifetime | +| gen_continue_expr.rs:12:13:12:27 | continue 'label | gen_continue_expr.rs:12:22:12:27 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected index f29a7f83d7d5..08343b7e1e90 100644 --- a/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected @@ -1,2 +1,2 @@ -| gen_expr_stmt.rs:5:5:5:12 | ExprStmt | gen_expr_stmt.rs:5:5:5:11 | CallExpr | -| gen_expr_stmt.rs:6:5:6:13 | ExprStmt | gen_expr_stmt.rs:6:5:6:12 | CallExpr | +| gen_expr_stmt.rs:5:5:5:12 | ExprStmt | gen_expr_stmt.rs:5:5:5:11 | ... (...) | +| gen_expr_stmt.rs:6:5:6:13 | ExprStmt | gen_expr_stmt.rs:6:5:6:12 | ... (...) | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected index 22dcb3c92e11..912f65f43e3a 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected @@ -1 +1 @@ -| gen_field_expr.rs:5:5:5:9 | FieldExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | +| gen_field_expr.rs:5:5:5:9 | ... .foo | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected index 32b13c1cb2b0..ac80547d5ca2 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected @@ -1 +1 @@ -| gen_field_expr.rs:5:5:5:9 | FieldExpr | gen_field_expr.rs:5:5:5:5 | x | +| gen_field_expr.rs:5:5:5:9 | ... .foo | gen_field_expr.rs:5:5:5:5 | x | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected index 667f3130968c..743f58b57410 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected @@ -1 +1 @@ -| gen_field_expr.rs:5:5:5:9 | FieldExpr | gen_field_expr.rs:5:7:5:9 | foo | +| gen_field_expr.rs:5:5:5:9 | ... .foo | gen_field_expr.rs:5:7:5:9 | foo | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.expected b/rust/ql/test/extractor-tests/generated/Function/Function.expected index f93eb58b2ae4..b96996beef94 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function.expected @@ -1,2 +1,2 @@ -| gen_function.rs:3:1:4:38 | foo | hasParamList: | yes | getNumberOfAttrs: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAbi: | no | hasBody: | yes | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | -| gen_function.rs:7:5:7:13 | bar | hasParamList: | yes | getNumberOfAttrs: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAbi: | no | hasBody: | no | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_function.rs:3:1:4:38 | fn foo | hasParamList: | yes | getNumberOfAttrs: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAbi: | no | hasBody: | yes | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | +| gen_function.rs:7:5:7:13 | fn bar | hasParamList: | yes | getNumberOfAttrs: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAbi: | no | hasBody: | no | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getBody.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getBody.expected index 996e8c1a27c3..894900b3eaa8 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function_getBody.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getBody.expected @@ -1 +1 @@ -| gen_function.rs:3:1:4:38 | foo | gen_function.rs:4:23:4:38 | BlockExpr | +| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:23:4:38 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getCrateOrigin.expected index 7c376ffaf1e6..eabc941bd5be 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function_getCrateOrigin.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getCrateOrigin.expected @@ -1,2 +1,2 @@ -| gen_function.rs:3:1:4:38 | foo | repo::test | -| gen_function.rs:7:5:7:13 | bar | repo::test | +| gen_function.rs:3:1:4:38 | fn foo | repo::test | +| gen_function.rs:7:5:7:13 | fn bar | repo::test | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.expected index d9b6255918f8..2c0059ebc2a5 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.expected @@ -1,2 +1,2 @@ -| gen_function.rs:3:1:4:38 | foo | crate::gen_function::foo | -| gen_function.rs:7:5:7:13 | bar | crate::gen_function::Trait::bar | +| gen_function.rs:3:1:4:38 | fn foo | crate::gen_function::foo | +| gen_function.rs:7:5:7:13 | fn bar | crate::gen_function::Trait::bar | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getName.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getName.expected index 62676019818d..7e889e82d284 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getName.expected @@ -1,2 +1,2 @@ -| gen_function.rs:3:1:4:38 | foo | gen_function.rs:4:4:4:6 | foo | -| gen_function.rs:7:5:7:13 | bar | gen_function.rs:7:8:7:10 | bar | +| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:4:4:6 | foo | +| gen_function.rs:7:5:7:13 | fn bar | gen_function.rs:7:8:7:10 | bar | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getParamList.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getParamList.expected index baa2734e86ac..df5810619191 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function_getParamList.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getParamList.expected @@ -1,2 +1,2 @@ -| gen_function.rs:3:1:4:38 | foo | gen_function.rs:4:7:4:14 | ParamList | -| gen_function.rs:7:5:7:13 | bar | gen_function.rs:7:11:7:12 | ParamList | +| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:7:4:14 | ParamList | +| gen_function.rs:7:5:7:13 | fn bar | gen_function.rs:7:11:7:12 | ParamList | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getRetType.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getRetType.expected index 7a5338705600..bd225b268e84 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function_getRetType.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getRetType.expected @@ -1 +1 @@ -| gen_function.rs:3:1:4:38 | foo | gen_function.rs:4:16:4:21 | RetType | +| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:16:4:21 | RetType | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected index a0e0ea15594f..6c40caaae5c9 100644 --- a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected @@ -1,2 +1,2 @@ -| gen_if_expr.rs:5:5:7:5 | IfExpr | getNumberOfAttrs: | 0 | hasCondition: | yes | hasElse: | no | hasThen: | yes | -| gen_if_expr.rs:8:13:12:5 | IfExpr | getNumberOfAttrs: | 0 | hasCondition: | yes | hasElse: | yes | hasThen: | yes | +| gen_if_expr.rs:5:5:7:5 | if ... { ... } | getNumberOfAttrs: | 0 | hasCondition: | yes | hasElse: | no | hasThen: | yes | +| gen_if_expr.rs:8:13:12:5 | if ... { ... } else { ... } | getNumberOfAttrs: | 0 | hasCondition: | yes | hasElse: | yes | hasThen: | yes | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected index 7bdb262dd324..9dc91afd773e 100644 --- a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected @@ -1,2 +1,2 @@ -| gen_if_expr.rs:5:5:7:5 | IfExpr | gen_if_expr.rs:5:8:5:14 | ... == ... | -| gen_if_expr.rs:8:13:12:5 | IfExpr | gen_if_expr.rs:8:16:8:20 | ... > ... | +| gen_if_expr.rs:5:5:7:5 | if ... { ... } | gen_if_expr.rs:5:8:5:14 | ... == ... | +| gen_if_expr.rs:8:13:12:5 | if ... { ... } else { ... } | gen_if_expr.rs:8:16:8:20 | ... > ... | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected index a857dbe2099a..4f8d79008e6a 100644 --- a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected @@ -1 +1 @@ -| gen_if_expr.rs:8:13:12:5 | IfExpr | gen_if_expr.rs:10:12:12:5 | BlockExpr | +| gen_if_expr.rs:8:13:12:5 | if ... { ... } else { ... } | gen_if_expr.rs:10:12:12:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected index 0916c3f33916..961cb118409c 100644 --- a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected @@ -1,2 +1,2 @@ -| gen_if_expr.rs:5:5:7:5 | IfExpr | gen_if_expr.rs:5:16:7:5 | BlockExpr | -| gen_if_expr.rs:8:13:12:5 | IfExpr | gen_if_expr.rs:8:22:10:5 | BlockExpr | +| gen_if_expr.rs:5:5:7:5 | if ... { ... } | gen_if_expr.rs:5:16:7:5 | { ... } | +| gen_if_expr.rs:8:13:12:5 | if ... { ... } else { ... } | gen_if_expr.rs:8:22:10:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected index c113934115d2..e737827e89f6 100644 --- a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected @@ -1,2 +1,2 @@ -| gen_index_expr.rs:5:5:5:12 | IndexExpr | getNumberOfAttrs: | 0 | hasBase: | yes | hasIndex: | yes | -| gen_index_expr.rs:6:5:6:12 | IndexExpr | getNumberOfAttrs: | 0 | hasBase: | yes | hasIndex: | yes | +| gen_index_expr.rs:5:5:5:12 | ...[...] | getNumberOfAttrs: | 0 | hasBase: | yes | hasIndex: | yes | +| gen_index_expr.rs:6:5:6:12 | ...[...] | getNumberOfAttrs: | 0 | hasBase: | yes | hasIndex: | yes | diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected index c149597172b8..fc1e9720fabb 100644 --- a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected @@ -1,2 +1,2 @@ -| gen_index_expr.rs:5:5:5:12 | IndexExpr | gen_index_expr.rs:5:5:5:8 | list | -| gen_index_expr.rs:6:5:6:12 | IndexExpr | gen_index_expr.rs:6:5:6:8 | list | +| gen_index_expr.rs:5:5:5:12 | ...[...] | gen_index_expr.rs:5:5:5:8 | list | +| gen_index_expr.rs:6:5:6:12 | ...[...] | gen_index_expr.rs:6:5:6:8 | list | diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected index 433afd85eb99..21c6228d5b95 100644 --- a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected @@ -1,2 +1,2 @@ -| gen_index_expr.rs:5:5:5:12 | IndexExpr | gen_index_expr.rs:5:10:5:11 | 42 | -| gen_index_expr.rs:6:5:6:12 | IndexExpr | gen_index_expr.rs:6:10:6:11 | 42 | +| gen_index_expr.rs:5:5:5:12 | ...[...] | gen_index_expr.rs:5:10:5:11 | 42 | +| gen_index_expr.rs:6:5:6:12 | ...[...] | gen_index_expr.rs:6:10:6:11 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/Label/Label.expected b/rust/ql/test/extractor-tests/generated/Label/Label.expected index 5cea4ef72221..ad594afe55b0 100644 --- a/rust/ql/test/extractor-tests/generated/Label/Label.expected +++ b/rust/ql/test/extractor-tests/generated/Label/Label.expected @@ -1 +1 @@ -| gen_label.rs:5:5:5:11 | Label | hasLifetime: | yes | +| gen_label.rs:5:5:5:11 | ''label | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected b/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected index 9c78f23307d2..d3ea9171b8cf 100644 --- a/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected +++ b/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected @@ -1 +1 @@ -| gen_label.rs:5:5:5:11 | Label | gen_label.rs:5:5:5:10 | Lifetime | +| gen_label.rs:5:5:5:11 | ''label | gen_label.rs:5:5:5:10 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected index 26a968ef35b3..6c6343e24d3c 100644 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected @@ -1 +1 @@ -| gen_let_expr.rs:5:8:5:31 | LetExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | hasPat: | yes | +| gen_let_expr.rs:5:8:5:31 | let TupleStructPat = ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected index f90fa5862299..9293ae80e1d0 100644 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected @@ -1 +1 @@ -| gen_let_expr.rs:5:8:5:31 | LetExpr | gen_let_expr.rs:5:22:5:31 | maybe_some | +| gen_let_expr.rs:5:8:5:31 | let TupleStructPat = ... | gen_let_expr.rs:5:22:5:31 | maybe_some | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected index 287200e610ff..527a9fcc3a9d 100644 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected @@ -1 +1 @@ -| gen_let_expr.rs:5:8:5:31 | LetExpr | gen_let_expr.rs:5:12:5:18 | TupleStructPat | +| gen_let_expr.rs:5:8:5:31 | let TupleStructPat = ... | gen_let_expr.rs:5:12:5:18 | TupleStructPat | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected index 7c05e07e2f3e..e433b420d4e5 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected @@ -1,6 +1,6 @@ -| gen_let_stmt.rs:5:5:5:15 | LetStmt | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | no | -| gen_let_stmt.rs:6:5:6:20 | LetStmt | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | yes | -| gen_let_stmt.rs:7:5:7:15 | LetStmt | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTy: | yes | -| gen_let_stmt.rs:8:5:8:10 | LetStmt | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTy: | no | -| gen_let_stmt.rs:9:5:9:24 | LetStmt | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | no | -| gen_let_stmt.rs:10:5:12:6 | LetStmt | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | yes | hasPat: | yes | hasTy: | no | +| gen_let_stmt.rs:5:5:5:15 | let x = ... | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | no | +| gen_let_stmt.rs:6:5:6:20 | let x = ... | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | yes | +| gen_let_stmt.rs:7:5:7:15 | let x | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTy: | yes | +| gen_let_stmt.rs:8:5:8:10 | let x | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTy: | no | +| gen_let_stmt.rs:9:5:9:24 | let TuplePat = ... | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | no | +| gen_let_stmt.rs:10:5:12:6 | let TupleStructPat = ... else { ... } | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | yes | hasPat: | yes | hasTy: | no | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected index 5e79b98f8278..07b474609f7b 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected @@ -1,4 +1,4 @@ -| gen_let_stmt.rs:5:5:5:15 | LetStmt | gen_let_stmt.rs:5:13:5:14 | 42 | -| gen_let_stmt.rs:6:5:6:20 | LetStmt | gen_let_stmt.rs:6:18:6:19 | 42 | -| gen_let_stmt.rs:9:5:9:24 | LetStmt | gen_let_stmt.rs:9:18:9:23 | TupleExpr | -| gen_let_stmt.rs:10:5:12:6 | LetStmt | gen_let_stmt.rs:10:19:10:38 | CallExpr | +| gen_let_stmt.rs:5:5:5:15 | let x = ... | gen_let_stmt.rs:5:13:5:14 | 42 | +| gen_let_stmt.rs:6:5:6:20 | let x = ... | gen_let_stmt.rs:6:18:6:19 | 42 | +| gen_let_stmt.rs:9:5:9:24 | let TuplePat = ... | gen_let_stmt.rs:9:18:9:23 | TupleExpr | +| gen_let_stmt.rs:10:5:12:6 | let TupleStructPat = ... else { ... } | gen_let_stmt.rs:10:19:10:38 | ... (...) | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected index 8078ec669660..a0531cdba9e3 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected @@ -1 +1 @@ -| gen_let_stmt.rs:10:5:12:6 | LetStmt | gen_let_stmt.rs:10:40:12:5 | LetElse | +| gen_let_stmt.rs:10:5:12:6 | let TupleStructPat = ... else { ... } | gen_let_stmt.rs:10:40:12:5 | else { ... } | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected index 93810df10e36..09a185a51bd3 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected @@ -1,6 +1,6 @@ -| gen_let_stmt.rs:5:5:5:15 | LetStmt | gen_let_stmt.rs:5:9:5:9 | x | -| gen_let_stmt.rs:6:5:6:20 | LetStmt | gen_let_stmt.rs:6:9:6:9 | x | -| gen_let_stmt.rs:7:5:7:15 | LetStmt | gen_let_stmt.rs:7:9:7:9 | x | -| gen_let_stmt.rs:8:5:8:10 | LetStmt | gen_let_stmt.rs:8:9:8:9 | x | -| gen_let_stmt.rs:9:5:9:24 | LetStmt | gen_let_stmt.rs:9:9:9:14 | TuplePat | -| gen_let_stmt.rs:10:5:12:6 | LetStmt | gen_let_stmt.rs:10:9:10:15 | TupleStructPat | +| gen_let_stmt.rs:5:5:5:15 | let x = ... | gen_let_stmt.rs:5:9:5:9 | x | +| gen_let_stmt.rs:6:5:6:20 | let x = ... | gen_let_stmt.rs:6:9:6:9 | x | +| gen_let_stmt.rs:7:5:7:15 | let x | gen_let_stmt.rs:7:9:7:9 | x | +| gen_let_stmt.rs:8:5:8:10 | let x | gen_let_stmt.rs:8:9:8:9 | x | +| gen_let_stmt.rs:9:5:9:24 | let TuplePat = ... | gen_let_stmt.rs:9:9:9:14 | TuplePat | +| gen_let_stmt.rs:10:5:12:6 | let TupleStructPat = ... else { ... } | gen_let_stmt.rs:10:9:10:15 | TupleStructPat | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected index 1cf6d1d2a513..f00814567d34 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected @@ -1,2 +1,2 @@ -| gen_let_stmt.rs:6:5:6:20 | LetStmt | gen_let_stmt.rs:6:12:6:14 | PathType | -| gen_let_stmt.rs:7:5:7:15 | LetStmt | gen_let_stmt.rs:7:12:7:14 | PathType | +| gen_let_stmt.rs:6:5:6:20 | let x = ... | gen_let_stmt.rs:6:12:6:14 | i32 | +| gen_let_stmt.rs:7:5:7:15 | let x | gen_let_stmt.rs:7:12:7:14 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.expected b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.expected index b7ac2ced75f8..d4734ef3dac3 100644 --- a/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.expected +++ b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.expected @@ -1 +1 @@ -| gen_literal_pat.rs:6:9:6:10 | LiteralPat | hasLiteral: | yes | +| gen_literal_pat.rs:6:9:6:10 | 42 | hasLiteral: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.expected b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.expected index ce74da0fb3a5..487f239737bc 100644 --- a/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.expected +++ b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.expected @@ -1 +1 @@ -| gen_literal_pat.rs:6:9:6:10 | LiteralPat | gen_literal_pat.rs:6:9:6:10 | 42 | +| gen_literal_pat.rs:6:9:6:10 | 42 | gen_literal_pat.rs:6:9:6:10 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected index aae22652d645..9cb3238c825b 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected @@ -1,3 +1,3 @@ -| gen_loop_expr.rs:5:5:7:5 | LoopExpr | getNumberOfAttrs: | 0 | hasLabel: | no | hasLoopBody: | yes | -| gen_loop_expr.rs:8:5:11:5 | LoopExpr | getNumberOfAttrs: | 0 | hasLabel: | yes | hasLoopBody: | yes | -| gen_loop_expr.rs:13:5:19:5 | LoopExpr | getNumberOfAttrs: | 0 | hasLabel: | no | hasLoopBody: | yes | +| gen_loop_expr.rs:5:5:7:5 | loop {...} | getNumberOfAttrs: | 0 | hasLabel: | no | hasLoopBody: | yes | +| gen_loop_expr.rs:8:5:11:5 | loop {...} | getNumberOfAttrs: | 0 | hasLabel: | yes | hasLoopBody: | yes | +| gen_loop_expr.rs:13:5:19:5 | loop {...} | getNumberOfAttrs: | 0 | hasLabel: | no | hasLoopBody: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected index 98a657f09832..6a71a241413b 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected @@ -1 +1 @@ -| gen_loop_expr.rs:8:5:11:5 | LoopExpr | gen_loop_expr.rs:8:5:8:11 | Label | +| gen_loop_expr.rs:8:5:11:5 | loop {...} | gen_loop_expr.rs:8:5:8:11 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected index 358fd7625b57..18a1091d89ac 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected @@ -1,3 +1,3 @@ -| gen_loop_expr.rs:5:5:7:5 | LoopExpr | gen_loop_expr.rs:5:10:7:5 | BlockExpr | -| gen_loop_expr.rs:8:5:11:5 | LoopExpr | gen_loop_expr.rs:8:18:11:5 | BlockExpr | -| gen_loop_expr.rs:13:5:19:5 | LoopExpr | gen_loop_expr.rs:13:10:19:5 | BlockExpr | +| gen_loop_expr.rs:5:5:7:5 | loop {...} | gen_loop_expr.rs:5:10:7:5 | { ... } | +| gen_loop_expr.rs:8:5:11:5 | loop {...} | gen_loop_expr.rs:8:18:11:5 | { ... } | +| gen_loop_expr.rs:13:5:19:5 | loop {...} | gen_loop_expr.rs:13:10:19:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected index 03bcc247a9d2..db69c4e068ab 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected @@ -1 +1 @@ -| gen_macro_call.rs:5:5:5:11 | MacroCall | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasExpanded: | yes | +| gen_macro_call.rs:5:5:5:11 | todo!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasExpanded: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.expected index 7bdb564985f8..1b60df41f797 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.expected @@ -1 +1 @@ -| gen_macro_call.rs:5:5:5:11 | MacroCall | gen_macro_call.rs:5:5:5:11 | MacroStmts | +| gen_macro_call.rs:5:5:5:11 | todo!... | gen_macro_call.rs:5:5:5:11 | MacroStmts | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected index 33685ad0aad9..23762715c9a2 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected @@ -1 +1 @@ -| gen_macro_call.rs:5:5:5:11 | MacroCall | gen_macro_call.rs:5:5:5:8 | todo | +| gen_macro_call.rs:5:5:5:11 | todo!... | gen_macro_call.rs:5:5:5:8 | todo | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected index 5f92a68536c1..d2ed004ecc43 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected @@ -1 +1 @@ -| gen_macro_call.rs:5:5:5:11 | MacroCall | gen_macro_call.rs:5:10:5:11 | TokenTree | +| gen_macro_call.rs:5:5:5:11 | todo!... | gen_macro_call.rs:5:10:5:11 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected index 5a635cabcbe1..c1815adac090 100644 --- a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected @@ -1 +1 @@ -| gen_macro_expr.rs:5:5:5:11 | MacroExpr | gen_macro_expr.rs:5:5:5:11 | MacroCall | +| gen_macro_expr.rs:5:5:5:11 | MacroExpr | gen_macro_expr.rs:5:5:5:11 | todo!... | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/DataFlowConsistency.expected b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/DataFlowConsistency.expected index 02210855a69c..b7a9f37a672e 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/DataFlowConsistency.expected +++ b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/DataFlowConsistency.expected @@ -1,9 +1,9 @@ uniqueNodeLocation | file://:0:0:0:0 | ... .parent(...) | Node should have one location but has 0. | | file://:0:0:0:0 | ... .unwrap(...) | Node should have one location but has 0. | -| file://:0:0:0:0 | BlockExpr | Node should have one location but has 0. | -| file://:0:0:0:0 | Param | Node should have one location but has 0. | | file://:0:0:0:0 | path | Node should have one location but has 0. | | file://:0:0:0:0 | path | Node should have one location but has 0. | +| file://:0:0:0:0 | path: RefType | Node should have one location but has 0. | +| file://:0:0:0:0 | { ... } | Node should have one location but has 0. | missingLocation | Nodes without location: 6 | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected index a66e6bcca5ec..5940fb61696a 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected @@ -1,2 +1,2 @@ | file://:0:0:0:0 | MacroItems | 0 | file://:0:0:0:0 | Use | -| file://:0:0:0:0 | MacroItems | 1 | file://:0:0:0:0 | get_parent | +| file://:0:0:0:0 | MacroItems | 1 | file://:0:0:0:0 | fn get_parent | diff --git a/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.expected b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.expected index 7d30926c1528..d1390595304e 100644 --- a/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MacroStmts/MacroStmts_getExpr.expected @@ -1 +1 @@ -| gen_macro_stmts.rs:5:14:5:28 | MacroStmts | gen_macro_stmts.rs:5:14:5:28 | BlockExpr | +| gen_macro_stmts.rs:5:14:5:28 | MacroStmts | gen_macro_stmts.rs:5:14:5:28 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected index b685f8823628..34033eeee089 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected @@ -1,4 +1,4 @@ -| gen_match_arm.rs:6:9:6:29 | MatchArm | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | -| gen_match_arm.rs:7:9:7:26 | MatchArm | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | -| gen_match_arm.rs:10:9:10:35 | MatchArm | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | yes | hasPat: | yes | -| gen_match_arm.rs:11:9:11:15 | MatchArm | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | +| gen_match_arm.rs:6:9:6:29 | TupleStructPat => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | +| gen_match_arm.rs:7:9:7:26 | Option::None => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | +| gen_match_arm.rs:10:9:10:35 | TupleStructPatif ... => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | yes | hasPat: | yes | +| gen_match_arm.rs:11:9:11:15 | _ => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected index 4e5da9874740..ad59397e84a3 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected @@ -1 +1 @@ -| gen_match_arm.rs:10:9:10:35 | MatchArm | gen_match_arm.rs:10:17:10:25 | MatchGuard | +| gen_match_arm.rs:10:9:10:35 | TupleStructPatif ... => ... | gen_match_arm.rs:10:17:10:25 | MatchGuard | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected index 41f79ed16c9e..2d8cf38991d9 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected @@ -1,4 +1,4 @@ -| gen_match_arm.rs:6:9:6:29 | MatchArm | gen_match_arm.rs:6:9:6:23 | TupleStructPat | -| gen_match_arm.rs:7:9:7:26 | MatchArm | gen_match_arm.rs:7:9:7:20 | PathPat | -| gen_match_arm.rs:10:9:10:35 | MatchArm | gen_match_arm.rs:10:9:10:15 | TupleStructPat | -| gen_match_arm.rs:11:9:11:15 | MatchArm | gen_match_arm.rs:11:9:11:9 | WildcardPat | +| gen_match_arm.rs:6:9:6:29 | TupleStructPat => ... | gen_match_arm.rs:6:9:6:23 | TupleStructPat | +| gen_match_arm.rs:7:9:7:26 | Option::None => ... | gen_match_arm.rs:7:9:7:20 | Option::None | +| gen_match_arm.rs:10:9:10:35 | TupleStructPatif ... => ... | gen_match_arm.rs:10:9:10:15 | TupleStructPat | +| gen_match_arm.rs:11:9:11:15 | _ => ... | gen_match_arm.rs:11:9:11:9 | _ | diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected index 4591d8a57c36..ae8f3edb6658 100644 --- a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected @@ -1,2 +1,2 @@ -| gen_match_expr.rs:5:5:8:5 | MatchExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | hasMatchArmList: | yes | -| gen_match_expr.rs:9:5:12:5 | MatchExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | hasMatchArmList: | yes | +| gen_match_expr.rs:5:5:8:5 | match ... { ... } | getNumberOfAttrs: | 0 | hasExpr: | yes | hasMatchArmList: | yes | +| gen_match_expr.rs:9:5:12:5 | match ... { ... } | getNumberOfAttrs: | 0 | hasExpr: | yes | hasMatchArmList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected index 924eb3f807fa..ac1ec296029c 100644 --- a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected @@ -1,2 +1,2 @@ -| gen_match_expr.rs:5:5:8:5 | MatchExpr | gen_match_expr.rs:5:11:5:11 | x | -| gen_match_expr.rs:9:5:12:5 | MatchExpr | gen_match_expr.rs:9:11:9:11 | x | +| gen_match_expr.rs:5:5:8:5 | match ... { ... } | gen_match_expr.rs:5:11:5:11 | x | +| gen_match_expr.rs:9:5:12:5 | match ... { ... } | gen_match_expr.rs:9:11:9:11 | x | diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected index db83ecb1c535..468fe9d14cf9 100644 --- a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected @@ -1,2 +1,2 @@ -| gen_match_expr.rs:5:5:8:5 | MatchExpr | gen_match_expr.rs:5:13:8:5 | MatchArmList | -| gen_match_expr.rs:9:5:12:5 | MatchExpr | gen_match_expr.rs:9:13:12:5 | MatchArmList | +| gen_match_expr.rs:5:5:8:5 | match ... { ... } | gen_match_expr.rs:5:13:8:5 | MatchArmList | +| gen_match_expr.rs:9:5:12:5 | match ... { ... } | gen_match_expr.rs:9:13:12:5 | MatchArmList | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.expected b/rust/ql/test/extractor-tests/generated/Module/Module.expected index d7c04f7c1180..11b6d9e1e9bd 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module.expected @@ -1,3 +1,3 @@ -| gen_module.rs:3:1:4:8 | Module | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | -| gen_module.rs:5:1:7:1 | Module | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | getNumberOfAttrs: | 0 | hasItemList: | yes | hasName: | yes | hasVisibility: | no | -| lib.rs:1:1:1:15 | Module | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | +| gen_module.rs:3:1:4:8 | mod foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | +| gen_module.rs:5:1:7:1 | mod bar | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | getNumberOfAttrs: | 0 | hasItemList: | yes | hasName: | yes | hasVisibility: | no | +| lib.rs:1:1:1:15 | mod gen_module | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getCrateOrigin.expected index e2e58c030ef7..0164fbb8e29b 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module_getCrateOrigin.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getCrateOrigin.expected @@ -1,3 +1,3 @@ -| gen_module.rs:3:1:4:8 | Module | repo::test | -| gen_module.rs:5:1:7:1 | Module | repo::test | -| lib.rs:1:1:1:15 | Module | repo::test | +| gen_module.rs:3:1:4:8 | mod foo | repo::test | +| gen_module.rs:5:1:7:1 | mod bar | repo::test | +| lib.rs:1:1:1:15 | mod gen_module | repo::test | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.expected index 19eadfdafd54..c573ef164ebe 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.expected @@ -1,3 +1,3 @@ -| gen_module.rs:3:1:4:8 | Module | crate::gen_module::foo | -| gen_module.rs:5:1:7:1 | Module | crate::gen_module::bar | -| lib.rs:1:1:1:15 | Module | crate::gen_module | +| gen_module.rs:3:1:4:8 | mod foo | crate::gen_module::foo | +| gen_module.rs:5:1:7:1 | mod bar | crate::gen_module::bar | +| lib.rs:1:1:1:15 | mod gen_module | crate::gen_module | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getItemList.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getItemList.expected index 04fd8d4a81a0..8edc36efa738 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module_getItemList.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getItemList.expected @@ -1 +1 @@ -| gen_module.rs:5:1:7:1 | Module | gen_module.rs:5:9:7:1 | ItemList | +| gen_module.rs:5:1:7:1 | mod bar | gen_module.rs:5:9:7:1 | ItemList | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected index cc295b1da89a..1874862befe5 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected @@ -1,3 +1,3 @@ -| gen_module.rs:3:1:4:8 | Module | gen_module.rs:4:5:4:7 | foo | -| gen_module.rs:5:1:7:1 | Module | gen_module.rs:5:5:5:7 | bar | -| lib.rs:1:1:1:15 | Module | lib.rs:1:5:1:14 | gen_module | +| gen_module.rs:3:1:4:8 | mod foo | gen_module.rs:4:5:4:7 | foo | +| gen_module.rs:5:1:7:1 | mod bar | gen_module.rs:5:5:5:7 | bar | +| lib.rs:1:1:1:15 | mod gen_module | lib.rs:1:5:1:14 | gen_module | diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected index c7d0f2ee6afc..e2e11abb6a0f 100644 --- a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected @@ -1 +1 @@ -| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | gen_offset_of_expr.rs:5:25:5:30 | PathType | +| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | gen_offset_of_expr.rs:5:25:5:30 | Struct | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected index 786a00180935..3574d6c18285 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected @@ -1 +1 @@ -| gen_or_pat.rs:6:9:6:38 | OrPat | getNumberOfPats: | 2 | +| gen_or_pat.rs:6:9:6:38 | ... \| ... | getNumberOfPats: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected index a701548b2345..ca76590a6265 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_or_pat.rs:6:9:6:38 | OrPat | 0 | gen_or_pat.rs:6:9:6:23 | TupleStructPat | -| gen_or_pat.rs:6:9:6:38 | OrPat | 1 | gen_or_pat.rs:6:27:6:38 | PathPat | +| gen_or_pat.rs:6:9:6:38 | ... \| ... | 0 | gen_or_pat.rs:6:9:6:23 | TupleStructPat | +| gen_or_pat.rs:6:9:6:38 | ... \| ... | 1 | gen_or_pat.rs:6:27:6:38 | Option::None | diff --git a/rust/ql/test/extractor-tests/generated/PathPat/PathPat.expected b/rust/ql/test/extractor-tests/generated/PathPat/PathPat.expected index 54845a7565c4..f7cee5c5586d 100644 --- a/rust/ql/test/extractor-tests/generated/PathPat/PathPat.expected +++ b/rust/ql/test/extractor-tests/generated/PathPat/PathPat.expected @@ -1 +1 @@ -| gen_path_pat.rs:6:9:6:16 | PathPat | hasPath: | yes | +| gen_path_pat.rs:6:9:6:16 | Foo::Bar | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/PathPat/PathPat_getPath.expected b/rust/ql/test/extractor-tests/generated/PathPat/PathPat_getPath.expected index d48ba6549dba..1f450c24938b 100644 --- a/rust/ql/test/extractor-tests/generated/PathPat/PathPat_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/PathPat/PathPat_getPath.expected @@ -1 +1 @@ -| gen_path_pat.rs:6:9:6:16 | PathPat | gen_path_pat.rs:6:9:6:16 | Foo::Bar | +| gen_path_pat.rs:6:9:6:16 | Foo::Bar | gen_path_pat.rs:6:9:6:16 | Foo::Bar | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected index 6f222c18f03b..de7e26d5197f 100644 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected @@ -1,6 +1,6 @@ -| gen_range_expr.rs:5:13:5:18 | RangeExpr | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | -| gen_range_expr.rs:6:13:6:17 | RangeExpr | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | -| gen_range_expr.rs:7:13:7:16 | RangeExpr | getNumberOfAttrs: | 0 | hasEnd: | no | hasOperatorName: | yes | hasStart: | yes | -| gen_range_expr.rs:8:13:8:16 | RangeExpr | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | -| gen_range_expr.rs:9:13:9:17 | RangeExpr | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | -| gen_range_expr.rs:10:13:10:14 | RangeExpr | getNumberOfAttrs: | 0 | hasEnd: | no | hasOperatorName: | yes | hasStart: | no | +| gen_range_expr.rs:5:13:5:18 | ... ..= ... | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | +| gen_range_expr.rs:6:13:6:17 | ... .. ... | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | +| gen_range_expr.rs:7:13:7:16 | ... .. ... | getNumberOfAttrs: | 0 | hasEnd: | no | hasOperatorName: | yes | hasStart: | yes | +| gen_range_expr.rs:8:13:8:16 | ... .. ... | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | +| gen_range_expr.rs:9:13:9:17 | ... ..= ... | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | +| gen_range_expr.rs:10:13:10:14 | ... .. ... | getNumberOfAttrs: | 0 | hasEnd: | no | hasOperatorName: | yes | hasStart: | no | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected index 101ae46138a4..85582cfd97f4 100644 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected @@ -1,4 +1,4 @@ -| gen_range_expr.rs:5:13:5:18 | RangeExpr | gen_range_expr.rs:5:17:5:18 | 10 | -| gen_range_expr.rs:6:13:6:17 | RangeExpr | gen_range_expr.rs:6:16:6:17 | 10 | -| gen_range_expr.rs:8:13:8:16 | RangeExpr | gen_range_expr.rs:8:15:8:16 | 10 | -| gen_range_expr.rs:9:13:9:17 | RangeExpr | gen_range_expr.rs:9:16:9:17 | 10 | +| gen_range_expr.rs:5:13:5:18 | ... ..= ... | gen_range_expr.rs:5:17:5:18 | 10 | +| gen_range_expr.rs:6:13:6:17 | ... .. ... | gen_range_expr.rs:6:16:6:17 | 10 | +| gen_range_expr.rs:8:13:8:16 | ... .. ... | gen_range_expr.rs:8:15:8:16 | 10 | +| gen_range_expr.rs:9:13:9:17 | ... ..= ... | gen_range_expr.rs:9:16:9:17 | 10 | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected index b0d778eb7bb2..ff6f77424c77 100644 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected @@ -1,6 +1,6 @@ -| gen_range_expr.rs:5:13:5:18 | RangeExpr | ..= | -| gen_range_expr.rs:6:13:6:17 | RangeExpr | .. | -| gen_range_expr.rs:7:13:7:16 | RangeExpr | .. | -| gen_range_expr.rs:8:13:8:16 | RangeExpr | .. | -| gen_range_expr.rs:9:13:9:17 | RangeExpr | ..= | -| gen_range_expr.rs:10:13:10:14 | RangeExpr | .. | +| gen_range_expr.rs:5:13:5:18 | ... ..= ... | ..= | +| gen_range_expr.rs:6:13:6:17 | ... .. ... | .. | +| gen_range_expr.rs:7:13:7:16 | ... .. ... | .. | +| gen_range_expr.rs:8:13:8:16 | ... .. ... | .. | +| gen_range_expr.rs:9:13:9:17 | ... ..= ... | ..= | +| gen_range_expr.rs:10:13:10:14 | ... .. ... | .. | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected index 79b34397efe4..0a012e5ecd55 100644 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected @@ -1,3 +1,3 @@ -| gen_range_expr.rs:5:13:5:18 | RangeExpr | gen_range_expr.rs:5:13:5:13 | 1 | -| gen_range_expr.rs:6:13:6:17 | RangeExpr | gen_range_expr.rs:6:13:6:13 | 1 | -| gen_range_expr.rs:7:13:7:16 | RangeExpr | gen_range_expr.rs:7:13:7:14 | 10 | +| gen_range_expr.rs:5:13:5:18 | ... ..= ... | gen_range_expr.rs:5:13:5:13 | 1 | +| gen_range_expr.rs:6:13:6:17 | ... .. ... | gen_range_expr.rs:6:13:6:13 | 1 | +| gen_range_expr.rs:7:13:7:16 | ... .. ... | gen_range_expr.rs:7:13:7:14 | 10 | diff --git a/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getEnd.expected b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getEnd.expected index 591b8d9093e1..38ded3fb940d 100644 --- a/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getEnd.expected +++ b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getEnd.expected @@ -1,2 +1,2 @@ -| gen_range_pat.rs:6:9:6:12 | RangePat | gen_range_pat.rs:6:11:6:12 | LiteralPat | -| gen_range_pat.rs:7:9:7:15 | RangePat | gen_range_pat.rs:7:14:7:15 | LiteralPat | +| gen_range_pat.rs:6:9:6:12 | RangePat | gen_range_pat.rs:6:11:6:12 | 15 | +| gen_range_pat.rs:7:9:7:15 | RangePat | gen_range_pat.rs:7:14:7:15 | 25 | diff --git a/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getStart.expected b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getStart.expected index ef6a8ea21216..ac6eadaf08c0 100644 --- a/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getStart.expected +++ b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getStart.expected @@ -1,2 +1,2 @@ -| gen_range_pat.rs:7:9:7:15 | RangePat | gen_range_pat.rs:7:9:7:10 | LiteralPat | -| gen_range_pat.rs:8:9:8:12 | RangePat | gen_range_pat.rs:8:9:8:10 | LiteralPat | +| gen_range_pat.rs:7:9:7:15 | RangePat | gen_range_pat.rs:7:9:7:10 | 16 | +| gen_range_pat.rs:8:9:8:12 | RangePat | gen_range_pat.rs:8:9:8:10 | 26 | diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected index d30c4ef70e5d..445b906bf88b 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected @@ -1,4 +1,4 @@ -| gen_record_expr.rs:5:17:5:34 | RecordExpr | hasPath: | yes | hasRecordExprFieldList: | yes | -| gen_record_expr.rs:6:18:6:38 | RecordExpr | hasPath: | yes | hasRecordExprFieldList: | yes | -| gen_record_expr.rs:7:5:7:22 | RecordExpr | hasPath: | yes | hasRecordExprFieldList: | yes | -| gen_record_expr.rs:8:5:8:14 | RecordExpr | hasPath: | yes | hasRecordExprFieldList: | yes | +| gen_record_expr.rs:5:17:5:34 | Foo {...} | hasPath: | yes | hasRecordExprFieldList: | yes | +| gen_record_expr.rs:6:18:6:38 | Foo {...} | hasPath: | yes | hasRecordExprFieldList: | yes | +| gen_record_expr.rs:7:5:7:22 | Foo {...} | hasPath: | yes | hasRecordExprFieldList: | yes | +| gen_record_expr.rs:8:5:8:14 | Foo {...} | hasPath: | yes | hasRecordExprFieldList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getPath.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getPath.expected index 91d4f5cb0b56..5aad8aad60c9 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getPath.expected @@ -1,4 +1,4 @@ -| gen_record_expr.rs:5:17:5:34 | RecordExpr | gen_record_expr.rs:5:17:5:19 | Foo | -| gen_record_expr.rs:6:18:6:38 | RecordExpr | gen_record_expr.rs:6:18:6:20 | Foo | -| gen_record_expr.rs:7:5:7:22 | RecordExpr | gen_record_expr.rs:7:5:7:7 | Foo | -| gen_record_expr.rs:8:5:8:14 | RecordExpr | gen_record_expr.rs:8:5:8:7 | Foo | +| gen_record_expr.rs:5:17:5:34 | Foo {...} | gen_record_expr.rs:5:17:5:19 | Foo | +| gen_record_expr.rs:6:18:6:38 | Foo {...} | gen_record_expr.rs:6:18:6:20 | Foo | +| gen_record_expr.rs:7:5:7:22 | Foo {...} | gen_record_expr.rs:7:5:7:7 | Foo | +| gen_record_expr.rs:8:5:8:14 | Foo {...} | gen_record_expr.rs:8:5:8:7 | Foo | diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getRecordExprFieldList.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getRecordExprFieldList.expected index d00bf3935d3e..79d18cac3b0d 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getRecordExprFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getRecordExprFieldList.expected @@ -1,4 +1,4 @@ -| gen_record_expr.rs:5:17:5:34 | RecordExpr | gen_record_expr.rs:5:21:5:34 | RecordExprFieldList | -| gen_record_expr.rs:6:18:6:38 | RecordExpr | gen_record_expr.rs:6:22:6:38 | RecordExprFieldList | -| gen_record_expr.rs:7:5:7:22 | RecordExpr | gen_record_expr.rs:7:9:7:22 | RecordExprFieldList | -| gen_record_expr.rs:8:5:8:14 | RecordExpr | gen_record_expr.rs:8:9:8:14 | RecordExprFieldList | +| gen_record_expr.rs:5:17:5:34 | Foo {...} | gen_record_expr.rs:5:21:5:34 | RecordExprFieldList | +| gen_record_expr.rs:6:18:6:38 | Foo {...} | gen_record_expr.rs:6:22:6:38 | RecordExprFieldList | +| gen_record_expr.rs:7:5:7:22 | Foo {...} | gen_record_expr.rs:7:9:7:22 | RecordExprFieldList | +| gen_record_expr.rs:8:5:8:14 | Foo {...} | gen_record_expr.rs:8:9:8:14 | RecordExprFieldList | diff --git a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected index 79ed38759180..7f3dd059b0a6 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected +++ b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected @@ -1,2 +1,2 @@ -| gen_record_expr_field.rs:5:11:5:14 | RecordExprField | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | -| gen_record_expr_field.rs:5:17:5:20 | RecordExprField | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | +| gen_record_expr_field.rs:5:11:5:14 | a: ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | +| gen_record_expr_field.rs:5:17:5:20 | b: ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected index ec096d00a314..2af437f842b8 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected @@ -1,2 +1,2 @@ -| gen_record_expr_field.rs:5:11:5:14 | RecordExprField | gen_record_expr_field.rs:5:14:5:14 | 1 | -| gen_record_expr_field.rs:5:17:5:20 | RecordExprField | gen_record_expr_field.rs:5:20:5:20 | 2 | +| gen_record_expr_field.rs:5:11:5:14 | a: ... | gen_record_expr_field.rs:5:14:5:14 | 1 | +| gen_record_expr_field.rs:5:17:5:20 | b: ... | gen_record_expr_field.rs:5:20:5:20 | 2 | diff --git a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected index 081e3ccac566..d0fcb3d0d442 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected +++ b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected @@ -1,2 +1,2 @@ -| gen_record_expr_field.rs:5:11:5:14 | RecordExprField | gen_record_expr_field.rs:5:11:5:11 | a | -| gen_record_expr_field.rs:5:17:5:20 | RecordExprField | gen_record_expr_field.rs:5:17:5:17 | b | +| gen_record_expr_field.rs:5:11:5:14 | a: ... | gen_record_expr_field.rs:5:11:5:11 | a | +| gen_record_expr_field.rs:5:17:5:20 | b: ... | gen_record_expr_field.rs:5:17:5:17 | b | diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected index 62cd3eb3c37d..8d7f96229ad7 100644 --- a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected +++ b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected @@ -1,2 +1,2 @@ -| gen_record_pat.rs:6:9:6:26 | RecordPat | hasPath: | yes | hasRecordPatFieldList: | yes | -| gen_record_pat.rs:7:9:7:18 | RecordPat | hasPath: | yes | hasRecordPatFieldList: | yes | +| gen_record_pat.rs:6:9:6:26 | Foo {...} | hasPath: | yes | hasRecordPatFieldList: | yes | +| gen_record_pat.rs:7:9:7:18 | Foo {...} | hasPath: | yes | hasRecordPatFieldList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getPath.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getPath.expected index a9e0be01d5b5..7cd2f51d9eb6 100644 --- a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getPath.expected @@ -1,2 +1,2 @@ -| gen_record_pat.rs:6:9:6:26 | RecordPat | gen_record_pat.rs:6:9:6:11 | Foo | -| gen_record_pat.rs:7:9:7:18 | RecordPat | gen_record_pat.rs:7:9:7:11 | Foo | +| gen_record_pat.rs:6:9:6:26 | Foo {...} | gen_record_pat.rs:6:9:6:11 | Foo | +| gen_record_pat.rs:7:9:7:18 | Foo {...} | gen_record_pat.rs:7:9:7:11 | Foo | diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getRecordPatFieldList.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getRecordPatFieldList.expected index 86ba10ed9a3c..bad0003c07bd 100644 --- a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getRecordPatFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getRecordPatFieldList.expected @@ -1,2 +1,2 @@ -| gen_record_pat.rs:6:9:6:26 | RecordPat | gen_record_pat.rs:6:13:6:26 | RecordPatFieldList | -| gen_record_pat.rs:7:9:7:18 | RecordPat | gen_record_pat.rs:7:13:7:18 | RecordPatFieldList | +| gen_record_pat.rs:6:9:6:26 | Foo {...} | gen_record_pat.rs:6:13:6:26 | RecordPatFieldList | +| gen_record_pat.rs:7:9:7:18 | Foo {...} | gen_record_pat.rs:7:13:7:18 | RecordPatFieldList | diff --git a/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getPat.expected b/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getPat.expected index a3ac24ec52be..1fa8a0f8bb7f 100644 --- a/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getPat.expected @@ -1,2 +1,2 @@ -| gen_record_pat_field.rs:5:15:5:18 | RecordPatField | gen_record_pat_field.rs:5:18:5:18 | LiteralPat | -| gen_record_pat_field.rs:5:21:5:24 | RecordPatField | gen_record_pat_field.rs:5:24:5:24 | LiteralPat | +| gen_record_pat_field.rs:5:15:5:18 | RecordPatField | gen_record_pat_field.rs:5:18:5:18 | 1 | +| gen_record_pat_field.rs:5:21:5:24 | RecordPatField | gen_record_pat_field.rs:5:24:5:24 | 2 | diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected index d4c75d9a79a0..df32a2465db6 100644 --- a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected @@ -1,4 +1,4 @@ -| gen_ref_expr.rs:5:25:5:28 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | no | isRaw: | no | -| gen_ref_expr.rs:6:23:6:30 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | no | -| gen_ref_expr.rs:7:35:7:48 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | yes | isMut: | no | isRaw: | yes | -| gen_ref_expr.rs:8:33:8:44 | RefExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | yes | +| gen_ref_expr.rs:5:25:5:28 | &... | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | no | isRaw: | no | +| gen_ref_expr.rs:6:23:6:30 | &mut ... | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | no | +| gen_ref_expr.rs:7:35:7:48 | &raw const ... | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | yes | isMut: | no | isRaw: | yes | +| gen_ref_expr.rs:8:33:8:44 | &raw mut ... | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected index 571986ecf102..b350b30b6a1e 100644 --- a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected @@ -1,4 +1,4 @@ -| gen_ref_expr.rs:5:25:5:28 | RefExpr | gen_ref_expr.rs:5:26:5:28 | foo | -| gen_ref_expr.rs:6:23:6:30 | RefExpr | gen_ref_expr.rs:6:28:6:30 | foo | -| gen_ref_expr.rs:7:35:7:48 | RefExpr | gen_ref_expr.rs:7:46:7:48 | foo | -| gen_ref_expr.rs:8:33:8:44 | RefExpr | gen_ref_expr.rs:8:42:8:44 | foo | +| gen_ref_expr.rs:5:25:5:28 | &... | gen_ref_expr.rs:5:26:5:28 | foo | +| gen_ref_expr.rs:6:23:6:30 | &mut ... | gen_ref_expr.rs:6:28:6:30 | foo | +| gen_ref_expr.rs:7:35:7:48 | &raw const ... | gen_ref_expr.rs:7:46:7:48 | foo | +| gen_ref_expr.rs:8:33:8:44 | &raw mut ... | gen_ref_expr.rs:8:42:8:44 | foo | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected index c2fc3416297a..b851902ff567 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected @@ -1,2 +1,2 @@ -| gen_ref_pat.rs:6:9:6:28 | RefPat | isMut: | yes | hasPat: | yes | -| gen_ref_pat.rs:7:9:7:21 | RefPat | isMut: | no | hasPat: | yes | +| gen_ref_pat.rs:6:9:6:28 | &mut ... | isMut: | yes | hasPat: | yes | +| gen_ref_pat.rs:7:9:7:21 | &... | isMut: | no | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected index 891c3c8216e6..6078837ceeaf 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_ref_pat.rs:6:9:6:28 | RefPat | gen_ref_pat.rs:6:14:6:28 | TupleStructPat | -| gen_ref_pat.rs:7:9:7:21 | RefPat | gen_ref_pat.rs:7:10:7:21 | PathPat | +| gen_ref_pat.rs:6:9:6:28 | &mut ... | gen_ref_pat.rs:6:14:6:28 | TupleStructPat | +| gen_ref_pat.rs:7:9:7:21 | &... | gen_ref_pat.rs:7:10:7:21 | Option::None | diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected index dbf54e0f49bd..c1d4bfbb6267 100644 --- a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected @@ -1,2 +1,2 @@ -| gen_return_expr.rs:5:5:5:13 | ReturnExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | -| gen_return_expr.rs:8:5:8:10 | ReturnExpr | getNumberOfAttrs: | 0 | hasExpr: | no | +| gen_return_expr.rs:5:5:5:13 | return ... | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_return_expr.rs:8:5:8:10 | return | getNumberOfAttrs: | 0 | hasExpr: | no | diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected index 2e1a4a8f8cec..eb4b7a5f1aa1 100644 --- a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected @@ -1 +1 @@ -| gen_return_expr.rs:5:5:5:13 | ReturnExpr | gen_return_expr.rs:5:12:5:13 | 42 | +| gen_return_expr.rs:5:5:5:13 | return ... | gen_return_expr.rs:5:12:5:13 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat_getPat.expected b/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat_getPat.expected index e874d3a22ee4..0725988f37fd 100644 --- a/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat_getPat.expected @@ -1,13 +1,13 @@ -| gen_slice_pat.rs:6:9:6:23 | SlicePat | 0 | gen_slice_pat.rs:6:10:6:10 | LiteralPat | -| gen_slice_pat.rs:6:9:6:23 | SlicePat | 1 | gen_slice_pat.rs:6:13:6:13 | LiteralPat | -| gen_slice_pat.rs:6:9:6:23 | SlicePat | 2 | gen_slice_pat.rs:6:16:6:16 | LiteralPat | -| gen_slice_pat.rs:6:9:6:23 | SlicePat | 3 | gen_slice_pat.rs:6:19:6:19 | LiteralPat | -| gen_slice_pat.rs:6:9:6:23 | SlicePat | 4 | gen_slice_pat.rs:6:22:6:22 | LiteralPat | -| gen_slice_pat.rs:7:9:7:18 | SlicePat | 0 | gen_slice_pat.rs:7:10:7:10 | LiteralPat | -| gen_slice_pat.rs:7:9:7:18 | SlicePat | 1 | gen_slice_pat.rs:7:13:7:13 | LiteralPat | -| gen_slice_pat.rs:7:9:7:18 | SlicePat | 2 | gen_slice_pat.rs:7:16:7:17 | RestPat | +| gen_slice_pat.rs:6:9:6:23 | SlicePat | 0 | gen_slice_pat.rs:6:10:6:10 | 1 | +| gen_slice_pat.rs:6:9:6:23 | SlicePat | 1 | gen_slice_pat.rs:6:13:6:13 | 2 | +| gen_slice_pat.rs:6:9:6:23 | SlicePat | 2 | gen_slice_pat.rs:6:16:6:16 | 3 | +| gen_slice_pat.rs:6:9:6:23 | SlicePat | 3 | gen_slice_pat.rs:6:19:6:19 | 4 | +| gen_slice_pat.rs:6:9:6:23 | SlicePat | 4 | gen_slice_pat.rs:6:22:6:22 | 5 | +| gen_slice_pat.rs:7:9:7:18 | SlicePat | 0 | gen_slice_pat.rs:7:10:7:10 | 1 | +| gen_slice_pat.rs:7:9:7:18 | SlicePat | 1 | gen_slice_pat.rs:7:13:7:13 | 2 | +| gen_slice_pat.rs:7:9:7:18 | SlicePat | 2 | gen_slice_pat.rs:7:16:7:17 | .. | | gen_slice_pat.rs:8:9:8:24 | SlicePat | 0 | gen_slice_pat.rs:8:10:8:10 | x | | gen_slice_pat.rs:8:9:8:24 | SlicePat | 1 | gen_slice_pat.rs:8:13:8:13 | y | -| gen_slice_pat.rs:8:9:8:24 | SlicePat | 2 | gen_slice_pat.rs:8:16:8:17 | RestPat | +| gen_slice_pat.rs:8:9:8:24 | SlicePat | 2 | gen_slice_pat.rs:8:16:8:17 | .. | | gen_slice_pat.rs:8:9:8:24 | SlicePat | 3 | gen_slice_pat.rs:8:20:8:20 | z | -| gen_slice_pat.rs:8:9:8:24 | SlicePat | 4 | gen_slice_pat.rs:8:23:8:23 | LiteralPat | +| gen_slice_pat.rs:8:9:8:24 | SlicePat | 4 | gen_slice_pat.rs:8:23:8:23 | 7 | diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected index a256c2b84b20..981f445201e0 100644 --- a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected +++ b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected @@ -1,2 +1,2 @@ -| gen_source_file.rs:1:1:6:2 | SourceFile | 0 | gen_source_file.rs:3:1:6:1 | test_source_file | -| lib.rs:1:1:1:20 | SourceFile | 0 | lib.rs:1:1:1:20 | Module | +| gen_source_file.rs:1:1:6:2 | SourceFile | 0 | gen_source_file.rs:3:1:6:1 | fn test_source_file | +| lib.rs:1:1:1:20 | SourceFile | 0 | lib.rs:1:1:1:20 | mod gen_source_file | diff --git a/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.expected b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.expected index 0f70039583a8..c7337ca090ae 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.expected @@ -1,3 +1,3 @@ | gen_trait.rs:4:20:8:1 | AssocItemList | 0 | gen_trait.rs:5:3:5:18 | TypeAlias | | gen_trait.rs:4:20:8:1 | AssocItemList | 1 | gen_trait.rs:6:3:6:20 | TypeAlias | -| gen_trait.rs:4:20:8:1 | AssocItemList | 2 | gen_trait.rs:7:3:7:72 | frobinize_with | +| gen_trait.rs:4:20:8:1 | AssocItemList | 2 | gen_trait.rs:7:3:7:72 | fn frobinize_with | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected index ba06219a2d4c..451422d330ab 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected @@ -1,2 +1,2 @@ -| gen_trait.rs:3:1:8:1 | Trait | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | -| gen_trait.rs:10:1:10:57 | Trait | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | yes | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | yes | hasWhereClause: | yes | +| gen_trait.rs:3:1:8:1 | trait Frobinizable | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_trait.rs:10:1:10:57 | trait Foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | yes | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | yes | hasWhereClause: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getAssocItemList.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAssocItemList.expected index fc16a774800e..b60c89c8d3fe 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait_getAssocItemList.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAssocItemList.expected @@ -1,2 +1,2 @@ -| gen_trait.rs:3:1:8:1 | Trait | gen_trait.rs:4:20:8:1 | AssocItemList | -| gen_trait.rs:10:1:10:57 | Trait | gen_trait.rs:10:56:10:57 | AssocItemList | +| gen_trait.rs:3:1:8:1 | trait Frobinizable | gen_trait.rs:4:20:8:1 | AssocItemList | +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:56:10:57 | AssocItemList | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.expected index 36106a58ae0c..1e42bb437317 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.expected @@ -1,2 +1,2 @@ -| gen_trait.rs:3:1:8:1 | Trait | repo::test | -| gen_trait.rs:10:1:10:57 | Trait | repo::test | +| gen_trait.rs:3:1:8:1 | trait Frobinizable | repo::test | +| gen_trait.rs:10:1:10:57 | trait Foo | repo::test | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.expected index d89c9f23757d..6a5e82036739 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.expected @@ -1,2 +1,2 @@ -| gen_trait.rs:3:1:8:1 | Trait | crate::gen_trait::Frobinizable | -| gen_trait.rs:10:1:10:57 | Trait | crate::gen_trait::Foo | +| gen_trait.rs:3:1:8:1 | trait Frobinizable | crate::gen_trait::Frobinizable | +| gen_trait.rs:10:1:10:57 | trait Foo | crate::gen_trait::Foo | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getGenericParamList.expected index 85a848355f12..1ea7592a5973 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait_getGenericParamList.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getGenericParamList.expected @@ -1 +1 @@ -| gen_trait.rs:10:1:10:57 | Trait | gen_trait.rs:10:14:10:30 | GenericParamList | +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:14:10:30 | GenericParamList | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getName.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getName.expected index cc60a2ab9386..1c087cdea895 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait_getName.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getName.expected @@ -1,2 +1,2 @@ -| gen_trait.rs:3:1:8:1 | Trait | gen_trait.rs:4:7:4:18 | Frobinizable | -| gen_trait.rs:10:1:10:57 | Trait | gen_trait.rs:10:11:10:13 | Foo | +| gen_trait.rs:3:1:8:1 | trait Frobinizable | gen_trait.rs:4:7:4:18 | Frobinizable | +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:11:10:13 | Foo | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getVisibility.expected index 67d505acda7e..56576624e47f 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait_getVisibility.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getVisibility.expected @@ -1 +1 @@ -| gen_trait.rs:10:1:10:57 | Trait | gen_trait.rs:10:1:10:3 | Visibility | +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:1:10:3 | Visibility | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getWhereClause.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getWhereClause.expected index a1ae3161e79d..d46ac2d04cd9 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait_getWhereClause.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getWhereClause.expected @@ -1 +1 @@ -| gen_trait.rs:10:1:10:57 | Trait | gen_trait.rs:10:32:10:54 | WhereClause | +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:32:10:54 | WhereClause | diff --git a/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat_getField.expected b/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat_getField.expected index 59d028b43ca9..78e00f39c92b 100644 --- a/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat_getField.expected +++ b/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat_getField.expected @@ -2,5 +2,5 @@ | gen_tuple_pat.rs:5:9:5:14 | TuplePat | 1 | gen_tuple_pat.rs:5:13:5:13 | y | | gen_tuple_pat.rs:6:9:6:22 | TuplePat | 0 | gen_tuple_pat.rs:6:10:6:10 | a | | gen_tuple_pat.rs:6:9:6:22 | TuplePat | 1 | gen_tuple_pat.rs:6:13:6:13 | b | -| gen_tuple_pat.rs:6:9:6:22 | TuplePat | 2 | gen_tuple_pat.rs:6:16:6:17 | RestPat | +| gen_tuple_pat.rs:6:9:6:22 | TuplePat | 2 | gen_tuple_pat.rs:6:16:6:17 | .. | | gen_tuple_pat.rs:6:9:6:22 | TuplePat | 3 | gen_tuple_pat.rs:6:21:6:21 | z | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected index 7a009a0818b7..5885cbcea3e3 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected @@ -1,7 +1,7 @@ -| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:6:15:6:17 | LiteralPat | -| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 1 | gen_tuple_struct_pat.rs:6:20:6:20 | LiteralPat | -| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 2 | gen_tuple_struct_pat.rs:6:23:6:23 | LiteralPat | -| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 3 | gen_tuple_struct_pat.rs:6:26:6:26 | LiteralPat | -| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:7:15:7:16 | RestPat | -| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | 1 | gen_tuple_struct_pat.rs:7:19:7:19 | LiteralPat | -| gen_tuple_struct_pat.rs:8:9:8:17 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:8:15:8:16 | RestPat | +| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:6:15:6:17 | "a" | +| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 1 | gen_tuple_struct_pat.rs:6:20:6:20 | 1 | +| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 2 | gen_tuple_struct_pat.rs:6:23:6:23 | 2 | +| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 3 | gen_tuple_struct_pat.rs:6:26:6:26 | 3 | +| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:7:15:7:16 | .. | +| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | 1 | gen_tuple_struct_pat.rs:7:19:7:19 | 3 | +| gen_tuple_struct_pat.rs:8:9:8:17 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:8:15:8:16 | .. | diff --git a/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.expected b/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.expected index 3b2effb788e1..ea89e8b29b4e 100644 --- a/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.expected +++ b/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.expected @@ -1 +1 @@ -| gen_underscore_expr.rs:5:5:5:5 | UnderscoreExpr | getNumberOfAttrs: | 0 | +| gen_underscore_expr.rs:5:5:5:5 | _ | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/WildcardPat/WildcardPat.expected b/rust/ql/test/extractor-tests/generated/WildcardPat/WildcardPat.expected index ceb155671b7f..b8ac989ee1c0 100644 --- a/rust/ql/test/extractor-tests/generated/WildcardPat/WildcardPat.expected +++ b/rust/ql/test/extractor-tests/generated/WildcardPat/WildcardPat.expected @@ -1 +1 @@ -| gen_wildcard_pat.rs:5:9:5:9 | WildcardPat | +| gen_wildcard_pat.rs:5:9:5:9 | _ | diff --git a/rust/ql/test/extractor-tests/utf8/ast.expected b/rust/ql/test/extractor-tests/utf8/ast.expected index dfc20f5ab58b..17457550f79e 100644 --- a/rust/ql/test/extractor-tests/utf8/ast.expected +++ b/rust/ql/test/extractor-tests/utf8/ast.expected @@ -1,33 +1,33 @@ -| lib.rs:1:1:1:21 | Module | | lib.rs:1:1:1:21 | SourceFile | +| lib.rs:1:1:1:21 | mod utf8_identifiers | | lib.rs:1:5:1:20 | utf8_identifiers | -| utf8_identifiers.rs:1:1:4:6 | foo | +| utf8_identifiers.rs:1:1:4:6 | fn foo | | utf8_identifiers.rs:1:1:12:2 | SourceFile | | utf8_identifiers.rs:1:4:1:6 | foo | | utf8_identifiers.rs:1:7:4:1 | GenericParamList | -| utf8_identifiers.rs:2:5:2:6 | Lifetime | +| utf8_identifiers.rs:2:5:2:6 | ''\u03b2 | | utf8_identifiers.rs:2:5:2:6 | LifetimeParam | | utf8_identifiers.rs:3:5:3:5 | TypeParam | | utf8_identifiers.rs:3:5:3:5 | \u03b3 | | utf8_identifiers.rs:4:2:4:3 | ParamList | -| utf8_identifiers.rs:4:5:4:6 | BlockExpr | | utf8_identifiers.rs:4:5:4:6 | StmtList | +| utf8_identifiers.rs:4:5:4:6 | { ... } | | utf8_identifiers.rs:6:1:8:1 | Struct | | utf8_identifiers.rs:6:8:6:8 | X | | utf8_identifiers.rs:6:10:8:1 | RecordFieldList | | utf8_identifiers.rs:7:5:7:5 | \u03b4 | | utf8_identifiers.rs:7:5:7:13 | RecordField | -| utf8_identifiers.rs:7:9:7:13 | PathType | +| utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:10:1:10:3 | Visibility | -| utf8_identifiers.rs:10:1:12:1 | main | +| utf8_identifiers.rs:10:1:12:1 | fn main | | utf8_identifiers.rs:10:8:10:11 | main | | utf8_identifiers.rs:10:12:10:13 | ParamList | -| utf8_identifiers.rs:10:15:12:1 | BlockExpr | | utf8_identifiers.rs:10:15:12:1 | StmtList | -| utf8_identifiers.rs:11:5:11:24 | LetStmt | +| utf8_identifiers.rs:10:15:12:1 | { ... } | +| utf8_identifiers.rs:11:5:11:24 | let \u03b1 = ... | | utf8_identifiers.rs:11:9:11:9 | \u03b1 | | utf8_identifiers.rs:11:9:11:9 | \u03b1 | | utf8_identifiers.rs:11:14:11:23 | 0.00001f64 | diff --git a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected index 05851289a35f..28a436b1cce7 100644 --- a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected @@ -1,53 +1,53 @@ edges -| test.rs:5:5:11:5 | enter test_and_if_let | test.rs:5:24:5:24 | a | | -| test.rs:5:5:11:5 | exit test_and_if_let (normal) | test.rs:5:5:11:5 | exit test_and_if_let | | -| test.rs:5:24:5:24 | a | test.rs:5:24:5:30 | Param | match | -| test.rs:5:24:5:30 | Param | test.rs:5:33:5:33 | b | | -| test.rs:5:33:5:33 | b | test.rs:5:33:5:47 | Param | match | -| test.rs:5:33:5:47 | Param | test.rs:5:50:5:50 | c | | -| test.rs:5:50:5:50 | c | test.rs:5:50:5:56 | Param | match | -| test.rs:5:50:5:56 | Param | test.rs:6:12:6:12 | a | | -| test.rs:5:67:11:5 | BlockExpr | test.rs:5:5:11:5 | exit test_and_if_let (normal) | | -| test.rs:6:9:10:9 | IfExpr | test.rs:5:67:11:5 | BlockExpr | | +| test.rs:5:5:11:5 | enter fn test_and_if_let | test.rs:5:24:5:24 | a | | +| test.rs:5:5:11:5 | exit fn test_and_if_let (normal) | test.rs:5:5:11:5 | exit fn test_and_if_let | | +| test.rs:5:24:5:24 | a | test.rs:5:24:5:30 | a: bool | match | +| test.rs:5:24:5:30 | a: bool | test.rs:5:33:5:33 | b | | +| test.rs:5:33:5:33 | b | test.rs:5:33:5:47 | b: Option::<...> | match | +| test.rs:5:33:5:47 | b: Option::<...> | test.rs:5:50:5:50 | c | | +| test.rs:5:50:5:50 | c | test.rs:5:50:5:56 | c: bool | match | +| test.rs:5:50:5:56 | c: bool | test.rs:6:12:6:12 | a | | +| test.rs:5:67:11:5 | { ... } | test.rs:5:5:11:5 | exit fn test_and_if_let (normal) | | +| test.rs:6:9:10:9 | if ... { ... } else { ... } | test.rs:5:67:11:5 | { ... } | | | test.rs:6:12:6:12 | a | test.rs:6:12:6:31 | [boolean(false)] ... && ... | false | -| test.rs:6:12:6:12 | a | test.rs:6:17:6:31 | LetExpr | true | +| test.rs:6:12:6:12 | a | test.rs:6:17:6:31 | let TupleStructPat = ... | true | | test.rs:6:12:6:31 | [boolean(false)] ... && ... | test.rs:9:13:9:17 | false | false | | test.rs:6:12:6:31 | [boolean(true)] ... && ... | test.rs:7:13:7:13 | d | true | -| test.rs:6:17:6:31 | LetExpr | test.rs:6:31:6:31 | b | | +| test.rs:6:17:6:31 | let TupleStructPat = ... | test.rs:6:31:6:31 | b | | | test.rs:6:21:6:27 | TupleStructPat | test.rs:6:12:6:31 | [boolean(false)] ... && ... | no-match | | test.rs:6:21:6:27 | TupleStructPat | test.rs:6:26:6:26 | d | match | | test.rs:6:26:6:26 | d | test.rs:6:12:6:31 | [boolean(true)] ... && ... | match | | test.rs:6:31:6:31 | b | test.rs:6:21:6:27 | TupleStructPat | | -| test.rs:6:33:8:9 | BlockExpr | test.rs:6:9:10:9 | IfExpr | | -| test.rs:7:13:7:13 | d | test.rs:6:33:8:9 | BlockExpr | | -| test.rs:8:16:10:9 | BlockExpr | test.rs:6:9:10:9 | IfExpr | | -| test.rs:9:13:9:17 | false | test.rs:8:16:10:9 | BlockExpr | | -| test.rs:13:5:21:5 | enter test_and_if_let2 | test.rs:13:25:13:25 | a | | -| test.rs:13:5:21:5 | exit test_and_if_let2 (normal) | test.rs:13:5:21:5 | exit test_and_if_let2 | | -| test.rs:13:25:13:25 | a | test.rs:13:25:13:31 | Param | match | -| test.rs:13:25:13:31 | Param | test.rs:13:34:13:34 | b | | -| test.rs:13:34:13:34 | b | test.rs:13:34:13:39 | Param | match | -| test.rs:13:34:13:39 | Param | test.rs:13:42:13:42 | c | | -| test.rs:13:42:13:42 | c | test.rs:13:42:13:48 | Param | match | -| test.rs:13:42:13:48 | Param | test.rs:14:12:14:12 | a | | -| test.rs:13:59:21:5 | BlockExpr | test.rs:13:5:21:5 | exit test_and_if_let2 (normal) | | -| test.rs:14:9:20:9 | IfExpr | test.rs:13:59:21:5 | BlockExpr | | +| test.rs:6:33:8:9 | { ... } | test.rs:6:9:10:9 | if ... { ... } else { ... } | | +| test.rs:7:13:7:13 | d | test.rs:6:33:8:9 | { ... } | | +| test.rs:8:16:10:9 | { ... } | test.rs:6:9:10:9 | if ... { ... } else { ... } | | +| test.rs:9:13:9:17 | false | test.rs:8:16:10:9 | { ... } | | +| test.rs:13:5:21:5 | enter fn test_and_if_let2 | test.rs:13:25:13:25 | a | | +| test.rs:13:5:21:5 | exit fn test_and_if_let2 (normal) | test.rs:13:5:21:5 | exit fn test_and_if_let2 | | +| test.rs:13:25:13:25 | a | test.rs:13:25:13:31 | a: bool | match | +| test.rs:13:25:13:31 | a: bool | test.rs:13:34:13:34 | b | | +| test.rs:13:34:13:34 | b | test.rs:13:34:13:39 | b: i64 | match | +| test.rs:13:34:13:39 | b: i64 | test.rs:13:42:13:42 | c | | +| test.rs:13:42:13:42 | c | test.rs:13:42:13:48 | c: bool | match | +| test.rs:13:42:13:48 | c: bool | test.rs:14:12:14:12 | a | | +| test.rs:13:59:21:5 | { ... } | test.rs:13:5:21:5 | exit fn test_and_if_let2 (normal) | | +| test.rs:14:9:20:9 | if ... { ... } else { ... } | test.rs:13:59:21:5 | { ... } | | | test.rs:14:12:14:12 | a | test.rs:14:12:14:25 | [boolean(false)] ... && ... | false | -| test.rs:14:12:14:12 | a | test.rs:14:17:14:25 | LetExpr | true | +| test.rs:14:12:14:12 | a | test.rs:14:17:14:25 | let d = ... | true | | test.rs:14:12:14:25 | [boolean(false)] ... && ... | test.rs:14:12:15:16 | [boolean(false)] ... && ... | false | | test.rs:14:12:14:25 | [boolean(true)] ... && ... | test.rs:15:16:15:16 | c | true | | test.rs:14:12:15:16 | [boolean(false)] ... && ... | test.rs:19:13:19:17 | false | false | | test.rs:14:12:15:16 | [boolean(true)] ... && ... | test.rs:17:13:17:13 | d | true | -| test.rs:14:17:14:25 | LetExpr | test.rs:14:25:14:25 | b | | +| test.rs:14:17:14:25 | let d = ... | test.rs:14:25:14:25 | b | | | test.rs:14:21:14:21 | d | test.rs:14:12:14:25 | [boolean(true)] ... && ... | match | | test.rs:14:25:14:25 | b | test.rs:14:21:14:21 | d | | | test.rs:15:16:15:16 | c | test.rs:14:12:15:16 | [boolean(false)] ... && ... | false | | test.rs:15:16:15:16 | c | test.rs:14:12:15:16 | [boolean(true)] ... && ... | true | -| test.rs:16:9:18:9 | BlockExpr | test.rs:14:9:20:9 | IfExpr | | +| test.rs:16:9:18:9 | { ... } | test.rs:14:9:20:9 | if ... { ... } else { ... } | | | test.rs:17:13:17:13 | d | test.rs:17:17:17:17 | 0 | | -| test.rs:17:13:17:17 | ... > ... | test.rs:16:9:18:9 | BlockExpr | | +| test.rs:17:13:17:17 | ... > ... | test.rs:16:9:18:9 | { ... } | | | test.rs:17:17:17:17 | 0 | test.rs:17:13:17:17 | ... > ... | | -| test.rs:18:16:20:9 | BlockExpr | test.rs:14:9:20:9 | IfExpr | | -| test.rs:19:13:19:17 | false | test.rs:18:16:20:9 | BlockExpr | | +| test.rs:18:16:20:9 | { ... } | test.rs:14:9:20:9 | if ... { ... } else { ... } | | +| test.rs:19:13:19:17 | false | test.rs:18:16:20:9 | { ... } | | breakTarget continueTarget diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index 6a15bb25249a..0739d922d8d4 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -1,24 +1,24 @@ -| main.rs:13:5:13:13 | CallExpr | main.rs:1:1:3:1 | source | -| main.rs:17:13:17:23 | CallExpr | main.rs:12:1:14:1 | get_data | -| main.rs:18:5:18:11 | CallExpr | main.rs:5:1:7:1 | sink | -| main.rs:22:5:22:15 | CallExpr | main.rs:5:1:7:1 | sink | -| main.rs:26:13:26:21 | CallExpr | main.rs:1:1:3:1 | source | -| main.rs:27:5:27:14 | CallExpr | main.rs:21:1:23:1 | data_in | -| main.rs:35:13:35:21 | CallExpr | main.rs:1:1:3:1 | source | -| main.rs:36:13:36:27 | CallExpr | main.rs:30:1:32:1 | pass_through | -| main.rs:37:5:37:11 | CallExpr | main.rs:5:1:7:1 | sink | -| main.rs:49:9:49:15 | CallExpr | main.rs:5:1:7:1 | sink | -| main.rs:55:13:55:21 | CallExpr | main.rs:1:1:3:1 | source | -| main.rs:69:13:69:25 | ... .get_data(...) | main.rs:51:5:57:5 | get_data | -| main.rs:70:5:70:11 | CallExpr | main.rs:5:1:7:1 | sink | -| main.rs:75:13:75:21 | CallExpr | main.rs:1:1:3:1 | source | -| main.rs:76:5:76:17 | ... .data_in(...) | main.rs:48:5:50:5 | data_in | -| main.rs:81:13:81:21 | CallExpr | main.rs:1:1:3:1 | source | -| main.rs:82:5:82:22 | ... .data_through(...) | main.rs:58:5:64:5 | data_through | -| main.rs:83:5:83:11 | CallExpr | main.rs:5:1:7:1 | sink | -| main.rs:87:5:87:22 | CallExpr | main.rs:16:1:19:1 | data_out_of_call | -| main.rs:88:5:88:21 | CallExpr | main.rs:25:1:28:1 | data_in_to_call | -| main.rs:89:5:89:23 | CallExpr | main.rs:34:1:38:1 | data_through_call | -| main.rs:91:5:91:24 | CallExpr | main.rs:67:1:71:1 | data_out_of_method | -| main.rs:92:5:92:28 | CallExpr | main.rs:73:1:77:1 | data_in_to_method_call | -| main.rs:93:5:93:25 | CallExpr | main.rs:79:1:84:1 | data_through_method | +| main.rs:13:5:13:13 | ... (...) | main.rs:1:1:3:1 | fn source | +| main.rs:17:13:17:23 | ... (...) | main.rs:12:1:14:1 | fn get_data | +| main.rs:18:5:18:11 | ... (...) | main.rs:5:1:7:1 | fn sink | +| main.rs:22:5:22:15 | ... (...) | main.rs:5:1:7:1 | fn sink | +| main.rs:26:13:26:21 | ... (...) | main.rs:1:1:3:1 | fn source | +| main.rs:27:5:27:14 | ... (...) | main.rs:21:1:23:1 | fn data_in | +| main.rs:35:13:35:21 | ... (...) | main.rs:1:1:3:1 | fn source | +| main.rs:36:13:36:27 | ... (...) | main.rs:30:1:32:1 | fn pass_through | +| main.rs:37:5:37:11 | ... (...) | main.rs:5:1:7:1 | fn sink | +| main.rs:49:9:49:15 | ... (...) | main.rs:5:1:7:1 | fn sink | +| main.rs:55:13:55:21 | ... (...) | main.rs:1:1:3:1 | fn source | +| main.rs:69:13:69:25 | ... .get_data(...) | main.rs:51:5:57:5 | fn get_data | +| main.rs:70:5:70:11 | ... (...) | main.rs:5:1:7:1 | fn sink | +| main.rs:75:13:75:21 | ... (...) | main.rs:1:1:3:1 | fn source | +| main.rs:76:5:76:17 | ... .data_in(...) | main.rs:48:5:50:5 | fn data_in | +| main.rs:81:13:81:21 | ... (...) | main.rs:1:1:3:1 | fn source | +| main.rs:82:5:82:22 | ... .data_through(...) | main.rs:58:5:64:5 | fn data_through | +| main.rs:83:5:83:11 | ... (...) | main.rs:5:1:7:1 | fn sink | +| main.rs:87:5:87:22 | ... (...) | main.rs:16:1:19:1 | fn data_out_of_call | +| main.rs:88:5:88:21 | ... (...) | main.rs:25:1:28:1 | fn data_in_to_call | +| main.rs:89:5:89:23 | ... (...) | main.rs:34:1:38:1 | fn data_through_call | +| main.rs:91:5:91:24 | ... (...) | main.rs:67:1:71:1 | fn data_out_of_method | +| main.rs:92:5:92:28 | ... (...) | main.rs:73:1:77:1 | fn data_in_to_method_call | +| main.rs:93:5:93:25 | ... (...) | main.rs:79:1:84:1 | fn data_through_method | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 8cc12598f62b..ecce48be804c 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -1,46 +1,46 @@ | main.rs:3:11:3:11 | [SSA] i | main.rs:4:12:4:12 | i | | main.rs:3:11:3:11 | i | main.rs:3:11:3:11 | [SSA] i | -| main.rs:4:5:4:12 | ... + ... | main.rs:3:26:5:1 | BlockExpr | +| main.rs:4:5:4:12 | ... + ... | main.rs:3:26:5:1 | { ... } | | main.rs:7:9:7:9 | [SSA] s | main.rs:8:20:8:20 | s | | main.rs:7:9:7:9 | s | main.rs:7:9:7:9 | [SSA] s | | main.rs:19:9:19:9 | [SSA] s | main.rs:20:10:20:10 | s | | main.rs:19:9:19:9 | s | main.rs:19:9:19:9 | [SSA] s | -| main.rs:19:13:19:21 | CallExpr | main.rs:19:9:19:9 | s | +| main.rs:19:13:19:21 | ... (...) | main.rs:19:9:19:9 | s | | main.rs:23:18:23:21 | [SSA] cond | main.rs:26:16:26:19 | cond | | main.rs:23:18:23:21 | cond | main.rs:23:18:23:21 | [SSA] cond | | main.rs:24:9:24:9 | [SSA] a | main.rs:26:23:26:23 | a | | main.rs:24:9:24:9 | a | main.rs:24:9:24:9 | [SSA] a | -| main.rs:24:13:24:21 | CallExpr | main.rs:24:9:24:9 | a | +| main.rs:24:13:24:21 | ... (...) | main.rs:24:9:24:9 | a | | main.rs:25:9:25:9 | [SSA] b | main.rs:26:34:26:34 | b | | main.rs:25:9:25:9 | b | main.rs:25:9:25:9 | [SSA] b | | main.rs:25:13:25:13 | 2 | main.rs:25:9:25:9 | b | | main.rs:26:9:26:9 | [SSA] c | main.rs:27:10:27:10 | c | | main.rs:26:9:26:9 | c | main.rs:26:9:26:9 | [SSA] c | -| main.rs:26:13:26:36 | IfExpr | main.rs:26:9:26:9 | c | -| main.rs:26:21:26:25 | BlockExpr | main.rs:26:13:26:36 | IfExpr | -| main.rs:26:23:26:23 | a | main.rs:26:21:26:25 | BlockExpr | -| main.rs:26:32:26:36 | BlockExpr | main.rs:26:13:26:36 | IfExpr | -| main.rs:26:34:26:34 | b | main.rs:26:32:26:36 | BlockExpr | +| main.rs:26:13:26:36 | if ... { ... } else { ... } | main.rs:26:9:26:9 | c | +| main.rs:26:21:26:25 | { ... } | main.rs:26:13:26:36 | if ... { ... } else { ... } | +| main.rs:26:23:26:23 | a | main.rs:26:21:26:25 | { ... } | +| main.rs:26:32:26:36 | { ... } | main.rs:26:13:26:36 | if ... { ... } else { ... } | +| main.rs:26:34:26:34 | b | main.rs:26:32:26:36 | { ... } | | main.rs:30:21:30:21 | [SSA] m | main.rs:32:19:32:19 | m | | main.rs:30:21:30:21 | m | main.rs:30:21:30:21 | [SSA] m | | main.rs:31:9:31:9 | [SSA] a | main.rs:33:20:33:20 | a | | main.rs:31:9:31:9 | a | main.rs:31:9:31:9 | [SSA] a | -| main.rs:31:13:31:21 | CallExpr | main.rs:31:9:31:9 | a | +| main.rs:31:13:31:21 | ... (...) | main.rs:31:9:31:9 | a | | main.rs:32:9:32:9 | [SSA] b | main.rs:36:10:36:10 | b | | main.rs:32:9:32:9 | b | main.rs:32:9:32:9 | [SSA] b | -| main.rs:32:13:35:5 | MatchExpr | main.rs:32:9:32:9 | b | -| main.rs:33:20:33:20 | a | main.rs:32:13:35:5 | MatchExpr | -| main.rs:34:17:34:17 | 0 | main.rs:32:13:35:5 | MatchExpr | +| main.rs:32:13:35:5 | match ... { ... } | main.rs:32:9:32:9 | b | +| main.rs:33:20:33:20 | a | main.rs:32:13:35:5 | match ... { ... } | +| main.rs:34:17:34:17 | 0 | main.rs:32:13:35:5 | match ... { ... } | | main.rs:40:9:40:9 | [SSA] a | main.rs:43:10:43:10 | a | | main.rs:40:9:40:9 | a | main.rs:40:9:40:9 | [SSA] a | -| main.rs:40:13:42:5 | LoopExpr | main.rs:40:9:40:9 | a | -| main.rs:41:9:41:15 | BreakExpr | main.rs:40:13:42:5 | LoopExpr | -| main.rs:41:15:41:15 | 1 | main.rs:41:9:41:15 | BreakExpr | +| main.rs:40:13:42:5 | loop {...} | main.rs:40:9:40:9 | a | +| main.rs:41:9:41:15 | (no string representation) | main.rs:40:13:42:5 | loop {...} | +| main.rs:41:15:41:15 | 1 | main.rs:41:9:41:15 | (no string representation) | | main.rs:44:9:44:9 | [SSA] b | main.rs:47:10:47:10 | b | | main.rs:44:9:44:9 | b | main.rs:44:9:44:9 | [SSA] b | -| main.rs:44:13:46:5 | LoopExpr | main.rs:44:9:44:9 | b | -| main.rs:45:9:45:23 | BreakExpr | main.rs:44:13:46:5 | LoopExpr | -| main.rs:45:15:45:23 | CallExpr | main.rs:45:9:45:23 | BreakExpr | +| main.rs:44:13:46:5 | loop {...} | main.rs:44:9:44:9 | b | +| main.rs:45:9:45:23 | (no string representation) | main.rs:44:13:46:5 | loop {...} | +| main.rs:45:15:45:23 | ... (...) | main.rs:45:9:45:23 | (no string representation) | | main.rs:51:9:51:13 | [SSA] i | main.rs:52:10:52:10 | i | | main.rs:51:9:51:13 | i | main.rs:51:9:51:13 | [SSA] i | | main.rs:51:17:51:17 | 1 | main.rs:51:9:51:13 | i | @@ -48,38 +48,38 @@ | main.rs:53:5:53:5 | i | main.rs:53:5:53:5 | [SSA] i | | main.rs:61:9:61:9 | [SSA] i | main.rs:62:11:62:11 | i | | main.rs:61:9:61:9 | i | main.rs:61:9:61:9 | [SSA] i | -| main.rs:61:13:61:31 | CallExpr | main.rs:61:9:61:9 | i | +| main.rs:61:13:61:31 | ... (...) | main.rs:61:9:61:9 | i | | main.rs:66:9:66:9 | [SSA] a | main.rs:67:10:67:10 | a | | main.rs:66:9:66:9 | a | main.rs:66:9:66:9 | [SSA] a | | main.rs:66:13:66:26 | TupleExpr | main.rs:66:9:66:9 | a | | main.rs:67:10:67:10 | a | main.rs:68:10:68:10 | a | | main.rs:78:9:78:9 | [SSA] p | main.rs:83:10:83:10 | p | | main.rs:78:9:78:9 | p | main.rs:78:9:78:9 | [SSA] p | -| main.rs:78:13:82:5 | RecordExpr | main.rs:78:9:78:9 | p | +| main.rs:78:13:82:5 | Point {...} | main.rs:78:9:78:9 | p | | main.rs:83:10:83:10 | p | main.rs:84:10:84:10 | p | | main.rs:84:10:84:10 | p | main.rs:85:10:85:10 | p | | main.rs:92:9:92:9 | [SSA] p | main.rs:97:38:97:38 | p | | main.rs:92:9:92:9 | p | main.rs:92:9:92:9 | [SSA] p | -| main.rs:92:13:96:5 | RecordExpr | main.rs:92:9:92:9 | p | +| main.rs:92:13:96:5 | Point {...} | main.rs:92:9:92:9 | p | | main.rs:97:20:97:20 | [SSA] a | main.rs:98:10:98:10 | a | | main.rs:97:20:97:20 | a | main.rs:97:20:97:20 | [SSA] a | | main.rs:97:26:97:26 | [SSA] b | main.rs:99:10:99:10 | b | | main.rs:97:26:97:26 | b | main.rs:97:26:97:26 | [SSA] b | | main.rs:97:32:97:32 | [SSA] c | main.rs:100:10:100:10 | c | | main.rs:97:32:97:32 | c | main.rs:97:32:97:32 | [SSA] c | -| main.rs:97:38:97:38 | p | main.rs:97:9:97:34 | RecordPat | +| main.rs:97:38:97:38 | p | main.rs:97:9:97:34 | Point {...} | | main.rs:104:9:104:10 | [SSA] s1 | main.rs:106:11:106:12 | s1 | | main.rs:104:9:104:10 | s1 | main.rs:104:9:104:10 | [SSA] s1 | -| main.rs:104:14:104:28 | CallExpr | main.rs:104:9:104:10 | s1 | +| main.rs:104:14:104:28 | ... (...) | main.rs:104:9:104:10 | s1 | | main.rs:105:9:105:10 | [SSA] s2 | main.rs:110:11:110:12 | s2 | | main.rs:105:9:105:10 | s2 | main.rs:105:9:105:10 | [SSA] s2 | -| main.rs:105:14:105:20 | CallExpr | main.rs:105:9:105:10 | s2 | +| main.rs:105:14:105:20 | ... (...) | main.rs:105:9:105:10 | s2 | | main.rs:107:14:107:14 | [SSA] n | main.rs:107:25:107:25 | n | | main.rs:107:14:107:14 | n | main.rs:107:14:107:14 | [SSA] n | -| main.rs:107:20:107:26 | CallExpr | main.rs:106:5:109:5 | MatchExpr | -| main.rs:108:17:108:23 | CallExpr | main.rs:106:5:109:5 | MatchExpr | -| main.rs:110:5:113:5 | MatchExpr | main.rs:103:27:114:1 | BlockExpr | +| main.rs:107:20:107:26 | ... (...) | main.rs:106:5:109:5 | match ... { ... } | +| main.rs:108:17:108:23 | ... (...) | main.rs:106:5:109:5 | match ... { ... } | +| main.rs:110:5:113:5 | match ... { ... } | main.rs:103:27:114:1 | { ... } | | main.rs:111:14:111:14 | [SSA] n | main.rs:111:25:111:25 | n | | main.rs:111:14:111:14 | n | main.rs:111:14:111:14 | [SSA] n | -| main.rs:111:20:111:26 | CallExpr | main.rs:110:5:113:5 | MatchExpr | -| main.rs:112:17:112:23 | CallExpr | main.rs:110:5:113:5 | MatchExpr | +| main.rs:111:20:111:26 | ... (...) | main.rs:110:5:113:5 | match ... { ... } | +| main.rs:112:17:112:23 | ... (...) | main.rs:110:5:113:5 | match ... { ... } | diff --git a/rust/ql/test/library-tests/variables/Ssa.expected b/rust/ql/test/library-tests/variables/Ssa.expected index f17152793a3e..0ca5a421853d 100644 --- a/rust/ql/test/library-tests/variables/Ssa.expected +++ b/rust/ql/test/library-tests/variables/Ssa.expected @@ -120,12 +120,12 @@ definition | variables.rs:418:9:418:13 | y | variables.rs:418:13:418:13 | y | | variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | | variables.rs:421:9:421:9 | y | variables.rs:418:13:418:13 | y | -| variables.rs:423:5:423:14 | CallExpr | variables.rs:418:13:418:13 | y | +| variables.rs:423:5:423:14 | ... (...) | variables.rs:418:13:418:13 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | | variables.rs:436:9:436:13 | i | variables.rs:436:13:436:13 | i | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | | variables.rs:438:9:438:9 | i | variables.rs:436:13:436:13 | i | -| variables.rs:441:5:441:15 | AwaitExpr | variables.rs:436:13:436:13 | i | +| variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | | variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | | variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | | variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | @@ -239,10 +239,10 @@ read | variables.rs:412:9:412:16 | closure1 | variables.rs:412:9:412:16 | closure1 | variables.rs:415:5:415:12 | closure1 | | variables.rs:412:20:414:5 | x | variables.rs:410:13:410:13 | x | variables.rs:413:19:413:19 | x | | variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | variables.rs:423:5:423:12 | closure2 | -| variables.rs:423:5:423:14 | CallExpr | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | +| variables.rs:423:5:423:14 | ... (...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block | -| variables.rs:441:5:441:15 | AwaitExpr | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | +| variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | | variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | variables.rs:449:8:449:8 | b | | variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:447:15:447:15 | x | | variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:448:15:448:15 | x | @@ -343,10 +343,10 @@ firstRead | variables.rs:412:9:412:16 | closure1 | variables.rs:412:9:412:16 | closure1 | variables.rs:415:5:415:12 | closure1 | | variables.rs:412:20:414:5 | x | variables.rs:410:13:410:13 | x | variables.rs:413:19:413:19 | x | | variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | variables.rs:423:5:423:12 | closure2 | -| variables.rs:423:5:423:14 | CallExpr | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | +| variables.rs:423:5:423:14 | ... (...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block | -| variables.rs:441:5:441:15 | AwaitExpr | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | +| variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | | variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | variables.rs:449:8:449:8 | b | | variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:447:15:447:15 | x | | variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | variables.rs:458:15:458:15 | x | @@ -443,10 +443,10 @@ lastRead | variables.rs:412:9:412:16 | closure1 | variables.rs:412:9:412:16 | closure1 | variables.rs:415:5:415:12 | closure1 | | variables.rs:412:20:414:5 | x | variables.rs:410:13:410:13 | x | variables.rs:413:19:413:19 | x | | variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | variables.rs:423:5:423:12 | closure2 | -| variables.rs:423:5:423:14 | CallExpr | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | +| variables.rs:423:5:423:14 | ... (...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block | -| variables.rs:441:5:441:15 | AwaitExpr | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | +| variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | | variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | variables.rs:449:8:449:8 | b | | variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:448:15:448:15 | x | | variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | variables.rs:458:15:458:15 | x | diff --git a/rust/ql/test/query-tests/diagnostics/DataFlowConsistencyCounts.expected b/rust/ql/test/query-tests/diagnostics/DataFlowConsistencyCounts.expected index 4d1cdfed89af..9c96e0fa3345 100644 --- a/rust/ql/test/query-tests/diagnostics/DataFlowConsistencyCounts.expected +++ b/rust/ql/test/query-tests/diagnostics/DataFlowConsistencyCounts.expected @@ -11,7 +11,7 @@ | Node has multiple PostUpdateNodes | 0 | | Node should have one enclosing callable | 0 | | Node should have one location | 0 | -| Node should have one toString | 0 | +| Node should have one toString | 1 | | Node should have one type | 0 | | Node steps to itself | 0 | | Nodes without location | 0 | diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected index aeba0ac1ee6c..a3330d0eb1e8 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected @@ -7,6 +7,6 @@ | Files extracted - without errors | 6 | | Inconsistencies - AST | 0 | | Inconsistencies - CFG | 0 | -| Inconsistencies - data flow | 0 | +| Inconsistencies - data flow | 1 | | Lines of code extracted | 59 | | Lines of user code extracted | 59 | diff --git a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/DataFlowConsistency.expected b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/DataFlowConsistency.expected index 0a61a151c204..f4a07cc45c2d 100644 --- a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/DataFlowConsistency.expected +++ b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/DataFlowConsistency.expected @@ -3,3 +3,17 @@ uniqueEnclosingCallable | main.rs:198:28:198:28 | x | Node should have one enclosing callable but has 0. | | main.rs:202:28:202:28 | x | Node should have one enclosing callable but has 0. | | main.rs:206:28:206:28 | x | Node should have one enclosing callable but has 0. | +uniqueNodeToString +| main.rs:205:32:205:32 | (no string representation) | Node should have one toString but has 0. | +| main.rs:219:9:219:13 | (no string representation) | Node should have one toString but has 0. | +| main.rs:224:9:224:13 | (no string representation) | Node should have one toString but has 0. | +| main.rs:424:21:424:23 | (no string representation) | Node should have one toString but has 0. | +| main.rs:424:26:424:28 | (no string representation) | Node should have one toString but has 0. | +| main.rs:427:21:427:23 | (no string representation) | Node should have one toString but has 0. | +| main.rs:427:26:427:28 | (no string representation) | Node should have one toString but has 0. | +| main.rs:430:21:430:23 | (no string representation) | Node should have one toString but has 0. | +| main.rs:430:26:430:28 | (no string representation) | Node should have one toString but has 0. | +| main.rs:434:21:434:23 | (no string representation) | Node should have one toString but has 0. | +| main.rs:434:26:434:28 | (no string representation) | Node should have one toString but has 0. | +| unreachable.rs:10:34:10:34 | (no string representation) | Node should have one toString but has 0. | +| unreachable.rs:230:13:230:17 | (no string representation) | Node should have one toString but has 0. | From e4f982c12ce69cfe4b5cda5480646011e019cfa0 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 19 Nov 2024 17:34:18 +0100 Subject: [PATCH 07/35] Rust: accept integration test changes --- .../ql/integration-tests/hello-project/functions.expected | 2 +- .../integration-tests/hello-workspace/functions.expected | 4 ++-- rust/ql/integration-tests/options/cfg/functions.expected | 6 +++--- .../options/cfg/functions.override.expected | 8 ++++---- .../options/features/functions.all.expected | 6 +++--- .../options/features/functions.bar.expected | 4 ++-- .../integration-tests/options/features/functions.expected | 2 +- .../options/features/functions.foo.expected | 4 ++-- .../options/target/functions.Darwin.expected | 2 +- .../options/target/functions.Linux.expected | 2 +- .../options/target/functions.Windows.expected | 2 +- rust/ql/integration-tests/qltest/test.py | 3 ++- 12 files changed, 23 insertions(+), 22 deletions(-) diff --git a/rust/ql/integration-tests/hello-project/functions.expected b/rust/ql/integration-tests/hello-project/functions.expected index fc49564084e3..2665ea7df769 100644 --- a/rust/ql/integration-tests/hello-project/functions.expected +++ b/rust/ql/integration-tests/hello-project/functions.expected @@ -1 +1 @@ -| src/main.rs:4:1:6:1 | main | +| src/main.rs:4:1:6:1 | fn main | diff --git a/rust/ql/integration-tests/hello-workspace/functions.expected b/rust/ql/integration-tests/hello-workspace/functions.expected index 0ec9937972e2..0633774edf73 100644 --- a/rust/ql/integration-tests/hello-workspace/functions.expected +++ b/rust/ql/integration-tests/hello-workspace/functions.expected @@ -1,2 +1,2 @@ -| exe/src/main.rs:5:1:7:1 | main | -| lib/src/a_module/mod.rs:1:1:3:1 | hello | +| exe/src/main.rs:5:1:7:1 | fn main | +| lib/src/a_module/mod.rs:1:1:3:1 | fn hello | diff --git a/rust/ql/integration-tests/options/cfg/functions.expected b/rust/ql/integration-tests/options/cfg/functions.expected index a2042c5e4c49..cd022ca510e0 100644 --- a/rust/ql/integration-tests/options/cfg/functions.expected +++ b/rust/ql/integration-tests/options/cfg/functions.expected @@ -1,3 +1,3 @@ -| src/lib.rs:7:1:8:19 | cfg_no_flag | -| src/lib.rs:10:1:11:18 | cfg_no_key | -| src/lib.rs:16:1:17:24 | pointer_width_64 | +| src/lib.rs:7:1:8:19 | fn cfg_no_flag | +| src/lib.rs:10:1:11:18 | fn cfg_no_key | +| src/lib.rs:16:1:17:24 | fn pointer_width_64 | diff --git a/rust/ql/integration-tests/options/cfg/functions.override.expected b/rust/ql/integration-tests/options/cfg/functions.override.expected index 4a19db56a741..34feddaf1490 100644 --- a/rust/ql/integration-tests/options/cfg/functions.override.expected +++ b/rust/ql/integration-tests/options/cfg/functions.override.expected @@ -1,4 +1,4 @@ -| src/lib.rs:1:1:2:16 | cfg_flag | -| src/lib.rs:4:1:5:15 | cfg_key | -| src/lib.rs:13:1:14:12 | test | -| src/lib.rs:19:1:20:24 | pointer_width_32 | +| src/lib.rs:1:1:2:16 | fn cfg_flag | +| src/lib.rs:4:1:5:15 | fn cfg_key | +| src/lib.rs:13:1:14:12 | fn test | +| src/lib.rs:19:1:20:24 | fn pointer_width_32 | diff --git a/rust/ql/integration-tests/options/features/functions.all.expected b/rust/ql/integration-tests/options/features/functions.all.expected index 5ce4cae2ab0d..1fa14be6da60 100644 --- a/rust/ql/integration-tests/options/features/functions.all.expected +++ b/rust/ql/integration-tests/options/features/functions.all.expected @@ -1,3 +1,3 @@ -| src/lib.rs:1:1:2:11 | foo | -| src/lib.rs:4:1:5:11 | bar | -| src/lib.rs:7:1:7:14 | always | +| src/lib.rs:1:1:2:11 | fn foo | +| src/lib.rs:4:1:5:11 | fn bar | +| src/lib.rs:7:1:7:14 | fn always | diff --git a/rust/ql/integration-tests/options/features/functions.bar.expected b/rust/ql/integration-tests/options/features/functions.bar.expected index cad441d6749b..fae918e493a3 100644 --- a/rust/ql/integration-tests/options/features/functions.bar.expected +++ b/rust/ql/integration-tests/options/features/functions.bar.expected @@ -1,2 +1,2 @@ -| src/lib.rs:4:1:5:11 | bar | -| src/lib.rs:7:1:7:14 | always | +| src/lib.rs:4:1:5:11 | fn bar | +| src/lib.rs:7:1:7:14 | fn always | diff --git a/rust/ql/integration-tests/options/features/functions.expected b/rust/ql/integration-tests/options/features/functions.expected index 523c21876884..d095a8993d8a 100644 --- a/rust/ql/integration-tests/options/features/functions.expected +++ b/rust/ql/integration-tests/options/features/functions.expected @@ -1 +1 @@ -| src/lib.rs:7:1:7:14 | always | +| src/lib.rs:7:1:7:14 | fn always | diff --git a/rust/ql/integration-tests/options/features/functions.foo.expected b/rust/ql/integration-tests/options/features/functions.foo.expected index b78754230833..3768144364f3 100644 --- a/rust/ql/integration-tests/options/features/functions.foo.expected +++ b/rust/ql/integration-tests/options/features/functions.foo.expected @@ -1,2 +1,2 @@ -| src/lib.rs:1:1:2:11 | foo | -| src/lib.rs:7:1:7:14 | always | +| src/lib.rs:1:1:2:11 | fn foo | +| src/lib.rs:7:1:7:14 | fn always | diff --git a/rust/ql/integration-tests/options/target/functions.Darwin.expected b/rust/ql/integration-tests/options/target/functions.Darwin.expected index 217974bb7c63..8b879e8ca7c7 100644 --- a/rust/ql/integration-tests/options/target/functions.Darwin.expected +++ b/rust/ql/integration-tests/options/target/functions.Darwin.expected @@ -1 +1 @@ -| src/lib.rs:7:1:8:13 | macos | +| src/lib.rs:7:1:8:13 | fn macos | diff --git a/rust/ql/integration-tests/options/target/functions.Linux.expected b/rust/ql/integration-tests/options/target/functions.Linux.expected index 57662579f1f5..2e023fb887c0 100644 --- a/rust/ql/integration-tests/options/target/functions.Linux.expected +++ b/rust/ql/integration-tests/options/target/functions.Linux.expected @@ -1 +1 @@ -| src/lib.rs:1:1:2:13 | linux | +| src/lib.rs:1:1:2:13 | fn linux | diff --git a/rust/ql/integration-tests/options/target/functions.Windows.expected b/rust/ql/integration-tests/options/target/functions.Windows.expected index 8ae2d8c86ccf..170a6e62e80e 100644 --- a/rust/ql/integration-tests/options/target/functions.Windows.expected +++ b/rust/ql/integration-tests/options/target/functions.Windows.expected @@ -1 +1 @@ -| src/lib.rs:4:1:5:15 | windows | +| src/lib.rs:4:1:5:15 | fn windows | diff --git a/rust/ql/integration-tests/qltest/test.py b/rust/ql/integration-tests/qltest/test.py index e488dee25717..d130d5d2ff1c 100644 --- a/rust/ql/integration-tests/qltest/test.py +++ b/rust/ql/integration-tests/qltest/test.py @@ -6,11 +6,12 @@ # (which skips `qltest.{sh,cmd}`) @pytest.fixture(autouse=True) -def default_options(codeql): +def default_options(codeql, pytestconfig): codeql.flags.update( threads = 1, show_extractor_output = True, check_databases = False, + learn = pytestconfig.getoption("learn"), ) @pytest.mark.parametrize("dir", ["lib", "main", "dependencies"]) From 4fb028cbb2b2ff2d14a9abd00e9df84667cc2e9c Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 20 Nov 2024 09:45:15 +0100 Subject: [PATCH 08/35] Rust: accept last integration test changes Also make `--learn` work with the nested qltest tests. --- .../qltest/dependencies/functions.expected | 1 - .../qltest/dependencies/functions.nested.expected | 1 + rust/ql/integration-tests/qltest/lib/functions.expected | 1 - .../integration-tests/qltest/lib/functions.nested.expected | 1 + rust/ql/integration-tests/qltest/main/functions.expected | 2 -- .../qltest/main/functions.nested.expected | 2 ++ .../integration-tests/qltest/{test.py => test_qltest.py} | 7 ++++--- 7 files changed, 8 insertions(+), 7 deletions(-) delete mode 100644 rust/ql/integration-tests/qltest/dependencies/functions.expected create mode 100644 rust/ql/integration-tests/qltest/dependencies/functions.nested.expected delete mode 100644 rust/ql/integration-tests/qltest/lib/functions.expected create mode 100644 rust/ql/integration-tests/qltest/lib/functions.nested.expected delete mode 100644 rust/ql/integration-tests/qltest/main/functions.expected create mode 100644 rust/ql/integration-tests/qltest/main/functions.nested.expected rename rust/ql/integration-tests/qltest/{test.py => test_qltest.py} (81%) diff --git a/rust/ql/integration-tests/qltest/dependencies/functions.expected b/rust/ql/integration-tests/qltest/dependencies/functions.expected deleted file mode 100644 index c062595f9237..000000000000 --- a/rust/ql/integration-tests/qltest/dependencies/functions.expected +++ /dev/null @@ -1 +0,0 @@ -| test.rs:4:1:7:1 | foo | diff --git a/rust/ql/integration-tests/qltest/dependencies/functions.nested.expected b/rust/ql/integration-tests/qltest/dependencies/functions.nested.expected new file mode 100644 index 000000000000..9ee4b080b97e --- /dev/null +++ b/rust/ql/integration-tests/qltest/dependencies/functions.nested.expected @@ -0,0 +1 @@ +| test.rs:4:1:7:1 | fn foo | diff --git a/rust/ql/integration-tests/qltest/lib/functions.expected b/rust/ql/integration-tests/qltest/lib/functions.expected deleted file mode 100644 index 613d53954dcc..000000000000 --- a/rust/ql/integration-tests/qltest/lib/functions.expected +++ /dev/null @@ -1 +0,0 @@ -| test.rs:1:1:1:11 | foo | diff --git a/rust/ql/integration-tests/qltest/lib/functions.nested.expected b/rust/ql/integration-tests/qltest/lib/functions.nested.expected new file mode 100644 index 000000000000..74d1d680dae3 --- /dev/null +++ b/rust/ql/integration-tests/qltest/lib/functions.nested.expected @@ -0,0 +1 @@ +| test.rs:1:1:1:11 | fn foo | diff --git a/rust/ql/integration-tests/qltest/main/functions.expected b/rust/ql/integration-tests/qltest/main/functions.expected deleted file mode 100644 index 9d3631034191..000000000000 --- a/rust/ql/integration-tests/qltest/main/functions.expected +++ /dev/null @@ -1,2 +0,0 @@ -| main.rs:1:1:1:12 | main | -| test.rs:1:1:1:11 | foo | diff --git a/rust/ql/integration-tests/qltest/main/functions.nested.expected b/rust/ql/integration-tests/qltest/main/functions.nested.expected new file mode 100644 index 000000000000..fc9c578919ce --- /dev/null +++ b/rust/ql/integration-tests/qltest/main/functions.nested.expected @@ -0,0 +1,2 @@ +| main.rs:1:1:1:12 | fn main | +| test.rs:1:1:1:11 | fn foo | diff --git a/rust/ql/integration-tests/qltest/test.py b/rust/ql/integration-tests/qltest/test_qltest.py similarity index 81% rename from rust/ql/integration-tests/qltest/test.py rename to rust/ql/integration-tests/qltest/test_qltest.py index d130d5d2ff1c..edd62bf600ef 100644 --- a/rust/ql/integration-tests/qltest/test.py +++ b/rust/ql/integration-tests/qltest/test_qltest.py @@ -6,16 +6,17 @@ # (which skips `qltest.{sh,cmd}`) @pytest.fixture(autouse=True) -def default_options(codeql, pytestconfig): +def default_options(codeql): codeql.flags.update( threads = 1, show_extractor_output = True, check_databases = False, - learn = pytestconfig.getoption("learn"), + learn = True, ) @pytest.mark.parametrize("dir", ["lib", "main", "dependencies"]) -def test(codeql, rust, dir): +def test(codeql, rust, expected_files, dir): + expected_files.add(f"{dir}/functions.expected", expected=".nested.expected") codeql.test.run(dir) def test_failing_cargo_check(codeql, rust): From 57973df795385fd52d276b1058bc9614b1b822cc Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 20 Nov 2024 10:00:10 +0100 Subject: [PATCH 09/35] Rust: make `CallExpr.toString` use call identifier if present --- .../rust/elements/internal/CallExprImpl.qll | 12 +- .../AwaitExpr/AwaitExpr_getExpr.expected | 2 +- .../BecomeExpr/BecomeExpr_getExpr.expected | 2 +- .../generated/CallExpr/CallExpr.expected | 8 +- .../CallExpr/CallExpr_getArgList.expected | 8 +- .../CallExpr/CallExpr_getExpr.expected | 8 +- .../ExprStmt/ExprStmt_getExpr.expected | 4 +- .../LetStmt/LetStmt_getInitializer.expected | 2 +- .../dataflow/global/viableCallable.expected | 42 +- .../dataflow/local/DataFlowStep.expected | 22 +- .../dataflow/local/inline-flow.expected | 26 +- .../test/library-tests/variables/Cfg.expected | 1450 ++++++++--------- .../test/library-tests/variables/Ssa.expected | 8 +- .../variables/variables.expected | 470 +----- 14 files changed, 793 insertions(+), 1271 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll index 8b0ae58e2d98..4cf0272c0088 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll @@ -5,6 +5,7 @@ */ private import codeql.rust.elements.internal.generated.CallExpr +private import codeql.rust.elements.PathExpr /** * INTERNAL: This module contains the customizable definition of `CallExpr` and should not @@ -22,6 +23,15 @@ module Impl { * ``` */ class CallExpr extends Generated::CallExpr { - override string toString() { result = "... (...)" } + override string toString() { + exists(string callee | + ( + callee = this.getExpr().(PathExpr).toString() + or + not this.getExpr() instanceof PathExpr and callee = "..." + ) and + result = callee + "(...)" + ) + } } } diff --git a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected index 528d6f097a09..a1ea7809bb01 100644 --- a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected @@ -1 +1 @@ -| gen_await_expr.rs:6:17:6:27 | await ... | gen_await_expr.rs:6:17:6:21 | ... (...) | +| gen_await_expr.rs:6:17:6:27 | await ... | gen_await_expr.rs:6:17:6:21 | foo(...) | diff --git a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected index 4fbba61bc8cf..d0cb86a0303c 100644 --- a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected @@ -1 +1 @@ -| gen_become_expr.rs:8:10:8:36 | become ... | gen_become_expr.rs:8:17:8:36 | ... (...) | +| gen_become_expr.rs:8:10:8:36 | become ... | gen_become_expr.rs:8:17:8:36 | fact_a(...) | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected index 9e01b6bdc630..a3f108b5584e 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected @@ -1,4 +1,4 @@ -| gen_call_expr.rs:5:5:5:11 | ... (...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | -| gen_call_expr.rs:6:5:6:23 | ... (...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | -| gen_call_expr.rs:7:5:7:14 | ... (...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | -| gen_call_expr.rs:8:5:8:10 | ... (...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_call_expr.rs:5:5:5:11 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_call_expr.rs:7:5:7:14 | ...(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_call_expr.rs:8:5:8:10 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected index 1876a5b58d8a..13c426db99d1 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected @@ -1,4 +1,4 @@ -| gen_call_expr.rs:5:5:5:11 | ... (...) | gen_call_expr.rs:5:8:5:11 | ArgList | -| gen_call_expr.rs:6:5:6:23 | ... (...) | gen_call_expr.rs:6:20:6:23 | ArgList | -| gen_call_expr.rs:7:5:7:14 | ... (...) | gen_call_expr.rs:7:11:7:14 | ArgList | -| gen_call_expr.rs:8:5:8:10 | ... (...) | gen_call_expr.rs:8:8:8:10 | ArgList | +| gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:8:5:11 | ArgList | +| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:20:6:23 | ArgList | +| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:11:7:14 | ArgList | +| gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:8:8:10 | ArgList | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected index 017a4656ffd6..68113cf5725b 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected @@ -1,4 +1,4 @@ -| gen_call_expr.rs:5:5:5:11 | ... (...) | gen_call_expr.rs:5:5:5:7 | foo | -| gen_call_expr.rs:6:5:6:23 | ... (...) | gen_call_expr.rs:6:5:6:19 | foo::<...> | -| gen_call_expr.rs:7:5:7:14 | ... (...) | gen_call_expr.rs:7:5:7:10 | ...[...] | -| gen_call_expr.rs:8:5:8:10 | ... (...) | gen_call_expr.rs:8:5:8:7 | foo | +| gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:5:5:7 | foo | +| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:5:6:19 | foo::<...> | +| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:5:7:10 | ...[...] | +| gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:5:8:7 | foo | diff --git a/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected index 08343b7e1e90..1cacf1e84241 100644 --- a/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected @@ -1,2 +1,2 @@ -| gen_expr_stmt.rs:5:5:5:12 | ExprStmt | gen_expr_stmt.rs:5:5:5:11 | ... (...) | -| gen_expr_stmt.rs:6:5:6:13 | ExprStmt | gen_expr_stmt.rs:6:5:6:12 | ... (...) | +| gen_expr_stmt.rs:5:5:5:12 | ExprStmt | gen_expr_stmt.rs:5:5:5:11 | start(...) | +| gen_expr_stmt.rs:6:5:6:13 | ExprStmt | gen_expr_stmt.rs:6:5:6:12 | finish(...) | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected index 07b474609f7b..a7323b834b3d 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected @@ -1,4 +1,4 @@ | gen_let_stmt.rs:5:5:5:15 | let x = ... | gen_let_stmt.rs:5:13:5:14 | 42 | | gen_let_stmt.rs:6:5:6:20 | let x = ... | gen_let_stmt.rs:6:18:6:19 | 42 | | gen_let_stmt.rs:9:5:9:24 | let TuplePat = ... | gen_let_stmt.rs:9:18:9:23 | TupleExpr | -| gen_let_stmt.rs:10:5:12:6 | let TupleStructPat = ... else { ... } | gen_let_stmt.rs:10:19:10:38 | ... (...) | +| gen_let_stmt.rs:10:5:12:6 | let TupleStructPat = ... else { ... } | gen_let_stmt.rs:10:19:10:38 | std::env::var(...) | diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index 0739d922d8d4..28e43535c79e 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -1,24 +1,24 @@ -| main.rs:13:5:13:13 | ... (...) | main.rs:1:1:3:1 | fn source | -| main.rs:17:13:17:23 | ... (...) | main.rs:12:1:14:1 | fn get_data | -| main.rs:18:5:18:11 | ... (...) | main.rs:5:1:7:1 | fn sink | -| main.rs:22:5:22:15 | ... (...) | main.rs:5:1:7:1 | fn sink | -| main.rs:26:13:26:21 | ... (...) | main.rs:1:1:3:1 | fn source | -| main.rs:27:5:27:14 | ... (...) | main.rs:21:1:23:1 | fn data_in | -| main.rs:35:13:35:21 | ... (...) | main.rs:1:1:3:1 | fn source | -| main.rs:36:13:36:27 | ... (...) | main.rs:30:1:32:1 | fn pass_through | -| main.rs:37:5:37:11 | ... (...) | main.rs:5:1:7:1 | fn sink | -| main.rs:49:9:49:15 | ... (...) | main.rs:5:1:7:1 | fn sink | -| main.rs:55:13:55:21 | ... (...) | main.rs:1:1:3:1 | fn source | +| main.rs:13:5:13:13 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:17:13:17:23 | get_data(...) | main.rs:12:1:14:1 | fn get_data | +| main.rs:18:5:18:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:22:5:22:15 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:26:13:26:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:27:5:27:14 | data_in(...) | main.rs:21:1:23:1 | fn data_in | +| main.rs:35:13:35:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:36:13:36:27 | pass_through(...) | main.rs:30:1:32:1 | fn pass_through | +| main.rs:37:5:37:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:49:9:49:15 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:55:13:55:21 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:69:13:69:25 | ... .get_data(...) | main.rs:51:5:57:5 | fn get_data | -| main.rs:70:5:70:11 | ... (...) | main.rs:5:1:7:1 | fn sink | -| main.rs:75:13:75:21 | ... (...) | main.rs:1:1:3:1 | fn source | +| main.rs:70:5:70:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:75:13:75:21 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:76:5:76:17 | ... .data_in(...) | main.rs:48:5:50:5 | fn data_in | -| main.rs:81:13:81:21 | ... (...) | main.rs:1:1:3:1 | fn source | +| main.rs:81:13:81:21 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:82:5:82:22 | ... .data_through(...) | main.rs:58:5:64:5 | fn data_through | -| main.rs:83:5:83:11 | ... (...) | main.rs:5:1:7:1 | fn sink | -| main.rs:87:5:87:22 | ... (...) | main.rs:16:1:19:1 | fn data_out_of_call | -| main.rs:88:5:88:21 | ... (...) | main.rs:25:1:28:1 | fn data_in_to_call | -| main.rs:89:5:89:23 | ... (...) | main.rs:34:1:38:1 | fn data_through_call | -| main.rs:91:5:91:24 | ... (...) | main.rs:67:1:71:1 | fn data_out_of_method | -| main.rs:92:5:92:28 | ... (...) | main.rs:73:1:77:1 | fn data_in_to_method_call | -| main.rs:93:5:93:25 | ... (...) | main.rs:79:1:84:1 | fn data_through_method | +| main.rs:83:5:83:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:87:5:87:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call | +| main.rs:88:5:88:21 | data_in_to_call(...) | main.rs:25:1:28:1 | fn data_in_to_call | +| main.rs:89:5:89:23 | data_through_call(...) | main.rs:34:1:38:1 | fn data_through_call | +| main.rs:91:5:91:24 | data_out_of_method(...) | main.rs:67:1:71:1 | fn data_out_of_method | +| main.rs:92:5:92:28 | data_in_to_method_call(...) | main.rs:73:1:77:1 | fn data_in_to_method_call | +| main.rs:93:5:93:25 | data_through_method(...) | main.rs:79:1:84:1 | fn data_through_method | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index ecce48be804c..e12f2e14d199 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -5,12 +5,12 @@ | main.rs:7:9:7:9 | s | main.rs:7:9:7:9 | [SSA] s | | main.rs:19:9:19:9 | [SSA] s | main.rs:20:10:20:10 | s | | main.rs:19:9:19:9 | s | main.rs:19:9:19:9 | [SSA] s | -| main.rs:19:13:19:21 | ... (...) | main.rs:19:9:19:9 | s | +| main.rs:19:13:19:21 | source(...) | main.rs:19:9:19:9 | s | | main.rs:23:18:23:21 | [SSA] cond | main.rs:26:16:26:19 | cond | | main.rs:23:18:23:21 | cond | main.rs:23:18:23:21 | [SSA] cond | | main.rs:24:9:24:9 | [SSA] a | main.rs:26:23:26:23 | a | | main.rs:24:9:24:9 | a | main.rs:24:9:24:9 | [SSA] a | -| main.rs:24:13:24:21 | ... (...) | main.rs:24:9:24:9 | a | +| main.rs:24:13:24:21 | source(...) | main.rs:24:9:24:9 | a | | main.rs:25:9:25:9 | [SSA] b | main.rs:26:34:26:34 | b | | main.rs:25:9:25:9 | b | main.rs:25:9:25:9 | [SSA] b | | main.rs:25:13:25:13 | 2 | main.rs:25:9:25:9 | b | @@ -25,7 +25,7 @@ | main.rs:30:21:30:21 | m | main.rs:30:21:30:21 | [SSA] m | | main.rs:31:9:31:9 | [SSA] a | main.rs:33:20:33:20 | a | | main.rs:31:9:31:9 | a | main.rs:31:9:31:9 | [SSA] a | -| main.rs:31:13:31:21 | ... (...) | main.rs:31:9:31:9 | a | +| main.rs:31:13:31:21 | source(...) | main.rs:31:9:31:9 | a | | main.rs:32:9:32:9 | [SSA] b | main.rs:36:10:36:10 | b | | main.rs:32:9:32:9 | b | main.rs:32:9:32:9 | [SSA] b | | main.rs:32:13:35:5 | match ... { ... } | main.rs:32:9:32:9 | b | @@ -40,7 +40,7 @@ | main.rs:44:9:44:9 | b | main.rs:44:9:44:9 | [SSA] b | | main.rs:44:13:46:5 | loop {...} | main.rs:44:9:44:9 | b | | main.rs:45:9:45:23 | (no string representation) | main.rs:44:13:46:5 | loop {...} | -| main.rs:45:15:45:23 | ... (...) | main.rs:45:9:45:23 | (no string representation) | +| main.rs:45:15:45:23 | source(...) | main.rs:45:9:45:23 | (no string representation) | | main.rs:51:9:51:13 | [SSA] i | main.rs:52:10:52:10 | i | | main.rs:51:9:51:13 | i | main.rs:51:9:51:13 | [SSA] i | | main.rs:51:17:51:17 | 1 | main.rs:51:9:51:13 | i | @@ -48,7 +48,7 @@ | main.rs:53:5:53:5 | i | main.rs:53:5:53:5 | [SSA] i | | main.rs:61:9:61:9 | [SSA] i | main.rs:62:11:62:11 | i | | main.rs:61:9:61:9 | i | main.rs:61:9:61:9 | [SSA] i | -| main.rs:61:13:61:31 | ... (...) | main.rs:61:9:61:9 | i | +| main.rs:61:13:61:31 | Box::new(...) | main.rs:61:9:61:9 | i | | main.rs:66:9:66:9 | [SSA] a | main.rs:67:10:67:10 | a | | main.rs:66:9:66:9 | a | main.rs:66:9:66:9 | [SSA] a | | main.rs:66:13:66:26 | TupleExpr | main.rs:66:9:66:9 | a | @@ -70,16 +70,16 @@ | main.rs:97:38:97:38 | p | main.rs:97:9:97:34 | Point {...} | | main.rs:104:9:104:10 | [SSA] s1 | main.rs:106:11:106:12 | s1 | | main.rs:104:9:104:10 | s1 | main.rs:104:9:104:10 | [SSA] s1 | -| main.rs:104:14:104:28 | ... (...) | main.rs:104:9:104:10 | s1 | +| main.rs:104:14:104:28 | Some(...) | main.rs:104:9:104:10 | s1 | | main.rs:105:9:105:10 | [SSA] s2 | main.rs:110:11:110:12 | s2 | | main.rs:105:9:105:10 | s2 | main.rs:105:9:105:10 | [SSA] s2 | -| main.rs:105:14:105:20 | ... (...) | main.rs:105:9:105:10 | s2 | +| main.rs:105:14:105:20 | Some(...) | main.rs:105:9:105:10 | s2 | | main.rs:107:14:107:14 | [SSA] n | main.rs:107:25:107:25 | n | | main.rs:107:14:107:14 | n | main.rs:107:14:107:14 | [SSA] n | -| main.rs:107:20:107:26 | ... (...) | main.rs:106:5:109:5 | match ... { ... } | -| main.rs:108:17:108:23 | ... (...) | main.rs:106:5:109:5 | match ... { ... } | +| main.rs:107:20:107:26 | sink(...) | main.rs:106:5:109:5 | match ... { ... } | +| main.rs:108:17:108:23 | sink(...) | main.rs:106:5:109:5 | match ... { ... } | | main.rs:110:5:113:5 | match ... { ... } | main.rs:103:27:114:1 | { ... } | | main.rs:111:14:111:14 | [SSA] n | main.rs:111:25:111:25 | n | | main.rs:111:14:111:14 | n | main.rs:111:14:111:14 | [SSA] n | -| main.rs:111:20:111:26 | ... (...) | main.rs:110:5:113:5 | match ... { ... } | -| main.rs:112:17:112:23 | ... (...) | main.rs:110:5:113:5 | match ... { ... } | +| main.rs:111:20:111:26 | sink(...) | main.rs:110:5:113:5 | match ... { ... } | +| main.rs:112:17:112:23 | sink(...) | main.rs:110:5:113:5 | match ... { ... } | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index 72273334c6f5..ea439e78d5be 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -1,24 +1,2 @@ -models -edges -| main.rs:19:13:19:21 | CallExpr : unit | main.rs:20:10:20:10 | s | provenance | | -| main.rs:24:13:24:21 | CallExpr : unit | main.rs:27:10:27:10 | c | provenance | | -| main.rs:31:13:31:21 | CallExpr : unit | main.rs:36:10:36:10 | b | provenance | | -| main.rs:45:15:45:23 | CallExpr : unit | main.rs:47:10:47:10 | b | provenance | | -nodes -| main.rs:15:10:15:18 | CallExpr | semmle.label | CallExpr | -| main.rs:19:13:19:21 | CallExpr : unit | semmle.label | CallExpr : unit | -| main.rs:20:10:20:10 | s | semmle.label | s | -| main.rs:24:13:24:21 | CallExpr : unit | semmle.label | CallExpr : unit | -| main.rs:27:10:27:10 | c | semmle.label | c | -| main.rs:31:13:31:21 | CallExpr : unit | semmle.label | CallExpr : unit | -| main.rs:36:10:36:10 | b | semmle.label | b | -| main.rs:45:15:45:23 | CallExpr : unit | semmle.label | CallExpr : unit | -| main.rs:47:10:47:10 | b | semmle.label | b | -subpaths -testFailures -#select -| main.rs:15:10:15:18 | CallExpr | main.rs:15:10:15:18 | CallExpr | main.rs:15:10:15:18 | CallExpr | $@ | main.rs:15:10:15:18 | CallExpr | CallExpr | -| main.rs:20:10:20:10 | s | main.rs:19:13:19:21 | CallExpr : unit | main.rs:20:10:20:10 | s | $@ | main.rs:19:13:19:21 | CallExpr : unit | CallExpr : unit | -| main.rs:27:10:27:10 | c | main.rs:24:13:24:21 | CallExpr : unit | main.rs:27:10:27:10 | c | $@ | main.rs:24:13:24:21 | CallExpr : unit | CallExpr : unit | -| main.rs:36:10:36:10 | b | main.rs:31:13:31:21 | CallExpr : unit | main.rs:36:10:36:10 | b | $@ | main.rs:31:13:31:21 | CallExpr : unit | CallExpr : unit | -| main.rs:47:10:47:10 | b | main.rs:45:15:45:23 | CallExpr : unit | main.rs:47:10:47:10 | b | $@ | main.rs:45:15:45:23 | CallExpr : unit | CallExpr : unit | +ERROR: empty recursive call: dispatch predicate for CommentImpl::Impl::Comment::getCommentMarker (CommentImpl.qll:23,47-63) +ERROR: empty recursive call: dispatch predicate for CommentImpl::Impl::Comment::getText (CommentImpl.qll:36,34-41) diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index 3ff46aa9f7ec..338af96a7c4f 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -1,292 +1,292 @@ edges -| variables.rs:3:1:5:1 | enter print_str | variables.rs:3:14:3:14 | s | | -| variables.rs:3:1:5:1 | exit print_str (normal) | variables.rs:3:1:5:1 | exit print_str | | -| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:20 | Param | match | -| variables.rs:3:14:3:20 | Param | variables.rs:4:5:4:22 | ExprStmt | | -| variables.rs:3:23:5:1 | BlockExpr | variables.rs:3:1:5:1 | exit print_str (normal) | | +| variables.rs:3:1:5:1 | enter fn print_str | variables.rs:3:14:3:14 | s | | +| variables.rs:3:1:5:1 | exit fn print_str (normal) | variables.rs:3:1:5:1 | exit fn print_str | | +| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:20 | s: RefType | match | +| variables.rs:3:14:3:20 | s: RefType | variables.rs:4:5:4:22 | ExprStmt | | +| variables.rs:3:23:5:1 | { ... } | variables.rs:3:1:5:1 | exit fn print_str (normal) | | | variables.rs:4:5:4:21 | $crate::io::_print | variables.rs:4:14:4:17 | "{}\\n" | | -| variables.rs:4:5:4:21 | MacroExpr | variables.rs:3:23:5:1 | BlockExpr | | +| variables.rs:4:5:4:21 | MacroExpr | variables.rs:3:23:5:1 | { ... } | | | variables.rs:4:5:4:22 | ExprStmt | variables.rs:4:14:4:20 | MacroStmts | | | variables.rs:4:14:4:17 | "{}\\n" | variables.rs:4:20:4:20 | s | | -| variables.rs:4:14:4:20 | BlockExpr | variables.rs:4:5:4:21 | MacroExpr | | -| variables.rs:4:14:4:20 | CallExpr | variables.rs:4:14:4:20 | BlockExpr | | +| variables.rs:4:14:4:20 | $crate::io::_print(...) | variables.rs:4:14:4:20 | { ... } | | | variables.rs:4:14:4:20 | ExprStmt | variables.rs:4:5:4:21 | $crate::io::_print | | | variables.rs:4:14:4:20 | FormatArgsExpr | variables.rs:4:14:4:20 | MacroExpr | | -| variables.rs:4:14:4:20 | MacroExpr | variables.rs:4:14:4:20 | CallExpr | | +| variables.rs:4:14:4:20 | MacroExpr | variables.rs:4:14:4:20 | $crate::io::_print(...) | | | variables.rs:4:14:4:20 | MacroStmts | variables.rs:4:14:4:20 | ExprStmt | | +| variables.rs:4:14:4:20 | { ... } | variables.rs:4:5:4:21 | MacroExpr | | | variables.rs:4:20:4:20 | s | variables.rs:4:14:4:20 | FormatArgsExpr | | -| variables.rs:7:1:9:1 | enter print_i64 | variables.rs:7:14:7:14 | i | | -| variables.rs:7:1:9:1 | exit print_i64 (normal) | variables.rs:7:1:9:1 | exit print_i64 | | -| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:19 | Param | match | -| variables.rs:7:14:7:19 | Param | variables.rs:8:5:8:22 | ExprStmt | | -| variables.rs:7:22:9:1 | BlockExpr | variables.rs:7:1:9:1 | exit print_i64 (normal) | | +| variables.rs:7:1:9:1 | enter fn print_i64 | variables.rs:7:14:7:14 | i | | +| variables.rs:7:1:9:1 | exit fn print_i64 (normal) | variables.rs:7:1:9:1 | exit fn print_i64 | | +| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:19 | i: i64 | match | +| variables.rs:7:14:7:19 | i: i64 | variables.rs:8:5:8:22 | ExprStmt | | +| variables.rs:7:22:9:1 | { ... } | variables.rs:7:1:9:1 | exit fn print_i64 (normal) | | | variables.rs:8:5:8:21 | $crate::io::_print | variables.rs:8:14:8:17 | "{}\\n" | | -| variables.rs:8:5:8:21 | MacroExpr | variables.rs:7:22:9:1 | BlockExpr | | +| variables.rs:8:5:8:21 | MacroExpr | variables.rs:7:22:9:1 | { ... } | | | variables.rs:8:5:8:22 | ExprStmt | variables.rs:8:14:8:20 | MacroStmts | | | variables.rs:8:14:8:17 | "{}\\n" | variables.rs:8:20:8:20 | i | | -| variables.rs:8:14:8:20 | BlockExpr | variables.rs:8:5:8:21 | MacroExpr | | -| variables.rs:8:14:8:20 | CallExpr | variables.rs:8:14:8:20 | BlockExpr | | +| variables.rs:8:14:8:20 | $crate::io::_print(...) | variables.rs:8:14:8:20 | { ... } | | | variables.rs:8:14:8:20 | ExprStmt | variables.rs:8:5:8:21 | $crate::io::_print | | | variables.rs:8:14:8:20 | FormatArgsExpr | variables.rs:8:14:8:20 | MacroExpr | | -| variables.rs:8:14:8:20 | MacroExpr | variables.rs:8:14:8:20 | CallExpr | | +| variables.rs:8:14:8:20 | MacroExpr | variables.rs:8:14:8:20 | $crate::io::_print(...) | | | variables.rs:8:14:8:20 | MacroStmts | variables.rs:8:14:8:20 | ExprStmt | | +| variables.rs:8:14:8:20 | { ... } | variables.rs:8:5:8:21 | MacroExpr | | | variables.rs:8:20:8:20 | i | variables.rs:8:14:8:20 | FormatArgsExpr | | -| variables.rs:11:1:13:1 | enter print_i64_ref | variables.rs:11:18:11:18 | i | | -| variables.rs:11:1:13:1 | exit print_i64_ref (normal) | variables.rs:11:1:13:1 | exit print_i64_ref | | -| variables.rs:11:18:11:18 | i | variables.rs:11:18:11:24 | Param | match | -| variables.rs:11:18:11:24 | Param | variables.rs:12:5:12:13 | print_i64 | | -| variables.rs:11:27:13:1 | BlockExpr | variables.rs:11:1:13:1 | exit print_i64_ref (normal) | | +| variables.rs:11:1:13:1 | enter fn print_i64_ref | variables.rs:11:18:11:18 | i | | +| variables.rs:11:1:13:1 | exit fn print_i64_ref (normal) | variables.rs:11:1:13:1 | exit fn print_i64_ref | | +| variables.rs:11:18:11:18 | i | variables.rs:11:18:11:24 | i: RefType | match | +| variables.rs:11:18:11:24 | i: RefType | variables.rs:12:5:12:13 | print_i64 | | +| variables.rs:11:27:13:1 | { ... } | variables.rs:11:1:13:1 | exit fn print_i64_ref (normal) | | | variables.rs:12:5:12:13 | print_i64 | variables.rs:12:16:12:16 | i | | -| variables.rs:12:5:12:17 | CallExpr | variables.rs:11:27:13:1 | BlockExpr | | -| variables.rs:12:15:12:16 | * ... | variables.rs:12:5:12:17 | CallExpr | | +| variables.rs:12:5:12:17 | print_i64(...) | variables.rs:11:27:13:1 | { ... } | | +| variables.rs:12:15:12:16 | * ... | variables.rs:12:5:12:17 | print_i64(...) | | | variables.rs:12:16:12:16 | i | variables.rs:12:15:12:16 | * ... | | -| variables.rs:15:1:18:1 | enter immutable_variable | variables.rs:16:5:16:17 | LetStmt | | -| variables.rs:15:1:18:1 | exit immutable_variable (normal) | variables.rs:15:1:18:1 | exit immutable_variable | | -| variables.rs:15:25:18:1 | BlockExpr | variables.rs:15:1:18:1 | exit immutable_variable (normal) | | -| variables.rs:16:5:16:17 | LetStmt | variables.rs:16:14:16:16 | "a" | | +| variables.rs:15:1:18:1 | enter fn immutable_variable | variables.rs:16:5:16:17 | let x1 = ... | | +| variables.rs:15:1:18:1 | exit fn immutable_variable (normal) | variables.rs:15:1:18:1 | exit fn immutable_variable | | +| variables.rs:15:25:18:1 | { ... } | variables.rs:15:1:18:1 | exit fn immutable_variable (normal) | | +| variables.rs:16:5:16:17 | let x1 = ... | variables.rs:16:14:16:16 | "a" | | | variables.rs:16:9:16:10 | x1 | variables.rs:17:5:17:18 | ExprStmt | match | | variables.rs:16:14:16:16 | "a" | variables.rs:16:9:16:10 | x1 | | | variables.rs:17:5:17:13 | print_str | variables.rs:17:15:17:16 | x1 | | -| variables.rs:17:5:17:17 | CallExpr | variables.rs:15:25:18:1 | BlockExpr | | +| variables.rs:17:5:17:17 | print_str(...) | variables.rs:15:25:18:1 | { ... } | | | variables.rs:17:5:17:18 | ExprStmt | variables.rs:17:5:17:13 | print_str | | -| variables.rs:17:15:17:16 | x1 | variables.rs:17:5:17:17 | CallExpr | | -| variables.rs:20:1:25:1 | enter mutable_variable | variables.rs:21:5:21:19 | LetStmt | | -| variables.rs:20:1:25:1 | exit mutable_variable (normal) | variables.rs:20:1:25:1 | exit mutable_variable | | -| variables.rs:20:23:25:1 | BlockExpr | variables.rs:20:1:25:1 | exit mutable_variable (normal) | | -| variables.rs:21:5:21:19 | LetStmt | variables.rs:21:18:21:18 | 4 | | +| variables.rs:17:15:17:16 | x1 | variables.rs:17:5:17:17 | print_str(...) | | +| variables.rs:20:1:25:1 | enter fn mutable_variable | variables.rs:21:5:21:19 | let x2 = ... | | +| variables.rs:20:1:25:1 | exit fn mutable_variable (normal) | variables.rs:20:1:25:1 | exit fn mutable_variable | | +| variables.rs:20:23:25:1 | { ... } | variables.rs:20:1:25:1 | exit fn mutable_variable (normal) | | +| variables.rs:21:5:21:19 | let x2 = ... | variables.rs:21:18:21:18 | 4 | | | variables.rs:21:9:21:14 | x2 | variables.rs:22:5:22:18 | ExprStmt | match | | variables.rs:21:18:21:18 | 4 | variables.rs:21:9:21:14 | x2 | | | variables.rs:22:5:22:13 | print_i64 | variables.rs:22:15:22:16 | x2 | | -| variables.rs:22:5:22:17 | CallExpr | variables.rs:23:5:23:11 | ExprStmt | | +| variables.rs:22:5:22:17 | print_i64(...) | variables.rs:23:5:23:11 | ExprStmt | | | variables.rs:22:5:22:18 | ExprStmt | variables.rs:22:5:22:13 | print_i64 | | -| variables.rs:22:15:22:16 | x2 | variables.rs:22:5:22:17 | CallExpr | | +| variables.rs:22:15:22:16 | x2 | variables.rs:22:5:22:17 | print_i64(...) | | | variables.rs:23:5:23:6 | x2 | variables.rs:23:10:23:10 | 5 | | | variables.rs:23:5:23:10 | ... = ... | variables.rs:24:5:24:18 | ExprStmt | | | variables.rs:23:5:23:11 | ExprStmt | variables.rs:23:5:23:6 | x2 | | | variables.rs:23:10:23:10 | 5 | variables.rs:23:5:23:10 | ... = ... | | | variables.rs:24:5:24:13 | print_i64 | variables.rs:24:15:24:16 | x2 | | -| variables.rs:24:5:24:17 | CallExpr | variables.rs:20:23:25:1 | BlockExpr | | +| variables.rs:24:5:24:17 | print_i64(...) | variables.rs:20:23:25:1 | { ... } | | | variables.rs:24:5:24:18 | ExprStmt | variables.rs:24:5:24:13 | print_i64 | | -| variables.rs:24:15:24:16 | x2 | variables.rs:24:5:24:17 | CallExpr | | -| variables.rs:27:1:32:1 | enter mutable_variable_immutable_borrow | variables.rs:28:5:28:18 | LetStmt | | -| variables.rs:27:1:32:1 | exit mutable_variable_immutable_borrow (normal) | variables.rs:27:1:32:1 | exit mutable_variable_immutable_borrow | | -| variables.rs:27:40:32:1 | BlockExpr | variables.rs:27:1:32:1 | exit mutable_variable_immutable_borrow (normal) | | -| variables.rs:28:5:28:18 | LetStmt | variables.rs:28:17:28:17 | 1 | | +| variables.rs:24:15:24:16 | x2 | variables.rs:24:5:24:17 | print_i64(...) | | +| variables.rs:27:1:32:1 | enter fn mutable_variable_immutable_borrow | variables.rs:28:5:28:18 | let x = ... | | +| variables.rs:27:1:32:1 | exit fn mutable_variable_immutable_borrow (normal) | variables.rs:27:1:32:1 | exit fn mutable_variable_immutable_borrow | | +| variables.rs:27:40:32:1 | { ... } | variables.rs:27:1:32:1 | exit fn mutable_variable_immutable_borrow (normal) | | +| variables.rs:28:5:28:18 | let x = ... | variables.rs:28:17:28:17 | 1 | | | variables.rs:28:9:28:13 | x | variables.rs:29:5:29:22 | ExprStmt | match | | variables.rs:28:17:28:17 | 1 | variables.rs:28:9:28:13 | x | | | variables.rs:29:5:29:17 | print_i64_ref | variables.rs:29:20:29:20 | x | | -| variables.rs:29:5:29:21 | CallExpr | variables.rs:30:5:30:10 | ExprStmt | | +| variables.rs:29:5:29:21 | print_i64_ref(...) | variables.rs:30:5:30:10 | ExprStmt | | | variables.rs:29:5:29:22 | ExprStmt | variables.rs:29:5:29:17 | print_i64_ref | | -| variables.rs:29:19:29:20 | RefExpr | variables.rs:29:5:29:21 | CallExpr | | -| variables.rs:29:20:29:20 | x | variables.rs:29:19:29:20 | RefExpr | | +| variables.rs:29:19:29:20 | &... | variables.rs:29:5:29:21 | print_i64_ref(...) | | +| variables.rs:29:20:29:20 | x | variables.rs:29:19:29:20 | &... | | | variables.rs:30:5:30:5 | x | variables.rs:30:9:30:9 | 2 | | | variables.rs:30:5:30:9 | ... = ... | variables.rs:31:5:31:22 | ExprStmt | | | variables.rs:30:5:30:10 | ExprStmt | variables.rs:30:5:30:5 | x | | | variables.rs:30:9:30:9 | 2 | variables.rs:30:5:30:9 | ... = ... | | | variables.rs:31:5:31:17 | print_i64_ref | variables.rs:31:20:31:20 | x | | -| variables.rs:31:5:31:21 | CallExpr | variables.rs:27:40:32:1 | BlockExpr | | +| variables.rs:31:5:31:21 | print_i64_ref(...) | variables.rs:27:40:32:1 | { ... } | | | variables.rs:31:5:31:22 | ExprStmt | variables.rs:31:5:31:17 | print_i64_ref | | -| variables.rs:31:19:31:20 | RefExpr | variables.rs:31:5:31:21 | CallExpr | | -| variables.rs:31:20:31:20 | x | variables.rs:31:19:31:20 | RefExpr | | -| variables.rs:34:1:40:1 | enter variable_shadow1 | variables.rs:35:5:35:15 | LetStmt | | -| variables.rs:34:1:40:1 | exit variable_shadow1 (normal) | variables.rs:34:1:40:1 | exit variable_shadow1 | | -| variables.rs:34:23:40:1 | BlockExpr | variables.rs:34:1:40:1 | exit variable_shadow1 (normal) | | -| variables.rs:35:5:35:15 | LetStmt | variables.rs:35:14:35:14 | 1 | | +| variables.rs:31:19:31:20 | &... | variables.rs:31:5:31:21 | print_i64_ref(...) | | +| variables.rs:31:20:31:20 | x | variables.rs:31:19:31:20 | &... | | +| variables.rs:34:1:40:1 | enter fn variable_shadow1 | variables.rs:35:5:35:15 | let x3 = ... | | +| variables.rs:34:1:40:1 | exit fn variable_shadow1 (normal) | variables.rs:34:1:40:1 | exit fn variable_shadow1 | | +| variables.rs:34:23:40:1 | { ... } | variables.rs:34:1:40:1 | exit fn variable_shadow1 (normal) | | +| variables.rs:35:5:35:15 | let x3 = ... | variables.rs:35:14:35:14 | 1 | | | variables.rs:35:9:35:10 | x3 | variables.rs:36:5:36:18 | ExprStmt | match | | variables.rs:35:14:35:14 | 1 | variables.rs:35:9:35:10 | x3 | | | variables.rs:36:5:36:13 | print_i64 | variables.rs:36:15:36:16 | x3 | | -| variables.rs:36:5:36:17 | CallExpr | variables.rs:37:5:38:15 | LetStmt | | +| variables.rs:36:5:36:17 | print_i64(...) | variables.rs:37:5:38:15 | let x3 = ... | | | variables.rs:36:5:36:18 | ExprStmt | variables.rs:36:5:36:13 | print_i64 | | -| variables.rs:36:15:36:16 | x3 | variables.rs:36:5:36:17 | CallExpr | | -| variables.rs:37:5:38:15 | LetStmt | variables.rs:38:9:38:10 | x3 | | +| variables.rs:36:15:36:16 | x3 | variables.rs:36:5:36:17 | print_i64(...) | | +| variables.rs:37:5:38:15 | let x3 = ... | variables.rs:38:9:38:10 | x3 | | | variables.rs:37:9:37:10 | x3 | variables.rs:39:5:39:18 | ExprStmt | match | | variables.rs:38:9:38:10 | x3 | variables.rs:38:14:38:14 | 1 | | | variables.rs:38:9:38:14 | ... + ... | variables.rs:37:9:37:10 | x3 | | | variables.rs:38:14:38:14 | 1 | variables.rs:38:9:38:14 | ... + ... | | | variables.rs:39:5:39:13 | print_i64 | variables.rs:39:15:39:16 | x3 | | -| variables.rs:39:5:39:17 | CallExpr | variables.rs:34:23:40:1 | BlockExpr | | +| variables.rs:39:5:39:17 | print_i64(...) | variables.rs:34:23:40:1 | { ... } | | | variables.rs:39:5:39:18 | ExprStmt | variables.rs:39:5:39:13 | print_i64 | | -| variables.rs:39:15:39:16 | x3 | variables.rs:39:5:39:17 | CallExpr | | -| variables.rs:42:1:50:1 | enter variable_shadow2 | variables.rs:43:5:43:17 | LetStmt | | -| variables.rs:42:1:50:1 | exit variable_shadow2 (normal) | variables.rs:42:1:50:1 | exit variable_shadow2 | | -| variables.rs:42:23:50:1 | BlockExpr | variables.rs:42:1:50:1 | exit variable_shadow2 (normal) | | -| variables.rs:43:5:43:17 | LetStmt | variables.rs:43:14:43:16 | "a" | | +| variables.rs:39:15:39:16 | x3 | variables.rs:39:5:39:17 | print_i64(...) | | +| variables.rs:42:1:50:1 | enter fn variable_shadow2 | variables.rs:43:5:43:17 | let x4 = ... | | +| variables.rs:42:1:50:1 | exit fn variable_shadow2 (normal) | variables.rs:42:1:50:1 | exit fn variable_shadow2 | | +| variables.rs:42:23:50:1 | { ... } | variables.rs:42:1:50:1 | exit fn variable_shadow2 (normal) | | +| variables.rs:43:5:43:17 | let x4 = ... | variables.rs:43:14:43:16 | "a" | | | variables.rs:43:9:43:10 | x4 | variables.rs:44:5:44:18 | ExprStmt | match | | variables.rs:43:14:43:16 | "a" | variables.rs:43:9:43:10 | x4 | | | variables.rs:44:5:44:13 | print_str | variables.rs:44:15:44:16 | x4 | | -| variables.rs:44:5:44:17 | CallExpr | variables.rs:45:5:48:5 | ExprStmt | | +| variables.rs:44:5:44:17 | print_str(...) | variables.rs:45:5:48:5 | ExprStmt | | | variables.rs:44:5:44:18 | ExprStmt | variables.rs:44:5:44:13 | print_str | | -| variables.rs:44:15:44:16 | x4 | variables.rs:44:5:44:17 | CallExpr | | -| variables.rs:45:5:48:5 | BlockExpr | variables.rs:49:5:49:18 | ExprStmt | | -| variables.rs:45:5:48:5 | ExprStmt | variables.rs:46:9:46:21 | LetStmt | | -| variables.rs:46:9:46:21 | LetStmt | variables.rs:46:18:46:20 | "b" | | +| variables.rs:44:15:44:16 | x4 | variables.rs:44:5:44:17 | print_str(...) | | +| variables.rs:45:5:48:5 | ExprStmt | variables.rs:46:9:46:21 | let x4 = ... | | +| variables.rs:45:5:48:5 | { ... } | variables.rs:49:5:49:18 | ExprStmt | | +| variables.rs:46:9:46:21 | let x4 = ... | variables.rs:46:18:46:20 | "b" | | | variables.rs:46:13:46:14 | x4 | variables.rs:47:9:47:22 | ExprStmt | match | | variables.rs:46:18:46:20 | "b" | variables.rs:46:13:46:14 | x4 | | | variables.rs:47:9:47:17 | print_str | variables.rs:47:19:47:20 | x4 | | -| variables.rs:47:9:47:21 | CallExpr | variables.rs:45:5:48:5 | BlockExpr | | +| variables.rs:47:9:47:21 | print_str(...) | variables.rs:45:5:48:5 | { ... } | | | variables.rs:47:9:47:22 | ExprStmt | variables.rs:47:9:47:17 | print_str | | -| variables.rs:47:19:47:20 | x4 | variables.rs:47:9:47:21 | CallExpr | | +| variables.rs:47:19:47:20 | x4 | variables.rs:47:9:47:21 | print_str(...) | | | variables.rs:49:5:49:13 | print_str | variables.rs:49:15:49:16 | x4 | | -| variables.rs:49:5:49:17 | CallExpr | variables.rs:42:23:50:1 | BlockExpr | | +| variables.rs:49:5:49:17 | print_str(...) | variables.rs:42:23:50:1 | { ... } | | | variables.rs:49:5:49:18 | ExprStmt | variables.rs:49:5:49:13 | print_str | | -| variables.rs:49:15:49:16 | x4 | variables.rs:49:5:49:17 | CallExpr | | -| variables.rs:57:1:72:1 | enter let_pattern1 | variables.rs:58:5:67:47 | LetStmt | | -| variables.rs:57:1:72:1 | exit let_pattern1 (normal) | variables.rs:57:1:72:1 | exit let_pattern1 | | -| variables.rs:57:19:72:1 | BlockExpr | variables.rs:57:1:72:1 | exit let_pattern1 (normal) | | -| variables.rs:58:5:67:47 | LetStmt | variables.rs:67:11:67:13 | "a" | | +| variables.rs:49:15:49:16 | x4 | variables.rs:49:5:49:17 | print_str(...) | | +| variables.rs:57:1:72:1 | enter fn let_pattern1 | variables.rs:58:5:67:47 | let TuplePat = ... | | +| variables.rs:57:1:72:1 | exit fn let_pattern1 (normal) | variables.rs:57:1:72:1 | exit fn let_pattern1 | | +| variables.rs:57:19:72:1 | { ... } | variables.rs:57:1:72:1 | exit fn let_pattern1 (normal) | | +| variables.rs:58:5:67:47 | let TuplePat = ... | variables.rs:67:11:67:13 | "a" | | | variables.rs:58:9:67:5 | TuplePat | variables.rs:59:9:62:9 | TuplePat | match | | variables.rs:59:9:62:9 | TuplePat | variables.rs:60:13:60:14 | a1 | match | | variables.rs:60:13:60:14 | a1 | variables.rs:61:13:61:14 | b1 | match | -| variables.rs:61:13:61:14 | b1 | variables.rs:63:9:66:9 | RecordPat | match | -| variables.rs:63:9:66:9 | RecordPat | variables.rs:64:13:64:13 | x | match | +| variables.rs:61:13:61:14 | b1 | variables.rs:63:9:66:9 | Point {...} | match | +| variables.rs:63:9:66:9 | Point {...} | variables.rs:64:13:64:13 | x | match | | variables.rs:64:13:64:13 | x | variables.rs:65:13:65:13 | y | match | | variables.rs:65:13:65:13 | y | variables.rs:68:5:68:18 | ExprStmt | match | | variables.rs:67:9:67:46 | TupleExpr | variables.rs:58:9:67:5 | TuplePat | | | variables.rs:67:10:67:19 | TupleExpr | variables.rs:67:33:67:35 | "x" | | | variables.rs:67:11:67:13 | "a" | variables.rs:67:16:67:18 | "b" | | | variables.rs:67:16:67:18 | "b" | variables.rs:67:10:67:19 | TupleExpr | | -| variables.rs:67:22:67:45 | RecordExpr | variables.rs:67:9:67:46 | TupleExpr | | +| variables.rs:67:22:67:45 | Point {...} | variables.rs:67:9:67:46 | TupleExpr | | | variables.rs:67:33:67:35 | "x" | variables.rs:67:41:67:43 | "y" | | -| variables.rs:67:41:67:43 | "y" | variables.rs:67:22:67:45 | RecordExpr | | +| variables.rs:67:41:67:43 | "y" | variables.rs:67:22:67:45 | Point {...} | | | variables.rs:68:5:68:13 | print_str | variables.rs:68:15:68:16 | a1 | | -| variables.rs:68:5:68:17 | CallExpr | variables.rs:69:5:69:18 | ExprStmt | | +| variables.rs:68:5:68:17 | print_str(...) | variables.rs:69:5:69:18 | ExprStmt | | | variables.rs:68:5:68:18 | ExprStmt | variables.rs:68:5:68:13 | print_str | | -| variables.rs:68:15:68:16 | a1 | variables.rs:68:5:68:17 | CallExpr | | +| variables.rs:68:15:68:16 | a1 | variables.rs:68:5:68:17 | print_str(...) | | | variables.rs:69:5:69:13 | print_str | variables.rs:69:15:69:16 | b1 | | -| variables.rs:69:5:69:17 | CallExpr | variables.rs:70:5:70:17 | ExprStmt | | +| variables.rs:69:5:69:17 | print_str(...) | variables.rs:70:5:70:17 | ExprStmt | | | variables.rs:69:5:69:18 | ExprStmt | variables.rs:69:5:69:13 | print_str | | -| variables.rs:69:15:69:16 | b1 | variables.rs:69:5:69:17 | CallExpr | | +| variables.rs:69:15:69:16 | b1 | variables.rs:69:5:69:17 | print_str(...) | | | variables.rs:70:5:70:13 | print_str | variables.rs:70:15:70:15 | x | | -| variables.rs:70:5:70:16 | CallExpr | variables.rs:71:5:71:17 | ExprStmt | | +| variables.rs:70:5:70:16 | print_str(...) | variables.rs:71:5:71:17 | ExprStmt | | | variables.rs:70:5:70:17 | ExprStmt | variables.rs:70:5:70:13 | print_str | | -| variables.rs:70:15:70:15 | x | variables.rs:70:5:70:16 | CallExpr | | +| variables.rs:70:15:70:15 | x | variables.rs:70:5:70:16 | print_str(...) | | | variables.rs:71:5:71:13 | print_str | variables.rs:71:15:71:15 | y | | -| variables.rs:71:5:71:16 | CallExpr | variables.rs:57:19:72:1 | BlockExpr | | +| variables.rs:71:5:71:16 | print_str(...) | variables.rs:57:19:72:1 | { ... } | | | variables.rs:71:5:71:17 | ExprStmt | variables.rs:71:5:71:13 | print_str | | -| variables.rs:71:15:71:15 | y | variables.rs:71:5:71:16 | CallExpr | | -| variables.rs:74:1:82:1 | enter let_pattern2 | variables.rs:75:5:75:38 | LetStmt | | -| variables.rs:74:1:82:1 | exit let_pattern2 (normal) | variables.rs:74:1:82:1 | exit let_pattern2 | | -| variables.rs:74:19:82:1 | BlockExpr | variables.rs:74:1:82:1 | exit let_pattern2 (normal) | | -| variables.rs:75:5:75:38 | LetStmt | variables.rs:75:25:75:27 | "a" | | -| variables.rs:75:9:75:10 | p1 | variables.rs:76:5:79:11 | LetStmt | match | -| variables.rs:75:14:75:37 | RecordExpr | variables.rs:75:9:75:10 | p1 | | +| variables.rs:71:15:71:15 | y | variables.rs:71:5:71:16 | print_str(...) | | +| variables.rs:74:1:82:1 | enter fn let_pattern2 | variables.rs:75:5:75:38 | let p1 = ... | | +| variables.rs:74:1:82:1 | exit fn let_pattern2 (normal) | variables.rs:74:1:82:1 | exit fn let_pattern2 | | +| variables.rs:74:19:82:1 | { ... } | variables.rs:74:1:82:1 | exit fn let_pattern2 (normal) | | +| variables.rs:75:5:75:38 | let p1 = ... | variables.rs:75:25:75:27 | "a" | | +| variables.rs:75:9:75:10 | p1 | variables.rs:76:5:79:11 | let Point {...} = ... | match | +| variables.rs:75:14:75:37 | Point {...} | variables.rs:75:9:75:10 | p1 | | | variables.rs:75:25:75:27 | "a" | variables.rs:75:33:75:35 | "b" | | -| variables.rs:75:33:75:35 | "b" | variables.rs:75:14:75:37 | RecordExpr | | -| variables.rs:76:5:79:11 | LetStmt | variables.rs:79:9:79:10 | p1 | | -| variables.rs:76:9:79:5 | RecordPat | variables.rs:77:12:77:13 | a2 | match | +| variables.rs:75:33:75:35 | "b" | variables.rs:75:14:75:37 | Point {...} | | +| variables.rs:76:5:79:11 | let Point {...} = ... | variables.rs:79:9:79:10 | p1 | | +| variables.rs:76:9:79:5 | Point {...} | variables.rs:77:12:77:13 | a2 | match | | variables.rs:77:12:77:13 | a2 | variables.rs:78:12:78:13 | b2 | match | | variables.rs:78:12:78:13 | b2 | variables.rs:80:5:80:18 | ExprStmt | match | -| variables.rs:79:9:79:10 | p1 | variables.rs:76:9:79:5 | RecordPat | | +| variables.rs:79:9:79:10 | p1 | variables.rs:76:9:79:5 | Point {...} | | | variables.rs:80:5:80:13 | print_str | variables.rs:80:15:80:16 | a2 | | -| variables.rs:80:5:80:17 | CallExpr | variables.rs:81:5:81:18 | ExprStmt | | +| variables.rs:80:5:80:17 | print_str(...) | variables.rs:81:5:81:18 | ExprStmt | | | variables.rs:80:5:80:18 | ExprStmt | variables.rs:80:5:80:13 | print_str | | -| variables.rs:80:15:80:16 | a2 | variables.rs:80:5:80:17 | CallExpr | | +| variables.rs:80:15:80:16 | a2 | variables.rs:80:5:80:17 | print_str(...) | | | variables.rs:81:5:81:13 | print_str | variables.rs:81:15:81:16 | b2 | | -| variables.rs:81:5:81:17 | CallExpr | variables.rs:74:19:82:1 | BlockExpr | | +| variables.rs:81:5:81:17 | print_str(...) | variables.rs:74:19:82:1 | { ... } | | | variables.rs:81:5:81:18 | ExprStmt | variables.rs:81:5:81:13 | print_str | | -| variables.rs:81:15:81:16 | b2 | variables.rs:81:5:81:17 | CallExpr | | -| variables.rs:84:1:91:1 | enter let_pattern3 | variables.rs:85:5:85:42 | LetStmt | | -| variables.rs:84:1:91:1 | exit let_pattern3 (normal) | variables.rs:84:1:91:1 | exit let_pattern3 | | -| variables.rs:84:19:91:1 | BlockExpr | variables.rs:84:1:91:1 | exit let_pattern3 (normal) | | -| variables.rs:85:5:85:42 | LetStmt | variables.rs:85:14:85:17 | Some | | -| variables.rs:85:9:85:10 | s1 | variables.rs:87:8:88:12 | LetExpr | match | +| variables.rs:81:15:81:16 | b2 | variables.rs:81:5:81:17 | print_str(...) | | +| variables.rs:84:1:91:1 | enter fn let_pattern3 | variables.rs:85:5:85:42 | let s1 = ... | | +| variables.rs:84:1:91:1 | exit fn let_pattern3 (normal) | variables.rs:84:1:91:1 | exit fn let_pattern3 | | +| variables.rs:84:19:91:1 | { ... } | variables.rs:84:1:91:1 | exit fn let_pattern3 (normal) | | +| variables.rs:85:5:85:42 | let s1 = ... | variables.rs:85:14:85:17 | Some | | +| variables.rs:85:9:85:10 | s1 | variables.rs:87:8:88:12 | let TupleStructPat = ... | match | | variables.rs:85:14:85:17 | Some | variables.rs:85:19:85:30 | String::from | | -| variables.rs:85:14:85:41 | CallExpr | variables.rs:85:9:85:10 | s1 | | +| variables.rs:85:14:85:41 | Some(...) | variables.rs:85:9:85:10 | s1 | | | variables.rs:85:19:85:30 | String::from | variables.rs:85:32:85:39 | "Hello!" | | -| variables.rs:85:19:85:40 | CallExpr | variables.rs:85:14:85:41 | CallExpr | | -| variables.rs:85:32:85:39 | "Hello!" | variables.rs:85:19:85:40 | CallExpr | | -| variables.rs:87:5:90:5 | IfExpr | variables.rs:84:19:91:1 | BlockExpr | | -| variables.rs:87:8:88:12 | LetExpr | variables.rs:88:11:88:12 | s1 | | -| variables.rs:87:12:87:23 | TupleStructPat | variables.rs:87:5:90:5 | IfExpr | no-match | +| variables.rs:85:19:85:40 | String::from(...) | variables.rs:85:14:85:41 | Some(...) | | +| variables.rs:85:32:85:39 | "Hello!" | variables.rs:85:19:85:40 | String::from(...) | | +| variables.rs:87:5:90:5 | if ... { ... } | variables.rs:84:19:91:1 | { ... } | | +| variables.rs:87:8:88:12 | let TupleStructPat = ... | variables.rs:88:11:88:12 | s1 | | +| variables.rs:87:12:87:23 | TupleStructPat | variables.rs:87:5:90:5 | if ... { ... } | no-match | | variables.rs:87:12:87:23 | TupleStructPat | variables.rs:87:17:87:22 | s2 | match | | variables.rs:87:17:87:22 | s2 | variables.rs:89:9:89:22 | ExprStmt | match | | variables.rs:88:11:88:12 | s1 | variables.rs:87:12:87:23 | TupleStructPat | | -| variables.rs:88:14:90:5 | BlockExpr | variables.rs:87:5:90:5 | IfExpr | | +| variables.rs:88:14:90:5 | { ... } | variables.rs:87:5:90:5 | if ... { ... } | | | variables.rs:89:9:89:17 | print_str | variables.rs:89:19:89:20 | s2 | | -| variables.rs:89:9:89:21 | CallExpr | variables.rs:88:14:90:5 | BlockExpr | | +| variables.rs:89:9:89:21 | print_str(...) | variables.rs:88:14:90:5 | { ... } | | | variables.rs:89:9:89:22 | ExprStmt | variables.rs:89:9:89:17 | print_str | | -| variables.rs:89:19:89:20 | s2 | variables.rs:89:9:89:21 | CallExpr | | -| variables.rs:93:1:99:1 | enter let_pattern4 | variables.rs:94:5:97:10 | LetStmt | | -| variables.rs:93:1:99:1 | exit let_pattern4 (normal) | variables.rs:93:1:99:1 | exit let_pattern4 | | -| variables.rs:93:19:99:1 | BlockExpr | variables.rs:93:1:99:1 | exit let_pattern4 (normal) | | -| variables.rs:94:5:97:10 | LetStmt | variables.rs:94:34:94:37 | Some | | +| variables.rs:89:19:89:20 | s2 | variables.rs:89:9:89:21 | print_str(...) | | +| variables.rs:93:1:99:1 | enter fn let_pattern4 | variables.rs:94:5:97:10 | let TupleStructPat = ... else { ... } | | +| variables.rs:93:1:99:1 | exit fn let_pattern4 (normal) | variables.rs:93:1:99:1 | exit fn let_pattern4 | | +| variables.rs:93:19:99:1 | { ... } | variables.rs:93:1:99:1 | exit fn let_pattern4 (normal) | | +| variables.rs:94:5:97:10 | let TupleStructPat = ... else { ... } | variables.rs:94:34:94:37 | Some | | | variables.rs:94:9:94:16 | TupleStructPat | variables.rs:94:14:94:15 | x5 | match | | variables.rs:94:9:94:16 | TupleStructPat | variables.rs:96:13:96:19 | MacroStmts | no-match | | variables.rs:94:14:94:15 | x5 | variables.rs:98:5:98:18 | ExprStmt | match | | variables.rs:94:34:94:37 | Some | variables.rs:94:39:94:42 | "x5" | | -| variables.rs:94:34:94:43 | CallExpr | variables.rs:94:9:94:16 | TupleStructPat | | -| variables.rs:94:39:94:42 | "x5" | variables.rs:94:34:94:43 | CallExpr | | -| variables.rs:96:13:96:19 | "not yet implemented" | variables.rs:96:13:96:19 | CallExpr | | +| variables.rs:94:34:94:43 | Some(...) | variables.rs:94:9:94:16 | TupleStructPat | | +| variables.rs:94:39:94:42 | "x5" | variables.rs:94:34:94:43 | Some(...) | | +| variables.rs:96:13:96:19 | "not yet implemented" | variables.rs:96:13:96:19 | $crate::panicking::panic(...) | | | variables.rs:96:13:96:19 | $crate::panicking::panic | variables.rs:96:13:96:19 | "not yet implemented" | | -| variables.rs:96:13:96:19 | CallExpr | variables.rs:96:13:96:19 | MacroExpr | | -| variables.rs:96:13:96:19 | MacroExpr | variables.rs:95:14:97:9 | BlockExpr | | +| variables.rs:96:13:96:19 | $crate::panicking::panic(...) | variables.rs:96:13:96:19 | MacroExpr | | +| variables.rs:96:13:96:19 | MacroExpr | variables.rs:95:14:97:9 | { ... } | | | variables.rs:96:13:96:19 | MacroStmts | variables.rs:96:13:96:19 | $crate::panicking::panic | | | variables.rs:98:5:98:13 | print_str | variables.rs:98:15:98:16 | x5 | | -| variables.rs:98:5:98:17 | CallExpr | variables.rs:93:19:99:1 | BlockExpr | | +| variables.rs:98:5:98:17 | print_str(...) | variables.rs:93:19:99:1 | { ... } | | | variables.rs:98:5:98:18 | ExprStmt | variables.rs:98:5:98:13 | print_str | | -| variables.rs:98:15:98:16 | x5 | variables.rs:98:5:98:17 | CallExpr | | -| variables.rs:101:1:108:1 | enter let_pattern5 | variables.rs:102:5:102:42 | LetStmt | | -| variables.rs:101:1:108:1 | exit let_pattern5 (normal) | variables.rs:101:1:108:1 | exit let_pattern5 | | -| variables.rs:101:19:108:1 | BlockExpr | variables.rs:101:1:108:1 | exit let_pattern5 (normal) | | -| variables.rs:102:5:102:42 | LetStmt | variables.rs:102:14:102:17 | Some | | -| variables.rs:102:9:102:10 | s1 | variables.rs:104:11:105:12 | LetExpr | match | +| variables.rs:98:15:98:16 | x5 | variables.rs:98:5:98:17 | print_str(...) | | +| variables.rs:101:1:108:1 | enter fn let_pattern5 | variables.rs:102:5:102:42 | let s1 = ... | | +| variables.rs:101:1:108:1 | exit fn let_pattern5 (normal) | variables.rs:101:1:108:1 | exit fn let_pattern5 | | +| variables.rs:101:19:108:1 | { ... } | variables.rs:101:1:108:1 | exit fn let_pattern5 (normal) | | +| variables.rs:102:5:102:42 | let s1 = ... | variables.rs:102:14:102:17 | Some | | +| variables.rs:102:9:102:10 | s1 | variables.rs:104:11:105:12 | let TupleStructPat = ... | match | | variables.rs:102:14:102:17 | Some | variables.rs:102:19:102:30 | String::from | | -| variables.rs:102:14:102:41 | CallExpr | variables.rs:102:9:102:10 | s1 | | +| variables.rs:102:14:102:41 | Some(...) | variables.rs:102:9:102:10 | s1 | | | variables.rs:102:19:102:30 | String::from | variables.rs:102:32:102:39 | "Hello!" | | -| variables.rs:102:19:102:40 | CallExpr | variables.rs:102:14:102:41 | CallExpr | | -| variables.rs:102:32:102:39 | "Hello!" | variables.rs:102:19:102:40 | CallExpr | | -| variables.rs:104:5:107:5 | WhileExpr | variables.rs:101:19:108:1 | BlockExpr | | -| variables.rs:104:11:105:12 | LetExpr | variables.rs:105:11:105:12 | s1 | | -| variables.rs:104:15:104:26 | TupleStructPat | variables.rs:104:5:107:5 | WhileExpr | no-match | +| variables.rs:102:19:102:40 | String::from(...) | variables.rs:102:14:102:41 | Some(...) | | +| variables.rs:102:32:102:39 | "Hello!" | variables.rs:102:19:102:40 | String::from(...) | | +| variables.rs:104:5:107:5 | while ... { ... } | variables.rs:101:19:108:1 | { ... } | | +| variables.rs:104:11:105:12 | let TupleStructPat = ... | variables.rs:105:11:105:12 | s1 | | +| variables.rs:104:15:104:26 | TupleStructPat | variables.rs:104:5:107:5 | while ... { ... } | no-match | | variables.rs:104:15:104:26 | TupleStructPat | variables.rs:104:20:104:25 | s2 | match | | variables.rs:104:20:104:25 | s2 | variables.rs:106:9:106:22 | ExprStmt | match | | variables.rs:105:11:105:12 | s1 | variables.rs:104:15:104:26 | TupleStructPat | | -| variables.rs:105:14:107:5 | BlockExpr | variables.rs:104:11:105:12 | LetExpr | | +| variables.rs:105:14:107:5 | { ... } | variables.rs:104:11:105:12 | let TupleStructPat = ... | | | variables.rs:106:9:106:17 | print_str | variables.rs:106:19:106:20 | s2 | | -| variables.rs:106:9:106:21 | CallExpr | variables.rs:105:14:107:5 | BlockExpr | | +| variables.rs:106:9:106:21 | print_str(...) | variables.rs:105:14:107:5 | { ... } | | | variables.rs:106:9:106:22 | ExprStmt | variables.rs:106:9:106:17 | print_str | | -| variables.rs:106:19:106:20 | s2 | variables.rs:106:9:106:21 | CallExpr | | -| variables.rs:110:1:125:1 | enter match_pattern1 | variables.rs:111:5:111:21 | LetStmt | | -| variables.rs:110:1:125:1 | exit match_pattern1 (normal) | variables.rs:110:1:125:1 | exit match_pattern1 | | -| variables.rs:110:21:125:1 | BlockExpr | variables.rs:110:1:125:1 | exit match_pattern1 (normal) | | -| variables.rs:111:5:111:21 | LetStmt | variables.rs:111:14:111:17 | Some | | -| variables.rs:111:9:111:10 | x6 | variables.rs:112:5:112:16 | LetStmt | match | +| variables.rs:106:19:106:20 | s2 | variables.rs:106:9:106:21 | print_str(...) | | +| variables.rs:110:1:125:1 | enter fn match_pattern1 | variables.rs:111:5:111:21 | let x6 = ... | | +| variables.rs:110:1:125:1 | exit fn match_pattern1 (normal) | variables.rs:110:1:125:1 | exit fn match_pattern1 | | +| variables.rs:110:21:125:1 | { ... } | variables.rs:110:1:125:1 | exit fn match_pattern1 (normal) | | +| variables.rs:111:5:111:21 | let x6 = ... | variables.rs:111:14:111:17 | Some | | +| variables.rs:111:9:111:10 | x6 | variables.rs:112:5:112:16 | let y1 = ... | match | | variables.rs:111:14:111:17 | Some | variables.rs:111:19:111:19 | 5 | | -| variables.rs:111:14:111:20 | CallExpr | variables.rs:111:9:111:10 | x6 | | -| variables.rs:111:19:111:19 | 5 | variables.rs:111:14:111:20 | CallExpr | | -| variables.rs:112:5:112:16 | LetStmt | variables.rs:112:14:112:15 | 10 | | +| variables.rs:111:14:111:20 | Some(...) | variables.rs:111:9:111:10 | x6 | | +| variables.rs:111:19:111:19 | 5 | variables.rs:111:14:111:20 | Some(...) | | +| variables.rs:112:5:112:16 | let y1 = ... | variables.rs:112:14:112:15 | 10 | | | variables.rs:112:9:112:10 | y1 | variables.rs:114:5:122:5 | ExprStmt | match | | variables.rs:112:14:112:15 | 10 | variables.rs:112:9:112:10 | y1 | | | variables.rs:114:5:122:5 | ExprStmt | variables.rs:114:11:114:12 | x6 | | -| variables.rs:114:5:122:5 | MatchExpr | variables.rs:124:5:124:18 | ExprStmt | | +| variables.rs:114:5:122:5 | match ... { ... } | variables.rs:124:5:124:18 | ExprStmt | | | variables.rs:114:11:114:12 | x6 | variables.rs:115:9:115:16 | TupleStructPat | | | variables.rs:115:9:115:16 | TupleStructPat | variables.rs:115:14:115:15 | 50 | match | | variables.rs:115:9:115:16 | TupleStructPat | variables.rs:116:9:116:16 | TupleStructPat | no-match | -| variables.rs:115:14:115:15 | 50 | variables.rs:115:14:115:15 | LiteralPat | | -| variables.rs:115:14:115:15 | LiteralPat | variables.rs:115:21:115:29 | print_str | match | -| variables.rs:115:14:115:15 | LiteralPat | variables.rs:116:9:116:16 | TupleStructPat | no-match | +| variables.rs:115:14:115:15 | 50 | variables.rs:115:14:115:15 | 50 | | +| variables.rs:115:14:115:15 | 50 | variables.rs:115:21:115:29 | print_str | match | +| variables.rs:115:14:115:15 | 50 | variables.rs:116:9:116:16 | TupleStructPat | no-match | | variables.rs:115:21:115:29 | print_str | variables.rs:115:31:115:38 | "Got 50" | | -| variables.rs:115:21:115:39 | CallExpr | variables.rs:114:5:122:5 | MatchExpr | | -| variables.rs:115:31:115:38 | "Got 50" | variables.rs:115:21:115:39 | CallExpr | | +| variables.rs:115:21:115:39 | print_str(...) | variables.rs:114:5:122:5 | match ... { ... } | | +| variables.rs:115:31:115:38 | "Got 50" | variables.rs:115:21:115:39 | print_str(...) | | | variables.rs:116:9:116:16 | TupleStructPat | variables.rs:116:14:116:15 | y1 | match | | variables.rs:116:9:116:16 | TupleStructPat | variables.rs:121:9:121:12 | None | no-match | | variables.rs:116:14:116:15 | y1 | variables.rs:119:13:119:21 | print_i64 | match | -| variables.rs:118:9:120:9 | BlockExpr | variables.rs:114:5:122:5 | MatchExpr | | +| variables.rs:118:9:120:9 | { ... } | variables.rs:114:5:122:5 | match ... { ... } | | | variables.rs:119:13:119:21 | print_i64 | variables.rs:119:23:119:24 | y1 | | -| variables.rs:119:13:119:25 | CallExpr | variables.rs:118:9:120:9 | BlockExpr | | -| variables.rs:119:23:119:24 | y1 | variables.rs:119:13:119:25 | CallExpr | | +| variables.rs:119:13:119:25 | print_i64(...) | variables.rs:118:9:120:9 | { ... } | | +| variables.rs:119:23:119:24 | y1 | variables.rs:119:13:119:25 | print_i64(...) | | | variables.rs:121:9:121:12 | None | variables.rs:121:17:121:25 | print_str | match | | variables.rs:121:17:121:25 | print_str | variables.rs:121:27:121:32 | "NONE" | | -| variables.rs:121:17:121:33 | CallExpr | variables.rs:114:5:122:5 | MatchExpr | | -| variables.rs:121:27:121:32 | "NONE" | variables.rs:121:17:121:33 | CallExpr | | +| variables.rs:121:17:121:33 | print_str(...) | variables.rs:114:5:122:5 | match ... { ... } | | +| variables.rs:121:27:121:32 | "NONE" | variables.rs:121:17:121:33 | print_str(...) | | | variables.rs:124:5:124:13 | print_i64 | variables.rs:124:15:124:16 | y1 | | -| variables.rs:124:5:124:17 | CallExpr | variables.rs:110:21:125:1 | BlockExpr | | +| variables.rs:124:5:124:17 | print_i64(...) | variables.rs:110:21:125:1 | { ... } | | | variables.rs:124:5:124:18 | ExprStmt | variables.rs:124:5:124:13 | print_i64 | | -| variables.rs:124:15:124:16 | y1 | variables.rs:124:5:124:17 | CallExpr | | -| variables.rs:127:1:152:1 | enter match_pattern2 | variables.rs:128:5:128:36 | LetStmt | | -| variables.rs:127:1:152:1 | exit match_pattern2 (normal) | variables.rs:127:1:152:1 | exit match_pattern2 | | -| variables.rs:127:21:152:1 | BlockExpr | variables.rs:127:1:152:1 | exit match_pattern2 (normal) | | -| variables.rs:128:5:128:36 | LetStmt | variables.rs:128:20:128:20 | 2 | | +| variables.rs:124:15:124:16 | y1 | variables.rs:124:5:124:17 | print_i64(...) | | +| variables.rs:127:1:152:1 | enter fn match_pattern2 | variables.rs:128:5:128:36 | let numbers = ... | | +| variables.rs:127:1:152:1 | exit fn match_pattern2 (normal) | variables.rs:127:1:152:1 | exit fn match_pattern2 | | +| variables.rs:127:21:152:1 | { ... } | variables.rs:127:1:152:1 | exit fn match_pattern2 (normal) | | +| variables.rs:128:5:128:36 | let numbers = ... | variables.rs:128:20:128:20 | 2 | | | variables.rs:128:9:128:15 | numbers | variables.rs:130:5:140:5 | ExprStmt | match | | variables.rs:128:19:128:35 | TupleExpr | variables.rs:128:9:128:15 | numbers | | | variables.rs:128:20:128:20 | 2 | variables.rs:128:23:128:23 | 4 | | @@ -295,311 +295,311 @@ edges | variables.rs:128:29:128:30 | 16 | variables.rs:128:33:128:34 | 32 | | | variables.rs:128:33:128:34 | 32 | variables.rs:128:19:128:35 | TupleExpr | | | variables.rs:130:5:140:5 | ExprStmt | variables.rs:130:11:130:17 | numbers | | -| variables.rs:130:5:140:5 | MatchExpr | variables.rs:142:11:142:17 | numbers | | +| variables.rs:130:5:140:5 | match ... { ... } | variables.rs:142:11:142:17 | numbers | | | variables.rs:130:11:130:17 | numbers | variables.rs:131:9:135:9 | TuplePat | | | variables.rs:131:9:135:9 | TuplePat | variables.rs:132:13:132:17 | first | match | -| variables.rs:132:13:132:17 | first | variables.rs:132:20:132:20 | WildcardPat | match | -| variables.rs:132:20:132:20 | WildcardPat | variables.rs:133:13:133:17 | third | match | -| variables.rs:133:13:133:17 | third | variables.rs:133:20:133:20 | WildcardPat | match | -| variables.rs:133:20:133:20 | WildcardPat | variables.rs:134:13:134:17 | fifth | match | +| variables.rs:132:13:132:17 | first | variables.rs:132:20:132:20 | _ | match | +| variables.rs:132:20:132:20 | _ | variables.rs:133:13:133:17 | third | match | +| variables.rs:133:13:133:17 | third | variables.rs:133:20:133:20 | _ | match | +| variables.rs:133:20:133:20 | _ | variables.rs:134:13:134:17 | fifth | match | | variables.rs:134:13:134:17 | fifth | variables.rs:136:13:136:29 | ExprStmt | match | -| variables.rs:135:14:139:9 | BlockExpr | variables.rs:130:5:140:5 | MatchExpr | | +| variables.rs:135:14:139:9 | { ... } | variables.rs:130:5:140:5 | match ... { ... } | | | variables.rs:136:13:136:21 | print_i64 | variables.rs:136:23:136:27 | first | | -| variables.rs:136:13:136:28 | CallExpr | variables.rs:137:13:137:29 | ExprStmt | | +| variables.rs:136:13:136:28 | print_i64(...) | variables.rs:137:13:137:29 | ExprStmt | | | variables.rs:136:13:136:29 | ExprStmt | variables.rs:136:13:136:21 | print_i64 | | -| variables.rs:136:23:136:27 | first | variables.rs:136:13:136:28 | CallExpr | | +| variables.rs:136:23:136:27 | first | variables.rs:136:13:136:28 | print_i64(...) | | | variables.rs:137:13:137:21 | print_i64 | variables.rs:137:23:137:27 | third | | -| variables.rs:137:13:137:28 | CallExpr | variables.rs:138:13:138:29 | ExprStmt | | +| variables.rs:137:13:137:28 | print_i64(...) | variables.rs:138:13:138:29 | ExprStmt | | | variables.rs:137:13:137:29 | ExprStmt | variables.rs:137:13:137:21 | print_i64 | | -| variables.rs:137:23:137:27 | third | variables.rs:137:13:137:28 | CallExpr | | +| variables.rs:137:23:137:27 | third | variables.rs:137:13:137:28 | print_i64(...) | | | variables.rs:138:13:138:21 | print_i64 | variables.rs:138:23:138:27 | fifth | | -| variables.rs:138:13:138:28 | CallExpr | variables.rs:135:14:139:9 | BlockExpr | | +| variables.rs:138:13:138:28 | print_i64(...) | variables.rs:135:14:139:9 | { ... } | | | variables.rs:138:13:138:29 | ExprStmt | variables.rs:138:13:138:21 | print_i64 | | -| variables.rs:138:23:138:27 | fifth | variables.rs:138:13:138:28 | CallExpr | | -| variables.rs:142:5:151:5 | MatchExpr | variables.rs:127:21:152:1 | BlockExpr | | +| variables.rs:138:23:138:27 | fifth | variables.rs:138:13:138:28 | print_i64(...) | | +| variables.rs:142:5:151:5 | match ... { ... } | variables.rs:127:21:152:1 | { ... } | | | variables.rs:142:11:142:17 | numbers | variables.rs:143:9:147:9 | TuplePat | | | variables.rs:143:9:147:9 | TuplePat | variables.rs:144:13:144:17 | first | match | -| variables.rs:144:13:144:17 | first | variables.rs:145:13:145:14 | RestPat | match | -| variables.rs:145:13:145:14 | RestPat | variables.rs:146:13:146:16 | last | match | +| variables.rs:144:13:144:17 | first | variables.rs:145:13:145:14 | .. | match | +| variables.rs:145:13:145:14 | .. | variables.rs:146:13:146:16 | last | match | | variables.rs:146:13:146:16 | last | variables.rs:148:13:148:29 | ExprStmt | match | -| variables.rs:147:14:150:9 | BlockExpr | variables.rs:142:5:151:5 | MatchExpr | | +| variables.rs:147:14:150:9 | { ... } | variables.rs:142:5:151:5 | match ... { ... } | | | variables.rs:148:13:148:21 | print_i64 | variables.rs:148:23:148:27 | first | | -| variables.rs:148:13:148:28 | CallExpr | variables.rs:149:13:149:28 | ExprStmt | | +| variables.rs:148:13:148:28 | print_i64(...) | variables.rs:149:13:149:28 | ExprStmt | | | variables.rs:148:13:148:29 | ExprStmt | variables.rs:148:13:148:21 | print_i64 | | -| variables.rs:148:23:148:27 | first | variables.rs:148:13:148:28 | CallExpr | | +| variables.rs:148:23:148:27 | first | variables.rs:148:13:148:28 | print_i64(...) | | | variables.rs:149:13:149:21 | print_i64 | variables.rs:149:23:149:26 | last | | -| variables.rs:149:13:149:27 | CallExpr | variables.rs:147:14:150:9 | BlockExpr | | +| variables.rs:149:13:149:27 | print_i64(...) | variables.rs:147:14:150:9 | { ... } | | | variables.rs:149:13:149:28 | ExprStmt | variables.rs:149:13:149:21 | print_i64 | | -| variables.rs:149:23:149:26 | last | variables.rs:149:13:149:27 | CallExpr | | -| variables.rs:154:1:162:1 | enter match_pattern3 | variables.rs:155:5:155:38 | LetStmt | | -| variables.rs:154:1:162:1 | exit match_pattern3 (normal) | variables.rs:154:1:162:1 | exit match_pattern3 | | -| variables.rs:154:21:162:1 | BlockExpr | variables.rs:154:1:162:1 | exit match_pattern3 (normal) | | -| variables.rs:155:5:155:38 | LetStmt | variables.rs:155:25:155:27 | "x" | | +| variables.rs:149:23:149:26 | last | variables.rs:149:13:149:27 | print_i64(...) | | +| variables.rs:154:1:162:1 | enter fn match_pattern3 | variables.rs:155:5:155:38 | let p2 = ... | | +| variables.rs:154:1:162:1 | exit fn match_pattern3 (normal) | variables.rs:154:1:162:1 | exit fn match_pattern3 | | +| variables.rs:154:21:162:1 | { ... } | variables.rs:154:1:162:1 | exit fn match_pattern3 (normal) | | +| variables.rs:155:5:155:38 | let p2 = ... | variables.rs:155:25:155:27 | "x" | | | variables.rs:155:9:155:10 | p2 | variables.rs:157:11:157:12 | p2 | match | -| variables.rs:155:14:155:37 | RecordExpr | variables.rs:155:9:155:10 | p2 | | +| variables.rs:155:14:155:37 | Point {...} | variables.rs:155:9:155:10 | p2 | | | variables.rs:155:25:155:27 | "x" | variables.rs:155:33:155:35 | "y" | | -| variables.rs:155:33:155:35 | "y" | variables.rs:155:14:155:37 | RecordExpr | | -| variables.rs:157:5:161:5 | MatchExpr | variables.rs:154:21:162:1 | BlockExpr | | -| variables.rs:157:11:157:12 | p2 | variables.rs:158:9:160:9 | RecordPat | | -| variables.rs:158:9:160:9 | RecordPat | variables.rs:159:16:159:17 | x7 | match | -| variables.rs:159:16:159:17 | x7 | variables.rs:159:20:159:21 | RestPat | match | -| variables.rs:159:20:159:21 | RestPat | variables.rs:160:14:160:22 | print_str | match | +| variables.rs:155:33:155:35 | "y" | variables.rs:155:14:155:37 | Point {...} | | +| variables.rs:157:5:161:5 | match ... { ... } | variables.rs:154:21:162:1 | { ... } | | +| variables.rs:157:11:157:12 | p2 | variables.rs:158:9:160:9 | Point {...} | | +| variables.rs:158:9:160:9 | Point {...} | variables.rs:159:16:159:17 | x7 | match | +| variables.rs:159:16:159:17 | x7 | variables.rs:159:20:159:21 | .. | match | +| variables.rs:159:20:159:21 | .. | variables.rs:160:14:160:22 | print_str | match | | variables.rs:160:14:160:22 | print_str | variables.rs:160:24:160:25 | x7 | | -| variables.rs:160:14:160:26 | CallExpr | variables.rs:157:5:161:5 | MatchExpr | | -| variables.rs:160:24:160:25 | x7 | variables.rs:160:14:160:26 | CallExpr | | -| variables.rs:168:1:181:1 | enter match_pattern4 | variables.rs:169:5:169:39 | LetStmt | | -| variables.rs:168:1:181:1 | exit match_pattern4 (normal) | variables.rs:168:1:181:1 | exit match_pattern4 | | -| variables.rs:168:21:181:1 | BlockExpr | variables.rs:168:1:181:1 | exit match_pattern4 (normal) | | -| variables.rs:169:5:169:39 | LetStmt | variables.rs:169:36:169:36 | 0 | | +| variables.rs:160:14:160:26 | print_str(...) | variables.rs:157:5:161:5 | match ... { ... } | | +| variables.rs:160:24:160:25 | x7 | variables.rs:160:14:160:26 | print_str(...) | | +| variables.rs:168:1:181:1 | enter fn match_pattern4 | variables.rs:169:5:169:39 | let msg = ... | | +| variables.rs:168:1:181:1 | exit fn match_pattern4 (normal) | variables.rs:168:1:181:1 | exit fn match_pattern4 | | +| variables.rs:168:21:181:1 | { ... } | variables.rs:168:1:181:1 | exit fn match_pattern4 (normal) | | +| variables.rs:169:5:169:39 | let msg = ... | variables.rs:169:36:169:36 | 0 | | | variables.rs:169:9:169:11 | msg | variables.rs:171:11:171:13 | msg | match | -| variables.rs:169:15:169:38 | RecordExpr | variables.rs:169:9:169:11 | msg | | -| variables.rs:169:36:169:36 | 0 | variables.rs:169:15:169:38 | RecordExpr | | -| variables.rs:171:5:180:5 | MatchExpr | variables.rs:168:21:181:1 | BlockExpr | | -| variables.rs:171:11:171:13 | msg | variables.rs:172:9:174:9 | RecordPat | | -| variables.rs:172:9:174:9 | RecordPat | variables.rs:173:31:173:35 | RangePat | match | -| variables.rs:172:9:174:9 | RecordPat | variables.rs:175:9:175:38 | RecordPat | no-match | +| variables.rs:169:15:169:38 | Message::Hello {...} | variables.rs:169:9:169:11 | msg | | +| variables.rs:169:36:169:36 | 0 | variables.rs:169:15:169:38 | Message::Hello {...} | | +| variables.rs:171:5:180:5 | match ... { ... } | variables.rs:168:21:181:1 | { ... } | | +| variables.rs:171:11:171:13 | msg | variables.rs:172:9:174:9 | Message::Hello {...} | | +| variables.rs:172:9:174:9 | Message::Hello {...} | variables.rs:173:31:173:35 | RangePat | match | +| variables.rs:172:9:174:9 | Message::Hello {...} | variables.rs:175:9:175:38 | Message::Hello {...} | no-match | | variables.rs:173:17:173:35 | [match(true)] id_variable | variables.rs:174:14:174:22 | print_i64 | match | -| variables.rs:173:31:173:31 | 3 | variables.rs:173:31:173:31 | LiteralPat | | -| variables.rs:173:31:173:31 | LiteralPat | variables.rs:173:35:173:35 | 7 | match | -| variables.rs:173:31:173:31 | LiteralPat | variables.rs:175:9:175:38 | RecordPat | no-match | +| variables.rs:173:31:173:31 | 3 | variables.rs:173:31:173:31 | 3 | | +| variables.rs:173:31:173:31 | 3 | variables.rs:173:35:173:35 | 7 | match | +| variables.rs:173:31:173:31 | 3 | variables.rs:175:9:175:38 | Message::Hello {...} | no-match | | variables.rs:173:31:173:35 | RangePat | variables.rs:173:31:173:31 | 3 | match | -| variables.rs:173:31:173:35 | RangePat | variables.rs:175:9:175:38 | RecordPat | no-match | -| variables.rs:173:35:173:35 | 7 | variables.rs:173:35:173:35 | LiteralPat | | -| variables.rs:173:35:173:35 | LiteralPat | variables.rs:173:17:173:35 | [match(true)] id_variable | match | -| variables.rs:173:35:173:35 | LiteralPat | variables.rs:175:9:175:38 | RecordPat | no-match | +| variables.rs:173:31:173:35 | RangePat | variables.rs:175:9:175:38 | Message::Hello {...} | no-match | +| variables.rs:173:35:173:35 | 7 | variables.rs:173:17:173:35 | [match(true)] id_variable | match | +| variables.rs:173:35:173:35 | 7 | variables.rs:173:35:173:35 | 7 | | +| variables.rs:173:35:173:35 | 7 | variables.rs:175:9:175:38 | Message::Hello {...} | no-match | | variables.rs:174:14:174:22 | print_i64 | variables.rs:174:24:174:34 | id_variable | | -| variables.rs:174:14:174:35 | CallExpr | variables.rs:171:5:180:5 | MatchExpr | | -| variables.rs:174:24:174:34 | id_variable | variables.rs:174:14:174:35 | CallExpr | | -| variables.rs:175:9:175:38 | RecordPat | variables.rs:175:30:175:36 | RangePat | match | -| variables.rs:175:9:175:38 | RecordPat | variables.rs:178:9:178:29 | RecordPat | no-match | -| variables.rs:175:30:175:31 | 10 | variables.rs:175:30:175:31 | LiteralPat | | -| variables.rs:175:30:175:31 | LiteralPat | variables.rs:175:35:175:36 | 12 | match | -| variables.rs:175:30:175:31 | LiteralPat | variables.rs:178:9:178:29 | RecordPat | no-match | +| variables.rs:174:14:174:35 | print_i64(...) | variables.rs:171:5:180:5 | match ... { ... } | | +| variables.rs:174:24:174:34 | id_variable | variables.rs:174:14:174:35 | print_i64(...) | | +| variables.rs:175:9:175:38 | Message::Hello {...} | variables.rs:175:30:175:36 | RangePat | match | +| variables.rs:175:9:175:38 | Message::Hello {...} | variables.rs:178:9:178:29 | Message::Hello {...} | no-match | +| variables.rs:175:30:175:31 | 10 | variables.rs:175:30:175:31 | 10 | | +| variables.rs:175:30:175:31 | 10 | variables.rs:175:35:175:36 | 12 | match | +| variables.rs:175:30:175:31 | 10 | variables.rs:178:9:178:29 | Message::Hello {...} | no-match | | variables.rs:175:30:175:36 | RangePat | variables.rs:175:30:175:31 | 10 | match | -| variables.rs:175:30:175:36 | RangePat | variables.rs:178:9:178:29 | RecordPat | no-match | -| variables.rs:175:35:175:36 | 12 | variables.rs:175:35:175:36 | LiteralPat | | -| variables.rs:175:35:175:36 | LiteralPat | variables.rs:176:22:176:51 | MacroStmts | match | -| variables.rs:175:35:175:36 | LiteralPat | variables.rs:178:9:178:29 | RecordPat | no-match | -| variables.rs:175:43:177:9 | BlockExpr | variables.rs:171:5:180:5 | MatchExpr | | +| variables.rs:175:30:175:36 | RangePat | variables.rs:178:9:178:29 | Message::Hello {...} | no-match | +| variables.rs:175:35:175:36 | 12 | variables.rs:175:35:175:36 | 12 | | +| variables.rs:175:35:175:36 | 12 | variables.rs:176:22:176:51 | MacroStmts | match | +| variables.rs:175:35:175:36 | 12 | variables.rs:178:9:178:29 | Message::Hello {...} | no-match | +| variables.rs:175:43:177:9 | { ... } | variables.rs:171:5:180:5 | match ... { ... } | | | variables.rs:176:13:176:52 | $crate::io::_print | variables.rs:176:22:176:51 | "Found an id in another range\\n" | | -| variables.rs:176:13:176:52 | MacroExpr | variables.rs:175:43:177:9 | BlockExpr | | +| variables.rs:176:13:176:52 | MacroExpr | variables.rs:175:43:177:9 | { ... } | | | variables.rs:176:22:176:51 | "Found an id in another range\\n" | variables.rs:176:22:176:51 | FormatArgsExpr | | -| variables.rs:176:22:176:51 | BlockExpr | variables.rs:176:13:176:52 | MacroExpr | | -| variables.rs:176:22:176:51 | CallExpr | variables.rs:176:22:176:51 | BlockExpr | | +| variables.rs:176:22:176:51 | $crate::io::_print(...) | variables.rs:176:22:176:51 | { ... } | | | variables.rs:176:22:176:51 | ExprStmt | variables.rs:176:13:176:52 | $crate::io::_print | | | variables.rs:176:22:176:51 | FormatArgsExpr | variables.rs:176:22:176:51 | MacroExpr | | -| variables.rs:176:22:176:51 | MacroExpr | variables.rs:176:22:176:51 | CallExpr | | +| variables.rs:176:22:176:51 | MacroExpr | variables.rs:176:22:176:51 | $crate::io::_print(...) | | | variables.rs:176:22:176:51 | MacroStmts | variables.rs:176:22:176:51 | ExprStmt | | -| variables.rs:178:9:178:29 | RecordPat | variables.rs:178:26:178:27 | id | match | +| variables.rs:176:22:176:51 | { ... } | variables.rs:176:13:176:52 | MacroExpr | | +| variables.rs:178:9:178:29 | Message::Hello {...} | variables.rs:178:26:178:27 | id | match | | variables.rs:178:26:178:27 | id | variables.rs:179:13:179:21 | print_i64 | match | | variables.rs:179:13:179:21 | print_i64 | variables.rs:179:23:179:24 | id | | -| variables.rs:179:13:179:25 | CallExpr | variables.rs:171:5:180:5 | MatchExpr | | -| variables.rs:179:23:179:24 | id | variables.rs:179:13:179:25 | CallExpr | | -| variables.rs:188:1:194:1 | enter match_pattern5 | variables.rs:189:5:189:34 | LetStmt | | -| variables.rs:188:1:194:1 | exit match_pattern5 (normal) | variables.rs:188:1:194:1 | exit match_pattern5 | | -| variables.rs:188:21:194:1 | BlockExpr | variables.rs:188:1:194:1 | exit match_pattern5 (normal) | | -| variables.rs:189:5:189:34 | LetStmt | variables.rs:189:18:189:29 | Either::Left | | +| variables.rs:179:13:179:25 | print_i64(...) | variables.rs:171:5:180:5 | match ... { ... } | | +| variables.rs:179:23:179:24 | id | variables.rs:179:13:179:25 | print_i64(...) | | +| variables.rs:188:1:194:1 | enter fn match_pattern5 | variables.rs:189:5:189:34 | let either = ... | | +| variables.rs:188:1:194:1 | exit fn match_pattern5 (normal) | variables.rs:188:1:194:1 | exit fn match_pattern5 | | +| variables.rs:188:21:194:1 | { ... } | variables.rs:188:1:194:1 | exit fn match_pattern5 (normal) | | +| variables.rs:189:5:189:34 | let either = ... | variables.rs:189:18:189:29 | Either::Left | | | variables.rs:189:9:189:14 | either | variables.rs:190:11:190:16 | either | match | | variables.rs:189:18:189:29 | Either::Left | variables.rs:189:31:189:32 | 32 | | -| variables.rs:189:18:189:33 | CallExpr | variables.rs:189:9:189:14 | either | | -| variables.rs:189:31:189:32 | 32 | variables.rs:189:18:189:33 | CallExpr | | -| variables.rs:190:5:193:5 | MatchExpr | variables.rs:188:21:194:1 | BlockExpr | | +| variables.rs:189:18:189:33 | Either::Left(...) | variables.rs:189:9:189:14 | either | | +| variables.rs:189:31:189:32 | 32 | variables.rs:189:18:189:33 | Either::Left(...) | | +| variables.rs:190:5:193:5 | match ... { ... } | variables.rs:188:21:194:1 | { ... } | | | variables.rs:190:11:190:16 | either | variables.rs:191:9:191:24 | TupleStructPat | | | variables.rs:191:9:191:24 | TupleStructPat | variables.rs:191:22:191:23 | a3 | match | | variables.rs:191:9:191:24 | TupleStructPat | variables.rs:191:28:191:44 | TupleStructPat | no-match | -| variables.rs:191:9:191:44 | [match(true)] OrPat | variables.rs:192:16:192:24 | print_i64 | match | -| variables.rs:191:22:191:23 | a3 | variables.rs:191:9:191:44 | [match(true)] OrPat | match | +| variables.rs:191:9:191:44 | [match(true)] ... \| ... | variables.rs:192:16:192:24 | print_i64 | match | +| variables.rs:191:22:191:23 | a3 | variables.rs:191:9:191:44 | [match(true)] ... \| ... | match | | variables.rs:191:28:191:44 | TupleStructPat | variables.rs:191:42:191:43 | a3 | match | -| variables.rs:191:42:191:43 | a3 | variables.rs:191:9:191:44 | [match(true)] OrPat | match | +| variables.rs:191:42:191:43 | a3 | variables.rs:191:9:191:44 | [match(true)] ... \| ... | match | | variables.rs:192:16:192:24 | print_i64 | variables.rs:192:26:192:27 | a3 | | -| variables.rs:192:16:192:28 | CallExpr | variables.rs:190:5:193:5 | MatchExpr | | -| variables.rs:192:26:192:27 | a3 | variables.rs:192:16:192:28 | CallExpr | | -| variables.rs:202:1:216:1 | enter match_pattern6 | variables.rs:203:5:203:37 | LetStmt | | -| variables.rs:202:1:216:1 | exit match_pattern6 (normal) | variables.rs:202:1:216:1 | exit match_pattern6 | | -| variables.rs:202:21:216:1 | BlockExpr | variables.rs:202:1:216:1 | exit match_pattern6 (normal) | | -| variables.rs:203:5:203:37 | LetStmt | variables.rs:203:14:203:32 | ThreeValued::Second | | +| variables.rs:192:16:192:28 | print_i64(...) | variables.rs:190:5:193:5 | match ... { ... } | | +| variables.rs:192:26:192:27 | a3 | variables.rs:192:16:192:28 | print_i64(...) | | +| variables.rs:202:1:216:1 | enter fn match_pattern6 | variables.rs:203:5:203:37 | let tv = ... | | +| variables.rs:202:1:216:1 | exit fn match_pattern6 (normal) | variables.rs:202:1:216:1 | exit fn match_pattern6 | | +| variables.rs:202:21:216:1 | { ... } | variables.rs:202:1:216:1 | exit fn match_pattern6 (normal) | | +| variables.rs:203:5:203:37 | let tv = ... | variables.rs:203:14:203:32 | ThreeValued::Second | | | variables.rs:203:9:203:10 | tv | variables.rs:204:5:207:5 | ExprStmt | match | | variables.rs:203:14:203:32 | ThreeValued::Second | variables.rs:203:34:203:35 | 62 | | -| variables.rs:203:14:203:36 | CallExpr | variables.rs:203:9:203:10 | tv | | -| variables.rs:203:34:203:35 | 62 | variables.rs:203:14:203:36 | CallExpr | | +| variables.rs:203:14:203:36 | ThreeValued::Second(...) | variables.rs:203:9:203:10 | tv | | +| variables.rs:203:34:203:35 | 62 | variables.rs:203:14:203:36 | ThreeValued::Second(...) | | | variables.rs:204:5:207:5 | ExprStmt | variables.rs:204:11:204:12 | tv | | -| variables.rs:204:5:207:5 | MatchExpr | variables.rs:208:5:211:5 | ExprStmt | | +| variables.rs:204:5:207:5 | match ... { ... } | variables.rs:208:5:211:5 | ExprStmt | | | variables.rs:204:11:204:12 | tv | variables.rs:205:9:205:30 | TupleStructPat | | | variables.rs:205:9:205:30 | TupleStructPat | variables.rs:205:28:205:29 | a4 | match | | variables.rs:205:9:205:30 | TupleStructPat | variables.rs:205:34:205:56 | TupleStructPat | no-match | -| variables.rs:205:9:205:81 | [match(true)] OrPat | variables.rs:206:16:206:24 | print_i64 | match | -| variables.rs:205:28:205:29 | a4 | variables.rs:205:9:205:81 | [match(true)] OrPat | match | +| variables.rs:205:9:205:81 | [match(true)] ... \| ... | variables.rs:206:16:206:24 | print_i64 | match | +| variables.rs:205:28:205:29 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... | match | | variables.rs:205:34:205:56 | TupleStructPat | variables.rs:205:54:205:55 | a4 | match | | variables.rs:205:34:205:56 | TupleStructPat | variables.rs:205:60:205:81 | TupleStructPat | no-match | -| variables.rs:205:54:205:55 | a4 | variables.rs:205:9:205:81 | [match(true)] OrPat | match | +| variables.rs:205:54:205:55 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... | match | | variables.rs:205:60:205:81 | TupleStructPat | variables.rs:205:79:205:80 | a4 | match | -| variables.rs:205:79:205:80 | a4 | variables.rs:205:9:205:81 | [match(true)] OrPat | match | +| variables.rs:205:79:205:80 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... | match | | variables.rs:206:16:206:24 | print_i64 | variables.rs:206:26:206:27 | a4 | | -| variables.rs:206:16:206:28 | CallExpr | variables.rs:204:5:207:5 | MatchExpr | | -| variables.rs:206:26:206:27 | a4 | variables.rs:206:16:206:28 | CallExpr | | +| variables.rs:206:16:206:28 | print_i64(...) | variables.rs:204:5:207:5 | match ... { ... } | | +| variables.rs:206:26:206:27 | a4 | variables.rs:206:16:206:28 | print_i64(...) | | | variables.rs:208:5:211:5 | ExprStmt | variables.rs:208:11:208:12 | tv | | -| variables.rs:208:5:211:5 | MatchExpr | variables.rs:212:11:212:12 | tv | | +| variables.rs:208:5:211:5 | match ... { ... } | variables.rs:212:11:212:12 | tv | | | variables.rs:208:11:208:12 | tv | variables.rs:209:10:209:31 | TupleStructPat | | -| variables.rs:209:9:209:83 | [match(true)] OrPat | variables.rs:210:16:210:24 | print_i64 | match | +| variables.rs:209:9:209:83 | [match(true)] ... \| ... | variables.rs:210:16:210:24 | print_i64 | match | | variables.rs:209:10:209:31 | TupleStructPat | variables.rs:209:29:209:30 | a5 | match | | variables.rs:209:10:209:31 | TupleStructPat | variables.rs:209:35:209:57 | TupleStructPat | no-match | -| variables.rs:209:10:209:57 | [match(false)] OrPat | variables.rs:209:62:209:83 | TupleStructPat | no-match | -| variables.rs:209:10:209:57 | [match(true)] OrPat | variables.rs:209:9:209:83 | [match(true)] OrPat | match | -| variables.rs:209:29:209:30 | a5 | variables.rs:209:10:209:57 | [match(true)] OrPat | match | -| variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:10:209:57 | [match(false)] OrPat | no-match | +| variables.rs:209:10:209:57 | [match(false)] ... \| ... | variables.rs:209:62:209:83 | TupleStructPat | no-match | +| variables.rs:209:10:209:57 | [match(true)] ... \| ... | variables.rs:209:9:209:83 | [match(true)] ... \| ... | match | +| variables.rs:209:29:209:30 | a5 | variables.rs:209:10:209:57 | [match(true)] ... \| ... | match | +| variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:10:209:57 | [match(false)] ... \| ... | no-match | | variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:55:209:56 | a5 | match | -| variables.rs:209:55:209:56 | a5 | variables.rs:209:10:209:57 | [match(true)] OrPat | match | +| variables.rs:209:55:209:56 | a5 | variables.rs:209:10:209:57 | [match(true)] ... \| ... | match | | variables.rs:209:62:209:83 | TupleStructPat | variables.rs:209:81:209:82 | a5 | match | -| variables.rs:209:81:209:82 | a5 | variables.rs:209:9:209:83 | [match(true)] OrPat | match | +| variables.rs:209:81:209:82 | a5 | variables.rs:209:9:209:83 | [match(true)] ... \| ... | match | | variables.rs:210:16:210:24 | print_i64 | variables.rs:210:26:210:27 | a5 | | -| variables.rs:210:16:210:28 | CallExpr | variables.rs:208:5:211:5 | MatchExpr | | -| variables.rs:210:26:210:27 | a5 | variables.rs:210:16:210:28 | CallExpr | | -| variables.rs:212:5:215:5 | MatchExpr | variables.rs:202:21:216:1 | BlockExpr | | +| variables.rs:210:16:210:28 | print_i64(...) | variables.rs:208:5:211:5 | match ... { ... } | | +| variables.rs:210:26:210:27 | a5 | variables.rs:210:16:210:28 | print_i64(...) | | +| variables.rs:212:5:215:5 | match ... { ... } | variables.rs:202:21:216:1 | { ... } | | | variables.rs:212:11:212:12 | tv | variables.rs:213:9:213:30 | TupleStructPat | | | variables.rs:213:9:213:30 | TupleStructPat | variables.rs:213:28:213:29 | a6 | match | | variables.rs:213:9:213:30 | TupleStructPat | variables.rs:213:35:213:57 | TupleStructPat | no-match | -| variables.rs:213:9:213:83 | [match(true)] OrPat | variables.rs:214:16:214:24 | print_i64 | match | -| variables.rs:213:28:213:29 | a6 | variables.rs:213:9:213:83 | [match(true)] OrPat | match | +| variables.rs:213:9:213:83 | [match(true)] ... \| ... | variables.rs:214:16:214:24 | print_i64 | match | +| variables.rs:213:28:213:29 | a6 | variables.rs:213:9:213:83 | [match(true)] ... \| ... | match | | variables.rs:213:35:213:57 | TupleStructPat | variables.rs:213:55:213:56 | a6 | match | | variables.rs:213:35:213:57 | TupleStructPat | variables.rs:213:61:213:82 | TupleStructPat | no-match | -| variables.rs:213:35:213:82 | [match(true)] OrPat | variables.rs:213:9:213:83 | [match(true)] OrPat | match | -| variables.rs:213:55:213:56 | a6 | variables.rs:213:35:213:82 | [match(true)] OrPat | match | +| variables.rs:213:35:213:82 | [match(true)] ... \| ... | variables.rs:213:9:213:83 | [match(true)] ... \| ... | match | +| variables.rs:213:55:213:56 | a6 | variables.rs:213:35:213:82 | [match(true)] ... \| ... | match | | variables.rs:213:61:213:82 | TupleStructPat | variables.rs:213:80:213:81 | a6 | match | -| variables.rs:213:80:213:81 | a6 | variables.rs:213:35:213:82 | [match(true)] OrPat | match | +| variables.rs:213:80:213:81 | a6 | variables.rs:213:35:213:82 | [match(true)] ... \| ... | match | | variables.rs:214:16:214:24 | print_i64 | variables.rs:214:26:214:27 | a6 | | -| variables.rs:214:16:214:28 | CallExpr | variables.rs:212:5:215:5 | MatchExpr | | -| variables.rs:214:26:214:27 | a6 | variables.rs:214:16:214:28 | CallExpr | | -| variables.rs:218:1:226:1 | enter match_pattern7 | variables.rs:219:5:219:34 | LetStmt | | -| variables.rs:218:1:226:1 | exit match_pattern7 (normal) | variables.rs:218:1:226:1 | exit match_pattern7 | | -| variables.rs:218:21:226:1 | BlockExpr | variables.rs:218:1:226:1 | exit match_pattern7 (normal) | | -| variables.rs:219:5:219:34 | LetStmt | variables.rs:219:18:219:29 | Either::Left | | +| variables.rs:214:16:214:28 | print_i64(...) | variables.rs:212:5:215:5 | match ... { ... } | | +| variables.rs:214:26:214:27 | a6 | variables.rs:214:16:214:28 | print_i64(...) | | +| variables.rs:218:1:226:1 | enter fn match_pattern7 | variables.rs:219:5:219:34 | let either = ... | | +| variables.rs:218:1:226:1 | exit fn match_pattern7 (normal) | variables.rs:218:1:226:1 | exit fn match_pattern7 | | +| variables.rs:218:21:226:1 | { ... } | variables.rs:218:1:226:1 | exit fn match_pattern7 (normal) | | +| variables.rs:219:5:219:34 | let either = ... | variables.rs:219:18:219:29 | Either::Left | | | variables.rs:219:9:219:14 | either | variables.rs:220:11:220:16 | either | match | | variables.rs:219:18:219:29 | Either::Left | variables.rs:219:31:219:32 | 32 | | -| variables.rs:219:18:219:33 | CallExpr | variables.rs:219:9:219:14 | either | | -| variables.rs:219:31:219:32 | 32 | variables.rs:219:18:219:33 | CallExpr | | -| variables.rs:220:5:225:5 | MatchExpr | variables.rs:218:21:226:1 | BlockExpr | | +| variables.rs:219:18:219:33 | Either::Left(...) | variables.rs:219:9:219:14 | either | | +| variables.rs:219:31:219:32 | 32 | variables.rs:219:18:219:33 | Either::Left(...) | | +| variables.rs:220:5:225:5 | match ... { ... } | variables.rs:218:21:226:1 | { ... } | | | variables.rs:220:11:220:16 | either | variables.rs:221:9:221:24 | TupleStructPat | | | variables.rs:221:9:221:24 | TupleStructPat | variables.rs:221:22:221:23 | a7 | match | | variables.rs:221:9:221:24 | TupleStructPat | variables.rs:221:28:221:44 | TupleStructPat | no-match | -| variables.rs:221:9:221:44 | [match(false)] OrPat | variables.rs:224:9:224:9 | WildcardPat | no-match | -| variables.rs:221:9:221:44 | [match(true)] OrPat | variables.rs:222:16:222:17 | a7 | match | -| variables.rs:221:22:221:23 | a7 | variables.rs:221:9:221:44 | [match(true)] OrPat | match | -| variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:9:221:44 | [match(false)] OrPat | no-match | +| variables.rs:221:9:221:44 | [match(false)] ... \| ... | variables.rs:224:9:224:9 | _ | no-match | +| variables.rs:221:9:221:44 | [match(true)] ... \| ... | variables.rs:222:16:222:17 | a7 | match | +| variables.rs:221:22:221:23 | a7 | variables.rs:221:9:221:44 | [match(true)] ... \| ... | match | +| variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:9:221:44 | [match(false)] ... \| ... | no-match | | variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:42:221:43 | a7 | match | -| variables.rs:221:42:221:43 | a7 | variables.rs:221:9:221:44 | [match(true)] OrPat | match | +| variables.rs:221:42:221:43 | a7 | variables.rs:221:9:221:44 | [match(true)] ... \| ... | match | | variables.rs:222:16:222:17 | a7 | variables.rs:222:21:222:21 | 0 | | | variables.rs:222:16:222:21 | ... > ... | variables.rs:223:16:223:24 | print_i64 | true | -| variables.rs:222:16:222:21 | ... > ... | variables.rs:224:9:224:9 | WildcardPat | false | +| variables.rs:222:16:222:21 | ... > ... | variables.rs:224:9:224:9 | _ | false | | variables.rs:222:21:222:21 | 0 | variables.rs:222:16:222:21 | ... > ... | | | variables.rs:223:16:223:24 | print_i64 | variables.rs:223:26:223:27 | a7 | | -| variables.rs:223:16:223:28 | CallExpr | variables.rs:220:5:225:5 | MatchExpr | | -| variables.rs:223:26:223:27 | a7 | variables.rs:223:16:223:28 | CallExpr | | -| variables.rs:224:9:224:9 | WildcardPat | variables.rs:224:14:224:15 | TupleExpr | match | -| variables.rs:224:14:224:15 | TupleExpr | variables.rs:220:5:225:5 | MatchExpr | | -| variables.rs:228:1:243:1 | enter match_pattern8 | variables.rs:229:5:229:34 | LetStmt | | -| variables.rs:228:1:243:1 | exit match_pattern8 (normal) | variables.rs:228:1:243:1 | exit match_pattern8 | | -| variables.rs:228:21:243:1 | BlockExpr | variables.rs:228:1:243:1 | exit match_pattern8 (normal) | | -| variables.rs:229:5:229:34 | LetStmt | variables.rs:229:18:229:29 | Either::Left | | +| variables.rs:223:16:223:28 | print_i64(...) | variables.rs:220:5:225:5 | match ... { ... } | | +| variables.rs:223:26:223:27 | a7 | variables.rs:223:16:223:28 | print_i64(...) | | +| variables.rs:224:9:224:9 | _ | variables.rs:224:14:224:15 | TupleExpr | match | +| variables.rs:224:14:224:15 | TupleExpr | variables.rs:220:5:225:5 | match ... { ... } | | +| variables.rs:228:1:243:1 | enter fn match_pattern8 | variables.rs:229:5:229:34 | let either = ... | | +| variables.rs:228:1:243:1 | exit fn match_pattern8 (normal) | variables.rs:228:1:243:1 | exit fn match_pattern8 | | +| variables.rs:228:21:243:1 | { ... } | variables.rs:228:1:243:1 | exit fn match_pattern8 (normal) | | +| variables.rs:229:5:229:34 | let either = ... | variables.rs:229:18:229:29 | Either::Left | | | variables.rs:229:9:229:14 | either | variables.rs:231:11:231:16 | either | match | | variables.rs:229:18:229:29 | Either::Left | variables.rs:229:31:229:32 | 32 | | -| variables.rs:229:18:229:33 | CallExpr | variables.rs:229:9:229:14 | either | | -| variables.rs:229:31:229:32 | 32 | variables.rs:229:18:229:33 | CallExpr | | -| variables.rs:231:5:242:5 | MatchExpr | variables.rs:228:21:243:1 | BlockExpr | | +| variables.rs:229:18:229:33 | Either::Left(...) | variables.rs:229:9:229:14 | either | | +| variables.rs:229:31:229:32 | 32 | variables.rs:229:18:229:33 | Either::Left(...) | | +| variables.rs:231:5:242:5 | match ... { ... } | variables.rs:228:21:243:1 | { ... } | | | variables.rs:231:11:231:16 | either | variables.rs:233:14:233:30 | TupleStructPat | | | variables.rs:232:9:233:52 | [match(true)] e | variables.rs:235:13:235:27 | ExprStmt | match | | variables.rs:233:14:233:30 | TupleStructPat | variables.rs:233:27:233:29 | a11 | match | | variables.rs:233:14:233:30 | TupleStructPat | variables.rs:233:34:233:51 | TupleStructPat | no-match | -| variables.rs:233:14:233:51 | [match(false)] OrPat | variables.rs:241:9:241:9 | WildcardPat | no-match | -| variables.rs:233:14:233:51 | [match(true)] OrPat | variables.rs:232:9:233:52 | [match(true)] e | match | -| variables.rs:233:27:233:29 | a11 | variables.rs:233:14:233:51 | [match(true)] OrPat | match | -| variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:14:233:51 | [match(false)] OrPat | no-match | +| variables.rs:233:14:233:51 | [match(false)] ... \| ... | variables.rs:241:9:241:9 | _ | no-match | +| variables.rs:233:14:233:51 | [match(true)] ... \| ... | variables.rs:232:9:233:52 | [match(true)] e | match | +| variables.rs:233:27:233:29 | a11 | variables.rs:233:14:233:51 | [match(true)] ... \| ... | match | +| variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:14:233:51 | [match(false)] ... \| ... | no-match | | variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:48:233:50 | a11 | match | -| variables.rs:233:48:233:50 | a11 | variables.rs:233:14:233:51 | [match(true)] OrPat | match | -| variables.rs:234:12:240:9 | BlockExpr | variables.rs:231:5:242:5 | MatchExpr | | +| variables.rs:233:48:233:50 | a11 | variables.rs:233:14:233:51 | [match(true)] ... \| ... | match | +| variables.rs:234:12:240:9 | { ... } | variables.rs:231:5:242:5 | match ... { ... } | | | variables.rs:235:13:235:21 | print_i64 | variables.rs:235:23:235:25 | a11 | | -| variables.rs:235:13:235:26 | CallExpr | variables.rs:236:16:237:15 | LetExpr | | +| variables.rs:235:13:235:26 | print_i64(...) | variables.rs:236:16:237:15 | let TupleStructPat = ... | | | variables.rs:235:13:235:27 | ExprStmt | variables.rs:235:13:235:21 | print_i64 | | -| variables.rs:235:23:235:25 | a11 | variables.rs:235:13:235:26 | CallExpr | | -| variables.rs:236:13:239:13 | IfExpr | variables.rs:234:12:240:9 | BlockExpr | | -| variables.rs:236:16:237:15 | LetExpr | variables.rs:237:15:237:15 | e | | -| variables.rs:236:20:236:36 | TupleStructPat | variables.rs:236:13:239:13 | IfExpr | no-match | +| variables.rs:235:23:235:25 | a11 | variables.rs:235:13:235:26 | print_i64(...) | | +| variables.rs:236:13:239:13 | if ... { ... } | variables.rs:234:12:240:9 | { ... } | | +| variables.rs:236:16:237:15 | let TupleStructPat = ... | variables.rs:237:15:237:15 | e | | +| variables.rs:236:20:236:36 | TupleStructPat | variables.rs:236:13:239:13 | if ... { ... } | no-match | | variables.rs:236:20:236:36 | TupleStructPat | variables.rs:236:33:236:35 | a12 | match | | variables.rs:236:33:236:35 | a12 | variables.rs:238:17:238:32 | ExprStmt | match | | variables.rs:237:15:237:15 | e | variables.rs:236:20:236:36 | TupleStructPat | | -| variables.rs:237:17:239:13 | BlockExpr | variables.rs:236:13:239:13 | IfExpr | | +| variables.rs:237:17:239:13 | { ... } | variables.rs:236:13:239:13 | if ... { ... } | | | variables.rs:238:17:238:25 | print_i64 | variables.rs:238:28:238:30 | a12 | | -| variables.rs:238:17:238:31 | CallExpr | variables.rs:237:17:239:13 | BlockExpr | | +| variables.rs:238:17:238:31 | print_i64(...) | variables.rs:237:17:239:13 | { ... } | | | variables.rs:238:17:238:32 | ExprStmt | variables.rs:238:17:238:25 | print_i64 | | -| variables.rs:238:27:238:30 | * ... | variables.rs:238:17:238:31 | CallExpr | | +| variables.rs:238:27:238:30 | * ... | variables.rs:238:17:238:31 | print_i64(...) | | | variables.rs:238:28:238:30 | a12 | variables.rs:238:27:238:30 | * ... | | -| variables.rs:241:9:241:9 | WildcardPat | variables.rs:241:14:241:15 | TupleExpr | match | -| variables.rs:241:14:241:15 | TupleExpr | variables.rs:231:5:242:5 | MatchExpr | | -| variables.rs:252:1:258:1 | enter match_pattern9 | variables.rs:253:5:253:36 | LetStmt | | -| variables.rs:252:1:258:1 | exit match_pattern9 (normal) | variables.rs:252:1:258:1 | exit match_pattern9 | | -| variables.rs:252:21:258:1 | BlockExpr | variables.rs:252:1:258:1 | exit match_pattern9 (normal) | | -| variables.rs:253:5:253:36 | LetStmt | variables.rs:253:14:253:31 | FourValued::Second | | +| variables.rs:241:9:241:9 | _ | variables.rs:241:14:241:15 | TupleExpr | match | +| variables.rs:241:14:241:15 | TupleExpr | variables.rs:231:5:242:5 | match ... { ... } | | +| variables.rs:252:1:258:1 | enter fn match_pattern9 | variables.rs:253:5:253:36 | let fv = ... | | +| variables.rs:252:1:258:1 | exit fn match_pattern9 (normal) | variables.rs:252:1:258:1 | exit fn match_pattern9 | | +| variables.rs:252:21:258:1 | { ... } | variables.rs:252:1:258:1 | exit fn match_pattern9 (normal) | | +| variables.rs:253:5:253:36 | let fv = ... | variables.rs:253:14:253:31 | FourValued::Second | | | variables.rs:253:9:253:10 | fv | variables.rs:254:11:254:12 | fv | match | | variables.rs:253:14:253:31 | FourValued::Second | variables.rs:253:33:253:34 | 62 | | -| variables.rs:253:14:253:35 | CallExpr | variables.rs:253:9:253:10 | fv | | -| variables.rs:253:33:253:34 | 62 | variables.rs:253:14:253:35 | CallExpr | | -| variables.rs:254:5:257:5 | MatchExpr | variables.rs:252:21:258:1 | BlockExpr | | +| variables.rs:253:14:253:35 | FourValued::Second(...) | variables.rs:253:9:253:10 | fv | | +| variables.rs:253:33:253:34 | 62 | variables.rs:253:14:253:35 | FourValued::Second(...) | | +| variables.rs:254:5:257:5 | match ... { ... } | variables.rs:252:21:258:1 | { ... } | | | variables.rs:254:11:254:12 | fv | variables.rs:255:9:255:30 | TupleStructPat | | | variables.rs:255:9:255:30 | TupleStructPat | variables.rs:255:27:255:29 | a13 | match | | variables.rs:255:9:255:30 | TupleStructPat | variables.rs:255:35:255:57 | TupleStructPat | no-match | -| variables.rs:255:9:255:109 | [match(true)] OrPat | variables.rs:256:16:256:24 | print_i64 | match | -| variables.rs:255:27:255:29 | a13 | variables.rs:255:9:255:109 | [match(true)] OrPat | match | +| variables.rs:255:9:255:109 | [match(true)] ... \| ... | variables.rs:256:16:256:24 | print_i64 | match | +| variables.rs:255:27:255:29 | a13 | variables.rs:255:9:255:109 | [match(true)] ... \| ... | match | | variables.rs:255:35:255:57 | TupleStructPat | variables.rs:255:54:255:56 | a13 | match | | variables.rs:255:35:255:57 | TupleStructPat | variables.rs:255:61:255:82 | TupleStructPat | no-match | -| variables.rs:255:35:255:82 | [match(false)] OrPat | variables.rs:255:87:255:109 | TupleStructPat | no-match | -| variables.rs:255:35:255:82 | [match(true)] OrPat | variables.rs:255:9:255:109 | [match(true)] OrPat | match | -| variables.rs:255:54:255:56 | a13 | variables.rs:255:35:255:82 | [match(true)] OrPat | match | -| variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:35:255:82 | [match(false)] OrPat | no-match | +| variables.rs:255:35:255:82 | [match(false)] ... \| ... | variables.rs:255:87:255:109 | TupleStructPat | no-match | +| variables.rs:255:35:255:82 | [match(true)] ... \| ... | variables.rs:255:9:255:109 | [match(true)] ... \| ... | match | +| variables.rs:255:54:255:56 | a13 | variables.rs:255:35:255:82 | [match(true)] ... \| ... | match | +| variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:35:255:82 | [match(false)] ... \| ... | no-match | | variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:79:255:81 | a13 | match | -| variables.rs:255:79:255:81 | a13 | variables.rs:255:35:255:82 | [match(true)] OrPat | match | +| variables.rs:255:79:255:81 | a13 | variables.rs:255:35:255:82 | [match(true)] ... \| ... | match | | variables.rs:255:87:255:109 | TupleStructPat | variables.rs:255:106:255:108 | a13 | match | -| variables.rs:255:106:255:108 | a13 | variables.rs:255:9:255:109 | [match(true)] OrPat | match | +| variables.rs:255:106:255:108 | a13 | variables.rs:255:9:255:109 | [match(true)] ... \| ... | match | | variables.rs:256:16:256:24 | print_i64 | variables.rs:256:26:256:28 | a13 | | -| variables.rs:256:16:256:29 | CallExpr | variables.rs:254:5:257:5 | MatchExpr | | -| variables.rs:256:26:256:28 | a13 | variables.rs:256:16:256:29 | CallExpr | | -| variables.rs:260:1:269:1 | enter param_pattern1 | variables.rs:261:5:261:6 | a8 | | -| variables.rs:260:1:269:1 | exit param_pattern1 (normal) | variables.rs:260:1:269:1 | exit param_pattern1 | | -| variables.rs:261:5:261:6 | a8 | variables.rs:261:5:261:12 | Param | match | -| variables.rs:261:5:261:12 | Param | variables.rs:262:5:265:5 | TuplePat | | +| variables.rs:256:16:256:29 | print_i64(...) | variables.rs:254:5:257:5 | match ... { ... } | | +| variables.rs:256:26:256:28 | a13 | variables.rs:256:16:256:29 | print_i64(...) | | +| variables.rs:260:1:269:1 | enter fn param_pattern1 | variables.rs:261:5:261:6 | a8 | | +| variables.rs:260:1:269:1 | exit fn param_pattern1 (normal) | variables.rs:260:1:269:1 | exit fn param_pattern1 | | +| variables.rs:261:5:261:6 | a8 | variables.rs:261:5:261:12 | a8: RefType | match | +| variables.rs:261:5:261:12 | a8: RefType | variables.rs:262:5:265:5 | TuplePat | | | variables.rs:262:5:265:5 | TuplePat | variables.rs:263:9:263:10 | b3 | match | -| variables.rs:262:5:265:19 | Param | variables.rs:266:5:266:18 | ExprStmt | | +| variables.rs:262:5:265:19 | TuplePat: TupleType | variables.rs:266:5:266:18 | ExprStmt | | | variables.rs:263:9:263:10 | b3 | variables.rs:264:9:264:10 | c1 | match | -| variables.rs:264:9:264:10 | c1 | variables.rs:262:5:265:19 | Param | match | -| variables.rs:265:28:269:1 | BlockExpr | variables.rs:260:1:269:1 | exit param_pattern1 (normal) | | +| variables.rs:264:9:264:10 | c1 | variables.rs:262:5:265:19 | TuplePat: TupleType | match | +| variables.rs:265:28:269:1 | { ... } | variables.rs:260:1:269:1 | exit fn param_pattern1 (normal) | | | variables.rs:266:5:266:13 | print_str | variables.rs:266:15:266:16 | a8 | | -| variables.rs:266:5:266:17 | CallExpr | variables.rs:267:5:267:18 | ExprStmt | | +| variables.rs:266:5:266:17 | print_str(...) | variables.rs:267:5:267:18 | ExprStmt | | | variables.rs:266:5:266:18 | ExprStmt | variables.rs:266:5:266:13 | print_str | | -| variables.rs:266:15:266:16 | a8 | variables.rs:266:5:266:17 | CallExpr | | +| variables.rs:266:15:266:16 | a8 | variables.rs:266:5:266:17 | print_str(...) | | | variables.rs:267:5:267:13 | print_str | variables.rs:267:15:267:16 | b3 | | -| variables.rs:267:5:267:17 | CallExpr | variables.rs:268:5:268:18 | ExprStmt | | +| variables.rs:267:5:267:17 | print_str(...) | variables.rs:268:5:268:18 | ExprStmt | | | variables.rs:267:5:267:18 | ExprStmt | variables.rs:267:5:267:13 | print_str | | -| variables.rs:267:15:267:16 | b3 | variables.rs:267:5:267:17 | CallExpr | | +| variables.rs:267:15:267:16 | b3 | variables.rs:267:5:267:17 | print_str(...) | | | variables.rs:268:5:268:13 | print_str | variables.rs:268:15:268:16 | c1 | | -| variables.rs:268:5:268:17 | CallExpr | variables.rs:265:28:269:1 | BlockExpr | | +| variables.rs:268:5:268:17 | print_str(...) | variables.rs:265:28:269:1 | { ... } | | | variables.rs:268:5:268:18 | ExprStmt | variables.rs:268:5:268:13 | print_str | | -| variables.rs:268:15:268:16 | c1 | variables.rs:268:5:268:17 | CallExpr | | -| variables.rs:271:1:275:1 | enter param_pattern2 | variables.rs:272:6:272:21 | TupleStructPat | | -| variables.rs:271:1:275:1 | exit param_pattern2 (normal) | variables.rs:271:1:275:1 | exit param_pattern2 | | -| variables.rs:272:5:272:50 | Param | variables.rs:274:5:274:18 | ExprStmt | | +| variables.rs:268:15:268:16 | c1 | variables.rs:268:5:268:17 | print_str(...) | | +| variables.rs:271:1:275:1 | enter fn param_pattern2 | variables.rs:272:6:272:21 | TupleStructPat | | +| variables.rs:271:1:275:1 | exit fn param_pattern2 (normal) | variables.rs:271:1:275:1 | exit fn param_pattern2 | | +| variables.rs:272:5:272:50 | (...): Either | variables.rs:274:5:274:18 | ExprStmt | | | variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:19:272:20 | a9 | match | | variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:25:272:41 | TupleStructPat | no-match | -| variables.rs:272:6:272:41 | [match(true)] OrPat | variables.rs:272:5:272:50 | Param | match | -| variables.rs:272:19:272:20 | a9 | variables.rs:272:6:272:41 | [match(true)] OrPat | match | +| variables.rs:272:6:272:41 | [match(true)] ... \| ... | variables.rs:272:5:272:50 | (...): Either | match | +| variables.rs:272:19:272:20 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | | variables.rs:272:25:272:41 | TupleStructPat | variables.rs:272:39:272:40 | a9 | match | -| variables.rs:272:39:272:40 | a9 | variables.rs:272:6:272:41 | [match(true)] OrPat | match | -| variables.rs:273:9:275:1 | BlockExpr | variables.rs:271:1:275:1 | exit param_pattern2 (normal) | | +| variables.rs:272:39:272:40 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | +| variables.rs:273:9:275:1 | { ... } | variables.rs:271:1:275:1 | exit fn param_pattern2 (normal) | | | variables.rs:274:5:274:13 | print_i64 | variables.rs:274:15:274:16 | a9 | | -| variables.rs:274:5:274:17 | CallExpr | variables.rs:273:9:275:1 | BlockExpr | | +| variables.rs:274:5:274:17 | print_i64(...) | variables.rs:273:9:275:1 | { ... } | | | variables.rs:274:5:274:18 | ExprStmt | variables.rs:274:5:274:13 | print_i64 | | -| variables.rs:274:15:274:16 | a9 | variables.rs:274:5:274:17 | CallExpr | | -| variables.rs:277:1:312:1 | enter destruct_assignment | variables.rs:278:5:282:18 | LetStmt | | -| variables.rs:277:1:312:1 | exit destruct_assignment (normal) | variables.rs:277:1:312:1 | exit destruct_assignment | | -| variables.rs:277:26:312:1 | BlockExpr | variables.rs:277:1:312:1 | exit destruct_assignment (normal) | | -| variables.rs:278:5:282:18 | LetStmt | variables.rs:282:10:282:10 | 1 | | +| variables.rs:274:15:274:16 | a9 | variables.rs:274:5:274:17 | print_i64(...) | | +| variables.rs:277:1:312:1 | enter fn destruct_assignment | variables.rs:278:5:282:18 | let TuplePat = ... | | +| variables.rs:277:1:312:1 | exit fn destruct_assignment (normal) | variables.rs:277:1:312:1 | exit fn destruct_assignment | | +| variables.rs:277:26:312:1 | { ... } | variables.rs:277:1:312:1 | exit fn destruct_assignment (normal) | | +| variables.rs:278:5:282:18 | let TuplePat = ... | variables.rs:282:10:282:10 | 1 | | | variables.rs:278:9:282:5 | TuplePat | variables.rs:279:9:279:15 | a10 | match | | variables.rs:279:9:279:15 | a10 | variables.rs:280:9:280:14 | b4 | match | | variables.rs:280:9:280:14 | b4 | variables.rs:281:9:281:14 | c2 | match | @@ -609,17 +609,17 @@ edges | variables.rs:282:13:282:13 | 2 | variables.rs:282:16:282:16 | 3 | | | variables.rs:282:16:282:16 | 3 | variables.rs:282:9:282:17 | TupleExpr | | | variables.rs:283:5:283:13 | print_i64 | variables.rs:283:15:283:17 | a10 | | -| variables.rs:283:5:283:18 | CallExpr | variables.rs:284:5:284:18 | ExprStmt | | +| variables.rs:283:5:283:18 | print_i64(...) | variables.rs:284:5:284:18 | ExprStmt | | | variables.rs:283:5:283:19 | ExprStmt | variables.rs:283:5:283:13 | print_i64 | | -| variables.rs:283:15:283:17 | a10 | variables.rs:283:5:283:18 | CallExpr | | +| variables.rs:283:15:283:17 | a10 | variables.rs:283:5:283:18 | print_i64(...) | | | variables.rs:284:5:284:13 | print_i64 | variables.rs:284:15:284:16 | b4 | | -| variables.rs:284:5:284:17 | CallExpr | variables.rs:285:5:285:18 | ExprStmt | | +| variables.rs:284:5:284:17 | print_i64(...) | variables.rs:285:5:285:18 | ExprStmt | | | variables.rs:284:5:284:18 | ExprStmt | variables.rs:284:5:284:13 | print_i64 | | -| variables.rs:284:15:284:16 | b4 | variables.rs:284:5:284:17 | CallExpr | | +| variables.rs:284:15:284:16 | b4 | variables.rs:284:5:284:17 | print_i64(...) | | | variables.rs:285:5:285:13 | print_i64 | variables.rs:285:15:285:16 | c2 | | -| variables.rs:285:5:285:17 | CallExpr | variables.rs:287:5:295:6 | ExprStmt | | +| variables.rs:285:5:285:17 | print_i64(...) | variables.rs:287:5:295:6 | ExprStmt | | | variables.rs:285:5:285:18 | ExprStmt | variables.rs:285:5:285:13 | print_i64 | | -| variables.rs:285:15:285:16 | c2 | variables.rs:285:5:285:17 | CallExpr | | +| variables.rs:285:15:285:16 | c2 | variables.rs:285:5:285:17 | print_i64(...) | | | variables.rs:287:5:291:5 | TupleExpr | variables.rs:292:9:292:11 | a10 | | | variables.rs:287:5:295:5 | ... = ... | variables.rs:296:5:296:19 | ExprStmt | | | variables.rs:287:5:295:6 | ExprStmt | variables.rs:288:9:288:10 | c2 | | @@ -631,105 +631,105 @@ edges | variables.rs:293:9:293:10 | b4 | variables.rs:294:9:294:10 | c2 | | | variables.rs:294:9:294:10 | c2 | variables.rs:291:9:295:5 | TupleExpr | | | variables.rs:296:5:296:13 | print_i64 | variables.rs:296:15:296:17 | a10 | | -| variables.rs:296:5:296:18 | CallExpr | variables.rs:297:5:297:18 | ExprStmt | | +| variables.rs:296:5:296:18 | print_i64(...) | variables.rs:297:5:297:18 | ExprStmt | | | variables.rs:296:5:296:19 | ExprStmt | variables.rs:296:5:296:13 | print_i64 | | -| variables.rs:296:15:296:17 | a10 | variables.rs:296:5:296:18 | CallExpr | | +| variables.rs:296:15:296:17 | a10 | variables.rs:296:5:296:18 | print_i64(...) | | | variables.rs:297:5:297:13 | print_i64 | variables.rs:297:15:297:16 | b4 | | -| variables.rs:297:5:297:17 | CallExpr | variables.rs:298:5:298:18 | ExprStmt | | +| variables.rs:297:5:297:17 | print_i64(...) | variables.rs:298:5:298:18 | ExprStmt | | | variables.rs:297:5:297:18 | ExprStmt | variables.rs:297:5:297:13 | print_i64 | | -| variables.rs:297:15:297:16 | b4 | variables.rs:297:5:297:17 | CallExpr | | +| variables.rs:297:15:297:16 | b4 | variables.rs:297:5:297:17 | print_i64(...) | | | variables.rs:298:5:298:13 | print_i64 | variables.rs:298:15:298:16 | c2 | | -| variables.rs:298:5:298:17 | CallExpr | variables.rs:300:5:308:5 | ExprStmt | | +| variables.rs:298:5:298:17 | print_i64(...) | variables.rs:300:5:308:5 | ExprStmt | | | variables.rs:298:5:298:18 | ExprStmt | variables.rs:298:5:298:13 | print_i64 | | -| variables.rs:298:15:298:16 | c2 | variables.rs:298:5:298:17 | CallExpr | | +| variables.rs:298:15:298:16 | c2 | variables.rs:298:5:298:17 | print_i64(...) | | | variables.rs:300:5:308:5 | ExprStmt | variables.rs:300:12:300:12 | 4 | | -| variables.rs:300:5:308:5 | MatchExpr | variables.rs:310:5:310:19 | ExprStmt | | +| variables.rs:300:5:308:5 | match ... { ... } | variables.rs:310:5:310:19 | ExprStmt | | | variables.rs:300:11:300:16 | TupleExpr | variables.rs:301:9:304:9 | TuplePat | | | variables.rs:300:12:300:12 | 4 | variables.rs:300:15:300:15 | 5 | | | variables.rs:300:15:300:15 | 5 | variables.rs:300:11:300:16 | TupleExpr | | | variables.rs:301:9:304:9 | TuplePat | variables.rs:302:13:302:15 | a10 | match | | variables.rs:302:13:302:15 | a10 | variables.rs:303:13:303:14 | b4 | match | | variables.rs:303:13:303:14 | b4 | variables.rs:305:13:305:27 | ExprStmt | match | -| variables.rs:304:14:307:9 | BlockExpr | variables.rs:300:5:308:5 | MatchExpr | | +| variables.rs:304:14:307:9 | { ... } | variables.rs:300:5:308:5 | match ... { ... } | | | variables.rs:305:13:305:21 | print_i64 | variables.rs:305:23:305:25 | a10 | | -| variables.rs:305:13:305:26 | CallExpr | variables.rs:306:13:306:26 | ExprStmt | | +| variables.rs:305:13:305:26 | print_i64(...) | variables.rs:306:13:306:26 | ExprStmt | | | variables.rs:305:13:305:27 | ExprStmt | variables.rs:305:13:305:21 | print_i64 | | -| variables.rs:305:23:305:25 | a10 | variables.rs:305:13:305:26 | CallExpr | | +| variables.rs:305:23:305:25 | a10 | variables.rs:305:13:305:26 | print_i64(...) | | | variables.rs:306:13:306:21 | print_i64 | variables.rs:306:23:306:24 | b4 | | -| variables.rs:306:13:306:25 | CallExpr | variables.rs:304:14:307:9 | BlockExpr | | +| variables.rs:306:13:306:25 | print_i64(...) | variables.rs:304:14:307:9 | { ... } | | | variables.rs:306:13:306:26 | ExprStmt | variables.rs:306:13:306:21 | print_i64 | | -| variables.rs:306:23:306:24 | b4 | variables.rs:306:13:306:25 | CallExpr | | +| variables.rs:306:23:306:24 | b4 | variables.rs:306:13:306:25 | print_i64(...) | | | variables.rs:310:5:310:13 | print_i64 | variables.rs:310:15:310:17 | a10 | | -| variables.rs:310:5:310:18 | CallExpr | variables.rs:311:5:311:18 | ExprStmt | | +| variables.rs:310:5:310:18 | print_i64(...) | variables.rs:311:5:311:18 | ExprStmt | | | variables.rs:310:5:310:19 | ExprStmt | variables.rs:310:5:310:13 | print_i64 | | -| variables.rs:310:15:310:17 | a10 | variables.rs:310:5:310:18 | CallExpr | | +| variables.rs:310:15:310:17 | a10 | variables.rs:310:5:310:18 | print_i64(...) | | | variables.rs:311:5:311:13 | print_i64 | variables.rs:311:15:311:16 | b4 | | -| variables.rs:311:5:311:17 | CallExpr | variables.rs:277:26:312:1 | BlockExpr | | +| variables.rs:311:5:311:17 | print_i64(...) | variables.rs:277:26:312:1 | { ... } | | | variables.rs:311:5:311:18 | ExprStmt | variables.rs:311:5:311:13 | print_i64 | | -| variables.rs:311:15:311:16 | b4 | variables.rs:311:5:311:17 | CallExpr | | -| variables.rs:314:1:329:1 | enter closure_variable | variables.rs:315:5:317:10 | LetStmt | | -| variables.rs:314:1:329:1 | exit closure_variable (normal) | variables.rs:314:1:329:1 | exit closure_variable | | -| variables.rs:314:23:329:1 | BlockExpr | variables.rs:314:1:329:1 | exit closure_variable (normal) | | -| variables.rs:315:5:317:10 | LetStmt | variables.rs:316:9:317:9 | ClosureExpr | | -| variables.rs:315:9:315:23 | example_closure | variables.rs:318:5:319:27 | LetStmt | match | -| variables.rs:316:9:317:9 | ClosureExpr | variables.rs:315:9:315:23 | example_closure | | -| variables.rs:316:9:317:9 | enter ClosureExpr | variables.rs:316:10:316:10 | x | | -| variables.rs:316:9:317:9 | exit ClosureExpr (normal) | variables.rs:316:9:317:9 | exit ClosureExpr | | -| variables.rs:316:10:316:10 | x | variables.rs:316:10:316:15 | Param | match | -| variables.rs:316:10:316:15 | Param | variables.rs:317:9:317:9 | x | | -| variables.rs:317:9:317:9 | x | variables.rs:316:9:317:9 | exit ClosureExpr (normal) | | -| variables.rs:318:5:319:27 | LetStmt | variables.rs:319:9:319:23 | example_closure | | +| variables.rs:311:15:311:16 | b4 | variables.rs:311:5:311:17 | print_i64(...) | | +| variables.rs:314:1:329:1 | enter fn closure_variable | variables.rs:315:5:317:10 | let example_closure = ... | | +| variables.rs:314:1:329:1 | exit fn closure_variable (normal) | variables.rs:314:1:329:1 | exit fn closure_variable | | +| variables.rs:314:23:329:1 | { ... } | variables.rs:314:1:329:1 | exit fn closure_variable (normal) | | +| variables.rs:315:5:317:10 | let example_closure = ... | variables.rs:316:9:317:9 | \|...\| ... | | +| variables.rs:315:9:315:23 | example_closure | variables.rs:318:5:319:27 | let n1 = ... | match | +| variables.rs:316:9:317:9 | \|...\| ... | variables.rs:315:9:315:23 | example_closure | | +| variables.rs:316:9:317:9 | enter \|...\| ... | variables.rs:316:10:316:10 | x | | +| variables.rs:316:9:317:9 | exit \|...\| ... (normal) | variables.rs:316:9:317:9 | exit \|...\| ... | | +| variables.rs:316:10:316:10 | x | variables.rs:316:10:316:15 | x: i64 | match | +| variables.rs:316:10:316:15 | x: i64 | variables.rs:317:9:317:9 | x | | +| variables.rs:317:9:317:9 | x | variables.rs:316:9:317:9 | exit \|...\| ... (normal) | | +| variables.rs:318:5:319:27 | let n1 = ... | variables.rs:319:9:319:23 | example_closure | | | variables.rs:318:9:318:10 | n1 | variables.rs:320:5:320:18 | ExprStmt | match | | variables.rs:319:9:319:23 | example_closure | variables.rs:319:25:319:25 | 5 | | -| variables.rs:319:9:319:26 | CallExpr | variables.rs:318:9:318:10 | n1 | | -| variables.rs:319:25:319:25 | 5 | variables.rs:319:9:319:26 | CallExpr | | +| variables.rs:319:9:319:26 | example_closure(...) | variables.rs:318:9:318:10 | n1 | | +| variables.rs:319:25:319:25 | 5 | variables.rs:319:9:319:26 | example_closure(...) | | | variables.rs:320:5:320:13 | print_i64 | variables.rs:320:15:320:16 | n1 | | -| variables.rs:320:5:320:17 | CallExpr | variables.rs:322:5:322:25 | ExprStmt | | +| variables.rs:320:5:320:17 | print_i64(...) | variables.rs:322:5:322:25 | ExprStmt | | | variables.rs:320:5:320:18 | ExprStmt | variables.rs:320:5:320:13 | print_i64 | | -| variables.rs:320:15:320:16 | n1 | variables.rs:320:5:320:17 | CallExpr | | -| variables.rs:322:5:322:22 | immutable_variable | variables.rs:322:5:322:24 | CallExpr | | -| variables.rs:322:5:322:24 | CallExpr | variables.rs:323:5:325:10 | LetStmt | | +| variables.rs:320:15:320:16 | n1 | variables.rs:320:5:320:17 | print_i64(...) | | +| variables.rs:322:5:322:22 | immutable_variable | variables.rs:322:5:322:24 | immutable_variable(...) | | +| variables.rs:322:5:322:24 | immutable_variable(...) | variables.rs:323:5:325:10 | let immutable_variable = ... | | | variables.rs:322:5:322:25 | ExprStmt | variables.rs:322:5:322:22 | immutable_variable | | -| variables.rs:323:5:325:10 | LetStmt | variables.rs:324:9:325:9 | ClosureExpr | | -| variables.rs:323:9:323:26 | immutable_variable | variables.rs:326:5:327:30 | LetStmt | match | -| variables.rs:324:9:325:9 | ClosureExpr | variables.rs:323:9:323:26 | immutable_variable | | -| variables.rs:324:9:325:9 | enter ClosureExpr | variables.rs:324:10:324:10 | x | | -| variables.rs:324:9:325:9 | exit ClosureExpr (normal) | variables.rs:324:9:325:9 | exit ClosureExpr | | -| variables.rs:324:10:324:10 | x | variables.rs:324:10:324:15 | Param | match | -| variables.rs:324:10:324:15 | Param | variables.rs:325:9:325:9 | x | | -| variables.rs:325:9:325:9 | x | variables.rs:324:9:325:9 | exit ClosureExpr (normal) | | -| variables.rs:326:5:327:30 | LetStmt | variables.rs:327:9:327:26 | immutable_variable | | +| variables.rs:323:5:325:10 | let immutable_variable = ... | variables.rs:324:9:325:9 | \|...\| ... | | +| variables.rs:323:9:323:26 | immutable_variable | variables.rs:326:5:327:30 | let n2 = ... | match | +| variables.rs:324:9:325:9 | \|...\| ... | variables.rs:323:9:323:26 | immutable_variable | | +| variables.rs:324:9:325:9 | enter \|...\| ... | variables.rs:324:10:324:10 | x | | +| variables.rs:324:9:325:9 | exit \|...\| ... (normal) | variables.rs:324:9:325:9 | exit \|...\| ... | | +| variables.rs:324:10:324:10 | x | variables.rs:324:10:324:15 | x: i64 | match | +| variables.rs:324:10:324:15 | x: i64 | variables.rs:325:9:325:9 | x | | +| variables.rs:325:9:325:9 | x | variables.rs:324:9:325:9 | exit \|...\| ... (normal) | | +| variables.rs:326:5:327:30 | let n2 = ... | variables.rs:327:9:327:26 | immutable_variable | | | variables.rs:326:9:326:10 | n2 | variables.rs:328:5:328:18 | ExprStmt | match | | variables.rs:327:9:327:26 | immutable_variable | variables.rs:327:28:327:28 | 6 | | -| variables.rs:327:9:327:29 | CallExpr | variables.rs:326:9:326:10 | n2 | | -| variables.rs:327:28:327:28 | 6 | variables.rs:327:9:327:29 | CallExpr | | +| variables.rs:327:9:327:29 | immutable_variable(...) | variables.rs:326:9:326:10 | n2 | | +| variables.rs:327:28:327:28 | 6 | variables.rs:327:9:327:29 | immutable_variable(...) | | | variables.rs:328:5:328:13 | print_i64 | variables.rs:328:15:328:16 | n2 | | -| variables.rs:328:5:328:17 | CallExpr | variables.rs:314:23:329:1 | BlockExpr | | +| variables.rs:328:5:328:17 | print_i64(...) | variables.rs:314:23:329:1 | { ... } | | | variables.rs:328:5:328:18 | ExprStmt | variables.rs:328:5:328:13 | print_i64 | | -| variables.rs:328:15:328:16 | n2 | variables.rs:328:5:328:17 | CallExpr | | -| variables.rs:331:1:338:1 | enter for_variable | variables.rs:332:5:332:42 | LetStmt | | -| variables.rs:331:1:338:1 | exit for_variable (normal) | variables.rs:331:1:338:1 | exit for_variable | | -| variables.rs:331:19:338:1 | BlockExpr | variables.rs:331:1:338:1 | exit for_variable (normal) | | -| variables.rs:332:5:332:42 | LetStmt | variables.rs:332:15:332:22 | "apples" | | +| variables.rs:328:15:328:16 | n2 | variables.rs:328:5:328:17 | print_i64(...) | | +| variables.rs:331:1:338:1 | enter fn for_variable | variables.rs:332:5:332:42 | let v = ... | | +| variables.rs:331:1:338:1 | exit fn for_variable (normal) | variables.rs:331:1:338:1 | exit fn for_variable | | +| variables.rs:331:19:338:1 | { ... } | variables.rs:331:1:338:1 | exit fn for_variable (normal) | | +| variables.rs:332:5:332:42 | let v = ... | variables.rs:332:15:332:22 | "apples" | | | variables.rs:332:9:332:9 | v | variables.rs:335:12:335:12 | v | match | -| variables.rs:332:13:332:41 | RefExpr | variables.rs:332:9:332:9 | v | | -| variables.rs:332:14:332:41 | ArrayExpr | variables.rs:332:13:332:41 | RefExpr | | +| variables.rs:332:13:332:41 | &... | variables.rs:332:9:332:9 | v | | +| variables.rs:332:14:332:41 | [...] | variables.rs:332:13:332:41 | &... | | | variables.rs:332:15:332:22 | "apples" | variables.rs:332:25:332:30 | "cake" | | | variables.rs:332:25:332:30 | "cake" | variables.rs:332:33:332:40 | "coffee" | | -| variables.rs:332:33:332:40 | "coffee" | variables.rs:332:14:332:41 | ArrayExpr | | -| variables.rs:334:5:337:5 | ForExpr | variables.rs:331:19:338:1 | BlockExpr | | +| variables.rs:332:33:332:40 | "coffee" | variables.rs:332:14:332:41 | [...] | | +| variables.rs:334:5:337:5 | ForExpr | variables.rs:331:19:338:1 | { ... } | | | variables.rs:334:9:334:12 | text | variables.rs:334:5:337:5 | ForExpr | no-match | | variables.rs:334:9:334:12 | text | variables.rs:336:9:336:24 | ExprStmt | match | | variables.rs:335:12:335:12 | v | variables.rs:334:9:334:12 | text | | -| variables.rs:335:14:337:5 | BlockExpr | variables.rs:334:9:334:12 | text | | +| variables.rs:335:14:337:5 | { ... } | variables.rs:334:9:334:12 | text | | | variables.rs:336:9:336:17 | print_str | variables.rs:336:19:336:22 | text | | -| variables.rs:336:9:336:23 | CallExpr | variables.rs:335:14:337:5 | BlockExpr | | +| variables.rs:336:9:336:23 | print_str(...) | variables.rs:335:14:337:5 | { ... } | | | variables.rs:336:9:336:24 | ExprStmt | variables.rs:336:9:336:17 | print_str | | -| variables.rs:336:19:336:22 | text | variables.rs:336:9:336:23 | CallExpr | | -| variables.rs:340:1:346:1 | enter add_assign | variables.rs:341:5:341:18 | LetStmt | | -| variables.rs:340:1:346:1 | exit add_assign (normal) | variables.rs:340:1:346:1 | exit add_assign | | -| variables.rs:340:17:346:1 | BlockExpr | variables.rs:340:1:346:1 | exit add_assign (normal) | | -| variables.rs:341:5:341:18 | LetStmt | variables.rs:341:17:341:17 | 0 | | +| variables.rs:336:19:336:22 | text | variables.rs:336:9:336:23 | print_str(...) | | +| variables.rs:340:1:346:1 | enter fn add_assign | variables.rs:341:5:341:18 | let a = ... | | +| variables.rs:340:1:346:1 | exit fn add_assign (normal) | variables.rs:340:1:346:1 | exit fn add_assign | | +| variables.rs:340:17:346:1 | { ... } | variables.rs:340:1:346:1 | exit fn add_assign (normal) | | +| variables.rs:341:5:341:18 | let a = ... | variables.rs:341:17:341:17 | 0 | | | variables.rs:341:9:341:13 | a | variables.rs:342:5:342:11 | ExprStmt | match | | variables.rs:341:17:341:17 | 0 | variables.rs:341:9:341:13 | a | | | variables.rs:342:5:342:5 | a | variables.rs:342:10:342:10 | 1 | | @@ -737,41 +737,41 @@ edges | variables.rs:342:5:342:11 | ExprStmt | variables.rs:342:5:342:5 | a | | | variables.rs:342:10:342:10 | 1 | variables.rs:342:5:342:10 | ... += ... | | | variables.rs:343:5:343:13 | print_i64 | variables.rs:343:15:343:15 | a | | -| variables.rs:343:5:343:16 | CallExpr | variables.rs:344:5:344:28 | ExprStmt | | +| variables.rs:343:5:343:16 | print_i64(...) | variables.rs:344:5:344:28 | ExprStmt | | | variables.rs:343:5:343:17 | ExprStmt | variables.rs:343:5:343:13 | print_i64 | | -| variables.rs:343:15:343:15 | a | variables.rs:343:5:343:16 | CallExpr | | +| variables.rs:343:15:343:15 | a | variables.rs:343:5:343:16 | print_i64(...) | | | variables.rs:344:5:344:27 | ... .add_assign(...) | variables.rs:345:5:345:17 | ExprStmt | | | variables.rs:344:5:344:28 | ExprStmt | variables.rs:344:11:344:11 | a | | -| variables.rs:344:6:344:11 | RefExpr | variables.rs:344:25:344:26 | 10 | | -| variables.rs:344:11:344:11 | a | variables.rs:344:6:344:11 | RefExpr | | +| variables.rs:344:6:344:11 | &mut ... | variables.rs:344:25:344:26 | 10 | | +| variables.rs:344:11:344:11 | a | variables.rs:344:6:344:11 | &mut ... | | | variables.rs:344:25:344:26 | 10 | variables.rs:344:5:344:27 | ... .add_assign(...) | | | variables.rs:345:5:345:13 | print_i64 | variables.rs:345:15:345:15 | a | | -| variables.rs:345:5:345:16 | CallExpr | variables.rs:340:17:346:1 | BlockExpr | | +| variables.rs:345:5:345:16 | print_i64(...) | variables.rs:340:17:346:1 | { ... } | | | variables.rs:345:5:345:17 | ExprStmt | variables.rs:345:5:345:13 | print_i64 | | -| variables.rs:345:15:345:15 | a | variables.rs:345:5:345:16 | CallExpr | | -| variables.rs:348:1:354:1 | enter mutate | variables.rs:349:5:349:18 | LetStmt | | -| variables.rs:348:1:354:1 | exit mutate (normal) | variables.rs:348:1:354:1 | exit mutate | | -| variables.rs:348:13:354:1 | BlockExpr | variables.rs:348:1:354:1 | exit mutate (normal) | | -| variables.rs:349:5:349:18 | LetStmt | variables.rs:349:17:349:17 | 1 | | -| variables.rs:349:9:349:13 | i | variables.rs:350:5:351:15 | LetStmt | match | +| variables.rs:345:15:345:15 | a | variables.rs:345:5:345:16 | print_i64(...) | | +| variables.rs:348:1:354:1 | enter fn mutate | variables.rs:349:5:349:18 | let i = ... | | +| variables.rs:348:1:354:1 | exit fn mutate (normal) | variables.rs:348:1:354:1 | exit fn mutate | | +| variables.rs:348:13:354:1 | { ... } | variables.rs:348:1:354:1 | exit fn mutate (normal) | | +| variables.rs:349:5:349:18 | let i = ... | variables.rs:349:17:349:17 | 1 | | +| variables.rs:349:9:349:13 | i | variables.rs:350:5:351:15 | let ref_i = ... | match | | variables.rs:349:17:349:17 | 1 | variables.rs:349:9:349:13 | i | | -| variables.rs:350:5:351:15 | LetStmt | variables.rs:351:14:351:14 | i | | +| variables.rs:350:5:351:15 | let ref_i = ... | variables.rs:351:14:351:14 | i | | | variables.rs:350:9:350:13 | ref_i | variables.rs:352:5:352:15 | ExprStmt | match | -| variables.rs:351:9:351:14 | RefExpr | variables.rs:350:9:350:13 | ref_i | | -| variables.rs:351:14:351:14 | i | variables.rs:351:9:351:14 | RefExpr | | +| variables.rs:351:9:351:14 | &mut ... | variables.rs:350:9:350:13 | ref_i | | +| variables.rs:351:14:351:14 | i | variables.rs:351:9:351:14 | &mut ... | | | variables.rs:352:5:352:10 | * ... | variables.rs:352:14:352:14 | 2 | | | variables.rs:352:5:352:14 | ... = ... | variables.rs:353:5:353:17 | ExprStmt | | | variables.rs:352:5:352:15 | ExprStmt | variables.rs:352:6:352:10 | ref_i | | | variables.rs:352:6:352:10 | ref_i | variables.rs:352:5:352:10 | * ... | | | variables.rs:352:14:352:14 | 2 | variables.rs:352:5:352:14 | ... = ... | | | variables.rs:353:5:353:13 | print_i64 | variables.rs:353:15:353:15 | i | | -| variables.rs:353:5:353:16 | CallExpr | variables.rs:348:13:354:1 | BlockExpr | | +| variables.rs:353:5:353:16 | print_i64(...) | variables.rs:348:13:354:1 | { ... } | | | variables.rs:353:5:353:17 | ExprStmt | variables.rs:353:5:353:13 | print_i64 | | -| variables.rs:353:15:353:15 | i | variables.rs:353:5:353:16 | CallExpr | | -| variables.rs:356:1:361:1 | enter mutate_param | variables.rs:356:17:356:17 | x | | -| variables.rs:356:1:361:1 | exit mutate_param (normal) | variables.rs:356:1:361:1 | exit mutate_param | | -| variables.rs:356:17:356:17 | x | variables.rs:356:17:356:28 | Param | match | -| variables.rs:356:17:356:28 | Param | variables.rs:357:5:359:11 | ExprStmt | | +| variables.rs:353:15:353:15 | i | variables.rs:353:5:353:16 | print_i64(...) | | +| variables.rs:356:1:361:1 | enter fn mutate_param | variables.rs:356:17:356:17 | x | | +| variables.rs:356:1:361:1 | exit fn mutate_param (normal) | variables.rs:356:1:361:1 | exit fn mutate_param | | +| variables.rs:356:17:356:17 | x | variables.rs:356:17:356:28 | x: RefType | match | +| variables.rs:356:17:356:28 | x: RefType | variables.rs:357:5:359:11 | ExprStmt | | | variables.rs:357:5:357:6 | * ... | variables.rs:358:10:358:10 | x | | | variables.rs:357:5:359:10 | ... = ... | variables.rs:360:5:360:13 | ExprStmt | | | variables.rs:357:5:359:11 | ExprStmt | variables.rs:357:6:357:6 | x | | @@ -781,16 +781,16 @@ edges | variables.rs:358:10:358:10 | x | variables.rs:358:9:358:10 | * ... | | | variables.rs:359:9:359:10 | * ... | variables.rs:358:9:359:10 | ... + ... | | | variables.rs:359:10:359:10 | x | variables.rs:359:9:359:10 | * ... | | -| variables.rs:360:5:360:12 | ReturnExpr | variables.rs:356:1:361:1 | exit mutate_param (normal) | return | +| variables.rs:360:5:360:12 | return ... | variables.rs:356:1:361:1 | exit fn mutate_param (normal) | return | | variables.rs:360:5:360:13 | ExprStmt | variables.rs:360:12:360:12 | x | | -| variables.rs:360:12:360:12 | x | variables.rs:360:5:360:12 | ReturnExpr | | -| variables.rs:363:1:369:1 | enter mutate_param2 | variables.rs:363:22:363:22 | x | | -| variables.rs:363:1:369:1 | exit mutate_param2 (normal) | variables.rs:363:1:369:1 | exit mutate_param2 | | -| variables.rs:363:22:363:22 | x | variables.rs:363:22:363:36 | Param | match | -| variables.rs:363:22:363:36 | Param | variables.rs:363:39:363:39 | y | | -| variables.rs:363:39:363:39 | y | variables.rs:363:39:363:57 | Param | match | -| variables.rs:363:39:363:57 | Param | variables.rs:364:5:366:11 | ExprStmt | | -| variables.rs:363:60:369:1 | BlockExpr | variables.rs:363:1:369:1 | exit mutate_param2 (normal) | | +| variables.rs:360:12:360:12 | x | variables.rs:360:5:360:12 | return ... | | +| variables.rs:363:1:369:1 | enter fn mutate_param2 | variables.rs:363:22:363:22 | x | | +| variables.rs:363:1:369:1 | exit fn mutate_param2 (normal) | variables.rs:363:1:369:1 | exit fn mutate_param2 | | +| variables.rs:363:22:363:22 | x | variables.rs:363:22:363:36 | x: RefType | match | +| variables.rs:363:22:363:36 | x: RefType | variables.rs:363:39:363:39 | y | | +| variables.rs:363:39:363:39 | y | variables.rs:363:39:363:57 | y: RefType | match | +| variables.rs:363:39:363:57 | y: RefType | variables.rs:364:5:366:11 | ExprStmt | | +| variables.rs:363:60:369:1 | { ... } | variables.rs:363:1:369:1 | exit fn mutate_param2 (normal) | | | variables.rs:364:5:364:6 | * ... | variables.rs:365:10:365:10 | x | | | variables.rs:364:5:366:10 | ... = ... | variables.rs:367:5:368:10 | ExprStmt | | | variables.rs:364:5:366:11 | ExprStmt | variables.rs:364:6:364:6 | x | | @@ -801,45 +801,45 @@ edges | variables.rs:366:9:366:10 | * ... | variables.rs:365:9:366:10 | ... + ... | | | variables.rs:366:10:366:10 | x | variables.rs:366:9:366:10 | * ... | | | variables.rs:367:5:367:6 | * ... | variables.rs:368:9:368:9 | x | | -| variables.rs:367:5:368:9 | ... = ... | variables.rs:363:60:369:1 | BlockExpr | | +| variables.rs:367:5:368:9 | ... = ... | variables.rs:363:60:369:1 | { ... } | | | variables.rs:367:5:368:10 | ExprStmt | variables.rs:367:6:367:6 | y | | | variables.rs:367:6:367:6 | y | variables.rs:367:5:367:6 | * ... | | | variables.rs:368:9:368:9 | x | variables.rs:367:5:368:9 | ... = ... | | -| variables.rs:371:1:389:1 | enter mutate_arg | variables.rs:372:5:372:18 | LetStmt | | -| variables.rs:371:1:389:1 | exit mutate_arg (normal) | variables.rs:371:1:389:1 | exit mutate_arg | | -| variables.rs:371:17:389:1 | BlockExpr | variables.rs:371:1:389:1 | exit mutate_arg (normal) | | -| variables.rs:372:5:372:18 | LetStmt | variables.rs:372:17:372:17 | 2 | | -| variables.rs:372:9:372:13 | x | variables.rs:373:5:374:29 | LetStmt | match | +| variables.rs:371:1:389:1 | enter fn mutate_arg | variables.rs:372:5:372:18 | let x = ... | | +| variables.rs:371:1:389:1 | exit fn mutate_arg (normal) | variables.rs:371:1:389:1 | exit fn mutate_arg | | +| variables.rs:371:17:389:1 | { ... } | variables.rs:371:1:389:1 | exit fn mutate_arg (normal) | | +| variables.rs:372:5:372:18 | let x = ... | variables.rs:372:17:372:17 | 2 | | +| variables.rs:372:9:372:13 | x | variables.rs:373:5:374:29 | let y = ... | match | | variables.rs:372:17:372:17 | 2 | variables.rs:372:9:372:13 | x | | -| variables.rs:373:5:374:29 | LetStmt | variables.rs:374:9:374:20 | mutate_param | | +| variables.rs:373:5:374:29 | let y = ... | variables.rs:374:9:374:20 | mutate_param | | | variables.rs:373:9:373:9 | y | variables.rs:375:5:375:12 | ExprStmt | match | | variables.rs:374:9:374:20 | mutate_param | variables.rs:374:27:374:27 | x | | -| variables.rs:374:9:374:28 | CallExpr | variables.rs:373:9:373:9 | y | | -| variables.rs:374:22:374:27 | RefExpr | variables.rs:374:9:374:28 | CallExpr | | -| variables.rs:374:27:374:27 | x | variables.rs:374:22:374:27 | RefExpr | | +| variables.rs:374:9:374:28 | mutate_param(...) | variables.rs:373:9:373:9 | y | | +| variables.rs:374:22:374:27 | &mut ... | variables.rs:374:9:374:28 | mutate_param(...) | | +| variables.rs:374:27:374:27 | x | variables.rs:374:22:374:27 | &mut ... | | | variables.rs:375:5:375:6 | * ... | variables.rs:375:10:375:11 | 10 | | | variables.rs:375:5:375:11 | ... = ... | variables.rs:377:5:377:17 | ExprStmt | | | variables.rs:375:5:375:12 | ExprStmt | variables.rs:375:6:375:6 | y | | | variables.rs:375:6:375:6 | y | variables.rs:375:5:375:6 | * ... | | | variables.rs:375:10:375:11 | 10 | variables.rs:375:5:375:11 | ... = ... | | | variables.rs:377:5:377:13 | print_i64 | variables.rs:377:15:377:15 | x | | -| variables.rs:377:5:377:16 | CallExpr | variables.rs:379:5:379:18 | LetStmt | | +| variables.rs:377:5:377:16 | print_i64(...) | variables.rs:379:5:379:18 | let z = ... | | | variables.rs:377:5:377:17 | ExprStmt | variables.rs:377:5:377:13 | print_i64 | | -| variables.rs:377:15:377:15 | x | variables.rs:377:5:377:16 | CallExpr | | -| variables.rs:379:5:379:18 | LetStmt | variables.rs:379:17:379:17 | 4 | | -| variables.rs:379:9:379:13 | z | variables.rs:380:5:381:20 | LetStmt | match | +| variables.rs:377:15:377:15 | x | variables.rs:377:5:377:16 | print_i64(...) | | +| variables.rs:379:5:379:18 | let z = ... | variables.rs:379:17:379:17 | 4 | | +| variables.rs:379:9:379:13 | z | variables.rs:380:5:381:20 | let w = ... | match | | variables.rs:379:17:379:17 | 4 | variables.rs:379:9:379:13 | z | | -| variables.rs:380:5:381:20 | LetStmt | variables.rs:381:19:381:19 | x | | +| variables.rs:380:5:381:20 | let w = ... | variables.rs:381:19:381:19 | x | | | variables.rs:380:9:380:9 | w | variables.rs:382:5:385:6 | ExprStmt | match | -| variables.rs:381:9:381:19 | RefExpr | variables.rs:380:9:380:9 | w | | -| variables.rs:381:14:381:19 | RefExpr | variables.rs:381:9:381:19 | RefExpr | | -| variables.rs:381:19:381:19 | x | variables.rs:381:14:381:19 | RefExpr | | +| variables.rs:381:9:381:19 | &mut ... | variables.rs:380:9:380:9 | w | | +| variables.rs:381:14:381:19 | &mut ... | variables.rs:381:9:381:19 | &mut ... | | +| variables.rs:381:19:381:19 | x | variables.rs:381:14:381:19 | &mut ... | | | variables.rs:382:5:382:17 | mutate_param2 | variables.rs:383:14:383:14 | z | | -| variables.rs:382:5:385:5 | CallExpr | variables.rs:386:5:386:13 | ExprStmt | | +| variables.rs:382:5:385:5 | mutate_param2(...) | variables.rs:386:5:386:13 | ExprStmt | | | variables.rs:382:5:385:6 | ExprStmt | variables.rs:382:5:382:17 | mutate_param2 | | -| variables.rs:383:9:383:14 | RefExpr | variables.rs:384:9:384:9 | w | | -| variables.rs:383:14:383:14 | z | variables.rs:383:9:383:14 | RefExpr | | -| variables.rs:384:9:384:9 | w | variables.rs:382:5:385:5 | CallExpr | | +| variables.rs:383:9:383:14 | &mut ... | variables.rs:384:9:384:9 | w | | +| variables.rs:383:14:383:14 | z | variables.rs:383:9:383:14 | &mut ... | | +| variables.rs:384:9:384:9 | w | variables.rs:382:5:385:5 | mutate_param2(...) | | | variables.rs:386:5:386:7 | * ... | variables.rs:386:11:386:12 | 11 | | | variables.rs:386:5:386:12 | ... = ... | variables.rs:388:5:388:17 | ExprStmt | | | variables.rs:386:5:386:13 | ExprStmt | variables.rs:386:7:386:7 | w | | @@ -847,422 +847,422 @@ edges | variables.rs:386:7:386:7 | w | variables.rs:386:6:386:7 | * ... | | | variables.rs:386:11:386:12 | 11 | variables.rs:386:5:386:12 | ... = ... | | | variables.rs:388:5:388:13 | print_i64 | variables.rs:388:15:388:15 | z | | -| variables.rs:388:5:388:16 | CallExpr | variables.rs:371:17:389:1 | BlockExpr | | +| variables.rs:388:5:388:16 | print_i64(...) | variables.rs:371:17:389:1 | { ... } | | | variables.rs:388:5:388:17 | ExprStmt | variables.rs:388:5:388:13 | print_i64 | | -| variables.rs:388:15:388:15 | z | variables.rs:388:5:388:16 | CallExpr | | -| variables.rs:391:1:397:1 | enter alias | variables.rs:392:5:392:18 | LetStmt | | -| variables.rs:391:1:397:1 | exit alias (normal) | variables.rs:391:1:397:1 | exit alias | | -| variables.rs:391:12:397:1 | BlockExpr | variables.rs:391:1:397:1 | exit alias (normal) | | -| variables.rs:392:5:392:18 | LetStmt | variables.rs:392:17:392:17 | 1 | | -| variables.rs:392:9:392:13 | x | variables.rs:393:5:394:15 | LetStmt | match | +| variables.rs:388:15:388:15 | z | variables.rs:388:5:388:16 | print_i64(...) | | +| variables.rs:391:1:397:1 | enter fn alias | variables.rs:392:5:392:18 | let x = ... | | +| variables.rs:391:1:397:1 | exit fn alias (normal) | variables.rs:391:1:397:1 | exit fn alias | | +| variables.rs:391:12:397:1 | { ... } | variables.rs:391:1:397:1 | exit fn alias (normal) | | +| variables.rs:392:5:392:18 | let x = ... | variables.rs:392:17:392:17 | 1 | | +| variables.rs:392:9:392:13 | x | variables.rs:393:5:394:15 | let y = ... | match | | variables.rs:392:17:392:17 | 1 | variables.rs:392:9:392:13 | x | | -| variables.rs:393:5:394:15 | LetStmt | variables.rs:394:14:394:14 | x | | +| variables.rs:393:5:394:15 | let y = ... | variables.rs:394:14:394:14 | x | | | variables.rs:393:9:393:9 | y | variables.rs:395:5:395:11 | ExprStmt | match | -| variables.rs:394:9:394:14 | RefExpr | variables.rs:393:9:393:9 | y | | -| variables.rs:394:14:394:14 | x | variables.rs:394:9:394:14 | RefExpr | | +| variables.rs:394:9:394:14 | &mut ... | variables.rs:393:9:393:9 | y | | +| variables.rs:394:14:394:14 | x | variables.rs:394:9:394:14 | &mut ... | | | variables.rs:395:5:395:6 | * ... | variables.rs:395:10:395:10 | 2 | | | variables.rs:395:5:395:10 | ... = ... | variables.rs:396:5:396:17 | ExprStmt | | | variables.rs:395:5:395:11 | ExprStmt | variables.rs:395:6:395:6 | y | | | variables.rs:395:6:395:6 | y | variables.rs:395:5:395:6 | * ... | | | variables.rs:395:10:395:10 | 2 | variables.rs:395:5:395:10 | ... = ... | | | variables.rs:396:5:396:13 | print_i64 | variables.rs:396:15:396:15 | x | | -| variables.rs:396:5:396:16 | CallExpr | variables.rs:391:12:397:1 | BlockExpr | | +| variables.rs:396:5:396:16 | print_i64(...) | variables.rs:391:12:397:1 | { ... } | | | variables.rs:396:5:396:17 | ExprStmt | variables.rs:396:5:396:13 | print_i64 | | -| variables.rs:396:15:396:15 | x | variables.rs:396:5:396:16 | CallExpr | | -| variables.rs:399:1:407:1 | enter capture_immut | variables.rs:400:5:400:16 | LetStmt | | -| variables.rs:399:1:407:1 | exit capture_immut (normal) | variables.rs:399:1:407:1 | exit capture_immut | | -| variables.rs:399:20:407:1 | BlockExpr | variables.rs:399:1:407:1 | exit capture_immut (normal) | | -| variables.rs:400:5:400:16 | LetStmt | variables.rs:400:13:400:15 | 100 | | -| variables.rs:400:9:400:9 | x | variables.rs:402:5:404:6 | LetStmt | match | +| variables.rs:396:15:396:15 | x | variables.rs:396:5:396:16 | print_i64(...) | | +| variables.rs:399:1:407:1 | enter fn capture_immut | variables.rs:400:5:400:16 | let x = ... | | +| variables.rs:399:1:407:1 | exit fn capture_immut (normal) | variables.rs:399:1:407:1 | exit fn capture_immut | | +| variables.rs:399:20:407:1 | { ... } | variables.rs:399:1:407:1 | exit fn capture_immut (normal) | | +| variables.rs:400:5:400:16 | let x = ... | variables.rs:400:13:400:15 | 100 | | +| variables.rs:400:9:400:9 | x | variables.rs:402:5:404:6 | let cap = ... | match | | variables.rs:400:13:400:15 | 100 | variables.rs:400:9:400:9 | x | | -| variables.rs:402:5:404:6 | LetStmt | variables.rs:402:15:404:5 | ClosureExpr | | +| variables.rs:402:5:404:6 | let cap = ... | variables.rs:402:15:404:5 | \|...\| ... | | | variables.rs:402:9:402:11 | cap | variables.rs:405:5:405:10 | ExprStmt | match | -| variables.rs:402:15:404:5 | ClosureExpr | variables.rs:402:9:402:11 | cap | | -| variables.rs:402:15:404:5 | enter ClosureExpr | variables.rs:403:9:403:21 | ExprStmt | | -| variables.rs:402:15:404:5 | exit ClosureExpr (normal) | variables.rs:402:15:404:5 | exit ClosureExpr | | -| variables.rs:402:18:404:5 | BlockExpr | variables.rs:402:15:404:5 | exit ClosureExpr (normal) | | +| variables.rs:402:15:404:5 | \|...\| ... | variables.rs:402:9:402:11 | cap | | +| variables.rs:402:15:404:5 | enter \|...\| ... | variables.rs:403:9:403:21 | ExprStmt | | +| variables.rs:402:15:404:5 | exit \|...\| ... (normal) | variables.rs:402:15:404:5 | exit \|...\| ... | | +| variables.rs:402:18:404:5 | { ... } | variables.rs:402:15:404:5 | exit \|...\| ... (normal) | | | variables.rs:403:9:403:17 | print_i64 | variables.rs:403:19:403:19 | x | | -| variables.rs:403:9:403:20 | CallExpr | variables.rs:402:18:404:5 | BlockExpr | | +| variables.rs:403:9:403:20 | print_i64(...) | variables.rs:402:18:404:5 | { ... } | | | variables.rs:403:9:403:21 | ExprStmt | variables.rs:403:9:403:17 | print_i64 | | -| variables.rs:403:19:403:19 | x | variables.rs:403:9:403:20 | CallExpr | | -| variables.rs:405:5:405:7 | cap | variables.rs:405:5:405:9 | CallExpr | | -| variables.rs:405:5:405:9 | CallExpr | variables.rs:406:5:406:17 | ExprStmt | | +| variables.rs:403:19:403:19 | x | variables.rs:403:9:403:20 | print_i64(...) | | +| variables.rs:405:5:405:7 | cap | variables.rs:405:5:405:9 | cap(...) | | +| variables.rs:405:5:405:9 | cap(...) | variables.rs:406:5:406:17 | ExprStmt | | | variables.rs:405:5:405:10 | ExprStmt | variables.rs:405:5:405:7 | cap | | | variables.rs:406:5:406:13 | print_i64 | variables.rs:406:15:406:15 | x | | -| variables.rs:406:5:406:16 | CallExpr | variables.rs:399:20:407:1 | BlockExpr | | +| variables.rs:406:5:406:16 | print_i64(...) | variables.rs:399:20:407:1 | { ... } | | | variables.rs:406:5:406:17 | ExprStmt | variables.rs:406:5:406:13 | print_i64 | | -| variables.rs:406:15:406:15 | x | variables.rs:406:5:406:16 | CallExpr | | -| variables.rs:409:1:433:1 | enter capture_mut | variables.rs:410:5:410:18 | LetStmt | | -| variables.rs:409:1:433:1 | exit capture_mut (normal) | variables.rs:409:1:433:1 | exit capture_mut | | -| variables.rs:409:18:433:1 | BlockExpr | variables.rs:409:1:433:1 | exit capture_mut (normal) | | -| variables.rs:410:5:410:18 | LetStmt | variables.rs:410:17:410:17 | 1 | | -| variables.rs:410:9:410:13 | x | variables.rs:412:5:414:6 | LetStmt | match | +| variables.rs:406:15:406:15 | x | variables.rs:406:5:406:16 | print_i64(...) | | +| variables.rs:409:1:433:1 | enter fn capture_mut | variables.rs:410:5:410:18 | let x = ... | | +| variables.rs:409:1:433:1 | exit fn capture_mut (normal) | variables.rs:409:1:433:1 | exit fn capture_mut | | +| variables.rs:409:18:433:1 | { ... } | variables.rs:409:1:433:1 | exit fn capture_mut (normal) | | +| variables.rs:410:5:410:18 | let x = ... | variables.rs:410:17:410:17 | 1 | | +| variables.rs:410:9:410:13 | x | variables.rs:412:5:414:6 | let closure1 = ... | match | | variables.rs:410:17:410:17 | 1 | variables.rs:410:9:410:13 | x | | -| variables.rs:412:5:414:6 | LetStmt | variables.rs:412:20:414:5 | ClosureExpr | | +| variables.rs:412:5:414:6 | let closure1 = ... | variables.rs:412:20:414:5 | \|...\| ... | | | variables.rs:412:9:412:16 | closure1 | variables.rs:415:5:415:15 | ExprStmt | match | -| variables.rs:412:20:414:5 | ClosureExpr | variables.rs:412:9:412:16 | closure1 | | -| variables.rs:412:20:414:5 | enter ClosureExpr | variables.rs:413:9:413:21 | ExprStmt | | -| variables.rs:412:20:414:5 | exit ClosureExpr (normal) | variables.rs:412:20:414:5 | exit ClosureExpr | | -| variables.rs:412:23:414:5 | BlockExpr | variables.rs:412:20:414:5 | exit ClosureExpr (normal) | | +| variables.rs:412:20:414:5 | \|...\| ... | variables.rs:412:9:412:16 | closure1 | | +| variables.rs:412:20:414:5 | enter \|...\| ... | variables.rs:413:9:413:21 | ExprStmt | | +| variables.rs:412:20:414:5 | exit \|...\| ... (normal) | variables.rs:412:20:414:5 | exit \|...\| ... | | +| variables.rs:412:23:414:5 | { ... } | variables.rs:412:20:414:5 | exit \|...\| ... (normal) | | | variables.rs:413:9:413:17 | print_i64 | variables.rs:413:19:413:19 | x | | -| variables.rs:413:9:413:20 | CallExpr | variables.rs:412:23:414:5 | BlockExpr | | +| variables.rs:413:9:413:20 | print_i64(...) | variables.rs:412:23:414:5 | { ... } | | | variables.rs:413:9:413:21 | ExprStmt | variables.rs:413:9:413:17 | print_i64 | | -| variables.rs:413:19:413:19 | x | variables.rs:413:9:413:20 | CallExpr | | -| variables.rs:415:5:415:12 | closure1 | variables.rs:415:5:415:14 | CallExpr | | -| variables.rs:415:5:415:14 | CallExpr | variables.rs:416:5:416:17 | ExprStmt | | +| variables.rs:413:19:413:19 | x | variables.rs:413:9:413:20 | print_i64(...) | | +| variables.rs:415:5:415:12 | closure1 | variables.rs:415:5:415:14 | closure1(...) | | +| variables.rs:415:5:415:14 | closure1(...) | variables.rs:416:5:416:17 | ExprStmt | | | variables.rs:415:5:415:15 | ExprStmt | variables.rs:415:5:415:12 | closure1 | | | variables.rs:416:5:416:13 | print_i64 | variables.rs:416:15:416:15 | x | | -| variables.rs:416:5:416:16 | CallExpr | variables.rs:418:5:418:18 | LetStmt | | +| variables.rs:416:5:416:16 | print_i64(...) | variables.rs:418:5:418:18 | let y = ... | | | variables.rs:416:5:416:17 | ExprStmt | variables.rs:416:5:416:13 | print_i64 | | -| variables.rs:416:15:416:15 | x | variables.rs:416:5:416:16 | CallExpr | | -| variables.rs:418:5:418:18 | LetStmt | variables.rs:418:17:418:17 | 2 | | -| variables.rs:418:9:418:13 | y | variables.rs:420:5:422:6 | LetStmt | match | +| variables.rs:416:15:416:15 | x | variables.rs:416:5:416:16 | print_i64(...) | | +| variables.rs:418:5:418:18 | let y = ... | variables.rs:418:17:418:17 | 2 | | +| variables.rs:418:9:418:13 | y | variables.rs:420:5:422:6 | let closure2 = ... | match | | variables.rs:418:17:418:17 | 2 | variables.rs:418:9:418:13 | y | | -| variables.rs:420:5:422:6 | LetStmt | variables.rs:420:24:422:5 | ClosureExpr | | +| variables.rs:420:5:422:6 | let closure2 = ... | variables.rs:420:24:422:5 | \|...\| ... | | | variables.rs:420:9:420:20 | closure2 | variables.rs:423:5:423:15 | ExprStmt | match | -| variables.rs:420:24:422:5 | ClosureExpr | variables.rs:420:9:420:20 | closure2 | | -| variables.rs:420:24:422:5 | enter ClosureExpr | variables.rs:421:9:421:14 | ExprStmt | | -| variables.rs:420:24:422:5 | exit ClosureExpr (normal) | variables.rs:420:24:422:5 | exit ClosureExpr | | -| variables.rs:420:27:422:5 | BlockExpr | variables.rs:420:24:422:5 | exit ClosureExpr (normal) | | +| variables.rs:420:24:422:5 | \|...\| ... | variables.rs:420:9:420:20 | closure2 | | +| variables.rs:420:24:422:5 | enter \|...\| ... | variables.rs:421:9:421:14 | ExprStmt | | +| variables.rs:420:24:422:5 | exit \|...\| ... (normal) | variables.rs:420:24:422:5 | exit \|...\| ... | | +| variables.rs:420:27:422:5 | { ... } | variables.rs:420:24:422:5 | exit \|...\| ... (normal) | | | variables.rs:421:9:421:9 | y | variables.rs:421:13:421:13 | 3 | | -| variables.rs:421:9:421:13 | ... = ... | variables.rs:420:27:422:5 | BlockExpr | | +| variables.rs:421:9:421:13 | ... = ... | variables.rs:420:27:422:5 | { ... } | | | variables.rs:421:9:421:14 | ExprStmt | variables.rs:421:9:421:9 | y | | | variables.rs:421:13:421:13 | 3 | variables.rs:421:9:421:13 | ... = ... | | -| variables.rs:423:5:423:12 | closure2 | variables.rs:423:5:423:14 | CallExpr | | -| variables.rs:423:5:423:14 | CallExpr | variables.rs:424:5:424:17 | ExprStmt | | +| variables.rs:423:5:423:12 | closure2 | variables.rs:423:5:423:14 | closure2(...) | | +| variables.rs:423:5:423:14 | closure2(...) | variables.rs:424:5:424:17 | ExprStmt | | | variables.rs:423:5:423:15 | ExprStmt | variables.rs:423:5:423:12 | closure2 | | | variables.rs:424:5:424:13 | print_i64 | variables.rs:424:15:424:15 | y | | -| variables.rs:424:5:424:16 | CallExpr | variables.rs:426:5:426:18 | LetStmt | | +| variables.rs:424:5:424:16 | print_i64(...) | variables.rs:426:5:426:18 | let z = ... | | | variables.rs:424:5:424:17 | ExprStmt | variables.rs:424:5:424:13 | print_i64 | | -| variables.rs:424:15:424:15 | y | variables.rs:424:5:424:16 | CallExpr | | -| variables.rs:426:5:426:18 | LetStmt | variables.rs:426:17:426:17 | 2 | | -| variables.rs:426:9:426:13 | z | variables.rs:428:5:430:6 | LetStmt | match | +| variables.rs:424:15:424:15 | y | variables.rs:424:5:424:16 | print_i64(...) | | +| variables.rs:426:5:426:18 | let z = ... | variables.rs:426:17:426:17 | 2 | | +| variables.rs:426:9:426:13 | z | variables.rs:428:5:430:6 | let closure3 = ... | match | | variables.rs:426:17:426:17 | 2 | variables.rs:426:9:426:13 | z | | -| variables.rs:428:5:430:6 | LetStmt | variables.rs:428:24:430:5 | ClosureExpr | | +| variables.rs:428:5:430:6 | let closure3 = ... | variables.rs:428:24:430:5 | \|...\| ... | | | variables.rs:428:9:428:20 | closure3 | variables.rs:431:5:431:15 | ExprStmt | match | -| variables.rs:428:24:430:5 | ClosureExpr | variables.rs:428:9:428:20 | closure3 | | -| variables.rs:428:24:430:5 | enter ClosureExpr | variables.rs:429:9:429:24 | ExprStmt | | -| variables.rs:428:24:430:5 | exit ClosureExpr (normal) | variables.rs:428:24:430:5 | exit ClosureExpr | | -| variables.rs:428:27:430:5 | BlockExpr | variables.rs:428:24:430:5 | exit ClosureExpr (normal) | | +| variables.rs:428:24:430:5 | \|...\| ... | variables.rs:428:9:428:20 | closure3 | | +| variables.rs:428:24:430:5 | enter \|...\| ... | variables.rs:429:9:429:24 | ExprStmt | | +| variables.rs:428:24:430:5 | exit \|...\| ... (normal) | variables.rs:428:24:430:5 | exit \|...\| ... | | +| variables.rs:428:27:430:5 | { ... } | variables.rs:428:24:430:5 | exit \|...\| ... (normal) | | | variables.rs:429:9:429:9 | z | variables.rs:429:22:429:22 | 1 | | -| variables.rs:429:9:429:23 | ... .add_assign(...) | variables.rs:428:27:430:5 | BlockExpr | | +| variables.rs:429:9:429:23 | ... .add_assign(...) | variables.rs:428:27:430:5 | { ... } | | | variables.rs:429:9:429:24 | ExprStmt | variables.rs:429:9:429:9 | z | | | variables.rs:429:22:429:22 | 1 | variables.rs:429:9:429:23 | ... .add_assign(...) | | -| variables.rs:431:5:431:12 | closure3 | variables.rs:431:5:431:14 | CallExpr | | -| variables.rs:431:5:431:14 | CallExpr | variables.rs:432:5:432:17 | ExprStmt | | +| variables.rs:431:5:431:12 | closure3 | variables.rs:431:5:431:14 | closure3(...) | | +| variables.rs:431:5:431:14 | closure3(...) | variables.rs:432:5:432:17 | ExprStmt | | | variables.rs:431:5:431:15 | ExprStmt | variables.rs:431:5:431:12 | closure3 | | | variables.rs:432:5:432:13 | print_i64 | variables.rs:432:15:432:15 | z | | -| variables.rs:432:5:432:16 | CallExpr | variables.rs:409:18:433:1 | BlockExpr | | +| variables.rs:432:5:432:16 | print_i64(...) | variables.rs:409:18:433:1 | { ... } | | | variables.rs:432:5:432:17 | ExprStmt | variables.rs:432:5:432:13 | print_i64 | | -| variables.rs:432:15:432:15 | z | variables.rs:432:5:432:16 | CallExpr | | -| variables.rs:435:1:443:1 | enter async_block_capture | variables.rs:436:5:436:23 | LetStmt | | -| variables.rs:435:1:443:1 | exit async_block_capture (normal) | variables.rs:435:1:443:1 | exit async_block_capture | | -| variables.rs:435:32:443:1 | BlockExpr | variables.rs:435:1:443:1 | exit async_block_capture (normal) | | -| variables.rs:436:5:436:23 | LetStmt | variables.rs:436:22:436:22 | 0 | | -| variables.rs:436:9:436:13 | i | variables.rs:437:5:439:6 | LetStmt | match | +| variables.rs:432:15:432:15 | z | variables.rs:432:5:432:16 | print_i64(...) | | +| variables.rs:435:1:443:1 | enter fn async_block_capture | variables.rs:436:5:436:23 | let i = ... | | +| variables.rs:435:1:443:1 | exit fn async_block_capture (normal) | variables.rs:435:1:443:1 | exit fn async_block_capture | | +| variables.rs:435:32:443:1 | { ... } | variables.rs:435:1:443:1 | exit fn async_block_capture (normal) | | +| variables.rs:436:5:436:23 | let i = ... | variables.rs:436:22:436:22 | 0 | | +| variables.rs:436:9:436:13 | i | variables.rs:437:5:439:6 | let block = ... | match | | variables.rs:436:22:436:22 | 0 | variables.rs:436:9:436:13 | i | | -| variables.rs:437:5:439:6 | LetStmt | variables.rs:437:17:439:5 | BlockExpr | | +| variables.rs:437:5:439:6 | let block = ... | variables.rs:437:17:439:5 | { ... } | | | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:16 | ExprStmt | match | -| variables.rs:437:17:439:5 | BlockExpr | variables.rs:437:9:437:13 | block | | -| variables.rs:437:17:439:5 | enter BlockExpr | variables.rs:438:9:438:14 | ExprStmt | | -| variables.rs:437:17:439:5 | exit BlockExpr (normal) | variables.rs:437:17:439:5 | exit BlockExpr | | +| variables.rs:437:17:439:5 | enter { ... } | variables.rs:438:9:438:14 | ExprStmt | | +| variables.rs:437:17:439:5 | exit { ... } (normal) | variables.rs:437:17:439:5 | exit { ... } | | +| variables.rs:437:17:439:5 | { ... } | variables.rs:437:9:437:13 | block | | | variables.rs:438:9:438:9 | i | variables.rs:438:13:438:13 | 1 | | -| variables.rs:438:9:438:13 | ... = ... | variables.rs:437:17:439:5 | exit BlockExpr (normal) | | +| variables.rs:438:9:438:13 | ... = ... | variables.rs:437:17:439:5 | exit { ... } (normal) | | | variables.rs:438:9:438:14 | ExprStmt | variables.rs:438:9:438:9 | i | | | variables.rs:438:13:438:13 | 1 | variables.rs:438:9:438:13 | ... = ... | | -| variables.rs:441:5:441:9 | block | variables.rs:441:5:441:15 | AwaitExpr | | -| variables.rs:441:5:441:15 | AwaitExpr | variables.rs:442:5:442:17 | ExprStmt | | +| variables.rs:441:5:441:9 | block | variables.rs:441:5:441:15 | await ... | | +| variables.rs:441:5:441:15 | await ... | variables.rs:442:5:442:17 | ExprStmt | | | variables.rs:441:5:441:16 | ExprStmt | variables.rs:441:5:441:9 | block | | | variables.rs:442:5:442:13 | print_i64 | variables.rs:442:15:442:15 | i | | -| variables.rs:442:5:442:16 | CallExpr | variables.rs:435:32:443:1 | BlockExpr | | +| variables.rs:442:5:442:16 | print_i64(...) | variables.rs:435:32:443:1 | { ... } | | | variables.rs:442:5:442:17 | ExprStmt | variables.rs:442:5:442:13 | print_i64 | | -| variables.rs:442:15:442:15 | i | variables.rs:442:5:442:16 | CallExpr | | -| variables.rs:445:1:459:1 | enter phi | variables.rs:445:8:445:8 | b | | -| variables.rs:445:1:459:1 | exit phi (normal) | variables.rs:445:1:459:1 | exit phi | | -| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:15 | Param | match | -| variables.rs:445:8:445:15 | Param | variables.rs:446:5:446:18 | LetStmt | | -| variables.rs:445:18:459:1 | BlockExpr | variables.rs:445:1:459:1 | exit phi (normal) | | -| variables.rs:446:5:446:18 | LetStmt | variables.rs:446:17:446:17 | 1 | | +| variables.rs:442:15:442:15 | i | variables.rs:442:5:442:16 | print_i64(...) | | +| variables.rs:445:1:459:1 | enter fn phi | variables.rs:445:8:445:8 | b | | +| variables.rs:445:1:459:1 | exit fn phi (normal) | variables.rs:445:1:459:1 | exit fn phi | | +| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:15 | b: bool | match | +| variables.rs:445:8:445:15 | b: bool | variables.rs:446:5:446:18 | let x = ... | | +| variables.rs:445:18:459:1 | { ... } | variables.rs:445:1:459:1 | exit fn phi (normal) | | +| variables.rs:446:5:446:18 | let x = ... | variables.rs:446:17:446:17 | 1 | | | variables.rs:446:9:446:13 | x | variables.rs:447:5:447:17 | ExprStmt | match | | variables.rs:446:17:446:17 | 1 | variables.rs:446:9:446:13 | x | | | variables.rs:447:5:447:13 | print_i64 | variables.rs:447:15:447:15 | x | | -| variables.rs:447:5:447:16 | CallExpr | variables.rs:448:5:448:21 | ExprStmt | | +| variables.rs:447:5:447:16 | print_i64(...) | variables.rs:448:5:448:21 | ExprStmt | | | variables.rs:447:5:447:17 | ExprStmt | variables.rs:447:5:447:13 | print_i64 | | -| variables.rs:447:15:447:15 | x | variables.rs:447:5:447:16 | CallExpr | | +| variables.rs:447:15:447:15 | x | variables.rs:447:5:447:16 | print_i64(...) | | | variables.rs:448:5:448:13 | print_i64 | variables.rs:448:15:448:15 | x | | -| variables.rs:448:5:448:20 | CallExpr | variables.rs:449:5:457:5 | ExprStmt | | +| variables.rs:448:5:448:20 | print_i64(...) | variables.rs:449:5:457:5 | ExprStmt | | | variables.rs:448:5:448:21 | ExprStmt | variables.rs:448:5:448:13 | print_i64 | | | variables.rs:448:15:448:15 | x | variables.rs:448:19:448:19 | 1 | | -| variables.rs:448:15:448:19 | ... + ... | variables.rs:448:5:448:20 | CallExpr | | +| variables.rs:448:15:448:19 | ... + ... | variables.rs:448:5:448:20 | print_i64(...) | | | variables.rs:448:19:448:19 | 1 | variables.rs:448:15:448:19 | ... + ... | | | variables.rs:449:5:457:5 | ExprStmt | variables.rs:449:8:449:8 | b | | -| variables.rs:449:5:457:5 | IfExpr | variables.rs:458:5:458:17 | ExprStmt | | +| variables.rs:449:5:457:5 | if ... { ... } else { ... } | variables.rs:458:5:458:17 | ExprStmt | | | variables.rs:449:8:449:8 | b | variables.rs:450:9:450:14 | ExprStmt | true | | variables.rs:449:8:449:8 | b | variables.rs:454:9:454:14 | ExprStmt | false | -| variables.rs:449:10:453:5 | BlockExpr | variables.rs:449:5:457:5 | IfExpr | | +| variables.rs:449:10:453:5 | { ... } | variables.rs:449:5:457:5 | if ... { ... } else { ... } | | | variables.rs:450:9:450:9 | x | variables.rs:450:13:450:13 | 2 | | | variables.rs:450:9:450:13 | ... = ... | variables.rs:451:9:451:21 | ExprStmt | | | variables.rs:450:9:450:14 | ExprStmt | variables.rs:450:9:450:9 | x | | | variables.rs:450:13:450:13 | 2 | variables.rs:450:9:450:13 | ... = ... | | | variables.rs:451:9:451:17 | print_i64 | variables.rs:451:19:451:19 | x | | -| variables.rs:451:9:451:20 | CallExpr | variables.rs:452:9:452:25 | ExprStmt | | +| variables.rs:451:9:451:20 | print_i64(...) | variables.rs:452:9:452:25 | ExprStmt | | | variables.rs:451:9:451:21 | ExprStmt | variables.rs:451:9:451:17 | print_i64 | | -| variables.rs:451:19:451:19 | x | variables.rs:451:9:451:20 | CallExpr | | +| variables.rs:451:19:451:19 | x | variables.rs:451:9:451:20 | print_i64(...) | | | variables.rs:452:9:452:17 | print_i64 | variables.rs:452:19:452:19 | x | | -| variables.rs:452:9:452:24 | CallExpr | variables.rs:449:10:453:5 | BlockExpr | | +| variables.rs:452:9:452:24 | print_i64(...) | variables.rs:449:10:453:5 | { ... } | | | variables.rs:452:9:452:25 | ExprStmt | variables.rs:452:9:452:17 | print_i64 | | | variables.rs:452:19:452:19 | x | variables.rs:452:23:452:23 | 1 | | -| variables.rs:452:19:452:23 | ... + ... | variables.rs:452:9:452:24 | CallExpr | | +| variables.rs:452:19:452:23 | ... + ... | variables.rs:452:9:452:24 | print_i64(...) | | | variables.rs:452:23:452:23 | 1 | variables.rs:452:19:452:23 | ... + ... | | -| variables.rs:453:12:457:5 | BlockExpr | variables.rs:449:5:457:5 | IfExpr | | +| variables.rs:453:12:457:5 | { ... } | variables.rs:449:5:457:5 | if ... { ... } else { ... } | | | variables.rs:454:9:454:9 | x | variables.rs:454:13:454:13 | 3 | | | variables.rs:454:9:454:13 | ... = ... | variables.rs:455:9:455:21 | ExprStmt | | | variables.rs:454:9:454:14 | ExprStmt | variables.rs:454:9:454:9 | x | | | variables.rs:454:13:454:13 | 3 | variables.rs:454:9:454:13 | ... = ... | | | variables.rs:455:9:455:17 | print_i64 | variables.rs:455:19:455:19 | x | | -| variables.rs:455:9:455:20 | CallExpr | variables.rs:456:9:456:25 | ExprStmt | | +| variables.rs:455:9:455:20 | print_i64(...) | variables.rs:456:9:456:25 | ExprStmt | | | variables.rs:455:9:455:21 | ExprStmt | variables.rs:455:9:455:17 | print_i64 | | -| variables.rs:455:19:455:19 | x | variables.rs:455:9:455:20 | CallExpr | | +| variables.rs:455:19:455:19 | x | variables.rs:455:9:455:20 | print_i64(...) | | | variables.rs:456:9:456:17 | print_i64 | variables.rs:456:19:456:19 | x | | -| variables.rs:456:9:456:24 | CallExpr | variables.rs:453:12:457:5 | BlockExpr | | +| variables.rs:456:9:456:24 | print_i64(...) | variables.rs:453:12:457:5 | { ... } | | | variables.rs:456:9:456:25 | ExprStmt | variables.rs:456:9:456:17 | print_i64 | | | variables.rs:456:19:456:19 | x | variables.rs:456:23:456:23 | 1 | | -| variables.rs:456:19:456:23 | ... + ... | variables.rs:456:9:456:24 | CallExpr | | +| variables.rs:456:19:456:23 | ... + ... | variables.rs:456:9:456:24 | print_i64(...) | | | variables.rs:456:23:456:23 | 1 | variables.rs:456:19:456:23 | ... + ... | | | variables.rs:458:5:458:13 | print_i64 | variables.rs:458:15:458:15 | x | | -| variables.rs:458:5:458:16 | CallExpr | variables.rs:445:18:459:1 | BlockExpr | | +| variables.rs:458:5:458:16 | print_i64(...) | variables.rs:445:18:459:1 | { ... } | | | variables.rs:458:5:458:17 | ExprStmt | variables.rs:458:5:458:13 | print_i64 | | -| variables.rs:458:15:458:15 | x | variables.rs:458:5:458:16 | CallExpr | | -| variables.rs:461:1:474:1 | enter phi_read | variables.rs:461:13:461:14 | b1 | | -| variables.rs:461:1:474:1 | exit phi_read (normal) | variables.rs:461:1:474:1 | exit phi_read | | -| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:21 | Param | match | -| variables.rs:461:13:461:21 | Param | variables.rs:461:24:461:25 | b2 | | -| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:32 | Param | match | -| variables.rs:461:24:461:32 | Param | variables.rs:462:5:462:14 | LetStmt | | -| variables.rs:461:35:474:1 | BlockExpr | variables.rs:461:1:474:1 | exit phi_read (normal) | | -| variables.rs:462:5:462:14 | LetStmt | variables.rs:462:13:462:13 | 1 | | +| variables.rs:458:15:458:15 | x | variables.rs:458:5:458:16 | print_i64(...) | | +| variables.rs:461:1:474:1 | enter fn phi_read | variables.rs:461:13:461:14 | b1 | | +| variables.rs:461:1:474:1 | exit fn phi_read (normal) | variables.rs:461:1:474:1 | exit fn phi_read | | +| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:21 | b1: bool | match | +| variables.rs:461:13:461:21 | b1: bool | variables.rs:461:24:461:25 | b2 | | +| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:32 | b2: bool | match | +| variables.rs:461:24:461:32 | b2: bool | variables.rs:462:5:462:14 | let x = ... | | +| variables.rs:461:35:474:1 | { ... } | variables.rs:461:1:474:1 | exit fn phi_read (normal) | | +| variables.rs:462:5:462:14 | let x = ... | variables.rs:462:13:462:13 | 1 | | | variables.rs:462:9:462:9 | x | variables.rs:463:5:467:5 | ExprStmt | match | | variables.rs:462:13:462:13 | 1 | variables.rs:462:9:462:9 | x | | | variables.rs:463:5:467:5 | ExprStmt | variables.rs:463:8:463:9 | b1 | | -| variables.rs:463:5:467:5 | IfExpr | variables.rs:469:8:469:9 | b2 | | +| variables.rs:463:5:467:5 | if ... { ... } else { ... } | variables.rs:469:8:469:9 | b2 | | | variables.rs:463:8:463:9 | b1 | variables.rs:464:9:464:21 | ExprStmt | true | | variables.rs:463:8:463:9 | b1 | variables.rs:466:9:466:21 | ExprStmt | false | -| variables.rs:463:11:465:5 | BlockExpr | variables.rs:463:5:467:5 | IfExpr | | +| variables.rs:463:11:465:5 | { ... } | variables.rs:463:5:467:5 | if ... { ... } else { ... } | | | variables.rs:464:9:464:17 | print_i64 | variables.rs:464:19:464:19 | x | | -| variables.rs:464:9:464:20 | CallExpr | variables.rs:463:11:465:5 | BlockExpr | | +| variables.rs:464:9:464:20 | print_i64(...) | variables.rs:463:11:465:5 | { ... } | | | variables.rs:464:9:464:21 | ExprStmt | variables.rs:464:9:464:17 | print_i64 | | -| variables.rs:464:19:464:19 | x | variables.rs:464:9:464:20 | CallExpr | | -| variables.rs:465:12:467:5 | BlockExpr | variables.rs:463:5:467:5 | IfExpr | | +| variables.rs:464:19:464:19 | x | variables.rs:464:9:464:20 | print_i64(...) | | +| variables.rs:465:12:467:5 | { ... } | variables.rs:463:5:467:5 | if ... { ... } else { ... } | | | variables.rs:466:9:466:17 | print_i64 | variables.rs:466:19:466:19 | x | | -| variables.rs:466:9:466:20 | CallExpr | variables.rs:465:12:467:5 | BlockExpr | | +| variables.rs:466:9:466:20 | print_i64(...) | variables.rs:465:12:467:5 | { ... } | | | variables.rs:466:9:466:21 | ExprStmt | variables.rs:466:9:466:17 | print_i64 | | -| variables.rs:466:19:466:19 | x | variables.rs:466:9:466:20 | CallExpr | | -| variables.rs:469:5:473:5 | IfExpr | variables.rs:461:35:474:1 | BlockExpr | | +| variables.rs:466:19:466:19 | x | variables.rs:466:9:466:20 | print_i64(...) | | +| variables.rs:469:5:473:5 | if ... { ... } else { ... } | variables.rs:461:35:474:1 | { ... } | | | variables.rs:469:8:469:9 | b2 | variables.rs:470:9:470:21 | ExprStmt | true | | variables.rs:469:8:469:9 | b2 | variables.rs:472:9:472:21 | ExprStmt | false | -| variables.rs:469:11:471:5 | BlockExpr | variables.rs:469:5:473:5 | IfExpr | | +| variables.rs:469:11:471:5 | { ... } | variables.rs:469:5:473:5 | if ... { ... } else { ... } | | | variables.rs:470:9:470:17 | print_i64 | variables.rs:470:19:470:19 | x | | -| variables.rs:470:9:470:20 | CallExpr | variables.rs:469:11:471:5 | BlockExpr | | +| variables.rs:470:9:470:20 | print_i64(...) | variables.rs:469:11:471:5 | { ... } | | | variables.rs:470:9:470:21 | ExprStmt | variables.rs:470:9:470:17 | print_i64 | | -| variables.rs:470:19:470:19 | x | variables.rs:470:9:470:20 | CallExpr | | -| variables.rs:471:12:473:5 | BlockExpr | variables.rs:469:5:473:5 | IfExpr | | +| variables.rs:470:19:470:19 | x | variables.rs:470:9:470:20 | print_i64(...) | | +| variables.rs:471:12:473:5 | { ... } | variables.rs:469:5:473:5 | if ... { ... } else { ... } | | | variables.rs:472:9:472:17 | print_i64 | variables.rs:472:19:472:19 | x | | -| variables.rs:472:9:472:20 | CallExpr | variables.rs:471:12:473:5 | BlockExpr | | +| variables.rs:472:9:472:20 | print_i64(...) | variables.rs:471:12:473:5 | { ... } | | | variables.rs:472:9:472:21 | ExprStmt | variables.rs:472:9:472:17 | print_i64 | | -| variables.rs:472:19:472:19 | x | variables.rs:472:9:472:20 | CallExpr | | -| variables.rs:482:5:484:5 | enter my_get | variables.rs:483:9:483:24 | ExprStmt | | -| variables.rs:482:5:484:5 | exit my_get (normal) | variables.rs:482:5:484:5 | exit my_get | | -| variables.rs:483:9:483:23 | ReturnExpr | variables.rs:482:5:484:5 | exit my_get (normal) | return | +| variables.rs:472:19:472:19 | x | variables.rs:472:9:472:20 | print_i64(...) | | +| variables.rs:482:5:484:5 | enter fn my_get | variables.rs:483:9:483:24 | ExprStmt | | +| variables.rs:482:5:484:5 | exit fn my_get (normal) | variables.rs:482:5:484:5 | exit fn my_get | | +| variables.rs:483:9:483:23 | return ... | variables.rs:482:5:484:5 | exit fn my_get (normal) | return | | variables.rs:483:9:483:24 | ExprStmt | variables.rs:483:16:483:19 | self | | -| variables.rs:483:16:483:19 | self | variables.rs:483:16:483:23 | FieldExpr | | -| variables.rs:483:16:483:23 | FieldExpr | variables.rs:483:9:483:23 | ReturnExpr | | -| variables.rs:487:1:494:1 | enter structs | variables.rs:488:5:488:36 | LetStmt | | -| variables.rs:487:1:494:1 | exit structs (normal) | variables.rs:487:1:494:1 | exit structs | | -| variables.rs:487:14:494:1 | BlockExpr | variables.rs:487:1:494:1 | exit structs (normal) | | -| variables.rs:488:5:488:36 | LetStmt | variables.rs:488:33:488:33 | 1 | | +| variables.rs:483:16:483:19 | self | variables.rs:483:16:483:23 | ... .val | | +| variables.rs:483:16:483:23 | ... .val | variables.rs:483:9:483:23 | return ... | | +| variables.rs:487:1:494:1 | enter fn structs | variables.rs:488:5:488:36 | let a = ... | | +| variables.rs:487:1:494:1 | exit fn structs (normal) | variables.rs:487:1:494:1 | exit fn structs | | +| variables.rs:487:14:494:1 | { ... } | variables.rs:487:1:494:1 | exit fn structs (normal) | | +| variables.rs:488:5:488:36 | let a = ... | variables.rs:488:33:488:33 | 1 | | | variables.rs:488:9:488:13 | a | variables.rs:489:5:489:26 | ExprStmt | match | -| variables.rs:488:17:488:35 | RecordExpr | variables.rs:488:9:488:13 | a | | -| variables.rs:488:33:488:33 | 1 | variables.rs:488:17:488:35 | RecordExpr | | +| variables.rs:488:17:488:35 | MyStruct {...} | variables.rs:488:9:488:13 | a | | +| variables.rs:488:33:488:33 | 1 | variables.rs:488:17:488:35 | MyStruct {...} | | | variables.rs:489:5:489:13 | print_i64 | variables.rs:489:15:489:15 | a | | -| variables.rs:489:5:489:25 | CallExpr | variables.rs:490:5:490:14 | ExprStmt | | +| variables.rs:489:5:489:25 | print_i64(...) | variables.rs:490:5:490:14 | ExprStmt | | | variables.rs:489:5:489:26 | ExprStmt | variables.rs:489:5:489:13 | print_i64 | | | variables.rs:489:15:489:15 | a | variables.rs:489:15:489:24 | ... .my_get(...) | | -| variables.rs:489:15:489:24 | ... .my_get(...) | variables.rs:489:5:489:25 | CallExpr | | -| variables.rs:490:5:490:5 | a | variables.rs:490:5:490:9 | FieldExpr | | -| variables.rs:490:5:490:9 | FieldExpr | variables.rs:490:13:490:13 | 5 | | +| variables.rs:489:15:489:24 | ... .my_get(...) | variables.rs:489:5:489:25 | print_i64(...) | | +| variables.rs:490:5:490:5 | a | variables.rs:490:5:490:9 | ... .val | | +| variables.rs:490:5:490:9 | ... .val | variables.rs:490:13:490:13 | 5 | | | variables.rs:490:5:490:13 | ... = ... | variables.rs:491:5:491:26 | ExprStmt | | | variables.rs:490:5:490:14 | ExprStmt | variables.rs:490:5:490:5 | a | | | variables.rs:490:13:490:13 | 5 | variables.rs:490:5:490:13 | ... = ... | | | variables.rs:491:5:491:13 | print_i64 | variables.rs:491:15:491:15 | a | | -| variables.rs:491:5:491:25 | CallExpr | variables.rs:492:5:492:28 | ExprStmt | | +| variables.rs:491:5:491:25 | print_i64(...) | variables.rs:492:5:492:28 | ExprStmt | | | variables.rs:491:5:491:26 | ExprStmt | variables.rs:491:5:491:13 | print_i64 | | | variables.rs:491:15:491:15 | a | variables.rs:491:15:491:24 | ... .my_get(...) | | -| variables.rs:491:15:491:24 | ... .my_get(...) | variables.rs:491:5:491:25 | CallExpr | | +| variables.rs:491:15:491:24 | ... .my_get(...) | variables.rs:491:5:491:25 | print_i64(...) | | | variables.rs:492:5:492:5 | a | variables.rs:492:25:492:25 | 2 | | | variables.rs:492:5:492:27 | ... = ... | variables.rs:493:5:493:26 | ExprStmt | | | variables.rs:492:5:492:28 | ExprStmt | variables.rs:492:5:492:5 | a | | -| variables.rs:492:9:492:27 | RecordExpr | variables.rs:492:5:492:27 | ... = ... | | -| variables.rs:492:25:492:25 | 2 | variables.rs:492:9:492:27 | RecordExpr | | +| variables.rs:492:9:492:27 | MyStruct {...} | variables.rs:492:5:492:27 | ... = ... | | +| variables.rs:492:25:492:25 | 2 | variables.rs:492:9:492:27 | MyStruct {...} | | | variables.rs:493:5:493:13 | print_i64 | variables.rs:493:15:493:15 | a | | -| variables.rs:493:5:493:25 | CallExpr | variables.rs:487:14:494:1 | BlockExpr | | +| variables.rs:493:5:493:25 | print_i64(...) | variables.rs:487:14:494:1 | { ... } | | | variables.rs:493:5:493:26 | ExprStmt | variables.rs:493:5:493:13 | print_i64 | | | variables.rs:493:15:493:15 | a | variables.rs:493:15:493:24 | ... .my_get(...) | | -| variables.rs:493:15:493:24 | ... .my_get(...) | variables.rs:493:5:493:25 | CallExpr | | -| variables.rs:496:1:503:1 | enter ref_arg | variables.rs:497:5:497:15 | LetStmt | | -| variables.rs:496:1:503:1 | exit ref_arg (normal) | variables.rs:496:1:503:1 | exit ref_arg | | -| variables.rs:496:14:503:1 | BlockExpr | variables.rs:496:1:503:1 | exit ref_arg (normal) | | -| variables.rs:497:5:497:15 | LetStmt | variables.rs:497:13:497:14 | 16 | | +| variables.rs:493:15:493:24 | ... .my_get(...) | variables.rs:493:5:493:25 | print_i64(...) | | +| variables.rs:496:1:503:1 | enter fn ref_arg | variables.rs:497:5:497:15 | let x = ... | | +| variables.rs:496:1:503:1 | exit fn ref_arg (normal) | variables.rs:496:1:503:1 | exit fn ref_arg | | +| variables.rs:496:14:503:1 | { ... } | variables.rs:496:1:503:1 | exit fn ref_arg (normal) | | +| variables.rs:497:5:497:15 | let x = ... | variables.rs:497:13:497:14 | 16 | | | variables.rs:497:9:497:9 | x | variables.rs:498:5:498:22 | ExprStmt | match | | variables.rs:497:13:497:14 | 16 | variables.rs:497:9:497:9 | x | | | variables.rs:498:5:498:17 | print_i64_ref | variables.rs:498:20:498:20 | x | | -| variables.rs:498:5:498:21 | CallExpr | variables.rs:499:5:499:17 | ExprStmt | | +| variables.rs:498:5:498:21 | print_i64_ref(...) | variables.rs:499:5:499:17 | ExprStmt | | | variables.rs:498:5:498:22 | ExprStmt | variables.rs:498:5:498:17 | print_i64_ref | | -| variables.rs:498:19:498:20 | RefExpr | variables.rs:498:5:498:21 | CallExpr | | -| variables.rs:498:20:498:20 | x | variables.rs:498:19:498:20 | RefExpr | | +| variables.rs:498:19:498:20 | &... | variables.rs:498:5:498:21 | print_i64_ref(...) | | +| variables.rs:498:20:498:20 | x | variables.rs:498:19:498:20 | &... | | | variables.rs:499:5:499:13 | print_i64 | variables.rs:499:15:499:15 | x | | -| variables.rs:499:5:499:16 | CallExpr | variables.rs:501:5:501:15 | LetStmt | | +| variables.rs:499:5:499:16 | print_i64(...) | variables.rs:501:5:501:15 | let z = ... | | | variables.rs:499:5:499:17 | ExprStmt | variables.rs:499:5:499:13 | print_i64 | | -| variables.rs:499:15:499:15 | x | variables.rs:499:5:499:16 | CallExpr | | -| variables.rs:501:5:501:15 | LetStmt | variables.rs:501:13:501:14 | 17 | | +| variables.rs:499:15:499:15 | x | variables.rs:499:5:499:16 | print_i64(...) | | +| variables.rs:501:5:501:15 | let z = ... | variables.rs:501:13:501:14 | 17 | | | variables.rs:501:9:501:9 | z | variables.rs:502:5:502:22 | ExprStmt | match | | variables.rs:501:13:501:14 | 17 | variables.rs:501:9:501:9 | z | | | variables.rs:502:5:502:17 | print_i64_ref | variables.rs:502:20:502:20 | z | | -| variables.rs:502:5:502:21 | CallExpr | variables.rs:496:14:503:1 | BlockExpr | | +| variables.rs:502:5:502:21 | print_i64_ref(...) | variables.rs:496:14:503:1 | { ... } | | | variables.rs:502:5:502:22 | ExprStmt | variables.rs:502:5:502:17 | print_i64_ref | | -| variables.rs:502:19:502:20 | RefExpr | variables.rs:502:5:502:21 | CallExpr | | -| variables.rs:502:20:502:20 | z | variables.rs:502:19:502:20 | RefExpr | | -| variables.rs:510:3:512:3 | enter bar | variables.rs:511:5:511:32 | ExprStmt | | -| variables.rs:510:3:512:3 | exit bar (normal) | variables.rs:510:3:512:3 | exit bar | | -| variables.rs:510:21:512:3 | BlockExpr | variables.rs:510:3:512:3 | exit bar (normal) | | +| variables.rs:502:19:502:20 | &... | variables.rs:502:5:502:21 | print_i64_ref(...) | | +| variables.rs:502:20:502:20 | z | variables.rs:502:19:502:20 | &... | | +| variables.rs:510:3:512:3 | enter fn bar | variables.rs:511:5:511:32 | ExprStmt | | +| variables.rs:510:3:512:3 | exit fn bar (normal) | variables.rs:510:3:512:3 | exit fn bar | | +| variables.rs:510:21:512:3 | { ... } | variables.rs:510:3:512:3 | exit fn bar (normal) | | | variables.rs:511:5:511:9 | * ... | variables.rs:511:29:511:29 | 3 | | -| variables.rs:511:5:511:31 | ... = ... | variables.rs:510:21:512:3 | BlockExpr | | +| variables.rs:511:5:511:31 | ... = ... | variables.rs:510:21:512:3 | { ... } | | | variables.rs:511:5:511:32 | ExprStmt | variables.rs:511:6:511:9 | self | | | variables.rs:511:6:511:9 | self | variables.rs:511:5:511:9 | * ... | | -| variables.rs:511:13:511:31 | RecordExpr | variables.rs:511:5:511:31 | ... = ... | | -| variables.rs:511:29:511:29 | 3 | variables.rs:511:13:511:31 | RecordExpr | | -| variables.rs:515:1:520:1 | enter ref_methodcall_receiver | variables.rs:516:3:516:34 | LetStmt | | -| variables.rs:515:1:520:1 | exit ref_methodcall_receiver (normal) | variables.rs:515:1:520:1 | exit ref_methodcall_receiver | | -| variables.rs:515:30:520:1 | BlockExpr | variables.rs:515:1:520:1 | exit ref_methodcall_receiver (normal) | | -| variables.rs:516:3:516:34 | LetStmt | variables.rs:516:31:516:31 | 1 | | +| variables.rs:511:13:511:31 | MyStruct {...} | variables.rs:511:5:511:31 | ... = ... | | +| variables.rs:511:29:511:29 | 3 | variables.rs:511:13:511:31 | MyStruct {...} | | +| variables.rs:515:1:520:1 | enter fn ref_methodcall_receiver | variables.rs:516:3:516:34 | let a = ... | | +| variables.rs:515:1:520:1 | exit fn ref_methodcall_receiver (normal) | variables.rs:515:1:520:1 | exit fn ref_methodcall_receiver | | +| variables.rs:515:30:520:1 | { ... } | variables.rs:515:1:520:1 | exit fn ref_methodcall_receiver (normal) | | +| variables.rs:516:3:516:34 | let a = ... | variables.rs:516:31:516:31 | 1 | | | variables.rs:516:7:516:11 | a | variables.rs:517:3:517:10 | ExprStmt | match | -| variables.rs:516:15:516:33 | RecordExpr | variables.rs:516:7:516:11 | a | | -| variables.rs:516:31:516:31 | 1 | variables.rs:516:15:516:33 | RecordExpr | | +| variables.rs:516:15:516:33 | MyStruct {...} | variables.rs:516:7:516:11 | a | | +| variables.rs:516:31:516:31 | 1 | variables.rs:516:15:516:33 | MyStruct {...} | | | variables.rs:517:3:517:3 | a | variables.rs:517:3:517:9 | ... .bar(...) | | | variables.rs:517:3:517:9 | ... .bar(...) | variables.rs:519:3:519:19 | ExprStmt | | | variables.rs:517:3:517:10 | ExprStmt | variables.rs:517:3:517:3 | a | | | variables.rs:519:3:519:11 | print_i64 | variables.rs:519:13:519:13 | a | | -| variables.rs:519:3:519:18 | CallExpr | variables.rs:515:30:520:1 | BlockExpr | | +| variables.rs:519:3:519:18 | print_i64(...) | variables.rs:515:30:520:1 | { ... } | | | variables.rs:519:3:519:19 | ExprStmt | variables.rs:519:3:519:11 | print_i64 | | -| variables.rs:519:13:519:13 | a | variables.rs:519:13:519:17 | FieldExpr | | -| variables.rs:519:13:519:17 | FieldExpr | variables.rs:519:3:519:18 | CallExpr | | -| variables.rs:522:1:556:1 | enter main | variables.rs:523:5:523:25 | ExprStmt | | -| variables.rs:522:1:556:1 | exit main (normal) | variables.rs:522:1:556:1 | exit main | | -| variables.rs:522:11:556:1 | BlockExpr | variables.rs:522:1:556:1 | exit main (normal) | | -| variables.rs:523:5:523:22 | immutable_variable | variables.rs:523:5:523:24 | CallExpr | | -| variables.rs:523:5:523:24 | CallExpr | variables.rs:524:5:524:23 | ExprStmt | | +| variables.rs:519:13:519:13 | a | variables.rs:519:13:519:17 | ... .val | | +| variables.rs:519:13:519:17 | ... .val | variables.rs:519:3:519:18 | print_i64(...) | | +| variables.rs:522:1:556:1 | enter fn main | variables.rs:523:5:523:25 | ExprStmt | | +| variables.rs:522:1:556:1 | exit fn main (normal) | variables.rs:522:1:556:1 | exit fn main | | +| variables.rs:522:11:556:1 | { ... } | variables.rs:522:1:556:1 | exit fn main (normal) | | +| variables.rs:523:5:523:22 | immutable_variable | variables.rs:523:5:523:24 | immutable_variable(...) | | +| variables.rs:523:5:523:24 | immutable_variable(...) | variables.rs:524:5:524:23 | ExprStmt | | | variables.rs:523:5:523:25 | ExprStmt | variables.rs:523:5:523:22 | immutable_variable | | -| variables.rs:524:5:524:20 | mutable_variable | variables.rs:524:5:524:22 | CallExpr | | -| variables.rs:524:5:524:22 | CallExpr | variables.rs:525:5:525:40 | ExprStmt | | +| variables.rs:524:5:524:20 | mutable_variable | variables.rs:524:5:524:22 | mutable_variable(...) | | +| variables.rs:524:5:524:22 | mutable_variable(...) | variables.rs:525:5:525:40 | ExprStmt | | | variables.rs:524:5:524:23 | ExprStmt | variables.rs:524:5:524:20 | mutable_variable | | -| variables.rs:525:5:525:37 | mutable_variable_immutable_borrow | variables.rs:525:5:525:39 | CallExpr | | -| variables.rs:525:5:525:39 | CallExpr | variables.rs:526:5:526:23 | ExprStmt | | +| variables.rs:525:5:525:37 | mutable_variable_immutable_borrow | variables.rs:525:5:525:39 | mutable_variable_immutable_borrow(...) | | +| variables.rs:525:5:525:39 | mutable_variable_immutable_borrow(...) | variables.rs:526:5:526:23 | ExprStmt | | | variables.rs:525:5:525:40 | ExprStmt | variables.rs:525:5:525:37 | mutable_variable_immutable_borrow | | -| variables.rs:526:5:526:20 | variable_shadow1 | variables.rs:526:5:526:22 | CallExpr | | -| variables.rs:526:5:526:22 | CallExpr | variables.rs:527:5:527:23 | ExprStmt | | +| variables.rs:526:5:526:20 | variable_shadow1 | variables.rs:526:5:526:22 | variable_shadow1(...) | | +| variables.rs:526:5:526:22 | variable_shadow1(...) | variables.rs:527:5:527:23 | ExprStmt | | | variables.rs:526:5:526:23 | ExprStmt | variables.rs:526:5:526:20 | variable_shadow1 | | -| variables.rs:527:5:527:20 | variable_shadow2 | variables.rs:527:5:527:22 | CallExpr | | -| variables.rs:527:5:527:22 | CallExpr | variables.rs:528:5:528:19 | ExprStmt | | +| variables.rs:527:5:527:20 | variable_shadow2 | variables.rs:527:5:527:22 | variable_shadow2(...) | | +| variables.rs:527:5:527:22 | variable_shadow2(...) | variables.rs:528:5:528:19 | ExprStmt | | | variables.rs:527:5:527:23 | ExprStmt | variables.rs:527:5:527:20 | variable_shadow2 | | -| variables.rs:528:5:528:16 | let_pattern1 | variables.rs:528:5:528:18 | CallExpr | | -| variables.rs:528:5:528:18 | CallExpr | variables.rs:529:5:529:19 | ExprStmt | | +| variables.rs:528:5:528:16 | let_pattern1 | variables.rs:528:5:528:18 | let_pattern1(...) | | +| variables.rs:528:5:528:18 | let_pattern1(...) | variables.rs:529:5:529:19 | ExprStmt | | | variables.rs:528:5:528:19 | ExprStmt | variables.rs:528:5:528:16 | let_pattern1 | | -| variables.rs:529:5:529:16 | let_pattern2 | variables.rs:529:5:529:18 | CallExpr | | -| variables.rs:529:5:529:18 | CallExpr | variables.rs:530:5:530:19 | ExprStmt | | +| variables.rs:529:5:529:16 | let_pattern2 | variables.rs:529:5:529:18 | let_pattern2(...) | | +| variables.rs:529:5:529:18 | let_pattern2(...) | variables.rs:530:5:530:19 | ExprStmt | | | variables.rs:529:5:529:19 | ExprStmt | variables.rs:529:5:529:16 | let_pattern2 | | -| variables.rs:530:5:530:16 | let_pattern3 | variables.rs:530:5:530:18 | CallExpr | | -| variables.rs:530:5:530:18 | CallExpr | variables.rs:531:5:531:19 | ExprStmt | | +| variables.rs:530:5:530:16 | let_pattern3 | variables.rs:530:5:530:18 | let_pattern3(...) | | +| variables.rs:530:5:530:18 | let_pattern3(...) | variables.rs:531:5:531:19 | ExprStmt | | | variables.rs:530:5:530:19 | ExprStmt | variables.rs:530:5:530:16 | let_pattern3 | | -| variables.rs:531:5:531:16 | let_pattern4 | variables.rs:531:5:531:18 | CallExpr | | -| variables.rs:531:5:531:18 | CallExpr | variables.rs:532:5:532:21 | ExprStmt | | +| variables.rs:531:5:531:16 | let_pattern4 | variables.rs:531:5:531:18 | let_pattern4(...) | | +| variables.rs:531:5:531:18 | let_pattern4(...) | variables.rs:532:5:532:21 | ExprStmt | | | variables.rs:531:5:531:19 | ExprStmt | variables.rs:531:5:531:16 | let_pattern4 | | -| variables.rs:532:5:532:18 | match_pattern1 | variables.rs:532:5:532:20 | CallExpr | | -| variables.rs:532:5:532:20 | CallExpr | variables.rs:533:5:533:21 | ExprStmt | | +| variables.rs:532:5:532:18 | match_pattern1 | variables.rs:532:5:532:20 | match_pattern1(...) | | +| variables.rs:532:5:532:20 | match_pattern1(...) | variables.rs:533:5:533:21 | ExprStmt | | | variables.rs:532:5:532:21 | ExprStmt | variables.rs:532:5:532:18 | match_pattern1 | | -| variables.rs:533:5:533:18 | match_pattern2 | variables.rs:533:5:533:20 | CallExpr | | -| variables.rs:533:5:533:20 | CallExpr | variables.rs:534:5:534:21 | ExprStmt | | +| variables.rs:533:5:533:18 | match_pattern2 | variables.rs:533:5:533:20 | match_pattern2(...) | | +| variables.rs:533:5:533:20 | match_pattern2(...) | variables.rs:534:5:534:21 | ExprStmt | | | variables.rs:533:5:533:21 | ExprStmt | variables.rs:533:5:533:18 | match_pattern2 | | -| variables.rs:534:5:534:18 | match_pattern3 | variables.rs:534:5:534:20 | CallExpr | | -| variables.rs:534:5:534:20 | CallExpr | variables.rs:535:5:535:21 | ExprStmt | | +| variables.rs:534:5:534:18 | match_pattern3 | variables.rs:534:5:534:20 | match_pattern3(...) | | +| variables.rs:534:5:534:20 | match_pattern3(...) | variables.rs:535:5:535:21 | ExprStmt | | | variables.rs:534:5:534:21 | ExprStmt | variables.rs:534:5:534:18 | match_pattern3 | | -| variables.rs:535:5:535:18 | match_pattern4 | variables.rs:535:5:535:20 | CallExpr | | -| variables.rs:535:5:535:20 | CallExpr | variables.rs:536:5:536:21 | ExprStmt | | +| variables.rs:535:5:535:18 | match_pattern4 | variables.rs:535:5:535:20 | match_pattern4(...) | | +| variables.rs:535:5:535:20 | match_pattern4(...) | variables.rs:536:5:536:21 | ExprStmt | | | variables.rs:535:5:535:21 | ExprStmt | variables.rs:535:5:535:18 | match_pattern4 | | -| variables.rs:536:5:536:18 | match_pattern5 | variables.rs:536:5:536:20 | CallExpr | | -| variables.rs:536:5:536:20 | CallExpr | variables.rs:537:5:537:21 | ExprStmt | | +| variables.rs:536:5:536:18 | match_pattern5 | variables.rs:536:5:536:20 | match_pattern5(...) | | +| variables.rs:536:5:536:20 | match_pattern5(...) | variables.rs:537:5:537:21 | ExprStmt | | | variables.rs:536:5:536:21 | ExprStmt | variables.rs:536:5:536:18 | match_pattern5 | | -| variables.rs:537:5:537:18 | match_pattern6 | variables.rs:537:5:537:20 | CallExpr | | -| variables.rs:537:5:537:20 | CallExpr | variables.rs:538:5:538:21 | ExprStmt | | +| variables.rs:537:5:537:18 | match_pattern6 | variables.rs:537:5:537:20 | match_pattern6(...) | | +| variables.rs:537:5:537:20 | match_pattern6(...) | variables.rs:538:5:538:21 | ExprStmt | | | variables.rs:537:5:537:21 | ExprStmt | variables.rs:537:5:537:18 | match_pattern6 | | -| variables.rs:538:5:538:18 | match_pattern7 | variables.rs:538:5:538:20 | CallExpr | | -| variables.rs:538:5:538:20 | CallExpr | variables.rs:539:5:539:21 | ExprStmt | | +| variables.rs:538:5:538:18 | match_pattern7 | variables.rs:538:5:538:20 | match_pattern7(...) | | +| variables.rs:538:5:538:20 | match_pattern7(...) | variables.rs:539:5:539:21 | ExprStmt | | | variables.rs:538:5:538:21 | ExprStmt | variables.rs:538:5:538:18 | match_pattern7 | | -| variables.rs:539:5:539:18 | match_pattern8 | variables.rs:539:5:539:20 | CallExpr | | -| variables.rs:539:5:539:20 | CallExpr | variables.rs:540:5:540:21 | ExprStmt | | +| variables.rs:539:5:539:18 | match_pattern8 | variables.rs:539:5:539:20 | match_pattern8(...) | | +| variables.rs:539:5:539:20 | match_pattern8(...) | variables.rs:540:5:540:21 | ExprStmt | | | variables.rs:539:5:539:21 | ExprStmt | variables.rs:539:5:539:18 | match_pattern8 | | -| variables.rs:540:5:540:18 | match_pattern9 | variables.rs:540:5:540:20 | CallExpr | | -| variables.rs:540:5:540:20 | CallExpr | variables.rs:541:5:541:36 | ExprStmt | | +| variables.rs:540:5:540:18 | match_pattern9 | variables.rs:540:5:540:20 | match_pattern9(...) | | +| variables.rs:540:5:540:20 | match_pattern9(...) | variables.rs:541:5:541:36 | ExprStmt | | | variables.rs:540:5:540:21 | ExprStmt | variables.rs:540:5:540:18 | match_pattern9 | | | variables.rs:541:5:541:18 | param_pattern1 | variables.rs:541:20:541:22 | "a" | | -| variables.rs:541:5:541:35 | CallExpr | variables.rs:542:5:542:37 | ExprStmt | | +| variables.rs:541:5:541:35 | param_pattern1(...) | variables.rs:542:5:542:37 | ExprStmt | | | variables.rs:541:5:541:36 | ExprStmt | variables.rs:541:5:541:18 | param_pattern1 | | | variables.rs:541:20:541:22 | "a" | variables.rs:541:26:541:28 | "b" | | -| variables.rs:541:25:541:34 | TupleExpr | variables.rs:541:5:541:35 | CallExpr | | +| variables.rs:541:25:541:34 | TupleExpr | variables.rs:541:5:541:35 | param_pattern1(...) | | | variables.rs:541:26:541:28 | "b" | variables.rs:541:31:541:33 | "c" | | | variables.rs:541:31:541:33 | "c" | variables.rs:541:25:541:34 | TupleExpr | | | variables.rs:542:5:542:18 | param_pattern2 | variables.rs:542:20:542:31 | Either::Left | | -| variables.rs:542:5:542:36 | CallExpr | variables.rs:543:5:543:26 | ExprStmt | | +| variables.rs:542:5:542:36 | param_pattern2(...) | variables.rs:543:5:543:26 | ExprStmt | | | variables.rs:542:5:542:37 | ExprStmt | variables.rs:542:5:542:18 | param_pattern2 | | | variables.rs:542:20:542:31 | Either::Left | variables.rs:542:33:542:34 | 45 | | -| variables.rs:542:20:542:35 | CallExpr | variables.rs:542:5:542:36 | CallExpr | | -| variables.rs:542:33:542:34 | 45 | variables.rs:542:20:542:35 | CallExpr | | -| variables.rs:543:5:543:23 | destruct_assignment | variables.rs:543:5:543:25 | CallExpr | | -| variables.rs:543:5:543:25 | CallExpr | variables.rs:544:5:544:23 | ExprStmt | | +| variables.rs:542:20:542:35 | Either::Left(...) | variables.rs:542:5:542:36 | param_pattern2(...) | | +| variables.rs:542:33:542:34 | 45 | variables.rs:542:20:542:35 | Either::Left(...) | | +| variables.rs:543:5:543:23 | destruct_assignment | variables.rs:543:5:543:25 | destruct_assignment(...) | | +| variables.rs:543:5:543:25 | destruct_assignment(...) | variables.rs:544:5:544:23 | ExprStmt | | | variables.rs:543:5:543:26 | ExprStmt | variables.rs:543:5:543:23 | destruct_assignment | | -| variables.rs:544:5:544:20 | closure_variable | variables.rs:544:5:544:22 | CallExpr | | -| variables.rs:544:5:544:22 | CallExpr | variables.rs:545:5:545:19 | ExprStmt | | +| variables.rs:544:5:544:20 | closure_variable | variables.rs:544:5:544:22 | closure_variable(...) | | +| variables.rs:544:5:544:22 | closure_variable(...) | variables.rs:545:5:545:19 | ExprStmt | | | variables.rs:544:5:544:23 | ExprStmt | variables.rs:544:5:544:20 | closure_variable | | -| variables.rs:545:5:545:16 | for_variable | variables.rs:545:5:545:18 | CallExpr | | -| variables.rs:545:5:545:18 | CallExpr | variables.rs:546:5:546:17 | ExprStmt | | +| variables.rs:545:5:545:16 | for_variable | variables.rs:545:5:545:18 | for_variable(...) | | +| variables.rs:545:5:545:18 | for_variable(...) | variables.rs:546:5:546:17 | ExprStmt | | | variables.rs:545:5:545:19 | ExprStmt | variables.rs:545:5:545:16 | for_variable | | -| variables.rs:546:5:546:14 | add_assign | variables.rs:546:5:546:16 | CallExpr | | -| variables.rs:546:5:546:16 | CallExpr | variables.rs:547:5:547:13 | ExprStmt | | +| variables.rs:546:5:546:14 | add_assign | variables.rs:546:5:546:16 | add_assign(...) | | +| variables.rs:546:5:546:16 | add_assign(...) | variables.rs:547:5:547:13 | ExprStmt | | | variables.rs:546:5:546:17 | ExprStmt | variables.rs:546:5:546:14 | add_assign | | -| variables.rs:547:5:547:10 | mutate | variables.rs:547:5:547:12 | CallExpr | | -| variables.rs:547:5:547:12 | CallExpr | variables.rs:548:5:548:17 | ExprStmt | | +| variables.rs:547:5:547:10 | mutate | variables.rs:547:5:547:12 | mutate(...) | | +| variables.rs:547:5:547:12 | mutate(...) | variables.rs:548:5:548:17 | ExprStmt | | | variables.rs:547:5:547:13 | ExprStmt | variables.rs:547:5:547:10 | mutate | | -| variables.rs:548:5:548:14 | mutate_arg | variables.rs:548:5:548:16 | CallExpr | | -| variables.rs:548:5:548:16 | CallExpr | variables.rs:549:5:549:12 | ExprStmt | | +| variables.rs:548:5:548:14 | mutate_arg | variables.rs:548:5:548:16 | mutate_arg(...) | | +| variables.rs:548:5:548:16 | mutate_arg(...) | variables.rs:549:5:549:12 | ExprStmt | | | variables.rs:548:5:548:17 | ExprStmt | variables.rs:548:5:548:14 | mutate_arg | | -| variables.rs:549:5:549:9 | alias | variables.rs:549:5:549:11 | CallExpr | | -| variables.rs:549:5:549:11 | CallExpr | variables.rs:550:5:550:18 | ExprStmt | | +| variables.rs:549:5:549:9 | alias | variables.rs:549:5:549:11 | alias(...) | | +| variables.rs:549:5:549:11 | alias(...) | variables.rs:550:5:550:18 | ExprStmt | | | variables.rs:549:5:549:12 | ExprStmt | variables.rs:549:5:549:9 | alias | | -| variables.rs:550:5:550:15 | capture_mut | variables.rs:550:5:550:17 | CallExpr | | -| variables.rs:550:5:550:17 | CallExpr | variables.rs:551:5:551:20 | ExprStmt | | +| variables.rs:550:5:550:15 | capture_mut | variables.rs:550:5:550:17 | capture_mut(...) | | +| variables.rs:550:5:550:17 | capture_mut(...) | variables.rs:551:5:551:20 | ExprStmt | | | variables.rs:550:5:550:18 | ExprStmt | variables.rs:550:5:550:15 | capture_mut | | -| variables.rs:551:5:551:17 | capture_immut | variables.rs:551:5:551:19 | CallExpr | | -| variables.rs:551:5:551:19 | CallExpr | variables.rs:552:5:552:26 | ExprStmt | | +| variables.rs:551:5:551:17 | capture_immut | variables.rs:551:5:551:19 | capture_immut(...) | | +| variables.rs:551:5:551:19 | capture_immut(...) | variables.rs:552:5:552:26 | ExprStmt | | | variables.rs:551:5:551:20 | ExprStmt | variables.rs:551:5:551:17 | capture_immut | | -| variables.rs:552:5:552:23 | async_block_capture | variables.rs:552:5:552:25 | CallExpr | | -| variables.rs:552:5:552:25 | CallExpr | variables.rs:553:5:553:14 | ExprStmt | | +| variables.rs:552:5:552:23 | async_block_capture | variables.rs:552:5:552:25 | async_block_capture(...) | | +| variables.rs:552:5:552:25 | async_block_capture(...) | variables.rs:553:5:553:14 | ExprStmt | | | variables.rs:552:5:552:26 | ExprStmt | variables.rs:552:5:552:23 | async_block_capture | | -| variables.rs:553:5:553:11 | structs | variables.rs:553:5:553:13 | CallExpr | | -| variables.rs:553:5:553:13 | CallExpr | variables.rs:554:5:554:14 | ExprStmt | | +| variables.rs:553:5:553:11 | structs | variables.rs:553:5:553:13 | structs(...) | | +| variables.rs:553:5:553:13 | structs(...) | variables.rs:554:5:554:14 | ExprStmt | | | variables.rs:553:5:553:14 | ExprStmt | variables.rs:553:5:553:11 | structs | | -| variables.rs:554:5:554:11 | ref_arg | variables.rs:554:5:554:13 | CallExpr | | -| variables.rs:554:5:554:13 | CallExpr | variables.rs:555:5:555:30 | ExprStmt | | +| variables.rs:554:5:554:11 | ref_arg | variables.rs:554:5:554:13 | ref_arg(...) | | +| variables.rs:554:5:554:13 | ref_arg(...) | variables.rs:555:5:555:30 | ExprStmt | | | variables.rs:554:5:554:14 | ExprStmt | variables.rs:554:5:554:11 | ref_arg | | -| variables.rs:555:5:555:27 | ref_methodcall_receiver | variables.rs:555:5:555:29 | CallExpr | | -| variables.rs:555:5:555:29 | CallExpr | variables.rs:522:11:556:1 | BlockExpr | | +| variables.rs:555:5:555:27 | ref_methodcall_receiver | variables.rs:555:5:555:29 | ref_methodcall_receiver(...) | | +| variables.rs:555:5:555:29 | ref_methodcall_receiver(...) | variables.rs:522:11:556:1 | { ... } | | | variables.rs:555:5:555:30 | ExprStmt | variables.rs:555:5:555:27 | ref_methodcall_receiver | | breakTarget continueTarget diff --git a/rust/ql/test/library-tests/variables/Ssa.expected b/rust/ql/test/library-tests/variables/Ssa.expected index 0ca5a421853d..8eb885d77d3f 100644 --- a/rust/ql/test/library-tests/variables/Ssa.expected +++ b/rust/ql/test/library-tests/variables/Ssa.expected @@ -120,7 +120,7 @@ definition | variables.rs:418:9:418:13 | y | variables.rs:418:13:418:13 | y | | variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | | variables.rs:421:9:421:9 | y | variables.rs:418:13:418:13 | y | -| variables.rs:423:5:423:14 | ... (...) | variables.rs:418:13:418:13 | y | +| variables.rs:423:5:423:14 | closure2(...) | variables.rs:418:13:418:13 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | | variables.rs:436:9:436:13 | i | variables.rs:436:13:436:13 | i | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | @@ -239,7 +239,7 @@ read | variables.rs:412:9:412:16 | closure1 | variables.rs:412:9:412:16 | closure1 | variables.rs:415:5:415:12 | closure1 | | variables.rs:412:20:414:5 | x | variables.rs:410:13:410:13 | x | variables.rs:413:19:413:19 | x | | variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | variables.rs:423:5:423:12 | closure2 | -| variables.rs:423:5:423:14 | ... (...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | +| variables.rs:423:5:423:14 | closure2(...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block | | variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | @@ -343,7 +343,7 @@ firstRead | variables.rs:412:9:412:16 | closure1 | variables.rs:412:9:412:16 | closure1 | variables.rs:415:5:415:12 | closure1 | | variables.rs:412:20:414:5 | x | variables.rs:410:13:410:13 | x | variables.rs:413:19:413:19 | x | | variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | variables.rs:423:5:423:12 | closure2 | -| variables.rs:423:5:423:14 | ... (...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | +| variables.rs:423:5:423:14 | closure2(...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block | | variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | @@ -443,7 +443,7 @@ lastRead | variables.rs:412:9:412:16 | closure1 | variables.rs:412:9:412:16 | closure1 | variables.rs:415:5:415:12 | closure1 | | variables.rs:412:20:414:5 | x | variables.rs:410:13:410:13 | x | variables.rs:413:19:413:19 | x | | variables.rs:420:9:420:20 | closure2 | variables.rs:420:13:420:20 | closure2 | variables.rs:423:5:423:12 | closure2 | -| variables.rs:423:5:423:14 | ... (...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | +| variables.rs:423:5:423:14 | closure2(...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block | | variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | diff --git a/rust/ql/test/library-tests/variables/variables.expected b/rust/ql/test/library-tests/variables/variables.expected index 6760f9bcdde3..ea439e78d5be 100644 --- a/rust/ql/test/library-tests/variables/variables.expected +++ b/rust/ql/test/library-tests/variables/variables.expected @@ -1,468 +1,2 @@ -testFailures -failures -variable -| variables.rs:3:14:3:14 | s | -| variables.rs:7:14:7:14 | i | -| variables.rs:11:18:11:18 | i | -| variables.rs:16:9:16:10 | x1 | -| variables.rs:21:13:21:14 | x2 | -| variables.rs:28:13:28:13 | x | -| variables.rs:35:9:35:10 | x3 | -| variables.rs:37:9:37:10 | x3 | -| variables.rs:43:9:43:10 | x4 | -| variables.rs:46:13:46:14 | x4 | -| variables.rs:60:13:60:14 | a1 | -| variables.rs:61:13:61:14 | b1 | -| variables.rs:64:13:64:13 | x | -| variables.rs:65:13:65:13 | y | -| variables.rs:75:9:75:10 | p1 | -| variables.rs:77:12:77:13 | a2 | -| variables.rs:78:12:78:13 | b2 | -| variables.rs:85:9:85:10 | s1 | -| variables.rs:87:21:87:22 | s2 | -| variables.rs:94:14:94:15 | x5 | -| variables.rs:102:9:102:10 | s1 | -| variables.rs:104:24:104:25 | s2 | -| variables.rs:111:9:111:10 | x6 | -| variables.rs:112:9:112:10 | y1 | -| variables.rs:116:14:116:15 | y1 | -| variables.rs:128:9:128:15 | numbers | -| variables.rs:132:13:132:17 | first | -| variables.rs:133:13:133:17 | third | -| variables.rs:134:13:134:17 | fifth | -| variables.rs:144:13:144:17 | first | -| variables.rs:146:13:146:16 | last | -| variables.rs:155:9:155:10 | p2 | -| variables.rs:159:16:159:17 | x7 | -| variables.rs:169:9:169:11 | msg | -| variables.rs:173:17:173:27 | id_variable | -| variables.rs:178:26:178:27 | id | -| variables.rs:189:9:189:14 | either | -| variables.rs:191:9:191:44 | a3 | -| variables.rs:203:9:203:10 | tv | -| variables.rs:205:9:205:81 | a4 | -| variables.rs:209:9:209:83 | a5 | -| variables.rs:213:9:213:83 | a6 | -| variables.rs:219:9:219:14 | either | -| variables.rs:221:9:221:44 | a7 | -| variables.rs:229:9:229:14 | either | -| variables.rs:232:13:232:13 | e | -| variables.rs:233:14:233:51 | a11 | -| variables.rs:236:33:236:35 | a12 | -| variables.rs:253:9:253:10 | fv | -| variables.rs:255:9:255:109 | a13 | -| variables.rs:261:5:261:6 | a8 | -| variables.rs:263:9:263:10 | b3 | -| variables.rs:264:9:264:10 | c1 | -| variables.rs:272:6:272:41 | a9 | -| variables.rs:279:13:279:15 | a10 | -| variables.rs:280:13:280:14 | b4 | -| variables.rs:281:13:281:14 | c2 | -| variables.rs:302:13:302:15 | a10 | -| variables.rs:303:13:303:14 | b4 | -| variables.rs:315:9:315:23 | example_closure | -| variables.rs:316:10:316:10 | x | -| variables.rs:318:9:318:10 | n1 | -| variables.rs:323:9:323:26 | immutable_variable | -| variables.rs:324:10:324:10 | x | -| variables.rs:326:9:326:10 | n2 | -| variables.rs:332:9:332:9 | v | -| variables.rs:334:9:334:12 | text | -| variables.rs:341:13:341:13 | a | -| variables.rs:349:13:349:13 | i | -| variables.rs:350:9:350:13 | ref_i | -| variables.rs:356:17:356:17 | x | -| variables.rs:363:22:363:22 | x | -| variables.rs:363:39:363:39 | y | -| variables.rs:372:13:372:13 | x | -| variables.rs:373:9:373:9 | y | -| variables.rs:379:13:379:13 | z | -| variables.rs:380:9:380:9 | w | -| variables.rs:392:13:392:13 | x | -| variables.rs:393:9:393:9 | y | -| variables.rs:400:9:400:9 | x | -| variables.rs:402:9:402:11 | cap | -| variables.rs:410:13:410:13 | x | -| variables.rs:412:9:412:16 | closure1 | -| variables.rs:418:13:418:13 | y | -| variables.rs:420:13:420:20 | closure2 | -| variables.rs:426:13:426:13 | z | -| variables.rs:428:13:428:20 | closure3 | -| variables.rs:436:13:436:13 | i | -| variables.rs:437:9:437:13 | block | -| variables.rs:445:8:445:8 | b | -| variables.rs:446:13:446:13 | x | -| variables.rs:461:13:461:14 | b1 | -| variables.rs:461:24:461:25 | b2 | -| variables.rs:462:9:462:9 | x | -| variables.rs:488:13:488:13 | a | -| variables.rs:497:9:497:9 | x | -| variables.rs:501:9:501:9 | z | -| variables.rs:516:11:516:11 | a | -variableAccess -| variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s | -| variables.rs:8:20:8:20 | i | variables.rs:7:14:7:14 | i | -| variables.rs:12:16:12:16 | i | variables.rs:11:18:11:18 | i | -| variables.rs:17:15:17:16 | x1 | variables.rs:16:9:16:10 | x1 | -| variables.rs:22:15:22:16 | x2 | variables.rs:21:13:21:14 | x2 | -| variables.rs:23:5:23:6 | x2 | variables.rs:21:13:21:14 | x2 | -| variables.rs:24:15:24:16 | x2 | variables.rs:21:13:21:14 | x2 | -| variables.rs:29:20:29:20 | x | variables.rs:28:13:28:13 | x | -| variables.rs:30:5:30:5 | x | variables.rs:28:13:28:13 | x | -| variables.rs:31:20:31:20 | x | variables.rs:28:13:28:13 | x | -| variables.rs:36:15:36:16 | x3 | variables.rs:35:9:35:10 | x3 | -| variables.rs:38:9:38:10 | x3 | variables.rs:35:9:35:10 | x3 | -| variables.rs:39:15:39:16 | x3 | variables.rs:37:9:37:10 | x3 | -| variables.rs:44:15:44:16 | x4 | variables.rs:43:9:43:10 | x4 | -| variables.rs:47:19:47:20 | x4 | variables.rs:46:13:46:14 | x4 | -| variables.rs:49:15:49:16 | x4 | variables.rs:43:9:43:10 | x4 | -| variables.rs:68:15:68:16 | a1 | variables.rs:60:13:60:14 | a1 | -| variables.rs:69:15:69:16 | b1 | variables.rs:61:13:61:14 | b1 | -| variables.rs:70:15:70:15 | x | variables.rs:64:13:64:13 | x | -| variables.rs:71:15:71:15 | y | variables.rs:65:13:65:13 | y | -| variables.rs:79:9:79:10 | p1 | variables.rs:75:9:75:10 | p1 | -| variables.rs:80:15:80:16 | a2 | variables.rs:77:12:77:13 | a2 | -| variables.rs:81:15:81:16 | b2 | variables.rs:78:12:78:13 | b2 | -| variables.rs:88:11:88:12 | s1 | variables.rs:85:9:85:10 | s1 | -| variables.rs:89:19:89:20 | s2 | variables.rs:87:21:87:22 | s2 | -| variables.rs:98:15:98:16 | x5 | variables.rs:94:14:94:15 | x5 | -| variables.rs:105:11:105:12 | s1 | variables.rs:102:9:102:10 | s1 | -| variables.rs:106:19:106:20 | s2 | variables.rs:104:24:104:25 | s2 | -| variables.rs:114:11:114:12 | x6 | variables.rs:111:9:111:10 | x6 | -| variables.rs:119:23:119:24 | y1 | variables.rs:116:14:116:15 | y1 | -| variables.rs:124:15:124:16 | y1 | variables.rs:112:9:112:10 | y1 | -| variables.rs:130:11:130:17 | numbers | variables.rs:128:9:128:15 | numbers | -| variables.rs:136:23:136:27 | first | variables.rs:132:13:132:17 | first | -| variables.rs:137:23:137:27 | third | variables.rs:133:13:133:17 | third | -| variables.rs:138:23:138:27 | fifth | variables.rs:134:13:134:17 | fifth | -| variables.rs:142:11:142:17 | numbers | variables.rs:128:9:128:15 | numbers | -| variables.rs:148:23:148:27 | first | variables.rs:144:13:144:17 | first | -| variables.rs:149:23:149:26 | last | variables.rs:146:13:146:16 | last | -| variables.rs:157:11:157:12 | p2 | variables.rs:155:9:155:10 | p2 | -| variables.rs:160:24:160:25 | x7 | variables.rs:159:16:159:17 | x7 | -| variables.rs:171:11:171:13 | msg | variables.rs:169:9:169:11 | msg | -| variables.rs:174:24:174:34 | id_variable | variables.rs:173:17:173:27 | id_variable | -| variables.rs:179:23:179:24 | id | variables.rs:178:26:178:27 | id | -| variables.rs:190:11:190:16 | either | variables.rs:189:9:189:14 | either | -| variables.rs:192:26:192:27 | a3 | variables.rs:191:9:191:44 | a3 | -| variables.rs:204:11:204:12 | tv | variables.rs:203:9:203:10 | tv | -| variables.rs:206:26:206:27 | a4 | variables.rs:205:9:205:81 | a4 | -| variables.rs:208:11:208:12 | tv | variables.rs:203:9:203:10 | tv | -| variables.rs:210:26:210:27 | a5 | variables.rs:209:9:209:83 | a5 | -| variables.rs:212:11:212:12 | tv | variables.rs:203:9:203:10 | tv | -| variables.rs:214:26:214:27 | a6 | variables.rs:213:9:213:83 | a6 | -| variables.rs:220:11:220:16 | either | variables.rs:219:9:219:14 | either | -| variables.rs:222:16:222:17 | a7 | variables.rs:221:9:221:44 | a7 | -| variables.rs:223:26:223:27 | a7 | variables.rs:221:9:221:44 | a7 | -| variables.rs:231:11:231:16 | either | variables.rs:229:9:229:14 | either | -| variables.rs:235:23:235:25 | a11 | variables.rs:233:14:233:51 | a11 | -| variables.rs:237:15:237:15 | e | variables.rs:232:13:232:13 | e | -| variables.rs:238:28:238:30 | a12 | variables.rs:236:33:236:35 | a12 | -| variables.rs:254:11:254:12 | fv | variables.rs:253:9:253:10 | fv | -| variables.rs:256:26:256:28 | a13 | variables.rs:255:9:255:109 | a13 | -| variables.rs:266:15:266:16 | a8 | variables.rs:261:5:261:6 | a8 | -| variables.rs:267:15:267:16 | b3 | variables.rs:263:9:263:10 | b3 | -| variables.rs:268:15:268:16 | c1 | variables.rs:264:9:264:10 | c1 | -| variables.rs:274:15:274:16 | a9 | variables.rs:272:6:272:41 | a9 | -| variables.rs:283:15:283:17 | a10 | variables.rs:279:13:279:15 | a10 | -| variables.rs:284:15:284:16 | b4 | variables.rs:280:13:280:14 | b4 | -| variables.rs:285:15:285:16 | c2 | variables.rs:281:13:281:14 | c2 | -| variables.rs:288:9:288:10 | c2 | variables.rs:281:13:281:14 | c2 | -| variables.rs:289:9:289:10 | b4 | variables.rs:280:13:280:14 | b4 | -| variables.rs:290:9:290:11 | a10 | variables.rs:279:13:279:15 | a10 | -| variables.rs:292:9:292:11 | a10 | variables.rs:279:13:279:15 | a10 | -| variables.rs:293:9:293:10 | b4 | variables.rs:280:13:280:14 | b4 | -| variables.rs:294:9:294:10 | c2 | variables.rs:281:13:281:14 | c2 | -| variables.rs:296:15:296:17 | a10 | variables.rs:279:13:279:15 | a10 | -| variables.rs:297:15:297:16 | b4 | variables.rs:280:13:280:14 | b4 | -| variables.rs:298:15:298:16 | c2 | variables.rs:281:13:281:14 | c2 | -| variables.rs:305:23:305:25 | a10 | variables.rs:302:13:302:15 | a10 | -| variables.rs:306:23:306:24 | b4 | variables.rs:303:13:303:14 | b4 | -| variables.rs:310:15:310:17 | a10 | variables.rs:279:13:279:15 | a10 | -| variables.rs:311:15:311:16 | b4 | variables.rs:280:13:280:14 | b4 | -| variables.rs:317:9:317:9 | x | variables.rs:316:10:316:10 | x | -| variables.rs:319:9:319:23 | example_closure | variables.rs:315:9:315:23 | example_closure | -| variables.rs:320:15:320:16 | n1 | variables.rs:318:9:318:10 | n1 | -| variables.rs:325:9:325:9 | x | variables.rs:324:10:324:10 | x | -| variables.rs:327:9:327:26 | immutable_variable | variables.rs:323:9:323:26 | immutable_variable | -| variables.rs:328:15:328:16 | n2 | variables.rs:326:9:326:10 | n2 | -| variables.rs:335:12:335:12 | v | variables.rs:332:9:332:9 | v | -| variables.rs:336:19:336:22 | text | variables.rs:334:9:334:12 | text | -| variables.rs:342:5:342:5 | a | variables.rs:341:13:341:13 | a | -| variables.rs:343:15:343:15 | a | variables.rs:341:13:341:13 | a | -| variables.rs:344:11:344:11 | a | variables.rs:341:13:341:13 | a | -| variables.rs:345:15:345:15 | a | variables.rs:341:13:341:13 | a | -| variables.rs:351:14:351:14 | i | variables.rs:349:13:349:13 | i | -| variables.rs:352:6:352:10 | ref_i | variables.rs:350:9:350:13 | ref_i | -| variables.rs:353:15:353:15 | i | variables.rs:349:13:349:13 | i | -| variables.rs:357:6:357:6 | x | variables.rs:356:17:356:17 | x | -| variables.rs:358:10:358:10 | x | variables.rs:356:17:356:17 | x | -| variables.rs:359:10:359:10 | x | variables.rs:356:17:356:17 | x | -| variables.rs:360:12:360:12 | x | variables.rs:356:17:356:17 | x | -| variables.rs:364:6:364:6 | x | variables.rs:363:22:363:22 | x | -| variables.rs:365:10:365:10 | x | variables.rs:363:22:363:22 | x | -| variables.rs:366:10:366:10 | x | variables.rs:363:22:363:22 | x | -| variables.rs:367:6:367:6 | y | variables.rs:363:39:363:39 | y | -| variables.rs:368:9:368:9 | x | variables.rs:363:22:363:22 | x | -| variables.rs:374:27:374:27 | x | variables.rs:372:13:372:13 | x | -| variables.rs:375:6:375:6 | y | variables.rs:373:9:373:9 | y | -| variables.rs:377:15:377:15 | x | variables.rs:372:13:372:13 | x | -| variables.rs:381:19:381:19 | x | variables.rs:372:13:372:13 | x | -| variables.rs:383:14:383:14 | z | variables.rs:379:13:379:13 | z | -| variables.rs:384:9:384:9 | w | variables.rs:380:9:380:9 | w | -| variables.rs:386:7:386:7 | w | variables.rs:380:9:380:9 | w | -| variables.rs:388:15:388:15 | z | variables.rs:379:13:379:13 | z | -| variables.rs:394:14:394:14 | x | variables.rs:392:13:392:13 | x | -| variables.rs:395:6:395:6 | y | variables.rs:393:9:393:9 | y | -| variables.rs:396:15:396:15 | x | variables.rs:392:13:392:13 | x | -| variables.rs:403:19:403:19 | x | variables.rs:400:9:400:9 | x | -| variables.rs:405:5:405:7 | cap | variables.rs:402:9:402:11 | cap | -| variables.rs:406:15:406:15 | x | variables.rs:400:9:400:9 | x | -| variables.rs:413:19:413:19 | x | variables.rs:410:13:410:13 | x | -| variables.rs:415:5:415:12 | closure1 | variables.rs:412:9:412:16 | closure1 | -| variables.rs:416:15:416:15 | x | variables.rs:410:13:410:13 | x | -| variables.rs:421:9:421:9 | y | variables.rs:418:13:418:13 | y | -| variables.rs:423:5:423:12 | closure2 | variables.rs:420:13:420:20 | closure2 | -| variables.rs:424:15:424:15 | y | variables.rs:418:13:418:13 | y | -| variables.rs:429:9:429:9 | z | variables.rs:426:13:426:13 | z | -| variables.rs:431:5:431:12 | closure3 | variables.rs:428:13:428:20 | closure3 | -| variables.rs:432:15:432:15 | z | variables.rs:426:13:426:13 | z | -| variables.rs:438:9:438:9 | i | variables.rs:436:13:436:13 | i | -| variables.rs:441:5:441:9 | block | variables.rs:437:9:437:13 | block | -| variables.rs:442:15:442:15 | i | variables.rs:436:13:436:13 | i | -| variables.rs:447:15:447:15 | x | variables.rs:446:13:446:13 | x | -| variables.rs:448:15:448:15 | x | variables.rs:446:13:446:13 | x | -| variables.rs:449:8:449:8 | b | variables.rs:445:8:445:8 | b | -| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x | -| variables.rs:451:19:451:19 | x | variables.rs:446:13:446:13 | x | -| variables.rs:452:19:452:19 | x | variables.rs:446:13:446:13 | x | -| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x | -| variables.rs:455:19:455:19 | x | variables.rs:446:13:446:13 | x | -| variables.rs:456:19:456:19 | x | variables.rs:446:13:446:13 | x | -| variables.rs:458:15:458:15 | x | variables.rs:446:13:446:13 | x | -| variables.rs:463:8:463:9 | b1 | variables.rs:461:13:461:14 | b1 | -| variables.rs:464:19:464:19 | x | variables.rs:462:9:462:9 | x | -| variables.rs:466:19:466:19 | x | variables.rs:462:9:462:9 | x | -| variables.rs:469:8:469:9 | b2 | variables.rs:461:24:461:25 | b2 | -| variables.rs:470:19:470:19 | x | variables.rs:462:9:462:9 | x | -| variables.rs:472:19:472:19 | x | variables.rs:462:9:462:9 | x | -| variables.rs:489:15:489:15 | a | variables.rs:488:13:488:13 | a | -| variables.rs:490:5:490:5 | a | variables.rs:488:13:488:13 | a | -| variables.rs:491:15:491:15 | a | variables.rs:488:13:488:13 | a | -| variables.rs:492:5:492:5 | a | variables.rs:488:13:488:13 | a | -| variables.rs:493:15:493:15 | a | variables.rs:488:13:488:13 | a | -| variables.rs:498:20:498:20 | x | variables.rs:497:9:497:9 | x | -| variables.rs:499:15:499:15 | x | variables.rs:497:9:497:9 | x | -| variables.rs:502:20:502:20 | z | variables.rs:501:9:501:9 | z | -| variables.rs:517:3:517:3 | a | variables.rs:516:11:516:11 | a | -| variables.rs:519:13:519:13 | a | variables.rs:516:11:516:11 | a | -variableWriteAccess -| variables.rs:23:5:23:6 | x2 | variables.rs:21:13:21:14 | x2 | -| variables.rs:30:5:30:5 | x | variables.rs:28:13:28:13 | x | -| variables.rs:288:9:288:10 | c2 | variables.rs:281:13:281:14 | c2 | -| variables.rs:289:9:289:10 | b4 | variables.rs:280:13:280:14 | b4 | -| variables.rs:290:9:290:11 | a10 | variables.rs:279:13:279:15 | a10 | -| variables.rs:421:9:421:9 | y | variables.rs:418:13:418:13 | y | -| variables.rs:438:9:438:9 | i | variables.rs:436:13:436:13 | i | -| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x | -| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x | -| variables.rs:492:5:492:5 | a | variables.rs:488:13:488:13 | a | -variableReadAccess -| variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s | -| variables.rs:8:20:8:20 | i | variables.rs:7:14:7:14 | i | -| variables.rs:12:16:12:16 | i | variables.rs:11:18:11:18 | i | -| variables.rs:17:15:17:16 | x1 | variables.rs:16:9:16:10 | x1 | -| variables.rs:22:15:22:16 | x2 | variables.rs:21:13:21:14 | x2 | -| variables.rs:24:15:24:16 | x2 | variables.rs:21:13:21:14 | x2 | -| variables.rs:36:15:36:16 | x3 | variables.rs:35:9:35:10 | x3 | -| variables.rs:38:9:38:10 | x3 | variables.rs:35:9:35:10 | x3 | -| variables.rs:39:15:39:16 | x3 | variables.rs:37:9:37:10 | x3 | -| variables.rs:44:15:44:16 | x4 | variables.rs:43:9:43:10 | x4 | -| variables.rs:47:19:47:20 | x4 | variables.rs:46:13:46:14 | x4 | -| variables.rs:49:15:49:16 | x4 | variables.rs:43:9:43:10 | x4 | -| variables.rs:68:15:68:16 | a1 | variables.rs:60:13:60:14 | a1 | -| variables.rs:69:15:69:16 | b1 | variables.rs:61:13:61:14 | b1 | -| variables.rs:70:15:70:15 | x | variables.rs:64:13:64:13 | x | -| variables.rs:71:15:71:15 | y | variables.rs:65:13:65:13 | y | -| variables.rs:79:9:79:10 | p1 | variables.rs:75:9:75:10 | p1 | -| variables.rs:80:15:80:16 | a2 | variables.rs:77:12:77:13 | a2 | -| variables.rs:81:15:81:16 | b2 | variables.rs:78:12:78:13 | b2 | -| variables.rs:88:11:88:12 | s1 | variables.rs:85:9:85:10 | s1 | -| variables.rs:89:19:89:20 | s2 | variables.rs:87:21:87:22 | s2 | -| variables.rs:98:15:98:16 | x5 | variables.rs:94:14:94:15 | x5 | -| variables.rs:105:11:105:12 | s1 | variables.rs:102:9:102:10 | s1 | -| variables.rs:106:19:106:20 | s2 | variables.rs:104:24:104:25 | s2 | -| variables.rs:114:11:114:12 | x6 | variables.rs:111:9:111:10 | x6 | -| variables.rs:119:23:119:24 | y1 | variables.rs:116:14:116:15 | y1 | -| variables.rs:124:15:124:16 | y1 | variables.rs:112:9:112:10 | y1 | -| variables.rs:130:11:130:17 | numbers | variables.rs:128:9:128:15 | numbers | -| variables.rs:136:23:136:27 | first | variables.rs:132:13:132:17 | first | -| variables.rs:137:23:137:27 | third | variables.rs:133:13:133:17 | third | -| variables.rs:138:23:138:27 | fifth | variables.rs:134:13:134:17 | fifth | -| variables.rs:142:11:142:17 | numbers | variables.rs:128:9:128:15 | numbers | -| variables.rs:148:23:148:27 | first | variables.rs:144:13:144:17 | first | -| variables.rs:149:23:149:26 | last | variables.rs:146:13:146:16 | last | -| variables.rs:157:11:157:12 | p2 | variables.rs:155:9:155:10 | p2 | -| variables.rs:160:24:160:25 | x7 | variables.rs:159:16:159:17 | x7 | -| variables.rs:171:11:171:13 | msg | variables.rs:169:9:169:11 | msg | -| variables.rs:174:24:174:34 | id_variable | variables.rs:173:17:173:27 | id_variable | -| variables.rs:179:23:179:24 | id | variables.rs:178:26:178:27 | id | -| variables.rs:190:11:190:16 | either | variables.rs:189:9:189:14 | either | -| variables.rs:192:26:192:27 | a3 | variables.rs:191:9:191:44 | a3 | -| variables.rs:204:11:204:12 | tv | variables.rs:203:9:203:10 | tv | -| variables.rs:206:26:206:27 | a4 | variables.rs:205:9:205:81 | a4 | -| variables.rs:208:11:208:12 | tv | variables.rs:203:9:203:10 | tv | -| variables.rs:210:26:210:27 | a5 | variables.rs:209:9:209:83 | a5 | -| variables.rs:212:11:212:12 | tv | variables.rs:203:9:203:10 | tv | -| variables.rs:214:26:214:27 | a6 | variables.rs:213:9:213:83 | a6 | -| variables.rs:220:11:220:16 | either | variables.rs:219:9:219:14 | either | -| variables.rs:222:16:222:17 | a7 | variables.rs:221:9:221:44 | a7 | -| variables.rs:223:26:223:27 | a7 | variables.rs:221:9:221:44 | a7 | -| variables.rs:231:11:231:16 | either | variables.rs:229:9:229:14 | either | -| variables.rs:235:23:235:25 | a11 | variables.rs:233:14:233:51 | a11 | -| variables.rs:237:15:237:15 | e | variables.rs:232:13:232:13 | e | -| variables.rs:238:28:238:30 | a12 | variables.rs:236:33:236:35 | a12 | -| variables.rs:254:11:254:12 | fv | variables.rs:253:9:253:10 | fv | -| variables.rs:256:26:256:28 | a13 | variables.rs:255:9:255:109 | a13 | -| variables.rs:266:15:266:16 | a8 | variables.rs:261:5:261:6 | a8 | -| variables.rs:267:15:267:16 | b3 | variables.rs:263:9:263:10 | b3 | -| variables.rs:268:15:268:16 | c1 | variables.rs:264:9:264:10 | c1 | -| variables.rs:274:15:274:16 | a9 | variables.rs:272:6:272:41 | a9 | -| variables.rs:283:15:283:17 | a10 | variables.rs:279:13:279:15 | a10 | -| variables.rs:284:15:284:16 | b4 | variables.rs:280:13:280:14 | b4 | -| variables.rs:285:15:285:16 | c2 | variables.rs:281:13:281:14 | c2 | -| variables.rs:292:9:292:11 | a10 | variables.rs:279:13:279:15 | a10 | -| variables.rs:293:9:293:10 | b4 | variables.rs:280:13:280:14 | b4 | -| variables.rs:294:9:294:10 | c2 | variables.rs:281:13:281:14 | c2 | -| variables.rs:296:15:296:17 | a10 | variables.rs:279:13:279:15 | a10 | -| variables.rs:297:15:297:16 | b4 | variables.rs:280:13:280:14 | b4 | -| variables.rs:298:15:298:16 | c2 | variables.rs:281:13:281:14 | c2 | -| variables.rs:305:23:305:25 | a10 | variables.rs:302:13:302:15 | a10 | -| variables.rs:306:23:306:24 | b4 | variables.rs:303:13:303:14 | b4 | -| variables.rs:310:15:310:17 | a10 | variables.rs:279:13:279:15 | a10 | -| variables.rs:311:15:311:16 | b4 | variables.rs:280:13:280:14 | b4 | -| variables.rs:317:9:317:9 | x | variables.rs:316:10:316:10 | x | -| variables.rs:319:9:319:23 | example_closure | variables.rs:315:9:315:23 | example_closure | -| variables.rs:320:15:320:16 | n1 | variables.rs:318:9:318:10 | n1 | -| variables.rs:325:9:325:9 | x | variables.rs:324:10:324:10 | x | -| variables.rs:327:9:327:26 | immutable_variable | variables.rs:323:9:323:26 | immutable_variable | -| variables.rs:328:15:328:16 | n2 | variables.rs:326:9:326:10 | n2 | -| variables.rs:335:12:335:12 | v | variables.rs:332:9:332:9 | v | -| variables.rs:336:19:336:22 | text | variables.rs:334:9:334:12 | text | -| variables.rs:343:15:343:15 | a | variables.rs:341:13:341:13 | a | -| variables.rs:345:15:345:15 | a | variables.rs:341:13:341:13 | a | -| variables.rs:352:6:352:10 | ref_i | variables.rs:350:9:350:13 | ref_i | -| variables.rs:353:15:353:15 | i | variables.rs:349:13:349:13 | i | -| variables.rs:357:6:357:6 | x | variables.rs:356:17:356:17 | x | -| variables.rs:358:10:358:10 | x | variables.rs:356:17:356:17 | x | -| variables.rs:359:10:359:10 | x | variables.rs:356:17:356:17 | x | -| variables.rs:360:12:360:12 | x | variables.rs:356:17:356:17 | x | -| variables.rs:364:6:364:6 | x | variables.rs:363:22:363:22 | x | -| variables.rs:365:10:365:10 | x | variables.rs:363:22:363:22 | x | -| variables.rs:366:10:366:10 | x | variables.rs:363:22:363:22 | x | -| variables.rs:367:6:367:6 | y | variables.rs:363:39:363:39 | y | -| variables.rs:368:9:368:9 | x | variables.rs:363:22:363:22 | x | -| variables.rs:375:6:375:6 | y | variables.rs:373:9:373:9 | y | -| variables.rs:377:15:377:15 | x | variables.rs:372:13:372:13 | x | -| variables.rs:384:9:384:9 | w | variables.rs:380:9:380:9 | w | -| variables.rs:386:7:386:7 | w | variables.rs:380:9:380:9 | w | -| variables.rs:388:15:388:15 | z | variables.rs:379:13:379:13 | z | -| variables.rs:395:6:395:6 | y | variables.rs:393:9:393:9 | y | -| variables.rs:396:15:396:15 | x | variables.rs:392:13:392:13 | x | -| variables.rs:403:19:403:19 | x | variables.rs:400:9:400:9 | x | -| variables.rs:405:5:405:7 | cap | variables.rs:402:9:402:11 | cap | -| variables.rs:406:15:406:15 | x | variables.rs:400:9:400:9 | x | -| variables.rs:413:19:413:19 | x | variables.rs:410:13:410:13 | x | -| variables.rs:415:5:415:12 | closure1 | variables.rs:412:9:412:16 | closure1 | -| variables.rs:416:15:416:15 | x | variables.rs:410:13:410:13 | x | -| variables.rs:423:5:423:12 | closure2 | variables.rs:420:13:420:20 | closure2 | -| variables.rs:424:15:424:15 | y | variables.rs:418:13:418:13 | y | -| variables.rs:429:9:429:9 | z | variables.rs:426:13:426:13 | z | -| variables.rs:431:5:431:12 | closure3 | variables.rs:428:13:428:20 | closure3 | -| variables.rs:432:15:432:15 | z | variables.rs:426:13:426:13 | z | -| variables.rs:441:5:441:9 | block | variables.rs:437:9:437:13 | block | -| variables.rs:442:15:442:15 | i | variables.rs:436:13:436:13 | i | -| variables.rs:447:15:447:15 | x | variables.rs:446:13:446:13 | x | -| variables.rs:448:15:448:15 | x | variables.rs:446:13:446:13 | x | -| variables.rs:449:8:449:8 | b | variables.rs:445:8:445:8 | b | -| variables.rs:451:19:451:19 | x | variables.rs:446:13:446:13 | x | -| variables.rs:452:19:452:19 | x | variables.rs:446:13:446:13 | x | -| variables.rs:455:19:455:19 | x | variables.rs:446:13:446:13 | x | -| variables.rs:456:19:456:19 | x | variables.rs:446:13:446:13 | x | -| variables.rs:458:15:458:15 | x | variables.rs:446:13:446:13 | x | -| variables.rs:463:8:463:9 | b1 | variables.rs:461:13:461:14 | b1 | -| variables.rs:464:19:464:19 | x | variables.rs:462:9:462:9 | x | -| variables.rs:466:19:466:19 | x | variables.rs:462:9:462:9 | x | -| variables.rs:469:8:469:9 | b2 | variables.rs:461:24:461:25 | b2 | -| variables.rs:470:19:470:19 | x | variables.rs:462:9:462:9 | x | -| variables.rs:472:19:472:19 | x | variables.rs:462:9:462:9 | x | -| variables.rs:489:15:489:15 | a | variables.rs:488:13:488:13 | a | -| variables.rs:490:5:490:5 | a | variables.rs:488:13:488:13 | a | -| variables.rs:491:15:491:15 | a | variables.rs:488:13:488:13 | a | -| variables.rs:493:15:493:15 | a | variables.rs:488:13:488:13 | a | -| variables.rs:499:15:499:15 | x | variables.rs:497:9:497:9 | x | -| variables.rs:517:3:517:3 | a | variables.rs:516:11:516:11 | a | -| variables.rs:519:13:519:13 | a | variables.rs:516:11:516:11 | a | -variableInitializer -| variables.rs:16:9:16:10 | x1 | variables.rs:16:14:16:16 | "a" | -| variables.rs:21:13:21:14 | x2 | variables.rs:21:18:21:18 | 4 | -| variables.rs:28:13:28:13 | x | variables.rs:28:17:28:17 | 1 | -| variables.rs:35:9:35:10 | x3 | variables.rs:35:14:35:14 | 1 | -| variables.rs:37:9:37:10 | x3 | variables.rs:38:9:38:14 | ... + ... | -| variables.rs:43:9:43:10 | x4 | variables.rs:43:14:43:16 | "a" | -| variables.rs:46:13:46:14 | x4 | variables.rs:46:18:46:20 | "b" | -| variables.rs:75:9:75:10 | p1 | variables.rs:75:14:75:37 | RecordExpr | -| variables.rs:85:9:85:10 | s1 | variables.rs:85:14:85:41 | CallExpr | -| variables.rs:102:9:102:10 | s1 | variables.rs:102:14:102:41 | CallExpr | -| variables.rs:111:9:111:10 | x6 | variables.rs:111:14:111:20 | CallExpr | -| variables.rs:112:9:112:10 | y1 | variables.rs:112:14:112:15 | 10 | -| variables.rs:128:9:128:15 | numbers | variables.rs:128:19:128:35 | TupleExpr | -| variables.rs:155:9:155:10 | p2 | variables.rs:155:14:155:37 | RecordExpr | -| variables.rs:169:9:169:11 | msg | variables.rs:169:15:169:38 | RecordExpr | -| variables.rs:189:9:189:14 | either | variables.rs:189:18:189:33 | CallExpr | -| variables.rs:203:9:203:10 | tv | variables.rs:203:14:203:36 | CallExpr | -| variables.rs:219:9:219:14 | either | variables.rs:219:18:219:33 | CallExpr | -| variables.rs:229:9:229:14 | either | variables.rs:229:18:229:33 | CallExpr | -| variables.rs:253:9:253:10 | fv | variables.rs:253:14:253:35 | CallExpr | -| variables.rs:315:9:315:23 | example_closure | variables.rs:316:9:317:9 | ClosureExpr | -| variables.rs:318:9:318:10 | n1 | variables.rs:319:9:319:26 | CallExpr | -| variables.rs:323:9:323:26 | immutable_variable | variables.rs:324:9:325:9 | ClosureExpr | -| variables.rs:326:9:326:10 | n2 | variables.rs:327:9:327:29 | CallExpr | -| variables.rs:332:9:332:9 | v | variables.rs:332:13:332:41 | RefExpr | -| variables.rs:341:13:341:13 | a | variables.rs:341:17:341:17 | 0 | -| variables.rs:349:13:349:13 | i | variables.rs:349:17:349:17 | 1 | -| variables.rs:350:9:350:13 | ref_i | variables.rs:351:9:351:14 | RefExpr | -| variables.rs:372:13:372:13 | x | variables.rs:372:17:372:17 | 2 | -| variables.rs:373:9:373:9 | y | variables.rs:374:9:374:28 | CallExpr | -| variables.rs:379:13:379:13 | z | variables.rs:379:17:379:17 | 4 | -| variables.rs:380:9:380:9 | w | variables.rs:381:9:381:19 | RefExpr | -| variables.rs:392:13:392:13 | x | variables.rs:392:17:392:17 | 1 | -| variables.rs:393:9:393:9 | y | variables.rs:394:9:394:14 | RefExpr | -| variables.rs:400:9:400:9 | x | variables.rs:400:13:400:15 | 100 | -| variables.rs:402:9:402:11 | cap | variables.rs:402:15:404:5 | ClosureExpr | -| variables.rs:410:13:410:13 | x | variables.rs:410:17:410:17 | 1 | -| variables.rs:412:9:412:16 | closure1 | variables.rs:412:20:414:5 | ClosureExpr | -| variables.rs:418:13:418:13 | y | variables.rs:418:17:418:17 | 2 | -| variables.rs:420:13:420:20 | closure2 | variables.rs:420:24:422:5 | ClosureExpr | -| variables.rs:426:13:426:13 | z | variables.rs:426:17:426:17 | 2 | -| variables.rs:428:13:428:20 | closure3 | variables.rs:428:24:430:5 | ClosureExpr | -| variables.rs:436:13:436:13 | i | variables.rs:436:22:436:22 | 0 | -| variables.rs:437:9:437:13 | block | variables.rs:437:17:439:5 | BlockExpr | -| variables.rs:446:13:446:13 | x | variables.rs:446:17:446:17 | 1 | -| variables.rs:462:9:462:9 | x | variables.rs:462:13:462:13 | 1 | -| variables.rs:488:13:488:13 | a | variables.rs:488:17:488:35 | RecordExpr | -| variables.rs:497:9:497:9 | x | variables.rs:497:13:497:14 | 16 | -| variables.rs:501:9:501:9 | z | variables.rs:501:13:501:14 | 17 | -| variables.rs:516:11:516:11 | a | variables.rs:516:15:516:33 | RecordExpr | -capturedVariable -| variables.rs:400:9:400:9 | x | -| variables.rs:410:13:410:13 | x | -| variables.rs:418:13:418:13 | y | -| variables.rs:426:13:426:13 | z | -| variables.rs:436:13:436:13 | i | -capturedAccess -| variables.rs:403:19:403:19 | x | -| variables.rs:413:19:413:19 | x | -| variables.rs:421:9:421:9 | y | -| variables.rs:429:9:429:9 | z | -| variables.rs:438:9:438:9 | i | +ERROR: empty recursive call: dispatch predicate for CommentImpl::Impl::Comment::getCommentMarker (CommentImpl.qll:23,47-63) +ERROR: empty recursive call: dispatch predicate for CommentImpl::Impl::Comment::getText (CommentImpl.qll:36,34-41) From 4d04c5af830bb275d62503b273776491d613752b Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 20 Nov 2024 12:08:51 +0100 Subject: [PATCH 10/35] Rust: fix non-existent string representations --- rust/ql/.generated.list | 2 - rust/ql/.gitattributes | 2 - .../rust/elements/internal/BreakExprImpl.qll | 4 +- .../rust/elements/internal/CommentImpl.qll | 22 +- .../rust/elements/internal/ForExprImpl.qll | 6 +- .../rust/elements/internal/LifetimeImpl.qll | 6 +- .../rust/elements/internal/ParamImpl.qll | 9 +- .../rust/elements/internal/UnionImpl.qll | 6 +- .../generated/BreakExpr/BreakExpr.expected | 6 +- .../BreakExpr/BreakExpr_getExpr.expected | 4 +- .../BreakExpr/BreakExpr_getLifetime.expected | 4 +- .../library-tests/controlflow/Cfg.expected | 1444 ++++++++--------- .../dataflow/barrier/inline-flow.expected | 16 +- .../dataflow/local/DataFlowStep.expected | 8 +- .../dataflow/local/inline-flow.expected | 26 +- .../DataFlowConsistencyCounts.expected | 2 +- .../diagnostics/ExtractionWarnings.expected | 1 - .../diagnostics/SummaryStats.expected | 6 +- .../diagnostics/does_not_compile.rs | 2 +- 19 files changed, 809 insertions(+), 767 deletions(-) diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index a26f1d4155e1..1c56649d4761 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -221,7 +221,6 @@ lib/codeql/rust/elements/internal/FieldListImpl.qll 02a09d1d146030c68cead4614f4e lib/codeql/rust/elements/internal/FnPtrTypeConstructor.qll 494c53ee599039c02145f91394d8dfe7635b32d03f9fcde5efcc99ced437fec8 992462b1b6b9e64b6201f3c6c232ca524f126efcb562c9f0c176677bb559f33c lib/codeql/rust/elements/internal/FnPtrTypeImpl.qll 5d70f71e08341dfa851fc53a47cf362786b57f44244a636e2fbbad3d1c41371e 51d6a1b1132204129bb8ee9d2b72c6d13ce4b3ec8b185d3732d2e64d3f80e807 lib/codeql/rust/elements/internal/ForExprConstructor.qll d79b88dac19256300b758ba0f37ce3f07e9f848d6ae0c1fdb87bd348e760aa3e 62123b11858293429aa609ea77d2f45cb8c8eebae80a1d81da6f3ad7d1dbc19b -lib/codeql/rust/elements/internal/ForExprImpl.qll 88fc37b7030d3bfca6071f275c4eac6760ad7dea9a01135cee2079170efeb9d5 cd7216c460f8382498dfb0d61d65d83a9aa608b6a9b6657ccd552b82b55ffc5a lib/codeql/rust/elements/internal/ForTypeConstructor.qll 32c40b78aded314b5f51af904bfbd5ae4f1f0ea65854dd6249983cc26b8601bc 729069d58fac648a4b212b0068fb6bca348443b502c38978f171a7539b24333f lib/codeql/rust/elements/internal/ForTypeImpl.qll b515639844778d0fbe51e6161a2ec19201b0ba15156a91cdfecc93523081fd61 ab0c09ee415e55db6abcc07493a5d880c5ae0974f0cb760194e40b68a961676b lib/codeql/rust/elements/internal/FormatArgsArgConstructor.qll 8bd9b4e035ef8adeb3ac510dd68043934c0140facb933be1f240096d01cdfa11 74e9d3bbd8882ae59a7e88935d468e0a90a6529a4e2af6a3d83e93944470f0ee @@ -386,7 +385,6 @@ lib/codeql/rust/elements/internal/UnextractedImpl.qll 5c23df7e448184d76ccab2c227 lib/codeql/rust/elements/internal/UnimplementedConstructor.qll 70b0489fdc75fed389de8203947ed9c8eabb91373a1264eb2c8018ddbb2d9baa 0f2592c1697a2f2f913014ecd73b0e3ff1ec5b038ba1c3a22e7939bf8759e664 lib/codeql/rust/elements/internal/UnimplementedImpl.qll 06771abc088e0a8fc24032c9d2633618e8e40343ef8757a68cc0a70f1617165a 5738f626f1f4f573fdf7dcd5bd57a0948d290ed89342b9160e95ef3c84044f9a lib/codeql/rust/elements/internal/UnionConstructor.qll d650551a1b3ef29c5a770bdad626269cf539ed0c675af954bc847d2c6111f3f6 aca9064ad653a126ab4f03703e96b274587c852dc5e7ff3fea0fec4d45993f10 -lib/codeql/rust/elements/internal/UnionImpl.qll f1765a7a37fb29eff98d67d166c35df4921eafc8cb61c11c7848185535f0497b 9f041f6ee82bd3cda2ddea0ee58d7a996123b1713b9d127f764eb74a9387f685 lib/codeql/rust/elements/internal/UseConstructor.qll a4f790795e18abc29a50d6fbaa0db64cba781e3259a42cbf0468c24ac66b63e7 2fa288f073ac094a838c11f091def2c790b347b6a1b79407c11b10c73d6bff57 lib/codeql/rust/elements/internal/UseImpl.qll ba779517c3c928ab6e794360b6344829e84ec6da5e1de1b03b4eaf8bdae58ce9 0f4ead9eecb584eb9827502276ffe8cb1da0d2fa4b8f660d2afc26ac4e0fba86 lib/codeql/rust/elements/internal/UseTreeConstructor.qll 3e6e834100fcc7249f8a20f8bd9debe09b705fcf5a0e655537e71ac1c6f7956b cdbc84b8f1b009be1e4a7aaba7f5237823cea62c86b38f1794aad97e3dfcf64b diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 8e644be8e461..7411c9cba352 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -223,7 +223,6 @@ /lib/codeql/rust/elements/internal/FnPtrTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/FnPtrTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ForExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ForExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ForTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ForTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/FormatArgsArgConstructor.qll linguist-generated @@ -388,7 +387,6 @@ /lib/codeql/rust/elements/internal/UnimplementedConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/UnimplementedImpl.qll linguist-generated /lib/codeql/rust/elements/internal/UnionConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/UnionImpl.qll linguist-generated /lib/codeql/rust/elements/internal/UseConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/UseImpl.qll linguist-generated /lib/codeql/rust/elements/internal/UseTreeConstructor.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll index 49bca4b25a28..6cfba6978287 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll @@ -106,9 +106,9 @@ module Impl { override string toString() { exists(string label, string expr | ( - result = " " + this.getLifetime().toString() + label = " " + this.getLifetime().toString() or - not this.hasLifetime() and result = "" + not this.hasLifetime() and label = "" ) and (if this.hasExpr() then expr = " ..." else expr = "") and result = "break" + label + expr diff --git a/rust/ql/lib/codeql/rust/elements/internal/CommentImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CommentImpl.qll index 2e7beca481df..85b2a4d80d31 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CommentImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CommentImpl.qll @@ -20,20 +20,30 @@ module Impl { * ``` */ class Comment extends Generated::Comment { - override string getText() { result = this.getCommentMarker() + " ..." } + override string toString() { + result = this.getCommentMarker() + "..." + this.getCommentEndMarker() + } /** - * Gets the text of this comment, excluding the comment marker. + * Gets the text of this comment, excluding the comment markers. */ string getCommentText() { - exists(string s | s = this.getText() | result = s.regexpCapture("///?\\s*(.*)", 1)) + exists(string s | s = this.getText() | + result = + [ + s.regexpCapture("///?\\s*(.*)", 1), + s.regexpCapture("(?s)/\\*\\*?\\s*(.*?)\\s*\\*/", 1) + ] + ) } /** - * Gets the marker of this comment, that is `//` or `///`. + * Gets the marker of this comment, that is `"//"`, `"///"`, `"/*"` or `"/**"`. */ - string getCommentMarker() { - exists(string s | s = this.getText() | result = s.regexpCapture("(///?).*", 1)) + string getCommentMarker() { result = this.getText().regexpCapture("(?s)(///?|/\\*\\*?).*", 1) } + + private string getCommentEndMarker() { + if this.getCommentMarker() = ["//", "///"] then result = "" else result = "*/" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll index a196a6802e9a..da62b58732b0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `ForExpr`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.ForExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A ForExpr. For example: * ```rust * todo!() * ``` */ - class ForExpr extends Generated::ForExpr { } + class ForExpr extends Generated::ForExpr { + override string toString() { result = "for " + this.getPat().toString() + " in ... { ... }" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll index a51bf3c6b122..27b29f64cc9e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LifetimeImpl.qll @@ -19,6 +19,10 @@ module Impl { * ``` */ class Lifetime extends Generated::Lifetime { - override string toString() { result = "'" + this.getText() } + override string toString() { + result = "'" + this.getText() + or + not this.hasText() and result = "'_" + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll index 5a9613830946..5f135cc94ca7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll @@ -20,7 +20,14 @@ module Impl { */ class Param extends Generated::Param { override string toString() { - result = this.getPat().toString() + ": " + this.getTy().toString() + exists(string ty | + ( + ty = ": " + this.getTy().toString() + or + not this.hasTy() and ty = "" + ) and + result = this.getPat().toString() + ty + ) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll index dc850eac4d19..4357dcf68a98 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Union`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.Union * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A Union. For example: * ```rust * todo!() * ``` */ - class Union extends Generated::Union { } + class Union extends Generated::Union { + override string toString() { result = "union " + this.getName().toString() } + } } diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected index f4c8df0a1005..2ffdacb68903 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected @@ -1,3 +1,3 @@ -| gen_break_expr.rs:7:13:7:17 | (no string representation) | getNumberOfAttrs: | 0 | hasExpr: | no | hasLifetime: | no | -| gen_break_expr.rs:12:13:12:27 | (no string representation) | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | -| gen_break_expr.rs:17:13:17:27 | (no string representation) | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | +| gen_break_expr.rs:7:13:7:17 | break | getNumberOfAttrs: | 0 | hasExpr: | no | hasLifetime: | no | +| gen_break_expr.rs:12:13:12:27 | break ''label ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | +| gen_break_expr.rs:17:13:17:27 | break ''label ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected index f99723114fba..864069115dfe 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected @@ -1,2 +1,2 @@ -| gen_break_expr.rs:12:13:12:27 | (no string representation) | gen_break_expr.rs:12:26:12:27 | 42 | -| gen_break_expr.rs:17:13:17:27 | (no string representation) | gen_break_expr.rs:17:26:17:27 | 42 | +| gen_break_expr.rs:12:13:12:27 | break ''label ... | gen_break_expr.rs:12:26:12:27 | 42 | +| gen_break_expr.rs:17:13:17:27 | break ''label ... | gen_break_expr.rs:17:26:17:27 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected index a1a828c744aa..adbf9b15ff23 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected @@ -1,2 +1,2 @@ -| gen_break_expr.rs:12:13:12:27 | (no string representation) | gen_break_expr.rs:12:19:12:24 | ''label | -| gen_break_expr.rs:17:13:17:27 | (no string representation) | gen_break_expr.rs:17:19:17:24 | ''label | +| gen_break_expr.rs:12:13:12:27 | break ''label ... | gen_break_expr.rs:12:19:12:24 | ''label | +| gen_break_expr.rs:17:13:17:27 | break ''label ... | gen_break_expr.rs:17:19:17:24 | ''label | diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 620837abc826..6260c2328a6e 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -1,479 +1,479 @@ edges -| test.rs:5:5:8:5 | enter function_call | test.rs:6:9:6:64 | ExprStmt | | -| test.rs:5:5:8:5 | exit function_call (normal) | test.rs:5:5:8:5 | exit function_call | | -| test.rs:5:24:8:5 | BlockExpr | test.rs:5:5:8:5 | exit function_call (normal) | | +| test.rs:5:5:8:5 | enter fn function_call | test.rs:6:9:6:64 | ExprStmt | | +| test.rs:5:5:8:5 | exit fn function_call (normal) | test.rs:5:5:8:5 | exit fn function_call | | +| test.rs:5:24:8:5 | { ... } | test.rs:5:5:8:5 | exit fn function_call (normal) | | | test.rs:6:9:6:44 | logical_operators::test_and_operator | test.rs:6:46:6:49 | true | | -| test.rs:6:9:6:63 | CallExpr | test.rs:7:9:7:22 | ExprStmt | | +| test.rs:6:9:6:63 | logical_operators::test_and_operator(...) | test.rs:7:9:7:22 | ExprStmt | | | test.rs:6:9:6:64 | ExprStmt | test.rs:6:9:6:44 | logical_operators::test_and_operator | | | test.rs:6:46:6:49 | true | test.rs:6:52:6:56 | false | | | test.rs:6:52:6:56 | false | test.rs:6:59:6:62 | true | | -| test.rs:6:59:6:62 | true | test.rs:6:9:6:63 | CallExpr | | -| test.rs:7:9:7:19 | method_call | test.rs:7:9:7:21 | CallExpr | | -| test.rs:7:9:7:21 | CallExpr | test.rs:5:24:8:5 | BlockExpr | | +| test.rs:6:59:6:62 | true | test.rs:6:9:6:63 | logical_operators::test_and_operator(...) | | +| test.rs:7:9:7:19 | method_call | test.rs:7:9:7:21 | method_call(...) | | +| test.rs:7:9:7:21 | method_call(...) | test.rs:5:24:8:5 | { ... } | | | test.rs:7:9:7:22 | ExprStmt | test.rs:7:9:7:19 | method_call | | -| test.rs:10:5:13:5 | enter method_call | test.rs:11:9:11:37 | LetStmt | | -| test.rs:10:5:13:5 | exit method_call (normal) | test.rs:10:5:13:5 | exit method_call | | -| test.rs:10:22:13:5 | BlockExpr | test.rs:10:5:13:5 | exit method_call (normal) | | -| test.rs:11:9:11:37 | LetStmt | test.rs:11:23:11:34 | HashMap::new | | +| test.rs:10:5:13:5 | enter fn method_call | test.rs:11:9:11:37 | let map = ... | | +| test.rs:10:5:13:5 | exit fn method_call (normal) | test.rs:10:5:13:5 | exit fn method_call | | +| test.rs:10:22:13:5 | { ... } | test.rs:10:5:13:5 | exit fn method_call (normal) | | +| test.rs:11:9:11:37 | let map = ... | test.rs:11:23:11:34 | HashMap::new | | | test.rs:11:13:11:19 | map | test.rs:12:9:12:28 | ExprStmt | match | -| test.rs:11:23:11:34 | HashMap::new | test.rs:11:23:11:36 | CallExpr | | -| test.rs:11:23:11:36 | CallExpr | test.rs:11:13:11:19 | map | | +| test.rs:11:23:11:34 | HashMap::new | test.rs:11:23:11:36 | HashMap::new(...) | | +| test.rs:11:23:11:36 | HashMap::new(...) | test.rs:11:13:11:19 | map | | | test.rs:12:9:12:11 | map | test.rs:12:20:12:21 | 37 | | -| test.rs:12:9:12:27 | ... .insert(...) | test.rs:10:22:13:5 | BlockExpr | | +| test.rs:12:9:12:27 | ... .insert(...) | test.rs:10:22:13:5 | { ... } | | | test.rs:12:9:12:28 | ExprStmt | test.rs:12:9:12:11 | map | | | test.rs:12:20:12:21 | 37 | test.rs:12:24:12:26 | "a" | | | test.rs:12:24:12:26 | "a" | test.rs:12:9:12:27 | ... .insert(...) | | -| test.rs:18:5:24:5 | enter next | test.rs:18:13:18:13 | n | | -| test.rs:18:5:24:5 | exit next (normal) | test.rs:18:5:24:5 | exit next | | -| test.rs:18:13:18:13 | n | test.rs:18:13:18:18 | Param | match | -| test.rs:18:13:18:18 | Param | test.rs:19:12:19:12 | n | | -| test.rs:18:28:24:5 | BlockExpr | test.rs:18:5:24:5 | exit next (normal) | | -| test.rs:19:9:23:9 | IfExpr | test.rs:18:28:24:5 | BlockExpr | | +| test.rs:18:5:24:5 | enter fn next | test.rs:18:13:18:13 | n | | +| test.rs:18:5:24:5 | exit fn next (normal) | test.rs:18:5:24:5 | exit fn next | | +| test.rs:18:13:18:13 | n | test.rs:18:13:18:18 | n: i64 | match | +| test.rs:18:13:18:18 | n: i64 | test.rs:19:12:19:12 | n | | +| test.rs:18:28:24:5 | { ... } | test.rs:18:5:24:5 | exit fn next (normal) | | +| test.rs:19:9:23:9 | if ... { ... } else { ... } | test.rs:18:28:24:5 | { ... } | | | test.rs:19:12:19:12 | n | test.rs:19:16:19:16 | 2 | | | test.rs:19:12:19:16 | ... % ... | test.rs:19:21:19:21 | 0 | | | test.rs:19:12:19:21 | ... == ... | test.rs:20:13:20:13 | n | true | | test.rs:19:12:19:21 | ... == ... | test.rs:22:13:22:13 | 3 | false | | test.rs:19:16:19:16 | 2 | test.rs:19:12:19:16 | ... % ... | | | test.rs:19:21:19:21 | 0 | test.rs:19:12:19:21 | ... == ... | | -| test.rs:19:23:21:9 | BlockExpr | test.rs:19:9:23:9 | IfExpr | | +| test.rs:19:23:21:9 | { ... } | test.rs:19:9:23:9 | if ... { ... } else { ... } | | | test.rs:20:13:20:13 | n | test.rs:20:17:20:17 | 2 | | -| test.rs:20:13:20:17 | ... / ... | test.rs:19:23:21:9 | BlockExpr | | +| test.rs:20:13:20:17 | ... / ... | test.rs:19:23:21:9 | { ... } | | | test.rs:20:17:20:17 | 2 | test.rs:20:13:20:17 | ... / ... | | -| test.rs:21:16:23:9 | BlockExpr | test.rs:19:9:23:9 | IfExpr | | +| test.rs:21:16:23:9 | { ... } | test.rs:19:9:23:9 | if ... { ... } else { ... } | | | test.rs:22:13:22:13 | 3 | test.rs:22:17:22:17 | n | | | test.rs:22:13:22:17 | ... * ... | test.rs:22:21:22:21 | 1 | | -| test.rs:22:13:22:21 | ... + ... | test.rs:21:16:23:9 | BlockExpr | | +| test.rs:22:13:22:21 | ... + ... | test.rs:21:16:23:9 | { ... } | | | test.rs:22:17:22:17 | n | test.rs:22:13:22:17 | ... * ... | | | test.rs:22:21:22:21 | 1 | test.rs:22:13:22:21 | ... + ... | | -| test.rs:26:5:42:5 | enter test_break_and_continue | test.rs:26:32:26:32 | n | | -| test.rs:26:5:42:5 | exit test_break_and_continue (normal) | test.rs:26:5:42:5 | exit test_break_and_continue | | -| test.rs:26:32:26:32 | n | test.rs:26:32:26:37 | Param | match | -| test.rs:26:32:26:37 | Param | test.rs:27:9:27:22 | LetStmt | | -| test.rs:27:9:27:22 | LetStmt | test.rs:27:21:27:21 | n | | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:26:32:26:32 | n | | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:26:5:42:5 | exit fn test_break_and_continue | | +| test.rs:26:32:26:32 | n | test.rs:26:32:26:37 | n: i64 | match | +| test.rs:26:32:26:37 | n: i64 | test.rs:27:9:27:22 | let i = ... | | +| test.rs:27:9:27:22 | let i = ... | test.rs:27:21:27:21 | n | | | test.rs:27:13:27:17 | i | test.rs:28:9:40:9 | ExprStmt | match | | test.rs:27:21:27:21 | n | test.rs:27:13:27:17 | i | | | test.rs:28:9:40:9 | ExprStmt | test.rs:29:13:29:24 | ExprStmt | | -| test.rs:28:9:40:9 | LoopExpr | test.rs:41:9:41:20 | ExprStmt | | -| test.rs:28:14:40:9 | BlockExpr | test.rs:29:13:29:24 | ExprStmt | | +| test.rs:28:9:40:9 | loop {...} | test.rs:41:9:41:20 | ExprStmt | | +| test.rs:28:14:40:9 | { ... } | test.rs:29:13:29:24 | ExprStmt | | | test.rs:29:13:29:13 | i | test.rs:29:17:29:20 | next | | | test.rs:29:13:29:23 | ... = ... | test.rs:30:13:32:13 | ExprStmt | | | test.rs:29:13:29:24 | ExprStmt | test.rs:29:13:29:13 | i | | | test.rs:29:17:29:20 | next | test.rs:29:22:29:22 | i | | -| test.rs:29:17:29:23 | CallExpr | test.rs:29:13:29:23 | ... = ... | | -| test.rs:29:22:29:22 | i | test.rs:29:17:29:23 | CallExpr | | +| test.rs:29:17:29:23 | next(...) | test.rs:29:13:29:23 | ... = ... | | +| test.rs:29:22:29:22 | i | test.rs:29:17:29:23 | next(...) | | | test.rs:30:13:32:13 | ExprStmt | test.rs:30:16:30:16 | i | | -| test.rs:30:13:32:13 | IfExpr | test.rs:33:13:35:13 | ExprStmt | | +| test.rs:30:13:32:13 | if ... { ... } | test.rs:33:13:35:13 | ExprStmt | | | test.rs:30:16:30:16 | i | test.rs:30:20:30:24 | 10000 | | -| test.rs:30:16:30:24 | ... > ... | test.rs:30:13:32:13 | IfExpr | false | +| test.rs:30:16:30:24 | ... > ... | test.rs:30:13:32:13 | if ... { ... } | false | | test.rs:30:16:30:24 | ... > ... | test.rs:31:17:31:29 | ExprStmt | true | | test.rs:30:20:30:24 | 10000 | test.rs:30:16:30:24 | ... > ... | | -| test.rs:31:17:31:28 | ReturnExpr | test.rs:26:5:42:5 | exit test_break_and_continue (normal) | return | +| test.rs:31:17:31:28 | return ... | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | return | | test.rs:31:17:31:29 | ExprStmt | test.rs:31:24:31:28 | false | | -| test.rs:31:24:31:28 | false | test.rs:31:17:31:28 | ReturnExpr | | +| test.rs:31:24:31:28 | false | test.rs:31:17:31:28 | return ... | | | test.rs:33:13:35:13 | ExprStmt | test.rs:33:16:33:16 | i | | -| test.rs:33:13:35:13 | IfExpr | test.rs:36:13:38:13 | ExprStmt | | +| test.rs:33:13:35:13 | if ... { ... } | test.rs:36:13:38:13 | ExprStmt | | | test.rs:33:16:33:16 | i | test.rs:33:21:33:21 | 1 | | -| test.rs:33:16:33:21 | ... == ... | test.rs:33:13:35:13 | IfExpr | false | +| test.rs:33:16:33:21 | ... == ... | test.rs:33:13:35:13 | if ... { ... } | false | | test.rs:33:16:33:21 | ... == ... | test.rs:34:17:34:22 | ExprStmt | true | | test.rs:33:21:33:21 | 1 | test.rs:33:16:33:21 | ... == ... | | -| test.rs:34:17:34:21 | BreakExpr | test.rs:28:9:40:9 | LoopExpr | break | -| test.rs:34:17:34:22 | ExprStmt | test.rs:34:17:34:21 | BreakExpr | | +| test.rs:34:17:34:21 | break | test.rs:28:9:40:9 | loop {...} | break | +| test.rs:34:17:34:22 | ExprStmt | test.rs:34:17:34:21 | break | | | test.rs:36:13:38:13 | ExprStmt | test.rs:36:16:36:16 | i | | -| test.rs:36:13:38:13 | IfExpr | test.rs:39:13:39:13 | i | | +| test.rs:36:13:38:13 | if ... { ... } | test.rs:39:13:39:13 | i | | | test.rs:36:16:36:16 | i | test.rs:36:20:36:20 | 2 | | | test.rs:36:16:36:20 | ... % ... | test.rs:36:25:36:25 | 0 | | -| test.rs:36:16:36:25 | ... != ... | test.rs:36:13:38:13 | IfExpr | false | +| test.rs:36:16:36:25 | ... != ... | test.rs:36:13:38:13 | if ... { ... } | false | | test.rs:36:16:36:25 | ... != ... | test.rs:37:17:37:25 | ExprStmt | true | | test.rs:36:20:36:20 | 2 | test.rs:36:16:36:20 | ... % ... | | | test.rs:36:25:36:25 | 0 | test.rs:36:16:36:25 | ... != ... | | -| test.rs:37:17:37:24 | ContinueExpr | test.rs:29:13:29:24 | ExprStmt | continue | -| test.rs:37:17:37:25 | ExprStmt | test.rs:37:17:37:24 | ContinueExpr | | +| test.rs:37:17:37:24 | continue | test.rs:29:13:29:24 | ExprStmt | continue | +| test.rs:37:17:37:25 | ExprStmt | test.rs:37:17:37:24 | continue | | | test.rs:39:13:39:13 | i | test.rs:39:17:39:17 | i | | -| test.rs:39:13:39:21 | ... = ... | test.rs:28:14:40:9 | BlockExpr | | +| test.rs:39:13:39:21 | ... = ... | test.rs:28:14:40:9 | { ... } | | | test.rs:39:17:39:17 | i | test.rs:39:21:39:21 | 2 | | | test.rs:39:17:39:21 | ... / ... | test.rs:39:13:39:21 | ... = ... | | | test.rs:39:21:39:21 | 2 | test.rs:39:17:39:21 | ... / ... | | -| test.rs:41:9:41:19 | ReturnExpr | test.rs:26:5:42:5 | exit test_break_and_continue (normal) | return | +| test.rs:41:9:41:19 | return ... | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | return | | test.rs:41:9:41:20 | ExprStmt | test.rs:41:16:41:19 | true | | -| test.rs:41:16:41:19 | true | test.rs:41:9:41:19 | ReturnExpr | | -| test.rs:44:5:56:5 | enter test_break_with_labels | test.rs:44:31:44:31 | b | | -| test.rs:44:5:56:5 | exit test_break_with_labels (normal) | test.rs:44:5:56:5 | exit test_break_with_labels | | -| test.rs:44:31:44:31 | b | test.rs:44:31:44:37 | Param | match | -| test.rs:44:31:44:37 | Param | test.rs:45:9:54:9 | ExprStmt | | -| test.rs:44:48:56:5 | BlockExpr | test.rs:44:5:56:5 | exit test_break_with_labels (normal) | | +| test.rs:41:16:41:19 | true | test.rs:41:9:41:19 | return ... | | +| test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:44:31:44:31 | b | | +| test.rs:44:5:56:5 | exit fn test_break_with_labels (normal) | test.rs:44:5:56:5 | exit fn test_break_with_labels | | +| test.rs:44:31:44:31 | b | test.rs:44:31:44:37 | b: bool | match | +| test.rs:44:31:44:37 | b: bool | test.rs:45:9:54:9 | ExprStmt | | +| test.rs:44:48:56:5 | { ... } | test.rs:44:5:56:5 | exit fn test_break_with_labels (normal) | | | test.rs:45:9:54:9 | ExprStmt | test.rs:47:17:51:17 | ExprStmt | | -| test.rs:45:9:54:9 | LoopExpr | test.rs:55:9:55:12 | true | | -| test.rs:45:22:54:9 | BlockExpr | test.rs:47:17:51:17 | ExprStmt | | -| test.rs:46:13:53:13 | LoopExpr | test.rs:45:22:54:9 | BlockExpr | | +| test.rs:45:9:54:9 | loop {...} | test.rs:55:9:55:12 | true | | +| test.rs:45:22:54:9 | { ... } | test.rs:47:17:51:17 | ExprStmt | | +| test.rs:46:13:53:13 | loop {...} | test.rs:45:22:54:9 | { ... } | | | test.rs:47:17:51:17 | ExprStmt | test.rs:47:20:47:20 | b | | -| test.rs:47:17:51:17 | IfExpr | test.rs:52:17:52:29 | ExprStmt | | +| test.rs:47:17:51:17 | if ... { ... } else { ... } | test.rs:52:17:52:29 | ExprStmt | | | test.rs:47:20:47:20 | b | test.rs:48:21:48:26 | ExprStmt | true | | test.rs:47:20:47:20 | b | test.rs:49:27:49:27 | b | false | -| test.rs:48:21:48:25 | BreakExpr | test.rs:46:13:53:13 | LoopExpr | break | -| test.rs:48:21:48:26 | ExprStmt | test.rs:48:21:48:25 | BreakExpr | | -| test.rs:49:24:51:17 | IfExpr | test.rs:47:17:51:17 | IfExpr | | -| test.rs:49:27:49:27 | b | test.rs:49:24:51:17 | IfExpr | false | +| test.rs:48:21:48:25 | break | test.rs:46:13:53:13 | loop {...} | break | +| test.rs:48:21:48:26 | ExprStmt | test.rs:48:21:48:25 | break | | +| test.rs:49:24:51:17 | if ... { ... } | test.rs:47:17:51:17 | if ... { ... } else { ... } | | +| test.rs:49:27:49:27 | b | test.rs:49:24:51:17 | if ... { ... } | false | | test.rs:49:27:49:27 | b | test.rs:50:21:50:33 | ExprStmt | true | -| test.rs:50:21:50:32 | BreakExpr | test.rs:45:9:54:9 | LoopExpr | break | -| test.rs:50:21:50:33 | ExprStmt | test.rs:50:21:50:32 | BreakExpr | | -| test.rs:52:17:52:28 | BreakExpr | test.rs:46:13:53:13 | LoopExpr | break | -| test.rs:52:17:52:29 | ExprStmt | test.rs:52:17:52:28 | BreakExpr | | -| test.rs:55:9:55:12 | true | test.rs:44:48:56:5 | BlockExpr | | -| test.rs:58:5:70:5 | enter test_continue_with_labels | test.rs:58:34:58:34 | b | | -| test.rs:58:34:58:34 | b | test.rs:58:34:58:40 | Param | match | -| test.rs:58:34:58:40 | Param | test.rs:60:13:60:14 | ExprStmt | | +| test.rs:50:21:50:32 | break ''outer | test.rs:45:9:54:9 | loop {...} | break | +| test.rs:50:21:50:33 | ExprStmt | test.rs:50:21:50:32 | break ''outer | | +| test.rs:52:17:52:28 | break ''inner | test.rs:46:13:53:13 | loop {...} | break | +| test.rs:52:17:52:29 | ExprStmt | test.rs:52:17:52:28 | break ''inner | | +| test.rs:55:9:55:12 | true | test.rs:44:48:56:5 | { ... } | | +| test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:58:34:58:34 | b | | +| test.rs:58:34:58:34 | b | test.rs:58:34:58:40 | b: bool | match | +| test.rs:58:34:58:40 | b: bool | test.rs:60:13:60:14 | ExprStmt | | | test.rs:60:13:60:13 | 1 | test.rs:62:17:66:17 | ExprStmt | | | test.rs:60:13:60:14 | ExprStmt | test.rs:60:13:60:13 | 1 | | | test.rs:62:17:66:17 | ExprStmt | test.rs:62:20:62:20 | b | | -| test.rs:62:17:66:17 | IfExpr | test.rs:67:17:67:32 | ExprStmt | | +| test.rs:62:17:66:17 | if ... { ... } else { ... } | test.rs:67:17:67:32 | ExprStmt | | | test.rs:62:20:62:20 | b | test.rs:63:21:63:29 | ExprStmt | true | | test.rs:62:20:62:20 | b | test.rs:64:27:64:27 | b | false | -| test.rs:63:21:63:28 | ContinueExpr | test.rs:62:17:66:17 | ExprStmt | continue | -| test.rs:63:21:63:29 | ExprStmt | test.rs:63:21:63:28 | ContinueExpr | | -| test.rs:64:24:66:17 | IfExpr | test.rs:62:17:66:17 | IfExpr | | -| test.rs:64:27:64:27 | b | test.rs:64:24:66:17 | IfExpr | false | +| test.rs:63:21:63:28 | continue | test.rs:62:17:66:17 | ExprStmt | continue | +| test.rs:63:21:63:29 | ExprStmt | test.rs:63:21:63:28 | continue | | +| test.rs:64:24:66:17 | if ... { ... } | test.rs:62:17:66:17 | if ... { ... } else { ... } | | +| test.rs:64:27:64:27 | b | test.rs:64:24:66:17 | if ... { ... } | false | | test.rs:64:27:64:27 | b | test.rs:65:21:65:36 | ExprStmt | true | -| test.rs:65:21:65:35 | ContinueExpr | test.rs:60:13:60:14 | ExprStmt | continue | -| test.rs:65:21:65:36 | ExprStmt | test.rs:65:21:65:35 | ContinueExpr | | -| test.rs:67:17:67:31 | ContinueExpr | test.rs:62:17:66:17 | ExprStmt | continue | -| test.rs:67:17:67:32 | ExprStmt | test.rs:67:17:67:31 | ContinueExpr | | -| test.rs:72:5:84:5 | enter test_loop_label_shadowing | test.rs:72:34:72:34 | b | | -| test.rs:72:34:72:34 | b | test.rs:72:34:72:40 | Param | match | -| test.rs:72:34:72:40 | Param | test.rs:74:13:74:14 | ExprStmt | | +| test.rs:65:21:65:35 | continue 'outer | test.rs:60:13:60:14 | ExprStmt | continue | +| test.rs:65:21:65:36 | ExprStmt | test.rs:65:21:65:35 | continue 'outer | | +| test.rs:67:17:67:31 | continue 'inner | test.rs:62:17:66:17 | ExprStmt | continue | +| test.rs:67:17:67:32 | ExprStmt | test.rs:67:17:67:31 | continue 'inner | | +| test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | test.rs:72:34:72:34 | b | | +| test.rs:72:34:72:34 | b | test.rs:72:34:72:40 | b: bool | match | +| test.rs:72:34:72:40 | b: bool | test.rs:74:13:74:14 | ExprStmt | | | test.rs:74:13:74:13 | 1 | test.rs:76:17:80:17 | ExprStmt | | | test.rs:74:13:74:14 | ExprStmt | test.rs:74:13:74:13 | 1 | | | test.rs:76:17:80:17 | ExprStmt | test.rs:76:20:76:20 | b | | -| test.rs:76:17:80:17 | IfExpr | test.rs:81:17:81:32 | ExprStmt | | +| test.rs:76:17:80:17 | if ... { ... } else { ... } | test.rs:81:17:81:32 | ExprStmt | | | test.rs:76:20:76:20 | b | test.rs:77:21:77:29 | ExprStmt | true | | test.rs:76:20:76:20 | b | test.rs:78:27:78:27 | b | false | -| test.rs:77:21:77:28 | ContinueExpr | test.rs:76:17:80:17 | ExprStmt | continue | -| test.rs:77:21:77:29 | ExprStmt | test.rs:77:21:77:28 | ContinueExpr | | -| test.rs:78:24:80:17 | IfExpr | test.rs:76:17:80:17 | IfExpr | | -| test.rs:78:27:78:27 | b | test.rs:78:24:80:17 | IfExpr | false | +| test.rs:77:21:77:28 | continue | test.rs:76:17:80:17 | ExprStmt | continue | +| test.rs:77:21:77:29 | ExprStmt | test.rs:77:21:77:28 | continue | | +| test.rs:78:24:80:17 | if ... { ... } | test.rs:76:17:80:17 | if ... { ... } else { ... } | | +| test.rs:78:27:78:27 | b | test.rs:78:24:80:17 | if ... { ... } | false | | test.rs:78:27:78:27 | b | test.rs:79:21:79:36 | ExprStmt | true | -| test.rs:79:21:79:35 | ContinueExpr | test.rs:76:17:80:17 | ExprStmt | continue | -| test.rs:79:21:79:36 | ExprStmt | test.rs:79:21:79:35 | ContinueExpr | | -| test.rs:81:17:81:31 | ContinueExpr | test.rs:76:17:80:17 | ExprStmt | continue | -| test.rs:81:17:81:32 | ExprStmt | test.rs:81:17:81:31 | ContinueExpr | | -| test.rs:86:5:95:5 | enter test_while | test.rs:86:19:86:19 | i | | -| test.rs:86:5:95:5 | exit test_while (normal) | test.rs:86:5:95:5 | exit test_while | | -| test.rs:86:19:86:19 | i | test.rs:86:19:86:24 | Param | match | -| test.rs:86:19:86:24 | Param | test.rs:87:9:87:25 | LetStmt | | -| test.rs:86:27:95:5 | BlockExpr | test.rs:86:5:95:5 | exit test_while (normal) | | -| test.rs:87:9:87:25 | LetStmt | test.rs:87:21:87:24 | true | | +| test.rs:79:21:79:35 | continue 'label | test.rs:76:17:80:17 | ExprStmt | continue | +| test.rs:79:21:79:36 | ExprStmt | test.rs:79:21:79:35 | continue 'label | | +| test.rs:81:17:81:31 | continue 'label | test.rs:76:17:80:17 | ExprStmt | continue | +| test.rs:81:17:81:32 | ExprStmt | test.rs:81:17:81:31 | continue 'label | | +| test.rs:86:5:95:5 | enter fn test_while | test.rs:86:19:86:19 | i | | +| test.rs:86:5:95:5 | exit fn test_while (normal) | test.rs:86:5:95:5 | exit fn test_while | | +| test.rs:86:19:86:19 | i | test.rs:86:19:86:24 | i: i64 | match | +| test.rs:86:19:86:24 | i: i64 | test.rs:87:9:87:25 | let b = ... | | +| test.rs:86:27:95:5 | { ... } | test.rs:86:5:95:5 | exit fn test_while (normal) | | +| test.rs:87:9:87:25 | let b = ... | test.rs:87:21:87:24 | true | | | test.rs:87:13:87:17 | b | test.rs:88:15:88:15 | b | match | | test.rs:87:21:87:24 | true | test.rs:87:13:87:17 | b | | -| test.rs:88:9:94:9 | WhileExpr | test.rs:86:27:95:5 | BlockExpr | | -| test.rs:88:15:88:15 | b | test.rs:88:9:94:9 | WhileExpr | false | +| test.rs:88:9:94:9 | while ... { ... } | test.rs:86:27:95:5 | { ... } | | +| test.rs:88:15:88:15 | b | test.rs:88:9:94:9 | while ... { ... } | false | | test.rs:88:15:88:15 | b | test.rs:89:13:89:14 | ExprStmt | true | -| test.rs:88:17:94:9 | BlockExpr | test.rs:88:15:88:15 | b | | +| test.rs:88:17:94:9 | { ... } | test.rs:88:15:88:15 | b | | | test.rs:89:13:89:13 | 1 | test.rs:90:13:92:13 | ExprStmt | | | test.rs:89:13:89:14 | ExprStmt | test.rs:89:13:89:13 | 1 | | | test.rs:90:13:92:13 | ExprStmt | test.rs:90:17:90:17 | i | | -| test.rs:90:13:92:13 | IfExpr | test.rs:93:13:93:22 | ExprStmt | | +| test.rs:90:13:92:13 | if ... { ... } | test.rs:93:13:93:22 | ExprStmt | | | test.rs:90:17:90:17 | i | test.rs:90:21:90:21 | 0 | | -| test.rs:90:17:90:21 | ... > ... | test.rs:90:13:92:13 | IfExpr | false | +| test.rs:90:17:90:21 | ... > ... | test.rs:90:13:92:13 | if ... { ... } | false | | test.rs:90:17:90:21 | ... > ... | test.rs:91:17:91:22 | ExprStmt | true | | test.rs:90:21:90:21 | 0 | test.rs:90:17:90:21 | ... > ... | | -| test.rs:91:17:91:21 | BreakExpr | test.rs:88:9:94:9 | WhileExpr | break | -| test.rs:91:17:91:22 | ExprStmt | test.rs:91:17:91:21 | BreakExpr | | +| test.rs:91:17:91:21 | break | test.rs:88:9:94:9 | while ... { ... } | break | +| test.rs:91:17:91:22 | ExprStmt | test.rs:91:17:91:21 | break | | | test.rs:93:13:93:13 | b | test.rs:93:17:93:21 | false | | -| test.rs:93:13:93:21 | ... = ... | test.rs:88:17:94:9 | BlockExpr | | +| test.rs:93:13:93:21 | ... = ... | test.rs:88:17:94:9 | { ... } | | | test.rs:93:13:93:22 | ExprStmt | test.rs:93:13:93:13 | b | | | test.rs:93:17:93:21 | false | test.rs:93:13:93:21 | ... = ... | | -| test.rs:97:5:104:5 | enter test_while_let | test.rs:98:9:98:29 | LetStmt | | -| test.rs:97:5:104:5 | exit test_while_let (normal) | test.rs:97:5:104:5 | exit test_while_let | | -| test.rs:97:25:104:5 | BlockExpr | test.rs:97:5:104:5 | exit test_while_let (normal) | | -| test.rs:98:9:98:29 | LetStmt | test.rs:98:24:98:24 | 1 | | -| test.rs:98:13:98:20 | iter | test.rs:99:15:99:39 | LetExpr | match | +| test.rs:97:5:104:5 | enter fn test_while_let | test.rs:98:9:98:29 | let iter = ... | | +| test.rs:97:5:104:5 | exit fn test_while_let (normal) | test.rs:97:5:104:5 | exit fn test_while_let | | +| test.rs:97:25:104:5 | { ... } | test.rs:97:5:104:5 | exit fn test_while_let (normal) | | +| test.rs:98:9:98:29 | let iter = ... | test.rs:98:24:98:24 | 1 | | +| test.rs:98:13:98:20 | iter | test.rs:99:15:99:39 | let TupleStructPat = ... | match | | test.rs:98:24:98:24 | 1 | test.rs:98:27:98:28 | 10 | | -| test.rs:98:24:98:28 | RangeExpr | test.rs:98:13:98:20 | iter | | -| test.rs:98:27:98:28 | 10 | test.rs:98:24:98:28 | RangeExpr | | -| test.rs:99:9:103:9 | WhileExpr | test.rs:97:25:104:5 | BlockExpr | | -| test.rs:99:15:99:39 | LetExpr | test.rs:99:29:99:32 | iter | | -| test.rs:99:19:99:25 | TupleStructPat | test.rs:99:9:103:9 | WhileExpr | no-match | +| test.rs:98:24:98:28 | ... .. ... | test.rs:98:13:98:20 | iter | | +| test.rs:98:27:98:28 | 10 | test.rs:98:24:98:28 | ... .. ... | | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:97:25:104:5 | { ... } | | +| test.rs:99:15:99:39 | let TupleStructPat = ... | test.rs:99:29:99:32 | iter | | +| test.rs:99:19:99:25 | TupleStructPat | test.rs:99:9:103:9 | while ... { ... } | no-match | | test.rs:99:19:99:25 | TupleStructPat | test.rs:99:24:99:24 | x | match | | test.rs:99:24:99:24 | x | test.rs:100:17:100:17 | x | match | | test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | ... .next(...) | | | test.rs:99:29:99:39 | ... .next(...) | test.rs:99:19:99:25 | TupleStructPat | | -| test.rs:99:41:103:9 | BlockExpr | test.rs:99:15:99:39 | LetExpr | | -| test.rs:100:13:102:13 | IfExpr | test.rs:99:41:103:9 | BlockExpr | | +| test.rs:99:41:103:9 | { ... } | test.rs:99:15:99:39 | let TupleStructPat = ... | | +| test.rs:100:13:102:13 | if ... { ... } | test.rs:99:41:103:9 | { ... } | | | test.rs:100:17:100:17 | x | test.rs:100:22:100:22 | 5 | | -| test.rs:100:17:100:22 | ... == ... | test.rs:100:13:102:13 | IfExpr | false | +| test.rs:100:17:100:22 | ... == ... | test.rs:100:13:102:13 | if ... { ... } | false | | test.rs:100:17:100:22 | ... == ... | test.rs:101:17:101:22 | ExprStmt | true | | test.rs:100:22:100:22 | 5 | test.rs:100:17:100:22 | ... == ... | | -| test.rs:101:17:101:21 | BreakExpr | test.rs:99:9:103:9 | WhileExpr | break | -| test.rs:101:17:101:22 | ExprStmt | test.rs:101:17:101:21 | BreakExpr | | -| test.rs:106:5:113:5 | enter test_for | test.rs:106:17:106:17 | j | | -| test.rs:106:5:113:5 | exit test_for (normal) | test.rs:106:5:113:5 | exit test_for | | -| test.rs:106:17:106:17 | j | test.rs:106:17:106:22 | Param | match | -| test.rs:106:17:106:22 | Param | test.rs:107:18:107:18 | 0 | | -| test.rs:106:25:113:5 | BlockExpr | test.rs:106:5:113:5 | exit test_for (normal) | | -| test.rs:107:9:112:9 | ForExpr | test.rs:106:25:113:5 | BlockExpr | | -| test.rs:107:13:107:13 | i | test.rs:107:9:112:9 | ForExpr | no-match | +| test.rs:101:17:101:21 | break | test.rs:99:9:103:9 | while ... { ... } | break | +| test.rs:101:17:101:22 | ExprStmt | test.rs:101:17:101:21 | break | | +| test.rs:106:5:113:5 | enter fn test_for | test.rs:106:17:106:17 | j | | +| test.rs:106:5:113:5 | exit fn test_for (normal) | test.rs:106:5:113:5 | exit fn test_for | | +| test.rs:106:17:106:17 | j | test.rs:106:17:106:22 | j: i64 | match | +| test.rs:106:17:106:22 | j: i64 | test.rs:107:18:107:18 | 0 | | +| test.rs:106:25:113:5 | { ... } | test.rs:106:5:113:5 | exit fn test_for (normal) | | +| test.rs:107:9:112:9 | for i in ... { ... } | test.rs:106:25:113:5 | { ... } | | +| test.rs:107:13:107:13 | i | test.rs:107:9:112:9 | for i in ... { ... } | no-match | | test.rs:107:13:107:13 | i | test.rs:108:13:110:13 | ExprStmt | match | | test.rs:107:18:107:18 | 0 | test.rs:107:21:107:22 | 10 | | -| test.rs:107:18:107:22 | RangeExpr | test.rs:107:13:107:13 | i | | -| test.rs:107:21:107:22 | 10 | test.rs:107:18:107:22 | RangeExpr | | -| test.rs:107:24:112:9 | BlockExpr | test.rs:107:13:107:13 | i | | +| test.rs:107:18:107:22 | ... .. ... | test.rs:107:13:107:13 | i | | +| test.rs:107:21:107:22 | 10 | test.rs:107:18:107:22 | ... .. ... | | +| test.rs:107:24:112:9 | { ... } | test.rs:107:13:107:13 | i | | | test.rs:108:13:110:13 | ExprStmt | test.rs:108:17:108:17 | i | | -| test.rs:108:13:110:13 | IfExpr | test.rs:111:13:111:14 | ExprStmt | | +| test.rs:108:13:110:13 | if ... { ... } | test.rs:111:13:111:14 | ExprStmt | | | test.rs:108:17:108:17 | i | test.rs:108:22:108:22 | j | | -| test.rs:108:17:108:22 | ... == ... | test.rs:108:13:110:13 | IfExpr | false | +| test.rs:108:17:108:22 | ... == ... | test.rs:108:13:110:13 | if ... { ... } | false | | test.rs:108:17:108:22 | ... == ... | test.rs:109:17:109:22 | ExprStmt | true | | test.rs:108:22:108:22 | j | test.rs:108:17:108:22 | ... == ... | | -| test.rs:109:17:109:21 | BreakExpr | test.rs:107:9:112:9 | ForExpr | break | -| test.rs:109:17:109:22 | ExprStmt | test.rs:109:17:109:21 | BreakExpr | | -| test.rs:111:13:111:13 | 1 | test.rs:107:24:112:9 | BlockExpr | | +| test.rs:109:17:109:21 | break | test.rs:107:9:112:9 | for i in ... { ... } | break | +| test.rs:109:17:109:22 | ExprStmt | test.rs:109:17:109:21 | break | | +| test.rs:111:13:111:13 | 1 | test.rs:107:24:112:9 | { ... } | | | test.rs:111:13:111:14 | ExprStmt | test.rs:111:13:111:13 | 1 | | -| test.rs:115:5:119:5 | enter break_with_return | test.rs:117:13:117:27 | ExprStmt | | -| test.rs:115:5:119:5 | exit break_with_return (normal) | test.rs:115:5:119:5 | exit break_with_return | | +| test.rs:115:5:119:5 | enter fn break_with_return | test.rs:117:13:117:27 | ExprStmt | | +| test.rs:115:5:119:5 | exit fn break_with_return (normal) | test.rs:115:5:119:5 | exit fn break_with_return | | | test.rs:117:13:117:27 | ExprStmt | test.rs:117:26:117:26 | 1 | | -| test.rs:117:19:117:26 | ReturnExpr | test.rs:115:5:119:5 | exit break_with_return (normal) | return | -| test.rs:117:26:117:26 | 1 | test.rs:117:19:117:26 | ReturnExpr | | -| test.rs:122:1:125:1 | enter test_nested_function | test.rs:122:25:122:25 | n | | -| test.rs:122:1:125:1 | exit test_nested_function (normal) | test.rs:122:1:125:1 | exit test_nested_function | | -| test.rs:122:25:122:25 | n | test.rs:122:25:122:30 | Param | match | -| test.rs:122:25:122:30 | Param | test.rs:123:5:123:28 | LetStmt | | -| test.rs:122:40:125:1 | BlockExpr | test.rs:122:1:125:1 | exit test_nested_function (normal) | | -| test.rs:123:5:123:28 | LetStmt | test.rs:123:19:123:27 | ClosureExpr | | +| test.rs:117:19:117:26 | return ... | test.rs:115:5:119:5 | exit fn break_with_return (normal) | return | +| test.rs:117:26:117:26 | 1 | test.rs:117:19:117:26 | return ... | | +| test.rs:122:1:125:1 | enter fn test_nested_function | test.rs:122:25:122:25 | n | | +| test.rs:122:1:125:1 | exit fn test_nested_function (normal) | test.rs:122:1:125:1 | exit fn test_nested_function | | +| test.rs:122:25:122:25 | n | test.rs:122:25:122:30 | n: i64 | match | +| test.rs:122:25:122:30 | n: i64 | test.rs:123:5:123:28 | let add_one = ... | | +| test.rs:122:40:125:1 | { ... } | test.rs:122:1:125:1 | exit fn test_nested_function (normal) | | +| test.rs:123:5:123:28 | let add_one = ... | test.rs:123:19:123:27 | \|...\| ... | | | test.rs:123:9:123:15 | add_one | test.rs:124:5:124:11 | add_one | match | -| test.rs:123:19:123:27 | ClosureExpr | test.rs:123:9:123:15 | add_one | | -| test.rs:123:19:123:27 | enter ClosureExpr | test.rs:123:20:123:20 | i | | -| test.rs:123:19:123:27 | exit ClosureExpr (normal) | test.rs:123:19:123:27 | exit ClosureExpr | | -| test.rs:123:20:123:20 | Param | test.rs:123:23:123:23 | i | | -| test.rs:123:20:123:20 | i | test.rs:123:20:123:20 | Param | match | +| test.rs:123:19:123:27 | \|...\| ... | test.rs:123:9:123:15 | add_one | | +| test.rs:123:19:123:27 | enter \|...\| ... | test.rs:123:20:123:20 | i | | +| test.rs:123:19:123:27 | exit \|...\| ... (normal) | test.rs:123:19:123:27 | exit \|...\| ... | | +| test.rs:123:20:123:20 | i | test.rs:123:20:123:20 | i | match | +| test.rs:123:20:123:20 | i | test.rs:123:23:123:23 | i | | | test.rs:123:23:123:23 | i | test.rs:123:27:123:27 | 1 | | -| test.rs:123:23:123:27 | ... + ... | test.rs:123:19:123:27 | exit ClosureExpr (normal) | | +| test.rs:123:23:123:27 | ... + ... | test.rs:123:19:123:27 | exit \|...\| ... (normal) | | | test.rs:123:27:123:27 | 1 | test.rs:123:23:123:27 | ... + ... | | | test.rs:124:5:124:11 | add_one | test.rs:124:13:124:19 | add_one | | -| test.rs:124:5:124:23 | CallExpr | test.rs:122:40:125:1 | BlockExpr | | +| test.rs:124:5:124:23 | add_one(...) | test.rs:122:40:125:1 | { ... } | | | test.rs:124:13:124:19 | add_one | test.rs:124:21:124:21 | n | | -| test.rs:124:13:124:22 | CallExpr | test.rs:124:5:124:23 | CallExpr | | -| test.rs:124:21:124:21 | n | test.rs:124:13:124:22 | CallExpr | | -| test.rs:129:5:135:5 | enter test_if_else | test.rs:129:21:129:21 | n | | -| test.rs:129:5:135:5 | exit test_if_else (normal) | test.rs:129:5:135:5 | exit test_if_else | | -| test.rs:129:21:129:21 | n | test.rs:129:21:129:26 | Param | match | -| test.rs:129:21:129:26 | Param | test.rs:130:12:130:12 | n | | -| test.rs:129:36:135:5 | BlockExpr | test.rs:129:5:135:5 | exit test_if_else (normal) | | -| test.rs:130:9:134:9 | IfExpr | test.rs:129:36:135:5 | BlockExpr | | +| test.rs:124:13:124:22 | add_one(...) | test.rs:124:5:124:23 | add_one(...) | | +| test.rs:124:21:124:21 | n | test.rs:124:13:124:22 | add_one(...) | | +| test.rs:129:5:135:5 | enter fn test_if_else | test.rs:129:21:129:21 | n | | +| test.rs:129:5:135:5 | exit fn test_if_else (normal) | test.rs:129:5:135:5 | exit fn test_if_else | | +| test.rs:129:21:129:21 | n | test.rs:129:21:129:26 | n: i64 | match | +| test.rs:129:21:129:26 | n: i64 | test.rs:130:12:130:12 | n | | +| test.rs:129:36:135:5 | { ... } | test.rs:129:5:135:5 | exit fn test_if_else (normal) | | +| test.rs:130:9:134:9 | if ... { ... } else { ... } | test.rs:129:36:135:5 | { ... } | | | test.rs:130:12:130:12 | n | test.rs:130:17:130:17 | 0 | | | test.rs:130:12:130:17 | ... <= ... | test.rs:131:13:131:13 | 0 | true | | test.rs:130:12:130:17 | ... <= ... | test.rs:133:13:133:13 | n | false | | test.rs:130:17:130:17 | 0 | test.rs:130:12:130:17 | ... <= ... | | -| test.rs:130:19:132:9 | BlockExpr | test.rs:130:9:134:9 | IfExpr | | -| test.rs:131:13:131:13 | 0 | test.rs:130:19:132:9 | BlockExpr | | -| test.rs:132:16:134:9 | BlockExpr | test.rs:130:9:134:9 | IfExpr | | +| test.rs:130:19:132:9 | { ... } | test.rs:130:9:134:9 | if ... { ... } else { ... } | | +| test.rs:131:13:131:13 | 0 | test.rs:130:19:132:9 | { ... } | | +| test.rs:132:16:134:9 | { ... } | test.rs:130:9:134:9 | if ... { ... } else { ... } | | | test.rs:133:13:133:13 | n | test.rs:133:17:133:17 | 1 | | -| test.rs:133:13:133:17 | ... - ... | test.rs:132:16:134:9 | BlockExpr | | +| test.rs:133:13:133:17 | ... - ... | test.rs:132:16:134:9 | { ... } | | | test.rs:133:17:133:17 | 1 | test.rs:133:13:133:17 | ... - ... | | -| test.rs:137:5:143:5 | enter test_if_let_else | test.rs:137:25:137:25 | a | | -| test.rs:137:5:143:5 | exit test_if_let_else (normal) | test.rs:137:5:143:5 | exit test_if_let_else | | -| test.rs:137:25:137:25 | a | test.rs:137:25:137:38 | Param | match | -| test.rs:137:25:137:38 | Param | test.rs:138:12:138:26 | LetExpr | | -| test.rs:137:48:143:5 | BlockExpr | test.rs:137:5:143:5 | exit test_if_let_else (normal) | | -| test.rs:138:9:142:9 | IfExpr | test.rs:137:48:143:5 | BlockExpr | | -| test.rs:138:12:138:26 | LetExpr | test.rs:138:26:138:26 | a | | +| test.rs:137:5:143:5 | enter fn test_if_let_else | test.rs:137:25:137:25 | a | | +| test.rs:137:5:143:5 | exit fn test_if_let_else (normal) | test.rs:137:5:143:5 | exit fn test_if_let_else | | +| test.rs:137:25:137:25 | a | test.rs:137:25:137:38 | a: Option::<...> | match | +| test.rs:137:25:137:38 | a: Option::<...> | test.rs:138:12:138:26 | let TupleStructPat = ... | | +| test.rs:137:48:143:5 | { ... } | test.rs:137:5:143:5 | exit fn test_if_let_else (normal) | | +| test.rs:138:9:142:9 | if ... { ... } else { ... } | test.rs:137:48:143:5 | { ... } | | +| test.rs:138:12:138:26 | let TupleStructPat = ... | test.rs:138:26:138:26 | a | | | test.rs:138:16:138:22 | TupleStructPat | test.rs:138:21:138:21 | n | match | | test.rs:138:16:138:22 | TupleStructPat | test.rs:141:13:141:13 | 0 | no-match | | test.rs:138:21:138:21 | n | test.rs:139:13:139:13 | n | match | | test.rs:138:26:138:26 | a | test.rs:138:16:138:22 | TupleStructPat | | -| test.rs:138:28:140:9 | BlockExpr | test.rs:138:9:142:9 | IfExpr | | -| test.rs:139:13:139:13 | n | test.rs:138:28:140:9 | BlockExpr | | -| test.rs:140:16:142:9 | BlockExpr | test.rs:138:9:142:9 | IfExpr | | -| test.rs:141:13:141:13 | 0 | test.rs:140:16:142:9 | BlockExpr | | -| test.rs:145:5:150:5 | enter test_if_let | test.rs:145:20:145:20 | a | | -| test.rs:145:5:150:5 | exit test_if_let (normal) | test.rs:145:5:150:5 | exit test_if_let | | -| test.rs:145:20:145:20 | a | test.rs:145:20:145:33 | Param | match | -| test.rs:145:20:145:33 | Param | test.rs:146:9:148:9 | ExprStmt | | -| test.rs:145:43:150:5 | BlockExpr | test.rs:145:5:150:5 | exit test_if_let (normal) | | -| test.rs:146:9:148:9 | ExprStmt | test.rs:146:12:146:26 | LetExpr | | -| test.rs:146:9:148:9 | IfExpr | test.rs:149:9:149:9 | 0 | | -| test.rs:146:12:146:26 | LetExpr | test.rs:146:26:146:26 | a | | -| test.rs:146:16:146:22 | TupleStructPat | test.rs:146:9:148:9 | IfExpr | no-match | +| test.rs:138:28:140:9 | { ... } | test.rs:138:9:142:9 | if ... { ... } else { ... } | | +| test.rs:139:13:139:13 | n | test.rs:138:28:140:9 | { ... } | | +| test.rs:140:16:142:9 | { ... } | test.rs:138:9:142:9 | if ... { ... } else { ... } | | +| test.rs:141:13:141:13 | 0 | test.rs:140:16:142:9 | { ... } | | +| test.rs:145:5:150:5 | enter fn test_if_let | test.rs:145:20:145:20 | a | | +| test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:145:5:150:5 | exit fn test_if_let | | +| test.rs:145:20:145:20 | a | test.rs:145:20:145:33 | a: Option::<...> | match | +| test.rs:145:20:145:33 | a: Option::<...> | test.rs:146:9:148:9 | ExprStmt | | +| test.rs:145:43:150:5 | { ... } | test.rs:145:5:150:5 | exit fn test_if_let (normal) | | +| test.rs:146:9:148:9 | ExprStmt | test.rs:146:12:146:26 | let TupleStructPat = ... | | +| test.rs:146:9:148:9 | if ... { ... } | test.rs:149:9:149:9 | 0 | | +| test.rs:146:12:146:26 | let TupleStructPat = ... | test.rs:146:26:146:26 | a | | +| test.rs:146:16:146:22 | TupleStructPat | test.rs:146:9:148:9 | if ... { ... } | no-match | | test.rs:146:16:146:22 | TupleStructPat | test.rs:146:21:146:21 | n | match | | test.rs:146:21:146:21 | n | test.rs:147:13:147:21 | ExprStmt | match | | test.rs:146:26:146:26 | a | test.rs:146:16:146:22 | TupleStructPat | | -| test.rs:147:13:147:20 | ReturnExpr | test.rs:145:5:150:5 | exit test_if_let (normal) | return | +| test.rs:147:13:147:20 | return ... | test.rs:145:5:150:5 | exit fn test_if_let (normal) | return | | test.rs:147:13:147:21 | ExprStmt | test.rs:147:20:147:20 | n | | -| test.rs:147:20:147:20 | n | test.rs:147:13:147:20 | ReturnExpr | | -| test.rs:149:9:149:9 | 0 | test.rs:145:43:150:5 | BlockExpr | | -| test.rs:152:5:158:5 | enter test_nested_if | test.rs:152:23:152:23 | a | | -| test.rs:152:5:158:5 | exit test_nested_if (normal) | test.rs:152:5:158:5 | exit test_nested_if | | -| test.rs:152:23:152:23 | a | test.rs:152:23:152:28 | Param | match | -| test.rs:152:23:152:28 | Param | test.rs:153:16:153:16 | a | | -| test.rs:152:38:158:5 | BlockExpr | test.rs:152:5:158:5 | exit test_nested_if (normal) | | -| test.rs:153:9:157:9 | IfExpr | test.rs:152:38:158:5 | BlockExpr | | -| test.rs:153:13:153:48 | [boolean(false)] IfExpr | test.rs:156:13:156:13 | 0 | false | -| test.rs:153:13:153:48 | [boolean(true)] IfExpr | test.rs:154:13:154:13 | 1 | true | +| test.rs:147:20:147:20 | n | test.rs:147:13:147:20 | return ... | | +| test.rs:149:9:149:9 | 0 | test.rs:145:43:150:5 | { ... } | | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:152:23:152:23 | a | | +| test.rs:152:5:158:5 | exit fn test_nested_if (normal) | test.rs:152:5:158:5 | exit fn test_nested_if | | +| test.rs:152:23:152:23 | a | test.rs:152:23:152:28 | a: i64 | match | +| test.rs:152:23:152:28 | a: i64 | test.rs:153:16:153:16 | a | | +| test.rs:152:38:158:5 | { ... } | test.rs:152:5:158:5 | exit fn test_nested_if (normal) | | +| test.rs:153:9:157:9 | if ... { ... } else { ... } | test.rs:152:38:158:5 | { ... } | | +| test.rs:153:13:153:48 | [boolean(false)] if ... { ... } else { ... } | test.rs:156:13:156:13 | 0 | false | +| test.rs:153:13:153:48 | [boolean(true)] if ... { ... } else { ... } | test.rs:154:13:154:13 | 1 | true | | test.rs:153:16:153:16 | a | test.rs:153:20:153:20 | 0 | | | test.rs:153:16:153:20 | ... < ... | test.rs:153:24:153:24 | a | true | | test.rs:153:16:153:20 | ... < ... | test.rs:153:41:153:41 | a | false | | test.rs:153:20:153:20 | 0 | test.rs:153:16:153:20 | ... < ... | | -| test.rs:153:22:153:32 | [boolean(false)] BlockExpr | test.rs:153:13:153:48 | [boolean(false)] IfExpr | false | -| test.rs:153:22:153:32 | [boolean(true)] BlockExpr | test.rs:153:13:153:48 | [boolean(true)] IfExpr | true | +| test.rs:153:22:153:32 | [boolean(false)] { ... } | test.rs:153:13:153:48 | [boolean(false)] if ... { ... } else { ... } | false | +| test.rs:153:22:153:32 | [boolean(true)] { ... } | test.rs:153:13:153:48 | [boolean(true)] if ... { ... } else { ... } | true | | test.rs:153:24:153:24 | a | test.rs:153:29:153:30 | 10 | | -| test.rs:153:24:153:30 | ... < ... | test.rs:153:22:153:32 | [boolean(false)] BlockExpr | false | -| test.rs:153:24:153:30 | ... < ... | test.rs:153:22:153:32 | [boolean(true)] BlockExpr | true | +| test.rs:153:24:153:30 | ... < ... | test.rs:153:22:153:32 | [boolean(false)] { ... } | false | +| test.rs:153:24:153:30 | ... < ... | test.rs:153:22:153:32 | [boolean(true)] { ... } | true | | test.rs:153:28:153:30 | - ... | test.rs:153:24:153:30 | ... < ... | | | test.rs:153:29:153:30 | 10 | test.rs:153:28:153:30 | - ... | | -| test.rs:153:39:153:48 | [boolean(false)] BlockExpr | test.rs:153:13:153:48 | [boolean(false)] IfExpr | false | -| test.rs:153:39:153:48 | [boolean(true)] BlockExpr | test.rs:153:13:153:48 | [boolean(true)] IfExpr | true | +| test.rs:153:39:153:48 | [boolean(false)] { ... } | test.rs:153:13:153:48 | [boolean(false)] if ... { ... } else { ... } | false | +| test.rs:153:39:153:48 | [boolean(true)] { ... } | test.rs:153:13:153:48 | [boolean(true)] if ... { ... } else { ... } | true | | test.rs:153:41:153:41 | a | test.rs:153:45:153:46 | 10 | | -| test.rs:153:41:153:46 | ... > ... | test.rs:153:39:153:48 | [boolean(false)] BlockExpr | false | -| test.rs:153:41:153:46 | ... > ... | test.rs:153:39:153:48 | [boolean(true)] BlockExpr | true | +| test.rs:153:41:153:46 | ... > ... | test.rs:153:39:153:48 | [boolean(false)] { ... } | false | +| test.rs:153:41:153:46 | ... > ... | test.rs:153:39:153:48 | [boolean(true)] { ... } | true | | test.rs:153:45:153:46 | 10 | test.rs:153:41:153:46 | ... > ... | | -| test.rs:153:51:155:9 | BlockExpr | test.rs:153:9:157:9 | IfExpr | | -| test.rs:154:13:154:13 | 1 | test.rs:153:51:155:9 | BlockExpr | | -| test.rs:155:16:157:9 | BlockExpr | test.rs:153:9:157:9 | IfExpr | | -| test.rs:156:13:156:13 | 0 | test.rs:155:16:157:9 | BlockExpr | | -| test.rs:160:5:169:5 | enter test_nested_if_match | test.rs:160:29:160:29 | a | | -| test.rs:160:5:169:5 | exit test_nested_if_match (normal) | test.rs:160:5:169:5 | exit test_nested_if_match | | -| test.rs:160:29:160:29 | a | test.rs:160:29:160:34 | Param | match | -| test.rs:160:29:160:34 | Param | test.rs:161:19:161:19 | a | | -| test.rs:160:44:169:5 | BlockExpr | test.rs:160:5:169:5 | exit test_nested_if_match (normal) | | -| test.rs:161:9:168:9 | IfExpr | test.rs:160:44:169:5 | BlockExpr | | -| test.rs:161:13:164:9 | [boolean(false)] MatchExpr | test.rs:167:13:167:13 | 0 | false | -| test.rs:161:13:164:9 | [boolean(true)] MatchExpr | test.rs:165:13:165:13 | 1 | true | +| test.rs:153:51:155:9 | { ... } | test.rs:153:9:157:9 | if ... { ... } else { ... } | | +| test.rs:154:13:154:13 | 1 | test.rs:153:51:155:9 | { ... } | | +| test.rs:155:16:157:9 | { ... } | test.rs:153:9:157:9 | if ... { ... } else { ... } | | +| test.rs:156:13:156:13 | 0 | test.rs:155:16:157:9 | { ... } | | +| test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:160:29:160:29 | a | | +| test.rs:160:5:169:5 | exit fn test_nested_if_match (normal) | test.rs:160:5:169:5 | exit fn test_nested_if_match | | +| test.rs:160:29:160:29 | a | test.rs:160:29:160:34 | a: i64 | match | +| test.rs:160:29:160:34 | a: i64 | test.rs:161:19:161:19 | a | | +| test.rs:160:44:169:5 | { ... } | test.rs:160:5:169:5 | exit fn test_nested_if_match (normal) | | +| test.rs:161:9:168:9 | if ... { ... } else { ... } | test.rs:160:44:169:5 | { ... } | | +| test.rs:161:13:164:9 | [boolean(false)] match ... { ... } | test.rs:167:13:167:13 | 0 | false | +| test.rs:161:13:164:9 | [boolean(true)] match ... { ... } | test.rs:165:13:165:13 | 1 | true | | test.rs:161:19:161:19 | a | test.rs:162:13:162:13 | 0 | | -| test.rs:162:13:162:13 | 0 | test.rs:162:13:162:13 | LiteralPat | | -| test.rs:162:13:162:13 | LiteralPat | test.rs:162:18:162:21 | true | match | -| test.rs:162:13:162:13 | LiteralPat | test.rs:163:13:163:13 | WildcardPat | no-match | -| test.rs:162:18:162:21 | true | test.rs:161:13:164:9 | [boolean(true)] MatchExpr | true | -| test.rs:163:13:163:13 | WildcardPat | test.rs:163:18:163:22 | false | match | -| test.rs:163:18:163:22 | false | test.rs:161:13:164:9 | [boolean(false)] MatchExpr | false | -| test.rs:164:12:166:9 | BlockExpr | test.rs:161:9:168:9 | IfExpr | | -| test.rs:165:13:165:13 | 1 | test.rs:164:12:166:9 | BlockExpr | | -| test.rs:166:16:168:9 | BlockExpr | test.rs:161:9:168:9 | IfExpr | | -| test.rs:167:13:167:13 | 0 | test.rs:166:16:168:9 | BlockExpr | | -| test.rs:171:5:180:5 | enter test_nested_if_block | test.rs:171:29:171:29 | a | | -| test.rs:171:5:180:5 | exit test_nested_if_block (normal) | test.rs:171:5:180:5 | exit test_nested_if_block | | -| test.rs:171:29:171:29 | a | test.rs:171:29:171:34 | Param | match | -| test.rs:171:29:171:34 | Param | test.rs:173:13:173:15 | ExprStmt | | -| test.rs:171:44:180:5 | BlockExpr | test.rs:171:5:180:5 | exit test_nested_if_block (normal) | | -| test.rs:172:9:179:9 | IfExpr | test.rs:171:44:180:5 | BlockExpr | | -| test.rs:172:12:175:9 | [boolean(false)] BlockExpr | test.rs:178:13:178:13 | 0 | false | -| test.rs:172:12:175:9 | [boolean(true)] BlockExpr | test.rs:176:13:176:13 | 1 | true | +| test.rs:162:13:162:13 | 0 | test.rs:162:13:162:13 | 0 | | +| test.rs:162:13:162:13 | 0 | test.rs:162:18:162:21 | true | match | +| test.rs:162:13:162:13 | 0 | test.rs:163:13:163:13 | _ | no-match | +| test.rs:162:18:162:21 | true | test.rs:161:13:164:9 | [boolean(true)] match ... { ... } | true | +| test.rs:163:13:163:13 | _ | test.rs:163:18:163:22 | false | match | +| test.rs:163:18:163:22 | false | test.rs:161:13:164:9 | [boolean(false)] match ... { ... } | false | +| test.rs:164:12:166:9 | { ... } | test.rs:161:9:168:9 | if ... { ... } else { ... } | | +| test.rs:165:13:165:13 | 1 | test.rs:164:12:166:9 | { ... } | | +| test.rs:166:16:168:9 | { ... } | test.rs:161:9:168:9 | if ... { ... } else { ... } | | +| test.rs:167:13:167:13 | 0 | test.rs:166:16:168:9 | { ... } | | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:171:29:171:29 | a | | +| test.rs:171:5:180:5 | exit fn test_nested_if_block (normal) | test.rs:171:5:180:5 | exit fn test_nested_if_block | | +| test.rs:171:29:171:29 | a | test.rs:171:29:171:34 | a: i64 | match | +| test.rs:171:29:171:34 | a: i64 | test.rs:173:13:173:15 | ExprStmt | | +| test.rs:171:44:180:5 | { ... } | test.rs:171:5:180:5 | exit fn test_nested_if_block (normal) | | +| test.rs:172:9:179:9 | if ... { ... } else { ... } | test.rs:171:44:180:5 | { ... } | | +| test.rs:172:12:175:9 | [boolean(false)] { ... } | test.rs:178:13:178:13 | 0 | false | +| test.rs:172:12:175:9 | [boolean(true)] { ... } | test.rs:176:13:176:13 | 1 | true | | test.rs:173:13:173:14 | TupleExpr | test.rs:174:13:174:13 | a | | | test.rs:173:13:173:15 | ExprStmt | test.rs:173:13:173:14 | TupleExpr | | | test.rs:174:13:174:13 | a | test.rs:174:17:174:17 | 0 | | -| test.rs:174:13:174:17 | ... > ... | test.rs:172:12:175:9 | [boolean(false)] BlockExpr | false | -| test.rs:174:13:174:17 | ... > ... | test.rs:172:12:175:9 | [boolean(true)] BlockExpr | true | +| test.rs:174:13:174:17 | ... > ... | test.rs:172:12:175:9 | [boolean(false)] { ... } | false | +| test.rs:174:13:174:17 | ... > ... | test.rs:172:12:175:9 | [boolean(true)] { ... } | true | | test.rs:174:17:174:17 | 0 | test.rs:174:13:174:17 | ... > ... | | -| test.rs:175:11:177:9 | BlockExpr | test.rs:172:9:179:9 | IfExpr | | -| test.rs:176:13:176:13 | 1 | test.rs:175:11:177:9 | BlockExpr | | -| test.rs:177:16:179:9 | BlockExpr | test.rs:172:9:179:9 | IfExpr | | -| test.rs:178:13:178:13 | 0 | test.rs:177:16:179:9 | BlockExpr | | -| test.rs:182:5:192:5 | enter test_if_assignment | test.rs:182:27:182:27 | a | | -| test.rs:182:5:192:5 | exit test_if_assignment (normal) | test.rs:182:5:192:5 | exit test_if_assignment | | -| test.rs:182:27:182:27 | a | test.rs:182:27:182:32 | Param | match | -| test.rs:182:27:182:32 | Param | test.rs:183:9:183:26 | LetStmt | | -| test.rs:182:42:192:5 | BlockExpr | test.rs:182:5:192:5 | exit test_if_assignment (normal) | | -| test.rs:183:9:183:26 | LetStmt | test.rs:183:21:183:25 | false | | +| test.rs:175:11:177:9 | { ... } | test.rs:172:9:179:9 | if ... { ... } else { ... } | | +| test.rs:176:13:176:13 | 1 | test.rs:175:11:177:9 | { ... } | | +| test.rs:177:16:179:9 | { ... } | test.rs:172:9:179:9 | if ... { ... } else { ... } | | +| test.rs:178:13:178:13 | 0 | test.rs:177:16:179:9 | { ... } | | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:182:27:182:27 | a | | +| test.rs:182:5:192:5 | exit fn test_if_assignment (normal) | test.rs:182:5:192:5 | exit fn test_if_assignment | | +| test.rs:182:27:182:27 | a | test.rs:182:27:182:32 | a: i64 | match | +| test.rs:182:27:182:32 | a: i64 | test.rs:183:9:183:26 | let x = ... | | +| test.rs:182:42:192:5 | { ... } | test.rs:182:5:192:5 | exit fn test_if_assignment (normal) | | +| test.rs:183:9:183:26 | let x = ... | test.rs:183:21:183:25 | false | | | test.rs:183:13:183:17 | x | test.rs:185:13:185:21 | ExprStmt | match | | test.rs:183:21:183:25 | false | test.rs:183:13:183:17 | x | | -| test.rs:184:9:191:9 | IfExpr | test.rs:182:42:192:5 | BlockExpr | | -| test.rs:184:12:187:9 | [boolean(false)] BlockExpr | test.rs:190:13:190:13 | 0 | false | -| test.rs:184:12:187:9 | [boolean(true)] BlockExpr | test.rs:188:13:188:13 | 1 | true | +| test.rs:184:9:191:9 | if ... { ... } else { ... } | test.rs:182:42:192:5 | { ... } | | +| test.rs:184:12:187:9 | [boolean(false)] { ... } | test.rs:190:13:190:13 | 0 | false | +| test.rs:184:12:187:9 | [boolean(true)] { ... } | test.rs:188:13:188:13 | 1 | true | | test.rs:185:13:185:13 | x | test.rs:185:17:185:20 | true | | | test.rs:185:13:185:20 | ... = ... | test.rs:186:13:186:13 | x | | | test.rs:185:13:185:21 | ExprStmt | test.rs:185:13:185:13 | x | | | test.rs:185:17:185:20 | true | test.rs:185:13:185:20 | ... = ... | | -| test.rs:186:13:186:13 | x | test.rs:184:12:187:9 | [boolean(false)] BlockExpr | false | -| test.rs:186:13:186:13 | x | test.rs:184:12:187:9 | [boolean(true)] BlockExpr | true | -| test.rs:187:11:189:9 | BlockExpr | test.rs:184:9:191:9 | IfExpr | | -| test.rs:188:13:188:13 | 1 | test.rs:187:11:189:9 | BlockExpr | | -| test.rs:189:16:191:9 | BlockExpr | test.rs:184:9:191:9 | IfExpr | | -| test.rs:190:13:190:13 | 0 | test.rs:189:16:191:9 | BlockExpr | | -| test.rs:194:5:205:5 | enter test_if_loop1 | test.rs:194:22:194:22 | a | | -| test.rs:194:5:205:5 | exit test_if_loop1 (normal) | test.rs:194:5:205:5 | exit test_if_loop1 | | -| test.rs:194:22:194:22 | a | test.rs:194:22:194:27 | Param | match | -| test.rs:194:22:194:27 | Param | test.rs:196:13:198:14 | ExprStmt | | -| test.rs:194:37:205:5 | BlockExpr | test.rs:194:5:205:5 | exit test_if_loop1 (normal) | | -| test.rs:195:9:204:9 | IfExpr | test.rs:194:37:205:5 | BlockExpr | | -| test.rs:195:13:200:9 | [boolean(false)] LoopExpr | test.rs:203:13:203:13 | 0 | false | -| test.rs:195:13:200:9 | [boolean(true)] LoopExpr | test.rs:201:13:201:13 | 1 | true | -| test.rs:195:18:200:9 | BlockExpr | test.rs:196:13:198:14 | ExprStmt | | -| test.rs:196:13:198:13 | IfExpr | test.rs:199:13:199:19 | ExprStmt | | +| test.rs:186:13:186:13 | x | test.rs:184:12:187:9 | [boolean(false)] { ... } | false | +| test.rs:186:13:186:13 | x | test.rs:184:12:187:9 | [boolean(true)] { ... } | true | +| test.rs:187:11:189:9 | { ... } | test.rs:184:9:191:9 | if ... { ... } else { ... } | | +| test.rs:188:13:188:13 | 1 | test.rs:187:11:189:9 | { ... } | | +| test.rs:189:16:191:9 | { ... } | test.rs:184:9:191:9 | if ... { ... } else { ... } | | +| test.rs:190:13:190:13 | 0 | test.rs:189:16:191:9 | { ... } | | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:194:22:194:22 | a | | +| test.rs:194:5:205:5 | exit fn test_if_loop1 (normal) | test.rs:194:5:205:5 | exit fn test_if_loop1 | | +| test.rs:194:22:194:22 | a | test.rs:194:22:194:27 | a: i64 | match | +| test.rs:194:22:194:27 | a: i64 | test.rs:196:13:198:14 | ExprStmt | | +| test.rs:194:37:205:5 | { ... } | test.rs:194:5:205:5 | exit fn test_if_loop1 (normal) | | +| test.rs:195:9:204:9 | if ... { ... } else { ... } | test.rs:194:37:205:5 | { ... } | | +| test.rs:195:13:200:9 | [boolean(false)] loop {...} | test.rs:203:13:203:13 | 0 | false | +| test.rs:195:13:200:9 | [boolean(true)] loop {...} | test.rs:201:13:201:13 | 1 | true | +| test.rs:195:18:200:9 | { ... } | test.rs:196:13:198:14 | ExprStmt | | +| test.rs:196:13:198:13 | if ... { ... } | test.rs:199:13:199:19 | ExprStmt | | | test.rs:196:13:198:14 | ExprStmt | test.rs:196:16:196:16 | a | | | test.rs:196:16:196:16 | a | test.rs:196:20:196:20 | 0 | | -| test.rs:196:16:196:20 | ... > ... | test.rs:196:13:198:13 | IfExpr | false | +| test.rs:196:16:196:20 | ... > ... | test.rs:196:13:198:13 | if ... { ... } | false | | test.rs:196:16:196:20 | ... > ... | test.rs:197:17:197:29 | ExprStmt | true | | test.rs:196:20:196:20 | 0 | test.rs:196:16:196:20 | ... > ... | | -| test.rs:197:17:197:28 | [boolean(false)] BreakExpr | test.rs:195:13:200:9 | [boolean(false)] LoopExpr | break | -| test.rs:197:17:197:28 | [boolean(true)] BreakExpr | test.rs:195:13:200:9 | [boolean(true)] LoopExpr | break | +| test.rs:197:17:197:28 | [boolean(false)] break ... | test.rs:195:13:200:9 | [boolean(false)] loop {...} | break | +| test.rs:197:17:197:28 | [boolean(true)] break ... | test.rs:195:13:200:9 | [boolean(true)] loop {...} | break | | test.rs:197:17:197:29 | ExprStmt | test.rs:197:23:197:23 | a | | | test.rs:197:23:197:23 | a | test.rs:197:27:197:28 | 10 | | -| test.rs:197:23:197:28 | ... > ... | test.rs:197:17:197:28 | [boolean(false)] BreakExpr | false | -| test.rs:197:23:197:28 | ... > ... | test.rs:197:17:197:28 | [boolean(true)] BreakExpr | true | +| test.rs:197:23:197:28 | ... > ... | test.rs:197:17:197:28 | [boolean(false)] break ... | false | +| test.rs:197:23:197:28 | ... > ... | test.rs:197:17:197:28 | [boolean(true)] break ... | true | | test.rs:197:27:197:28 | 10 | test.rs:197:23:197:28 | ... > ... | | | test.rs:199:13:199:13 | a | test.rs:199:17:199:18 | 10 | | -| test.rs:199:13:199:18 | ... < ... | test.rs:195:18:200:9 | BlockExpr | | +| test.rs:199:13:199:18 | ... < ... | test.rs:195:18:200:9 | { ... } | | | test.rs:199:13:199:19 | ExprStmt | test.rs:199:13:199:13 | a | | | test.rs:199:17:199:18 | 10 | test.rs:199:13:199:18 | ... < ... | | -| test.rs:200:12:202:9 | BlockExpr | test.rs:195:9:204:9 | IfExpr | | -| test.rs:201:13:201:13 | 1 | test.rs:200:12:202:9 | BlockExpr | | -| test.rs:202:16:204:9 | BlockExpr | test.rs:195:9:204:9 | IfExpr | | -| test.rs:203:13:203:13 | 0 | test.rs:202:16:204:9 | BlockExpr | | -| test.rs:207:5:218:5 | enter test_if_loop2 | test.rs:207:22:207:22 | a | | -| test.rs:207:5:218:5 | exit test_if_loop2 (normal) | test.rs:207:5:218:5 | exit test_if_loop2 | | -| test.rs:207:22:207:22 | a | test.rs:207:22:207:27 | Param | match | -| test.rs:207:22:207:27 | Param | test.rs:209:13:211:14 | ExprStmt | | -| test.rs:207:37:218:5 | BlockExpr | test.rs:207:5:218:5 | exit test_if_loop2 (normal) | | -| test.rs:208:9:217:9 | IfExpr | test.rs:207:37:218:5 | BlockExpr | | -| test.rs:208:13:213:9 | [boolean(false)] LoopExpr | test.rs:216:13:216:13 | 0 | false | -| test.rs:208:13:213:9 | [boolean(true)] LoopExpr | test.rs:214:13:214:13 | 1 | true | -| test.rs:208:26:213:9 | BlockExpr | test.rs:209:13:211:14 | ExprStmt | | -| test.rs:209:13:211:13 | IfExpr | test.rs:212:13:212:19 | ExprStmt | | +| test.rs:200:12:202:9 | { ... } | test.rs:195:9:204:9 | if ... { ... } else { ... } | | +| test.rs:201:13:201:13 | 1 | test.rs:200:12:202:9 | { ... } | | +| test.rs:202:16:204:9 | { ... } | test.rs:195:9:204:9 | if ... { ... } else { ... } | | +| test.rs:203:13:203:13 | 0 | test.rs:202:16:204:9 | { ... } | | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:207:22:207:22 | a | | +| test.rs:207:5:218:5 | exit fn test_if_loop2 (normal) | test.rs:207:5:218:5 | exit fn test_if_loop2 | | +| test.rs:207:22:207:22 | a | test.rs:207:22:207:27 | a: i64 | match | +| test.rs:207:22:207:27 | a: i64 | test.rs:209:13:211:14 | ExprStmt | | +| test.rs:207:37:218:5 | { ... } | test.rs:207:5:218:5 | exit fn test_if_loop2 (normal) | | +| test.rs:208:9:217:9 | if ... { ... } else { ... } | test.rs:207:37:218:5 | { ... } | | +| test.rs:208:13:213:9 | [boolean(false)] loop {...} | test.rs:216:13:216:13 | 0 | false | +| test.rs:208:13:213:9 | [boolean(true)] loop {...} | test.rs:214:13:214:13 | 1 | true | +| test.rs:208:26:213:9 | { ... } | test.rs:209:13:211:14 | ExprStmt | | +| test.rs:209:13:211:13 | if ... { ... } | test.rs:212:13:212:19 | ExprStmt | | | test.rs:209:13:211:14 | ExprStmt | test.rs:209:16:209:16 | a | | | test.rs:209:16:209:16 | a | test.rs:209:20:209:20 | 0 | | -| test.rs:209:16:209:20 | ... > ... | test.rs:209:13:211:13 | IfExpr | false | +| test.rs:209:16:209:20 | ... > ... | test.rs:209:13:211:13 | if ... { ... } | false | | test.rs:209:16:209:20 | ... > ... | test.rs:210:17:210:36 | ExprStmt | true | | test.rs:209:20:209:20 | 0 | test.rs:209:16:209:20 | ... > ... | | -| test.rs:210:17:210:35 | [boolean(false)] BreakExpr | test.rs:208:13:213:9 | [boolean(false)] LoopExpr | break | -| test.rs:210:17:210:35 | [boolean(true)] BreakExpr | test.rs:208:13:213:9 | [boolean(true)] LoopExpr | break | +| test.rs:210:17:210:35 | [boolean(false)] break ''label ... | test.rs:208:13:213:9 | [boolean(false)] loop {...} | break | +| test.rs:210:17:210:35 | [boolean(true)] break ''label ... | test.rs:208:13:213:9 | [boolean(true)] loop {...} | break | | test.rs:210:17:210:36 | ExprStmt | test.rs:210:30:210:30 | a | | | test.rs:210:30:210:30 | a | test.rs:210:34:210:35 | 10 | | -| test.rs:210:30:210:35 | ... > ... | test.rs:210:17:210:35 | [boolean(false)] BreakExpr | false | -| test.rs:210:30:210:35 | ... > ... | test.rs:210:17:210:35 | [boolean(true)] BreakExpr | true | +| test.rs:210:30:210:35 | ... > ... | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | false | +| test.rs:210:30:210:35 | ... > ... | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | true | | test.rs:210:34:210:35 | 10 | test.rs:210:30:210:35 | ... > ... | | | test.rs:212:13:212:13 | a | test.rs:212:17:212:18 | 10 | | -| test.rs:212:13:212:18 | ... < ... | test.rs:208:26:213:9 | BlockExpr | | +| test.rs:212:13:212:18 | ... < ... | test.rs:208:26:213:9 | { ... } | | | test.rs:212:13:212:19 | ExprStmt | test.rs:212:13:212:13 | a | | | test.rs:212:17:212:18 | 10 | test.rs:212:13:212:18 | ... < ... | | -| test.rs:213:12:215:9 | BlockExpr | test.rs:208:9:217:9 | IfExpr | | -| test.rs:214:13:214:13 | 1 | test.rs:213:12:215:9 | BlockExpr | | -| test.rs:215:16:217:9 | BlockExpr | test.rs:208:9:217:9 | IfExpr | | -| test.rs:216:13:216:13 | 0 | test.rs:215:16:217:9 | BlockExpr | | -| test.rs:220:5:228:5 | enter test_labelled_block | test.rs:220:28:220:28 | a | | -| test.rs:220:5:228:5 | exit test_labelled_block (normal) | test.rs:220:5:228:5 | exit test_labelled_block | | -| test.rs:220:28:220:28 | a | test.rs:220:28:220:33 | Param | match | -| test.rs:220:28:220:33 | Param | test.rs:222:13:222:31 | ExprStmt | | -| test.rs:220:43:228:5 | BlockExpr | test.rs:220:5:228:5 | exit test_labelled_block (normal) | | -| test.rs:221:9:227:9 | IfExpr | test.rs:220:43:228:5 | BlockExpr | | -| test.rs:221:13:223:9 | [boolean(false)] BlockExpr | test.rs:226:13:226:13 | 0 | false | -| test.rs:221:13:223:9 | [boolean(true)] BlockExpr | test.rs:224:13:224:13 | 1 | true | -| test.rs:222:13:222:30 | [boolean(false)] BreakExpr | test.rs:221:13:223:9 | [boolean(false)] BlockExpr | break | -| test.rs:222:13:222:30 | [boolean(true)] BreakExpr | test.rs:221:13:223:9 | [boolean(true)] BlockExpr | break | +| test.rs:213:12:215:9 | { ... } | test.rs:208:9:217:9 | if ... { ... } else { ... } | | +| test.rs:214:13:214:13 | 1 | test.rs:213:12:215:9 | { ... } | | +| test.rs:215:16:217:9 | { ... } | test.rs:208:9:217:9 | if ... { ... } else { ... } | | +| test.rs:216:13:216:13 | 0 | test.rs:215:16:217:9 | { ... } | | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:220:28:220:28 | a | | +| test.rs:220:5:228:5 | exit fn test_labelled_block (normal) | test.rs:220:5:228:5 | exit fn test_labelled_block | | +| test.rs:220:28:220:28 | a | test.rs:220:28:220:33 | a: i64 | match | +| test.rs:220:28:220:33 | a: i64 | test.rs:222:13:222:31 | ExprStmt | | +| test.rs:220:43:228:5 | { ... } | test.rs:220:5:228:5 | exit fn test_labelled_block (normal) | | +| test.rs:221:9:227:9 | if ... { ... } else { ... } | test.rs:220:43:228:5 | { ... } | | +| test.rs:221:13:223:9 | [boolean(false)] { ... } | test.rs:226:13:226:13 | 0 | false | +| test.rs:221:13:223:9 | [boolean(true)] { ... } | test.rs:224:13:224:13 | 1 | true | +| test.rs:222:13:222:30 | [boolean(false)] break ''block ... | test.rs:221:13:223:9 | [boolean(false)] { ... } | break | +| test.rs:222:13:222:30 | [boolean(true)] break ''block ... | test.rs:221:13:223:9 | [boolean(true)] { ... } | break | | test.rs:222:13:222:31 | ExprStmt | test.rs:222:26:222:26 | a | | | test.rs:222:26:222:26 | a | test.rs:222:30:222:30 | 0 | | -| test.rs:222:26:222:30 | ... > ... | test.rs:222:13:222:30 | [boolean(false)] BreakExpr | false | -| test.rs:222:26:222:30 | ... > ... | test.rs:222:13:222:30 | [boolean(true)] BreakExpr | true | +| test.rs:222:26:222:30 | ... > ... | test.rs:222:13:222:30 | [boolean(false)] break ''block ... | false | +| test.rs:222:26:222:30 | ... > ... | test.rs:222:13:222:30 | [boolean(true)] break ''block ... | true | | test.rs:222:30:222:30 | 0 | test.rs:222:26:222:30 | ... > ... | | -| test.rs:223:12:225:9 | BlockExpr | test.rs:221:9:227:9 | IfExpr | | -| test.rs:224:13:224:13 | 1 | test.rs:223:12:225:9 | BlockExpr | | -| test.rs:225:16:227:9 | BlockExpr | test.rs:221:9:227:9 | IfExpr | | -| test.rs:226:13:226:13 | 0 | test.rs:225:16:227:9 | BlockExpr | | -| test.rs:233:5:236:5 | enter test_and_operator | test.rs:233:30:233:30 | a | | -| test.rs:233:5:236:5 | exit test_and_operator (normal) | test.rs:233:5:236:5 | exit test_and_operator | | -| test.rs:233:30:233:30 | a | test.rs:233:30:233:36 | Param | match | -| test.rs:233:30:233:36 | Param | test.rs:233:39:233:39 | b | | -| test.rs:233:39:233:39 | b | test.rs:233:39:233:45 | Param | match | -| test.rs:233:39:233:45 | Param | test.rs:233:48:233:48 | c | | -| test.rs:233:48:233:48 | c | test.rs:233:48:233:54 | Param | match | -| test.rs:233:48:233:54 | Param | test.rs:234:9:234:28 | LetStmt | | -| test.rs:233:65:236:5 | BlockExpr | test.rs:233:5:236:5 | exit test_and_operator (normal) | | -| test.rs:234:9:234:28 | LetStmt | test.rs:234:17:234:17 | a | | +| test.rs:223:12:225:9 | { ... } | test.rs:221:9:227:9 | if ... { ... } else { ... } | | +| test.rs:224:13:224:13 | 1 | test.rs:223:12:225:9 | { ... } | | +| test.rs:225:16:227:9 | { ... } | test.rs:221:9:227:9 | if ... { ... } else { ... } | | +| test.rs:226:13:226:13 | 0 | test.rs:225:16:227:9 | { ... } | | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:233:30:233:30 | a | | +| test.rs:233:5:236:5 | exit fn test_and_operator (normal) | test.rs:233:5:236:5 | exit fn test_and_operator | | +| test.rs:233:30:233:30 | a | test.rs:233:30:233:36 | a: bool | match | +| test.rs:233:30:233:36 | a: bool | test.rs:233:39:233:39 | b | | +| test.rs:233:39:233:39 | b | test.rs:233:39:233:45 | b: bool | match | +| test.rs:233:39:233:45 | b: bool | test.rs:233:48:233:48 | c | | +| test.rs:233:48:233:48 | c | test.rs:233:48:233:54 | c: bool | match | +| test.rs:233:48:233:54 | c: bool | test.rs:234:9:234:28 | let d = ... | | +| test.rs:233:65:236:5 | { ... } | test.rs:233:5:236:5 | exit fn test_and_operator (normal) | | +| test.rs:234:9:234:28 | let d = ... | test.rs:234:17:234:17 | a | | | test.rs:234:13:234:13 | d | test.rs:235:9:235:9 | d | match | | test.rs:234:17:234:17 | a | test.rs:234:17:234:22 | [boolean(false)] ... && ... | false | | test.rs:234:17:234:17 | a | test.rs:234:22:234:22 | b | true | @@ -483,17 +483,17 @@ edges | test.rs:234:22:234:22 | b | test.rs:234:17:234:22 | [boolean(false)] ... && ... | false | | test.rs:234:22:234:22 | b | test.rs:234:17:234:22 | [boolean(true)] ... && ... | true | | test.rs:234:27:234:27 | c | test.rs:234:17:234:27 | ... && ... | | -| test.rs:235:9:235:9 | d | test.rs:233:65:236:5 | BlockExpr | | -| test.rs:238:5:241:5 | enter test_or_operator | test.rs:238:25:238:25 | a | | -| test.rs:238:5:241:5 | exit test_or_operator (normal) | test.rs:238:5:241:5 | exit test_or_operator | | -| test.rs:238:25:238:25 | a | test.rs:238:25:238:31 | Param | match | -| test.rs:238:25:238:31 | Param | test.rs:238:34:238:34 | b | | -| test.rs:238:34:238:34 | b | test.rs:238:34:238:40 | Param | match | -| test.rs:238:34:238:40 | Param | test.rs:238:43:238:43 | c | | -| test.rs:238:43:238:43 | c | test.rs:238:43:238:49 | Param | match | -| test.rs:238:43:238:49 | Param | test.rs:239:9:239:28 | LetStmt | | -| test.rs:238:60:241:5 | BlockExpr | test.rs:238:5:241:5 | exit test_or_operator (normal) | | -| test.rs:239:9:239:28 | LetStmt | test.rs:239:17:239:17 | a | | +| test.rs:235:9:235:9 | d | test.rs:233:65:236:5 | { ... } | | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:238:25:238:25 | a | | +| test.rs:238:5:241:5 | exit fn test_or_operator (normal) | test.rs:238:5:241:5 | exit fn test_or_operator | | +| test.rs:238:25:238:25 | a | test.rs:238:25:238:31 | a: bool | match | +| test.rs:238:25:238:31 | a: bool | test.rs:238:34:238:34 | b | | +| test.rs:238:34:238:34 | b | test.rs:238:34:238:40 | b: bool | match | +| test.rs:238:34:238:40 | b: bool | test.rs:238:43:238:43 | c | | +| test.rs:238:43:238:43 | c | test.rs:238:43:238:49 | c: bool | match | +| test.rs:238:43:238:49 | c: bool | test.rs:239:9:239:28 | let d = ... | | +| test.rs:238:60:241:5 | { ... } | test.rs:238:5:241:5 | exit fn test_or_operator (normal) | | +| test.rs:239:9:239:28 | let d = ... | test.rs:239:17:239:17 | a | | | test.rs:239:13:239:13 | d | test.rs:240:9:240:9 | d | match | | test.rs:239:17:239:17 | a | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | true | | test.rs:239:17:239:17 | a | test.rs:239:22:239:22 | b | false | @@ -503,17 +503,17 @@ edges | test.rs:239:22:239:22 | b | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | false | | test.rs:239:22:239:22 | b | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | true | | test.rs:239:27:239:27 | c | test.rs:239:17:239:27 | ... \|\| ... | | -| test.rs:240:9:240:9 | d | test.rs:238:60:241:5 | BlockExpr | | -| test.rs:243:5:246:5 | enter test_or_operator_2 | test.rs:243:27:243:27 | a | | -| test.rs:243:5:246:5 | exit test_or_operator_2 (normal) | test.rs:243:5:246:5 | exit test_or_operator_2 | | -| test.rs:243:27:243:27 | a | test.rs:243:27:243:33 | Param | match | -| test.rs:243:27:243:33 | Param | test.rs:243:36:243:36 | b | | -| test.rs:243:36:243:36 | b | test.rs:243:36:243:41 | Param | match | -| test.rs:243:36:243:41 | Param | test.rs:243:44:243:44 | c | | -| test.rs:243:44:243:44 | c | test.rs:243:44:243:50 | Param | match | -| test.rs:243:44:243:50 | Param | test.rs:244:9:244:36 | LetStmt | | -| test.rs:243:61:246:5 | BlockExpr | test.rs:243:5:246:5 | exit test_or_operator_2 (normal) | | -| test.rs:244:9:244:36 | LetStmt | test.rs:244:17:244:17 | a | | +| test.rs:240:9:240:9 | d | test.rs:238:60:241:5 | { ... } | | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:243:27:243:27 | a | | +| test.rs:243:5:246:5 | exit fn test_or_operator_2 (normal) | test.rs:243:5:246:5 | exit fn test_or_operator_2 | | +| test.rs:243:27:243:27 | a | test.rs:243:27:243:33 | a: bool | match | +| test.rs:243:27:243:33 | a: bool | test.rs:243:36:243:36 | b | | +| test.rs:243:36:243:36 | b | test.rs:243:36:243:41 | b: i64 | match | +| test.rs:243:36:243:41 | b: i64 | test.rs:243:44:243:44 | c | | +| test.rs:243:44:243:44 | c | test.rs:243:44:243:50 | c: bool | match | +| test.rs:243:44:243:50 | c: bool | test.rs:244:9:244:36 | let d = ... | | +| test.rs:243:61:246:5 | { ... } | test.rs:243:5:246:5 | exit fn test_or_operator_2 (normal) | | +| test.rs:244:9:244:36 | let d = ... | test.rs:244:17:244:17 | a | | | test.rs:244:13:244:13 | d | test.rs:245:9:245:9 | d | match | | test.rs:244:17:244:17 | a | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | true | | test.rs:244:17:244:17 | a | test.rs:244:23:244:23 | b | false | @@ -525,27 +525,27 @@ edges | test.rs:244:23:244:29 | ... == ... | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | true | | test.rs:244:28:244:29 | 28 | test.rs:244:23:244:29 | ... == ... | | | test.rs:244:35:244:35 | c | test.rs:244:17:244:35 | ... \|\| ... | | -| test.rs:245:9:245:9 | d | test.rs:243:61:246:5 | BlockExpr | | -| test.rs:248:5:251:5 | enter test_not_operator | test.rs:248:26:248:26 | a | | -| test.rs:248:5:251:5 | exit test_not_operator (normal) | test.rs:248:5:251:5 | exit test_not_operator | | -| test.rs:248:26:248:26 | a | test.rs:248:26:248:32 | Param | match | -| test.rs:248:26:248:32 | Param | test.rs:249:9:249:19 | LetStmt | | -| test.rs:248:43:251:5 | BlockExpr | test.rs:248:5:251:5 | exit test_not_operator (normal) | | -| test.rs:249:9:249:19 | LetStmt | test.rs:249:18:249:18 | a | | +| test.rs:245:9:245:9 | d | test.rs:243:61:246:5 | { ... } | | +| test.rs:248:5:251:5 | enter fn test_not_operator | test.rs:248:26:248:26 | a | | +| test.rs:248:5:251:5 | exit fn test_not_operator (normal) | test.rs:248:5:251:5 | exit fn test_not_operator | | +| test.rs:248:26:248:26 | a | test.rs:248:26:248:32 | a: bool | match | +| test.rs:248:26:248:32 | a: bool | test.rs:249:9:249:19 | let d = ... | | +| test.rs:248:43:251:5 | { ... } | test.rs:248:5:251:5 | exit fn test_not_operator (normal) | | +| test.rs:249:9:249:19 | let d = ... | test.rs:249:18:249:18 | a | | | test.rs:249:13:249:13 | d | test.rs:250:9:250:9 | d | match | | test.rs:249:17:249:18 | ! ... | test.rs:249:13:249:13 | d | | | test.rs:249:18:249:18 | a | test.rs:249:17:249:18 | ! ... | | -| test.rs:250:9:250:9 | d | test.rs:248:43:251:5 | BlockExpr | | -| test.rs:253:5:259:5 | enter test_if_and_operator | test.rs:253:29:253:29 | a | | -| test.rs:253:5:259:5 | exit test_if_and_operator (normal) | test.rs:253:5:259:5 | exit test_if_and_operator | | -| test.rs:253:29:253:29 | a | test.rs:253:29:253:35 | Param | match | -| test.rs:253:29:253:35 | Param | test.rs:253:38:253:38 | b | | -| test.rs:253:38:253:38 | b | test.rs:253:38:253:44 | Param | match | -| test.rs:253:38:253:44 | Param | test.rs:253:47:253:47 | c | | -| test.rs:253:47:253:47 | c | test.rs:253:47:253:53 | Param | match | -| test.rs:253:47:253:53 | Param | test.rs:254:12:254:12 | a | | -| test.rs:253:64:259:5 | BlockExpr | test.rs:253:5:259:5 | exit test_if_and_operator (normal) | | -| test.rs:254:9:258:9 | IfExpr | test.rs:253:64:259:5 | BlockExpr | | +| test.rs:250:9:250:9 | d | test.rs:248:43:251:5 | { ... } | | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:253:29:253:29 | a | | +| test.rs:253:5:259:5 | exit fn test_if_and_operator (normal) | test.rs:253:5:259:5 | exit fn test_if_and_operator | | +| test.rs:253:29:253:29 | a | test.rs:253:29:253:35 | a: bool | match | +| test.rs:253:29:253:35 | a: bool | test.rs:253:38:253:38 | b | | +| test.rs:253:38:253:38 | b | test.rs:253:38:253:44 | b: bool | match | +| test.rs:253:38:253:44 | b: bool | test.rs:253:47:253:47 | c | | +| test.rs:253:47:253:47 | c | test.rs:253:47:253:53 | c: bool | match | +| test.rs:253:47:253:53 | c: bool | test.rs:254:12:254:12 | a | | +| test.rs:253:64:259:5 | { ... } | test.rs:253:5:259:5 | exit fn test_if_and_operator (normal) | | +| test.rs:254:9:258:9 | if ... { ... } else { ... } | test.rs:253:64:259:5 | { ... } | | | test.rs:254:12:254:12 | a | test.rs:254:12:254:17 | [boolean(false)] ... && ... | false | | test.rs:254:12:254:12 | a | test.rs:254:17:254:17 | b | true | | test.rs:254:12:254:17 | [boolean(false)] ... && ... | test.rs:254:12:254:22 | [boolean(false)] ... && ... | false | @@ -556,20 +556,20 @@ edges | test.rs:254:17:254:17 | b | test.rs:254:12:254:17 | [boolean(true)] ... && ... | true | | test.rs:254:22:254:22 | c | test.rs:254:12:254:22 | [boolean(false)] ... && ... | false | | test.rs:254:22:254:22 | c | test.rs:254:12:254:22 | [boolean(true)] ... && ... | true | -| test.rs:254:24:256:9 | BlockExpr | test.rs:254:9:258:9 | IfExpr | | -| test.rs:255:13:255:16 | true | test.rs:254:24:256:9 | BlockExpr | | -| test.rs:256:16:258:9 | BlockExpr | test.rs:254:9:258:9 | IfExpr | | -| test.rs:257:13:257:17 | false | test.rs:256:16:258:9 | BlockExpr | | -| test.rs:261:5:267:5 | enter test_if_or_operator | test.rs:261:28:261:28 | a | | -| test.rs:261:5:267:5 | exit test_if_or_operator (normal) | test.rs:261:5:267:5 | exit test_if_or_operator | | -| test.rs:261:28:261:28 | a | test.rs:261:28:261:34 | Param | match | -| test.rs:261:28:261:34 | Param | test.rs:261:37:261:37 | b | | -| test.rs:261:37:261:37 | b | test.rs:261:37:261:43 | Param | match | -| test.rs:261:37:261:43 | Param | test.rs:261:46:261:46 | c | | -| test.rs:261:46:261:46 | c | test.rs:261:46:261:52 | Param | match | -| test.rs:261:46:261:52 | Param | test.rs:262:12:262:12 | a | | -| test.rs:261:63:267:5 | BlockExpr | test.rs:261:5:267:5 | exit test_if_or_operator (normal) | | -| test.rs:262:9:266:9 | IfExpr | test.rs:261:63:267:5 | BlockExpr | | +| test.rs:254:24:256:9 | { ... } | test.rs:254:9:258:9 | if ... { ... } else { ... } | | +| test.rs:255:13:255:16 | true | test.rs:254:24:256:9 | { ... } | | +| test.rs:256:16:258:9 | { ... } | test.rs:254:9:258:9 | if ... { ... } else { ... } | | +| test.rs:257:13:257:17 | false | test.rs:256:16:258:9 | { ... } | | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:261:28:261:28 | a | | +| test.rs:261:5:267:5 | exit fn test_if_or_operator (normal) | test.rs:261:5:267:5 | exit fn test_if_or_operator | | +| test.rs:261:28:261:28 | a | test.rs:261:28:261:34 | a: bool | match | +| test.rs:261:28:261:34 | a: bool | test.rs:261:37:261:37 | b | | +| test.rs:261:37:261:37 | b | test.rs:261:37:261:43 | b: bool | match | +| test.rs:261:37:261:43 | b: bool | test.rs:261:46:261:46 | c | | +| test.rs:261:46:261:46 | c | test.rs:261:46:261:52 | c: bool | match | +| test.rs:261:46:261:52 | c: bool | test.rs:262:12:262:12 | a | | +| test.rs:261:63:267:5 | { ... } | test.rs:261:5:267:5 | exit fn test_if_or_operator (normal) | | +| test.rs:262:9:266:9 | if ... { ... } else { ... } | test.rs:261:63:267:5 | { ... } | | | test.rs:262:12:262:12 | a | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | true | | test.rs:262:12:262:12 | a | test.rs:262:17:262:17 | b | false | | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:22:262:22 | c | false | @@ -580,73 +580,73 @@ edges | test.rs:262:17:262:17 | b | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | true | | test.rs:262:22:262:22 | c | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | false | | test.rs:262:22:262:22 | c | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:262:24:264:9 | BlockExpr | test.rs:262:9:266:9 | IfExpr | | -| test.rs:263:13:263:16 | true | test.rs:262:24:264:9 | BlockExpr | | -| test.rs:264:16:266:9 | BlockExpr | test.rs:262:9:266:9 | IfExpr | | -| test.rs:265:13:265:17 | false | test.rs:264:16:266:9 | BlockExpr | | -| test.rs:269:5:275:5 | enter test_if_not_operator | test.rs:269:29:269:29 | a | | -| test.rs:269:5:275:5 | exit test_if_not_operator (normal) | test.rs:269:5:275:5 | exit test_if_not_operator | | -| test.rs:269:29:269:29 | a | test.rs:269:29:269:35 | Param | match | -| test.rs:269:29:269:35 | Param | test.rs:270:13:270:13 | a | | -| test.rs:269:46:275:5 | BlockExpr | test.rs:269:5:275:5 | exit test_if_not_operator (normal) | | -| test.rs:270:9:274:9 | IfExpr | test.rs:269:46:275:5 | BlockExpr | | +| test.rs:262:24:264:9 | { ... } | test.rs:262:9:266:9 | if ... { ... } else { ... } | | +| test.rs:263:13:263:16 | true | test.rs:262:24:264:9 | { ... } | | +| test.rs:264:16:266:9 | { ... } | test.rs:262:9:266:9 | if ... { ... } else { ... } | | +| test.rs:265:13:265:17 | false | test.rs:264:16:266:9 | { ... } | | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:269:29:269:29 | a | | +| test.rs:269:5:275:5 | exit fn test_if_not_operator (normal) | test.rs:269:5:275:5 | exit fn test_if_not_operator | | +| test.rs:269:29:269:29 | a | test.rs:269:29:269:35 | a: bool | match | +| test.rs:269:29:269:35 | a: bool | test.rs:270:13:270:13 | a | | +| test.rs:269:46:275:5 | { ... } | test.rs:269:5:275:5 | exit fn test_if_not_operator (normal) | | +| test.rs:270:9:274:9 | if ... { ... } else { ... } | test.rs:269:46:275:5 | { ... } | | | test.rs:270:12:270:13 | [boolean(false)] ! ... | test.rs:273:13:273:17 | false | false | | test.rs:270:12:270:13 | [boolean(true)] ! ... | test.rs:271:13:271:16 | true | true | | test.rs:270:13:270:13 | a | test.rs:270:12:270:13 | [boolean(false)] ! ... | true | | test.rs:270:13:270:13 | a | test.rs:270:12:270:13 | [boolean(true)] ! ... | false | -| test.rs:270:15:272:9 | BlockExpr | test.rs:270:9:274:9 | IfExpr | | -| test.rs:271:13:271:16 | true | test.rs:270:15:272:9 | BlockExpr | | -| test.rs:272:16:274:9 | BlockExpr | test.rs:270:9:274:9 | IfExpr | | -| test.rs:273:13:273:17 | false | test.rs:272:16:274:9 | BlockExpr | | -| test.rs:277:5:279:5 | enter test_and_return | test.rs:277:24:277:24 | a | | -| test.rs:277:5:279:5 | exit test_and_return (normal) | test.rs:277:5:279:5 | exit test_and_return | | -| test.rs:277:24:277:24 | a | test.rs:277:24:277:30 | Param | match | -| test.rs:277:24:277:30 | Param | test.rs:278:9:278:20 | ExprStmt | | -| test.rs:277:33:279:5 | BlockExpr | test.rs:277:5:279:5 | exit test_and_return (normal) | | +| test.rs:270:15:272:9 | { ... } | test.rs:270:9:274:9 | if ... { ... } else { ... } | | +| test.rs:271:13:271:16 | true | test.rs:270:15:272:9 | { ... } | | +| test.rs:272:16:274:9 | { ... } | test.rs:270:9:274:9 | if ... { ... } else { ... } | | +| test.rs:273:13:273:17 | false | test.rs:272:16:274:9 | { ... } | | +| test.rs:277:5:279:5 | enter fn test_and_return | test.rs:277:24:277:24 | a | | +| test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:277:5:279:5 | exit fn test_and_return | | +| test.rs:277:24:277:24 | a | test.rs:277:24:277:30 | a: bool | match | +| test.rs:277:24:277:30 | a: bool | test.rs:278:9:278:20 | ExprStmt | | +| test.rs:277:33:279:5 | { ... } | test.rs:277:5:279:5 | exit fn test_and_return (normal) | | | test.rs:278:9:278:9 | a | test.rs:278:9:278:19 | ... && ... | false | -| test.rs:278:9:278:9 | a | test.rs:278:14:278:19 | ReturnExpr | true | -| test.rs:278:9:278:19 | ... && ... | test.rs:277:33:279:5 | BlockExpr | | +| test.rs:278:9:278:9 | a | test.rs:278:14:278:19 | return | true | +| test.rs:278:9:278:19 | ... && ... | test.rs:277:33:279:5 | { ... } | | | test.rs:278:9:278:20 | ExprStmt | test.rs:278:9:278:9 | a | | -| test.rs:278:14:278:19 | ReturnExpr | test.rs:277:5:279:5 | exit test_and_return (normal) | return | -| test.rs:285:5:287:5 | enter test_question_mark_operator_1 | test.rs:285:38:285:38 | s | | -| test.rs:285:5:287:5 | exit test_question_mark_operator_1 (normal) | test.rs:285:5:287:5 | exit test_question_mark_operator_1 | | -| test.rs:285:38:285:38 | s | test.rs:285:38:285:44 | Param | match | -| test.rs:285:38:285:44 | Param | test.rs:286:9:286:10 | Ok | | -| test.rs:285:87:287:5 | BlockExpr | test.rs:285:5:287:5 | exit test_question_mark_operator_1 (normal) | | +| test.rs:278:14:278:19 | return | test.rs:277:5:279:5 | exit fn test_and_return (normal) | return | +| test.rs:285:5:287:5 | enter fn test_question_mark_operator_1 | test.rs:285:38:285:38 | s | | +| test.rs:285:5:287:5 | exit fn test_question_mark_operator_1 (normal) | test.rs:285:5:287:5 | exit fn test_question_mark_operator_1 | | +| test.rs:285:38:285:38 | s | test.rs:285:38:285:44 | s: RefType | match | +| test.rs:285:38:285:44 | s: RefType | test.rs:286:9:286:10 | Ok | | +| test.rs:285:87:287:5 | { ... } | test.rs:285:5:287:5 | exit fn test_question_mark_operator_1 (normal) | | | test.rs:286:9:286:10 | Ok | test.rs:286:12:286:12 | s | | -| test.rs:286:9:286:33 | CallExpr | test.rs:285:87:287:5 | BlockExpr | | +| test.rs:286:9:286:33 | Ok(...) | test.rs:285:87:287:5 | { ... } | | | test.rs:286:12:286:12 | s | test.rs:286:12:286:27 | ... .parse(...) | | | test.rs:286:12:286:27 | ... .parse(...) | test.rs:286:12:286:28 | TryExpr | | -| test.rs:286:12:286:28 | TryExpr | test.rs:285:5:287:5 | exit test_question_mark_operator_1 (normal) | return | +| test.rs:286:12:286:28 | TryExpr | test.rs:285:5:287:5 | exit fn test_question_mark_operator_1 (normal) | return | | test.rs:286:12:286:28 | TryExpr | test.rs:286:32:286:32 | 4 | match | -| test.rs:286:12:286:32 | ... + ... | test.rs:286:9:286:33 | CallExpr | | +| test.rs:286:12:286:32 | ... + ... | test.rs:286:9:286:33 | Ok(...) | | | test.rs:286:32:286:32 | 4 | test.rs:286:12:286:32 | ... + ... | | -| test.rs:289:5:294:5 | enter test_question_mark_operator_2 | test.rs:289:38:289:38 | b | | -| test.rs:289:5:294:5 | exit test_question_mark_operator_2 (normal) | test.rs:289:5:294:5 | exit test_question_mark_operator_2 | | -| test.rs:289:38:289:38 | b | test.rs:289:38:289:52 | Param | match | -| test.rs:289:38:289:52 | Param | test.rs:290:15:290:15 | b | | -| test.rs:289:71:294:5 | BlockExpr | test.rs:289:5:294:5 | exit test_question_mark_operator_2 (normal) | | -| test.rs:290:9:293:9 | MatchExpr | test.rs:289:71:294:5 | BlockExpr | | +| test.rs:289:5:294:5 | enter fn test_question_mark_operator_2 | test.rs:289:38:289:38 | b | | +| test.rs:289:5:294:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:289:5:294:5 | exit fn test_question_mark_operator_2 | | +| test.rs:289:38:289:38 | b | test.rs:289:38:289:52 | b: Option::<...> | match | +| test.rs:289:38:289:52 | b: Option::<...> | test.rs:290:15:290:15 | b | | +| test.rs:289:71:294:5 | { ... } | test.rs:289:5:294:5 | exit fn test_question_mark_operator_2 (normal) | | +| test.rs:290:9:293:9 | match ... { ... } | test.rs:289:71:294:5 | { ... } | | | test.rs:290:15:290:15 | b | test.rs:290:15:290:16 | TryExpr | | -| test.rs:290:15:290:16 | TryExpr | test.rs:289:5:294:5 | exit test_question_mark_operator_2 (normal) | return | +| test.rs:290:15:290:16 | TryExpr | test.rs:289:5:294:5 | exit fn test_question_mark_operator_2 (normal) | return | | test.rs:290:15:290:16 | TryExpr | test.rs:291:13:291:16 | true | match | -| test.rs:291:13:291:16 | LiteralPat | test.rs:291:21:291:24 | Some | match | -| test.rs:291:13:291:16 | LiteralPat | test.rs:292:13:292:17 | false | no-match | -| test.rs:291:13:291:16 | true | test.rs:291:13:291:16 | LiteralPat | | +| test.rs:291:13:291:16 | true | test.rs:291:13:291:16 | true | | +| test.rs:291:13:291:16 | true | test.rs:291:21:291:24 | Some | match | +| test.rs:291:13:291:16 | true | test.rs:292:13:292:17 | false | no-match | | test.rs:291:21:291:24 | Some | test.rs:291:26:291:30 | false | | -| test.rs:291:21:291:31 | CallExpr | test.rs:290:9:293:9 | MatchExpr | | -| test.rs:291:26:291:30 | false | test.rs:291:21:291:31 | CallExpr | | -| test.rs:292:13:292:17 | LiteralPat | test.rs:292:22:292:25 | Some | match | -| test.rs:292:13:292:17 | false | test.rs:292:13:292:17 | LiteralPat | | +| test.rs:291:21:291:31 | Some(...) | test.rs:290:9:293:9 | match ... { ... } | | +| test.rs:291:26:291:30 | false | test.rs:291:21:291:31 | Some(...) | | +| test.rs:292:13:292:17 | false | test.rs:292:13:292:17 | false | | +| test.rs:292:13:292:17 | false | test.rs:292:22:292:25 | Some | match | | test.rs:292:22:292:25 | Some | test.rs:292:27:292:30 | true | | -| test.rs:292:22:292:31 | CallExpr | test.rs:290:9:293:9 | MatchExpr | | -| test.rs:292:27:292:30 | true | test.rs:292:22:292:31 | CallExpr | | -| test.rs:300:5:306:5 | enter test_match | test.rs:300:19:300:29 | maybe_digit | | -| test.rs:300:5:306:5 | exit test_match (normal) | test.rs:300:5:306:5 | exit test_match | | -| test.rs:300:19:300:29 | maybe_digit | test.rs:300:19:300:42 | Param | match | -| test.rs:300:19:300:42 | Param | test.rs:301:15:301:25 | maybe_digit | | -| test.rs:300:52:306:5 | BlockExpr | test.rs:300:5:306:5 | exit test_match (normal) | | -| test.rs:301:9:305:9 | MatchExpr | test.rs:300:52:306:5 | BlockExpr | | +| test.rs:292:22:292:31 | Some(...) | test.rs:290:9:293:9 | match ... { ... } | | +| test.rs:292:27:292:30 | true | test.rs:292:22:292:31 | Some(...) | | +| test.rs:300:5:306:5 | enter fn test_match | test.rs:300:19:300:29 | maybe_digit | | +| test.rs:300:5:306:5 | exit fn test_match (normal) | test.rs:300:5:306:5 | exit fn test_match | | +| test.rs:300:19:300:29 | maybe_digit | test.rs:300:19:300:42 | maybe_digit: Option::<...> | match | +| test.rs:300:19:300:42 | maybe_digit: Option::<...> | test.rs:301:15:301:25 | maybe_digit | | +| test.rs:300:52:306:5 | { ... } | test.rs:300:5:306:5 | exit fn test_match (normal) | | +| test.rs:301:9:305:9 | match ... { ... } | test.rs:300:52:306:5 | { ... } | | | test.rs:301:15:301:25 | maybe_digit | test.rs:302:13:302:27 | TupleStructPat | | | test.rs:302:13:302:27 | TupleStructPat | test.rs:302:26:302:26 | x | match | | test.rs:302:13:302:27 | TupleStructPat | test.rs:303:13:303:27 | TupleStructPat | no-match | @@ -656,414 +656,414 @@ edges | test.rs:302:32:302:37 | ... < ... | test.rs:303:13:303:27 | TupleStructPat | false | | test.rs:302:36:302:37 | 10 | test.rs:302:32:302:37 | ... < ... | | | test.rs:302:42:302:42 | x | test.rs:302:46:302:46 | 5 | | -| test.rs:302:42:302:46 | ... + ... | test.rs:301:9:305:9 | MatchExpr | | +| test.rs:302:42:302:46 | ... + ... | test.rs:301:9:305:9 | match ... { ... } | | | test.rs:302:46:302:46 | 5 | test.rs:302:42:302:46 | ... + ... | | | test.rs:303:13:303:27 | TupleStructPat | test.rs:303:26:303:26 | x | match | -| test.rs:303:13:303:27 | TupleStructPat | test.rs:304:13:304:24 | PathPat | no-match | +| test.rs:303:13:303:27 | TupleStructPat | test.rs:304:13:304:24 | Option::None | no-match | | test.rs:303:26:303:26 | x | test.rs:303:32:303:32 | x | match | -| test.rs:303:32:303:32 | x | test.rs:301:9:305:9 | MatchExpr | | -| test.rs:304:13:304:24 | PathPat | test.rs:304:29:304:29 | 5 | match | -| test.rs:304:29:304:29 | 5 | test.rs:301:9:305:9 | MatchExpr | | -| test.rs:308:5:317:5 | enter test_match_with_return_in_scrutinee | test.rs:308:44:308:54 | maybe_digit | | -| test.rs:308:5:317:5 | exit test_match_with_return_in_scrutinee (normal) | test.rs:308:5:317:5 | exit test_match_with_return_in_scrutinee | | -| test.rs:308:44:308:54 | maybe_digit | test.rs:308:44:308:67 | Param | match | -| test.rs:308:44:308:67 | Param | test.rs:309:19:309:29 | maybe_digit | | -| test.rs:308:77:317:5 | BlockExpr | test.rs:308:5:317:5 | exit test_match_with_return_in_scrutinee (normal) | | -| test.rs:309:9:316:9 | MatchExpr | test.rs:308:77:317:5 | BlockExpr | | -| test.rs:309:16:313:9 | IfExpr | test.rs:314:13:314:27 | TupleStructPat | | +| test.rs:303:32:303:32 | x | test.rs:301:9:305:9 | match ... { ... } | | +| test.rs:304:13:304:24 | Option::None | test.rs:304:29:304:29 | 5 | match | +| test.rs:304:29:304:29 | 5 | test.rs:301:9:305:9 | match ... { ... } | | +| test.rs:308:5:317:5 | enter fn test_match_with_return_in_scrutinee | test.rs:308:44:308:54 | maybe_digit | | +| test.rs:308:5:317:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:308:5:317:5 | exit fn test_match_with_return_in_scrutinee | | +| test.rs:308:44:308:54 | maybe_digit | test.rs:308:44:308:67 | maybe_digit: Option::<...> | match | +| test.rs:308:44:308:67 | maybe_digit: Option::<...> | test.rs:309:19:309:29 | maybe_digit | | +| test.rs:308:77:317:5 | { ... } | test.rs:308:5:317:5 | exit fn test_match_with_return_in_scrutinee (normal) | | +| test.rs:309:9:316:9 | match ... { ... } | test.rs:308:77:317:5 | { ... } | | +| test.rs:309:16:313:9 | if ... { ... } else { ... } | test.rs:314:13:314:27 | TupleStructPat | | | test.rs:309:19:309:29 | maybe_digit | test.rs:309:34:309:37 | Some | | | test.rs:309:19:309:40 | ... == ... | test.rs:310:13:310:21 | ExprStmt | true | | test.rs:309:19:309:40 | ... == ... | test.rs:312:13:312:23 | maybe_digit | false | | test.rs:309:34:309:37 | Some | test.rs:309:39:309:39 | 3 | | -| test.rs:309:34:309:40 | CallExpr | test.rs:309:19:309:40 | ... == ... | | -| test.rs:309:39:309:39 | 3 | test.rs:309:34:309:40 | CallExpr | | -| test.rs:310:13:310:20 | ReturnExpr | test.rs:308:5:317:5 | exit test_match_with_return_in_scrutinee (normal) | return | +| test.rs:309:34:309:40 | Some(...) | test.rs:309:19:309:40 | ... == ... | | +| test.rs:309:39:309:39 | 3 | test.rs:309:34:309:40 | Some(...) | | +| test.rs:310:13:310:20 | return ... | test.rs:308:5:317:5 | exit fn test_match_with_return_in_scrutinee (normal) | return | | test.rs:310:13:310:21 | ExprStmt | test.rs:310:20:310:20 | 3 | | -| test.rs:310:20:310:20 | 3 | test.rs:310:13:310:20 | ReturnExpr | | -| test.rs:311:16:313:9 | BlockExpr | test.rs:309:16:313:9 | IfExpr | | -| test.rs:312:13:312:23 | maybe_digit | test.rs:311:16:313:9 | BlockExpr | | +| test.rs:310:20:310:20 | 3 | test.rs:310:13:310:20 | return ... | | +| test.rs:311:16:313:9 | { ... } | test.rs:309:16:313:9 | if ... { ... } else { ... } | | +| test.rs:312:13:312:23 | maybe_digit | test.rs:311:16:313:9 | { ... } | | | test.rs:314:13:314:27 | TupleStructPat | test.rs:314:26:314:26 | x | match | -| test.rs:314:13:314:27 | TupleStructPat | test.rs:315:13:315:24 | PathPat | no-match | +| test.rs:314:13:314:27 | TupleStructPat | test.rs:315:13:315:24 | Option::None | no-match | | test.rs:314:26:314:26 | x | test.rs:314:32:314:32 | x | match | | test.rs:314:32:314:32 | x | test.rs:314:36:314:36 | 5 | | -| test.rs:314:32:314:36 | ... + ... | test.rs:309:9:316:9 | MatchExpr | | +| test.rs:314:32:314:36 | ... + ... | test.rs:309:9:316:9 | match ... { ... } | | | test.rs:314:36:314:36 | 5 | test.rs:314:32:314:36 | ... + ... | | -| test.rs:315:13:315:24 | PathPat | test.rs:315:29:315:29 | 5 | match | -| test.rs:315:29:315:29 | 5 | test.rs:309:9:316:9 | MatchExpr | | -| test.rs:319:5:324:5 | enter test_match_and | test.rs:319:23:319:26 | cond | | -| test.rs:319:5:324:5 | exit test_match_and (normal) | test.rs:319:5:324:5 | exit test_match_and | | -| test.rs:319:23:319:26 | cond | test.rs:319:23:319:32 | Param | match | -| test.rs:319:23:319:32 | Param | test.rs:319:35:319:35 | r | | -| test.rs:319:35:319:35 | r | test.rs:319:35:319:49 | Param | match | -| test.rs:319:35:319:49 | Param | test.rs:320:16:320:16 | r | | -| test.rs:319:60:324:5 | BlockExpr | test.rs:319:5:324:5 | exit test_match_and (normal) | | -| test.rs:320:9:323:18 | ... && ... | test.rs:319:60:324:5 | BlockExpr | | -| test.rs:320:10:323:9 | [boolean(false)] MatchExpr | test.rs:320:9:323:18 | ... && ... | false | -| test.rs:320:10:323:9 | [boolean(true)] MatchExpr | test.rs:323:15:323:18 | cond | true | +| test.rs:315:13:315:24 | Option::None | test.rs:315:29:315:29 | 5 | match | +| test.rs:315:29:315:29 | 5 | test.rs:309:9:316:9 | match ... { ... } | | +| test.rs:319:5:324:5 | enter fn test_match_and | test.rs:319:23:319:26 | cond | | +| test.rs:319:5:324:5 | exit fn test_match_and (normal) | test.rs:319:5:324:5 | exit fn test_match_and | | +| test.rs:319:23:319:26 | cond | test.rs:319:23:319:32 | cond: bool | match | +| test.rs:319:23:319:32 | cond: bool | test.rs:319:35:319:35 | r | | +| test.rs:319:35:319:35 | r | test.rs:319:35:319:49 | r: Option::<...> | match | +| test.rs:319:35:319:49 | r: Option::<...> | test.rs:320:16:320:16 | r | | +| test.rs:319:60:324:5 | { ... } | test.rs:319:5:324:5 | exit fn test_match_and (normal) | | +| test.rs:320:9:323:18 | ... && ... | test.rs:319:60:324:5 | { ... } | | +| test.rs:320:10:323:9 | [boolean(false)] match ... { ... } | test.rs:320:9:323:18 | ... && ... | false | +| test.rs:320:10:323:9 | [boolean(true)] match ... { ... } | test.rs:323:15:323:18 | cond | true | | test.rs:320:16:320:16 | r | test.rs:321:13:321:19 | TupleStructPat | | | test.rs:321:13:321:19 | TupleStructPat | test.rs:321:18:321:18 | a | match | -| test.rs:321:13:321:19 | TupleStructPat | test.rs:322:13:322:13 | WildcardPat | no-match | +| test.rs:321:13:321:19 | TupleStructPat | test.rs:322:13:322:13 | _ | no-match | | test.rs:321:18:321:18 | a | test.rs:321:24:321:24 | a | match | -| test.rs:321:24:321:24 | a | test.rs:320:10:323:9 | [boolean(false)] MatchExpr | false | -| test.rs:321:24:321:24 | a | test.rs:320:10:323:9 | [boolean(true)] MatchExpr | true | -| test.rs:322:13:322:13 | WildcardPat | test.rs:322:18:322:22 | false | match | -| test.rs:322:18:322:22 | false | test.rs:320:10:323:9 | [boolean(false)] MatchExpr | false | +| test.rs:321:24:321:24 | a | test.rs:320:10:323:9 | [boolean(false)] match ... { ... } | false | +| test.rs:321:24:321:24 | a | test.rs:320:10:323:9 | [boolean(true)] match ... { ... } | true | +| test.rs:322:13:322:13 | _ | test.rs:322:18:322:22 | false | match | +| test.rs:322:18:322:22 | false | test.rs:320:10:323:9 | [boolean(false)] match ... { ... } | false | | test.rs:323:15:323:18 | cond | test.rs:320:9:323:18 | ... && ... | | -| test.rs:326:5:331:5 | enter test_match_with_no_arms | test.rs:326:35:326:35 | r | | -| test.rs:326:5:331:5 | exit test_match_with_no_arms (normal) | test.rs:326:5:331:5 | exit test_match_with_no_arms | | -| test.rs:326:35:326:35 | r | test.rs:326:35:326:58 | Param | match | -| test.rs:326:35:326:58 | Param | test.rs:327:15:327:15 | r | | -| test.rs:326:66:331:5 | BlockExpr | test.rs:326:5:331:5 | exit test_match_with_no_arms (normal) | | -| test.rs:327:9:330:9 | MatchExpr | test.rs:326:66:331:5 | BlockExpr | | +| test.rs:326:5:331:5 | enter fn test_match_with_no_arms | test.rs:326:35:326:35 | r | | +| test.rs:326:5:331:5 | exit fn test_match_with_no_arms (normal) | test.rs:326:5:331:5 | exit fn test_match_with_no_arms | | +| test.rs:326:35:326:35 | r | test.rs:326:35:326:58 | r: Result::<...> | match | +| test.rs:326:35:326:58 | r: Result::<...> | test.rs:327:15:327:15 | r | | +| test.rs:326:66:331:5 | { ... } | test.rs:326:5:331:5 | exit fn test_match_with_no_arms (normal) | | +| test.rs:327:9:330:9 | match ... { ... } | test.rs:326:66:331:5 | { ... } | | | test.rs:327:15:327:15 | r | test.rs:328:13:328:21 | TupleStructPat | | | test.rs:328:13:328:21 | TupleStructPat | test.rs:328:16:328:20 | value | match | | test.rs:328:13:328:21 | TupleStructPat | test.rs:329:13:329:22 | TupleStructPat | no-match | | test.rs:328:16:328:20 | value | test.rs:328:26:328:30 | value | match | -| test.rs:328:26:328:30 | value | test.rs:327:9:330:9 | MatchExpr | | +| test.rs:328:26:328:30 | value | test.rs:327:9:330:9 | match ... { ... } | | | test.rs:329:13:329:22 | TupleStructPat | test.rs:329:17:329:21 | never | match | | test.rs:329:17:329:21 | never | test.rs:329:33:329:37 | never | match | -| test.rs:329:27:329:40 | MatchExpr | test.rs:327:9:330:9 | MatchExpr | | -| test.rs:329:33:329:37 | never | test.rs:329:27:329:40 | MatchExpr | | -| test.rs:336:5:339:5 | enter test_let_match | test.rs:336:23:336:23 | a | | -| test.rs:336:5:339:5 | exit test_let_match (normal) | test.rs:336:5:339:5 | exit test_let_match | | -| test.rs:336:23:336:23 | a | test.rs:336:23:336:36 | Param | match | -| test.rs:336:23:336:36 | Param | test.rs:337:9:337:57 | LetStmt | | -| test.rs:336:46:339:5 | BlockExpr | test.rs:336:5:339:5 | exit test_let_match (normal) | | -| test.rs:337:9:337:57 | LetStmt | test.rs:337:23:337:23 | a | | +| test.rs:329:27:329:40 | match ... { ... } | test.rs:327:9:330:9 | match ... { ... } | | +| test.rs:329:33:329:37 | never | test.rs:329:27:329:40 | match ... { ... } | | +| test.rs:336:5:339:5 | enter fn test_let_match | test.rs:336:23:336:23 | a | | +| test.rs:336:5:339:5 | exit fn test_let_match (normal) | test.rs:336:5:339:5 | exit fn test_let_match | | +| test.rs:336:23:336:23 | a | test.rs:336:23:336:36 | a: Option::<...> | match | +| test.rs:336:23:336:36 | a: Option::<...> | test.rs:337:9:337:57 | let TupleStructPat = ... else { ... } | | +| test.rs:336:46:339:5 | { ... } | test.rs:336:5:339:5 | exit fn test_let_match (normal) | | +| test.rs:337:9:337:57 | let TupleStructPat = ... else { ... } | test.rs:337:23:337:23 | a | | | test.rs:337:13:337:19 | TupleStructPat | test.rs:337:18:337:18 | n | match | | test.rs:337:13:337:19 | TupleStructPat | test.rs:337:39:337:53 | MacroStmts | no-match | | test.rs:337:18:337:18 | n | test.rs:338:9:338:9 | n | match | | test.rs:337:23:337:23 | a | test.rs:337:13:337:19 | TupleStructPat | | | test.rs:337:32:337:54 | $crate::panicking::panic_fmt | test.rs:337:39:337:53 | "Expected some" | | -| test.rs:337:32:337:54 | MacroExpr | test.rs:337:30:337:56 | BlockExpr | | +| test.rs:337:32:337:54 | MacroExpr | test.rs:337:30:337:56 | { ... } | | | test.rs:337:39:337:53 | "Expected some" | test.rs:337:39:337:53 | FormatArgsExpr | | -| test.rs:337:39:337:53 | BlockExpr | test.rs:337:39:337:53 | MacroExpr | | -| test.rs:337:39:337:53 | CallExpr | test.rs:337:39:337:53 | BlockExpr | | +| test.rs:337:39:337:53 | $crate::panicking::panic_fmt(...) | test.rs:337:39:337:53 | { ... } | | | test.rs:337:39:337:53 | ExprStmt | test.rs:337:32:337:54 | $crate::panicking::panic_fmt | | | test.rs:337:39:337:53 | FormatArgsExpr | test.rs:337:39:337:53 | MacroExpr | | | test.rs:337:39:337:53 | MacroExpr | test.rs:337:32:337:54 | MacroExpr | | -| test.rs:337:39:337:53 | MacroExpr | test.rs:337:39:337:53 | CallExpr | | +| test.rs:337:39:337:53 | MacroExpr | test.rs:337:39:337:53 | $crate::panicking::panic_fmt(...) | | | test.rs:337:39:337:53 | MacroStmts | test.rs:337:39:337:53 | ExprStmt | | | test.rs:337:39:337:53 | MacroStmts | test.rs:337:39:337:53 | MacroStmts | | -| test.rs:338:9:338:9 | n | test.rs:336:46:339:5 | BlockExpr | | -| test.rs:341:5:347:5 | enter test_let_with_return | test.rs:341:29:341:29 | m | | -| test.rs:341:5:347:5 | exit test_let_with_return (normal) | test.rs:341:5:347:5 | exit test_let_with_return | | -| test.rs:341:29:341:29 | m | test.rs:341:29:341:42 | Param | match | -| test.rs:341:29:341:42 | Param | test.rs:342:9:345:10 | LetStmt | | -| test.rs:341:53:347:5 | BlockExpr | test.rs:341:5:347:5 | exit test_let_with_return (normal) | | -| test.rs:342:9:345:10 | LetStmt | test.rs:342:25:342:25 | m | | +| test.rs:337:39:337:53 | { ... } | test.rs:337:39:337:53 | MacroExpr | | +| test.rs:338:9:338:9 | n | test.rs:336:46:339:5 | { ... } | | +| test.rs:341:5:347:5 | enter fn test_let_with_return | test.rs:341:29:341:29 | m | | +| test.rs:341:5:347:5 | exit fn test_let_with_return (normal) | test.rs:341:5:347:5 | exit fn test_let_with_return | | +| test.rs:341:29:341:29 | m | test.rs:341:29:341:42 | m: Option::<...> | match | +| test.rs:341:29:341:42 | m: Option::<...> | test.rs:342:9:345:10 | let ret = ... | | +| test.rs:341:53:347:5 | { ... } | test.rs:341:5:347:5 | exit fn test_let_with_return (normal) | | +| test.rs:342:9:345:10 | let ret = ... | test.rs:342:25:342:25 | m | | | test.rs:342:13:342:15 | ret | test.rs:346:9:346:12 | true | match | -| test.rs:342:19:345:9 | MatchExpr | test.rs:342:13:342:15 | ret | | +| test.rs:342:19:345:9 | match ... { ... } | test.rs:342:13:342:15 | ret | | | test.rs:342:25:342:25 | m | test.rs:343:13:343:21 | TupleStructPat | | | test.rs:343:13:343:21 | TupleStructPat | test.rs:343:18:343:20 | ret | match | | test.rs:343:13:343:21 | TupleStructPat | test.rs:344:13:344:16 | None | no-match | | test.rs:343:18:343:20 | ret | test.rs:343:26:343:28 | ret | match | -| test.rs:343:26:343:28 | ret | test.rs:342:19:345:9 | MatchExpr | | +| test.rs:343:26:343:28 | ret | test.rs:342:19:345:9 | match ... { ... } | | | test.rs:344:13:344:16 | None | test.rs:344:28:344:32 | false | match | -| test.rs:344:21:344:32 | ReturnExpr | test.rs:341:5:347:5 | exit test_let_with_return (normal) | return | -| test.rs:344:28:344:32 | false | test.rs:344:21:344:32 | ReturnExpr | | -| test.rs:346:9:346:12 | true | test.rs:341:53:347:5 | BlockExpr | | -| test.rs:352:5:355:5 | enter empty_tuple_pattern | test.rs:352:28:352:31 | unit | | -| test.rs:352:5:355:5 | exit empty_tuple_pattern (normal) | test.rs:352:5:355:5 | exit empty_tuple_pattern | | -| test.rs:352:28:352:31 | unit | test.rs:352:28:352:35 | Param | match | -| test.rs:352:28:352:35 | Param | test.rs:353:9:353:22 | LetStmt | | -| test.rs:353:9:353:22 | LetStmt | test.rs:353:18:353:21 | unit | | +| test.rs:344:21:344:32 | return ... | test.rs:341:5:347:5 | exit fn test_let_with_return (normal) | return | +| test.rs:344:28:344:32 | false | test.rs:344:21:344:32 | return ... | | +| test.rs:346:9:346:12 | true | test.rs:341:53:347:5 | { ... } | | +| test.rs:352:5:355:5 | enter fn empty_tuple_pattern | test.rs:352:28:352:31 | unit | | +| test.rs:352:5:355:5 | exit fn empty_tuple_pattern (normal) | test.rs:352:5:355:5 | exit fn empty_tuple_pattern | | +| test.rs:352:28:352:31 | unit | test.rs:352:28:352:35 | unit: TupleType | match | +| test.rs:352:28:352:35 | unit: TupleType | test.rs:353:9:353:22 | let TuplePat = ... | | +| test.rs:353:9:353:22 | let TuplePat = ... | test.rs:353:18:353:21 | unit | | | test.rs:353:13:353:14 | TuplePat | test.rs:354:9:354:15 | ExprStmt | match | | test.rs:353:18:353:21 | unit | test.rs:353:13:353:14 | TuplePat | | -| test.rs:354:9:354:14 | ReturnExpr | test.rs:352:5:355:5 | exit empty_tuple_pattern (normal) | return | -| test.rs:354:9:354:15 | ExprStmt | test.rs:354:9:354:14 | ReturnExpr | | -| test.rs:359:5:363:5 | enter empty_struct_pattern | test.rs:359:29:359:30 | st | | -| test.rs:359:5:363:5 | exit empty_struct_pattern (normal) | test.rs:359:5:363:5 | exit empty_struct_pattern | | -| test.rs:359:29:359:30 | st | test.rs:359:29:359:40 | Param | match | -| test.rs:359:29:359:40 | Param | test.rs:360:15:360:16 | st | | -| test.rs:359:50:363:5 | BlockExpr | test.rs:359:5:363:5 | exit empty_struct_pattern (normal) | | -| test.rs:360:9:362:9 | MatchExpr | test.rs:359:50:363:5 | BlockExpr | | -| test.rs:360:15:360:16 | st | test.rs:361:13:361:27 | RecordPat | | -| test.rs:361:13:361:27 | RecordPat | test.rs:361:24:361:25 | RestPat | match | -| test.rs:361:24:361:25 | RestPat | test.rs:361:32:361:32 | 1 | match | -| test.rs:361:32:361:32 | 1 | test.rs:360:9:362:9 | MatchExpr | | -| test.rs:365:5:372:5 | enter range_pattern | test.rs:366:15:366:16 | 42 | | -| test.rs:365:5:372:5 | exit range_pattern (normal) | test.rs:365:5:372:5 | exit range_pattern | | -| test.rs:365:31:372:5 | BlockExpr | test.rs:365:5:372:5 | exit range_pattern (normal) | | -| test.rs:366:9:371:9 | MatchExpr | test.rs:365:31:372:5 | BlockExpr | | +| test.rs:354:9:354:14 | return | test.rs:352:5:355:5 | exit fn empty_tuple_pattern (normal) | return | +| test.rs:354:9:354:15 | ExprStmt | test.rs:354:9:354:14 | return | | +| test.rs:359:5:363:5 | enter fn empty_struct_pattern | test.rs:359:29:359:30 | st | | +| test.rs:359:5:363:5 | exit fn empty_struct_pattern (normal) | test.rs:359:5:363:5 | exit fn empty_struct_pattern | | +| test.rs:359:29:359:30 | st | test.rs:359:29:359:40 | st: MyStruct | match | +| test.rs:359:29:359:40 | st: MyStruct | test.rs:360:15:360:16 | st | | +| test.rs:359:50:363:5 | { ... } | test.rs:359:5:363:5 | exit fn empty_struct_pattern (normal) | | +| test.rs:360:9:362:9 | match ... { ... } | test.rs:359:50:363:5 | { ... } | | +| test.rs:360:15:360:16 | st | test.rs:361:13:361:27 | MyStruct {...} | | +| test.rs:361:13:361:27 | MyStruct {...} | test.rs:361:24:361:25 | .. | match | +| test.rs:361:24:361:25 | .. | test.rs:361:32:361:32 | 1 | match | +| test.rs:361:32:361:32 | 1 | test.rs:360:9:362:9 | match ... { ... } | | +| test.rs:365:5:372:5 | enter fn range_pattern | test.rs:366:15:366:16 | 42 | | +| test.rs:365:5:372:5 | exit fn range_pattern (normal) | test.rs:365:5:372:5 | exit fn range_pattern | | +| test.rs:365:31:372:5 | { ... } | test.rs:365:5:372:5 | exit fn range_pattern (normal) | | +| test.rs:366:9:371:9 | match ... { ... } | test.rs:365:31:372:5 | { ... } | | | test.rs:366:15:366:16 | 42 | test.rs:367:13:367:15 | RangePat | | | test.rs:367:13:367:15 | RangePat | test.rs:367:15:367:15 | 0 | match | | test.rs:367:13:367:15 | RangePat | test.rs:368:13:368:16 | RangePat | no-match | -| test.rs:367:15:367:15 | 0 | test.rs:367:15:367:15 | LiteralPat | | -| test.rs:367:15:367:15 | LiteralPat | test.rs:367:20:367:20 | 1 | match | -| test.rs:367:15:367:15 | LiteralPat | test.rs:368:13:368:16 | RangePat | no-match | -| test.rs:367:20:367:20 | 1 | test.rs:366:9:371:9 | MatchExpr | | -| test.rs:368:13:368:13 | 1 | test.rs:368:13:368:13 | LiteralPat | | -| test.rs:368:13:368:13 | LiteralPat | test.rs:368:16:368:16 | 2 | match | -| test.rs:368:13:368:13 | LiteralPat | test.rs:369:13:369:15 | RangePat | no-match | +| test.rs:367:15:367:15 | 0 | test.rs:367:15:367:15 | 0 | | +| test.rs:367:15:367:15 | 0 | test.rs:367:20:367:20 | 1 | match | +| test.rs:367:15:367:15 | 0 | test.rs:368:13:368:16 | RangePat | no-match | +| test.rs:367:20:367:20 | 1 | test.rs:366:9:371:9 | match ... { ... } | | +| test.rs:368:13:368:13 | 1 | test.rs:368:13:368:13 | 1 | | +| test.rs:368:13:368:13 | 1 | test.rs:368:16:368:16 | 2 | match | +| test.rs:368:13:368:13 | 1 | test.rs:369:13:369:15 | RangePat | no-match | | test.rs:368:13:368:16 | RangePat | test.rs:368:13:368:13 | 1 | match | | test.rs:368:13:368:16 | RangePat | test.rs:369:13:369:15 | RangePat | no-match | -| test.rs:368:16:368:16 | 2 | test.rs:368:16:368:16 | LiteralPat | | -| test.rs:368:16:368:16 | LiteralPat | test.rs:368:21:368:21 | 2 | match | -| test.rs:368:16:368:16 | LiteralPat | test.rs:369:13:369:15 | RangePat | no-match | -| test.rs:368:21:368:21 | 2 | test.rs:366:9:371:9 | MatchExpr | | -| test.rs:369:13:369:13 | 5 | test.rs:369:13:369:13 | LiteralPat | | -| test.rs:369:13:369:13 | LiteralPat | test.rs:369:20:369:20 | 3 | match | -| test.rs:369:13:369:13 | LiteralPat | test.rs:370:13:370:13 | WildcardPat | no-match | +| test.rs:368:16:368:16 | 2 | test.rs:368:16:368:16 | 2 | | +| test.rs:368:16:368:16 | 2 | test.rs:368:21:368:21 | 2 | match | +| test.rs:368:16:368:16 | 2 | test.rs:369:13:369:15 | RangePat | no-match | +| test.rs:368:21:368:21 | 2 | test.rs:366:9:371:9 | match ... { ... } | | +| test.rs:369:13:369:13 | 5 | test.rs:369:13:369:13 | 5 | | +| test.rs:369:13:369:13 | 5 | test.rs:369:20:369:20 | 3 | match | +| test.rs:369:13:369:13 | 5 | test.rs:370:13:370:13 | _ | no-match | | test.rs:369:13:369:15 | RangePat | test.rs:369:13:369:13 | 5 | match | -| test.rs:369:13:369:15 | RangePat | test.rs:370:13:370:13 | WildcardPat | no-match | -| test.rs:369:20:369:20 | 3 | test.rs:366:9:371:9 | MatchExpr | | -| test.rs:370:13:370:13 | WildcardPat | test.rs:370:18:370:18 | 4 | match | -| test.rs:370:18:370:18 | 4 | test.rs:366:9:371:9 | MatchExpr | | -| test.rs:376:5:381:5 | enter test_infinite_loop | test.rs:377:9:379:9 | ExprStmt | | +| test.rs:369:13:369:15 | RangePat | test.rs:370:13:370:13 | _ | no-match | +| test.rs:369:20:369:20 | 3 | test.rs:366:9:371:9 | match ... { ... } | | +| test.rs:370:13:370:13 | _ | test.rs:370:18:370:18 | 4 | match | +| test.rs:370:18:370:18 | 4 | test.rs:366:9:371:9 | match ... { ... } | | +| test.rs:376:5:381:5 | enter fn test_infinite_loop | test.rs:377:9:379:9 | ExprStmt | | | test.rs:377:9:379:9 | ExprStmt | test.rs:378:13:378:14 | TupleExpr | | -| test.rs:377:14:379:9 | BlockExpr | test.rs:378:13:378:14 | TupleExpr | | -| test.rs:378:13:378:14 | TupleExpr | test.rs:377:14:379:9 | BlockExpr | | -| test.rs:385:5:387:5 | enter say_hello | test.rs:386:9:386:34 | ExprStmt | | -| test.rs:385:5:387:5 | exit say_hello (normal) | test.rs:385:5:387:5 | exit say_hello | | -| test.rs:385:26:387:5 | BlockExpr | test.rs:385:5:387:5 | exit say_hello (normal) | | +| test.rs:377:14:379:9 | { ... } | test.rs:378:13:378:14 | TupleExpr | | +| test.rs:378:13:378:14 | TupleExpr | test.rs:377:14:379:9 | { ... } | | +| test.rs:385:5:387:5 | enter fn say_hello | test.rs:386:9:386:34 | ExprStmt | | +| test.rs:385:5:387:5 | exit fn say_hello (normal) | test.rs:385:5:387:5 | exit fn say_hello | | +| test.rs:385:26:387:5 | { ... } | test.rs:385:5:387:5 | exit fn say_hello (normal) | | | test.rs:386:9:386:33 | $crate::io::_print | test.rs:386:18:386:32 | "hello, world!\\n" | | -| test.rs:386:9:386:33 | MacroExpr | test.rs:385:26:387:5 | BlockExpr | | +| test.rs:386:9:386:33 | MacroExpr | test.rs:385:26:387:5 | { ... } | | | test.rs:386:9:386:34 | ExprStmt | test.rs:386:18:386:32 | MacroStmts | | | test.rs:386:18:386:32 | "hello, world!\\n" | test.rs:386:18:386:32 | FormatArgsExpr | | -| test.rs:386:18:386:32 | BlockExpr | test.rs:386:9:386:33 | MacroExpr | | -| test.rs:386:18:386:32 | CallExpr | test.rs:386:18:386:32 | BlockExpr | | +| test.rs:386:18:386:32 | $crate::io::_print(...) | test.rs:386:18:386:32 | { ... } | | | test.rs:386:18:386:32 | ExprStmt | test.rs:386:9:386:33 | $crate::io::_print | | | test.rs:386:18:386:32 | FormatArgsExpr | test.rs:386:18:386:32 | MacroExpr | | -| test.rs:386:18:386:32 | MacroExpr | test.rs:386:18:386:32 | CallExpr | | +| test.rs:386:18:386:32 | MacroExpr | test.rs:386:18:386:32 | $crate::io::_print(...) | | | test.rs:386:18:386:32 | MacroStmts | test.rs:386:18:386:32 | ExprStmt | | -| test.rs:389:5:408:5 | enter async_block | test.rs:389:26:389:26 | b | | -| test.rs:389:5:408:5 | exit async_block (normal) | test.rs:389:5:408:5 | exit async_block | | -| test.rs:389:26:389:26 | b | test.rs:389:26:389:32 | Param | match | -| test.rs:389:26:389:32 | Param | test.rs:390:9:392:10 | LetStmt | | -| test.rs:389:35:408:5 | BlockExpr | test.rs:389:5:408:5 | exit async_block (normal) | | -| test.rs:390:9:392:10 | LetStmt | test.rs:390:26:392:9 | BlockExpr | | -| test.rs:390:13:390:22 | say_godbye | test.rs:393:9:395:10 | LetStmt | match | -| test.rs:390:26:392:9 | BlockExpr | test.rs:390:13:390:22 | say_godbye | | -| test.rs:390:26:392:9 | enter BlockExpr | test.rs:391:13:391:42 | ExprStmt | | -| test.rs:390:26:392:9 | exit BlockExpr (normal) | test.rs:390:26:392:9 | exit BlockExpr | | +| test.rs:386:18:386:32 | { ... } | test.rs:386:9:386:33 | MacroExpr | | +| test.rs:389:5:408:5 | enter fn async_block | test.rs:389:26:389:26 | b | | +| test.rs:389:5:408:5 | exit fn async_block (normal) | test.rs:389:5:408:5 | exit fn async_block | | +| test.rs:389:26:389:26 | b | test.rs:389:26:389:32 | b: bool | match | +| test.rs:389:26:389:32 | b: bool | test.rs:390:9:392:10 | let say_godbye = ... | | +| test.rs:389:35:408:5 | { ... } | test.rs:389:5:408:5 | exit fn async_block (normal) | | +| test.rs:390:9:392:10 | let say_godbye = ... | test.rs:390:26:392:9 | { ... } | | +| test.rs:390:13:390:22 | say_godbye | test.rs:393:9:395:10 | let say_how_are_you = ... | match | +| test.rs:390:26:392:9 | enter { ... } | test.rs:391:13:391:42 | ExprStmt | | +| test.rs:390:26:392:9 | exit { ... } (normal) | test.rs:390:26:392:9 | exit { ... } | | +| test.rs:390:26:392:9 | { ... } | test.rs:390:13:390:22 | say_godbye | | | test.rs:391:13:391:41 | $crate::io::_print | test.rs:391:22:391:40 | "godbye, everyone!\\n" | | -| test.rs:391:13:391:41 | MacroExpr | test.rs:390:26:392:9 | exit BlockExpr (normal) | | +| test.rs:391:13:391:41 | MacroExpr | test.rs:390:26:392:9 | exit { ... } (normal) | | | test.rs:391:13:391:42 | ExprStmt | test.rs:391:22:391:40 | MacroStmts | | | test.rs:391:22:391:40 | "godbye, everyone!\\n" | test.rs:391:22:391:40 | FormatArgsExpr | | -| test.rs:391:22:391:40 | BlockExpr | test.rs:391:13:391:41 | MacroExpr | | -| test.rs:391:22:391:40 | CallExpr | test.rs:391:22:391:40 | BlockExpr | | +| test.rs:391:22:391:40 | $crate::io::_print(...) | test.rs:391:22:391:40 | { ... } | | | test.rs:391:22:391:40 | ExprStmt | test.rs:391:13:391:41 | $crate::io::_print | | | test.rs:391:22:391:40 | FormatArgsExpr | test.rs:391:22:391:40 | MacroExpr | | -| test.rs:391:22:391:40 | MacroExpr | test.rs:391:22:391:40 | CallExpr | | +| test.rs:391:22:391:40 | MacroExpr | test.rs:391:22:391:40 | $crate::io::_print(...) | | | test.rs:391:22:391:40 | MacroStmts | test.rs:391:22:391:40 | ExprStmt | | -| test.rs:393:9:395:10 | LetStmt | test.rs:393:31:395:9 | BlockExpr | | -| test.rs:393:13:393:27 | say_how_are_you | test.rs:396:9:396:28 | LetStmt | match | -| test.rs:393:31:395:9 | BlockExpr | test.rs:393:13:393:27 | say_how_are_you | | -| test.rs:393:31:395:9 | enter BlockExpr | test.rs:394:13:394:37 | ExprStmt | | -| test.rs:393:31:395:9 | exit BlockExpr (normal) | test.rs:393:31:395:9 | exit BlockExpr | | +| test.rs:391:22:391:40 | { ... } | test.rs:391:13:391:41 | MacroExpr | | +| test.rs:393:9:395:10 | let say_how_are_you = ... | test.rs:393:31:395:9 | { ... } | | +| test.rs:393:13:393:27 | say_how_are_you | test.rs:396:9:396:28 | let noop = ... | match | +| test.rs:393:31:395:9 | enter { ... } | test.rs:394:13:394:37 | ExprStmt | | +| test.rs:393:31:395:9 | exit { ... } (normal) | test.rs:393:31:395:9 | exit { ... } | | +| test.rs:393:31:395:9 | { ... } | test.rs:393:13:393:27 | say_how_are_you | | | test.rs:394:13:394:36 | $crate::io::_print | test.rs:394:22:394:35 | "how are you?\\n" | | -| test.rs:394:13:394:36 | MacroExpr | test.rs:393:31:395:9 | exit BlockExpr (normal) | | +| test.rs:394:13:394:36 | MacroExpr | test.rs:393:31:395:9 | exit { ... } (normal) | | | test.rs:394:13:394:37 | ExprStmt | test.rs:394:22:394:35 | MacroStmts | | | test.rs:394:22:394:35 | "how are you?\\n" | test.rs:394:22:394:35 | FormatArgsExpr | | -| test.rs:394:22:394:35 | BlockExpr | test.rs:394:13:394:36 | MacroExpr | | -| test.rs:394:22:394:35 | CallExpr | test.rs:394:22:394:35 | BlockExpr | | +| test.rs:394:22:394:35 | $crate::io::_print(...) | test.rs:394:22:394:35 | { ... } | | | test.rs:394:22:394:35 | ExprStmt | test.rs:394:13:394:36 | $crate::io::_print | | | test.rs:394:22:394:35 | FormatArgsExpr | test.rs:394:22:394:35 | MacroExpr | | -| test.rs:394:22:394:35 | MacroExpr | test.rs:394:22:394:35 | CallExpr | | +| test.rs:394:22:394:35 | MacroExpr | test.rs:394:22:394:35 | $crate::io::_print(...) | | | test.rs:394:22:394:35 | MacroStmts | test.rs:394:22:394:35 | ExprStmt | | -| test.rs:396:9:396:28 | LetStmt | test.rs:396:20:396:27 | BlockExpr | | +| test.rs:394:22:394:35 | { ... } | test.rs:394:13:394:36 | MacroExpr | | +| test.rs:396:9:396:28 | let noop = ... | test.rs:396:20:396:27 | { ... } | | | test.rs:396:13:396:16 | noop | test.rs:397:9:397:26 | ExprStmt | match | -| test.rs:396:20:396:27 | BlockExpr | test.rs:396:13:396:16 | noop | | -| test.rs:397:9:397:17 | say_hello | test.rs:397:9:397:19 | CallExpr | | -| test.rs:397:9:397:19 | CallExpr | test.rs:397:9:397:25 | AwaitExpr | | -| test.rs:397:9:397:25 | AwaitExpr | test.rs:398:9:398:30 | ExprStmt | | +| test.rs:396:20:396:27 | { ... } | test.rs:396:13:396:16 | noop | | +| test.rs:397:9:397:17 | say_hello | test.rs:397:9:397:19 | say_hello(...) | | +| test.rs:397:9:397:19 | say_hello(...) | test.rs:397:9:397:25 | await ... | | +| test.rs:397:9:397:25 | await ... | test.rs:398:9:398:30 | ExprStmt | | | test.rs:397:9:397:26 | ExprStmt | test.rs:397:9:397:17 | say_hello | | -| test.rs:398:9:398:23 | say_how_are_you | test.rs:398:9:398:29 | AwaitExpr | | -| test.rs:398:9:398:29 | AwaitExpr | test.rs:399:9:399:25 | ExprStmt | | +| test.rs:398:9:398:23 | say_how_are_you | test.rs:398:9:398:29 | await ... | | +| test.rs:398:9:398:29 | await ... | test.rs:399:9:399:25 | ExprStmt | | | test.rs:398:9:398:30 | ExprStmt | test.rs:398:9:398:23 | say_how_are_you | | -| test.rs:399:9:399:18 | say_godbye | test.rs:399:9:399:24 | AwaitExpr | | -| test.rs:399:9:399:24 | AwaitExpr | test.rs:400:9:400:19 | ExprStmt | | +| test.rs:399:9:399:18 | say_godbye | test.rs:399:9:399:24 | await ... | | +| test.rs:399:9:399:24 | await ... | test.rs:400:9:400:19 | ExprStmt | | | test.rs:399:9:399:25 | ExprStmt | test.rs:399:9:399:18 | say_godbye | | -| test.rs:400:9:400:12 | noop | test.rs:400:9:400:18 | AwaitExpr | | -| test.rs:400:9:400:18 | AwaitExpr | test.rs:402:9:407:10 | LetStmt | | +| test.rs:400:9:400:12 | noop | test.rs:400:9:400:18 | await ... | | +| test.rs:400:9:400:18 | await ... | test.rs:402:9:407:10 | let lambda = ... | | | test.rs:400:9:400:19 | ExprStmt | test.rs:400:9:400:12 | noop | | -| test.rs:402:9:407:10 | LetStmt | test.rs:402:22:407:9 | ClosureExpr | | -| test.rs:402:13:402:18 | lambda | test.rs:389:35:408:5 | BlockExpr | match | -| test.rs:402:22:407:9 | ClosureExpr | test.rs:402:13:402:18 | lambda | | -| test.rs:402:22:407:9 | enter ClosureExpr | test.rs:402:23:402:25 | foo | | -| test.rs:402:22:407:9 | exit ClosureExpr (normal) | test.rs:402:22:407:9 | exit ClosureExpr | | -| test.rs:402:23:402:25 | Param | test.rs:402:28:407:9 | BlockExpr | | -| test.rs:402:23:402:25 | foo | test.rs:402:23:402:25 | Param | match | -| test.rs:402:28:407:9 | BlockExpr | test.rs:402:22:407:9 | exit ClosureExpr (normal) | | -| test.rs:402:28:407:9 | enter BlockExpr | test.rs:403:13:405:14 | ExprStmt | | -| test.rs:402:28:407:9 | exit BlockExpr (normal) | test.rs:402:28:407:9 | exit BlockExpr | | -| test.rs:403:13:405:13 | IfExpr | test.rs:406:13:406:15 | foo | | +| test.rs:402:9:407:10 | let lambda = ... | test.rs:402:22:407:9 | \|...\| ... | | +| test.rs:402:13:402:18 | lambda | test.rs:389:35:408:5 | { ... } | match | +| test.rs:402:22:407:9 | \|...\| ... | test.rs:402:13:402:18 | lambda | | +| test.rs:402:22:407:9 | enter \|...\| ... | test.rs:402:23:402:25 | foo | | +| test.rs:402:22:407:9 | exit \|...\| ... (normal) | test.rs:402:22:407:9 | exit \|...\| ... | | +| test.rs:402:23:402:25 | foo | test.rs:402:23:402:25 | foo | match | +| test.rs:402:23:402:25 | foo | test.rs:402:28:407:9 | { ... } | | +| test.rs:402:28:407:9 | enter { ... } | test.rs:403:13:405:14 | ExprStmt | | +| test.rs:402:28:407:9 | exit { ... } (normal) | test.rs:402:28:407:9 | exit { ... } | | +| test.rs:402:28:407:9 | { ... } | test.rs:402:22:407:9 | exit \|...\| ... (normal) | | +| test.rs:403:13:405:13 | if ... { ... } | test.rs:406:13:406:15 | foo | | | test.rs:403:13:405:14 | ExprStmt | test.rs:403:16:403:16 | b | | -| test.rs:403:16:403:16 | b | test.rs:403:13:405:13 | IfExpr | false | +| test.rs:403:16:403:16 | b | test.rs:403:13:405:13 | if ... { ... } | false | | test.rs:403:16:403:16 | b | test.rs:404:17:404:41 | ExprStmt | true | -| test.rs:404:17:404:40 | ReturnExpr | test.rs:402:28:407:9 | exit BlockExpr (normal) | return | +| test.rs:404:17:404:40 | return ... | test.rs:402:28:407:9 | exit { ... } (normal) | return | | test.rs:404:17:404:41 | ExprStmt | test.rs:404:24:404:34 | async_block | | | test.rs:404:24:404:34 | async_block | test.rs:404:36:404:39 | true | | -| test.rs:404:24:404:40 | CallExpr | test.rs:404:17:404:40 | ReturnExpr | | -| test.rs:404:36:404:39 | true | test.rs:404:24:404:40 | CallExpr | | -| test.rs:406:13:406:15 | foo | test.rs:402:28:407:9 | exit BlockExpr (normal) | | -| test.rs:414:5:416:5 | enter add_two | test.rs:414:22:414:22 | n | | -| test.rs:414:5:416:5 | exit add_two (normal) | test.rs:414:5:416:5 | exit add_two | | -| test.rs:414:22:414:22 | n | test.rs:414:22:414:27 | Param | match | -| test.rs:414:22:414:27 | Param | test.rs:415:9:415:9 | n | | -| test.rs:414:37:416:5 | BlockExpr | test.rs:414:5:416:5 | exit add_two (normal) | | +| test.rs:404:24:404:40 | async_block(...) | test.rs:404:17:404:40 | return ... | | +| test.rs:404:36:404:39 | true | test.rs:404:24:404:40 | async_block(...) | | +| test.rs:406:13:406:15 | foo | test.rs:402:28:407:9 | exit { ... } (normal) | | +| test.rs:414:5:416:5 | enter fn add_two | test.rs:414:22:414:22 | n | | +| test.rs:414:5:416:5 | exit fn add_two (normal) | test.rs:414:5:416:5 | exit fn add_two | | +| test.rs:414:22:414:22 | n | test.rs:414:22:414:27 | n: i64 | match | +| test.rs:414:22:414:27 | n: i64 | test.rs:415:9:415:9 | n | | +| test.rs:414:37:416:5 | { ... } | test.rs:414:5:416:5 | exit fn add_two (normal) | | | test.rs:415:9:415:9 | n | test.rs:415:13:415:13 | 2 | | -| test.rs:415:9:415:13 | ... + ... | test.rs:414:37:416:5 | BlockExpr | | +| test.rs:415:9:415:13 | ... + ... | test.rs:414:37:416:5 | { ... } | | | test.rs:415:13:415:13 | 2 | test.rs:415:9:415:13 | ... + ... | | -| test.rs:420:5:428:5 | enter const_block_assert | test.rs:423:9:425:9 | ExprStmt | | -| test.rs:420:5:428:5 | exit const_block_assert (normal) | test.rs:420:5:428:5 | exit const_block_assert | | -| test.rs:420:41:428:5 | BlockExpr | test.rs:420:5:428:5 | exit const_block_assert (normal) | | -| test.rs:423:9:425:9 | BlockExpr | test.rs:427:9:427:10 | 42 | | +| test.rs:420:5:428:5 | enter fn const_block_assert | test.rs:423:9:425:9 | ExprStmt | | +| test.rs:420:5:428:5 | exit fn const_block_assert (normal) | test.rs:420:5:428:5 | exit fn const_block_assert | | +| test.rs:420:41:428:5 | { ... } | test.rs:420:5:428:5 | exit fn const_block_assert (normal) | | | test.rs:423:9:425:9 | ExprStmt | test.rs:424:13:424:50 | ExprStmt | | -| test.rs:424:13:424:49 | $crate::panicking::panic_explicit | test.rs:424:13:424:49 | CallExpr | | -| test.rs:424:13:424:49 | BlockExpr | test.rs:424:13:424:49 | MacroExpr | | -| test.rs:424:13:424:49 | BlockExpr | test.rs:424:13:424:49 | exit panic_cold_explicit (normal) | | -| test.rs:424:13:424:49 | BlockExpr | test.rs:424:21:424:48 | IfExpr | | -| test.rs:424:13:424:49 | CallExpr | test.rs:424:13:424:49 | BlockExpr | | -| test.rs:424:13:424:49 | CallExpr | test.rs:424:13:424:49 | BlockExpr | | +| test.rs:423:9:425:9 | { ... } | test.rs:427:9:427:10 | 42 | | +| test.rs:424:13:424:49 | $crate::panicking::panic_explicit | test.rs:424:13:424:49 | $crate::panicking::panic_explicit(...) | | +| test.rs:424:13:424:49 | $crate::panicking::panic_explicit(...) | test.rs:424:13:424:49 | { ... } | | | test.rs:424:13:424:49 | ExprStmt | test.rs:424:13:424:49 | MacroStmts | | | test.rs:424:13:424:49 | ExprStmt | test.rs:424:13:424:49 | panic_cold_explicit | | -| test.rs:424:13:424:49 | MacroExpr | test.rs:423:9:425:9 | BlockExpr | | -| test.rs:424:13:424:49 | MacroExpr | test.rs:424:13:424:49 | BlockExpr | | -| test.rs:424:13:424:49 | MacroStmts | test.rs:424:13:424:49 | panic_cold_explicit | | -| test.rs:424:13:424:49 | enter panic_cold_explicit | test.rs:424:13:424:49 | $crate::panicking::panic_explicit | | -| test.rs:424:13:424:49 | exit panic_cold_explicit (normal) | test.rs:424:13:424:49 | exit panic_cold_explicit | | -| test.rs:424:13:424:49 | panic_cold_explicit | test.rs:424:13:424:49 | CallExpr | | -| test.rs:424:13:424:49 | panic_cold_explicit | test.rs:424:13:424:49 | ExprStmt | | +| test.rs:424:13:424:49 | MacroExpr | test.rs:423:9:425:9 | { ... } | | +| test.rs:424:13:424:49 | MacroExpr | test.rs:424:13:424:49 | { ... } | | +| test.rs:424:13:424:49 | MacroStmts | test.rs:424:13:424:49 | fn panic_cold_explicit | | +| test.rs:424:13:424:49 | enter fn panic_cold_explicit | test.rs:424:13:424:49 | $crate::panicking::panic_explicit | | +| test.rs:424:13:424:49 | exit fn panic_cold_explicit (normal) | test.rs:424:13:424:49 | exit fn panic_cold_explicit | | +| test.rs:424:13:424:49 | fn panic_cold_explicit | test.rs:424:13:424:49 | ExprStmt | | +| test.rs:424:13:424:49 | panic_cold_explicit | test.rs:424:13:424:49 | panic_cold_explicit(...) | | +| test.rs:424:13:424:49 | panic_cold_explicit(...) | test.rs:424:13:424:49 | { ... } | | +| test.rs:424:13:424:49 | { ... } | test.rs:424:13:424:49 | MacroExpr | | +| test.rs:424:13:424:49 | { ... } | test.rs:424:13:424:49 | exit fn panic_cold_explicit (normal) | | +| test.rs:424:13:424:49 | { ... } | test.rs:424:21:424:48 | if ... { ... } | | | test.rs:424:13:424:50 | ExprStmt | test.rs:424:21:424:48 | MacroStmts | | -| test.rs:424:21:424:42 | std::mem::size_of::<...> | test.rs:424:21:424:44 | CallExpr | | -| test.rs:424:21:424:44 | CallExpr | test.rs:424:48:424:48 | 0 | | +| test.rs:424:21:424:42 | std::mem::size_of::<...> | test.rs:424:21:424:44 | std::mem::size_of::<...>(...) | | +| test.rs:424:21:424:44 | std::mem::size_of::<...>(...) | test.rs:424:48:424:48 | 0 | | | test.rs:424:21:424:48 | ... > ... | test.rs:424:21:424:48 | [boolean(false)] ! ... | true | | test.rs:424:21:424:48 | ... > ... | test.rs:424:21:424:48 | [boolean(true)] ! ... | false | -| test.rs:424:21:424:48 | BlockExpr | test.rs:424:13:424:49 | MacroExpr | | -| test.rs:424:21:424:48 | IfExpr | test.rs:424:21:424:48 | BlockExpr | | | test.rs:424:21:424:48 | MacroStmts | test.rs:424:21:424:42 | std::mem::size_of::<...> | | -| test.rs:424:21:424:48 | [boolean(false)] ! ... | test.rs:424:21:424:48 | IfExpr | false | +| test.rs:424:21:424:48 | [boolean(false)] ! ... | test.rs:424:21:424:48 | if ... { ... } | false | | test.rs:424:21:424:48 | [boolean(true)] ! ... | test.rs:424:13:424:49 | ExprStmt | true | +| test.rs:424:21:424:48 | if ... { ... } | test.rs:424:21:424:48 | { ... } | | +| test.rs:424:21:424:48 | { ... } | test.rs:424:13:424:49 | MacroExpr | | | test.rs:424:48:424:48 | 0 | test.rs:424:21:424:48 | ... > ... | | -| test.rs:427:9:427:10 | 42 | test.rs:420:41:428:5 | BlockExpr | | -| test.rs:430:5:439:5 | enter const_block_panic | test.rs:431:9:431:30 | Const | | -| test.rs:430:5:439:5 | exit const_block_panic (normal) | test.rs:430:5:439:5 | exit const_block_panic | | -| test.rs:430:35:439:5 | BlockExpr | test.rs:430:5:439:5 | exit const_block_panic (normal) | | +| test.rs:427:9:427:10 | 42 | test.rs:420:41:428:5 | { ... } | | +| test.rs:430:5:439:5 | enter fn const_block_panic | test.rs:431:9:431:30 | Const | | +| test.rs:430:5:439:5 | exit fn const_block_panic (normal) | test.rs:430:5:439:5 | exit fn const_block_panic | | +| test.rs:430:35:439:5 | { ... } | test.rs:430:5:439:5 | exit fn const_block_panic (normal) | | | test.rs:431:9:431:30 | Const | test.rs:432:9:437:9 | ExprStmt | | | test.rs:432:9:437:9 | ExprStmt | test.rs:432:12:432:16 | false | | -| test.rs:432:9:437:9 | IfExpr | test.rs:438:9:438:9 | N | | -| test.rs:432:12:432:16 | false | test.rs:432:9:437:9 | IfExpr | false | -| test.rs:435:17:435:24 | $crate::panicking::panic_explicit | test.rs:435:17:435:24 | CallExpr | | -| test.rs:435:17:435:24 | BlockExpr | test.rs:435:17:435:24 | exit panic_cold_explicit (normal) | | -| test.rs:435:17:435:24 | CallExpr | test.rs:435:17:435:24 | BlockExpr | | -| test.rs:435:17:435:24 | enter panic_cold_explicit | test.rs:435:17:435:24 | $crate::panicking::panic_explicit | | -| test.rs:435:17:435:24 | exit panic_cold_explicit (normal) | test.rs:435:17:435:24 | exit panic_cold_explicit | | -| test.rs:438:9:438:9 | N | test.rs:430:35:439:5 | BlockExpr | | -| test.rs:442:1:447:1 | enter dead_code | test.rs:443:5:445:5 | ExprStmt | | -| test.rs:442:1:447:1 | exit dead_code (normal) | test.rs:442:1:447:1 | exit dead_code | | +| test.rs:432:9:437:9 | if ... { ... } | test.rs:438:9:438:9 | N | | +| test.rs:432:12:432:16 | false | test.rs:432:9:437:9 | if ... { ... } | false | +| test.rs:435:17:435:24 | $crate::panicking::panic_explicit | test.rs:435:17:435:24 | $crate::panicking::panic_explicit(...) | | +| test.rs:435:17:435:24 | $crate::panicking::panic_explicit(...) | test.rs:435:17:435:24 | { ... } | | +| test.rs:435:17:435:24 | enter fn panic_cold_explicit | test.rs:435:17:435:24 | $crate::panicking::panic_explicit | | +| test.rs:435:17:435:24 | exit fn panic_cold_explicit (normal) | test.rs:435:17:435:24 | exit fn panic_cold_explicit | | +| test.rs:435:17:435:24 | { ... } | test.rs:435:17:435:24 | exit fn panic_cold_explicit (normal) | | +| test.rs:438:9:438:9 | N | test.rs:430:35:439:5 | { ... } | | +| test.rs:442:1:447:1 | enter fn dead_code | test.rs:443:5:445:5 | ExprStmt | | +| test.rs:442:1:447:1 | exit fn dead_code (normal) | test.rs:442:1:447:1 | exit fn dead_code | | | test.rs:443:5:445:5 | ExprStmt | test.rs:443:9:443:12 | true | | | test.rs:443:9:443:12 | true | test.rs:444:9:444:17 | ExprStmt | true | -| test.rs:444:9:444:16 | ReturnExpr | test.rs:442:1:447:1 | exit dead_code (normal) | return | +| test.rs:444:9:444:16 | return ... | test.rs:442:1:447:1 | exit fn dead_code (normal) | return | | test.rs:444:9:444:17 | ExprStmt | test.rs:444:16:444:16 | 0 | | -| test.rs:444:16:444:16 | 0 | test.rs:444:9:444:16 | ReturnExpr | | -| test.rs:449:1:449:16 | enter do_thing | test.rs:449:15:449:16 | BlockExpr | | -| test.rs:449:1:449:16 | exit do_thing (normal) | test.rs:449:1:449:16 | exit do_thing | | -| test.rs:449:15:449:16 | BlockExpr | test.rs:449:1:449:16 | exit do_thing (normal) | | -| test.rs:451:1:453:1 | enter condition_not_met | test.rs:452:5:452:9 | false | | -| test.rs:451:1:453:1 | exit condition_not_met (normal) | test.rs:451:1:453:1 | exit condition_not_met | | -| test.rs:451:32:453:1 | BlockExpr | test.rs:451:1:453:1 | exit condition_not_met (normal) | | -| test.rs:452:5:452:9 | false | test.rs:451:32:453:1 | BlockExpr | | -| test.rs:455:1:455:21 | enter do_next_thing | test.rs:455:20:455:21 | BlockExpr | | -| test.rs:455:1:455:21 | exit do_next_thing (normal) | test.rs:455:1:455:21 | exit do_next_thing | | -| test.rs:455:20:455:21 | BlockExpr | test.rs:455:1:455:21 | exit do_next_thing (normal) | | -| test.rs:457:1:457:21 | enter do_last_thing | test.rs:457:20:457:21 | BlockExpr | | -| test.rs:457:1:457:21 | exit do_last_thing (normal) | test.rs:457:1:457:21 | exit do_last_thing | | -| test.rs:457:20:457:21 | BlockExpr | test.rs:457:1:457:21 | exit do_last_thing (normal) | | -| test.rs:459:1:473:1 | enter labelled_block1 | test.rs:460:5:471:6 | LetStmt | | -| test.rs:459:1:473:1 | exit labelled_block1 (normal) | test.rs:459:1:473:1 | exit labelled_block1 | | -| test.rs:459:29:473:1 | BlockExpr | test.rs:459:1:473:1 | exit labelled_block1 (normal) | | -| test.rs:460:5:471:6 | LetStmt | test.rs:461:9:461:19 | ExprStmt | | +| test.rs:444:16:444:16 | 0 | test.rs:444:9:444:16 | return ... | | +| test.rs:449:1:449:16 | enter fn do_thing | test.rs:449:15:449:16 | { ... } | | +| test.rs:449:1:449:16 | exit fn do_thing (normal) | test.rs:449:1:449:16 | exit fn do_thing | | +| test.rs:449:15:449:16 | { ... } | test.rs:449:1:449:16 | exit fn do_thing (normal) | | +| test.rs:451:1:453:1 | enter fn condition_not_met | test.rs:452:5:452:9 | false | | +| test.rs:451:1:453:1 | exit fn condition_not_met (normal) | test.rs:451:1:453:1 | exit fn condition_not_met | | +| test.rs:451:32:453:1 | { ... } | test.rs:451:1:453:1 | exit fn condition_not_met (normal) | | +| test.rs:452:5:452:9 | false | test.rs:451:32:453:1 | { ... } | | +| test.rs:455:1:455:21 | enter fn do_next_thing | test.rs:455:20:455:21 | { ... } | | +| test.rs:455:1:455:21 | exit fn do_next_thing (normal) | test.rs:455:1:455:21 | exit fn do_next_thing | | +| test.rs:455:20:455:21 | { ... } | test.rs:455:1:455:21 | exit fn do_next_thing (normal) | | +| test.rs:457:1:457:21 | enter fn do_last_thing | test.rs:457:20:457:21 | { ... } | | +| test.rs:457:1:457:21 | exit fn do_last_thing (normal) | test.rs:457:1:457:21 | exit fn do_last_thing | | +| test.rs:457:20:457:21 | { ... } | test.rs:457:1:457:21 | exit fn do_last_thing (normal) | | +| test.rs:459:1:473:1 | enter fn labelled_block1 | test.rs:460:5:471:6 | let result = ... | | +| test.rs:459:1:473:1 | exit fn labelled_block1 (normal) | test.rs:459:1:473:1 | exit fn labelled_block1 | | +| test.rs:459:29:473:1 | { ... } | test.rs:459:1:473:1 | exit fn labelled_block1 (normal) | | +| test.rs:460:5:471:6 | let result = ... | test.rs:461:9:461:19 | ExprStmt | | | test.rs:460:9:460:14 | result | test.rs:472:5:472:10 | result | match | -| test.rs:460:18:471:5 | BlockExpr | test.rs:460:9:460:14 | result | | -| test.rs:461:9:461:16 | do_thing | test.rs:461:9:461:18 | CallExpr | | -| test.rs:461:9:461:18 | CallExpr | test.rs:462:9:464:9 | ExprStmt | | +| test.rs:460:18:471:5 | { ... } | test.rs:460:9:460:14 | result | | +| test.rs:461:9:461:16 | do_thing | test.rs:461:9:461:18 | do_thing(...) | | +| test.rs:461:9:461:18 | do_thing(...) | test.rs:462:9:464:9 | ExprStmt | | | test.rs:461:9:461:19 | ExprStmt | test.rs:461:9:461:16 | do_thing | | | test.rs:462:9:464:9 | ExprStmt | test.rs:462:12:462:28 | condition_not_met | | -| test.rs:462:9:464:9 | IfExpr | test.rs:465:9:465:24 | ExprStmt | | -| test.rs:462:12:462:28 | condition_not_met | test.rs:462:12:462:30 | CallExpr | | -| test.rs:462:12:462:30 | CallExpr | test.rs:462:9:464:9 | IfExpr | false | -| test.rs:462:12:462:30 | CallExpr | test.rs:463:13:463:27 | ExprStmt | true | -| test.rs:463:13:463:26 | BreakExpr | test.rs:460:18:471:5 | BlockExpr | break | +| test.rs:462:9:464:9 | if ... { ... } | test.rs:465:9:465:24 | ExprStmt | | +| test.rs:462:12:462:28 | condition_not_met | test.rs:462:12:462:30 | condition_not_met(...) | | +| test.rs:462:12:462:30 | condition_not_met(...) | test.rs:462:9:464:9 | if ... { ... } | false | +| test.rs:462:12:462:30 | condition_not_met(...) | test.rs:463:13:463:27 | ExprStmt | true | +| test.rs:463:13:463:26 | break ''block ... | test.rs:460:18:471:5 | { ... } | break | | test.rs:463:13:463:27 | ExprStmt | test.rs:463:26:463:26 | 1 | | -| test.rs:463:26:463:26 | 1 | test.rs:463:13:463:26 | BreakExpr | | -| test.rs:465:9:465:21 | do_next_thing | test.rs:465:9:465:23 | CallExpr | | -| test.rs:465:9:465:23 | CallExpr | test.rs:466:9:468:9 | ExprStmt | | +| test.rs:463:26:463:26 | 1 | test.rs:463:13:463:26 | break ''block ... | | +| test.rs:465:9:465:21 | do_next_thing | test.rs:465:9:465:23 | do_next_thing(...) | | +| test.rs:465:9:465:23 | do_next_thing(...) | test.rs:466:9:468:9 | ExprStmt | | | test.rs:465:9:465:24 | ExprStmt | test.rs:465:9:465:21 | do_next_thing | | | test.rs:466:9:468:9 | ExprStmt | test.rs:466:12:466:28 | condition_not_met | | -| test.rs:466:9:468:9 | IfExpr | test.rs:469:9:469:24 | ExprStmt | | -| test.rs:466:12:466:28 | condition_not_met | test.rs:466:12:466:30 | CallExpr | | -| test.rs:466:12:466:30 | CallExpr | test.rs:466:9:468:9 | IfExpr | false | -| test.rs:466:12:466:30 | CallExpr | test.rs:467:13:467:27 | ExprStmt | true | -| test.rs:467:13:467:26 | BreakExpr | test.rs:460:18:471:5 | BlockExpr | break | +| test.rs:466:9:468:9 | if ... { ... } | test.rs:469:9:469:24 | ExprStmt | | +| test.rs:466:12:466:28 | condition_not_met | test.rs:466:12:466:30 | condition_not_met(...) | | +| test.rs:466:12:466:30 | condition_not_met(...) | test.rs:466:9:468:9 | if ... { ... } | false | +| test.rs:466:12:466:30 | condition_not_met(...) | test.rs:467:13:467:27 | ExprStmt | true | +| test.rs:467:13:467:26 | break ''block ... | test.rs:460:18:471:5 | { ... } | break | | test.rs:467:13:467:27 | ExprStmt | test.rs:467:26:467:26 | 2 | | -| test.rs:467:26:467:26 | 2 | test.rs:467:13:467:26 | BreakExpr | | -| test.rs:469:9:469:21 | do_last_thing | test.rs:469:9:469:23 | CallExpr | | -| test.rs:469:9:469:23 | CallExpr | test.rs:470:9:470:9 | 3 | | +| test.rs:467:26:467:26 | 2 | test.rs:467:13:467:26 | break ''block ... | | +| test.rs:469:9:469:21 | do_last_thing | test.rs:469:9:469:23 | do_last_thing(...) | | +| test.rs:469:9:469:23 | do_last_thing(...) | test.rs:470:9:470:9 | 3 | | | test.rs:469:9:469:24 | ExprStmt | test.rs:469:9:469:21 | do_last_thing | | -| test.rs:470:9:470:9 | 3 | test.rs:460:18:471:5 | BlockExpr | | -| test.rs:472:5:472:10 | result | test.rs:459:29:473:1 | BlockExpr | | -| test.rs:475:1:483:1 | enter labelled_block2 | test.rs:476:5:482:6 | LetStmt | | -| test.rs:475:1:483:1 | exit labelled_block2 (normal) | test.rs:475:1:483:1 | exit labelled_block2 | | -| test.rs:475:22:483:1 | BlockExpr | test.rs:475:1:483:1 | exit labelled_block2 (normal) | | -| test.rs:476:5:482:6 | LetStmt | test.rs:477:9:477:34 | LetStmt | | -| test.rs:476:9:476:14 | result | test.rs:475:22:483:1 | BlockExpr | match | -| test.rs:476:18:482:5 | BlockExpr | test.rs:476:9:476:14 | result | | -| test.rs:477:9:477:34 | LetStmt | test.rs:477:30:477:33 | None | | -| test.rs:477:13:477:13 | x | test.rs:478:9:480:10 | LetStmt | match | +| test.rs:470:9:470:9 | 3 | test.rs:460:18:471:5 | { ... } | | +| test.rs:472:5:472:10 | result | test.rs:459:29:473:1 | { ... } | | +| test.rs:475:1:483:1 | enter fn labelled_block2 | test.rs:476:5:482:6 | let result = ... | | +| test.rs:475:1:483:1 | exit fn labelled_block2 (normal) | test.rs:475:1:483:1 | exit fn labelled_block2 | | +| test.rs:475:22:483:1 | { ... } | test.rs:475:1:483:1 | exit fn labelled_block2 (normal) | | +| test.rs:476:5:482:6 | let result = ... | test.rs:477:9:477:34 | let x = ... | | +| test.rs:476:9:476:14 | result | test.rs:475:22:483:1 | { ... } | match | +| test.rs:476:18:482:5 | { ... } | test.rs:476:9:476:14 | result | | +| test.rs:477:9:477:34 | let x = ... | test.rs:477:30:477:33 | None | | +| test.rs:477:13:477:13 | x | test.rs:478:9:480:10 | let TupleStructPat = ... else { ... } | match | | test.rs:477:30:477:33 | None | test.rs:477:13:477:13 | x | | -| test.rs:478:9:480:10 | LetStmt | test.rs:478:23:478:23 | x | | +| test.rs:478:9:480:10 | let TupleStructPat = ... else { ... } | test.rs:478:23:478:23 | x | | | test.rs:478:13:478:19 | TupleStructPat | test.rs:478:18:478:18 | y | match | | test.rs:478:13:478:19 | TupleStructPat | test.rs:479:13:479:27 | ExprStmt | no-match | | test.rs:478:18:478:18 | y | test.rs:481:9:481:9 | 0 | match | | test.rs:478:23:478:23 | x | test.rs:478:13:478:19 | TupleStructPat | | -| test.rs:479:13:479:26 | BreakExpr | test.rs:476:18:482:5 | BlockExpr | break | +| test.rs:479:13:479:26 | break ''block ... | test.rs:476:18:482:5 | { ... } | break | | test.rs:479:13:479:27 | ExprStmt | test.rs:479:26:479:26 | 1 | | -| test.rs:479:26:479:26 | 1 | test.rs:479:13:479:26 | BreakExpr | | -| test.rs:481:9:481:9 | 0 | test.rs:476:18:482:5 | BlockExpr | | -| test.rs:485:1:491:1 | enter test_nested_function2 | test.rs:486:5:486:18 | LetStmt | | -| test.rs:485:1:491:1 | exit test_nested_function2 (normal) | test.rs:485:1:491:1 | exit test_nested_function2 | | -| test.rs:485:28:491:1 | BlockExpr | test.rs:485:1:491:1 | exit test_nested_function2 (normal) | | -| test.rs:486:5:486:18 | LetStmt | test.rs:486:17:486:17 | 0 | | -| test.rs:486:9:486:13 | x | test.rs:487:5:489:5 | nested | match | +| test.rs:479:26:479:26 | 1 | test.rs:479:13:479:26 | break ''block ... | | +| test.rs:481:9:481:9 | 0 | test.rs:476:18:482:5 | { ... } | | +| test.rs:485:1:491:1 | enter fn test_nested_function2 | test.rs:486:5:486:18 | let x = ... | | +| test.rs:485:1:491:1 | exit fn test_nested_function2 (normal) | test.rs:485:1:491:1 | exit fn test_nested_function2 | | +| test.rs:485:28:491:1 | { ... } | test.rs:485:1:491:1 | exit fn test_nested_function2 (normal) | | +| test.rs:486:5:486:18 | let x = ... | test.rs:486:17:486:17 | 0 | | +| test.rs:486:9:486:13 | x | test.rs:487:5:489:5 | fn nested | match | | test.rs:486:17:486:17 | 0 | test.rs:486:9:486:13 | x | | -| test.rs:487:5:489:5 | enter nested | test.rs:487:15:487:15 | x | | -| test.rs:487:5:489:5 | exit nested (normal) | test.rs:487:5:489:5 | exit nested | | -| test.rs:487:5:489:5 | nested | test.rs:490:5:490:19 | ExprStmt | | -| test.rs:487:15:487:15 | x | test.rs:487:15:487:25 | Param | match | -| test.rs:487:15:487:25 | Param | test.rs:488:9:488:16 | ExprStmt | | -| test.rs:487:28:489:5 | BlockExpr | test.rs:487:5:489:5 | exit nested (normal) | | +| test.rs:487:5:489:5 | enter fn nested | test.rs:487:15:487:15 | x | | +| test.rs:487:5:489:5 | exit fn nested (normal) | test.rs:487:5:489:5 | exit fn nested | | +| test.rs:487:5:489:5 | fn nested | test.rs:490:5:490:19 | ExprStmt | | +| test.rs:487:15:487:15 | x | test.rs:487:15:487:25 | x: RefType | match | +| test.rs:487:15:487:25 | x: RefType | test.rs:488:9:488:16 | ExprStmt | | +| test.rs:487:28:489:5 | { ... } | test.rs:487:5:489:5 | exit fn nested (normal) | | | test.rs:488:9:488:10 | * ... | test.rs:488:15:488:15 | 1 | | -| test.rs:488:9:488:15 | ... += ... | test.rs:487:28:489:5 | BlockExpr | | +| test.rs:488:9:488:15 | ... += ... | test.rs:487:28:489:5 | { ... } | | | test.rs:488:9:488:16 | ExprStmt | test.rs:488:10:488:10 | x | | | test.rs:488:10:488:10 | x | test.rs:488:9:488:10 | * ... | | | test.rs:488:15:488:15 | 1 | test.rs:488:9:488:15 | ... += ... | | | test.rs:490:5:490:10 | nested | test.rs:490:17:490:17 | x | | -| test.rs:490:5:490:18 | CallExpr | test.rs:485:28:491:1 | BlockExpr | | +| test.rs:490:5:490:18 | nested(...) | test.rs:485:28:491:1 | { ... } | | | test.rs:490:5:490:19 | ExprStmt | test.rs:490:5:490:10 | nested | | -| test.rs:490:12:490:17 | RefExpr | test.rs:490:5:490:18 | CallExpr | | -| test.rs:490:17:490:17 | x | test.rs:490:12:490:17 | RefExpr | | +| test.rs:490:12:490:17 | &mut ... | test.rs:490:5:490:18 | nested(...) | | +| test.rs:490:17:490:17 | x | test.rs:490:12:490:17 | &mut ... | | breakTarget -| test.rs:34:17:34:21 | BreakExpr | test.rs:28:9:40:9 | LoopExpr | -| test.rs:48:21:48:25 | BreakExpr | test.rs:46:13:53:13 | LoopExpr | -| test.rs:50:21:50:32 | BreakExpr | test.rs:45:9:54:9 | LoopExpr | -| test.rs:52:17:52:28 | BreakExpr | test.rs:46:13:53:13 | LoopExpr | -| test.rs:91:17:91:21 | BreakExpr | test.rs:88:9:94:9 | WhileExpr | -| test.rs:101:17:101:21 | BreakExpr | test.rs:99:9:103:9 | WhileExpr | -| test.rs:109:17:109:21 | BreakExpr | test.rs:107:9:112:9 | ForExpr | -| test.rs:117:13:117:26 | BreakExpr | test.rs:116:9:118:9 | LoopExpr | -| test.rs:197:17:197:28 | BreakExpr | test.rs:195:13:200:9 | LoopExpr | -| test.rs:210:17:210:35 | BreakExpr | test.rs:208:13:213:9 | LoopExpr | -| test.rs:222:13:222:30 | BreakExpr | test.rs:221:13:223:9 | BlockExpr | -| test.rs:463:13:463:26 | BreakExpr | test.rs:460:18:471:5 | BlockExpr | -| test.rs:467:13:467:26 | BreakExpr | test.rs:460:18:471:5 | BlockExpr | -| test.rs:479:13:479:26 | BreakExpr | test.rs:476:18:482:5 | BlockExpr | +| test.rs:34:17:34:21 | break | test.rs:28:9:40:9 | loop {...} | +| test.rs:48:21:48:25 | break | test.rs:46:13:53:13 | loop {...} | +| test.rs:50:21:50:32 | break ''outer | test.rs:45:9:54:9 | loop {...} | +| test.rs:52:17:52:28 | break ''inner | test.rs:46:13:53:13 | loop {...} | +| test.rs:91:17:91:21 | break | test.rs:88:9:94:9 | while ... { ... } | +| test.rs:101:17:101:21 | break | test.rs:99:9:103:9 | while ... { ... } | +| test.rs:109:17:109:21 | break | test.rs:107:9:112:9 | for i in ... { ... } | +| test.rs:117:13:117:26 | break ... | test.rs:116:9:118:9 | loop {...} | +| test.rs:197:17:197:28 | break ... | test.rs:195:13:200:9 | loop {...} | +| test.rs:210:17:210:35 | break ''label ... | test.rs:208:13:213:9 | loop {...} | +| test.rs:222:13:222:30 | break ''block ... | test.rs:221:13:223:9 | { ... } | +| test.rs:463:13:463:26 | break ''block ... | test.rs:460:18:471:5 | { ... } | +| test.rs:467:13:467:26 | break ''block ... | test.rs:460:18:471:5 | { ... } | +| test.rs:479:13:479:26 | break ''block ... | test.rs:476:18:482:5 | { ... } | continueTarget -| test.rs:37:17:37:24 | ContinueExpr | test.rs:28:9:40:9 | LoopExpr | -| test.rs:63:21:63:28 | ContinueExpr | test.rs:61:13:68:13 | LoopExpr | -| test.rs:65:21:65:35 | ContinueExpr | test.rs:59:9:69:9 | LoopExpr | -| test.rs:67:17:67:31 | ContinueExpr | test.rs:61:13:68:13 | LoopExpr | -| test.rs:77:21:77:28 | ContinueExpr | test.rs:75:13:82:13 | LoopExpr | -| test.rs:79:21:79:35 | ContinueExpr | test.rs:75:13:82:13 | LoopExpr | -| test.rs:81:17:81:31 | ContinueExpr | test.rs:75:13:82:13 | LoopExpr | +| test.rs:37:17:37:24 | continue | test.rs:28:9:40:9 | loop {...} | +| test.rs:63:21:63:28 | continue | test.rs:61:13:68:13 | loop {...} | +| test.rs:65:21:65:35 | continue 'outer | test.rs:59:9:69:9 | loop {...} | +| test.rs:67:17:67:31 | continue 'inner | test.rs:61:13:68:13 | loop {...} | +| test.rs:77:21:77:28 | continue | test.rs:75:13:82:13 | loop {...} | +| test.rs:79:21:79:35 | continue 'label | test.rs:75:13:82:13 | loop {...} | +| test.rs:81:17:81:31 | continue 'label | test.rs:75:13:82:13 | loop {...} | diff --git a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected index a54c75d0c17f..c8d53f467e99 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected @@ -1,16 +1,16 @@ models edges -| main.rs:21:13:21:21 | CallExpr : unit | main.rs:22:10:22:10 | s | provenance | | -| main.rs:32:13:32:21 | CallExpr : unit | main.rs:33:10:33:10 | s | provenance | | +| main.rs:21:13:21:21 | source(...) : unit | main.rs:22:10:22:10 | s | provenance | | +| main.rs:32:13:32:21 | source(...) : unit | main.rs:33:10:33:10 | s | provenance | | nodes -| main.rs:17:10:17:18 | CallExpr | semmle.label | CallExpr | -| main.rs:21:13:21:21 | CallExpr : unit | semmle.label | CallExpr : unit | +| main.rs:17:10:17:18 | source(...) | semmle.label | source(...) | +| main.rs:21:13:21:21 | source(...) : unit | semmle.label | source(...) : unit | | main.rs:22:10:22:10 | s | semmle.label | s | -| main.rs:32:13:32:21 | CallExpr : unit | semmle.label | CallExpr : unit | +| main.rs:32:13:32:21 | source(...) : unit | semmle.label | source(...) : unit | | main.rs:33:10:33:10 | s | semmle.label | s | subpaths testFailures #select -| main.rs:17:10:17:18 | CallExpr | main.rs:17:10:17:18 | CallExpr | main.rs:17:10:17:18 | CallExpr | $@ | main.rs:17:10:17:18 | CallExpr | CallExpr | -| main.rs:22:10:22:10 | s | main.rs:21:13:21:21 | CallExpr : unit | main.rs:22:10:22:10 | s | $@ | main.rs:21:13:21:21 | CallExpr : unit | CallExpr : unit | -| main.rs:33:10:33:10 | s | main.rs:32:13:32:21 | CallExpr : unit | main.rs:33:10:33:10 | s | $@ | main.rs:32:13:32:21 | CallExpr : unit | CallExpr : unit | +| main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | $@ | main.rs:17:10:17:18 | source(...) | source(...) | +| main.rs:22:10:22:10 | s | main.rs:21:13:21:21 | source(...) : unit | main.rs:22:10:22:10 | s | $@ | main.rs:21:13:21:21 | source(...) : unit | source(...) : unit | +| main.rs:33:10:33:10 | s | main.rs:32:13:32:21 | source(...) : unit | main.rs:33:10:33:10 | s | $@ | main.rs:32:13:32:21 | source(...) : unit | source(...) : unit | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index e12f2e14d199..3639294bd494 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -34,13 +34,13 @@ | main.rs:40:9:40:9 | [SSA] a | main.rs:43:10:43:10 | a | | main.rs:40:9:40:9 | a | main.rs:40:9:40:9 | [SSA] a | | main.rs:40:13:42:5 | loop {...} | main.rs:40:9:40:9 | a | -| main.rs:41:9:41:15 | (no string representation) | main.rs:40:13:42:5 | loop {...} | -| main.rs:41:15:41:15 | 1 | main.rs:41:9:41:15 | (no string representation) | +| main.rs:41:9:41:15 | break ... | main.rs:40:13:42:5 | loop {...} | +| main.rs:41:15:41:15 | 1 | main.rs:41:9:41:15 | break ... | | main.rs:44:9:44:9 | [SSA] b | main.rs:47:10:47:10 | b | | main.rs:44:9:44:9 | b | main.rs:44:9:44:9 | [SSA] b | | main.rs:44:13:46:5 | loop {...} | main.rs:44:9:44:9 | b | -| main.rs:45:9:45:23 | (no string representation) | main.rs:44:13:46:5 | loop {...} | -| main.rs:45:15:45:23 | source(...) | main.rs:45:9:45:23 | (no string representation) | +| main.rs:45:9:45:23 | break ... | main.rs:44:13:46:5 | loop {...} | +| main.rs:45:15:45:23 | source(...) | main.rs:45:9:45:23 | break ... | | main.rs:51:9:51:13 | [SSA] i | main.rs:52:10:52:10 | i | | main.rs:51:9:51:13 | i | main.rs:51:9:51:13 | [SSA] i | | main.rs:51:17:51:17 | 1 | main.rs:51:9:51:13 | i | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index ea439e78d5be..b4c292a93d9a 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -1,2 +1,24 @@ -ERROR: empty recursive call: dispatch predicate for CommentImpl::Impl::Comment::getCommentMarker (CommentImpl.qll:23,47-63) -ERROR: empty recursive call: dispatch predicate for CommentImpl::Impl::Comment::getText (CommentImpl.qll:36,34-41) +models +edges +| main.rs:19:13:19:21 | source(...) : unit | main.rs:20:10:20:10 | s | provenance | | +| main.rs:24:13:24:21 | source(...) : unit | main.rs:27:10:27:10 | c | provenance | | +| main.rs:31:13:31:21 | source(...) : unit | main.rs:36:10:36:10 | b | provenance | | +| main.rs:45:15:45:23 | source(...) : unit | main.rs:47:10:47:10 | b | provenance | | +nodes +| main.rs:15:10:15:18 | source(...) | semmle.label | source(...) | +| main.rs:19:13:19:21 | source(...) : unit | semmle.label | source(...) : unit | +| main.rs:20:10:20:10 | s | semmle.label | s | +| main.rs:24:13:24:21 | source(...) : unit | semmle.label | source(...) : unit | +| main.rs:27:10:27:10 | c | semmle.label | c | +| main.rs:31:13:31:21 | source(...) : unit | semmle.label | source(...) : unit | +| main.rs:36:10:36:10 | b | semmle.label | b | +| main.rs:45:15:45:23 | source(...) : unit | semmle.label | source(...) : unit | +| main.rs:47:10:47:10 | b | semmle.label | b | +subpaths +testFailures +#select +| main.rs:15:10:15:18 | source(...) | main.rs:15:10:15:18 | source(...) | main.rs:15:10:15:18 | source(...) | $@ | main.rs:15:10:15:18 | source(...) | source(...) | +| main.rs:20:10:20:10 | s | main.rs:19:13:19:21 | source(...) : unit | main.rs:20:10:20:10 | s | $@ | main.rs:19:13:19:21 | source(...) : unit | source(...) : unit | +| main.rs:27:10:27:10 | c | main.rs:24:13:24:21 | source(...) : unit | main.rs:27:10:27:10 | c | $@ | main.rs:24:13:24:21 | source(...) : unit | source(...) : unit | +| main.rs:36:10:36:10 | b | main.rs:31:13:31:21 | source(...) : unit | main.rs:36:10:36:10 | b | $@ | main.rs:31:13:31:21 | source(...) : unit | source(...) : unit | +| main.rs:47:10:47:10 | b | main.rs:45:15:45:23 | source(...) : unit | main.rs:47:10:47:10 | b | $@ | main.rs:45:15:45:23 | source(...) : unit | source(...) : unit | diff --git a/rust/ql/test/query-tests/diagnostics/DataFlowConsistencyCounts.expected b/rust/ql/test/query-tests/diagnostics/DataFlowConsistencyCounts.expected index 9c96e0fa3345..4d1cdfed89af 100644 --- a/rust/ql/test/query-tests/diagnostics/DataFlowConsistencyCounts.expected +++ b/rust/ql/test/query-tests/diagnostics/DataFlowConsistencyCounts.expected @@ -11,7 +11,7 @@ | Node has multiple PostUpdateNodes | 0 | | Node should have one enclosing callable | 0 | | Node should have one location | 0 | -| Node should have one toString | 1 | +| Node should have one toString | 0 | | Node should have one type | 0 | | Node steps to itself | 0 | | Nodes without location | 0 | diff --git a/rust/ql/test/query-tests/diagnostics/ExtractionWarnings.expected b/rust/ql/test/query-tests/diagnostics/ExtractionWarnings.expected index 1ebd7e232214..5ea7e808176e 100644 --- a/rust/ql/test/query-tests/diagnostics/ExtractionWarnings.expected +++ b/rust/ql/test/query-tests/diagnostics/ExtractionWarnings.expected @@ -3,5 +3,4 @@ | does_not_compile.rs:2:13:2:12 | expected SEMICOLON | Extraction warning in does_not_compile.rs with message expected SEMICOLON | 1 | | does_not_compile.rs:2:21:2:20 | expected SEMICOLON | Extraction warning in does_not_compile.rs with message expected SEMICOLON | 1 | | does_not_compile.rs:2:26:2:25 | expected SEMICOLON | Extraction warning in does_not_compile.rs with message expected SEMICOLON | 1 | -| does_not_compile.rs:2:32:2:31 | expected field name or number | Extraction warning in does_not_compile.rs with message expected field name or number | 1 | | error.rs:2:5:2:17 | An error! | Extraction warning in error.rs with message An error! | 1 | diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected index a3330d0eb1e8..a1ece2b1fd7b 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected @@ -1,12 +1,12 @@ -| Elements extracted | 376 | +| Elements extracted | 375 | | Elements unextracted | 0 | | Extraction errors | 0 | -| Extraction warnings | 7 | +| Extraction warnings | 6 | | Files extracted - total | 8 | | Files extracted - with errors | 2 | | Files extracted - without errors | 6 | | Inconsistencies - AST | 0 | | Inconsistencies - CFG | 0 | -| Inconsistencies - data flow | 1 | +| Inconsistencies - data flow | 0 | | Lines of code extracted | 59 | | Lines of user code extracted | 59 | diff --git a/rust/ql/test/query-tests/diagnostics/does_not_compile.rs b/rust/ql/test/query-tests/diagnostics/does_not_compile.rs index 9aedaffcd93a..15f85e1ab4bf 100644 --- a/rust/ql/test/query-tests/diagnostics/does_not_compile.rs +++ b/rust/ql/test/query-tests/diagnostics/does_not_compile.rs @@ -1,3 +1,3 @@ pub fn my_func() { - This is not correct Rust code. + This is not correct Rust code } From b4af5a61d12c8b4e9c45bfbcc4a0ae33716fcf31 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 20 Nov 2024 16:21:23 +0100 Subject: [PATCH 11/35] Rust: more advanced `toString` --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 826 +++++++++++------- rust/ql/.generated.list | 38 +- rust/ql/.gitattributes | 6 + rust/ql/lib/codeql/rust/elements.qll | 2 + .../ql/lib/codeql/rust/elements/BlockExpr.qll | 3 +- rust/ql/lib/codeql/rust/elements/ForExpr.qll | 3 +- .../codeql/rust/elements/LabelableExpr.qll | 13 + rust/ql/lib/codeql/rust/elements/LoopExpr.qll | 4 +- .../lib/codeql/rust/elements/LoopingExpr.qll | 13 + .../ql/lib/codeql/rust/elements/WhileExpr.qll | 3 +- .../rust/elements/internal/AwaitExprImpl.qll | 2 +- .../rust/elements/internal/BecomeExprImpl.qll | 2 +- .../rust/elements/internal/BlockExprImpl.qll | 6 +- .../rust/elements/internal/BoxPatImpl.qll | 2 +- .../rust/elements/internal/BreakExprImpl.qll | 19 +- .../rust/elements/internal/CallExprImpl.qll | 11 +- .../rust/elements/internal/CastExprImpl.qll | 4 +- .../elements/internal/ClosureExprImpl.qll | 2 +- .../elements/internal/ContinueExprImpl.qll | 17 +- .../rust/elements/internal/ElementImpl.qll | 8 + .../rust/elements/internal/FieldExprImpl.qll | 8 +- .../rust/elements/internal/ForExprImpl.qll | 4 +- .../rust/elements/internal/IfExprImpl.qll | 15 +- .../rust/elements/internal/IndexExprImpl.qll | 5 +- .../elements/internal/LabelableExprImpl.qll | 30 + .../rust/elements/internal/LetExprImpl.qll | 13 +- .../rust/elements/internal/LetStmtImpl.qll | 16 +- .../elements/internal/LiteralExprImpl.qll | 2 + .../rust/elements/internal/LiteralPatImpl.qll | 4 +- .../rust/elements/internal/LoopExprImpl.qll | 2 +- .../elements/internal/LoopingExprImpl.qll | 19 + .../rust/elements/internal/MatchArmImpl.qll | 15 +- .../rust/elements/internal/MatchExprImpl.qll | 4 +- .../rust/elements/internal/NeverTypeImpl.qll | 4 +- .../rust/elements/internal/OrPatImpl.qll | 4 +- .../rust/elements/internal/ParamImpl.qll | 15 +- .../rust/elements/internal/ParenExprImpl.qll | 2 +- .../rust/elements/internal/ParenPatImpl.qll | 2 +- .../rust/elements/internal/ParenTypeImpl.qll | 2 +- .../rust/elements/internal/PathExprImpl.qll | 4 +- .../rust/elements/internal/PathImpl.qll | 10 +- .../rust/elements/internal/PathPatImpl.qll | 4 +- .../elements/internal/PathSegmentImpl.qll | 4 +- .../rust/elements/internal/PathTypeImpl.qll | 4 +- .../rust/elements/internal/RangeExprImpl.qll | 24 +- .../elements/internal/RecordExprFieldImpl.qll | 11 +- .../rust/elements/internal/RefExprImpl.qll | 17 +- .../rust/elements/internal/RefPatImpl.qll | 11 +- .../rust/elements/internal/RestPatImpl.qll | 4 +- .../rust/elements/internal/ReturnExprImpl.qll | 8 +- .../elements/internal/UnderscoreExprImpl.qll | 4 +- .../rust/elements/internal/WhileExprImpl.qll | 4 +- .../elements/internal/WildcardPatImpl.qll | 4 +- .../elements/internal/generated/BlockExpr.qll | 18 +- .../elements/internal/generated/ForExpr.qll | 32 +- .../internal/generated/LabelableExpr.qll | 38 + .../elements/internal/generated/LoopExpr.qll | 34 +- .../internal/generated/LoopingExpr.qll | 38 + .../internal/generated/ParentChild.qll | 238 ++--- .../rust/elements/internal/generated/Raw.qll | 337 ++++--- .../elements/internal/generated/Synth.qll | 86 +- .../elements/internal/generated/WhileExpr.qll | 34 +- rust/ql/lib/rust.dbscheme | 266 +++--- .../generated/BlockExpr/BlockExpr.ql | 10 +- .../generated/ForExpr/ForExpr.ql | 10 +- .../generated/LoopExpr/LoopExpr.ql | 8 +- .../generated/WhileExpr/WhileExpr.ql | 12 +- .../library-tests/controlflow/Cfg.expected | 680 +++++++------- .../dataflow/barrier/inline-flow.expected | 16 +- .../dataflow/global/viableCallable.expected | 42 +- .../dataflow/local/DataFlowStep.expected | 38 +- .../dataflow/local/inline-flow.expected | 28 +- rust/schema/annotations.py | 28 +- 74 files changed, 1805 insertions(+), 1453 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/elements/LabelableExpr.qll create mode 100644 rust/ql/lib/codeql/rust/elements/LoopingExpr.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/LabelableExprImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/LoopingExprImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/LabelableExpr.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/LoopingExpr.qll diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 7335c95f7b8c..0f781aae8dab 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs cdfb9890318d847e6db320abd8b9e9939524ecc47bcdc8491b9c8253bd3178c2 cdfb9890318d847e6db320abd8b9e9939524ecc47bcdc8491b9c8253bd3178c2 +top.rs 7a5bbe75eae6069f4f255db13787a3575e706742af1f57122c02d46895de9a1b 7a5bbe75eae6069f4f255db13787a3575e706742af1f57122c02d46895de9a1b diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 13a0adecbca4..eb1f16f8cc66 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -3568,97 +3568,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct BlockExpr { - pub id: trap::TrapId, - pub attrs: Vec>, - pub is_async: bool, - pub is_const: bool, - pub is_gen: bool, - pub is_move: bool, - pub is_try: bool, - pub is_unsafe: bool, - pub label: Option>, - pub stmt_list: Option>, -} - -impl trap::TrapEntry for BlockExpr { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("block_exprs", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("block_expr_attrs", vec![id.into(), i.into(), v.into()]); - } - if self.is_async { - out.add_tuple("block_expr_is_async", vec![id.into()]); - } - if self.is_const { - out.add_tuple("block_expr_is_const", vec![id.into()]); - } - if self.is_gen { - out.add_tuple("block_expr_is_gen", vec![id.into()]); - } - if self.is_move { - out.add_tuple("block_expr_is_move", vec![id.into()]); - } - if self.is_try { - out.add_tuple("block_expr_is_try", vec![id.into()]); - } - if self.is_unsafe { - out.add_tuple("block_expr_is_unsafe", vec![id.into()]); - } - if let Some(v) = self.label { - out.add_tuple("block_expr_labels", vec![id.into(), v.into()]); - } - if let Some(v) = self.stmt_list { - out.add_tuple("block_expr_stmt_lists", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for BlockExpr { - fn class_name() -> &'static str { "BlockExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme BlockExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme BlockExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme BlockExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme BlockExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct BoxPat { pub id: trap::TrapId, @@ -4582,81 +4491,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct ForExpr { - pub id: trap::TrapId, - pub attrs: Vec>, - pub iterable: Option>, - pub label: Option>, - pub loop_body: Option>, - pub pat: Option>, -} - -impl trap::TrapEntry for ForExpr { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("for_exprs", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("for_expr_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.iterable { - out.add_tuple("for_expr_iterables", vec![id.into(), v.into()]); - } - if let Some(v) = self.label { - out.add_tuple("for_expr_labels", vec![id.into(), v.into()]); - } - if let Some(v) = self.loop_body { - out.add_tuple("for_expr_loop_bodies", vec![id.into(), v.into()]); - } - if let Some(v) = self.pat { - out.add_tuple("for_expr_pats", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for ForExpr { - fn class_name() -> &'static str { "ForExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ForExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ForExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ForExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ForExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct ForType { pub id: trap::TrapId, @@ -5168,6 +5002,51 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct LabelableExpr { + _unused: () +} + +impl trap::TrapClass for LabelableExpr { + fn class_name() -> &'static str { "LabelableExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LabelableExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LabelableExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LabelableExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LabelableExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct LetExpr { pub id: trap::TrapId, @@ -5559,66 +5438,58 @@ impl From> for trap::Label { } #[derive(Debug)] -pub struct LoopExpr { - pub id: trap::TrapId, - pub attrs: Vec>, - pub label: Option>, - pub loop_body: Option>, +pub struct MacroExpr { + pub id: trap::TrapId, + pub macro_call: Option>, } -impl trap::TrapEntry for LoopExpr { +impl trap::TrapEntry for MacroExpr { fn extract_id(&mut self) -> trap::TrapId { std::mem::replace(&mut self.id, trap::TrapId::Star) } fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("loop_exprs", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("loop_expr_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.label { - out.add_tuple("loop_expr_labels", vec![id.into(), v.into()]); - } - if let Some(v) = self.loop_body { - out.add_tuple("loop_expr_loop_bodies", vec![id.into(), v.into()]); + out.add_tuple("macro_exprs", vec![id.into()]); + if let Some(v) = self.macro_call { + out.add_tuple("macro_expr_macro_calls", vec![id.into(), v.into()]); } } } -impl trap::TrapClass for LoopExpr { - fn class_name() -> &'static str { "LoopExpr" } +impl trap::TrapClass for MacroExpr { + fn class_name() -> &'static str { "MacroExpr" } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of AstNode +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroExpr is a subclass of AstNode unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of Element +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroExpr is a subclass of Element unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of Expr +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroExpr is a subclass of Expr unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of Locatable +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroExpr is a subclass of Locatable unsafe { Self::from_untyped(value.as_untyped()) } @@ -5626,85 +5497,26 @@ impl From> for trap::Label { } #[derive(Debug)] -pub struct MacroExpr { - pub id: trap::TrapId, +pub struct MacroPat { + pub id: trap::TrapId, pub macro_call: Option>, } -impl trap::TrapEntry for MacroExpr { +impl trap::TrapEntry for MacroPat { fn extract_id(&mut self) -> trap::TrapId { std::mem::replace(&mut self.id, trap::TrapId::Star) } fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("macro_exprs", vec![id.into()]); + out.add_tuple("macro_pats", vec![id.into()]); if let Some(v) = self.macro_call { - out.add_tuple("macro_expr_macro_calls", vec![id.into(), v.into()]); + out.add_tuple("macro_pat_macro_calls", vec![id.into(), v.into()]); } } } -impl trap::TrapClass for MacroExpr { - fn class_name() -> &'static str { "MacroExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MacroExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MacroExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MacroExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MacroExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -#[derive(Debug)] -pub struct MacroPat { - pub id: trap::TrapId, - pub macro_call: Option>, -} - -impl trap::TrapEntry for MacroPat { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("macro_pats", vec![id.into()]); - if let Some(v) = self.macro_call { - out.add_tuple("macro_pat_macro_calls", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for MacroPat { - fn class_name() -> &'static str { "MacroPat" } +impl trap::TrapClass for MacroPat { + fn class_name() -> &'static str { "MacroPat" } } impl From> for trap::Label { @@ -7914,77 +7726,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct WhileExpr { - pub id: trap::TrapId, - pub attrs: Vec>, - pub condition: Option>, - pub label: Option>, - pub loop_body: Option>, -} - -impl trap::TrapEntry for WhileExpr { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("while_exprs", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("while_expr_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.condition { - out.add_tuple("while_expr_conditions", vec![id.into(), v.into()]); - } - if let Some(v) = self.label { - out.add_tuple("while_expr_labels", vec![id.into(), v.into()]); - } - if let Some(v) = self.loop_body { - out.add_tuple("while_expr_loop_bodies", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for WhileExpr { - fn class_name() -> &'static str { "WhileExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme WhileExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme WhileExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme WhileExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme WhileExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct WildcardPat { pub id: trap::TrapId, @@ -8166,6 +7907,106 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct BlockExpr { + pub id: trap::TrapId, + pub label: Option>, + pub attrs: Vec>, + pub is_async: bool, + pub is_const: bool, + pub is_gen: bool, + pub is_move: bool, + pub is_try: bool, + pub is_unsafe: bool, + pub stmt_list: Option>, +} + +impl trap::TrapEntry for BlockExpr { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("block_exprs", vec![id.into()]); + if let Some(v) = self.label { + out.add_tuple("labelable_expr_labels", vec![id.into(), v.into()]); + } + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("block_expr_attrs", vec![id.into(), i.into(), v.into()]); + } + if self.is_async { + out.add_tuple("block_expr_is_async", vec![id.into()]); + } + if self.is_const { + out.add_tuple("block_expr_is_const", vec![id.into()]); + } + if self.is_gen { + out.add_tuple("block_expr_is_gen", vec![id.into()]); + } + if self.is_move { + out.add_tuple("block_expr_is_move", vec![id.into()]); + } + if self.is_try { + out.add_tuple("block_expr_is_try", vec![id.into()]); + } + if self.is_unsafe { + out.add_tuple("block_expr_is_unsafe", vec![id.into()]); + } + if let Some(v) = self.stmt_list { + out.add_tuple("block_expr_stmt_lists", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for BlockExpr { + fn class_name() -> &'static str { "BlockExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme BlockExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme BlockExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme BlockExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme BlockExpr is a subclass of LabelableExpr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme BlockExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct CallExpr { pub id: trap::TrapId, @@ -8842,6 +8683,60 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct LoopingExpr { + _unused: () +} + +impl trap::TrapClass for LoopingExpr { + fn class_name() -> &'static str { "LoopingExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopingExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopingExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopingExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopingExpr is a subclass of LabelableExpr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopingExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct MacroCall { pub id: trap::TrapId, @@ -10005,3 +9900,270 @@ impl From> for trap::Label { } } } + +#[derive(Debug)] +pub struct ForExpr { + pub id: trap::TrapId, + pub label: Option>, + pub loop_body: Option>, + pub attrs: Vec>, + pub iterable: Option>, + pub pat: Option>, +} + +impl trap::TrapEntry for ForExpr { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("for_exprs", vec![id.into()]); + if let Some(v) = self.label { + out.add_tuple("labelable_expr_labels", vec![id.into(), v.into()]); + } + if let Some(v) = self.loop_body { + out.add_tuple("looping_expr_loop_bodies", vec![id.into(), v.into()]); + } + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("for_expr_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.iterable { + out.add_tuple("for_expr_iterables", vec![id.into(), v.into()]); + } + if let Some(v) = self.pat { + out.add_tuple("for_expr_pats", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for ForExpr { + fn class_name() -> &'static str { "ForExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ForExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ForExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ForExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ForExpr is a subclass of LabelableExpr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ForExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ForExpr is a subclass of LoopingExpr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +#[derive(Debug)] +pub struct LoopExpr { + pub id: trap::TrapId, + pub label: Option>, + pub loop_body: Option>, + pub attrs: Vec>, +} + +impl trap::TrapEntry for LoopExpr { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("loop_exprs", vec![id.into()]); + if let Some(v) = self.label { + out.add_tuple("labelable_expr_labels", vec![id.into(), v.into()]); + } + if let Some(v) = self.loop_body { + out.add_tuple("looping_expr_loop_bodies", vec![id.into(), v.into()]); + } + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("loop_expr_attrs", vec![id.into(), i.into(), v.into()]); + } + } +} + +impl trap::TrapClass for LoopExpr { + fn class_name() -> &'static str { "LoopExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of LabelableExpr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of LoopingExpr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +#[derive(Debug)] +pub struct WhileExpr { + pub id: trap::TrapId, + pub label: Option>, + pub loop_body: Option>, + pub attrs: Vec>, + pub condition: Option>, +} + +impl trap::TrapEntry for WhileExpr { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("while_exprs", vec![id.into()]); + if let Some(v) = self.label { + out.add_tuple("labelable_expr_labels", vec![id.into(), v.into()]); + } + if let Some(v) = self.loop_body { + out.add_tuple("looping_expr_loop_bodies", vec![id.into(), v.into()]); + } + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("while_expr_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.condition { + out.add_tuple("while_expr_conditions", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for WhileExpr { + fn class_name() -> &'static str { "WhileExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme WhileExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme WhileExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme WhileExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme WhileExpr is a subclass of LabelableExpr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme WhileExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme WhileExpr is a subclass of LoopingExpr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 1c56649d4761..3e240b0b61d7 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -11,7 +11,7 @@ lib/codeql/rust/elements/Attr.qll 53887a49513b95e38344b57d824a7474331467561f1edf lib/codeql/rust/elements/AwaitExpr.qll d8b37c01f7d27f0ec40d92a533a8f09a06af7ece1ae832b4ea8f2450c1762511 92cdb7ff0efddf26bed2b7b2729fddd197e26c1a11c8fec0c747aab642710c21 lib/codeql/rust/elements/BecomeExpr.qll 7a3cfc4894feb6be1cde664f675b18936434e68ccea52e55314c33d01491e34f 49666eca509b30d44bb02702bda67239c76bf8d9f231022c9cf6ecca123f8616 lib/codeql/rust/elements/BinaryExpr.qll 394522da3bc3a716fc7bc40c3560143ca840f5d210cfcba2a752c3026dd0f725 fbbd6fb79bf16a7d9820613654c584cd7ff3e7a29988f3920b6cfbe746acfd8d -lib/codeql/rust/elements/BlockExpr.qll b952fd44b89de248931d4089834d2c9406f6f2fc1a3f5c2365156be4e55157cf daccc07ab11ac696679b9fadc99f40b1bf579c90bf6c7cca6e82eaa313932ede +lib/codeql/rust/elements/BlockExpr.qll b5cf57119b15f27d0bc258dfa375b0ef2730c157870ff543f0dc7a8cfe514182 f6a01999606b010c81ef9c6ff1385e6640632b6f5ce067ffeb0ef0af0a0aeb92 lib/codeql/rust/elements/BoxPat.qll 1b2c3fff171aa6aa238c9460b122f26c79e04577cea67fa856de99842ba873d4 0caf8d23ed6e0997a6b8751def27641582151fba6e24fccf798712a4690b42f1 lib/codeql/rust/elements/BreakExpr.qll 7ca3807a20e9a9a988d1fd7abebf240325ed422fcb45c719ba46272f031f94db dffb7379d3f3ba220acfbd05eb7bb6cfd9cfda211e9c8b1f5240ca5fa61be3fc lib/codeql/rust/elements/CallExpr.qll f336500ca7a611b164d48b90e80edb0c0d3816792b0ececce659ac1ff1ffeb3e f99a9c55466418ef53860c44d9f2d6161af4b492178ddd9e5870dff742b70ae5 @@ -38,7 +38,7 @@ lib/codeql/rust/elements/ExternItemList.qll bc96f188970e8dc0cd1e77dea3e49b715edf lib/codeql/rust/elements/FieldExpr.qll 8102cd659f9059cf6af2a22033cfcd2aae9c35204b86f7d219a05f1f8de54b3b f818169dddf5102095ae1410583615f80031376a08b5307d0c464e79953c3975 lib/codeql/rust/elements/FieldList.qll bd243adc4696c60f636055a1c2da28039fe2028476c9247eb6a68003b849b757 ab63cdf410afd1e515f873b49f46bb5c2bf27e6c78fd206ccbdba064c4c0a4b2 lib/codeql/rust/elements/FnPtrType.qll c4a90dc660cf620972dc23b95494f5caf9f050eabd4bdb52fdc061f8797ba9a1 f8defc91582fa503607664668f9e2e6c2cd8b320c7c449610f21e52e332a129f -lib/codeql/rust/elements/ForExpr.qll 312804d53dd9236a2f2a15c9d6ec348b46e139a54eb5893e7e12487725df7444 fa5e20099b1179033bc209bad3548e3d1d4019c7fe0e455cec8ca1a9d48692ab +lib/codeql/rust/elements/ForExpr.qll 0cc8bfe10b8baf62a1ff65c8463cfb17ab64b41c30c9e1edb962a227df2036d9 b1be73294e6da0f49fd32177ad0b05fecf26081d5ce424f288be99a4bd59cc84 lib/codeql/rust/elements/ForType.qll 0036bed8749358c356d78c4a0eef40d73e2796284293cde5604ae70ddd6d0470 4edcaf8f7c67d42ebe3ebb1be6a7643758717d4fe88f5f648b6a1c5ff4ee4de7 lib/codeql/rust/elements/Format.qll 506172d176f4b965f428585c032464f4abe07a0e47c574f8e011d8641ec45370 653e81bf233b8729649064de64f4a7a8533f8864ac6d2ea913f347088c924c60 lib/codeql/rust/elements/FormatArgsArg.qll 5bc9b4cd1bac7131165836e93838c45452a08ea6011741cbddace3cbf9c69440 f825140e98dc9800d5c045402186793c7b21511448e2f6bf6402d1e06305219c @@ -59,6 +59,7 @@ lib/codeql/rust/elements/InferType.qll c71184ae6aa181be94e299882503350e057493e17 lib/codeql/rust/elements/Item.qll 5c9148ff0eaeb4404c2d8156e7df0ef5753fd44ead972da05a49659ddaa25480 78446f788617e40525d4d4b489848e75f2143a90e18d40974c3bff7b1e7c825c lib/codeql/rust/elements/ItemList.qll c33e46a9ee45ccb194a0fe5b30a6ad3bcecb0f51486c94e0191a943710a17a7d 5a69c4e7712b4529681c4406d23dc1b6b9e5b3c03552688c55addab271912ed5 lib/codeql/rust/elements/Label.qll a31d41db351af7f99a55b26cdbbc7f13b4e96b660a74e2f1cc90c17ee8df8d73 689f87cb056c8a2aefe1a0bfc2486a32feb44eb3175803c61961a6aeee53d66e +lib/codeql/rust/elements/LabelableExpr.qll 598be487cd051b004ab95cbbc3029100069dc9955851c492029d80f230e56f0d 92c49b3cfdaba07982f950e18a8d62dae4e96f5d9ae0d7d2f4292628361f0ddc lib/codeql/rust/elements/LetElse.qll 85d16cb9cb2162493a9bacfe4b9e6a3b325d9466175b6d1a8e649bdf2191b864 c268d0878e9f82e8ede930b3825745c39ab8cd4db818eb9be6dc5ca49bee7579 lib/codeql/rust/elements/LetExpr.qll 435f233890799a9f52972a023e381bc6fe2e0b3df1e696dc98b21682a3c1d88e b34da72dd222a381e098f160551ec614ebb98eb46af35c6e1d337e173d8ec4b9 lib/codeql/rust/elements/LetStmt.qll e589d750ff87c25e28e15dab61e1a3555a45ced42158b05c991c6f5873abd86a 383484181b825cd7bc20e014fc4d5888f66e1f257502e1893f3d55aed2cdef3d @@ -68,7 +69,8 @@ lib/codeql/rust/elements/LifetimeParam.qll db9f2c7bb32d49808993b400875e79560ac54 lib/codeql/rust/elements/LiteralExpr.qll 40b67404b7c2b81e5afabc53a2a93e0a503f687bb31a2b4bfa4e07b2d764eb8d 67ab1be2286e769fba7a50ca16748e3c141760ccaefaebae99faa71f523a43d5 lib/codeql/rust/elements/LiteralPat.qll daffb5f380a47543669c8cc92628b0e0de478c3ac82685802c63e8d75a206bed adfe9796598cf6ca4a9170c89ffd871e117f1cea6dd7dd80ecbbb947327a1a5d lib/codeql/rust/elements/Locatable.qll 2855efa4a469b54e0ca85daa89309a8b991cded6f3f10db361010831ba1e11d3 00c3406d14603f90abea11bf074eaf2c0b623a30e29cf6afc3a247cb58b92f0f -lib/codeql/rust/elements/LoopExpr.qll 58ade0bc4a01a1cc361363682fde3ea56f4c5fbb4b28f5723ceff52ebaf897d7 fa299162c742bcf3b2211dc20821b312e3c133350c288a050eb26e6f8b5a5c78 +lib/codeql/rust/elements/LoopExpr.qll ee171177650fa23eef102a9580765f4b6073a1cc41bab1ec31ad4f84ffe6c2c9 bfcf0cca4dc944270d9748a202829a38c64dfae167c0d3a4202788ceb9daf5f6 +lib/codeql/rust/elements/LoopingExpr.qll 7ad7d4bbfd05adc0bb9b4ca90ff3377b8298121ca5360ffb45d5a7a1e20fe37a 964168b2045ee9bad827bba53f10a64d649b3513f2d1e3c17a1b1f11d0fc7f3a lib/codeql/rust/elements/MacroCall.qll a39a11d387355f59af3007dcbab3282e2b9e3289c1f8f4c6b96154ddb802f8c3 88d4575e462af2aa780219ba1338a790547fdfc1d267c4b84f1b929f4bc08d05 lib/codeql/rust/elements/MacroDef.qll acb39275a1a3257084314a46ad4d8477946130f57e401c70c5949ad6aafc5c5f 6a8a8db12a3ec345fede51ca36e8c6acbdce58c5144388bb94f0706416fa152a lib/codeql/rust/elements/MacroExpr.qll ea9fed13f610bab1a2c4541c994510e0cb806530b60beef0d0c36b23e3b620f0 ad11a6bbd3a229ad97a16049cc6b0f3c8740f9f75ea61bbf4eebb072db9b12d2 @@ -160,7 +162,7 @@ lib/codeql/rust/elements/VariantList.qll 07adfe5750b2d5b50c8629f36feba24edd84f75 lib/codeql/rust/elements/Visibility.qll d2cf0727efaf8df6b3808cb4a6b2e26d18e42db766d92e97ad3ef046d91cb9e5 8947a1e2d48b532c6455ddf143fa5b1dff28c40da1f1c6a72769fc9db7ecbaf6 lib/codeql/rust/elements/WhereClause.qll da51212766700e40713fff968078a0172a4f73eebc5425d8e0d60b03c2fe59fa 0ec036aea729b8f4af0eb8118911dce715e2eb4640ae7b5e40a007a48da03899 lib/codeql/rust/elements/WherePred.qll 4815cd8f2a536c895e1f6831bef2ee6b9ea42c4fea12df1f164de1c965795bc1 3b46806767d81218d2e21656afe39c957c364ff7067c9af3ae8bacbf7f93858b -lib/codeql/rust/elements/WhileExpr.qll 9c12c26f953163c70020669327bd8c931493ef7fb4b75e6711202c0bab1d2697 2e2c96425bcd4414c65d9069a71a5123a3a10dd1449cafc121ac08f91ea49728 +lib/codeql/rust/elements/WhileExpr.qll 9e0c23057bf3fa3e050d5f6de0650f554ce576861783ea7d1e4c7d35db129ad3 b294c4f6e4dea922a4274779287edcb484409b2654a553298626ded9d1e8c5a4 lib/codeql/rust/elements/WildcardPat.qll 4f941afc5f9f8d319719312399a8f787c75a0dbb709ec7cf488f019339635aab a9140a86da752f9126e586ddb9424b23b3fb4841a5420bac48108c38bb218930 lib/codeql/rust/elements/YeetExpr.qll 4172bf70de31cab17639da6eed4a12a7afcefd7aa9182216c3811c822d3d6b17 88223aab1bef696f508e0605615d6b83e1eaef755314e6a651ae977edd3757c3 lib/codeql/rust/elements/YieldExpr.qll de2dc096a077f6c57bba9d1c2b2dcdbecce501333753b866d77c3ffbe06aa516 1f3e8949689c09ed356ff4777394fe39f2ed2b1e6c381fd391790da4f5d5c76a @@ -184,6 +186,7 @@ lib/codeql/rust/elements/internal/AwaitExprConstructor.qll 44ff1653e73d5b9f6885c lib/codeql/rust/elements/internal/BecomeExprConstructor.qll ba073aaa256cb8827a0307c3128d50f62b11aac0b1f324e48c95f30351a9b942 3a787ded505c3158fa4f4923f66e8ecdcb7b5f86f27f64c5412dc32dca031f18 lib/codeql/rust/elements/internal/BinaryExprConstructor.qll 7f9b17757f78b9fb7c46e21d2040a77fa50083bef4911c8464991c3d1ad91d87 a59390cd8e896c0bfbdc9ba0674e06d980ffcefa710fbc9886be52ed427e9717 lib/codeql/rust/elements/internal/BlockExprConstructor.qll 438337c807645e98a01440f3f4610d68b0567ba15c8f51dc43bf5a30c9af3696 48ce7a546910c884619762349b8ada9836284f8008298fdb0070a38f7ddf25a0 +lib/codeql/rust/elements/internal/BlockExprImpl.qll 36ac09e4a6eeeec22919b62b1d004bdb5bb2527e67932c308aec383a770768d6 3b4b2a2014f6fe075c63a2d633b297566b548ef2e4343cadf067a9edbcadc876 lib/codeql/rust/elements/internal/BoxPatConstructor.qll 153f110ba25fd6c889092bfd16f73bb610fa60d6e0c8965d5f44d2446fcd48a2 9324cf0d8aa29945551bf8ab64801d598f57aab8cd4e19bcd4e9ef8a4a4e06eb lib/codeql/rust/elements/internal/BreakExprConstructor.qll 356be043c28e0b34fdf925a119c945632ee883c6f5ebb9a27003c6a8d250afd9 bb77e66b04bb9489340e7506931559b94285c6904b6f9d2f83b214cba4f3cfd5 lib/codeql/rust/elements/internal/CallExprBaseImpl.qll d2749cc1a9d7ee8bf7f34b6c3e0238a576a68e439a8c10a503c164ff45ffcbeb ffc7b0a8841945fe6736b0e1aed7d9ed69185db03dee2b16da121325b39397c7 @@ -256,6 +259,7 @@ lib/codeql/rust/elements/internal/LifetimeParamImpl.qll 8909288801bff8d3e87096df lib/codeql/rust/elements/internal/LiteralExprConstructor.qll 8ea3569bd50704ce7d57be790d2dfd38f4c40cb0b12e0dd60d6830e8145a686f 88d07ad3298003f314f74bd8e3d64a3094de32080ad42a7e6741c416c3856095 lib/codeql/rust/elements/internal/LiteralPatConstructor.qll b660cb428a0cba0b713fc7b07d5d2921de4a2f65a805535fb6387684c40620de 2dbc9fbc56e9de53d24265d6b13738ef5b9ced33cc3c4c1c270e04dc2fc1330f lib/codeql/rust/elements/internal/LoopExprConstructor.qll 45f3f8f7441fcab6adc58831421679ee07bac68ac0417f3cbc90c97426cc805b f7ab3361b4a11e898126378ea277d76949466946762cd6cb5e9e9b4bb9860420 +lib/codeql/rust/elements/internal/LoopingExprImpl.qll 17885c1bcf7b5a3f9c7bbad3d4d55e24372af0dedd5e7fc0efcfc0a8b2cdad70 104dc45ca399b9f6e8227ad561679f728d60170398a52b31fc90cb2a2dd3c33c lib/codeql/rust/elements/internal/MacroCallConstructor.qll 707fee4fba1fd632cd00128f493e8919eaaea552ad653af4c1b7a138e362907d b49e7e36bf9306199f2326af042740ff858871b5c79f6aeddf3d5037044dbf1f lib/codeql/rust/elements/internal/MacroDefConstructor.qll 382a3bdf46905d112ee491620cc94f87d584d72f49e01eb1483f749e4709c055 eb61b90d8d8d655c2b00ff576ae20c8da9709eeef754212bc64d8e1558ad05ce lib/codeql/rust/elements/internal/MacroDefImpl.qll f26e787ffd43e8cb079db01eba04412dbf32c338938acf1bc09a2f094bbdfdfe 044f43bc94fe4b6df22afae32e9f039d1d0d9e85ad9f24b6388be71211c37ce5 @@ -420,7 +424,7 @@ lib/codeql/rust/elements/internal/generated/Attr.qll 2e7983b2c462750065ed58cc10c lib/codeql/rust/elements/internal/generated/AwaitExpr.qll 1d71af702a1f397fb231fae3e0642b3deeba0cd5a43c1d8fabdff29cac979340 e0bfa007bdecc5a09a266d449d723ae35f5a24fbdfc11e4e48aeea3ec0c5147c lib/codeql/rust/elements/internal/generated/BecomeExpr.qll 7a211b785a4a2f961242d1d73fd031d381aad809f7b600ce7f7f864518bb7242 17a0388680007871748cfdc6621f700a7c2817b9601e1bd817fb48561e7c63ad lib/codeql/rust/elements/internal/generated/BinaryExpr.qll 64e9bd9c571edd6e5f3e7662b956b1d87fa0354ce6fe95da9caf25ac16b66c68 3fca09fdbe879db2ca3293618896a462e96376a2963d15cce3d5b1baac552fcb -lib/codeql/rust/elements/internal/generated/BlockExpr.qll ccfbdc7bd268735a0424ff08dcf37d0e1fed61d5fe0520593c23f2490d400438 0facad59f6aba13ee0c069b691c99f52c04b723a2bfad4da226190c3c42dcabf +lib/codeql/rust/elements/internal/generated/BlockExpr.qll 5a5ddbe34bc478a7bd9b0d07d3b6f017c2d1f20581d859251a963314e6514d1f 9804c30b8b279038b864c52557535f854bd012bacdfe8e5840f1f777c74e52df lib/codeql/rust/elements/internal/generated/BoxPat.qll ec946a3e671ab7417e04b0207967adad004df512c570c4f0780ca5816d12d75f b0e64860855c4e85914042b1a51034899ff7cd1b2c6857188de89310a2726ea3 lib/codeql/rust/elements/internal/generated/BreakExpr.qll 0f428a8b2f4209b134c2ffc3e1c93c30bc6b0e9c9172f140cefa88c1f77d8690 957b39f38ff6befe9061f55bc0b403c2f1c366dd0cf63b874bae6f8216576d76 lib/codeql/rust/elements/internal/generated/CallExpr.qll 23ee64e3bf643cd5e6ff705181d2bb31e1aeaffecb5bdce73836172dbf15f12f 34b280139b1f8f70d78e1432392f03c971be392e8cb68d014eb325d0c101bddd @@ -447,7 +451,7 @@ lib/codeql/rust/elements/internal/generated/ExternItemList.qll 6bc97fdae6c411cab lib/codeql/rust/elements/internal/generated/FieldExpr.qll 3e506b5cb93793ec30f56bb637a600db869fcba6181b068516a671d55c362739 7bbf953696d763ad6b210f378f487ba85b875fa115b22c0c0508599a63633502 lib/codeql/rust/elements/internal/generated/FieldList.qll 43c13c6e3c9ba75a7a4cb870fc4f18752001584d48b9df0734055a6ebb789331 7c51b0b13eb02f1286d3365e53a976ba2655c4dbd8e735bc11c8b205c829e1ee lib/codeql/rust/elements/internal/generated/FnPtrType.qll 748d766dbefd19a7d644734c57885eeede66897029bbfe1b87919517f43bfde2 5a7d80acc00e56594ed85026a8ea4923104d2e98c2e42db8c5bcd32ddd164e48 -lib/codeql/rust/elements/internal/generated/ForExpr.qll 541b62b48911d4999f9ed64ab6c8b9910073ac4add0225761f319677328cf120 976c3a91c9eedfb1e2d9ea76ac501348643b3d23c723d7a777042258d416d091 +lib/codeql/rust/elements/internal/generated/ForExpr.qll d81751e9599874a1292a0aace80b2de60ab36fc43f74ec08fbdfe044fc19e5c1 34a64586f8ffbadd44d0e747f69ab550a16149b658a9c92d9593689cb9a4f6fc lib/codeql/rust/elements/internal/generated/ForType.qll 3d43d044a1189281f09c55caafb6c8020a836f49e2866077086101925a573cf2 646b59bfd1b428aaf7211f574c49f79cb4c6a79ca151aa0663b2b31480298721 lib/codeql/rust/elements/internal/generated/Format.qll 37ad20cf2bf363b4027a8913d095292c8a4eb8ccdf2a9965f2fb7d41930f9bfe 329b89cdd75ce951269273dd18897e32ff5cfcc94f451001c64143386c1e48dd lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll e07a1ae310f590003f1b88fada7dcf4847c99adb9d4c838d1c88e66e1da85c5f 0ef7342451fe2cb06e765fb4b33bb8c4a9b927f5edbc8feb5c6ba3655697f447 @@ -468,6 +472,7 @@ lib/codeql/rust/elements/internal/generated/InferType.qll 23ee25135c59ea5578cdf7 lib/codeql/rust/elements/internal/generated/Item.qll 25e645cb41222c21065798fb6cb0488bfef007aeb9b89717f58913f9b29d5559 3146941e55db2ff7c51ec030b4414e20d66d154cf6854b1a3fa42e74a09dfb77 lib/codeql/rust/elements/internal/generated/ItemList.qll 73c8398a96d4caa47a2dc114d76c657bd3fcc59e4c63cb397ffac4a85b8cf8ab 540a13ca68d414e3727c3d53c6b1cc97687994d572bc74b3df99ecc8b7d8e791 lib/codeql/rust/elements/internal/generated/Label.qll 6630fe16e9d2de6c759ff2684f5b9950bc8566a1525c835c131ebb26f3eea63e 671143775e811fd88ec90961837a6c0ee4db96e54f42efd80c5ae2571661f108 +lib/codeql/rust/elements/internal/generated/LabelableExpr.qll 896fd165b438b60d7169e8f30fa2a94946490c4d284e1bbadfec4253b909ee6c 5c6b029ea0b22cf096df2b15fe6f9384ad3e65b50b253cae7f19a2e5ffb04a58 lib/codeql/rust/elements/internal/generated/LetElse.qll 7ca556118b5446bfc85abba8f0edd4970e029b30d414ea824a1b5f568310a76c a403540881336f9d0269cbcdb4b87107a17ab234a985247dc52a380f150a1641 lib/codeql/rust/elements/internal/generated/LetExpr.qll 9af0f89b294c8a0a751317e7074fe370339563d36c1df4911d1ea082a4df77fd 68272593d1feb88990bfbd0b8c222776f085e49694894384fc6d96e9464ba734 lib/codeql/rust/elements/internal/generated/LetStmt.qll aa1852db86ec29f857a90677f0c6b4a07f0fd965fc193d4141be95ce15862fca 40f32a37c0cc161b099fe0b4c7d713da928781d3e2c3de90db991df1d9062647 @@ -477,7 +482,8 @@ lib/codeql/rust/elements/internal/generated/LifetimeParam.qll bcbde38bfb99034e47 lib/codeql/rust/elements/internal/generated/LiteralExpr.qll f3a564d0a3ed0d915f5ab48e12246777e4972ad987cd9deaafeb94cf407b2877 2337c3d5f60361bd10f6aeca301e88255f5dffb85301cf36cbbfa1a65bfad1cd lib/codeql/rust/elements/internal/generated/LiteralPat.qll ecc2bfe559abfce1be873fbf7b61b5728897c9afc3bb3f69551d8320d273da71 42196fb6a4a0ff9b570fd0bdbc920f24744b3f46772efbb46648af7fbfe1fbda lib/codeql/rust/elements/internal/generated/Locatable.qll c897dc1bdd4dfcb6ded83a4a93332ca3d8f421bae02493ea2a0555023071775e b32d242f8c9480dc9b53c1e13a5cb8dcfce575b0373991c082c1db460a3e37b8 -lib/codeql/rust/elements/internal/generated/LoopExpr.qll 22b755dfaf238ecea722c0c94c399992014e23481ec6fdd61f803bbec012b6f9 08731630c2dc05aa1e0ada222a6057752d9ce737329c62076708828247a358be +lib/codeql/rust/elements/internal/generated/LoopExpr.qll db6bc87e795c9852426ec661fa2c2c54106805897408b43a67f5b82fb4657afd 1492866ccf8213469be85bbdbcae0142f4e2a39df305d4c0d664229ecd1ebdb9 +lib/codeql/rust/elements/internal/generated/LoopingExpr.qll 0792c38d84b8c68114da2bbdfef32ef803b696cb0fd06e10e101756d5c46976c 111fe961fad512722006323c3f2a075fddf59bd3eb5c7afc349835fcec8eb102 lib/codeql/rust/elements/internal/generated/MacroCall.qll fc8988696493992cc4fdce8c0e5610c54ee92ea52ebb05262338f8b612353f50 188a2d7a484bd402a521787371e64f6e00e928306c8d437e6b19bf890a7aa14e lib/codeql/rust/elements/internal/generated/MacroDef.qll e9b3f07ba41aa12a8e0bd6ec1437b26a6c363065ce134b6d059478e96c2273a6 87470dea99da1a6afb3a19565291f9382e851ba864b50a995ac6f29589efbd70 lib/codeql/rust/elements/internal/generated/MacroExpr.qll 03a1daa41866f51e479ac20f51f8406d04e9946b24f3875e3cf75a6b172c3d35 1ae8ca0ee96bd2be32575d87c07cc999a6ff7770151b66c0e3406f9454153786 @@ -504,7 +510,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 -lib/codeql/rust/elements/internal/generated/ParentChild.qll b4d25c43ed44715053255c3c2f8aeb8d21826adc365f24026b2123a4f25cba86 1bc4bb0380a1a8b69055ffeac203b11b2a1b94e5ad88d1b32ff659e8feb26016 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 2237ba700c7d790cbbf7ad4d86889d22c6d210af62474ad8d363d79abb574722 36f9d47b002a241f0f793816ca9e6327fbbefb02268665553c56ded6012f82ec lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll f2b1be2f8f44001a6533533c978c4a9a8b7d64838d6f39eef5f0c0e7890611b8 d724a00a38f42429ffa8fb3bffbb5ec69e16a32ceeeb1d1f026fc7adf87424a8 lib/codeql/rust/elements/internal/generated/PathExpr.qll 2096e3c1db22ee488a761690adabfc9cfdea501c99f7c5d96c0019cb113fc506 54245ce0449c4e263173213df01e079d5168a758503a5dbd61b25ad35a311140 @@ -517,7 +523,7 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 40099c5a4041314b66932dfd lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll 5f83209cda8319c5c6c932631b60c6f2163d2d9cf7be63f63523e2206c01d004 3581039746e86365f37644e86ac2c89d67e2123aa1b039d9e0afdffc7156c96d +lib/codeql/rust/elements/internal/generated/Raw.qll 462d87edee9e0fc463f789a765e19d94c4c027a73db876ad306f918dd87e9511 33a6782598a6ba0e02e6b772b5b74ebbe609b0bc3a92180f85db7472e00aa8d9 lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -543,7 +549,7 @@ lib/codeql/rust/elements/internal/generated/Static.qll 5fbd6879858cf356d4bdaa6da lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 lib/codeql/rust/elements/internal/generated/Struct.qll 4d57f0db12dc7ad3e31e750a24172ef1505406b4dab16386af0674bd18bf8f4b 1a73c83df926b996f629316f74c61ea775be04532ab61b56af904223354f033e -lib/codeql/rust/elements/internal/generated/Synth.qll 1ba88215c3f0640558a644534b954e4b93acb15a0f51a1e4887230f451718aa9 747eb3bec1c7245e59ea2b500604f5b4e614e4f061473d1a22fa398ee48ba080 +lib/codeql/rust/elements/internal/generated/Synth.qll 0e5767568fd119df13928adf00950586f5f9f355dae520059b2d6daa7a2bda56 219b40f6458fec2cc436dc2cf80bb1dbfb34dfdbe8576606b5e25f78d36d6210 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll e929c49ea60810a2bbc19ad38110b8bbaf21db54dae90393b21a3459a54abf6f e929c49ea60810a2bbc19ad38110b8bbaf21db54dae90393b21a3459a54abf6f lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c @@ -574,11 +580,11 @@ lib/codeql/rust/elements/internal/generated/VariantList.qll 4eb923ca341033c256ca lib/codeql/rust/elements/internal/generated/Visibility.qll aba81820f30bed0fd2cd06831f7256af15ae32525b2a437896420b4cc067ea38 d6aed90b27124b812daf2ddd14b4e181277cbe638b4ccaab74e27681ac30e4ab lib/codeql/rust/elements/internal/generated/WhereClause.qll d6c8f72bbec5d71c024f0d365c1c5e474f4d24ded0d34c56c1f66b1e4a384e9d ed14311d140eee00d3b26a4972f53e20d5af1bddf88fb5618e7e2d3ae1d816f3 lib/codeql/rust/elements/internal/generated/WherePred.qll 342050e824ca6eb6116488d46cfc03efa79193b4de6049e1f5d4a9fe527b3036 ed07a81de7d63f853c93cbb7291eea3d7169953e34c2f2f98b570028dd1f8cd9 -lib/codeql/rust/elements/internal/generated/WhileExpr.qll fec8a9211b82a80601bf731db17409c5de6bf145295623bd86e28f96452fd91d 3916cf0c0e3b82b834727fc37809dd3e158f395bdf39971abe40b98e5f95a4d2 +lib/codeql/rust/elements/internal/generated/WhileExpr.qll 7edf1f23fbf953a2baabcdbf753a20dff9cf2bc645dcf935f1e68f412971a8f7 d2fa7ada1f48f6b4566c75747584068e925be925d39d6e6ebf61d21bde3b6522 lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll 173d5ffbcc2874757033caab37559e84dbcbfed319730f8e41a4e9e10b146835 173d5ffbcc2874757033caab37559e84dbcbfed319730f8e41a4e9e10b146835 +lib/codeql/rust/elements.qll 76fe494d20d2665777bcb5c5ced016a262789a0e6aa874c1a77ce4cb134422b6 76fe494d20d2665777bcb5c5ced016a262789a0e6aa874c1a77ce4cb134422b6 test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52 test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684 @@ -614,7 +620,7 @@ test/extractor-tests/generated/BinaryExpr/BinaryExpr_getAttr.ql 26d985ac4b668d78 test/extractor-tests/generated/BinaryExpr/BinaryExpr_getLhs.ql c3f19d8a60066ad6b1810291a669473c75b659cd2f6ac3ab9ed3db2203d4145c c05c5e0226e30f923155669ffc79cfe63af1ca464e8dfc85888dda5f7049711b test/extractor-tests/generated/BinaryExpr/BinaryExpr_getOperatorName.ql 33612159be1c111e3306009d0b04579450fc962a81119b6ea4e255d3c409b401 1a0995b298f50242217cfef81dca8ac978e19e06f90a5f4caadcb6f84460fec2 test/extractor-tests/generated/BinaryExpr/BinaryExpr_getRhs.ql 3bcd36b678e87d5c29a43b69c54c80468a89aefa7e69481b48158ae794a53160 a629dc1472b3f6fd7c608ff760e83d8e1363db81dfe9a4b2968690c2ba4925ca -test/extractor-tests/generated/BlockExpr/BlockExpr.ql 0ab66b190d4e2aa784e61088c4779ef4d08cb4453677ea087c4f9aa369494bc2 1c3b5794008114d1297695d82590220929e3974e27836b2c6062d14b73379a40 +test/extractor-tests/generated/BlockExpr/BlockExpr.ql 19caa39aaa39356219dda740b7152f85e43a4f8d6295841e2c535c7e3bda7a5a bd668574ba41021e758e391d4790b871439badb2486ccf6a5aaf788ad6ae4142 test/extractor-tests/generated/BlockExpr/BlockExpr_getAttr.ql 15d4d9853d3262ce6ec629c075c60a76eb112dcafe34b71df0e09b39282223cf 792c498bc7079bb5b93034b8a87db3b275a591d78954e844821aeacffe4258ea test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.ql de3c28a2677ed71ebd95207aa43ce270765f7f556283f095f1f6296622b80cbc 414ebbb2bfbe4350f933fc3d3636b49a6bb8242e200180780caf95ab8523adb0 test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.ql 8c391dfeb69bd92c547a2417bf231cc960a8f34845802722214294728772316a f3e847fa594e9d9cf25d09a0396a10176aad1100c1977a24756ff6287a79e69e @@ -698,7 +704,7 @@ test/extractor-tests/generated/FnPtrType/FnPtrType.ql 50b76d678582cd0b8d7cc4a765 test/extractor-tests/generated/FnPtrType/FnPtrType_getAbi.ql de1706382c2980c02dbdd295e0a2320c992afa3f19af0c2378b9980a7cd0c481 a3fa36711949d9d5ac53cc5dd39cb19b397c3f2e47c1d457df470c6e5142f9be test/extractor-tests/generated/FnPtrType/FnPtrType_getParamList.ql 9ea393acf37919e2fd1bbc16e738440e00a56552bf80baef9bfd2a9a405afb93 3b4237b22eea569cef0081eb3ea16b2d0f01f8f070f21e16390267e9cbe0cf57 test/extractor-tests/generated/FnPtrType/FnPtrType_getRetType.ql 57f662e4778e1bf4103f061bb8085def0708528f94045c9ff4a95ce802fff13d 924b924c7d766458e956afa0963e6eb1bfc083e5f9aeae64cf2d08929f79612c -test/extractor-tests/generated/ForExpr/ForExpr.ql eff335a301b9a71292bb6da0dffdf901c7a51df9960e9250f9eb980aaaa0c7ae ce7ab100c21c6fc334a4445b2ee311ae6c67992ef659ca32c94d60ac884936e3 +test/extractor-tests/generated/ForExpr/ForExpr.ql 1f8b7a9bbe7a8c077864be64dc51d91ec267c4f34f1cad80fc79902cc0af04ff ae999fb206b04ed81fa08bdd7617cbfe932c5e4109285e10108613cdebba8f7a test/extractor-tests/generated/ForExpr/ForExpr_getAttr.ql d3399b7453e10ff48efc79ec38dd9b6e06bb472b9c39f559242d003e7f63b1d9 ba37e6bf129e1c2f9094e093bbfbf41864f2cb7725a64334f9443270dafdbfdc test/extractor-tests/generated/ForExpr/ForExpr_getIterable.ql 90a6540f8a91cfe3ed1bdde1e680786ce5a00edbb797a8fe70bcc0507c438fcc 65c67ad5890aa502628ee73efd26bcbd4597a8bdfc9839233ede9e26393638f8 test/extractor-tests/generated/ForExpr/ForExpr_getLabel.ql ce90da75e040f448d524187357f3ceededba72407a84c1dc8e1498ed9788044d 0e23d43e0b3412fe90c6a5a4331f8da85eebe19e05b8c7d9710056857280797b @@ -786,7 +792,7 @@ test/extractor-tests/generated/LiteralExpr/LiteralExpr_getAttr.ql 6e76da2bb7858f test/extractor-tests/generated/LiteralExpr/LiteralExpr_getTextValue.ql 7049fec0bbbf0e048af1ff318f42f43d0f8a7354a5638dc21174c4ea725b54ce 2edc94cc0a7f58ec9808b63ddb4d20a3907c88e50bd9ffb14f0281b433f5621b test/extractor-tests/generated/LiteralPat/LiteralPat.ql 3d3db6cad0eb13f84b69efa24a9f9a32d35c62582274d2751cc3ac54dca3b538 7feb64af87546ea64c139c61ac20176a99ad40b9949b361742a424b164fe6d54 test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.ql 2cb03a22220e99237d4f3cd94d5090757cd6e57df708d32e80bca3964507651f 4dd9a6c1e23ad9851d9aa8c42c79535f7a2c7224bbaaff286eac7fd04b39c6f0 -test/extractor-tests/generated/LoopExpr/LoopExpr.ql 636c28bff5f8c1ca0fb834f614b3215e02bdb00826fd8be26f9c4fa22c68a79a 1694c27850419d4edf366fe3f1d60fff578094adc3aeeb9691a3d6a8ec0100e1 +test/extractor-tests/generated/LoopExpr/LoopExpr.ql 37b320acefa3734331f87414de270c98ab3309fe069d428550738197e3498a8c e744c25640b5c46aab53ce5114b789e13319572b0c99d0f2bc3c177849e61541 test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.ql d557c1a34ae8762b32702d6b50e79c25bc506275c33a896b6b94bbbe73d04c49 34846c9eefa0219f4a16e28b518b2afa23f372d0aa03b08d042c5a35375e0cd6 test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.ql 0b77b9d9fb5903d37bce5a2c0d6b276e6269da56fcb37b83cd931872fb88490f c7f09c526e59dcadec13ec9719980d68b8619d630caab2c26b8368b06c1f2cc0 test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql 0267f54077640f3dfeb38524577e4a1229115eeb1c839398d0c5f460c1d65129 96ec876635b8c561f7add19e57574444f630eae3df9ab9bc33ac180e61f3a7b8 @@ -1100,7 +1106,7 @@ test/extractor-tests/generated/WherePred/WherePred_getGenericParamList.ql 21c3aa test/extractor-tests/generated/WherePred/WherePred_getLifetime.ql e08d9d6cccf634746f42a6ee583bbb3e7e9a9edbb63242e73b2bff4463df55d8 139543750c18f88d9c1ad2cdbcf1699d597cf2264bbb6b02a7e5792444e277ef test/extractor-tests/generated/WherePred/WherePred_getTy.ql 34cee0335bbaf8946fe15e3c32449150d07a730fcca56b4faed554fbb8689e21 883976c8c27c276c402d591ebd89d076c2c4d8da4d4f738f3c860c34d4a03b97 test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.ql c78e31ff4d1822a6b76f403e5ccb8f5529b4f784e14e618833df0378adca55fc 8bb1c9b5a1cfca0f5e8335464f7439aa098063176fbd3edbaf3407169f1899e6 -test/extractor-tests/generated/WhileExpr/WhileExpr.ql e061fac7584adf999d31ed0785041e2cc14b26a1c9901281f90c859335d8f614 fb1e597e28841e3b2d275d697aa6de7158db51b70a348d634291a75b25e4e80a +test/extractor-tests/generated/WhileExpr/WhileExpr.ql 61c49414f2ed786a68b79bd9a77093e4086457edb6c136cf8a94f2ac830c2f5b 7737f724a297d011c12143e009a63926812c63c08a1067b03e8677697ab00f83 test/extractor-tests/generated/WhileExpr/WhileExpr_getAttr.ql f8527130eb2492743c0e629c97db291abcefe3d35302c840fee327ab0d8f10fd b41bedd429e5566fd68a50140ff1f50b51e2c7c351cbc8253fbc126527073f7e test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.ql 84a021806423425b24eaeb9fb9967a6aadabe823c24e77a0dfefcb3509041597 147aa8bbe4dbf9b90be2467db8207dc96aed281e722eb6b9c998442a90911a6c test/extractor-tests/generated/WhileExpr/WhileExpr_getLabel.ql 60ef4de57d85c7df23c0518b944b3839a9b2478044326829b5bf709a8c8d7240 3916e9ff50733c58afdc09837339b72a555a043f92f1c4e09e1652866029b017 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 7411c9cba352..91644fc94afa 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -61,6 +61,7 @@ /lib/codeql/rust/elements/Item.qll linguist-generated /lib/codeql/rust/elements/ItemList.qll linguist-generated /lib/codeql/rust/elements/Label.qll linguist-generated +/lib/codeql/rust/elements/LabelableExpr.qll linguist-generated /lib/codeql/rust/elements/LetElse.qll linguist-generated /lib/codeql/rust/elements/LetExpr.qll linguist-generated /lib/codeql/rust/elements/LetStmt.qll linguist-generated @@ -71,6 +72,7 @@ /lib/codeql/rust/elements/LiteralPat.qll linguist-generated /lib/codeql/rust/elements/Locatable.qll linguist-generated /lib/codeql/rust/elements/LoopExpr.qll linguist-generated +/lib/codeql/rust/elements/LoopingExpr.qll linguist-generated /lib/codeql/rust/elements/MacroCall.qll linguist-generated /lib/codeql/rust/elements/MacroDef.qll linguist-generated /lib/codeql/rust/elements/MacroExpr.qll linguist-generated @@ -186,6 +188,7 @@ /lib/codeql/rust/elements/internal/BecomeExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/BinaryExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/BlockExprConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/BlockExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/BoxPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/BreakExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/CallExprBaseImpl.qll linguist-generated @@ -258,6 +261,7 @@ /lib/codeql/rust/elements/internal/LiteralExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/LiteralPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/LoopExprConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/LoopingExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/MacroCallConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/MacroDefConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/MacroDefImpl.qll linguist-generated @@ -470,6 +474,7 @@ /lib/codeql/rust/elements/internal/generated/Item.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ItemList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Label.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/LabelableExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/LetElse.qll linguist-generated /lib/codeql/rust/elements/internal/generated/LetExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/LetStmt.qll linguist-generated @@ -480,6 +485,7 @@ /lib/codeql/rust/elements/internal/generated/LiteralPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Locatable.qll linguist-generated /lib/codeql/rust/elements/internal/generated/LoopExpr.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/LoopingExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/MacroCall.qll linguist-generated /lib/codeql/rust/elements/internal/generated/MacroDef.qll linguist-generated /lib/codeql/rust/elements/internal/generated/MacroExpr.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index b516d8a9d185..6bb59b428824 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -64,6 +64,7 @@ import codeql.rust.elements.InferType import codeql.rust.elements.Item import codeql.rust.elements.ItemList import codeql.rust.elements.Label +import codeql.rust.elements.LabelableExpr import codeql.rust.elements.LetElse import codeql.rust.elements.LetExpr import codeql.rust.elements.LetStmt @@ -74,6 +75,7 @@ import codeql.rust.elements.LiteralExpr import codeql.rust.elements.LiteralPat import codeql.rust.elements.Locatable import codeql.rust.elements.LoopExpr +import codeql.rust.elements.LoopingExpr import codeql.rust.elements.MacroCall import codeql.rust.elements.MacroDef import codeql.rust.elements.MacroExpr diff --git a/rust/ql/lib/codeql/rust/elements/BlockExpr.qll b/rust/ql/lib/codeql/rust/elements/BlockExpr.qll index a87bbe472528..9e87d381525d 100644 --- a/rust/ql/lib/codeql/rust/elements/BlockExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/BlockExpr.qll @@ -5,8 +5,7 @@ private import internal.BlockExprImpl import codeql.rust.elements.Attr -import codeql.rust.elements.Expr -import codeql.rust.elements.Label +import codeql.rust.elements.LabelableExpr import codeql.rust.elements.StmtList /** diff --git a/rust/ql/lib/codeql/rust/elements/ForExpr.qll b/rust/ql/lib/codeql/rust/elements/ForExpr.qll index c4ef6f9faffc..cfb2586202ed 100644 --- a/rust/ql/lib/codeql/rust/elements/ForExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/ForExpr.qll @@ -5,9 +5,8 @@ private import internal.ForExprImpl import codeql.rust.elements.Attr -import codeql.rust.elements.BlockExpr import codeql.rust.elements.Expr -import codeql.rust.elements.Label +import codeql.rust.elements.LoopingExpr import codeql.rust.elements.Pat /** diff --git a/rust/ql/lib/codeql/rust/elements/LabelableExpr.qll b/rust/ql/lib/codeql/rust/elements/LabelableExpr.qll new file mode 100644 index 000000000000..c2a042595a19 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/LabelableExpr.qll @@ -0,0 +1,13 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `LabelableExpr`. + */ + +private import internal.LabelableExprImpl +import codeql.rust.elements.Expr +import codeql.rust.elements.Label + +/** + * The base class for expressions that can be labeled (`LoopExpr`, `ForExpr`, `WhileExpr` or `BlockExpr`). + */ +final class LabelableExpr = Impl::LabelableExpr; diff --git a/rust/ql/lib/codeql/rust/elements/LoopExpr.qll b/rust/ql/lib/codeql/rust/elements/LoopExpr.qll index 6abc449c6261..cdb6d743b50f 100644 --- a/rust/ql/lib/codeql/rust/elements/LoopExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/LoopExpr.qll @@ -5,9 +5,7 @@ private import internal.LoopExprImpl import codeql.rust.elements.Attr -import codeql.rust.elements.BlockExpr -import codeql.rust.elements.Expr -import codeql.rust.elements.Label +import codeql.rust.elements.LoopingExpr /** * A loop expression. For example: diff --git a/rust/ql/lib/codeql/rust/elements/LoopingExpr.qll b/rust/ql/lib/codeql/rust/elements/LoopingExpr.qll new file mode 100644 index 000000000000..6078afdf762c --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/LoopingExpr.qll @@ -0,0 +1,13 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `LoopingExpr`. + */ + +private import internal.LoopingExprImpl +import codeql.rust.elements.BlockExpr +import codeql.rust.elements.LabelableExpr + +/** + * The base class for expressions that loop (`LoopExpr`, `ForExpr` or `WhileExpr`). + */ +final class LoopingExpr = Impl::LoopingExpr; diff --git a/rust/ql/lib/codeql/rust/elements/WhileExpr.qll b/rust/ql/lib/codeql/rust/elements/WhileExpr.qll index 9dcbe9c6346f..fc704d35095a 100644 --- a/rust/ql/lib/codeql/rust/elements/WhileExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/WhileExpr.qll @@ -5,9 +5,8 @@ private import internal.WhileExprImpl import codeql.rust.elements.Attr -import codeql.rust.elements.BlockExpr import codeql.rust.elements.Expr -import codeql.rust.elements.Label +import codeql.rust.elements.LoopingExpr /** * A WhileExpr. For example: diff --git a/rust/ql/lib/codeql/rust/elements/internal/AwaitExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AwaitExprImpl.qll index 17abcfdaaba0..d9aa0f8bf448 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AwaitExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AwaitExprImpl.qll @@ -22,6 +22,6 @@ module Impl { * ``` */ class AwaitExpr extends Generated::AwaitExpr { - override string toString() { result = "await ..." } + override string toString() { result = "await " + this.getExpr().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/BecomeExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BecomeExprImpl.qll index 806e1d7506dc..ded01ec4ef83 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BecomeExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BecomeExprImpl.qll @@ -25,6 +25,6 @@ module Impl { * ``` */ class BecomeExpr extends Generated::BecomeExpr { - override string toString() { result = "become ..." } + override string toString() { result = "become " + this.getExpr().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll index bdfc8a56d7d3..9011109b194e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll @@ -1,3 +1,4 @@ +// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `BlockExpr`. * @@ -11,7 +12,6 @@ private import codeql.rust.elements.internal.generated.BlockExpr * be referenced directly. */ module Impl { - // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A block expression. For example: * ```rust @@ -26,7 +26,5 @@ module Impl { * } * ``` */ - class BlockExpr extends Generated::BlockExpr { - override string toString() { result = "{ ... }" } - } + class BlockExpr extends Generated::BlockExpr { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/BoxPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BoxPatImpl.qll index 5c6ffe229eb3..45870d14297b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BoxPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BoxPatImpl.qll @@ -22,6 +22,6 @@ module Impl { * ``` */ class BoxPat extends Generated::BoxPat { - override string toString() { result = "box ..." } + override string toString() { result = "box " + this.getPat().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll index 6cfba6978287..9104a07a5474 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll @@ -5,6 +5,7 @@ */ private import codeql.rust.elements.internal.generated.BreakExpr +import codeql.rust.elements.LabelableExpr /** * INTERNAL: This module contains the customizable definition of `BreakExpr` and should not @@ -103,16 +104,14 @@ module Impl { ) } - override string toString() { - exists(string label, string expr | - ( - label = " " + this.getLifetime().toString() - or - not this.hasLifetime() and label = "" - ) and - (if this.hasExpr() then expr = " ..." else expr = "") and - result = "break" + label + expr - ) + override string toString() { result = concat(int i | | this.toStringPart(i), " " order by i) } + + private string toStringPart(int index) { + index = 0 and result = "break" + or + index = 1 and result = this.getLifetime().toString() + or + index = 2 and result = this.getExpr().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll index 4cf0272c0088..3da29db7df1c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll @@ -23,15 +23,6 @@ module Impl { * ``` */ class CallExpr extends Generated::CallExpr { - override string toString() { - exists(string callee | - ( - callee = this.getExpr().(PathExpr).toString() - or - not this.getExpr() instanceof PathExpr and callee = "..." - ) and - result = callee + "(...)" - ) - } + override string toString() { result = this.getExpr().toAbbreviatedString() + "(...)" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll index 3d021e4955d3..59cc960a67bd 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll @@ -19,6 +19,8 @@ module Impl { * ``` */ class CastExpr extends Generated::CastExpr { - override string toString() { result = "... as " + this.getTy().toString() } + override string toString() { + result = this.getExpr().toAbbreviatedString() + " as " + this.getTy().toString() + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ClosureExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ClosureExprImpl.qll index 861a258ec8e3..17e373290b50 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ClosureExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ClosureExprImpl.qll @@ -25,6 +25,6 @@ module Impl { * ``` */ class ClosureExpr extends Generated::ClosureExpr { - override string toString() { result = "|...| ..." } + override string toString() { result = "|...| " + this.getBody().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll index 8c67382498c8..957574d409a5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll @@ -49,15 +49,12 @@ module Impl { * ``` */ class ContinueExpr extends Generated::ContinueExpr { - override string toString() { - exists(string label | - ( - label = " " + this.getLifetime().getText() - or - not this.hasLifetime() and label = "" - ) and - result = "continue" + label - ) + override string toString() { result = concat(int i | | this.toStringPart(i), " " order by i) } + + private string toStringPart(int index) { + index = 0 and result = "continue" + or + index = 1 and result = this.getLifetime().toString() } /** @@ -66,7 +63,7 @@ module Impl { * The target is either a `LoopExpr`, a `ForExpr`, or a `WhileExpr`. */ pragma[nomagic] - Expr getTarget() { + LoopingExpr getTarget() { exists(string label | result = getAContinueAncestor(this, label) and BreakExprImpl::isLabelledLoop(result, label) diff --git a/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll index 6f342c00fd3c..9307a567b6e1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll @@ -14,6 +14,14 @@ module Impl { class Element extends Generated::Element { override string toString() { result = this.getAPrimaryQlClass() } + /** + * Returns a string suitable to be inserted into the name of the parent. Typically `"..."`, + * but may be overridden by subclasses. + * + * INTERNAL: Do not use. + */ + string toAbbreviatedString() { result = "..." } + predicate isUnknown() { none() } // compatibility with test generation, to be fixed } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll index ccfcc4fd7b71..922de73c65d9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll @@ -19,6 +19,12 @@ module Impl { * ``` */ class FieldExpr extends Generated::FieldExpr { - override string toString() { result = "... ." + this.getNameRef().toString() } + override string toString() { + exists(string abbr, string name | + abbr = this.getExpr().toAbbreviatedString() and + name = this.getNameRef().toString() and + if abbr = "..." then result = "... ." + name else result = abbr + "." + name + ) + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll index da62b58732b0..b333702c9415 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ForExprImpl.qll @@ -19,6 +19,8 @@ module Impl { * ``` */ class ForExpr extends Generated::ForExpr { - override string toString() { result = "for " + this.getPat().toString() + " in ... { ... }" } + override string toStringPrefix() { + result = "for " + this.getPat().toAbbreviatedString() + " in ..." + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/IfExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/IfExprImpl.qll index 59c0638c42ed..c90ee6ccdc06 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/IfExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/IfExprImpl.qll @@ -28,11 +28,16 @@ module Impl { * ``` */ class IfExpr extends Generated::IfExpr { - override string toString() { - exists(string elseString | - (if this.hasElse() then elseString = " else { ... }" else elseString = "") and - result = "if ... { ... }" + elseString - ) + override string toString() { result = concat(int i | | this.toStringPart(i), " " order by i) } + + private string toStringPart(int index) { + index = 0 and result = "if" + or + index = 1 and result = this.getCondition().toAbbreviatedString() + or + index = 2 and result = "{...}" + or + index = 3 and this.hasElse() and result = "else {...}" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll index 28db84aa873b..2ace04fe3899 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/IndexExprImpl.qll @@ -20,6 +20,9 @@ module Impl { * ``` */ class IndexExpr extends Generated::IndexExpr { - override string toString() { result = "...[...]" } + override string toString() { + result = + this.getBase().toAbbreviatedString() + "[" + this.getIndex().toAbbreviatedString() + "]" + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LabelableExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LabelableExprImpl.qll new file mode 100644 index 000000000000..1b354658a2ed --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/LabelableExprImpl.qll @@ -0,0 +1,30 @@ +/** + * This module provides a hand-modifiable wrapper around the generated class `LabelableExpr`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.LabelableExpr + +/** + * INTERNAL: This module contains the customizable definition of `LabelableExpr` and should not + * be referenced directly. + */ +module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file + /** + * The base class for expressions that can be labeled (`LoopExpr`, `ForExpr`, `WhileExpr` or `BlockExpr`). + */ + class LabelableExpr extends Generated::LabelableExpr { + override string toString() { + result = concat([this.getLabel().toString() + ":", this.toStringPrefix(), "{ ... }"], " ") + } + + /** + * Get the prefix for the string representation of this element. + * + * INTERNAL: Do not use. + */ + string toStringPrefix() { none() } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/LetExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LetExprImpl.qll index 8a54a005cf58..5b8bd7ec963f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LetExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LetExprImpl.qll @@ -21,11 +21,14 @@ module Impl { * ``` */ class LetExpr extends Generated::LetExpr { - override string toString() { - exists(string expr | - (if this.hasExpr() then expr = " = ..." else expr = "") and - result = "let " + this.getPat().toString() + expr - ) + override string toString() { result = concat(int i | | this.toStringPart(i), " " order by i) } + + private string toStringPart(int index) { + index = 0 and result = "let" + or + index = 1 and result = this.getPat().toAbbreviatedString() + or + index = 2 and result = "= " + this.getExpr().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll index fce6aa3de44c..1205836c2306 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll @@ -26,12 +26,16 @@ module Impl { * ``` */ class LetStmt extends Generated::LetStmt { - override string toString() { - exists(string expr, string elseStr | - (if this.hasInitializer() then expr = " = ..." else expr = "") and - (if this.hasLetElse() then elseStr = " else { ... }" else elseStr = "") and - result = "let " + this.getPat().toString() + expr + elseStr - ) + override string toString() { result = concat(int i | | this.toStringPart(i), " " order by i) } + + private string toStringPart(int index) { + index = 0 and result = "let" + or + index = 1 and result = this.getPat().toAbbreviatedString() + or + index = 2 and result = "= " + this.getInitializer().toAbbreviatedString() + or + index = 3 and result = this.getLetElse().toString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll index 1b660b134c43..efcc4bf073e9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll @@ -27,5 +27,7 @@ module Impl { */ class LiteralExpr extends Generated::LiteralExpr { override string toString() { result = this.getTextValue() } + + override string toAbbreviatedString() { result = this.getTextValue() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll index 5bf0c13576a6..65074603796a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll @@ -22,6 +22,8 @@ module Impl { * ``` */ class LiteralPat extends Generated::LiteralPat { - override string toString() { result = this.getLiteral().toString() } + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = this.getLiteral().toString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LoopExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LoopExprImpl.qll index f91a14489c5c..732148717054 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LoopExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LoopExprImpl.qll @@ -37,6 +37,6 @@ module Impl { * ``` */ class LoopExpr extends Generated::LoopExpr { - override string toString() { result = "loop {...}" } + override string toStringPrefix() { result = "loop" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LoopingExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LoopingExprImpl.qll new file mode 100644 index 000000000000..45aa8f42e74b --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/LoopingExprImpl.qll @@ -0,0 +1,19 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `LoopingExpr`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.LoopingExpr + +/** + * INTERNAL: This module contains the customizable definition of `LoopingExpr` and should not + * be referenced directly. + */ +module Impl { + /** + * The base class for expressions that loop (`LoopExpr`, `ForExpr` or `WhileExpr`). + */ + class LoopingExpr extends Generated::LoopingExpr { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/MatchArmImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MatchArmImpl.qll index 280eb4ea7c87..23ad2551bffc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MatchArmImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MatchArmImpl.qll @@ -28,11 +28,16 @@ module Impl { * ``` */ class MatchArm extends Generated::MatchArm { - override string toString() { - exists(string guard | - (if this.hasGuard() then guard = "if ... " else guard = "") and - result = this.getPat().toString() + guard + " => ..." - ) + override string toString() { result = concat(int i | | this.toStringPart(i), " " order by i) } + + private string toStringPart(int index) { + index = 0 and result = this.getPat().toAbbreviatedString() + or + index = 1 and result = "if " + this.getGuard().toAbbreviatedString() + or + index = 2 and result = "=>" + or + index = 3 and result = this.getExpr().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll index 530e9cc50a76..3ce9aa773107 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MatchExprImpl.qll @@ -28,7 +28,9 @@ module Impl { * ``` */ class MatchExpr extends Generated::MatchExpr { - override string toString() { result = "match ... { ... }" } + override string toString() { + result = "match " + this.getExpr().toAbbreviatedString() + " { ... }" + } /** * Gets the `index`th arm of this match expression. diff --git a/rust/ql/lib/codeql/rust/elements/internal/NeverTypeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/NeverTypeImpl.qll index 985ec81cdeb7..c1858fc9421a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/NeverTypeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/NeverTypeImpl.qll @@ -19,6 +19,8 @@ module Impl { * ``` */ class NeverType extends Generated::NeverType { - override string toString() { result = "!" } + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = "!" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll index ffc3fb3d5b83..20ee0f688522 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll @@ -21,7 +21,9 @@ module Impl { * ``` */ class OrPat extends Generated::OrPat { - override string toString() { result = "... | ..." } + override string toString() { + result = concat(int i | | this.getPat(i).toAbbreviatedString() order by i, " | ") + } /** Gets the last pattern in this or pattern. */ pragma[nomagic] diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll index 5f135cc94ca7..33e4f5fee59b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll @@ -19,15 +19,12 @@ module Impl { * ``` */ class Param extends Generated::Param { - override string toString() { - exists(string ty | - ( - ty = ": " + this.getTy().toString() - or - not this.hasTy() and ty = "" - ) and - result = this.getPat().toString() + ty - ) + override string toString() { result = concat(int i | | this.toStringPart(i) order by i) } + + private string toStringPart(int index) { + index = 0 and result = this.getPat().toAbbreviatedString() + or + index = 1 and result = ": " + this.getTy().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll index 5dce46343400..db9d19f5650b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll @@ -19,6 +19,6 @@ module Impl { * ``` */ class ParenExpr extends Generated::ParenExpr { - override string toString() { result = "(...)" } + override string toString() { result = "(" + this.getExpr().toAbbreviatedString() + ")" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll index 5eb8a4860307..9d9016cff98e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll @@ -19,6 +19,6 @@ module Impl { * ``` */ class ParenPat extends Generated::ParenPat { - override string toString() { result = "(...)" } + override string toString() { result = "(" + this.getPat().toAbbreviatedString() + ")" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenTypeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenTypeImpl.qll index 95c022d651a3..916758b91333 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenTypeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenTypeImpl.qll @@ -19,6 +19,6 @@ module Impl { * ``` */ class ParenType extends Generated::ParenType { - override string toString() { result = "(...)" } + override string toString() { result = "(" + this.getTy().toAbbreviatedString() + ")" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathExprImpl.qll index c8a2af3de33b..19445493c889 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathExprImpl.qll @@ -22,6 +22,8 @@ module Impl { * ``` */ class PathExpr extends Generated::PathExpr { - override string toString() { result = this.getPath().toString() } + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = this.getPath().toString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll index b53c86559f0c..8d0a2ab0ecf1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll @@ -19,10 +19,14 @@ module Impl { * ``` */ class Path extends Generated::Path { - override string toString() { + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { if this.hasQualifier() - then result = this.getQualifier().toString() + "::" + this.getPart().toString() - else result = this.getPart().toString() + then + result = + this.getQualifier().toAbbreviatedString() + "::" + this.getPart().toAbbreviatedString() + else result = this.getPart().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll index 2c6d94cbccea..a78d0dd7ab9b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll @@ -22,6 +22,8 @@ module Impl { * ``` */ class PathPat extends Generated::PathPat { - override string toString() { result = this.getPath().toString() } + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = this.getPath().toString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll index 300a6c7d4a0c..90d7cee66392 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll @@ -19,7 +19,9 @@ module Impl { * ``` */ class PathSegment extends Generated::PathSegment { - override string toString() { + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { // TODO: this does not cover everything if this.hasGenericArgList() then result = this.getNameRef().toString() + "::<...>" diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll index 9c2f4e50052a..3f88c50fa6a2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll @@ -19,6 +19,8 @@ module Impl { * ``` */ class PathType extends Generated::PathType { - override string toString() { result = this.getPath().toString() } + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = this.getPath().toString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RangeExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RangeExprImpl.qll index 53dccb24fbd5..3b8989af7821 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RangeExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RangeExprImpl.qll @@ -24,6 +24,28 @@ module Impl { * ``` */ class RangeExpr extends Generated::RangeExpr { - override string toString() { result = "... " + this.getOperatorName().toString() + " ..." } + override string toString() { result = concat(int i | | this.toStringPart(i) order by i) } + + private string toStringPart(int index) { + index = 0 and result = this.getStartAbbreviation() + or + index = 1 and result = this.getOperatorName() + or + index = 2 and result = this.getEndAbbreviation() + } + + private string getStartAbbreviation() { + exists(string abbr | + abbr = this.getStart().toAbbreviatedString() and + if abbr = "..." then result = "... " else result = abbr + ) + } + + private string getEndAbbreviation() { + exists(string abbr | + abbr = this.getEnd().toAbbreviatedString() and + if abbr = "..." then result = " ..." else result = abbr + ) + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll index f5462ab29c3d..6e24c31d5524 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll @@ -19,11 +19,12 @@ module Impl { * ``` */ class RecordExprField extends Generated::RecordExprField { - override string toString() { - exists(string init | - (if this.hasExpr() then init = ": ..." else init = "") and - result = this.getNameRef().toString() + init - ) + override string toString() { result = concat(int i | | this.toStringPart(i) order by i) } + + private string toStringPart(int index) { + index = 0 and result = this.getNameRef().toString() + or + index = 1 and result = ": " + this.getExpr().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RefExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RefExprImpl.qll index cf3ade0ad148..4ec593362d95 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RefExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RefExprImpl.qll @@ -23,12 +23,17 @@ module Impl { */ class RefExpr extends Generated::RefExpr { override string toString() { - exists(string raw, string const, string mut | - (if this.isRaw() then raw = "raw " else raw = "") and - (if this.isConst() then const = "const " else const = "") and - (if this.isMut() then mut = "mut " else mut = "") and - result = "&" + raw + const + mut + "..." - ) + result = "&" + concat(int i | | this.getSpecPart(i), " " order by i) + } + + private string getSpecPart(int index) { + index = 0 and this.isRaw() and result = "raw" + or + index = 1 and this.isConst() and result = "const" + or + index = 2 and this.isMut() and result = "mut" + or + index = 3 and result = this.getExpr().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RefPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RefPatImpl.qll index a28574c1c071..d6b1f4c27092 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RefPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RefPatImpl.qll @@ -23,10 +23,13 @@ module Impl { */ class RefPat extends Generated::RefPat { override string toString() { - exists(string mut | - (if this.isMut() then mut = "mut " else mut = "") and - result = "&" + mut + "..." - ) + result = "&" + concat(int i | | this.getSpecPart(i), " " order by i) + } + + private string getSpecPart(int index) { + index = 0 and this.isMut() and result = "mut" + or + index = 1 and result = this.getPat().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll index a4ae812b72b0..ec7d48a4d9d7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RestPatImpl.qll @@ -19,6 +19,8 @@ module Impl { * ``` */ class RestPat extends Generated::RestPat { - override string toString() { result = ".." } + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = ".." } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ReturnExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ReturnExprImpl.qll index 245f7e873acb..1b632587867e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ReturnExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ReturnExprImpl.qll @@ -26,8 +26,12 @@ module Impl { * ``` */ class ReturnExpr extends Generated::ReturnExpr { - override string toString() { - if this.hasExpr() then result = "return ..." else result = "return" + override string toString() { result = concat(int i | | this.toStringPart(i), " " order by i) } + + private string toStringPart(int index) { + index = 0 and result = "return" + or + index = 1 and result = this.getExpr().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/UnderscoreExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UnderscoreExprImpl.qll index 26487fbfe4fa..620a09e8c3d9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UnderscoreExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UnderscoreExprImpl.qll @@ -19,6 +19,8 @@ module Impl { * ``` */ class UnderscoreExpr extends Generated::UnderscoreExpr { - override string toString() { result = "_" } + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = "_" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll index 43f9510be1ba..e41b6a684a1e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/WhileExprImpl.qll @@ -19,6 +19,8 @@ module Impl { * ``` */ class WhileExpr extends Generated::WhileExpr { - override string toString() { result = "while ... { ... }" } + override string toStringPrefix() { + result = "while " + this.getCondition().toAbbreviatedString() + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/WildcardPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/WildcardPatImpl.qll index d7973866d912..f1a8fa1a72ee 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/WildcardPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/WildcardPatImpl.qll @@ -19,6 +19,8 @@ module Impl { * ``` */ class WildcardPat extends Generated::WildcardPat { - override string toString() { result = "_" } + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = "_" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/BlockExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/BlockExpr.qll index c4f11fdd90c5..6a01a0c45880 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/BlockExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/BlockExpr.qll @@ -7,8 +7,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.Attr -import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl -import codeql.rust.elements.Label +import codeql.rust.elements.internal.LabelableExprImpl::Impl as LabelableExprImpl import codeql.rust.elements.StmtList /** @@ -32,7 +31,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::BlockExpr` class directly. * Use the subclass `BlockExpr`, where the following predicates are available. */ - class BlockExpr extends Synth::TBlockExpr, ExprImpl::Expr { + class BlockExpr extends Synth::TBlockExpr, LabelableExprImpl::LabelableExpr { override string getAPrimaryQlClass() { result = "BlockExpr" } /** @@ -83,19 +82,6 @@ module Generated { */ predicate isUnsafe() { Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).isUnsafe() } - /** - * Gets the label of this block expression, if it exists. - */ - Label getLabel() { - result = - Synth::convertLabelFromRaw(Synth::convertBlockExprToRaw(this).(Raw::BlockExpr).getLabel()) - } - - /** - * Holds if `getLabel()` exists. - */ - final predicate hasLabel() { exists(this.getLabel()) } - /** * Gets the statement list of this block expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ForExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ForExpr.qll index dc5f2d34d3ee..202b1736fc49 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ForExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ForExpr.qll @@ -7,10 +7,8 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.Attr -import codeql.rust.elements.BlockExpr import codeql.rust.elements.Expr -import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl -import codeql.rust.elements.Label +import codeql.rust.elements.internal.LoopingExprImpl::Impl as LoopingExprImpl import codeql.rust.elements.Pat /** @@ -26,7 +24,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::ForExpr` class directly. * Use the subclass `ForExpr`, where the following predicates are available. */ - class ForExpr extends Synth::TForExpr, ExprImpl::Expr { + class ForExpr extends Synth::TForExpr, LoopingExprImpl::LoopingExpr { override string getAPrimaryQlClass() { result = "ForExpr" } /** @@ -60,32 +58,6 @@ module Generated { */ final predicate hasIterable() { exists(this.getIterable()) } - /** - * Gets the label of this for expression, if it exists. - */ - Label getLabel() { - result = - Synth::convertLabelFromRaw(Synth::convertForExprToRaw(this).(Raw::ForExpr).getLabel()) - } - - /** - * Holds if `getLabel()` exists. - */ - final predicate hasLabel() { exists(this.getLabel()) } - - /** - * Gets the loop body of this for expression, if it exists. - */ - BlockExpr getLoopBody() { - result = - Synth::convertBlockExprFromRaw(Synth::convertForExprToRaw(this).(Raw::ForExpr).getLoopBody()) - } - - /** - * Holds if `getLoopBody()` exists. - */ - final predicate hasLoopBody() { exists(this.getLoopBody()) } - /** * Gets the pat of this for expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/LabelableExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/LabelableExpr.qll new file mode 100644 index 000000000000..a0dfd03fb400 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/LabelableExpr.qll @@ -0,0 +1,38 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `LabelableExpr`. + * INTERNAL: Do not import directly. + */ + +private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl +import codeql.rust.elements.Label + +/** + * INTERNAL: This module contains the fully generated definition of `LabelableExpr` and should not + * be referenced directly. + */ +module Generated { + /** + * The base class for expressions that can be labeled (`LoopExpr`, `ForExpr`, `WhileExpr` or `BlockExpr`). + * INTERNAL: Do not reference the `Generated::LabelableExpr` class directly. + * Use the subclass `LabelableExpr`, where the following predicates are available. + */ + class LabelableExpr extends Synth::TLabelableExpr, ExprImpl::Expr { + /** + * Gets the label of this labelable expression, if it exists. + */ + Label getLabel() { + result = + Synth::convertLabelFromRaw(Synth::convertLabelableExprToRaw(this) + .(Raw::LabelableExpr) + .getLabel()) + } + + /** + * Holds if `getLabel()` exists. + */ + final predicate hasLabel() { exists(this.getLabel()) } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/LoopExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/LoopExpr.qll index eb943bf746aa..510c3dedb683 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/LoopExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/LoopExpr.qll @@ -7,9 +7,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.Attr -import codeql.rust.elements.BlockExpr -import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl -import codeql.rust.elements.Label +import codeql.rust.elements.internal.LoopingExprImpl::Impl as LoopingExprImpl /** * INTERNAL: This module contains the fully generated definition of `LoopExpr` and should not @@ -42,7 +40,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::LoopExpr` class directly. * Use the subclass `LoopExpr`, where the following predicates are available. */ - class LoopExpr extends Synth::TLoopExpr, ExprImpl::Expr { + class LoopExpr extends Synth::TLoopExpr, LoopingExprImpl::LoopingExpr { override string getAPrimaryQlClass() { result = "LoopExpr" } /** @@ -62,33 +60,5 @@ module Generated { * Gets the number of attrs of this loop expression. */ final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - - /** - * Gets the label of this loop expression, if it exists. - */ - Label getLabel() { - result = - Synth::convertLabelFromRaw(Synth::convertLoopExprToRaw(this).(Raw::LoopExpr).getLabel()) - } - - /** - * Holds if `getLabel()` exists. - */ - final predicate hasLabel() { exists(this.getLabel()) } - - /** - * Gets the loop body of this loop expression, if it exists. - */ - BlockExpr getLoopBody() { - result = - Synth::convertBlockExprFromRaw(Synth::convertLoopExprToRaw(this) - .(Raw::LoopExpr) - .getLoopBody()) - } - - /** - * Holds if `getLoopBody()` exists. - */ - final predicate hasLoopBody() { exists(this.getLoopBody()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/LoopingExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/LoopingExpr.qll new file mode 100644 index 000000000000..427ef05c2aba --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/LoopingExpr.qll @@ -0,0 +1,38 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `LoopingExpr`. + * INTERNAL: Do not import directly. + */ + +private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.BlockExpr +import codeql.rust.elements.internal.LabelableExprImpl::Impl as LabelableExprImpl + +/** + * INTERNAL: This module contains the fully generated definition of `LoopingExpr` and should not + * be referenced directly. + */ +module Generated { + /** + * The base class for expressions that loop (`LoopExpr`, `ForExpr` or `WhileExpr`). + * INTERNAL: Do not reference the `Generated::LoopingExpr` class directly. + * Use the subclass `LoopingExpr`, where the following predicates are available. + */ + class LoopingExpr extends Synth::TLoopingExpr, LabelableExprImpl::LabelableExpr { + /** + * Gets the loop body of this looping expression, if it exists. + */ + BlockExpr getLoopBody() { + result = + Synth::convertBlockExprFromRaw(Synth::convertLoopingExprToRaw(this) + .(Raw::LoopingExpr) + .getLoopBody()) + } + + /** + * Holds if `getLoopBody()` exists. + */ + final predicate hasLoopBody() { exists(this.getLoopBody()) } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index 470207683ae5..6f005ee5a94a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -1397,29 +1397,6 @@ private module Impl { ) } - private Element getImmediateChildOfBlockExpr(BlockExpr e, int index, string partialPredicateCall) { - exists(int b, int bExpr, int n, int nAttr, int nLabel, int nStmtList | - b = 0 and - bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - n = bExpr and - nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nLabel = nAttr + 1 and - nStmtList = nLabel + 1 and - ( - none() - or - result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) - or - result = e.getAttr(index - n) and - partialPredicateCall = "Attr(" + (index - n).toString() + ")" - or - index = nAttr and result = e.getLabel() and partialPredicateCall = "Label()" - or - index = nLabel and result = e.getStmtList() and partialPredicateCall = "StmtList()" - ) - ) - } - private Element getImmediateChildOfBoxPat(BoxPat e, int index, string partialPredicateCall) { exists(int b, int bPat, int n, int nPat | b = 0 and @@ -1708,35 +1685,6 @@ private module Impl { ) } - private Element getImmediateChildOfForExpr(ForExpr e, int index, string partialPredicateCall) { - exists(int b, int bExpr, int n, int nAttr, int nIterable, int nLabel, int nLoopBody, int nPat | - b = 0 and - bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - n = bExpr and - nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nIterable = nAttr + 1 and - nLabel = nIterable + 1 and - nLoopBody = nLabel + 1 and - nPat = nLoopBody + 1 and - ( - none() - or - result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) - or - result = e.getAttr(index - n) and - partialPredicateCall = "Attr(" + (index - n).toString() + ")" - or - index = nAttr and result = e.getIterable() and partialPredicateCall = "Iterable()" - or - index = nIterable and result = e.getLabel() and partialPredicateCall = "Label()" - or - index = nLabel and result = e.getLoopBody() and partialPredicateCall = "LoopBody()" - or - index = nLoopBody and result = e.getPat() and partialPredicateCall = "Pat()" - ) - ) - } - private Element getImmediateChildOfForType(ForType e, int index, string partialPredicateCall) { exists(int b, int bTypeRef, int n, int nGenericParamList, int nTy | b = 0 and @@ -1900,6 +1848,24 @@ private module Impl { ) } + private Element getImmediateChildOfLabelableExpr( + LabelableExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n, int nLabel | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nLabel = n + 1 and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getLabel() and partialPredicateCall = "Label()" + ) + ) + } + private Element getImmediateChildOfLetExpr(LetExpr e, int index, string partialPredicateCall) { exists(int b, int bExpr, int n, int nAttr, int nExpr, int nPat | b = 0 and @@ -2034,29 +2000,6 @@ private module Impl { ) } - private Element getImmediateChildOfLoopExpr(LoopExpr e, int index, string partialPredicateCall) { - exists(int b, int bExpr, int n, int nAttr, int nLabel, int nLoopBody | - b = 0 and - bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - n = bExpr and - nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nLabel = nAttr + 1 and - nLoopBody = nLabel + 1 and - ( - none() - or - result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) - or - result = e.getAttr(index - n) and - partialPredicateCall = "Attr(" + (index - n).toString() + ")" - or - index = nAttr and result = e.getLabel() and partialPredicateCall = "Label()" - or - index = nLabel and result = e.getLoopBody() and partialPredicateCall = "LoopBody()" - ) - ) - } - private Element getImmediateChildOfMacroExpr(MacroExpr e, int index, string partialPredicateCall) { exists(int b, int bExpr, int n, int nMacroCall | b = 0 and @@ -2748,32 +2691,6 @@ private module Impl { ) } - private Element getImmediateChildOfWhileExpr(WhileExpr e, int index, string partialPredicateCall) { - exists(int b, int bExpr, int n, int nAttr, int nCondition, int nLabel, int nLoopBody | - b = 0 and - bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - n = bExpr and - nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nCondition = nAttr + 1 and - nLabel = nCondition + 1 and - nLoopBody = nLabel + 1 and - ( - none() - or - result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) - or - result = e.getAttr(index - n) and - partialPredicateCall = "Attr(" + (index - n).toString() + ")" - or - index = nAttr and result = e.getCondition() and partialPredicateCall = "Condition()" - or - index = nCondition and result = e.getLabel() and partialPredicateCall = "Label()" - or - index = nLabel and result = e.getLoopBody() and partialPredicateCall = "LoopBody()" - ) - ) - } - private Element getImmediateChildOfWildcardPat( WildcardPat e, int index, string partialPredicateCall ) { @@ -2829,6 +2746,27 @@ private module Impl { ) } + private Element getImmediateChildOfBlockExpr(BlockExpr e, int index, string partialPredicateCall) { + exists(int b, int bLabelableExpr, int n, int nAttr, int nStmtList | + b = 0 and + bLabelableExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLabelableExpr(e, i, _)) | i) and + n = bLabelableExpr and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nStmtList = nAttr + 1 and + ( + none() + or + result = getImmediateChildOfLabelableExpr(e, index - b, partialPredicateCall) + or + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" + or + index = nAttr and result = e.getStmtList() and partialPredicateCall = "StmtList()" + ) + ) + } + private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) { exists(int b, int bCallExprBase, int n, int nExpr | b = 0 and @@ -3087,6 +3025,25 @@ private module Impl { ) } + private Element getImmediateChildOfLoopingExpr( + LoopingExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bLabelableExpr, int n, int nLoopBody | + b = 0 and + bLabelableExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLabelableExpr(e, i, _)) | i) and + n = bLabelableExpr and + nLoopBody = n + 1 and + ( + none() + or + result = getImmediateChildOfLabelableExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getLoopBody() and partialPredicateCall = "LoopBody()" + ) + ) + } + private Element getImmediateChildOfMacroCall(MacroCall e, int index, string partialPredicateCall) { exists( int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nPath, @@ -3535,6 +3492,69 @@ private module Impl { ) } + private Element getImmediateChildOfForExpr(ForExpr e, int index, string partialPredicateCall) { + exists(int b, int bLoopingExpr, int n, int nAttr, int nIterable, int nPat | + b = 0 and + bLoopingExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLoopingExpr(e, i, _)) | i) and + n = bLoopingExpr and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nIterable = nAttr + 1 and + nPat = nIterable + 1 and + ( + none() + or + result = getImmediateChildOfLoopingExpr(e, index - b, partialPredicateCall) + or + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" + or + index = nAttr and result = e.getIterable() and partialPredicateCall = "Iterable()" + or + index = nIterable and result = e.getPat() and partialPredicateCall = "Pat()" + ) + ) + } + + private Element getImmediateChildOfLoopExpr(LoopExpr e, int index, string partialPredicateCall) { + exists(int b, int bLoopingExpr, int n, int nAttr | + b = 0 and + bLoopingExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLoopingExpr(e, i, _)) | i) and + n = bLoopingExpr and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + ( + none() + or + result = getImmediateChildOfLoopingExpr(e, index - b, partialPredicateCall) + or + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" + ) + ) + } + + private Element getImmediateChildOfWhileExpr(WhileExpr e, int index, string partialPredicateCall) { + exists(int b, int bLoopingExpr, int n, int nAttr, int nCondition | + b = 0 and + bLoopingExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLoopingExpr(e, i, _)) | i) and + n = bLoopingExpr and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nCondition = nAttr + 1 and + ( + none() + or + result = getImmediateChildOfLoopingExpr(e, index - b, partialPredicateCall) + or + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" + or + index = nAttr and result = e.getCondition() and partialPredicateCall = "Condition()" + ) + ) + } + cached Element getImmediateChild(Element e, int index, string partialAccessor) { // why does this look more complicated than it should? @@ -3655,8 +3675,6 @@ private module Impl { or result = getImmediateChildOfBinaryExpr(e, index, partialAccessor) or - result = getImmediateChildOfBlockExpr(e, index, partialAccessor) - or result = getImmediateChildOfBoxPat(e, index, partialAccessor) or result = getImmediateChildOfBreakExpr(e, index, partialAccessor) @@ -3683,8 +3701,6 @@ private module Impl { or result = getImmediateChildOfFnPtrType(e, index, partialAccessor) or - result = getImmediateChildOfForExpr(e, index, partialAccessor) - or result = getImmediateChildOfForType(e, index, partialAccessor) or result = getImmediateChildOfFormatArgsExpr(e, index, partialAccessor) @@ -3711,8 +3727,6 @@ private module Impl { or result = getImmediateChildOfLiteralPat(e, index, partialAccessor) or - result = getImmediateChildOfLoopExpr(e, index, partialAccessor) - or result = getImmediateChildOfMacroExpr(e, index, partialAccessor) or result = getImmediateChildOfMacroPat(e, index, partialAccessor) @@ -3785,14 +3799,14 @@ private module Impl { or result = getImmediateChildOfUnderscoreExpr(e, index, partialAccessor) or - result = getImmediateChildOfWhileExpr(e, index, partialAccessor) - or result = getImmediateChildOfWildcardPat(e, index, partialAccessor) or result = getImmediateChildOfYeetExpr(e, index, partialAccessor) or result = getImmediateChildOfYieldExpr(e, index, partialAccessor) or + result = getImmediateChildOfBlockExpr(e, index, partialAccessor) + or result = getImmediateChildOfCallExpr(e, index, partialAccessor) or result = getImmediateChildOfConst(e, index, partialAccessor) @@ -3834,6 +3848,12 @@ private module Impl { result = getImmediateChildOfUnion(e, index, partialAccessor) or result = getImmediateChildOfUse(e, index, partialAccessor) + or + result = getImmediateChildOfForExpr(e, index, partialAccessor) + or + result = getImmediateChildOfLoopExpr(e, index, partialAccessor) + or + result = getImmediateChildOfWhileExpr(e, index, partialAccessor) } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 25af8ddac644..dc9f577bffc5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -1366,70 +1366,6 @@ module Raw { Expr getRhs() { binary_expr_rhs(this, result) } } - /** - * INTERNAL: Do not use. - * A block expression. For example: - * ```rust - * { - * let x = 42; - * } - * ``` - * ```rust - * 'label: { - * let x = 42; - * x - * } - * ``` - */ - class BlockExpr extends @block_expr, Expr { - override string toString() { result = "BlockExpr" } - - /** - * Gets the `index`th attr of this block expression (0-based). - */ - Attr getAttr(int index) { block_expr_attrs(this, index, result) } - - /** - * Holds if this block expression is async. - */ - predicate isAsync() { block_expr_is_async(this) } - - /** - * Holds if this block expression is const. - */ - predicate isConst() { block_expr_is_const(this) } - - /** - * Holds if this block expression is gen. - */ - predicate isGen() { block_expr_is_gen(this) } - - /** - * Holds if this block expression is move. - */ - predicate isMove() { block_expr_is_move(this) } - - /** - * Holds if this block expression is try. - */ - predicate isTry() { block_expr_is_try(this) } - - /** - * Holds if this block expression is unsafe. - */ - predicate isUnsafe() { block_expr_is_unsafe(this) } - - /** - * Gets the label of this block expression, if it exists. - */ - Label getLabel() { block_expr_labels(this, result) } - - /** - * Gets the statement list of this block expression, if it exists. - */ - StmtList getStmtList() { block_expr_stmt_lists(this, result) } - } - /** * INTERNAL: Do not use. * A box pattern. For example: @@ -1824,42 +1760,6 @@ module Raw { RetType getRetType() { fn_ptr_type_ret_types(this, result) } } - /** - * INTERNAL: Do not use. - * A ForExpr. For example: - * ```rust - * todo!() - * ``` - */ - class ForExpr extends @for_expr, Expr { - override string toString() { result = "ForExpr" } - - /** - * Gets the `index`th attr of this for expression (0-based). - */ - Attr getAttr(int index) { for_expr_attrs(this, index, result) } - - /** - * Gets the iterable of this for expression, if it exists. - */ - Expr getIterable() { for_expr_iterables(this, result) } - - /** - * Gets the label of this for expression, if it exists. - */ - Label getLabel() { for_expr_labels(this, result) } - - /** - * Gets the loop body of this for expression, if it exists. - */ - BlockExpr getLoopBody() { for_expr_loop_bodies(this, result) } - - /** - * Gets the pat of this for expression, if it exists. - */ - Pat getPat() { for_expr_pats(this, result) } - } - /** * INTERNAL: Do not use. * A ForType. For example: @@ -2071,6 +1971,17 @@ module Raw { string getCrateOrigin() { item_crate_origins(this, result) } } + /** + * INTERNAL: Do not use. + * The base class for expressions that can be labeled (`LoopExpr`, `ForExpr`, `WhileExpr` or `BlockExpr`). + */ + class LabelableExpr extends @labelable_expr, Expr { + /** + * Gets the label of this labelable expression, if it exists. + */ + Label getLabel() { labelable_expr_labels(this, result) } + } + /** * INTERNAL: Do not use. * A `let` expression. For example: @@ -2231,50 +2142,6 @@ module Raw { LiteralExpr getLiteral() { literal_pat_literals(this, result) } } - /** - * INTERNAL: Do not use. - * A loop expression. For example: - * ```rust - * loop { - * println!("Hello, world (again)!"); - * }; - * ``` - * ```rust - * 'label: loop { - * println!("Hello, world (once)!"); - * break 'label; - * }; - * ``` - * ```rust - * let mut x = 0; - * loop { - * if x < 10 { - * x += 1; - * } else { - * break; - * } - * }; - * ``` - */ - class LoopExpr extends @loop_expr, Expr { - override string toString() { result = "LoopExpr" } - - /** - * Gets the `index`th attr of this loop expression (0-based). - */ - Attr getAttr(int index) { loop_expr_attrs(this, index, result) } - - /** - * Gets the label of this loop expression, if it exists. - */ - Label getLabel() { loop_expr_labels(this, result) } - - /** - * Gets the loop body of this loop expression, if it exists. - */ - BlockExpr getLoopBody() { loop_expr_loop_bodies(this, result) } - } - /** * INTERNAL: Do not use. * A MacroExpr. For example: @@ -3063,37 +2930,6 @@ module Raw { Attr getAttr(int index) { underscore_expr_attrs(this, index, result) } } - /** - * INTERNAL: Do not use. - * A WhileExpr. For example: - * ```rust - * todo!() - * ``` - */ - class WhileExpr extends @while_expr, Expr { - override string toString() { result = "WhileExpr" } - - /** - * Gets the `index`th attr of this while expression (0-based). - */ - Attr getAttr(int index) { while_expr_attrs(this, index, result) } - - /** - * Gets the condition of this while expression, if it exists. - */ - Expr getCondition() { while_expr_conditions(this, result) } - - /** - * Gets the label of this while expression, if it exists. - */ - Label getLabel() { while_expr_labels(this, result) } - - /** - * Gets the loop body of this while expression, if it exists. - */ - BlockExpr getLoopBody() { while_expr_loop_bodies(this, result) } - } - /** * INTERNAL: Do not use. * A wildcard pattern. For example: @@ -3152,6 +2988,65 @@ module Raw { Expr getExpr() { yield_expr_exprs(this, result) } } + /** + * INTERNAL: Do not use. + * A block expression. For example: + * ```rust + * { + * let x = 42; + * } + * ``` + * ```rust + * 'label: { + * let x = 42; + * x + * } + * ``` + */ + class BlockExpr extends @block_expr, LabelableExpr { + override string toString() { result = "BlockExpr" } + + /** + * Gets the `index`th attr of this block expression (0-based). + */ + Attr getAttr(int index) { block_expr_attrs(this, index, result) } + + /** + * Holds if this block expression is async. + */ + predicate isAsync() { block_expr_is_async(this) } + + /** + * Holds if this block expression is const. + */ + predicate isConst() { block_expr_is_const(this) } + + /** + * Holds if this block expression is gen. + */ + predicate isGen() { block_expr_is_gen(this) } + + /** + * Holds if this block expression is move. + */ + predicate isMove() { block_expr_is_move(this) } + + /** + * Holds if this block expression is try. + */ + predicate isTry() { block_expr_is_try(this) } + + /** + * Holds if this block expression is unsafe. + */ + predicate isUnsafe() { block_expr_is_unsafe(this) } + + /** + * Gets the statement list of this block expression, if it exists. + */ + StmtList getStmtList() { block_expr_stmt_lists(this, result) } + } + /** * INTERNAL: Do not use. * A function call expression. For example: @@ -3458,6 +3353,17 @@ module Raw { WhereClause getWhereClause() { impl_where_clauses(this, result) } } + /** + * INTERNAL: Do not use. + * The base class for expressions that loop (`LoopExpr`, `ForExpr` or `WhileExpr`). + */ + class LoopingExpr extends @looping_expr, LabelableExpr { + /** + * Gets the loop body of this looping expression, if it exists. + */ + BlockExpr getLoopBody() { looping_expr_loop_bodies(this, result) } + } + /** * INTERNAL: Do not use. * A MacroCall. For example: @@ -3950,4 +3856,85 @@ module Raw { */ Visibility getVisibility() { use_visibilities(this, result) } } + + /** + * INTERNAL: Do not use. + * A ForExpr. For example: + * ```rust + * todo!() + * ``` + */ + class ForExpr extends @for_expr, LoopingExpr { + override string toString() { result = "ForExpr" } + + /** + * Gets the `index`th attr of this for expression (0-based). + */ + Attr getAttr(int index) { for_expr_attrs(this, index, result) } + + /** + * Gets the iterable of this for expression, if it exists. + */ + Expr getIterable() { for_expr_iterables(this, result) } + + /** + * Gets the pat of this for expression, if it exists. + */ + Pat getPat() { for_expr_pats(this, result) } + } + + /** + * INTERNAL: Do not use. + * A loop expression. For example: + * ```rust + * loop { + * println!("Hello, world (again)!"); + * }; + * ``` + * ```rust + * 'label: loop { + * println!("Hello, world (once)!"); + * break 'label; + * }; + * ``` + * ```rust + * let mut x = 0; + * loop { + * if x < 10 { + * x += 1; + * } else { + * break; + * } + * }; + * ``` + */ + class LoopExpr extends @loop_expr, LoopingExpr { + override string toString() { result = "LoopExpr" } + + /** + * Gets the `index`th attr of this loop expression (0-based). + */ + Attr getAttr(int index) { loop_expr_attrs(this, index, result) } + } + + /** + * INTERNAL: Do not use. + * A WhileExpr. For example: + * ```rust + * todo!() + * ``` + */ + class WhileExpr extends @while_expr, LoopingExpr { + override string toString() { result = "WhileExpr" } + + /** + * Gets the `index`th attr of this while expression (0-based). + */ + Attr getAttr(int index) { while_expr_attrs(this, index, result) } + + /** + * Gets the condition of this while expression, if it exists. + */ + Expr getCondition() { while_expr_conditions(this, result) } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index 927ba1f238d8..dda242ffdf93 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -645,12 +645,12 @@ module Synth { * INTERNAL: Do not use. */ class TExpr = - TArrayExpr or TAsmExpr or TAwaitExpr or TBecomeExpr or TBinaryExpr or TBlockExpr or - TBreakExpr or TCallExprBase or TCastExpr or TClosureExpr or TContinueExpr or TFieldExpr or - TForExpr or TFormatArgsExpr or TIfExpr or TIndexExpr or TLetExpr or TLiteralExpr or - TLoopExpr or TMacroExpr or TMatchExpr or TOffsetOfExpr or TParenExpr or TPathExprBase or - TPrefixExpr or TRangeExpr or TRecordExpr or TRefExpr or TReturnExpr or TTryExpr or - TTupleExpr or TUnderscoreExpr or TWhileExpr or TYeetExpr or TYieldExpr; + TArrayExpr or TAsmExpr or TAwaitExpr or TBecomeExpr or TBinaryExpr or TBreakExpr or + TCallExprBase or TCastExpr or TClosureExpr or TContinueExpr or TFieldExpr or + TFormatArgsExpr or TIfExpr or TIndexExpr or TLabelableExpr or TLetExpr or TLiteralExpr or + TMacroExpr or TMatchExpr or TOffsetOfExpr or TParenExpr or TPathExprBase or TPrefixExpr or + TRangeExpr or TRecordExpr or TRefExpr or TReturnExpr or TTryExpr or TTupleExpr or + TUnderscoreExpr or TYeetExpr or TYieldExpr; /** * INTERNAL: Do not use. @@ -680,11 +680,21 @@ module Synth { TMacroDef or TMacroRules or TModule or TStatic or TStruct or TTrait or TTraitAlias or TTypeAlias or TUnion or TUse; + /** + * INTERNAL: Do not use. + */ + class TLabelableExpr = TBlockExpr or TLoopingExpr; + /** * INTERNAL: Do not use. */ class TLocatable = TAstNode or TFormat or TFormatArgument; + /** + * INTERNAL: Do not use. + */ + class TLoopingExpr = TForExpr or TLoopExpr or TWhileExpr; + /** * INTERNAL: Do not use. */ @@ -1795,8 +1805,6 @@ module Synth { or result = convertBinaryExprFromRaw(e) or - result = convertBlockExprFromRaw(e) - or result = convertBreakExprFromRaw(e) or result = convertCallExprBaseFromRaw(e) @@ -1809,20 +1817,18 @@ module Synth { or result = convertFieldExprFromRaw(e) or - result = convertForExprFromRaw(e) - or result = convertFormatArgsExprFromRaw(e) or result = convertIfExprFromRaw(e) or result = convertIndexExprFromRaw(e) or + result = convertLabelableExprFromRaw(e) + or result = convertLetExprFromRaw(e) or result = convertLiteralExprFromRaw(e) or - result = convertLoopExprFromRaw(e) - or result = convertMacroExprFromRaw(e) or result = convertMatchExprFromRaw(e) @@ -1849,8 +1855,6 @@ module Synth { or result = convertUnderscoreExprFromRaw(e) or - result = convertWhileExprFromRaw(e) - or result = convertYeetExprFromRaw(e) or result = convertYieldExprFromRaw(e) @@ -1946,6 +1950,16 @@ module Synth { result = convertUseFromRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a raw DB element to a synthesized `TLabelableExpr`, if possible. + */ + TLabelableExpr convertLabelableExprFromRaw(Raw::Element e) { + result = convertBlockExprFromRaw(e) + or + result = convertLoopingExprFromRaw(e) + } + /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TLocatable`, if possible. @@ -1958,6 +1972,18 @@ module Synth { result = convertFormatArgumentFromRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a raw DB element to a synthesized `TLoopingExpr`, if possible. + */ + TLoopingExpr convertLoopingExprFromRaw(Raw::Element e) { + result = convertForExprFromRaw(e) + or + result = convertLoopExprFromRaw(e) + or + result = convertWhileExprFromRaw(e) + } + /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TPat`, if possible. @@ -3145,8 +3171,6 @@ module Synth { or result = convertBinaryExprToRaw(e) or - result = convertBlockExprToRaw(e) - or result = convertBreakExprToRaw(e) or result = convertCallExprBaseToRaw(e) @@ -3159,20 +3183,18 @@ module Synth { or result = convertFieldExprToRaw(e) or - result = convertForExprToRaw(e) - or result = convertFormatArgsExprToRaw(e) or result = convertIfExprToRaw(e) or result = convertIndexExprToRaw(e) or + result = convertLabelableExprToRaw(e) + or result = convertLetExprToRaw(e) or result = convertLiteralExprToRaw(e) or - result = convertLoopExprToRaw(e) - or result = convertMacroExprToRaw(e) or result = convertMatchExprToRaw(e) @@ -3199,8 +3221,6 @@ module Synth { or result = convertUnderscoreExprToRaw(e) or - result = convertWhileExprToRaw(e) - or result = convertYeetExprToRaw(e) or result = convertYieldExprToRaw(e) @@ -3296,6 +3316,16 @@ module Synth { result = convertUseToRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TLabelableExpr` to a raw DB element, if possible. + */ + Raw::Element convertLabelableExprToRaw(TLabelableExpr e) { + result = convertBlockExprToRaw(e) + or + result = convertLoopingExprToRaw(e) + } + /** * INTERNAL: Do not use. * Converts a synthesized `TLocatable` to a raw DB element, if possible. @@ -3308,6 +3338,18 @@ module Synth { result = convertFormatArgumentToRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TLoopingExpr` to a raw DB element, if possible. + */ + Raw::Element convertLoopingExprToRaw(TLoopingExpr e) { + result = convertForExprToRaw(e) + or + result = convertLoopExprToRaw(e) + or + result = convertWhileExprToRaw(e) + } + /** * INTERNAL: Do not use. * Converts a synthesized `TPat` to a raw DB element, if possible. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/WhileExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/WhileExpr.qll index 5cd48bb25063..fa4a4aee65c5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/WhileExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/WhileExpr.qll @@ -7,10 +7,8 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.Attr -import codeql.rust.elements.BlockExpr import codeql.rust.elements.Expr -import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl -import codeql.rust.elements.Label +import codeql.rust.elements.internal.LoopingExprImpl::Impl as LoopingExprImpl /** * INTERNAL: This module contains the fully generated definition of `WhileExpr` and should not @@ -25,7 +23,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::WhileExpr` class directly. * Use the subclass `WhileExpr`, where the following predicates are available. */ - class WhileExpr extends Synth::TWhileExpr, ExprImpl::Expr { + class WhileExpr extends Synth::TWhileExpr, LoopingExprImpl::LoopingExpr { override string getAPrimaryQlClass() { result = "WhileExpr" } /** @@ -58,33 +56,5 @@ module Generated { * Holds if `getCondition()` exists. */ final predicate hasCondition() { exists(this.getCondition()) } - - /** - * Gets the label of this while expression, if it exists. - */ - Label getLabel() { - result = - Synth::convertLabelFromRaw(Synth::convertWhileExprToRaw(this).(Raw::WhileExpr).getLabel()) - } - - /** - * Holds if `getLabel()` exists. - */ - final predicate hasLabel() { exists(this.getLabel()) } - - /** - * Gets the loop body of this while expression, if it exists. - */ - BlockExpr getLoopBody() { - result = - Synth::convertBlockExprFromRaw(Synth::convertWhileExprToRaw(this) - .(Raw::WhileExpr) - .getLoopBody()) - } - - /** - * Holds if `getLoopBody()` exists. - */ - final predicate hasLoopBody() { exists(this.getLoopBody()) } } } diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 666a1e2b0e16..c9933b5b5e33 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -292,20 +292,18 @@ closure_binder_generic_param_lists( | @await_expr | @become_expr | @binary_expr -| @block_expr | @break_expr | @call_expr_base | @cast_expr | @closure_expr | @continue_expr | @field_expr -| @for_expr | @format_args_expr | @if_expr | @index_expr +| @labelable_expr | @let_expr | @literal_expr -| @loop_expr | @macro_expr | @match_expr | @offset_of_expr @@ -319,7 +317,6 @@ closure_binder_generic_param_lists( | @try_expr | @tuple_expr | @underscore_expr -| @while_expr | @yeet_expr | @yield_expr ; @@ -1314,59 +1311,6 @@ binary_expr_rhs( int rhs: @expr ref ); -block_exprs( - unique int id: @block_expr -); - -#keyset[id, index] -block_expr_attrs( - int id: @block_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -block_expr_is_async( - int id: @block_expr ref -); - -#keyset[id] -block_expr_is_const( - int id: @block_expr ref -); - -#keyset[id] -block_expr_is_gen( - int id: @block_expr ref -); - -#keyset[id] -block_expr_is_move( - int id: @block_expr ref -); - -#keyset[id] -block_expr_is_try( - int id: @block_expr ref -); - -#keyset[id] -block_expr_is_unsafe( - int id: @block_expr ref -); - -#keyset[id] -block_expr_labels( - int id: @block_expr ref, - int label: @label ref -); - -#keyset[id] -block_expr_stmt_lists( - int id: @block_expr ref, - int stmt_list: @stmt_list ref -); - box_pats( unique int id: @box_pat ); @@ -1650,41 +1594,6 @@ fn_ptr_type_ret_types( int ret_type: @ret_type ref ); -for_exprs( - unique int id: @for_expr -); - -#keyset[id, index] -for_expr_attrs( - int id: @for_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -for_expr_iterables( - int id: @for_expr ref, - int iterable: @expr ref -); - -#keyset[id] -for_expr_labels( - int id: @for_expr ref, - int label: @label ref -); - -#keyset[id] -for_expr_loop_bodies( - int id: @for_expr ref, - int loop_body: @block_expr ref -); - -#keyset[id] -for_expr_pats( - int id: @for_expr ref, - int pat: @pat ref -); - for_types( unique int id: @for_type ); @@ -1856,6 +1765,17 @@ item_crate_origins( string crate_origin: string ref ); +@labelable_expr = + @block_expr +| @looping_expr +; + +#keyset[id] +labelable_expr_labels( + int id: @labelable_expr ref, + int label: @label ref +); + let_exprs( unique int id: @let_expr ); @@ -1974,29 +1894,6 @@ literal_pat_literals( int literal: @literal_expr ref ); -loop_exprs( - unique int id: @loop_expr -); - -#keyset[id, index] -loop_expr_attrs( - int id: @loop_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -loop_expr_labels( - int id: @loop_expr ref, - int label: @label ref -); - -#keyset[id] -loop_expr_loop_bodies( - int id: @loop_expr ref, - int loop_body: @block_expr ref -); - macro_exprs( unique int id: @macro_expr ); @@ -2555,35 +2452,6 @@ underscore_expr_attrs( int attr: @attr ref ); -while_exprs( - unique int id: @while_expr -); - -#keyset[id, index] -while_expr_attrs( - int id: @while_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -while_expr_conditions( - int id: @while_expr ref, - int condition: @expr ref -); - -#keyset[id] -while_expr_labels( - int id: @while_expr ref, - int label: @label ref -); - -#keyset[id] -while_expr_loop_bodies( - int id: @while_expr ref, - int loop_body: @block_expr ref -); - wildcard_pats( unique int id: @wildcard_pat ); @@ -2622,6 +2490,53 @@ yield_expr_exprs( int expr: @expr ref ); +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +block_expr_is_async( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_const( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_gen( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_move( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_try( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + call_exprs( unique int id: @call_expr ); @@ -2908,6 +2823,18 @@ impl_where_clauses( int where_clause: @where_clause ref ); +@looping_expr = + @for_expr +| @loop_expr +| @while_expr +; + +#keyset[id] +looping_expr_loop_bodies( + int id: @looping_expr ref, + int loop_body: @block_expr ref +); + macro_calls( unique int id: @macro_call ); @@ -3368,3 +3295,54 @@ use_visibilities( int id: @use ref, int visibility: @visibility ref ); + +for_exprs( + unique int id: @for_expr +); + +#keyset[id, index] +for_expr_attrs( + int id: @for_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +for_expr_iterables( + int id: @for_expr ref, + int iterable: @expr ref +); + +#keyset[id] +for_expr_pats( + int id: @for_expr ref, + int pat: @pat ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @attr ref +); + +while_exprs( + unique int id: @while_expr +); + +#keyset[id, index] +while_expr_attrs( + int id: @while_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql index 581070545155..992c06a605b6 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql @@ -3,11 +3,12 @@ import codeql.rust.elements import TestUtils from - BlockExpr x, int getNumberOfAttrs, string isAsync, string isConst, string isGen, string isMove, - string isTry, string isUnsafe, string hasLabel, string hasStmtList + BlockExpr x, string hasLabel, int getNumberOfAttrs, string isAsync, string isConst, string isGen, + string isMove, string isTry, string isUnsafe, string hasStmtList where toBeTested(x) and not x.isUnknown() and + (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.isAsync() then isAsync = "yes" else isAsync = "no") and (if x.isConst() then isConst = "yes" else isConst = "no") and @@ -15,8 +16,7 @@ where (if x.isMove() then isMove = "yes" else isMove = "no") and (if x.isTry() then isTry = "yes" else isTry = "no") and (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and - (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and if x.hasStmtList() then hasStmtList = "yes" else hasStmtList = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "isAsync:", isAsync, "isConst:", isConst, "isGen:", - isGen, "isMove:", isMove, "isTry:", isTry, "isUnsafe:", isUnsafe, "hasLabel:", hasLabel, +select x, "hasLabel:", hasLabel, "getNumberOfAttrs:", getNumberOfAttrs, "isAsync:", isAsync, + "isConst:", isConst, "isGen:", isGen, "isMove:", isMove, "isTry:", isTry, "isUnsafe:", isUnsafe, "hasStmtList:", hasStmtList diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.ql b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.ql index ef1999ff4a9d..60f5ab1e0809 100644 --- a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.ql @@ -3,15 +3,15 @@ import codeql.rust.elements import TestUtils from - ForExpr x, int getNumberOfAttrs, string hasIterable, string hasLabel, string hasLoopBody, + ForExpr x, string hasLabel, string hasLoopBody, int getNumberOfAttrs, string hasIterable, string hasPat where toBeTested(x) and not x.isUnknown() and - getNumberOfAttrs = x.getNumberOfAttrs() and - (if x.hasIterable() then hasIterable = "yes" else hasIterable = "no") and (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and (if x.hasLoopBody() then hasLoopBody = "yes" else hasLoopBody = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasIterable() then hasIterable = "yes" else hasIterable = "no") and if x.hasPat() then hasPat = "yes" else hasPat = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasIterable:", hasIterable, "hasLabel:", hasLabel, - "hasLoopBody:", hasLoopBody, "hasPat:", hasPat +select x, "hasLabel:", hasLabel, "hasLoopBody:", hasLoopBody, "getNumberOfAttrs:", getNumberOfAttrs, + "hasIterable:", hasIterable, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.ql b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.ql index c627fb16771a..92248ab5ec07 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.ql +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.ql @@ -2,11 +2,11 @@ import codeql.rust.elements import TestUtils -from LoopExpr x, int getNumberOfAttrs, string hasLabel, string hasLoopBody +from LoopExpr x, string hasLabel, string hasLoopBody, int getNumberOfAttrs where toBeTested(x) and not x.isUnknown() and - getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and - if x.hasLoopBody() then hasLoopBody = "yes" else hasLoopBody = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasLabel:", hasLabel, "hasLoopBody:", hasLoopBody + (if x.hasLoopBody() then hasLoopBody = "yes" else hasLoopBody = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() +select x, "hasLabel:", hasLabel, "hasLoopBody:", hasLoopBody, "getNumberOfAttrs:", getNumberOfAttrs diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.ql b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.ql index ceb095e9d201..8544014e571a 100644 --- a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.ql +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.ql @@ -2,13 +2,13 @@ import codeql.rust.elements import TestUtils -from WhileExpr x, int getNumberOfAttrs, string hasCondition, string hasLabel, string hasLoopBody +from WhileExpr x, string hasLabel, string hasLoopBody, int getNumberOfAttrs, string hasCondition where toBeTested(x) and not x.isUnknown() and - getNumberOfAttrs = x.getNumberOfAttrs() and - (if x.hasCondition() then hasCondition = "yes" else hasCondition = "no") and (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and - if x.hasLoopBody() then hasLoopBody = "yes" else hasLoopBody = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasCondition:", hasCondition, "hasLabel:", - hasLabel, "hasLoopBody:", hasLoopBody + (if x.hasLoopBody() then hasLoopBody = "yes" else hasLoopBody = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + if x.hasCondition() then hasCondition = "yes" else hasCondition = "no" +select x, "hasLabel:", hasLabel, "hasLoopBody:", hasLoopBody, "getNumberOfAttrs:", getNumberOfAttrs, + "hasCondition:", hasCondition diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 6260c2328a6e..b7cb71bacfb3 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -11,10 +11,10 @@ edges | test.rs:7:9:7:19 | method_call | test.rs:7:9:7:21 | method_call(...) | | | test.rs:7:9:7:21 | method_call(...) | test.rs:5:24:8:5 | { ... } | | | test.rs:7:9:7:22 | ExprStmt | test.rs:7:9:7:19 | method_call | | -| test.rs:10:5:13:5 | enter fn method_call | test.rs:11:9:11:37 | let map = ... | | +| test.rs:10:5:13:5 | enter fn method_call | test.rs:11:9:11:37 | let ... = ... | | | test.rs:10:5:13:5 | exit fn method_call (normal) | test.rs:10:5:13:5 | exit fn method_call | | | test.rs:10:22:13:5 | { ... } | test.rs:10:5:13:5 | exit fn method_call (normal) | | -| test.rs:11:9:11:37 | let map = ... | test.rs:11:23:11:34 | HashMap::new | | +| test.rs:11:9:11:37 | let ... = ... | test.rs:11:23:11:34 | HashMap::new | | | test.rs:11:13:11:19 | map | test.rs:12:9:12:28 | ExprStmt | match | | test.rs:11:23:11:34 | HashMap::new | test.rs:11:23:11:36 | HashMap::new(...) | | | test.rs:11:23:11:36 | HashMap::new(...) | test.rs:11:13:11:19 | map | | @@ -25,21 +25,21 @@ edges | test.rs:12:24:12:26 | "a" | test.rs:12:9:12:27 | ... .insert(...) | | | test.rs:18:5:24:5 | enter fn next | test.rs:18:13:18:13 | n | | | test.rs:18:5:24:5 | exit fn next (normal) | test.rs:18:5:24:5 | exit fn next | | -| test.rs:18:13:18:13 | n | test.rs:18:13:18:18 | n: i64 | match | -| test.rs:18:13:18:18 | n: i64 | test.rs:19:12:19:12 | n | | +| test.rs:18:13:18:13 | n | test.rs:18:13:18:18 | ...: i64 | match | +| test.rs:18:13:18:18 | ...: i64 | test.rs:19:12:19:12 | n | | | test.rs:18:28:24:5 | { ... } | test.rs:18:5:24:5 | exit fn next (normal) | | -| test.rs:19:9:23:9 | if ... { ... } else { ... } | test.rs:18:28:24:5 | { ... } | | +| test.rs:19:9:23:9 | if ... {...} else {...} | test.rs:18:28:24:5 | { ... } | | | test.rs:19:12:19:12 | n | test.rs:19:16:19:16 | 2 | | | test.rs:19:12:19:16 | ... % ... | test.rs:19:21:19:21 | 0 | | | test.rs:19:12:19:21 | ... == ... | test.rs:20:13:20:13 | n | true | | test.rs:19:12:19:21 | ... == ... | test.rs:22:13:22:13 | 3 | false | | test.rs:19:16:19:16 | 2 | test.rs:19:12:19:16 | ... % ... | | | test.rs:19:21:19:21 | 0 | test.rs:19:12:19:21 | ... == ... | | -| test.rs:19:23:21:9 | { ... } | test.rs:19:9:23:9 | if ... { ... } else { ... } | | +| test.rs:19:23:21:9 | { ... } | test.rs:19:9:23:9 | if ... {...} else {...} | | | test.rs:20:13:20:13 | n | test.rs:20:17:20:17 | 2 | | | test.rs:20:13:20:17 | ... / ... | test.rs:19:23:21:9 | { ... } | | | test.rs:20:17:20:17 | 2 | test.rs:20:13:20:17 | ... / ... | | -| test.rs:21:16:23:9 | { ... } | test.rs:19:9:23:9 | if ... { ... } else { ... } | | +| test.rs:21:16:23:9 | { ... } | test.rs:19:9:23:9 | if ... {...} else {...} | | | test.rs:22:13:22:13 | 3 | test.rs:22:17:22:17 | n | | | test.rs:22:13:22:17 | ... * ... | test.rs:22:21:22:21 | 1 | | | test.rs:22:13:22:21 | ... + ... | test.rs:21:16:23:9 | { ... } | | @@ -47,13 +47,13 @@ edges | test.rs:22:21:22:21 | 1 | test.rs:22:13:22:21 | ... + ... | | | test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:26:32:26:32 | n | | | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:26:5:42:5 | exit fn test_break_and_continue | | -| test.rs:26:32:26:32 | n | test.rs:26:32:26:37 | n: i64 | match | -| test.rs:26:32:26:37 | n: i64 | test.rs:27:9:27:22 | let i = ... | | -| test.rs:27:9:27:22 | let i = ... | test.rs:27:21:27:21 | n | | +| test.rs:26:32:26:32 | n | test.rs:26:32:26:37 | ...: i64 | match | +| test.rs:26:32:26:37 | ...: i64 | test.rs:27:9:27:22 | let ... = n | | +| test.rs:27:9:27:22 | let ... = n | test.rs:27:21:27:21 | n | | | test.rs:27:13:27:17 | i | test.rs:28:9:40:9 | ExprStmt | match | | test.rs:27:21:27:21 | n | test.rs:27:13:27:17 | i | | | test.rs:28:9:40:9 | ExprStmt | test.rs:29:13:29:24 | ExprStmt | | -| test.rs:28:9:40:9 | loop {...} | test.rs:41:9:41:20 | ExprStmt | | +| test.rs:28:9:40:9 | loop { ... } | test.rs:41:9:41:20 | ExprStmt | | | test.rs:28:14:40:9 | { ... } | test.rs:29:13:29:24 | ExprStmt | | | test.rs:29:13:29:13 | i | test.rs:29:17:29:20 | next | | | test.rs:29:13:29:23 | ... = ... | test.rs:30:13:32:13 | ExprStmt | | @@ -62,27 +62,27 @@ edges | test.rs:29:17:29:23 | next(...) | test.rs:29:13:29:23 | ... = ... | | | test.rs:29:22:29:22 | i | test.rs:29:17:29:23 | next(...) | | | test.rs:30:13:32:13 | ExprStmt | test.rs:30:16:30:16 | i | | -| test.rs:30:13:32:13 | if ... { ... } | test.rs:33:13:35:13 | ExprStmt | | +| test.rs:30:13:32:13 | if ... {...} | test.rs:33:13:35:13 | ExprStmt | | | test.rs:30:16:30:16 | i | test.rs:30:20:30:24 | 10000 | | -| test.rs:30:16:30:24 | ... > ... | test.rs:30:13:32:13 | if ... { ... } | false | +| test.rs:30:16:30:24 | ... > ... | test.rs:30:13:32:13 | if ... {...} | false | | test.rs:30:16:30:24 | ... > ... | test.rs:31:17:31:29 | ExprStmt | true | | test.rs:30:20:30:24 | 10000 | test.rs:30:16:30:24 | ... > ... | | -| test.rs:31:17:31:28 | return ... | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | return | +| test.rs:31:17:31:28 | return false | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | return | | test.rs:31:17:31:29 | ExprStmt | test.rs:31:24:31:28 | false | | -| test.rs:31:24:31:28 | false | test.rs:31:17:31:28 | return ... | | +| test.rs:31:24:31:28 | false | test.rs:31:17:31:28 | return false | | | test.rs:33:13:35:13 | ExprStmt | test.rs:33:16:33:16 | i | | -| test.rs:33:13:35:13 | if ... { ... } | test.rs:36:13:38:13 | ExprStmt | | +| test.rs:33:13:35:13 | if ... {...} | test.rs:36:13:38:13 | ExprStmt | | | test.rs:33:16:33:16 | i | test.rs:33:21:33:21 | 1 | | -| test.rs:33:16:33:21 | ... == ... | test.rs:33:13:35:13 | if ... { ... } | false | +| test.rs:33:16:33:21 | ... == ... | test.rs:33:13:35:13 | if ... {...} | false | | test.rs:33:16:33:21 | ... == ... | test.rs:34:17:34:22 | ExprStmt | true | | test.rs:33:21:33:21 | 1 | test.rs:33:16:33:21 | ... == ... | | -| test.rs:34:17:34:21 | break | test.rs:28:9:40:9 | loop {...} | break | +| test.rs:34:17:34:21 | break | test.rs:28:9:40:9 | loop { ... } | break | | test.rs:34:17:34:22 | ExprStmt | test.rs:34:17:34:21 | break | | | test.rs:36:13:38:13 | ExprStmt | test.rs:36:16:36:16 | i | | -| test.rs:36:13:38:13 | if ... { ... } | test.rs:39:13:39:13 | i | | +| test.rs:36:13:38:13 | if ... {...} | test.rs:39:13:39:13 | i | | | test.rs:36:16:36:16 | i | test.rs:36:20:36:20 | 2 | | | test.rs:36:16:36:20 | ... % ... | test.rs:36:25:36:25 | 0 | | -| test.rs:36:16:36:25 | ... != ... | test.rs:36:13:38:13 | if ... { ... } | false | +| test.rs:36:16:36:25 | ... != ... | test.rs:36:13:38:13 | if ... {...} | false | | test.rs:36:16:36:25 | ... != ... | test.rs:37:17:37:25 | ExprStmt | true | | test.rs:36:20:36:20 | 2 | test.rs:36:16:36:20 | ... % ... | | | test.rs:36:25:36:25 | 0 | test.rs:36:16:36:25 | ... != ... | | @@ -93,156 +93,156 @@ edges | test.rs:39:17:39:17 | i | test.rs:39:21:39:21 | 2 | | | test.rs:39:17:39:21 | ... / ... | test.rs:39:13:39:21 | ... = ... | | | test.rs:39:21:39:21 | 2 | test.rs:39:17:39:21 | ... / ... | | -| test.rs:41:9:41:19 | return ... | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | return | +| test.rs:41:9:41:19 | return true | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | return | | test.rs:41:9:41:20 | ExprStmt | test.rs:41:16:41:19 | true | | -| test.rs:41:16:41:19 | true | test.rs:41:9:41:19 | return ... | | +| test.rs:41:16:41:19 | true | test.rs:41:9:41:19 | return true | | | test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:44:31:44:31 | b | | | test.rs:44:5:56:5 | exit fn test_break_with_labels (normal) | test.rs:44:5:56:5 | exit fn test_break_with_labels | | -| test.rs:44:31:44:31 | b | test.rs:44:31:44:37 | b: bool | match | -| test.rs:44:31:44:37 | b: bool | test.rs:45:9:54:9 | ExprStmt | | +| test.rs:44:31:44:31 | b | test.rs:44:31:44:37 | ...: bool | match | +| test.rs:44:31:44:37 | ...: bool | test.rs:45:9:54:9 | ExprStmt | | | test.rs:44:48:56:5 | { ... } | test.rs:44:5:56:5 | exit fn test_break_with_labels (normal) | | +| test.rs:45:9:54:9 | ''outer: loop { ... } | test.rs:55:9:55:12 | true | | | test.rs:45:9:54:9 | ExprStmt | test.rs:47:17:51:17 | ExprStmt | | -| test.rs:45:9:54:9 | loop {...} | test.rs:55:9:55:12 | true | | | test.rs:45:22:54:9 | { ... } | test.rs:47:17:51:17 | ExprStmt | | -| test.rs:46:13:53:13 | loop {...} | test.rs:45:22:54:9 | { ... } | | +| test.rs:46:13:53:13 | ''inner: loop { ... } | test.rs:45:22:54:9 | { ... } | | | test.rs:47:17:51:17 | ExprStmt | test.rs:47:20:47:20 | b | | -| test.rs:47:17:51:17 | if ... { ... } else { ... } | test.rs:52:17:52:29 | ExprStmt | | +| test.rs:47:17:51:17 | if b {...} else {...} | test.rs:52:17:52:29 | ExprStmt | | | test.rs:47:20:47:20 | b | test.rs:48:21:48:26 | ExprStmt | true | | test.rs:47:20:47:20 | b | test.rs:49:27:49:27 | b | false | -| test.rs:48:21:48:25 | break | test.rs:46:13:53:13 | loop {...} | break | +| test.rs:48:21:48:25 | break | test.rs:46:13:53:13 | ''inner: loop { ... } | break | | test.rs:48:21:48:26 | ExprStmt | test.rs:48:21:48:25 | break | | -| test.rs:49:24:51:17 | if ... { ... } | test.rs:47:17:51:17 | if ... { ... } else { ... } | | -| test.rs:49:27:49:27 | b | test.rs:49:24:51:17 | if ... { ... } | false | +| test.rs:49:24:51:17 | if b {...} | test.rs:47:17:51:17 | if b {...} else {...} | | +| test.rs:49:27:49:27 | b | test.rs:49:24:51:17 | if b {...} | false | | test.rs:49:27:49:27 | b | test.rs:50:21:50:33 | ExprStmt | true | -| test.rs:50:21:50:32 | break ''outer | test.rs:45:9:54:9 | loop {...} | break | +| test.rs:50:21:50:32 | break ''outer | test.rs:45:9:54:9 | ''outer: loop { ... } | break | | test.rs:50:21:50:33 | ExprStmt | test.rs:50:21:50:32 | break ''outer | | -| test.rs:52:17:52:28 | break ''inner | test.rs:46:13:53:13 | loop {...} | break | +| test.rs:52:17:52:28 | break ''inner | test.rs:46:13:53:13 | ''inner: loop { ... } | break | | test.rs:52:17:52:29 | ExprStmt | test.rs:52:17:52:28 | break ''inner | | | test.rs:55:9:55:12 | true | test.rs:44:48:56:5 | { ... } | | | test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:58:34:58:34 | b | | -| test.rs:58:34:58:34 | b | test.rs:58:34:58:40 | b: bool | match | -| test.rs:58:34:58:40 | b: bool | test.rs:60:13:60:14 | ExprStmt | | +| test.rs:58:34:58:34 | b | test.rs:58:34:58:40 | ...: bool | match | +| test.rs:58:34:58:40 | ...: bool | test.rs:60:13:60:14 | ExprStmt | | | test.rs:60:13:60:13 | 1 | test.rs:62:17:66:17 | ExprStmt | | | test.rs:60:13:60:14 | ExprStmt | test.rs:60:13:60:13 | 1 | | | test.rs:62:17:66:17 | ExprStmt | test.rs:62:20:62:20 | b | | -| test.rs:62:17:66:17 | if ... { ... } else { ... } | test.rs:67:17:67:32 | ExprStmt | | +| test.rs:62:17:66:17 | if b {...} else {...} | test.rs:67:17:67:32 | ExprStmt | | | test.rs:62:20:62:20 | b | test.rs:63:21:63:29 | ExprStmt | true | | test.rs:62:20:62:20 | b | test.rs:64:27:64:27 | b | false | | test.rs:63:21:63:28 | continue | test.rs:62:17:66:17 | ExprStmt | continue | | test.rs:63:21:63:29 | ExprStmt | test.rs:63:21:63:28 | continue | | -| test.rs:64:24:66:17 | if ... { ... } | test.rs:62:17:66:17 | if ... { ... } else { ... } | | -| test.rs:64:27:64:27 | b | test.rs:64:24:66:17 | if ... { ... } | false | +| test.rs:64:24:66:17 | if b {...} | test.rs:62:17:66:17 | if b {...} else {...} | | +| test.rs:64:27:64:27 | b | test.rs:64:24:66:17 | if b {...} | false | | test.rs:64:27:64:27 | b | test.rs:65:21:65:36 | ExprStmt | true | -| test.rs:65:21:65:35 | continue 'outer | test.rs:60:13:60:14 | ExprStmt | continue | -| test.rs:65:21:65:36 | ExprStmt | test.rs:65:21:65:35 | continue 'outer | | -| test.rs:67:17:67:31 | continue 'inner | test.rs:62:17:66:17 | ExprStmt | continue | -| test.rs:67:17:67:32 | ExprStmt | test.rs:67:17:67:31 | continue 'inner | | +| test.rs:65:21:65:35 | continue ''outer | test.rs:60:13:60:14 | ExprStmt | continue | +| test.rs:65:21:65:36 | ExprStmt | test.rs:65:21:65:35 | continue ''outer | | +| test.rs:67:17:67:31 | continue ''inner | test.rs:62:17:66:17 | ExprStmt | continue | +| test.rs:67:17:67:32 | ExprStmt | test.rs:67:17:67:31 | continue ''inner | | | test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | test.rs:72:34:72:34 | b | | -| test.rs:72:34:72:34 | b | test.rs:72:34:72:40 | b: bool | match | -| test.rs:72:34:72:40 | b: bool | test.rs:74:13:74:14 | ExprStmt | | +| test.rs:72:34:72:34 | b | test.rs:72:34:72:40 | ...: bool | match | +| test.rs:72:34:72:40 | ...: bool | test.rs:74:13:74:14 | ExprStmt | | | test.rs:74:13:74:13 | 1 | test.rs:76:17:80:17 | ExprStmt | | | test.rs:74:13:74:14 | ExprStmt | test.rs:74:13:74:13 | 1 | | | test.rs:76:17:80:17 | ExprStmt | test.rs:76:20:76:20 | b | | -| test.rs:76:17:80:17 | if ... { ... } else { ... } | test.rs:81:17:81:32 | ExprStmt | | +| test.rs:76:17:80:17 | if b {...} else {...} | test.rs:81:17:81:32 | ExprStmt | | | test.rs:76:20:76:20 | b | test.rs:77:21:77:29 | ExprStmt | true | | test.rs:76:20:76:20 | b | test.rs:78:27:78:27 | b | false | | test.rs:77:21:77:28 | continue | test.rs:76:17:80:17 | ExprStmt | continue | | test.rs:77:21:77:29 | ExprStmt | test.rs:77:21:77:28 | continue | | -| test.rs:78:24:80:17 | if ... { ... } | test.rs:76:17:80:17 | if ... { ... } else { ... } | | -| test.rs:78:27:78:27 | b | test.rs:78:24:80:17 | if ... { ... } | false | +| test.rs:78:24:80:17 | if b {...} | test.rs:76:17:80:17 | if b {...} else {...} | | +| test.rs:78:27:78:27 | b | test.rs:78:24:80:17 | if b {...} | false | | test.rs:78:27:78:27 | b | test.rs:79:21:79:36 | ExprStmt | true | -| test.rs:79:21:79:35 | continue 'label | test.rs:76:17:80:17 | ExprStmt | continue | -| test.rs:79:21:79:36 | ExprStmt | test.rs:79:21:79:35 | continue 'label | | -| test.rs:81:17:81:31 | continue 'label | test.rs:76:17:80:17 | ExprStmt | continue | -| test.rs:81:17:81:32 | ExprStmt | test.rs:81:17:81:31 | continue 'label | | +| test.rs:79:21:79:35 | continue ''label | test.rs:76:17:80:17 | ExprStmt | continue | +| test.rs:79:21:79:36 | ExprStmt | test.rs:79:21:79:35 | continue ''label | | +| test.rs:81:17:81:31 | continue ''label | test.rs:76:17:80:17 | ExprStmt | continue | +| test.rs:81:17:81:32 | ExprStmt | test.rs:81:17:81:31 | continue ''label | | | test.rs:86:5:95:5 | enter fn test_while | test.rs:86:19:86:19 | i | | | test.rs:86:5:95:5 | exit fn test_while (normal) | test.rs:86:5:95:5 | exit fn test_while | | -| test.rs:86:19:86:19 | i | test.rs:86:19:86:24 | i: i64 | match | -| test.rs:86:19:86:24 | i: i64 | test.rs:87:9:87:25 | let b = ... | | +| test.rs:86:19:86:19 | i | test.rs:86:19:86:24 | ...: i64 | match | +| test.rs:86:19:86:24 | ...: i64 | test.rs:87:9:87:25 | let ... = true | | | test.rs:86:27:95:5 | { ... } | test.rs:86:5:95:5 | exit fn test_while (normal) | | -| test.rs:87:9:87:25 | let b = ... | test.rs:87:21:87:24 | true | | +| test.rs:87:9:87:25 | let ... = true | test.rs:87:21:87:24 | true | | | test.rs:87:13:87:17 | b | test.rs:88:15:88:15 | b | match | | test.rs:87:21:87:24 | true | test.rs:87:13:87:17 | b | | -| test.rs:88:9:94:9 | while ... { ... } | test.rs:86:27:95:5 | { ... } | | -| test.rs:88:15:88:15 | b | test.rs:88:9:94:9 | while ... { ... } | false | +| test.rs:88:9:94:9 | while b { ... } | test.rs:86:27:95:5 | { ... } | | +| test.rs:88:15:88:15 | b | test.rs:88:9:94:9 | while b { ... } | false | | test.rs:88:15:88:15 | b | test.rs:89:13:89:14 | ExprStmt | true | | test.rs:88:17:94:9 | { ... } | test.rs:88:15:88:15 | b | | | test.rs:89:13:89:13 | 1 | test.rs:90:13:92:13 | ExprStmt | | | test.rs:89:13:89:14 | ExprStmt | test.rs:89:13:89:13 | 1 | | | test.rs:90:13:92:13 | ExprStmt | test.rs:90:17:90:17 | i | | -| test.rs:90:13:92:13 | if ... { ... } | test.rs:93:13:93:22 | ExprStmt | | +| test.rs:90:13:92:13 | if ... {...} | test.rs:93:13:93:22 | ExprStmt | | | test.rs:90:17:90:17 | i | test.rs:90:21:90:21 | 0 | | -| test.rs:90:17:90:21 | ... > ... | test.rs:90:13:92:13 | if ... { ... } | false | +| test.rs:90:17:90:21 | ... > ... | test.rs:90:13:92:13 | if ... {...} | false | | test.rs:90:17:90:21 | ... > ... | test.rs:91:17:91:22 | ExprStmt | true | | test.rs:90:21:90:21 | 0 | test.rs:90:17:90:21 | ... > ... | | -| test.rs:91:17:91:21 | break | test.rs:88:9:94:9 | while ... { ... } | break | +| test.rs:91:17:91:21 | break | test.rs:88:9:94:9 | while b { ... } | break | | test.rs:91:17:91:22 | ExprStmt | test.rs:91:17:91:21 | break | | | test.rs:93:13:93:13 | b | test.rs:93:17:93:21 | false | | | test.rs:93:13:93:21 | ... = ... | test.rs:88:17:94:9 | { ... } | | | test.rs:93:13:93:22 | ExprStmt | test.rs:93:13:93:13 | b | | | test.rs:93:17:93:21 | false | test.rs:93:13:93:21 | ... = ... | | -| test.rs:97:5:104:5 | enter fn test_while_let | test.rs:98:9:98:29 | let iter = ... | | +| test.rs:97:5:104:5 | enter fn test_while_let | test.rs:98:9:98:29 | let ... = ... | | | test.rs:97:5:104:5 | exit fn test_while_let (normal) | test.rs:97:5:104:5 | exit fn test_while_let | | | test.rs:97:25:104:5 | { ... } | test.rs:97:5:104:5 | exit fn test_while_let (normal) | | -| test.rs:98:9:98:29 | let iter = ... | test.rs:98:24:98:24 | 1 | | -| test.rs:98:13:98:20 | iter | test.rs:99:15:99:39 | let TupleStructPat = ... | match | +| test.rs:98:9:98:29 | let ... = ... | test.rs:98:24:98:24 | 1 | | +| test.rs:98:13:98:20 | iter | test.rs:99:15:99:39 | let ... = ... | match | | test.rs:98:24:98:24 | 1 | test.rs:98:27:98:28 | 10 | | -| test.rs:98:24:98:28 | ... .. ... | test.rs:98:13:98:20 | iter | | -| test.rs:98:27:98:28 | 10 | test.rs:98:24:98:28 | ... .. ... | | +| test.rs:98:24:98:28 | 1..10 | test.rs:98:13:98:20 | iter | | +| test.rs:98:27:98:28 | 10 | test.rs:98:24:98:28 | 1..10 | | | test.rs:99:9:103:9 | while ... { ... } | test.rs:97:25:104:5 | { ... } | | -| test.rs:99:15:99:39 | let TupleStructPat = ... | test.rs:99:29:99:32 | iter | | +| test.rs:99:15:99:39 | let ... = ... | test.rs:99:29:99:32 | iter | | | test.rs:99:19:99:25 | TupleStructPat | test.rs:99:9:103:9 | while ... { ... } | no-match | | test.rs:99:19:99:25 | TupleStructPat | test.rs:99:24:99:24 | x | match | | test.rs:99:24:99:24 | x | test.rs:100:17:100:17 | x | match | | test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | ... .next(...) | | | test.rs:99:29:99:39 | ... .next(...) | test.rs:99:19:99:25 | TupleStructPat | | -| test.rs:99:41:103:9 | { ... } | test.rs:99:15:99:39 | let TupleStructPat = ... | | -| test.rs:100:13:102:13 | if ... { ... } | test.rs:99:41:103:9 | { ... } | | +| test.rs:99:41:103:9 | { ... } | test.rs:99:15:99:39 | let ... = ... | | +| test.rs:100:13:102:13 | if ... {...} | test.rs:99:41:103:9 | { ... } | | | test.rs:100:17:100:17 | x | test.rs:100:22:100:22 | 5 | | -| test.rs:100:17:100:22 | ... == ... | test.rs:100:13:102:13 | if ... { ... } | false | +| test.rs:100:17:100:22 | ... == ... | test.rs:100:13:102:13 | if ... {...} | false | | test.rs:100:17:100:22 | ... == ... | test.rs:101:17:101:22 | ExprStmt | true | | test.rs:100:22:100:22 | 5 | test.rs:100:17:100:22 | ... == ... | | | test.rs:101:17:101:21 | break | test.rs:99:9:103:9 | while ... { ... } | break | | test.rs:101:17:101:22 | ExprStmt | test.rs:101:17:101:21 | break | | | test.rs:106:5:113:5 | enter fn test_for | test.rs:106:17:106:17 | j | | | test.rs:106:5:113:5 | exit fn test_for (normal) | test.rs:106:5:113:5 | exit fn test_for | | -| test.rs:106:17:106:17 | j | test.rs:106:17:106:22 | j: i64 | match | -| test.rs:106:17:106:22 | j: i64 | test.rs:107:18:107:18 | 0 | | +| test.rs:106:17:106:17 | j | test.rs:106:17:106:22 | ...: i64 | match | +| test.rs:106:17:106:22 | ...: i64 | test.rs:107:18:107:18 | 0 | | | test.rs:106:25:113:5 | { ... } | test.rs:106:5:113:5 | exit fn test_for (normal) | | -| test.rs:107:9:112:9 | for i in ... { ... } | test.rs:106:25:113:5 | { ... } | | -| test.rs:107:13:107:13 | i | test.rs:107:9:112:9 | for i in ... { ... } | no-match | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:106:25:113:5 | { ... } | | +| test.rs:107:13:107:13 | i | test.rs:107:9:112:9 | for ... in ... { ... } | no-match | | test.rs:107:13:107:13 | i | test.rs:108:13:110:13 | ExprStmt | match | | test.rs:107:18:107:18 | 0 | test.rs:107:21:107:22 | 10 | | -| test.rs:107:18:107:22 | ... .. ... | test.rs:107:13:107:13 | i | | -| test.rs:107:21:107:22 | 10 | test.rs:107:18:107:22 | ... .. ... | | +| test.rs:107:18:107:22 | 0..10 | test.rs:107:13:107:13 | i | | +| test.rs:107:21:107:22 | 10 | test.rs:107:18:107:22 | 0..10 | | | test.rs:107:24:112:9 | { ... } | test.rs:107:13:107:13 | i | | | test.rs:108:13:110:13 | ExprStmt | test.rs:108:17:108:17 | i | | -| test.rs:108:13:110:13 | if ... { ... } | test.rs:111:13:111:14 | ExprStmt | | +| test.rs:108:13:110:13 | if ... {...} | test.rs:111:13:111:14 | ExprStmt | | | test.rs:108:17:108:17 | i | test.rs:108:22:108:22 | j | | -| test.rs:108:17:108:22 | ... == ... | test.rs:108:13:110:13 | if ... { ... } | false | +| test.rs:108:17:108:22 | ... == ... | test.rs:108:13:110:13 | if ... {...} | false | | test.rs:108:17:108:22 | ... == ... | test.rs:109:17:109:22 | ExprStmt | true | | test.rs:108:22:108:22 | j | test.rs:108:17:108:22 | ... == ... | | -| test.rs:109:17:109:21 | break | test.rs:107:9:112:9 | for i in ... { ... } | break | +| test.rs:109:17:109:21 | break | test.rs:107:9:112:9 | for ... in ... { ... } | break | | test.rs:109:17:109:22 | ExprStmt | test.rs:109:17:109:21 | break | | | test.rs:111:13:111:13 | 1 | test.rs:107:24:112:9 | { ... } | | | test.rs:111:13:111:14 | ExprStmt | test.rs:111:13:111:13 | 1 | | | test.rs:115:5:119:5 | enter fn break_with_return | test.rs:117:13:117:27 | ExprStmt | | | test.rs:115:5:119:5 | exit fn break_with_return (normal) | test.rs:115:5:119:5 | exit fn break_with_return | | | test.rs:117:13:117:27 | ExprStmt | test.rs:117:26:117:26 | 1 | | -| test.rs:117:19:117:26 | return ... | test.rs:115:5:119:5 | exit fn break_with_return (normal) | return | -| test.rs:117:26:117:26 | 1 | test.rs:117:19:117:26 | return ... | | +| test.rs:117:19:117:26 | return 1 | test.rs:115:5:119:5 | exit fn break_with_return (normal) | return | +| test.rs:117:26:117:26 | 1 | test.rs:117:19:117:26 | return 1 | | | test.rs:122:1:125:1 | enter fn test_nested_function | test.rs:122:25:122:25 | n | | | test.rs:122:1:125:1 | exit fn test_nested_function (normal) | test.rs:122:1:125:1 | exit fn test_nested_function | | -| test.rs:122:25:122:25 | n | test.rs:122:25:122:30 | n: i64 | match | -| test.rs:122:25:122:30 | n: i64 | test.rs:123:5:123:28 | let add_one = ... | | +| test.rs:122:25:122:25 | n | test.rs:122:25:122:30 | ...: i64 | match | +| test.rs:122:25:122:30 | ...: i64 | test.rs:123:5:123:28 | let ... = ... | | | test.rs:122:40:125:1 | { ... } | test.rs:122:1:125:1 | exit fn test_nested_function (normal) | | -| test.rs:123:5:123:28 | let add_one = ... | test.rs:123:19:123:27 | \|...\| ... | | +| test.rs:123:5:123:28 | let ... = ... | test.rs:123:19:123:27 | \|...\| ... | | | test.rs:123:9:123:15 | add_one | test.rs:124:5:124:11 | add_one | match | | test.rs:123:19:123:27 | \|...\| ... | test.rs:123:9:123:15 | add_one | | | test.rs:123:19:123:27 | enter \|...\| ... | test.rs:123:20:123:20 | i | | | test.rs:123:19:123:27 | exit \|...\| ... (normal) | test.rs:123:19:123:27 | exit \|...\| ... | | -| test.rs:123:20:123:20 | i | test.rs:123:20:123:20 | i | match | -| test.rs:123:20:123:20 | i | test.rs:123:23:123:23 | i | | +| test.rs:123:20:123:20 | ... | test.rs:123:23:123:23 | i | | +| test.rs:123:20:123:20 | i | test.rs:123:20:123:20 | ... | match | | test.rs:123:23:123:23 | i | test.rs:123:27:123:27 | 1 | | | test.rs:123:23:123:27 | ... + ... | test.rs:123:19:123:27 | exit \|...\| ... (normal) | | | test.rs:123:27:123:27 | 1 | test.rs:123:23:123:27 | ... + ... | | @@ -253,105 +253,105 @@ edges | test.rs:124:21:124:21 | n | test.rs:124:13:124:22 | add_one(...) | | | test.rs:129:5:135:5 | enter fn test_if_else | test.rs:129:21:129:21 | n | | | test.rs:129:5:135:5 | exit fn test_if_else (normal) | test.rs:129:5:135:5 | exit fn test_if_else | | -| test.rs:129:21:129:21 | n | test.rs:129:21:129:26 | n: i64 | match | -| test.rs:129:21:129:26 | n: i64 | test.rs:130:12:130:12 | n | | +| test.rs:129:21:129:21 | n | test.rs:129:21:129:26 | ...: i64 | match | +| test.rs:129:21:129:26 | ...: i64 | test.rs:130:12:130:12 | n | | | test.rs:129:36:135:5 | { ... } | test.rs:129:5:135:5 | exit fn test_if_else (normal) | | -| test.rs:130:9:134:9 | if ... { ... } else { ... } | test.rs:129:36:135:5 | { ... } | | +| test.rs:130:9:134:9 | if ... {...} else {...} | test.rs:129:36:135:5 | { ... } | | | test.rs:130:12:130:12 | n | test.rs:130:17:130:17 | 0 | | | test.rs:130:12:130:17 | ... <= ... | test.rs:131:13:131:13 | 0 | true | | test.rs:130:12:130:17 | ... <= ... | test.rs:133:13:133:13 | n | false | | test.rs:130:17:130:17 | 0 | test.rs:130:12:130:17 | ... <= ... | | -| test.rs:130:19:132:9 | { ... } | test.rs:130:9:134:9 | if ... { ... } else { ... } | | +| test.rs:130:19:132:9 | { ... } | test.rs:130:9:134:9 | if ... {...} else {...} | | | test.rs:131:13:131:13 | 0 | test.rs:130:19:132:9 | { ... } | | -| test.rs:132:16:134:9 | { ... } | test.rs:130:9:134:9 | if ... { ... } else { ... } | | +| test.rs:132:16:134:9 | { ... } | test.rs:130:9:134:9 | if ... {...} else {...} | | | test.rs:133:13:133:13 | n | test.rs:133:17:133:17 | 1 | | | test.rs:133:13:133:17 | ... - ... | test.rs:132:16:134:9 | { ... } | | | test.rs:133:17:133:17 | 1 | test.rs:133:13:133:17 | ... - ... | | | test.rs:137:5:143:5 | enter fn test_if_let_else | test.rs:137:25:137:25 | a | | | test.rs:137:5:143:5 | exit fn test_if_let_else (normal) | test.rs:137:5:143:5 | exit fn test_if_let_else | | -| test.rs:137:25:137:25 | a | test.rs:137:25:137:38 | a: Option::<...> | match | -| test.rs:137:25:137:38 | a: Option::<...> | test.rs:138:12:138:26 | let TupleStructPat = ... | | +| test.rs:137:25:137:25 | a | test.rs:137:25:137:38 | ...: Option::<...> | match | +| test.rs:137:25:137:38 | ...: Option::<...> | test.rs:138:12:138:26 | let ... = a | | | test.rs:137:48:143:5 | { ... } | test.rs:137:5:143:5 | exit fn test_if_let_else (normal) | | -| test.rs:138:9:142:9 | if ... { ... } else { ... } | test.rs:137:48:143:5 | { ... } | | -| test.rs:138:12:138:26 | let TupleStructPat = ... | test.rs:138:26:138:26 | a | | +| test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:137:48:143:5 | { ... } | | +| test.rs:138:12:138:26 | let ... = a | test.rs:138:26:138:26 | a | | | test.rs:138:16:138:22 | TupleStructPat | test.rs:138:21:138:21 | n | match | | test.rs:138:16:138:22 | TupleStructPat | test.rs:141:13:141:13 | 0 | no-match | | test.rs:138:21:138:21 | n | test.rs:139:13:139:13 | n | match | | test.rs:138:26:138:26 | a | test.rs:138:16:138:22 | TupleStructPat | | -| test.rs:138:28:140:9 | { ... } | test.rs:138:9:142:9 | if ... { ... } else { ... } | | +| test.rs:138:28:140:9 | { ... } | test.rs:138:9:142:9 | if ... {...} else {...} | | | test.rs:139:13:139:13 | n | test.rs:138:28:140:9 | { ... } | | -| test.rs:140:16:142:9 | { ... } | test.rs:138:9:142:9 | if ... { ... } else { ... } | | +| test.rs:140:16:142:9 | { ... } | test.rs:138:9:142:9 | if ... {...} else {...} | | | test.rs:141:13:141:13 | 0 | test.rs:140:16:142:9 | { ... } | | | test.rs:145:5:150:5 | enter fn test_if_let | test.rs:145:20:145:20 | a | | | test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:145:5:150:5 | exit fn test_if_let | | -| test.rs:145:20:145:20 | a | test.rs:145:20:145:33 | a: Option::<...> | match | -| test.rs:145:20:145:33 | a: Option::<...> | test.rs:146:9:148:9 | ExprStmt | | +| test.rs:145:20:145:20 | a | test.rs:145:20:145:33 | ...: Option::<...> | match | +| test.rs:145:20:145:33 | ...: Option::<...> | test.rs:146:9:148:9 | ExprStmt | | | test.rs:145:43:150:5 | { ... } | test.rs:145:5:150:5 | exit fn test_if_let (normal) | | -| test.rs:146:9:148:9 | ExprStmt | test.rs:146:12:146:26 | let TupleStructPat = ... | | -| test.rs:146:9:148:9 | if ... { ... } | test.rs:149:9:149:9 | 0 | | -| test.rs:146:12:146:26 | let TupleStructPat = ... | test.rs:146:26:146:26 | a | | -| test.rs:146:16:146:22 | TupleStructPat | test.rs:146:9:148:9 | if ... { ... } | no-match | +| test.rs:146:9:148:9 | ExprStmt | test.rs:146:12:146:26 | let ... = a | | +| test.rs:146:9:148:9 | if ... {...} | test.rs:149:9:149:9 | 0 | | +| test.rs:146:12:146:26 | let ... = a | test.rs:146:26:146:26 | a | | +| test.rs:146:16:146:22 | TupleStructPat | test.rs:146:9:148:9 | if ... {...} | no-match | | test.rs:146:16:146:22 | TupleStructPat | test.rs:146:21:146:21 | n | match | | test.rs:146:21:146:21 | n | test.rs:147:13:147:21 | ExprStmt | match | | test.rs:146:26:146:26 | a | test.rs:146:16:146:22 | TupleStructPat | | -| test.rs:147:13:147:20 | return ... | test.rs:145:5:150:5 | exit fn test_if_let (normal) | return | +| test.rs:147:13:147:20 | return n | test.rs:145:5:150:5 | exit fn test_if_let (normal) | return | | test.rs:147:13:147:21 | ExprStmt | test.rs:147:20:147:20 | n | | -| test.rs:147:20:147:20 | n | test.rs:147:13:147:20 | return ... | | +| test.rs:147:20:147:20 | n | test.rs:147:13:147:20 | return n | | | test.rs:149:9:149:9 | 0 | test.rs:145:43:150:5 | { ... } | | | test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:152:23:152:23 | a | | | test.rs:152:5:158:5 | exit fn test_nested_if (normal) | test.rs:152:5:158:5 | exit fn test_nested_if | | -| test.rs:152:23:152:23 | a | test.rs:152:23:152:28 | a: i64 | match | -| test.rs:152:23:152:28 | a: i64 | test.rs:153:16:153:16 | a | | +| test.rs:152:23:152:23 | a | test.rs:152:23:152:28 | ...: i64 | match | +| test.rs:152:23:152:28 | ...: i64 | test.rs:153:16:153:16 | a | | | test.rs:152:38:158:5 | { ... } | test.rs:152:5:158:5 | exit fn test_nested_if (normal) | | -| test.rs:153:9:157:9 | if ... { ... } else { ... } | test.rs:152:38:158:5 | { ... } | | -| test.rs:153:13:153:48 | [boolean(false)] if ... { ... } else { ... } | test.rs:156:13:156:13 | 0 | false | -| test.rs:153:13:153:48 | [boolean(true)] if ... { ... } else { ... } | test.rs:154:13:154:13 | 1 | true | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:152:38:158:5 | { ... } | | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:156:13:156:13 | 0 | false | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:154:13:154:13 | 1 | true | | test.rs:153:16:153:16 | a | test.rs:153:20:153:20 | 0 | | | test.rs:153:16:153:20 | ... < ... | test.rs:153:24:153:24 | a | true | | test.rs:153:16:153:20 | ... < ... | test.rs:153:41:153:41 | a | false | | test.rs:153:20:153:20 | 0 | test.rs:153:16:153:20 | ... < ... | | -| test.rs:153:22:153:32 | [boolean(false)] { ... } | test.rs:153:13:153:48 | [boolean(false)] if ... { ... } else { ... } | false | -| test.rs:153:22:153:32 | [boolean(true)] { ... } | test.rs:153:13:153:48 | [boolean(true)] if ... { ... } else { ... } | true | +| test.rs:153:22:153:32 | [boolean(false)] { ... } | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | false | +| test.rs:153:22:153:32 | [boolean(true)] { ... } | test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | true | | test.rs:153:24:153:24 | a | test.rs:153:29:153:30 | 10 | | | test.rs:153:24:153:30 | ... < ... | test.rs:153:22:153:32 | [boolean(false)] { ... } | false | | test.rs:153:24:153:30 | ... < ... | test.rs:153:22:153:32 | [boolean(true)] { ... } | true | | test.rs:153:28:153:30 | - ... | test.rs:153:24:153:30 | ... < ... | | | test.rs:153:29:153:30 | 10 | test.rs:153:28:153:30 | - ... | | -| test.rs:153:39:153:48 | [boolean(false)] { ... } | test.rs:153:13:153:48 | [boolean(false)] if ... { ... } else { ... } | false | -| test.rs:153:39:153:48 | [boolean(true)] { ... } | test.rs:153:13:153:48 | [boolean(true)] if ... { ... } else { ... } | true | +| test.rs:153:39:153:48 | [boolean(false)] { ... } | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | false | +| test.rs:153:39:153:48 | [boolean(true)] { ... } | test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | true | | test.rs:153:41:153:41 | a | test.rs:153:45:153:46 | 10 | | | test.rs:153:41:153:46 | ... > ... | test.rs:153:39:153:48 | [boolean(false)] { ... } | false | | test.rs:153:41:153:46 | ... > ... | test.rs:153:39:153:48 | [boolean(true)] { ... } | true | | test.rs:153:45:153:46 | 10 | test.rs:153:41:153:46 | ... > ... | | -| test.rs:153:51:155:9 | { ... } | test.rs:153:9:157:9 | if ... { ... } else { ... } | | +| test.rs:153:51:155:9 | { ... } | test.rs:153:9:157:9 | if ... {...} else {...} | | | test.rs:154:13:154:13 | 1 | test.rs:153:51:155:9 | { ... } | | -| test.rs:155:16:157:9 | { ... } | test.rs:153:9:157:9 | if ... { ... } else { ... } | | +| test.rs:155:16:157:9 | { ... } | test.rs:153:9:157:9 | if ... {...} else {...} | | | test.rs:156:13:156:13 | 0 | test.rs:155:16:157:9 | { ... } | | | test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:160:29:160:29 | a | | | test.rs:160:5:169:5 | exit fn test_nested_if_match (normal) | test.rs:160:5:169:5 | exit fn test_nested_if_match | | -| test.rs:160:29:160:29 | a | test.rs:160:29:160:34 | a: i64 | match | -| test.rs:160:29:160:34 | a: i64 | test.rs:161:19:161:19 | a | | +| test.rs:160:29:160:29 | a | test.rs:160:29:160:34 | ...: i64 | match | +| test.rs:160:29:160:34 | ...: i64 | test.rs:161:19:161:19 | a | | | test.rs:160:44:169:5 | { ... } | test.rs:160:5:169:5 | exit fn test_nested_if_match (normal) | | -| test.rs:161:9:168:9 | if ... { ... } else { ... } | test.rs:160:44:169:5 | { ... } | | -| test.rs:161:13:164:9 | [boolean(false)] match ... { ... } | test.rs:167:13:167:13 | 0 | false | -| test.rs:161:13:164:9 | [boolean(true)] match ... { ... } | test.rs:165:13:165:13 | 1 | true | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:160:44:169:5 | { ... } | | +| test.rs:161:13:164:9 | [boolean(false)] match a { ... } | test.rs:167:13:167:13 | 0 | false | +| test.rs:161:13:164:9 | [boolean(true)] match a { ... } | test.rs:165:13:165:13 | 1 | true | | test.rs:161:19:161:19 | a | test.rs:162:13:162:13 | 0 | | | test.rs:162:13:162:13 | 0 | test.rs:162:13:162:13 | 0 | | | test.rs:162:13:162:13 | 0 | test.rs:162:18:162:21 | true | match | | test.rs:162:13:162:13 | 0 | test.rs:163:13:163:13 | _ | no-match | -| test.rs:162:18:162:21 | true | test.rs:161:13:164:9 | [boolean(true)] match ... { ... } | true | +| test.rs:162:18:162:21 | true | test.rs:161:13:164:9 | [boolean(true)] match a { ... } | true | | test.rs:163:13:163:13 | _ | test.rs:163:18:163:22 | false | match | -| test.rs:163:18:163:22 | false | test.rs:161:13:164:9 | [boolean(false)] match ... { ... } | false | -| test.rs:164:12:166:9 | { ... } | test.rs:161:9:168:9 | if ... { ... } else { ... } | | +| test.rs:163:18:163:22 | false | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | false | +| test.rs:164:12:166:9 | { ... } | test.rs:161:9:168:9 | if ... {...} else {...} | | | test.rs:165:13:165:13 | 1 | test.rs:164:12:166:9 | { ... } | | -| test.rs:166:16:168:9 | { ... } | test.rs:161:9:168:9 | if ... { ... } else { ... } | | +| test.rs:166:16:168:9 | { ... } | test.rs:161:9:168:9 | if ... {...} else {...} | | | test.rs:167:13:167:13 | 0 | test.rs:166:16:168:9 | { ... } | | | test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:171:29:171:29 | a | | | test.rs:171:5:180:5 | exit fn test_nested_if_block (normal) | test.rs:171:5:180:5 | exit fn test_nested_if_block | | -| test.rs:171:29:171:29 | a | test.rs:171:29:171:34 | a: i64 | match | -| test.rs:171:29:171:34 | a: i64 | test.rs:173:13:173:15 | ExprStmt | | +| test.rs:171:29:171:29 | a | test.rs:171:29:171:34 | ...: i64 | match | +| test.rs:171:29:171:34 | ...: i64 | test.rs:173:13:173:15 | ExprStmt | | | test.rs:171:44:180:5 | { ... } | test.rs:171:5:180:5 | exit fn test_nested_if_block (normal) | | -| test.rs:172:9:179:9 | if ... { ... } else { ... } | test.rs:171:44:180:5 | { ... } | | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:171:44:180:5 | { ... } | | | test.rs:172:12:175:9 | [boolean(false)] { ... } | test.rs:178:13:178:13 | 0 | false | | test.rs:172:12:175:9 | [boolean(true)] { ... } | test.rs:176:13:176:13 | 1 | true | | test.rs:173:13:173:14 | TupleExpr | test.rs:174:13:174:13 | a | | @@ -360,19 +360,19 @@ edges | test.rs:174:13:174:17 | ... > ... | test.rs:172:12:175:9 | [boolean(false)] { ... } | false | | test.rs:174:13:174:17 | ... > ... | test.rs:172:12:175:9 | [boolean(true)] { ... } | true | | test.rs:174:17:174:17 | 0 | test.rs:174:13:174:17 | ... > ... | | -| test.rs:175:11:177:9 | { ... } | test.rs:172:9:179:9 | if ... { ... } else { ... } | | +| test.rs:175:11:177:9 | { ... } | test.rs:172:9:179:9 | if ... {...} else {...} | | | test.rs:176:13:176:13 | 1 | test.rs:175:11:177:9 | { ... } | | -| test.rs:177:16:179:9 | { ... } | test.rs:172:9:179:9 | if ... { ... } else { ... } | | +| test.rs:177:16:179:9 | { ... } | test.rs:172:9:179:9 | if ... {...} else {...} | | | test.rs:178:13:178:13 | 0 | test.rs:177:16:179:9 | { ... } | | | test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:182:27:182:27 | a | | | test.rs:182:5:192:5 | exit fn test_if_assignment (normal) | test.rs:182:5:192:5 | exit fn test_if_assignment | | -| test.rs:182:27:182:27 | a | test.rs:182:27:182:32 | a: i64 | match | -| test.rs:182:27:182:32 | a: i64 | test.rs:183:9:183:26 | let x = ... | | +| test.rs:182:27:182:27 | a | test.rs:182:27:182:32 | ...: i64 | match | +| test.rs:182:27:182:32 | ...: i64 | test.rs:183:9:183:26 | let ... = false | | | test.rs:182:42:192:5 | { ... } | test.rs:182:5:192:5 | exit fn test_if_assignment (normal) | | -| test.rs:183:9:183:26 | let x = ... | test.rs:183:21:183:25 | false | | +| test.rs:183:9:183:26 | let ... = false | test.rs:183:21:183:25 | false | | | test.rs:183:13:183:17 | x | test.rs:185:13:185:21 | ExprStmt | match | | test.rs:183:21:183:25 | false | test.rs:183:13:183:17 | x | | -| test.rs:184:9:191:9 | if ... { ... } else { ... } | test.rs:182:42:192:5 | { ... } | | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:182:42:192:5 | { ... } | | | test.rs:184:12:187:9 | [boolean(false)] { ... } | test.rs:190:13:190:13 | 0 | false | | test.rs:184:12:187:9 | [boolean(true)] { ... } | test.rs:188:13:188:13 | 1 | true | | test.rs:185:13:185:13 | x | test.rs:185:17:185:20 | true | | @@ -381,27 +381,27 @@ edges | test.rs:185:17:185:20 | true | test.rs:185:13:185:20 | ... = ... | | | test.rs:186:13:186:13 | x | test.rs:184:12:187:9 | [boolean(false)] { ... } | false | | test.rs:186:13:186:13 | x | test.rs:184:12:187:9 | [boolean(true)] { ... } | true | -| test.rs:187:11:189:9 | { ... } | test.rs:184:9:191:9 | if ... { ... } else { ... } | | +| test.rs:187:11:189:9 | { ... } | test.rs:184:9:191:9 | if ... {...} else {...} | | | test.rs:188:13:188:13 | 1 | test.rs:187:11:189:9 | { ... } | | -| test.rs:189:16:191:9 | { ... } | test.rs:184:9:191:9 | if ... { ... } else { ... } | | +| test.rs:189:16:191:9 | { ... } | test.rs:184:9:191:9 | if ... {...} else {...} | | | test.rs:190:13:190:13 | 0 | test.rs:189:16:191:9 | { ... } | | | test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:194:22:194:22 | a | | | test.rs:194:5:205:5 | exit fn test_if_loop1 (normal) | test.rs:194:5:205:5 | exit fn test_if_loop1 | | -| test.rs:194:22:194:22 | a | test.rs:194:22:194:27 | a: i64 | match | -| test.rs:194:22:194:27 | a: i64 | test.rs:196:13:198:14 | ExprStmt | | +| test.rs:194:22:194:22 | a | test.rs:194:22:194:27 | ...: i64 | match | +| test.rs:194:22:194:27 | ...: i64 | test.rs:196:13:198:14 | ExprStmt | | | test.rs:194:37:205:5 | { ... } | test.rs:194:5:205:5 | exit fn test_if_loop1 (normal) | | -| test.rs:195:9:204:9 | if ... { ... } else { ... } | test.rs:194:37:205:5 | { ... } | | -| test.rs:195:13:200:9 | [boolean(false)] loop {...} | test.rs:203:13:203:13 | 0 | false | -| test.rs:195:13:200:9 | [boolean(true)] loop {...} | test.rs:201:13:201:13 | 1 | true | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:194:37:205:5 | { ... } | | +| test.rs:195:13:200:9 | [boolean(false)] loop { ... } | test.rs:203:13:203:13 | 0 | false | +| test.rs:195:13:200:9 | [boolean(true)] loop { ... } | test.rs:201:13:201:13 | 1 | true | | test.rs:195:18:200:9 | { ... } | test.rs:196:13:198:14 | ExprStmt | | -| test.rs:196:13:198:13 | if ... { ... } | test.rs:199:13:199:19 | ExprStmt | | +| test.rs:196:13:198:13 | if ... {...} | test.rs:199:13:199:19 | ExprStmt | | | test.rs:196:13:198:14 | ExprStmt | test.rs:196:16:196:16 | a | | | test.rs:196:16:196:16 | a | test.rs:196:20:196:20 | 0 | | -| test.rs:196:16:196:20 | ... > ... | test.rs:196:13:198:13 | if ... { ... } | false | +| test.rs:196:16:196:20 | ... > ... | test.rs:196:13:198:13 | if ... {...} | false | | test.rs:196:16:196:20 | ... > ... | test.rs:197:17:197:29 | ExprStmt | true | | test.rs:196:20:196:20 | 0 | test.rs:196:16:196:20 | ... > ... | | -| test.rs:197:17:197:28 | [boolean(false)] break ... | test.rs:195:13:200:9 | [boolean(false)] loop {...} | break | -| test.rs:197:17:197:28 | [boolean(true)] break ... | test.rs:195:13:200:9 | [boolean(true)] loop {...} | break | +| test.rs:197:17:197:28 | [boolean(false)] break ... | test.rs:195:13:200:9 | [boolean(false)] loop { ... } | break | +| test.rs:197:17:197:28 | [boolean(true)] break ... | test.rs:195:13:200:9 | [boolean(true)] loop { ... } | break | | test.rs:197:17:197:29 | ExprStmt | test.rs:197:23:197:23 | a | | | test.rs:197:23:197:23 | a | test.rs:197:27:197:28 | 10 | | | test.rs:197:23:197:28 | ... > ... | test.rs:197:17:197:28 | [boolean(false)] break ... | false | @@ -411,27 +411,27 @@ edges | test.rs:199:13:199:18 | ... < ... | test.rs:195:18:200:9 | { ... } | | | test.rs:199:13:199:19 | ExprStmt | test.rs:199:13:199:13 | a | | | test.rs:199:17:199:18 | 10 | test.rs:199:13:199:18 | ... < ... | | -| test.rs:200:12:202:9 | { ... } | test.rs:195:9:204:9 | if ... { ... } else { ... } | | +| test.rs:200:12:202:9 | { ... } | test.rs:195:9:204:9 | if ... {...} else {...} | | | test.rs:201:13:201:13 | 1 | test.rs:200:12:202:9 | { ... } | | -| test.rs:202:16:204:9 | { ... } | test.rs:195:9:204:9 | if ... { ... } else { ... } | | +| test.rs:202:16:204:9 | { ... } | test.rs:195:9:204:9 | if ... {...} else {...} | | | test.rs:203:13:203:13 | 0 | test.rs:202:16:204:9 | { ... } | | | test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:207:22:207:22 | a | | | test.rs:207:5:218:5 | exit fn test_if_loop2 (normal) | test.rs:207:5:218:5 | exit fn test_if_loop2 | | -| test.rs:207:22:207:22 | a | test.rs:207:22:207:27 | a: i64 | match | -| test.rs:207:22:207:27 | a: i64 | test.rs:209:13:211:14 | ExprStmt | | +| test.rs:207:22:207:22 | a | test.rs:207:22:207:27 | ...: i64 | match | +| test.rs:207:22:207:27 | ...: i64 | test.rs:209:13:211:14 | ExprStmt | | | test.rs:207:37:218:5 | { ... } | test.rs:207:5:218:5 | exit fn test_if_loop2 (normal) | | -| test.rs:208:9:217:9 | if ... { ... } else { ... } | test.rs:207:37:218:5 | { ... } | | -| test.rs:208:13:213:9 | [boolean(false)] loop {...} | test.rs:216:13:216:13 | 0 | false | -| test.rs:208:13:213:9 | [boolean(true)] loop {...} | test.rs:214:13:214:13 | 1 | true | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:207:37:218:5 | { ... } | | +| test.rs:208:13:213:9 | [boolean(false)] ''label: loop { ... } | test.rs:216:13:216:13 | 0 | false | +| test.rs:208:13:213:9 | [boolean(true)] ''label: loop { ... } | test.rs:214:13:214:13 | 1 | true | | test.rs:208:26:213:9 | { ... } | test.rs:209:13:211:14 | ExprStmt | | -| test.rs:209:13:211:13 | if ... { ... } | test.rs:212:13:212:19 | ExprStmt | | +| test.rs:209:13:211:13 | if ... {...} | test.rs:212:13:212:19 | ExprStmt | | | test.rs:209:13:211:14 | ExprStmt | test.rs:209:16:209:16 | a | | | test.rs:209:16:209:16 | a | test.rs:209:20:209:20 | 0 | | -| test.rs:209:16:209:20 | ... > ... | test.rs:209:13:211:13 | if ... { ... } | false | +| test.rs:209:16:209:20 | ... > ... | test.rs:209:13:211:13 | if ... {...} | false | | test.rs:209:16:209:20 | ... > ... | test.rs:210:17:210:36 | ExprStmt | true | | test.rs:209:20:209:20 | 0 | test.rs:209:16:209:20 | ... > ... | | -| test.rs:210:17:210:35 | [boolean(false)] break ''label ... | test.rs:208:13:213:9 | [boolean(false)] loop {...} | break | -| test.rs:210:17:210:35 | [boolean(true)] break ''label ... | test.rs:208:13:213:9 | [boolean(true)] loop {...} | break | +| test.rs:210:17:210:35 | [boolean(false)] break ''label ... | test.rs:208:13:213:9 | [boolean(false)] ''label: loop { ... } | break | +| test.rs:210:17:210:35 | [boolean(true)] break ''label ... | test.rs:208:13:213:9 | [boolean(true)] ''label: loop { ... } | break | | test.rs:210:17:210:36 | ExprStmt | test.rs:210:30:210:30 | a | | | test.rs:210:30:210:30 | a | test.rs:210:34:210:35 | 10 | | | test.rs:210:30:210:35 | ... > ... | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | false | @@ -441,39 +441,39 @@ edges | test.rs:212:13:212:18 | ... < ... | test.rs:208:26:213:9 | { ... } | | | test.rs:212:13:212:19 | ExprStmt | test.rs:212:13:212:13 | a | | | test.rs:212:17:212:18 | 10 | test.rs:212:13:212:18 | ... < ... | | -| test.rs:213:12:215:9 | { ... } | test.rs:208:9:217:9 | if ... { ... } else { ... } | | +| test.rs:213:12:215:9 | { ... } | test.rs:208:9:217:9 | if ... {...} else {...} | | | test.rs:214:13:214:13 | 1 | test.rs:213:12:215:9 | { ... } | | -| test.rs:215:16:217:9 | { ... } | test.rs:208:9:217:9 | if ... { ... } else { ... } | | +| test.rs:215:16:217:9 | { ... } | test.rs:208:9:217:9 | if ... {...} else {...} | | | test.rs:216:13:216:13 | 0 | test.rs:215:16:217:9 | { ... } | | | test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:220:28:220:28 | a | | | test.rs:220:5:228:5 | exit fn test_labelled_block (normal) | test.rs:220:5:228:5 | exit fn test_labelled_block | | -| test.rs:220:28:220:28 | a | test.rs:220:28:220:33 | a: i64 | match | -| test.rs:220:28:220:33 | a: i64 | test.rs:222:13:222:31 | ExprStmt | | +| test.rs:220:28:220:28 | a | test.rs:220:28:220:33 | ...: i64 | match | +| test.rs:220:28:220:33 | ...: i64 | test.rs:222:13:222:31 | ExprStmt | | | test.rs:220:43:228:5 | { ... } | test.rs:220:5:228:5 | exit fn test_labelled_block (normal) | | -| test.rs:221:9:227:9 | if ... { ... } else { ... } | test.rs:220:43:228:5 | { ... } | | -| test.rs:221:13:223:9 | [boolean(false)] { ... } | test.rs:226:13:226:13 | 0 | false | -| test.rs:221:13:223:9 | [boolean(true)] { ... } | test.rs:224:13:224:13 | 1 | true | -| test.rs:222:13:222:30 | [boolean(false)] break ''block ... | test.rs:221:13:223:9 | [boolean(false)] { ... } | break | -| test.rs:222:13:222:30 | [boolean(true)] break ''block ... | test.rs:221:13:223:9 | [boolean(true)] { ... } | break | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:220:43:228:5 | { ... } | | +| test.rs:221:13:223:9 | [boolean(false)] ''block: { ... } | test.rs:226:13:226:13 | 0 | false | +| test.rs:221:13:223:9 | [boolean(true)] ''block: { ... } | test.rs:224:13:224:13 | 1 | true | +| test.rs:222:13:222:30 | [boolean(false)] break ''block ... | test.rs:221:13:223:9 | [boolean(false)] ''block: { ... } | break | +| test.rs:222:13:222:30 | [boolean(true)] break ''block ... | test.rs:221:13:223:9 | [boolean(true)] ''block: { ... } | break | | test.rs:222:13:222:31 | ExprStmt | test.rs:222:26:222:26 | a | | | test.rs:222:26:222:26 | a | test.rs:222:30:222:30 | 0 | | | test.rs:222:26:222:30 | ... > ... | test.rs:222:13:222:30 | [boolean(false)] break ''block ... | false | | test.rs:222:26:222:30 | ... > ... | test.rs:222:13:222:30 | [boolean(true)] break ''block ... | true | | test.rs:222:30:222:30 | 0 | test.rs:222:26:222:30 | ... > ... | | -| test.rs:223:12:225:9 | { ... } | test.rs:221:9:227:9 | if ... { ... } else { ... } | | +| test.rs:223:12:225:9 | { ... } | test.rs:221:9:227:9 | if ... {...} else {...} | | | test.rs:224:13:224:13 | 1 | test.rs:223:12:225:9 | { ... } | | -| test.rs:225:16:227:9 | { ... } | test.rs:221:9:227:9 | if ... { ... } else { ... } | | +| test.rs:225:16:227:9 | { ... } | test.rs:221:9:227:9 | if ... {...} else {...} | | | test.rs:226:13:226:13 | 0 | test.rs:225:16:227:9 | { ... } | | | test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:233:30:233:30 | a | | | test.rs:233:5:236:5 | exit fn test_and_operator (normal) | test.rs:233:5:236:5 | exit fn test_and_operator | | -| test.rs:233:30:233:30 | a | test.rs:233:30:233:36 | a: bool | match | -| test.rs:233:30:233:36 | a: bool | test.rs:233:39:233:39 | b | | -| test.rs:233:39:233:39 | b | test.rs:233:39:233:45 | b: bool | match | -| test.rs:233:39:233:45 | b: bool | test.rs:233:48:233:48 | c | | -| test.rs:233:48:233:48 | c | test.rs:233:48:233:54 | c: bool | match | -| test.rs:233:48:233:54 | c: bool | test.rs:234:9:234:28 | let d = ... | | +| test.rs:233:30:233:30 | a | test.rs:233:30:233:36 | ...: bool | match | +| test.rs:233:30:233:36 | ...: bool | test.rs:233:39:233:39 | b | | +| test.rs:233:39:233:39 | b | test.rs:233:39:233:45 | ...: bool | match | +| test.rs:233:39:233:45 | ...: bool | test.rs:233:48:233:48 | c | | +| test.rs:233:48:233:48 | c | test.rs:233:48:233:54 | ...: bool | match | +| test.rs:233:48:233:54 | ...: bool | test.rs:234:9:234:28 | let ... = ... | | | test.rs:233:65:236:5 | { ... } | test.rs:233:5:236:5 | exit fn test_and_operator (normal) | | -| test.rs:234:9:234:28 | let d = ... | test.rs:234:17:234:17 | a | | +| test.rs:234:9:234:28 | let ... = ... | test.rs:234:17:234:17 | a | | | test.rs:234:13:234:13 | d | test.rs:235:9:235:9 | d | match | | test.rs:234:17:234:17 | a | test.rs:234:17:234:22 | [boolean(false)] ... && ... | false | | test.rs:234:17:234:17 | a | test.rs:234:22:234:22 | b | true | @@ -486,14 +486,14 @@ edges | test.rs:235:9:235:9 | d | test.rs:233:65:236:5 | { ... } | | | test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:238:25:238:25 | a | | | test.rs:238:5:241:5 | exit fn test_or_operator (normal) | test.rs:238:5:241:5 | exit fn test_or_operator | | -| test.rs:238:25:238:25 | a | test.rs:238:25:238:31 | a: bool | match | -| test.rs:238:25:238:31 | a: bool | test.rs:238:34:238:34 | b | | -| test.rs:238:34:238:34 | b | test.rs:238:34:238:40 | b: bool | match | -| test.rs:238:34:238:40 | b: bool | test.rs:238:43:238:43 | c | | -| test.rs:238:43:238:43 | c | test.rs:238:43:238:49 | c: bool | match | -| test.rs:238:43:238:49 | c: bool | test.rs:239:9:239:28 | let d = ... | | +| test.rs:238:25:238:25 | a | test.rs:238:25:238:31 | ...: bool | match | +| test.rs:238:25:238:31 | ...: bool | test.rs:238:34:238:34 | b | | +| test.rs:238:34:238:34 | b | test.rs:238:34:238:40 | ...: bool | match | +| test.rs:238:34:238:40 | ...: bool | test.rs:238:43:238:43 | c | | +| test.rs:238:43:238:43 | c | test.rs:238:43:238:49 | ...: bool | match | +| test.rs:238:43:238:49 | ...: bool | test.rs:239:9:239:28 | let ... = ... | | | test.rs:238:60:241:5 | { ... } | test.rs:238:5:241:5 | exit fn test_or_operator (normal) | | -| test.rs:239:9:239:28 | let d = ... | test.rs:239:17:239:17 | a | | +| test.rs:239:9:239:28 | let ... = ... | test.rs:239:17:239:17 | a | | | test.rs:239:13:239:13 | d | test.rs:240:9:240:9 | d | match | | test.rs:239:17:239:17 | a | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | true | | test.rs:239:17:239:17 | a | test.rs:239:22:239:22 | b | false | @@ -506,14 +506,14 @@ edges | test.rs:240:9:240:9 | d | test.rs:238:60:241:5 | { ... } | | | test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:243:27:243:27 | a | | | test.rs:243:5:246:5 | exit fn test_or_operator_2 (normal) | test.rs:243:5:246:5 | exit fn test_or_operator_2 | | -| test.rs:243:27:243:27 | a | test.rs:243:27:243:33 | a: bool | match | -| test.rs:243:27:243:33 | a: bool | test.rs:243:36:243:36 | b | | -| test.rs:243:36:243:36 | b | test.rs:243:36:243:41 | b: i64 | match | -| test.rs:243:36:243:41 | b: i64 | test.rs:243:44:243:44 | c | | -| test.rs:243:44:243:44 | c | test.rs:243:44:243:50 | c: bool | match | -| test.rs:243:44:243:50 | c: bool | test.rs:244:9:244:36 | let d = ... | | +| test.rs:243:27:243:27 | a | test.rs:243:27:243:33 | ...: bool | match | +| test.rs:243:27:243:33 | ...: bool | test.rs:243:36:243:36 | b | | +| test.rs:243:36:243:36 | b | test.rs:243:36:243:41 | ...: i64 | match | +| test.rs:243:36:243:41 | ...: i64 | test.rs:243:44:243:44 | c | | +| test.rs:243:44:243:44 | c | test.rs:243:44:243:50 | ...: bool | match | +| test.rs:243:44:243:50 | ...: bool | test.rs:244:9:244:36 | let ... = ... | | | test.rs:243:61:246:5 | { ... } | test.rs:243:5:246:5 | exit fn test_or_operator_2 (normal) | | -| test.rs:244:9:244:36 | let d = ... | test.rs:244:17:244:17 | a | | +| test.rs:244:9:244:36 | let ... = ... | test.rs:244:17:244:17 | a | | | test.rs:244:13:244:13 | d | test.rs:245:9:245:9 | d | match | | test.rs:244:17:244:17 | a | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | true | | test.rs:244:17:244:17 | a | test.rs:244:23:244:23 | b | false | @@ -528,24 +528,24 @@ edges | test.rs:245:9:245:9 | d | test.rs:243:61:246:5 | { ... } | | | test.rs:248:5:251:5 | enter fn test_not_operator | test.rs:248:26:248:26 | a | | | test.rs:248:5:251:5 | exit fn test_not_operator (normal) | test.rs:248:5:251:5 | exit fn test_not_operator | | -| test.rs:248:26:248:26 | a | test.rs:248:26:248:32 | a: bool | match | -| test.rs:248:26:248:32 | a: bool | test.rs:249:9:249:19 | let d = ... | | +| test.rs:248:26:248:26 | a | test.rs:248:26:248:32 | ...: bool | match | +| test.rs:248:26:248:32 | ...: bool | test.rs:249:9:249:19 | let ... = ... | | | test.rs:248:43:251:5 | { ... } | test.rs:248:5:251:5 | exit fn test_not_operator (normal) | | -| test.rs:249:9:249:19 | let d = ... | test.rs:249:18:249:18 | a | | +| test.rs:249:9:249:19 | let ... = ... | test.rs:249:18:249:18 | a | | | test.rs:249:13:249:13 | d | test.rs:250:9:250:9 | d | match | | test.rs:249:17:249:18 | ! ... | test.rs:249:13:249:13 | d | | | test.rs:249:18:249:18 | a | test.rs:249:17:249:18 | ! ... | | | test.rs:250:9:250:9 | d | test.rs:248:43:251:5 | { ... } | | | test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:253:29:253:29 | a | | | test.rs:253:5:259:5 | exit fn test_if_and_operator (normal) | test.rs:253:5:259:5 | exit fn test_if_and_operator | | -| test.rs:253:29:253:29 | a | test.rs:253:29:253:35 | a: bool | match | -| test.rs:253:29:253:35 | a: bool | test.rs:253:38:253:38 | b | | -| test.rs:253:38:253:38 | b | test.rs:253:38:253:44 | b: bool | match | -| test.rs:253:38:253:44 | b: bool | test.rs:253:47:253:47 | c | | -| test.rs:253:47:253:47 | c | test.rs:253:47:253:53 | c: bool | match | -| test.rs:253:47:253:53 | c: bool | test.rs:254:12:254:12 | a | | +| test.rs:253:29:253:29 | a | test.rs:253:29:253:35 | ...: bool | match | +| test.rs:253:29:253:35 | ...: bool | test.rs:253:38:253:38 | b | | +| test.rs:253:38:253:38 | b | test.rs:253:38:253:44 | ...: bool | match | +| test.rs:253:38:253:44 | ...: bool | test.rs:253:47:253:47 | c | | +| test.rs:253:47:253:47 | c | test.rs:253:47:253:53 | ...: bool | match | +| test.rs:253:47:253:53 | ...: bool | test.rs:254:12:254:12 | a | | | test.rs:253:64:259:5 | { ... } | test.rs:253:5:259:5 | exit fn test_if_and_operator (normal) | | -| test.rs:254:9:258:9 | if ... { ... } else { ... } | test.rs:253:64:259:5 | { ... } | | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:253:64:259:5 | { ... } | | | test.rs:254:12:254:12 | a | test.rs:254:12:254:17 | [boolean(false)] ... && ... | false | | test.rs:254:12:254:12 | a | test.rs:254:17:254:17 | b | true | | test.rs:254:12:254:17 | [boolean(false)] ... && ... | test.rs:254:12:254:22 | [boolean(false)] ... && ... | false | @@ -556,20 +556,20 @@ edges | test.rs:254:17:254:17 | b | test.rs:254:12:254:17 | [boolean(true)] ... && ... | true | | test.rs:254:22:254:22 | c | test.rs:254:12:254:22 | [boolean(false)] ... && ... | false | | test.rs:254:22:254:22 | c | test.rs:254:12:254:22 | [boolean(true)] ... && ... | true | -| test.rs:254:24:256:9 | { ... } | test.rs:254:9:258:9 | if ... { ... } else { ... } | | +| test.rs:254:24:256:9 | { ... } | test.rs:254:9:258:9 | if ... {...} else {...} | | | test.rs:255:13:255:16 | true | test.rs:254:24:256:9 | { ... } | | -| test.rs:256:16:258:9 | { ... } | test.rs:254:9:258:9 | if ... { ... } else { ... } | | +| test.rs:256:16:258:9 | { ... } | test.rs:254:9:258:9 | if ... {...} else {...} | | | test.rs:257:13:257:17 | false | test.rs:256:16:258:9 | { ... } | | | test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:261:28:261:28 | a | | | test.rs:261:5:267:5 | exit fn test_if_or_operator (normal) | test.rs:261:5:267:5 | exit fn test_if_or_operator | | -| test.rs:261:28:261:28 | a | test.rs:261:28:261:34 | a: bool | match | -| test.rs:261:28:261:34 | a: bool | test.rs:261:37:261:37 | b | | -| test.rs:261:37:261:37 | b | test.rs:261:37:261:43 | b: bool | match | -| test.rs:261:37:261:43 | b: bool | test.rs:261:46:261:46 | c | | -| test.rs:261:46:261:46 | c | test.rs:261:46:261:52 | c: bool | match | -| test.rs:261:46:261:52 | c: bool | test.rs:262:12:262:12 | a | | +| test.rs:261:28:261:28 | a | test.rs:261:28:261:34 | ...: bool | match | +| test.rs:261:28:261:34 | ...: bool | test.rs:261:37:261:37 | b | | +| test.rs:261:37:261:37 | b | test.rs:261:37:261:43 | ...: bool | match | +| test.rs:261:37:261:43 | ...: bool | test.rs:261:46:261:46 | c | | +| test.rs:261:46:261:46 | c | test.rs:261:46:261:52 | ...: bool | match | +| test.rs:261:46:261:52 | ...: bool | test.rs:262:12:262:12 | a | | | test.rs:261:63:267:5 | { ... } | test.rs:261:5:267:5 | exit fn test_if_or_operator (normal) | | -| test.rs:262:9:266:9 | if ... { ... } else { ... } | test.rs:261:63:267:5 | { ... } | | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:261:63:267:5 | { ... } | | | test.rs:262:12:262:12 | a | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | true | | test.rs:262:12:262:12 | a | test.rs:262:17:262:17 | b | false | | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:22:262:22 | c | false | @@ -580,28 +580,28 @@ edges | test.rs:262:17:262:17 | b | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | true | | test.rs:262:22:262:22 | c | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | false | | test.rs:262:22:262:22 | c | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:262:24:264:9 | { ... } | test.rs:262:9:266:9 | if ... { ... } else { ... } | | +| test.rs:262:24:264:9 | { ... } | test.rs:262:9:266:9 | if ... {...} else {...} | | | test.rs:263:13:263:16 | true | test.rs:262:24:264:9 | { ... } | | -| test.rs:264:16:266:9 | { ... } | test.rs:262:9:266:9 | if ... { ... } else { ... } | | +| test.rs:264:16:266:9 | { ... } | test.rs:262:9:266:9 | if ... {...} else {...} | | | test.rs:265:13:265:17 | false | test.rs:264:16:266:9 | { ... } | | | test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:269:29:269:29 | a | | | test.rs:269:5:275:5 | exit fn test_if_not_operator (normal) | test.rs:269:5:275:5 | exit fn test_if_not_operator | | -| test.rs:269:29:269:29 | a | test.rs:269:29:269:35 | a: bool | match | -| test.rs:269:29:269:35 | a: bool | test.rs:270:13:270:13 | a | | +| test.rs:269:29:269:29 | a | test.rs:269:29:269:35 | ...: bool | match | +| test.rs:269:29:269:35 | ...: bool | test.rs:270:13:270:13 | a | | | test.rs:269:46:275:5 | { ... } | test.rs:269:5:275:5 | exit fn test_if_not_operator (normal) | | -| test.rs:270:9:274:9 | if ... { ... } else { ... } | test.rs:269:46:275:5 | { ... } | | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:269:46:275:5 | { ... } | | | test.rs:270:12:270:13 | [boolean(false)] ! ... | test.rs:273:13:273:17 | false | false | | test.rs:270:12:270:13 | [boolean(true)] ! ... | test.rs:271:13:271:16 | true | true | | test.rs:270:13:270:13 | a | test.rs:270:12:270:13 | [boolean(false)] ! ... | true | | test.rs:270:13:270:13 | a | test.rs:270:12:270:13 | [boolean(true)] ! ... | false | -| test.rs:270:15:272:9 | { ... } | test.rs:270:9:274:9 | if ... { ... } else { ... } | | +| test.rs:270:15:272:9 | { ... } | test.rs:270:9:274:9 | if ... {...} else {...} | | | test.rs:271:13:271:16 | true | test.rs:270:15:272:9 | { ... } | | -| test.rs:272:16:274:9 | { ... } | test.rs:270:9:274:9 | if ... { ... } else { ... } | | +| test.rs:272:16:274:9 | { ... } | test.rs:270:9:274:9 | if ... {...} else {...} | | | test.rs:273:13:273:17 | false | test.rs:272:16:274:9 | { ... } | | | test.rs:277:5:279:5 | enter fn test_and_return | test.rs:277:24:277:24 | a | | | test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:277:5:279:5 | exit fn test_and_return | | -| test.rs:277:24:277:24 | a | test.rs:277:24:277:30 | a: bool | match | -| test.rs:277:24:277:30 | a: bool | test.rs:278:9:278:20 | ExprStmt | | +| test.rs:277:24:277:24 | a | test.rs:277:24:277:30 | ...: bool | match | +| test.rs:277:24:277:30 | ...: bool | test.rs:278:9:278:20 | ExprStmt | | | test.rs:277:33:279:5 | { ... } | test.rs:277:5:279:5 | exit fn test_and_return (normal) | | | test.rs:278:9:278:9 | a | test.rs:278:9:278:19 | ... && ... | false | | test.rs:278:9:278:9 | a | test.rs:278:14:278:19 | return | true | @@ -610,8 +610,8 @@ edges | test.rs:278:14:278:19 | return | test.rs:277:5:279:5 | exit fn test_and_return (normal) | return | | test.rs:285:5:287:5 | enter fn test_question_mark_operator_1 | test.rs:285:38:285:38 | s | | | test.rs:285:5:287:5 | exit fn test_question_mark_operator_1 (normal) | test.rs:285:5:287:5 | exit fn test_question_mark_operator_1 | | -| test.rs:285:38:285:38 | s | test.rs:285:38:285:44 | s: RefType | match | -| test.rs:285:38:285:44 | s: RefType | test.rs:286:9:286:10 | Ok | | +| test.rs:285:38:285:38 | s | test.rs:285:38:285:44 | ...: ... | match | +| test.rs:285:38:285:44 | ...: ... | test.rs:286:9:286:10 | Ok | | | test.rs:285:87:287:5 | { ... } | test.rs:285:5:287:5 | exit fn test_question_mark_operator_1 (normal) | | | test.rs:286:9:286:10 | Ok | test.rs:286:12:286:12 | s | | | test.rs:286:9:286:33 | Ok(...) | test.rs:285:87:287:5 | { ... } | | @@ -623,8 +623,8 @@ edges | test.rs:286:32:286:32 | 4 | test.rs:286:12:286:32 | ... + ... | | | test.rs:289:5:294:5 | enter fn test_question_mark_operator_2 | test.rs:289:38:289:38 | b | | | test.rs:289:5:294:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:289:5:294:5 | exit fn test_question_mark_operator_2 | | -| test.rs:289:38:289:38 | b | test.rs:289:38:289:52 | b: Option::<...> | match | -| test.rs:289:38:289:52 | b: Option::<...> | test.rs:290:15:290:15 | b | | +| test.rs:289:38:289:38 | b | test.rs:289:38:289:52 | ...: Option::<...> | match | +| test.rs:289:38:289:52 | ...: Option::<...> | test.rs:290:15:290:15 | b | | | test.rs:289:71:294:5 | { ... } | test.rs:289:5:294:5 | exit fn test_question_mark_operator_2 (normal) | | | test.rs:290:9:293:9 | match ... { ... } | test.rs:289:71:294:5 | { ... } | | | test.rs:290:15:290:15 | b | test.rs:290:15:290:16 | TryExpr | | @@ -643,10 +643,10 @@ edges | test.rs:292:27:292:30 | true | test.rs:292:22:292:31 | Some(...) | | | test.rs:300:5:306:5 | enter fn test_match | test.rs:300:19:300:29 | maybe_digit | | | test.rs:300:5:306:5 | exit fn test_match (normal) | test.rs:300:5:306:5 | exit fn test_match | | -| test.rs:300:19:300:29 | maybe_digit | test.rs:300:19:300:42 | maybe_digit: Option::<...> | match | -| test.rs:300:19:300:42 | maybe_digit: Option::<...> | test.rs:301:15:301:25 | maybe_digit | | +| test.rs:300:19:300:29 | maybe_digit | test.rs:300:19:300:42 | ...: Option::<...> | match | +| test.rs:300:19:300:42 | ...: Option::<...> | test.rs:301:15:301:25 | maybe_digit | | | test.rs:300:52:306:5 | { ... } | test.rs:300:5:306:5 | exit fn test_match (normal) | | -| test.rs:301:9:305:9 | match ... { ... } | test.rs:300:52:306:5 | { ... } | | +| test.rs:301:9:305:9 | match maybe_digit { ... } | test.rs:300:52:306:5 | { ... } | | | test.rs:301:15:301:25 | maybe_digit | test.rs:302:13:302:27 | TupleStructPat | | | test.rs:302:13:302:27 | TupleStructPat | test.rs:302:26:302:26 | x | match | | test.rs:302:13:302:27 | TupleStructPat | test.rs:303:13:303:27 | TupleStructPat | no-match | @@ -656,31 +656,31 @@ edges | test.rs:302:32:302:37 | ... < ... | test.rs:303:13:303:27 | TupleStructPat | false | | test.rs:302:36:302:37 | 10 | test.rs:302:32:302:37 | ... < ... | | | test.rs:302:42:302:42 | x | test.rs:302:46:302:46 | 5 | | -| test.rs:302:42:302:46 | ... + ... | test.rs:301:9:305:9 | match ... { ... } | | +| test.rs:302:42:302:46 | ... + ... | test.rs:301:9:305:9 | match maybe_digit { ... } | | | test.rs:302:46:302:46 | 5 | test.rs:302:42:302:46 | ... + ... | | | test.rs:303:13:303:27 | TupleStructPat | test.rs:303:26:303:26 | x | match | | test.rs:303:13:303:27 | TupleStructPat | test.rs:304:13:304:24 | Option::None | no-match | | test.rs:303:26:303:26 | x | test.rs:303:32:303:32 | x | match | -| test.rs:303:32:303:32 | x | test.rs:301:9:305:9 | match ... { ... } | | +| test.rs:303:32:303:32 | x | test.rs:301:9:305:9 | match maybe_digit { ... } | | | test.rs:304:13:304:24 | Option::None | test.rs:304:29:304:29 | 5 | match | -| test.rs:304:29:304:29 | 5 | test.rs:301:9:305:9 | match ... { ... } | | +| test.rs:304:29:304:29 | 5 | test.rs:301:9:305:9 | match maybe_digit { ... } | | | test.rs:308:5:317:5 | enter fn test_match_with_return_in_scrutinee | test.rs:308:44:308:54 | maybe_digit | | | test.rs:308:5:317:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:308:5:317:5 | exit fn test_match_with_return_in_scrutinee | | -| test.rs:308:44:308:54 | maybe_digit | test.rs:308:44:308:67 | maybe_digit: Option::<...> | match | -| test.rs:308:44:308:67 | maybe_digit: Option::<...> | test.rs:309:19:309:29 | maybe_digit | | +| test.rs:308:44:308:54 | maybe_digit | test.rs:308:44:308:67 | ...: Option::<...> | match | +| test.rs:308:44:308:67 | ...: Option::<...> | test.rs:309:19:309:29 | maybe_digit | | | test.rs:308:77:317:5 | { ... } | test.rs:308:5:317:5 | exit fn test_match_with_return_in_scrutinee (normal) | | | test.rs:309:9:316:9 | match ... { ... } | test.rs:308:77:317:5 | { ... } | | -| test.rs:309:16:313:9 | if ... { ... } else { ... } | test.rs:314:13:314:27 | TupleStructPat | | +| test.rs:309:16:313:9 | if ... {...} else {...} | test.rs:314:13:314:27 | TupleStructPat | | | test.rs:309:19:309:29 | maybe_digit | test.rs:309:34:309:37 | Some | | | test.rs:309:19:309:40 | ... == ... | test.rs:310:13:310:21 | ExprStmt | true | | test.rs:309:19:309:40 | ... == ... | test.rs:312:13:312:23 | maybe_digit | false | | test.rs:309:34:309:37 | Some | test.rs:309:39:309:39 | 3 | | | test.rs:309:34:309:40 | Some(...) | test.rs:309:19:309:40 | ... == ... | | | test.rs:309:39:309:39 | 3 | test.rs:309:34:309:40 | Some(...) | | -| test.rs:310:13:310:20 | return ... | test.rs:308:5:317:5 | exit fn test_match_with_return_in_scrutinee (normal) | return | +| test.rs:310:13:310:20 | return 3 | test.rs:308:5:317:5 | exit fn test_match_with_return_in_scrutinee (normal) | return | | test.rs:310:13:310:21 | ExprStmt | test.rs:310:20:310:20 | 3 | | -| test.rs:310:20:310:20 | 3 | test.rs:310:13:310:20 | return ... | | -| test.rs:311:16:313:9 | { ... } | test.rs:309:16:313:9 | if ... { ... } else { ... } | | +| test.rs:310:20:310:20 | 3 | test.rs:310:13:310:20 | return 3 | | +| test.rs:311:16:313:9 | { ... } | test.rs:309:16:313:9 | if ... {...} else {...} | | | test.rs:312:13:312:23 | maybe_digit | test.rs:311:16:313:9 | { ... } | | | test.rs:314:13:314:27 | TupleStructPat | test.rs:314:26:314:26 | x | match | | test.rs:314:13:314:27 | TupleStructPat | test.rs:315:13:315:24 | Option::None | no-match | @@ -692,44 +692,44 @@ edges | test.rs:315:29:315:29 | 5 | test.rs:309:9:316:9 | match ... { ... } | | | test.rs:319:5:324:5 | enter fn test_match_and | test.rs:319:23:319:26 | cond | | | test.rs:319:5:324:5 | exit fn test_match_and (normal) | test.rs:319:5:324:5 | exit fn test_match_and | | -| test.rs:319:23:319:26 | cond | test.rs:319:23:319:32 | cond: bool | match | -| test.rs:319:23:319:32 | cond: bool | test.rs:319:35:319:35 | r | | -| test.rs:319:35:319:35 | r | test.rs:319:35:319:49 | r: Option::<...> | match | -| test.rs:319:35:319:49 | r: Option::<...> | test.rs:320:16:320:16 | r | | +| test.rs:319:23:319:26 | cond | test.rs:319:23:319:32 | ...: bool | match | +| test.rs:319:23:319:32 | ...: bool | test.rs:319:35:319:35 | r | | +| test.rs:319:35:319:35 | r | test.rs:319:35:319:49 | ...: Option::<...> | match | +| test.rs:319:35:319:49 | ...: Option::<...> | test.rs:320:16:320:16 | r | | | test.rs:319:60:324:5 | { ... } | test.rs:319:5:324:5 | exit fn test_match_and (normal) | | | test.rs:320:9:323:18 | ... && ... | test.rs:319:60:324:5 | { ... } | | -| test.rs:320:10:323:9 | [boolean(false)] match ... { ... } | test.rs:320:9:323:18 | ... && ... | false | -| test.rs:320:10:323:9 | [boolean(true)] match ... { ... } | test.rs:323:15:323:18 | cond | true | +| test.rs:320:10:323:9 | [boolean(false)] match r { ... } | test.rs:320:9:323:18 | ... && ... | false | +| test.rs:320:10:323:9 | [boolean(true)] match r { ... } | test.rs:323:15:323:18 | cond | true | | test.rs:320:16:320:16 | r | test.rs:321:13:321:19 | TupleStructPat | | | test.rs:321:13:321:19 | TupleStructPat | test.rs:321:18:321:18 | a | match | | test.rs:321:13:321:19 | TupleStructPat | test.rs:322:13:322:13 | _ | no-match | | test.rs:321:18:321:18 | a | test.rs:321:24:321:24 | a | match | -| test.rs:321:24:321:24 | a | test.rs:320:10:323:9 | [boolean(false)] match ... { ... } | false | -| test.rs:321:24:321:24 | a | test.rs:320:10:323:9 | [boolean(true)] match ... { ... } | true | +| test.rs:321:24:321:24 | a | test.rs:320:10:323:9 | [boolean(false)] match r { ... } | false | +| test.rs:321:24:321:24 | a | test.rs:320:10:323:9 | [boolean(true)] match r { ... } | true | | test.rs:322:13:322:13 | _ | test.rs:322:18:322:22 | false | match | -| test.rs:322:18:322:22 | false | test.rs:320:10:323:9 | [boolean(false)] match ... { ... } | false | +| test.rs:322:18:322:22 | false | test.rs:320:10:323:9 | [boolean(false)] match r { ... } | false | | test.rs:323:15:323:18 | cond | test.rs:320:9:323:18 | ... && ... | | | test.rs:326:5:331:5 | enter fn test_match_with_no_arms | test.rs:326:35:326:35 | r | | | test.rs:326:5:331:5 | exit fn test_match_with_no_arms (normal) | test.rs:326:5:331:5 | exit fn test_match_with_no_arms | | -| test.rs:326:35:326:35 | r | test.rs:326:35:326:58 | r: Result::<...> | match | -| test.rs:326:35:326:58 | r: Result::<...> | test.rs:327:15:327:15 | r | | +| test.rs:326:35:326:35 | r | test.rs:326:35:326:58 | ...: Result::<...> | match | +| test.rs:326:35:326:58 | ...: Result::<...> | test.rs:327:15:327:15 | r | | | test.rs:326:66:331:5 | { ... } | test.rs:326:5:331:5 | exit fn test_match_with_no_arms (normal) | | -| test.rs:327:9:330:9 | match ... { ... } | test.rs:326:66:331:5 | { ... } | | +| test.rs:327:9:330:9 | match r { ... } | test.rs:326:66:331:5 | { ... } | | | test.rs:327:15:327:15 | r | test.rs:328:13:328:21 | TupleStructPat | | | test.rs:328:13:328:21 | TupleStructPat | test.rs:328:16:328:20 | value | match | | test.rs:328:13:328:21 | TupleStructPat | test.rs:329:13:329:22 | TupleStructPat | no-match | | test.rs:328:16:328:20 | value | test.rs:328:26:328:30 | value | match | -| test.rs:328:26:328:30 | value | test.rs:327:9:330:9 | match ... { ... } | | +| test.rs:328:26:328:30 | value | test.rs:327:9:330:9 | match r { ... } | | | test.rs:329:13:329:22 | TupleStructPat | test.rs:329:17:329:21 | never | match | | test.rs:329:17:329:21 | never | test.rs:329:33:329:37 | never | match | -| test.rs:329:27:329:40 | match ... { ... } | test.rs:327:9:330:9 | match ... { ... } | | -| test.rs:329:33:329:37 | never | test.rs:329:27:329:40 | match ... { ... } | | +| test.rs:329:27:329:40 | match never { ... } | test.rs:327:9:330:9 | match r { ... } | | +| test.rs:329:33:329:37 | never | test.rs:329:27:329:40 | match never { ... } | | | test.rs:336:5:339:5 | enter fn test_let_match | test.rs:336:23:336:23 | a | | | test.rs:336:5:339:5 | exit fn test_let_match (normal) | test.rs:336:5:339:5 | exit fn test_let_match | | -| test.rs:336:23:336:23 | a | test.rs:336:23:336:36 | a: Option::<...> | match | -| test.rs:336:23:336:36 | a: Option::<...> | test.rs:337:9:337:57 | let TupleStructPat = ... else { ... } | | +| test.rs:336:23:336:23 | a | test.rs:336:23:336:36 | ...: Option::<...> | match | +| test.rs:336:23:336:36 | ...: Option::<...> | test.rs:337:9:337:57 | let ... = a else { ... } | | | test.rs:336:46:339:5 | { ... } | test.rs:336:5:339:5 | exit fn test_let_match (normal) | | -| test.rs:337:9:337:57 | let TupleStructPat = ... else { ... } | test.rs:337:23:337:23 | a | | +| test.rs:337:9:337:57 | let ... = a else { ... } | test.rs:337:23:337:23 | a | | | test.rs:337:13:337:19 | TupleStructPat | test.rs:337:18:337:18 | n | match | | test.rs:337:13:337:19 | TupleStructPat | test.rs:337:39:337:53 | MacroStmts | no-match | | test.rs:337:18:337:18 | n | test.rs:338:9:338:9 | n | match | @@ -748,51 +748,51 @@ edges | test.rs:338:9:338:9 | n | test.rs:336:46:339:5 | { ... } | | | test.rs:341:5:347:5 | enter fn test_let_with_return | test.rs:341:29:341:29 | m | | | test.rs:341:5:347:5 | exit fn test_let_with_return (normal) | test.rs:341:5:347:5 | exit fn test_let_with_return | | -| test.rs:341:29:341:29 | m | test.rs:341:29:341:42 | m: Option::<...> | match | -| test.rs:341:29:341:42 | m: Option::<...> | test.rs:342:9:345:10 | let ret = ... | | +| test.rs:341:29:341:29 | m | test.rs:341:29:341:42 | ...: Option::<...> | match | +| test.rs:341:29:341:42 | ...: Option::<...> | test.rs:342:9:345:10 | let ... = ... | | | test.rs:341:53:347:5 | { ... } | test.rs:341:5:347:5 | exit fn test_let_with_return (normal) | | -| test.rs:342:9:345:10 | let ret = ... | test.rs:342:25:342:25 | m | | +| test.rs:342:9:345:10 | let ... = ... | test.rs:342:25:342:25 | m | | | test.rs:342:13:342:15 | ret | test.rs:346:9:346:12 | true | match | -| test.rs:342:19:345:9 | match ... { ... } | test.rs:342:13:342:15 | ret | | +| test.rs:342:19:345:9 | match m { ... } | test.rs:342:13:342:15 | ret | | | test.rs:342:25:342:25 | m | test.rs:343:13:343:21 | TupleStructPat | | | test.rs:343:13:343:21 | TupleStructPat | test.rs:343:18:343:20 | ret | match | | test.rs:343:13:343:21 | TupleStructPat | test.rs:344:13:344:16 | None | no-match | | test.rs:343:18:343:20 | ret | test.rs:343:26:343:28 | ret | match | -| test.rs:343:26:343:28 | ret | test.rs:342:19:345:9 | match ... { ... } | | +| test.rs:343:26:343:28 | ret | test.rs:342:19:345:9 | match m { ... } | | | test.rs:344:13:344:16 | None | test.rs:344:28:344:32 | false | match | -| test.rs:344:21:344:32 | return ... | test.rs:341:5:347:5 | exit fn test_let_with_return (normal) | return | -| test.rs:344:28:344:32 | false | test.rs:344:21:344:32 | return ... | | +| test.rs:344:21:344:32 | return false | test.rs:341:5:347:5 | exit fn test_let_with_return (normal) | return | +| test.rs:344:28:344:32 | false | test.rs:344:21:344:32 | return false | | | test.rs:346:9:346:12 | true | test.rs:341:53:347:5 | { ... } | | | test.rs:352:5:355:5 | enter fn empty_tuple_pattern | test.rs:352:28:352:31 | unit | | | test.rs:352:5:355:5 | exit fn empty_tuple_pattern (normal) | test.rs:352:5:355:5 | exit fn empty_tuple_pattern | | -| test.rs:352:28:352:31 | unit | test.rs:352:28:352:35 | unit: TupleType | match | -| test.rs:352:28:352:35 | unit: TupleType | test.rs:353:9:353:22 | let TuplePat = ... | | -| test.rs:353:9:353:22 | let TuplePat = ... | test.rs:353:18:353:21 | unit | | +| test.rs:352:28:352:31 | unit | test.rs:352:28:352:35 | ...: ... | match | +| test.rs:352:28:352:35 | ...: ... | test.rs:353:9:353:22 | let ... = unit | | +| test.rs:353:9:353:22 | let ... = unit | test.rs:353:18:353:21 | unit | | | test.rs:353:13:353:14 | TuplePat | test.rs:354:9:354:15 | ExprStmt | match | | test.rs:353:18:353:21 | unit | test.rs:353:13:353:14 | TuplePat | | | test.rs:354:9:354:14 | return | test.rs:352:5:355:5 | exit fn empty_tuple_pattern (normal) | return | | test.rs:354:9:354:15 | ExprStmt | test.rs:354:9:354:14 | return | | | test.rs:359:5:363:5 | enter fn empty_struct_pattern | test.rs:359:29:359:30 | st | | | test.rs:359:5:363:5 | exit fn empty_struct_pattern (normal) | test.rs:359:5:363:5 | exit fn empty_struct_pattern | | -| test.rs:359:29:359:30 | st | test.rs:359:29:359:40 | st: MyStruct | match | -| test.rs:359:29:359:40 | st: MyStruct | test.rs:360:15:360:16 | st | | +| test.rs:359:29:359:30 | st | test.rs:359:29:359:40 | ...: MyStruct | match | +| test.rs:359:29:359:40 | ...: MyStruct | test.rs:360:15:360:16 | st | | | test.rs:359:50:363:5 | { ... } | test.rs:359:5:363:5 | exit fn empty_struct_pattern (normal) | | -| test.rs:360:9:362:9 | match ... { ... } | test.rs:359:50:363:5 | { ... } | | +| test.rs:360:9:362:9 | match st { ... } | test.rs:359:50:363:5 | { ... } | | | test.rs:360:15:360:16 | st | test.rs:361:13:361:27 | MyStruct {...} | | | test.rs:361:13:361:27 | MyStruct {...} | test.rs:361:24:361:25 | .. | match | | test.rs:361:24:361:25 | .. | test.rs:361:32:361:32 | 1 | match | -| test.rs:361:32:361:32 | 1 | test.rs:360:9:362:9 | match ... { ... } | | +| test.rs:361:32:361:32 | 1 | test.rs:360:9:362:9 | match st { ... } | | | test.rs:365:5:372:5 | enter fn range_pattern | test.rs:366:15:366:16 | 42 | | | test.rs:365:5:372:5 | exit fn range_pattern (normal) | test.rs:365:5:372:5 | exit fn range_pattern | | | test.rs:365:31:372:5 | { ... } | test.rs:365:5:372:5 | exit fn range_pattern (normal) | | -| test.rs:366:9:371:9 | match ... { ... } | test.rs:365:31:372:5 | { ... } | | +| test.rs:366:9:371:9 | match 42 { ... } | test.rs:365:31:372:5 | { ... } | | | test.rs:366:15:366:16 | 42 | test.rs:367:13:367:15 | RangePat | | | test.rs:367:13:367:15 | RangePat | test.rs:367:15:367:15 | 0 | match | | test.rs:367:13:367:15 | RangePat | test.rs:368:13:368:16 | RangePat | no-match | | test.rs:367:15:367:15 | 0 | test.rs:367:15:367:15 | 0 | | | test.rs:367:15:367:15 | 0 | test.rs:367:20:367:20 | 1 | match | | test.rs:367:15:367:15 | 0 | test.rs:368:13:368:16 | RangePat | no-match | -| test.rs:367:20:367:20 | 1 | test.rs:366:9:371:9 | match ... { ... } | | +| test.rs:367:20:367:20 | 1 | test.rs:366:9:371:9 | match 42 { ... } | | | test.rs:368:13:368:13 | 1 | test.rs:368:13:368:13 | 1 | | | test.rs:368:13:368:13 | 1 | test.rs:368:16:368:16 | 2 | match | | test.rs:368:13:368:13 | 1 | test.rs:369:13:369:15 | RangePat | no-match | @@ -801,15 +801,15 @@ edges | test.rs:368:16:368:16 | 2 | test.rs:368:16:368:16 | 2 | | | test.rs:368:16:368:16 | 2 | test.rs:368:21:368:21 | 2 | match | | test.rs:368:16:368:16 | 2 | test.rs:369:13:369:15 | RangePat | no-match | -| test.rs:368:21:368:21 | 2 | test.rs:366:9:371:9 | match ... { ... } | | +| test.rs:368:21:368:21 | 2 | test.rs:366:9:371:9 | match 42 { ... } | | | test.rs:369:13:369:13 | 5 | test.rs:369:13:369:13 | 5 | | | test.rs:369:13:369:13 | 5 | test.rs:369:20:369:20 | 3 | match | | test.rs:369:13:369:13 | 5 | test.rs:370:13:370:13 | _ | no-match | | test.rs:369:13:369:15 | RangePat | test.rs:369:13:369:13 | 5 | match | | test.rs:369:13:369:15 | RangePat | test.rs:370:13:370:13 | _ | no-match | -| test.rs:369:20:369:20 | 3 | test.rs:366:9:371:9 | match ... { ... } | | +| test.rs:369:20:369:20 | 3 | test.rs:366:9:371:9 | match 42 { ... } | | | test.rs:370:13:370:13 | _ | test.rs:370:18:370:18 | 4 | match | -| test.rs:370:18:370:18 | 4 | test.rs:366:9:371:9 | match ... { ... } | | +| test.rs:370:18:370:18 | 4 | test.rs:366:9:371:9 | match 42 { ... } | | | test.rs:376:5:381:5 | enter fn test_infinite_loop | test.rs:377:9:379:9 | ExprStmt | | | test.rs:377:9:379:9 | ExprStmt | test.rs:378:13:378:14 | TupleExpr | | | test.rs:377:14:379:9 | { ... } | test.rs:378:13:378:14 | TupleExpr | | @@ -829,11 +829,11 @@ edges | test.rs:386:18:386:32 | { ... } | test.rs:386:9:386:33 | MacroExpr | | | test.rs:389:5:408:5 | enter fn async_block | test.rs:389:26:389:26 | b | | | test.rs:389:5:408:5 | exit fn async_block (normal) | test.rs:389:5:408:5 | exit fn async_block | | -| test.rs:389:26:389:26 | b | test.rs:389:26:389:32 | b: bool | match | -| test.rs:389:26:389:32 | b: bool | test.rs:390:9:392:10 | let say_godbye = ... | | +| test.rs:389:26:389:26 | b | test.rs:389:26:389:32 | ...: bool | match | +| test.rs:389:26:389:32 | ...: bool | test.rs:390:9:392:10 | let ... = ... | | | test.rs:389:35:408:5 | { ... } | test.rs:389:5:408:5 | exit fn async_block (normal) | | -| test.rs:390:9:392:10 | let say_godbye = ... | test.rs:390:26:392:9 | { ... } | | -| test.rs:390:13:390:22 | say_godbye | test.rs:393:9:395:10 | let say_how_are_you = ... | match | +| test.rs:390:9:392:10 | let ... = ... | test.rs:390:26:392:9 | { ... } | | +| test.rs:390:13:390:22 | say_godbye | test.rs:393:9:395:10 | let ... = ... | match | | test.rs:390:26:392:9 | enter { ... } | test.rs:391:13:391:42 | ExprStmt | | | test.rs:390:26:392:9 | exit { ... } (normal) | test.rs:390:26:392:9 | exit { ... } | | | test.rs:390:26:392:9 | { ... } | test.rs:390:13:390:22 | say_godbye | | @@ -847,8 +847,8 @@ edges | test.rs:391:22:391:40 | MacroExpr | test.rs:391:22:391:40 | $crate::io::_print(...) | | | test.rs:391:22:391:40 | MacroStmts | test.rs:391:22:391:40 | ExprStmt | | | test.rs:391:22:391:40 | { ... } | test.rs:391:13:391:41 | MacroExpr | | -| test.rs:393:9:395:10 | let say_how_are_you = ... | test.rs:393:31:395:9 | { ... } | | -| test.rs:393:13:393:27 | say_how_are_you | test.rs:396:9:396:28 | let noop = ... | match | +| test.rs:393:9:395:10 | let ... = ... | test.rs:393:31:395:9 | { ... } | | +| test.rs:393:13:393:27 | say_how_are_you | test.rs:396:9:396:28 | let ... = ... | match | | test.rs:393:31:395:9 | enter { ... } | test.rs:394:13:394:37 | ExprStmt | | | test.rs:393:31:395:9 | exit { ... } (normal) | test.rs:393:31:395:9 | exit { ... } | | | test.rs:393:31:395:9 | { ... } | test.rs:393:13:393:27 | say_how_are_you | | @@ -862,35 +862,35 @@ edges | test.rs:394:22:394:35 | MacroExpr | test.rs:394:22:394:35 | $crate::io::_print(...) | | | test.rs:394:22:394:35 | MacroStmts | test.rs:394:22:394:35 | ExprStmt | | | test.rs:394:22:394:35 | { ... } | test.rs:394:13:394:36 | MacroExpr | | -| test.rs:396:9:396:28 | let noop = ... | test.rs:396:20:396:27 | { ... } | | +| test.rs:396:9:396:28 | let ... = ... | test.rs:396:20:396:27 | { ... } | | | test.rs:396:13:396:16 | noop | test.rs:397:9:397:26 | ExprStmt | match | | test.rs:396:20:396:27 | { ... } | test.rs:396:13:396:16 | noop | | | test.rs:397:9:397:17 | say_hello | test.rs:397:9:397:19 | say_hello(...) | | | test.rs:397:9:397:19 | say_hello(...) | test.rs:397:9:397:25 | await ... | | | test.rs:397:9:397:25 | await ... | test.rs:398:9:398:30 | ExprStmt | | | test.rs:397:9:397:26 | ExprStmt | test.rs:397:9:397:17 | say_hello | | -| test.rs:398:9:398:23 | say_how_are_you | test.rs:398:9:398:29 | await ... | | -| test.rs:398:9:398:29 | await ... | test.rs:399:9:399:25 | ExprStmt | | +| test.rs:398:9:398:23 | say_how_are_you | test.rs:398:9:398:29 | await say_how_are_you | | +| test.rs:398:9:398:29 | await say_how_are_you | test.rs:399:9:399:25 | ExprStmt | | | test.rs:398:9:398:30 | ExprStmt | test.rs:398:9:398:23 | say_how_are_you | | -| test.rs:399:9:399:18 | say_godbye | test.rs:399:9:399:24 | await ... | | -| test.rs:399:9:399:24 | await ... | test.rs:400:9:400:19 | ExprStmt | | +| test.rs:399:9:399:18 | say_godbye | test.rs:399:9:399:24 | await say_godbye | | +| test.rs:399:9:399:24 | await say_godbye | test.rs:400:9:400:19 | ExprStmt | | | test.rs:399:9:399:25 | ExprStmt | test.rs:399:9:399:18 | say_godbye | | -| test.rs:400:9:400:12 | noop | test.rs:400:9:400:18 | await ... | | -| test.rs:400:9:400:18 | await ... | test.rs:402:9:407:10 | let lambda = ... | | +| test.rs:400:9:400:12 | noop | test.rs:400:9:400:18 | await noop | | +| test.rs:400:9:400:18 | await noop | test.rs:402:9:407:10 | let ... = ... | | | test.rs:400:9:400:19 | ExprStmt | test.rs:400:9:400:12 | noop | | -| test.rs:402:9:407:10 | let lambda = ... | test.rs:402:22:407:9 | \|...\| ... | | +| test.rs:402:9:407:10 | let ... = ... | test.rs:402:22:407:9 | \|...\| ... | | | test.rs:402:13:402:18 | lambda | test.rs:389:35:408:5 | { ... } | match | | test.rs:402:22:407:9 | \|...\| ... | test.rs:402:13:402:18 | lambda | | | test.rs:402:22:407:9 | enter \|...\| ... | test.rs:402:23:402:25 | foo | | | test.rs:402:22:407:9 | exit \|...\| ... (normal) | test.rs:402:22:407:9 | exit \|...\| ... | | -| test.rs:402:23:402:25 | foo | test.rs:402:23:402:25 | foo | match | -| test.rs:402:23:402:25 | foo | test.rs:402:28:407:9 | { ... } | | +| test.rs:402:23:402:25 | ... | test.rs:402:28:407:9 | { ... } | | +| test.rs:402:23:402:25 | foo | test.rs:402:23:402:25 | ... | match | | test.rs:402:28:407:9 | enter { ... } | test.rs:403:13:405:14 | ExprStmt | | | test.rs:402:28:407:9 | exit { ... } (normal) | test.rs:402:28:407:9 | exit { ... } | | | test.rs:402:28:407:9 | { ... } | test.rs:402:22:407:9 | exit \|...\| ... (normal) | | -| test.rs:403:13:405:13 | if ... { ... } | test.rs:406:13:406:15 | foo | | +| test.rs:403:13:405:13 | if b {...} | test.rs:406:13:406:15 | foo | | | test.rs:403:13:405:14 | ExprStmt | test.rs:403:16:403:16 | b | | -| test.rs:403:16:403:16 | b | test.rs:403:13:405:13 | if ... { ... } | false | +| test.rs:403:16:403:16 | b | test.rs:403:13:405:13 | if b {...} | false | | test.rs:403:16:403:16 | b | test.rs:404:17:404:41 | ExprStmt | true | | test.rs:404:17:404:40 | return ... | test.rs:402:28:407:9 | exit { ... } (normal) | return | | test.rs:404:17:404:41 | ExprStmt | test.rs:404:24:404:34 | async_block | | @@ -900,8 +900,8 @@ edges | test.rs:406:13:406:15 | foo | test.rs:402:28:407:9 | exit { ... } (normal) | | | test.rs:414:5:416:5 | enter fn add_two | test.rs:414:22:414:22 | n | | | test.rs:414:5:416:5 | exit fn add_two (normal) | test.rs:414:5:416:5 | exit fn add_two | | -| test.rs:414:22:414:22 | n | test.rs:414:22:414:27 | n: i64 | match | -| test.rs:414:22:414:27 | n: i64 | test.rs:415:9:415:9 | n | | +| test.rs:414:22:414:22 | n | test.rs:414:22:414:27 | ...: i64 | match | +| test.rs:414:22:414:27 | ...: i64 | test.rs:415:9:415:9 | n | | | test.rs:414:37:416:5 | { ... } | test.rs:414:5:416:5 | exit fn add_two (normal) | | | test.rs:415:9:415:9 | n | test.rs:415:13:415:13 | 2 | | | test.rs:415:9:415:13 | ... + ... | test.rs:414:37:416:5 | { ... } | | @@ -925,16 +925,16 @@ edges | test.rs:424:13:424:49 | panic_cold_explicit(...) | test.rs:424:13:424:49 | { ... } | | | test.rs:424:13:424:49 | { ... } | test.rs:424:13:424:49 | MacroExpr | | | test.rs:424:13:424:49 | { ... } | test.rs:424:13:424:49 | exit fn panic_cold_explicit (normal) | | -| test.rs:424:13:424:49 | { ... } | test.rs:424:21:424:48 | if ... { ... } | | +| test.rs:424:13:424:49 | { ... } | test.rs:424:21:424:48 | if ... {...} | | | test.rs:424:13:424:50 | ExprStmt | test.rs:424:21:424:48 | MacroStmts | | | test.rs:424:21:424:42 | std::mem::size_of::<...> | test.rs:424:21:424:44 | std::mem::size_of::<...>(...) | | | test.rs:424:21:424:44 | std::mem::size_of::<...>(...) | test.rs:424:48:424:48 | 0 | | | test.rs:424:21:424:48 | ... > ... | test.rs:424:21:424:48 | [boolean(false)] ! ... | true | | test.rs:424:21:424:48 | ... > ... | test.rs:424:21:424:48 | [boolean(true)] ! ... | false | | test.rs:424:21:424:48 | MacroStmts | test.rs:424:21:424:42 | std::mem::size_of::<...> | | -| test.rs:424:21:424:48 | [boolean(false)] ! ... | test.rs:424:21:424:48 | if ... { ... } | false | +| test.rs:424:21:424:48 | [boolean(false)] ! ... | test.rs:424:21:424:48 | if ... {...} | false | | test.rs:424:21:424:48 | [boolean(true)] ! ... | test.rs:424:13:424:49 | ExprStmt | true | -| test.rs:424:21:424:48 | if ... { ... } | test.rs:424:21:424:48 | { ... } | | +| test.rs:424:21:424:48 | if ... {...} | test.rs:424:21:424:48 | { ... } | | | test.rs:424:21:424:48 | { ... } | test.rs:424:13:424:49 | MacroExpr | | | test.rs:424:48:424:48 | 0 | test.rs:424:21:424:48 | ... > ... | | | test.rs:427:9:427:10 | 42 | test.rs:420:41:428:5 | { ... } | | @@ -943,8 +943,8 @@ edges | test.rs:430:35:439:5 | { ... } | test.rs:430:5:439:5 | exit fn const_block_panic (normal) | | | test.rs:431:9:431:30 | Const | test.rs:432:9:437:9 | ExprStmt | | | test.rs:432:9:437:9 | ExprStmt | test.rs:432:12:432:16 | false | | -| test.rs:432:9:437:9 | if ... { ... } | test.rs:438:9:438:9 | N | | -| test.rs:432:12:432:16 | false | test.rs:432:9:437:9 | if ... { ... } | false | +| test.rs:432:9:437:9 | if false {...} | test.rs:438:9:438:9 | N | | +| test.rs:432:12:432:16 | false | test.rs:432:9:437:9 | if false {...} | false | | test.rs:435:17:435:24 | $crate::panicking::panic_explicit | test.rs:435:17:435:24 | $crate::panicking::panic_explicit(...) | | | test.rs:435:17:435:24 | $crate::panicking::panic_explicit(...) | test.rs:435:17:435:24 | { ... } | | | test.rs:435:17:435:24 | enter fn panic_cold_explicit | test.rs:435:17:435:24 | $crate::panicking::panic_explicit | | @@ -955,9 +955,9 @@ edges | test.rs:442:1:447:1 | exit fn dead_code (normal) | test.rs:442:1:447:1 | exit fn dead_code | | | test.rs:443:5:445:5 | ExprStmt | test.rs:443:9:443:12 | true | | | test.rs:443:9:443:12 | true | test.rs:444:9:444:17 | ExprStmt | true | -| test.rs:444:9:444:16 | return ... | test.rs:442:1:447:1 | exit fn dead_code (normal) | return | +| test.rs:444:9:444:16 | return 0 | test.rs:442:1:447:1 | exit fn dead_code (normal) | return | | test.rs:444:9:444:17 | ExprStmt | test.rs:444:16:444:16 | 0 | | -| test.rs:444:16:444:16 | 0 | test.rs:444:9:444:16 | return ... | | +| test.rs:444:16:444:16 | 0 | test.rs:444:9:444:16 | return 0 | | | test.rs:449:1:449:16 | enter fn do_thing | test.rs:449:15:449:16 | { ... } | | | test.rs:449:1:449:16 | exit fn do_thing (normal) | test.rs:449:1:449:16 | exit fn do_thing | | | test.rs:449:15:449:16 | { ... } | test.rs:449:1:449:16 | exit fn do_thing (normal) | | @@ -971,68 +971,68 @@ edges | test.rs:457:1:457:21 | enter fn do_last_thing | test.rs:457:20:457:21 | { ... } | | | test.rs:457:1:457:21 | exit fn do_last_thing (normal) | test.rs:457:1:457:21 | exit fn do_last_thing | | | test.rs:457:20:457:21 | { ... } | test.rs:457:1:457:21 | exit fn do_last_thing (normal) | | -| test.rs:459:1:473:1 | enter fn labelled_block1 | test.rs:460:5:471:6 | let result = ... | | +| test.rs:459:1:473:1 | enter fn labelled_block1 | test.rs:460:5:471:6 | let ... = ... | | | test.rs:459:1:473:1 | exit fn labelled_block1 (normal) | test.rs:459:1:473:1 | exit fn labelled_block1 | | | test.rs:459:29:473:1 | { ... } | test.rs:459:1:473:1 | exit fn labelled_block1 (normal) | | -| test.rs:460:5:471:6 | let result = ... | test.rs:461:9:461:19 | ExprStmt | | +| test.rs:460:5:471:6 | let ... = ... | test.rs:461:9:461:19 | ExprStmt | | | test.rs:460:9:460:14 | result | test.rs:472:5:472:10 | result | match | -| test.rs:460:18:471:5 | { ... } | test.rs:460:9:460:14 | result | | +| test.rs:460:18:471:5 | ''block: { ... } | test.rs:460:9:460:14 | result | | | test.rs:461:9:461:16 | do_thing | test.rs:461:9:461:18 | do_thing(...) | | | test.rs:461:9:461:18 | do_thing(...) | test.rs:462:9:464:9 | ExprStmt | | | test.rs:461:9:461:19 | ExprStmt | test.rs:461:9:461:16 | do_thing | | | test.rs:462:9:464:9 | ExprStmt | test.rs:462:12:462:28 | condition_not_met | | -| test.rs:462:9:464:9 | if ... { ... } | test.rs:465:9:465:24 | ExprStmt | | +| test.rs:462:9:464:9 | if ... {...} | test.rs:465:9:465:24 | ExprStmt | | | test.rs:462:12:462:28 | condition_not_met | test.rs:462:12:462:30 | condition_not_met(...) | | -| test.rs:462:12:462:30 | condition_not_met(...) | test.rs:462:9:464:9 | if ... { ... } | false | +| test.rs:462:12:462:30 | condition_not_met(...) | test.rs:462:9:464:9 | if ... {...} | false | | test.rs:462:12:462:30 | condition_not_met(...) | test.rs:463:13:463:27 | ExprStmt | true | -| test.rs:463:13:463:26 | break ''block ... | test.rs:460:18:471:5 | { ... } | break | +| test.rs:463:13:463:26 | break ''block 1 | test.rs:460:18:471:5 | ''block: { ... } | break | | test.rs:463:13:463:27 | ExprStmt | test.rs:463:26:463:26 | 1 | | -| test.rs:463:26:463:26 | 1 | test.rs:463:13:463:26 | break ''block ... | | +| test.rs:463:26:463:26 | 1 | test.rs:463:13:463:26 | break ''block 1 | | | test.rs:465:9:465:21 | do_next_thing | test.rs:465:9:465:23 | do_next_thing(...) | | | test.rs:465:9:465:23 | do_next_thing(...) | test.rs:466:9:468:9 | ExprStmt | | | test.rs:465:9:465:24 | ExprStmt | test.rs:465:9:465:21 | do_next_thing | | | test.rs:466:9:468:9 | ExprStmt | test.rs:466:12:466:28 | condition_not_met | | -| test.rs:466:9:468:9 | if ... { ... } | test.rs:469:9:469:24 | ExprStmt | | +| test.rs:466:9:468:9 | if ... {...} | test.rs:469:9:469:24 | ExprStmt | | | test.rs:466:12:466:28 | condition_not_met | test.rs:466:12:466:30 | condition_not_met(...) | | -| test.rs:466:12:466:30 | condition_not_met(...) | test.rs:466:9:468:9 | if ... { ... } | false | +| test.rs:466:12:466:30 | condition_not_met(...) | test.rs:466:9:468:9 | if ... {...} | false | | test.rs:466:12:466:30 | condition_not_met(...) | test.rs:467:13:467:27 | ExprStmt | true | -| test.rs:467:13:467:26 | break ''block ... | test.rs:460:18:471:5 | { ... } | break | +| test.rs:467:13:467:26 | break ''block 2 | test.rs:460:18:471:5 | ''block: { ... } | break | | test.rs:467:13:467:27 | ExprStmt | test.rs:467:26:467:26 | 2 | | -| test.rs:467:26:467:26 | 2 | test.rs:467:13:467:26 | break ''block ... | | +| test.rs:467:26:467:26 | 2 | test.rs:467:13:467:26 | break ''block 2 | | | test.rs:469:9:469:21 | do_last_thing | test.rs:469:9:469:23 | do_last_thing(...) | | | test.rs:469:9:469:23 | do_last_thing(...) | test.rs:470:9:470:9 | 3 | | | test.rs:469:9:469:24 | ExprStmt | test.rs:469:9:469:21 | do_last_thing | | -| test.rs:470:9:470:9 | 3 | test.rs:460:18:471:5 | { ... } | | +| test.rs:470:9:470:9 | 3 | test.rs:460:18:471:5 | ''block: { ... } | | | test.rs:472:5:472:10 | result | test.rs:459:29:473:1 | { ... } | | -| test.rs:475:1:483:1 | enter fn labelled_block2 | test.rs:476:5:482:6 | let result = ... | | +| test.rs:475:1:483:1 | enter fn labelled_block2 | test.rs:476:5:482:6 | let ... = ... | | | test.rs:475:1:483:1 | exit fn labelled_block2 (normal) | test.rs:475:1:483:1 | exit fn labelled_block2 | | | test.rs:475:22:483:1 | { ... } | test.rs:475:1:483:1 | exit fn labelled_block2 (normal) | | -| test.rs:476:5:482:6 | let result = ... | test.rs:477:9:477:34 | let x = ... | | +| test.rs:476:5:482:6 | let ... = ... | test.rs:477:9:477:34 | let ... = None | | | test.rs:476:9:476:14 | result | test.rs:475:22:483:1 | { ... } | match | -| test.rs:476:18:482:5 | { ... } | test.rs:476:9:476:14 | result | | -| test.rs:477:9:477:34 | let x = ... | test.rs:477:30:477:33 | None | | -| test.rs:477:13:477:13 | x | test.rs:478:9:480:10 | let TupleStructPat = ... else { ... } | match | +| test.rs:476:18:482:5 | ''block: { ... } | test.rs:476:9:476:14 | result | | +| test.rs:477:9:477:34 | let ... = None | test.rs:477:30:477:33 | None | | +| test.rs:477:13:477:13 | x | test.rs:478:9:480:10 | let ... = x else { ... } | match | | test.rs:477:30:477:33 | None | test.rs:477:13:477:13 | x | | -| test.rs:478:9:480:10 | let TupleStructPat = ... else { ... } | test.rs:478:23:478:23 | x | | +| test.rs:478:9:480:10 | let ... = x else { ... } | test.rs:478:23:478:23 | x | | | test.rs:478:13:478:19 | TupleStructPat | test.rs:478:18:478:18 | y | match | | test.rs:478:13:478:19 | TupleStructPat | test.rs:479:13:479:27 | ExprStmt | no-match | | test.rs:478:18:478:18 | y | test.rs:481:9:481:9 | 0 | match | | test.rs:478:23:478:23 | x | test.rs:478:13:478:19 | TupleStructPat | | -| test.rs:479:13:479:26 | break ''block ... | test.rs:476:18:482:5 | { ... } | break | +| test.rs:479:13:479:26 | break ''block 1 | test.rs:476:18:482:5 | ''block: { ... } | break | | test.rs:479:13:479:27 | ExprStmt | test.rs:479:26:479:26 | 1 | | -| test.rs:479:26:479:26 | 1 | test.rs:479:13:479:26 | break ''block ... | | -| test.rs:481:9:481:9 | 0 | test.rs:476:18:482:5 | { ... } | | -| test.rs:485:1:491:1 | enter fn test_nested_function2 | test.rs:486:5:486:18 | let x = ... | | +| test.rs:479:26:479:26 | 1 | test.rs:479:13:479:26 | break ''block 1 | | +| test.rs:481:9:481:9 | 0 | test.rs:476:18:482:5 | ''block: { ... } | | +| test.rs:485:1:491:1 | enter fn test_nested_function2 | test.rs:486:5:486:18 | let ... = 0 | | | test.rs:485:1:491:1 | exit fn test_nested_function2 (normal) | test.rs:485:1:491:1 | exit fn test_nested_function2 | | | test.rs:485:28:491:1 | { ... } | test.rs:485:1:491:1 | exit fn test_nested_function2 (normal) | | -| test.rs:486:5:486:18 | let x = ... | test.rs:486:17:486:17 | 0 | | +| test.rs:486:5:486:18 | let ... = 0 | test.rs:486:17:486:17 | 0 | | | test.rs:486:9:486:13 | x | test.rs:487:5:489:5 | fn nested | match | | test.rs:486:17:486:17 | 0 | test.rs:486:9:486:13 | x | | | test.rs:487:5:489:5 | enter fn nested | test.rs:487:15:487:15 | x | | | test.rs:487:5:489:5 | exit fn nested (normal) | test.rs:487:5:489:5 | exit fn nested | | | test.rs:487:5:489:5 | fn nested | test.rs:490:5:490:19 | ExprStmt | | -| test.rs:487:15:487:15 | x | test.rs:487:15:487:25 | x: RefType | match | -| test.rs:487:15:487:25 | x: RefType | test.rs:488:9:488:16 | ExprStmt | | +| test.rs:487:15:487:15 | x | test.rs:487:15:487:25 | ...: ... | match | +| test.rs:487:15:487:25 | ...: ... | test.rs:488:9:488:16 | ExprStmt | | | test.rs:487:28:489:5 | { ... } | test.rs:487:5:489:5 | exit fn nested (normal) | | | test.rs:488:9:488:10 | * ... | test.rs:488:15:488:15 | 1 | | | test.rs:488:9:488:15 | ... += ... | test.rs:487:28:489:5 | { ... } | | @@ -1042,28 +1042,28 @@ edges | test.rs:490:5:490:10 | nested | test.rs:490:17:490:17 | x | | | test.rs:490:5:490:18 | nested(...) | test.rs:485:28:491:1 | { ... } | | | test.rs:490:5:490:19 | ExprStmt | test.rs:490:5:490:10 | nested | | -| test.rs:490:12:490:17 | &mut ... | test.rs:490:5:490:18 | nested(...) | | -| test.rs:490:17:490:17 | x | test.rs:490:12:490:17 | &mut ... | | +| test.rs:490:12:490:17 | &mut x | test.rs:490:5:490:18 | nested(...) | | +| test.rs:490:17:490:17 | x | test.rs:490:12:490:17 | &mut x | | breakTarget -| test.rs:34:17:34:21 | break | test.rs:28:9:40:9 | loop {...} | -| test.rs:48:21:48:25 | break | test.rs:46:13:53:13 | loop {...} | -| test.rs:50:21:50:32 | break ''outer | test.rs:45:9:54:9 | loop {...} | -| test.rs:52:17:52:28 | break ''inner | test.rs:46:13:53:13 | loop {...} | -| test.rs:91:17:91:21 | break | test.rs:88:9:94:9 | while ... { ... } | +| test.rs:34:17:34:21 | break | test.rs:28:9:40:9 | loop { ... } | +| test.rs:48:21:48:25 | break | test.rs:46:13:53:13 | ''inner: loop { ... } | +| test.rs:50:21:50:32 | break ''outer | test.rs:45:9:54:9 | ''outer: loop { ... } | +| test.rs:52:17:52:28 | break ''inner | test.rs:46:13:53:13 | ''inner: loop { ... } | +| test.rs:91:17:91:21 | break | test.rs:88:9:94:9 | while b { ... } | | test.rs:101:17:101:21 | break | test.rs:99:9:103:9 | while ... { ... } | -| test.rs:109:17:109:21 | break | test.rs:107:9:112:9 | for i in ... { ... } | -| test.rs:117:13:117:26 | break ... | test.rs:116:9:118:9 | loop {...} | -| test.rs:197:17:197:28 | break ... | test.rs:195:13:200:9 | loop {...} | -| test.rs:210:17:210:35 | break ''label ... | test.rs:208:13:213:9 | loop {...} | -| test.rs:222:13:222:30 | break ''block ... | test.rs:221:13:223:9 | { ... } | -| test.rs:463:13:463:26 | break ''block ... | test.rs:460:18:471:5 | { ... } | -| test.rs:467:13:467:26 | break ''block ... | test.rs:460:18:471:5 | { ... } | -| test.rs:479:13:479:26 | break ''block ... | test.rs:476:18:482:5 | { ... } | +| test.rs:109:17:109:21 | break | test.rs:107:9:112:9 | for ... in ... { ... } | +| test.rs:117:13:117:26 | break ... | test.rs:116:9:118:9 | loop { ... } | +| test.rs:197:17:197:28 | break ... | test.rs:195:13:200:9 | loop { ... } | +| test.rs:210:17:210:35 | break ''label ... | test.rs:208:13:213:9 | ''label: loop { ... } | +| test.rs:222:13:222:30 | break ''block ... | test.rs:221:13:223:9 | ''block: { ... } | +| test.rs:463:13:463:26 | break ''block 1 | test.rs:460:18:471:5 | ''block: { ... } | +| test.rs:467:13:467:26 | break ''block 2 | test.rs:460:18:471:5 | ''block: { ... } | +| test.rs:479:13:479:26 | break ''block 1 | test.rs:476:18:482:5 | ''block: { ... } | continueTarget -| test.rs:37:17:37:24 | continue | test.rs:28:9:40:9 | loop {...} | -| test.rs:63:21:63:28 | continue | test.rs:61:13:68:13 | loop {...} | -| test.rs:65:21:65:35 | continue 'outer | test.rs:59:9:69:9 | loop {...} | -| test.rs:67:17:67:31 | continue 'inner | test.rs:61:13:68:13 | loop {...} | -| test.rs:77:21:77:28 | continue | test.rs:75:13:82:13 | loop {...} | -| test.rs:79:21:79:35 | continue 'label | test.rs:75:13:82:13 | loop {...} | -| test.rs:81:17:81:31 | continue 'label | test.rs:75:13:82:13 | loop {...} | +| test.rs:37:17:37:24 | continue | test.rs:28:9:40:9 | loop { ... } | +| test.rs:63:21:63:28 | continue | test.rs:61:13:68:13 | ''inner: loop { ... } | +| test.rs:65:21:65:35 | continue ''outer | test.rs:59:9:69:9 | ''outer: loop { ... } | +| test.rs:67:17:67:31 | continue ''inner | test.rs:61:13:68:13 | ''inner: loop { ... } | +| test.rs:77:21:77:28 | continue | test.rs:75:13:82:13 | ''label: loop { ... } | +| test.rs:79:21:79:35 | continue ''label | test.rs:75:13:82:13 | ''label: loop { ... } | +| test.rs:81:17:81:31 | continue ''label | test.rs:75:13:82:13 | ''label: loop { ... } | diff --git a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected index c8d53f467e99..29d8b8e3b920 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected @@ -1,16 +1,16 @@ models edges -| main.rs:21:13:21:21 | source(...) : unit | main.rs:22:10:22:10 | s | provenance | | -| main.rs:32:13:32:21 | source(...) : unit | main.rs:33:10:33:10 | s | provenance | | +| main.rs:21:13:21:21 | (...) ... : unit | main.rs:22:10:22:10 | s | provenance | | +| main.rs:32:13:32:21 | (...) ... : unit | main.rs:33:10:33:10 | s | provenance | | nodes -| main.rs:17:10:17:18 | source(...) | semmle.label | source(...) | -| main.rs:21:13:21:21 | source(...) : unit | semmle.label | source(...) : unit | +| main.rs:17:10:17:18 | (...) ... | semmle.label | (...) ... | +| main.rs:21:13:21:21 | (...) ... : unit | semmle.label | (...) ... : unit | | main.rs:22:10:22:10 | s | semmle.label | s | -| main.rs:32:13:32:21 | source(...) : unit | semmle.label | source(...) : unit | +| main.rs:32:13:32:21 | (...) ... : unit | semmle.label | (...) ... : unit | | main.rs:33:10:33:10 | s | semmle.label | s | subpaths testFailures #select -| main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | $@ | main.rs:17:10:17:18 | source(...) | source(...) | -| main.rs:22:10:22:10 | s | main.rs:21:13:21:21 | source(...) : unit | main.rs:22:10:22:10 | s | $@ | main.rs:21:13:21:21 | source(...) : unit | source(...) : unit | -| main.rs:33:10:33:10 | s | main.rs:32:13:32:21 | source(...) : unit | main.rs:33:10:33:10 | s | $@ | main.rs:32:13:32:21 | source(...) : unit | source(...) : unit | +| main.rs:17:10:17:18 | (...) ... | main.rs:17:10:17:18 | (...) ... | main.rs:17:10:17:18 | (...) ... | $@ | main.rs:17:10:17:18 | (...) ... | (...) ... | +| main.rs:22:10:22:10 | s | main.rs:21:13:21:21 | (...) ... : unit | main.rs:22:10:22:10 | s | $@ | main.rs:21:13:21:21 | (...) ... : unit | (...) ... : unit | +| main.rs:33:10:33:10 | s | main.rs:32:13:32:21 | (...) ... : unit | main.rs:33:10:33:10 | s | $@ | main.rs:32:13:32:21 | (...) ... : unit | (...) ... : unit | diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index 28e43535c79e..5fbf2fe41e1a 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -1,24 +1,24 @@ -| main.rs:13:5:13:13 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:17:13:17:23 | get_data(...) | main.rs:12:1:14:1 | fn get_data | -| main.rs:18:5:18:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:22:5:22:15 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:26:13:26:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:27:5:27:14 | data_in(...) | main.rs:21:1:23:1 | fn data_in | -| main.rs:35:13:35:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:36:13:36:27 | pass_through(...) | main.rs:30:1:32:1 | fn pass_through | -| main.rs:37:5:37:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:49:9:49:15 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:55:13:55:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:13:5:13:13 | (...) ... | main.rs:1:1:3:1 | fn source | +| main.rs:17:13:17:23 | (...) ... | main.rs:12:1:14:1 | fn get_data | +| main.rs:18:5:18:11 | (...) ... | main.rs:5:1:7:1 | fn sink | +| main.rs:22:5:22:15 | (...) ... | main.rs:5:1:7:1 | fn sink | +| main.rs:26:13:26:21 | (...) ... | main.rs:1:1:3:1 | fn source | +| main.rs:27:5:27:14 | (...) ... | main.rs:21:1:23:1 | fn data_in | +| main.rs:35:13:35:21 | (...) ... | main.rs:1:1:3:1 | fn source | +| main.rs:36:13:36:27 | (...) ... | main.rs:30:1:32:1 | fn pass_through | +| main.rs:37:5:37:11 | (...) ... | main.rs:5:1:7:1 | fn sink | +| main.rs:49:9:49:15 | (...) ... | main.rs:5:1:7:1 | fn sink | +| main.rs:55:13:55:21 | (...) ... | main.rs:1:1:3:1 | fn source | | main.rs:69:13:69:25 | ... .get_data(...) | main.rs:51:5:57:5 | fn get_data | -| main.rs:70:5:70:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:75:13:75:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:70:5:70:11 | (...) ... | main.rs:5:1:7:1 | fn sink | +| main.rs:75:13:75:21 | (...) ... | main.rs:1:1:3:1 | fn source | | main.rs:76:5:76:17 | ... .data_in(...) | main.rs:48:5:50:5 | fn data_in | -| main.rs:81:13:81:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:81:13:81:21 | (...) ... | main.rs:1:1:3:1 | fn source | | main.rs:82:5:82:22 | ... .data_through(...) | main.rs:58:5:64:5 | fn data_through | -| main.rs:83:5:83:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:87:5:87:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call | -| main.rs:88:5:88:21 | data_in_to_call(...) | main.rs:25:1:28:1 | fn data_in_to_call | -| main.rs:89:5:89:23 | data_through_call(...) | main.rs:34:1:38:1 | fn data_through_call | -| main.rs:91:5:91:24 | data_out_of_method(...) | main.rs:67:1:71:1 | fn data_out_of_method | -| main.rs:92:5:92:28 | data_in_to_method_call(...) | main.rs:73:1:77:1 | fn data_in_to_method_call | -| main.rs:93:5:93:25 | data_through_method(...) | main.rs:79:1:84:1 | fn data_through_method | +| main.rs:83:5:83:11 | (...) ... | main.rs:5:1:7:1 | fn sink | +| main.rs:87:5:87:22 | (...) ... | main.rs:16:1:19:1 | fn data_out_of_call | +| main.rs:88:5:88:21 | (...) ... | main.rs:25:1:28:1 | fn data_in_to_call | +| main.rs:89:5:89:23 | (...) ... | main.rs:34:1:38:1 | fn data_through_call | +| main.rs:91:5:91:24 | (...) ... | main.rs:67:1:71:1 | fn data_out_of_method | +| main.rs:92:5:92:28 | (...) ... | main.rs:73:1:77:1 | fn data_in_to_method_call | +| main.rs:93:5:93:25 | (...) ... | main.rs:79:1:84:1 | fn data_through_method | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 3639294bd494..e0bab71ec1eb 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -5,27 +5,27 @@ | main.rs:7:9:7:9 | s | main.rs:7:9:7:9 | [SSA] s | | main.rs:19:9:19:9 | [SSA] s | main.rs:20:10:20:10 | s | | main.rs:19:9:19:9 | s | main.rs:19:9:19:9 | [SSA] s | -| main.rs:19:13:19:21 | source(...) | main.rs:19:9:19:9 | s | +| main.rs:19:13:19:21 | (...) ... | main.rs:19:9:19:9 | s | | main.rs:23:18:23:21 | [SSA] cond | main.rs:26:16:26:19 | cond | | main.rs:23:18:23:21 | cond | main.rs:23:18:23:21 | [SSA] cond | | main.rs:24:9:24:9 | [SSA] a | main.rs:26:23:26:23 | a | | main.rs:24:9:24:9 | a | main.rs:24:9:24:9 | [SSA] a | -| main.rs:24:13:24:21 | source(...) | main.rs:24:9:24:9 | a | +| main.rs:24:13:24:21 | (...) ... | main.rs:24:9:24:9 | a | | main.rs:25:9:25:9 | [SSA] b | main.rs:26:34:26:34 | b | | main.rs:25:9:25:9 | b | main.rs:25:9:25:9 | [SSA] b | | main.rs:25:13:25:13 | 2 | main.rs:25:9:25:9 | b | | main.rs:26:9:26:9 | [SSA] c | main.rs:27:10:27:10 | c | | main.rs:26:9:26:9 | c | main.rs:26:9:26:9 | [SSA] c | -| main.rs:26:13:26:36 | if ... { ... } else { ... } | main.rs:26:9:26:9 | c | -| main.rs:26:21:26:25 | { ... } | main.rs:26:13:26:36 | if ... { ... } else { ... } | +| main.rs:26:13:26:36 | ... else { ... } if {...} | main.rs:26:9:26:9 | c | +| main.rs:26:21:26:25 | { ... } | main.rs:26:13:26:36 | ... else { ... } if {...} | | main.rs:26:23:26:23 | a | main.rs:26:21:26:25 | { ... } | -| main.rs:26:32:26:36 | { ... } | main.rs:26:13:26:36 | if ... { ... } else { ... } | +| main.rs:26:32:26:36 | { ... } | main.rs:26:13:26:36 | ... else { ... } if {...} | | main.rs:26:34:26:34 | b | main.rs:26:32:26:36 | { ... } | | main.rs:30:21:30:21 | [SSA] m | main.rs:32:19:32:19 | m | | main.rs:30:21:30:21 | m | main.rs:30:21:30:21 | [SSA] m | | main.rs:31:9:31:9 | [SSA] a | main.rs:33:20:33:20 | a | | main.rs:31:9:31:9 | a | main.rs:31:9:31:9 | [SSA] a | -| main.rs:31:13:31:21 | source(...) | main.rs:31:9:31:9 | a | +| main.rs:31:13:31:21 | (...) ... | main.rs:31:9:31:9 | a | | main.rs:32:9:32:9 | [SSA] b | main.rs:36:10:36:10 | b | | main.rs:32:9:32:9 | b | main.rs:32:9:32:9 | [SSA] b | | main.rs:32:13:35:5 | match ... { ... } | main.rs:32:9:32:9 | b | @@ -33,14 +33,14 @@ | main.rs:34:17:34:17 | 0 | main.rs:32:13:35:5 | match ... { ... } | | main.rs:40:9:40:9 | [SSA] a | main.rs:43:10:43:10 | a | | main.rs:40:9:40:9 | a | main.rs:40:9:40:9 | [SSA] a | -| main.rs:40:13:42:5 | loop {...} | main.rs:40:9:40:9 | a | -| main.rs:41:9:41:15 | break ... | main.rs:40:13:42:5 | loop {...} | -| main.rs:41:15:41:15 | 1 | main.rs:41:9:41:15 | break ... | +| main.rs:40:13:42:5 | loop { ... } | main.rs:40:9:40:9 | a | +| main.rs:41:9:41:15 | 1 break | main.rs:40:13:42:5 | loop { ... } | +| main.rs:41:15:41:15 | 1 | main.rs:41:9:41:15 | 1 break | | main.rs:44:9:44:9 | [SSA] b | main.rs:47:10:47:10 | b | | main.rs:44:9:44:9 | b | main.rs:44:9:44:9 | [SSA] b | -| main.rs:44:13:46:5 | loop {...} | main.rs:44:9:44:9 | b | -| main.rs:45:9:45:23 | break ... | main.rs:44:13:46:5 | loop {...} | -| main.rs:45:15:45:23 | source(...) | main.rs:45:9:45:23 | break ... | +| main.rs:44:13:46:5 | loop { ... } | main.rs:44:9:44:9 | b | +| main.rs:45:9:45:23 | ... break | main.rs:44:13:46:5 | loop { ... } | +| main.rs:45:15:45:23 | (...) ... | main.rs:45:9:45:23 | ... break | | main.rs:51:9:51:13 | [SSA] i | main.rs:52:10:52:10 | i | | main.rs:51:9:51:13 | i | main.rs:51:9:51:13 | [SSA] i | | main.rs:51:17:51:17 | 1 | main.rs:51:9:51:13 | i | @@ -48,7 +48,7 @@ | main.rs:53:5:53:5 | i | main.rs:53:5:53:5 | [SSA] i | | main.rs:61:9:61:9 | [SSA] i | main.rs:62:11:62:11 | i | | main.rs:61:9:61:9 | i | main.rs:61:9:61:9 | [SSA] i | -| main.rs:61:13:61:31 | Box::new(...) | main.rs:61:9:61:9 | i | +| main.rs:61:13:61:31 | (...) ... | main.rs:61:9:61:9 | i | | main.rs:66:9:66:9 | [SSA] a | main.rs:67:10:67:10 | a | | main.rs:66:9:66:9 | a | main.rs:66:9:66:9 | [SSA] a | | main.rs:66:13:66:26 | TupleExpr | main.rs:66:9:66:9 | a | @@ -70,16 +70,16 @@ | main.rs:97:38:97:38 | p | main.rs:97:9:97:34 | Point {...} | | main.rs:104:9:104:10 | [SSA] s1 | main.rs:106:11:106:12 | s1 | | main.rs:104:9:104:10 | s1 | main.rs:104:9:104:10 | [SSA] s1 | -| main.rs:104:14:104:28 | Some(...) | main.rs:104:9:104:10 | s1 | +| main.rs:104:14:104:28 | (...) ... | main.rs:104:9:104:10 | s1 | | main.rs:105:9:105:10 | [SSA] s2 | main.rs:110:11:110:12 | s2 | | main.rs:105:9:105:10 | s2 | main.rs:105:9:105:10 | [SSA] s2 | -| main.rs:105:14:105:20 | Some(...) | main.rs:105:9:105:10 | s2 | +| main.rs:105:14:105:20 | (...) ... | main.rs:105:9:105:10 | s2 | | main.rs:107:14:107:14 | [SSA] n | main.rs:107:25:107:25 | n | | main.rs:107:14:107:14 | n | main.rs:107:14:107:14 | [SSA] n | -| main.rs:107:20:107:26 | sink(...) | main.rs:106:5:109:5 | match ... { ... } | -| main.rs:108:17:108:23 | sink(...) | main.rs:106:5:109:5 | match ... { ... } | +| main.rs:107:20:107:26 | (...) ... | main.rs:106:5:109:5 | match ... { ... } | +| main.rs:108:17:108:23 | (...) ... | main.rs:106:5:109:5 | match ... { ... } | | main.rs:110:5:113:5 | match ... { ... } | main.rs:103:27:114:1 | { ... } | | main.rs:111:14:111:14 | [SSA] n | main.rs:111:25:111:25 | n | | main.rs:111:14:111:14 | n | main.rs:111:14:111:14 | [SSA] n | -| main.rs:111:20:111:26 | sink(...) | main.rs:110:5:113:5 | match ... { ... } | -| main.rs:112:17:112:23 | sink(...) | main.rs:110:5:113:5 | match ... { ... } | +| main.rs:111:20:111:26 | (...) ... | main.rs:110:5:113:5 | match ... { ... } | +| main.rs:112:17:112:23 | (...) ... | main.rs:110:5:113:5 | match ... { ... } | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index b4c292a93d9a..315c3580f3d1 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -1,24 +1,24 @@ models edges -| main.rs:19:13:19:21 | source(...) : unit | main.rs:20:10:20:10 | s | provenance | | -| main.rs:24:13:24:21 | source(...) : unit | main.rs:27:10:27:10 | c | provenance | | -| main.rs:31:13:31:21 | source(...) : unit | main.rs:36:10:36:10 | b | provenance | | -| main.rs:45:15:45:23 | source(...) : unit | main.rs:47:10:47:10 | b | provenance | | +| main.rs:19:13:19:21 | (...) ... : unit | main.rs:20:10:20:10 | s | provenance | | +| main.rs:24:13:24:21 | (...) ... : unit | main.rs:27:10:27:10 | c | provenance | | +| main.rs:31:13:31:21 | (...) ... : unit | main.rs:36:10:36:10 | b | provenance | | +| main.rs:45:15:45:23 | (...) ... : unit | main.rs:47:10:47:10 | b | provenance | | nodes -| main.rs:15:10:15:18 | source(...) | semmle.label | source(...) | -| main.rs:19:13:19:21 | source(...) : unit | semmle.label | source(...) : unit | +| main.rs:15:10:15:18 | (...) ... | semmle.label | (...) ... | +| main.rs:19:13:19:21 | (...) ... : unit | semmle.label | (...) ... : unit | | main.rs:20:10:20:10 | s | semmle.label | s | -| main.rs:24:13:24:21 | source(...) : unit | semmle.label | source(...) : unit | +| main.rs:24:13:24:21 | (...) ... : unit | semmle.label | (...) ... : unit | | main.rs:27:10:27:10 | c | semmle.label | c | -| main.rs:31:13:31:21 | source(...) : unit | semmle.label | source(...) : unit | +| main.rs:31:13:31:21 | (...) ... : unit | semmle.label | (...) ... : unit | | main.rs:36:10:36:10 | b | semmle.label | b | -| main.rs:45:15:45:23 | source(...) : unit | semmle.label | source(...) : unit | +| main.rs:45:15:45:23 | (...) ... : unit | semmle.label | (...) ... : unit | | main.rs:47:10:47:10 | b | semmle.label | b | subpaths testFailures #select -| main.rs:15:10:15:18 | source(...) | main.rs:15:10:15:18 | source(...) | main.rs:15:10:15:18 | source(...) | $@ | main.rs:15:10:15:18 | source(...) | source(...) | -| main.rs:20:10:20:10 | s | main.rs:19:13:19:21 | source(...) : unit | main.rs:20:10:20:10 | s | $@ | main.rs:19:13:19:21 | source(...) : unit | source(...) : unit | -| main.rs:27:10:27:10 | c | main.rs:24:13:24:21 | source(...) : unit | main.rs:27:10:27:10 | c | $@ | main.rs:24:13:24:21 | source(...) : unit | source(...) : unit | -| main.rs:36:10:36:10 | b | main.rs:31:13:31:21 | source(...) : unit | main.rs:36:10:36:10 | b | $@ | main.rs:31:13:31:21 | source(...) : unit | source(...) : unit | -| main.rs:47:10:47:10 | b | main.rs:45:15:45:23 | source(...) : unit | main.rs:47:10:47:10 | b | $@ | main.rs:45:15:45:23 | source(...) : unit | source(...) : unit | +| main.rs:15:10:15:18 | (...) ... | main.rs:15:10:15:18 | (...) ... | main.rs:15:10:15:18 | (...) ... | $@ | main.rs:15:10:15:18 | (...) ... | (...) ... | +| main.rs:20:10:20:10 | s | main.rs:19:13:19:21 | (...) ... : unit | main.rs:20:10:20:10 | s | $@ | main.rs:19:13:19:21 | (...) ... : unit | (...) ... : unit | +| main.rs:27:10:27:10 | c | main.rs:24:13:24:21 | (...) ... : unit | main.rs:27:10:27:10 | c | $@ | main.rs:24:13:24:21 | (...) ... : unit | (...) ... : unit | +| main.rs:36:10:36:10 | b | main.rs:31:13:31:21 | (...) ... : unit | main.rs:36:10:36:10 | b | $@ | main.rs:31:13:31:21 | (...) ... : unit | (...) ... : unit | +| main.rs:47:10:47:10 | b | main.rs:45:15:45:23 | (...) ... : unit | main.rs:47:10:47:10 | b | $@ | main.rs:45:15:45:23 | (...) ... : unit | (...) ... : unit | diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index d8e9835b16a6..323e946e4f99 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1,6 +1,19 @@ from misc.codegen.lib.schemadefs import * from .ast import * +class LabelableExpr(Expr): + """ + The base class for expressions that can be labeled (`LoopExpr`, `ForExpr`, `WhileExpr` or `BlockExpr`). + """ + label: optional[Label] | child + +class LoopingExpr(LabelableExpr): + """ + The base class for expressions that loop (`LoopExpr`, `ForExpr` or `WhileExpr`). + """ + loop_body: optional["BlockExpr"] | child + + @annotate(Module) @rust.doc_test_signature(None) @@ -151,7 +164,7 @@ class _: """ -@annotate(BlockExpr) +@annotate(BlockExpr, replace_bases={Expr: LabelableExpr}) class _: """ A block expression. For example: @@ -167,9 +180,10 @@ class _: } ``` """ + label: drop -@annotate(LoopExpr) +@annotate(LoopExpr, replace_bases={Expr: LoopingExpr}) class _: """ A loop expression. For example: @@ -195,6 +209,8 @@ class _: }; ``` """ + label: drop + loop_body: drop class CallExprBase(Expr): @@ -990,7 +1006,7 @@ class _: """ -@annotate(ForExpr) +@annotate(ForExpr, replace_bases={Expr: LoopingExpr}) class _: """ A ForExpr. For example: @@ -998,6 +1014,8 @@ class _: todo!() ``` """ + label: drop + loop_body: drop @annotate(ForType) @@ -1744,7 +1762,7 @@ class _: """ -@annotate(WhileExpr) +@annotate(WhileExpr, replace_bases={Expr: LoopingExpr}) class _: """ A WhileExpr. For example: @@ -1752,6 +1770,8 @@ class _: todo!() ``` """ + label: drop + loop_body: drop @annotate(Function, add_bases=[Callable]) From fd45e11f4bd781ae403378930a0d407c96326f3b Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 20 Nov 2024 16:49:20 +0100 Subject: [PATCH 12/35] Rust: accept test changes --- .../generated/BlockExpr/BlockExpr.expected | 6 +- .../BlockExpr/BlockExpr_getLabel.expected | 2 +- .../BlockExpr/BlockExpr_getStmtList.expected | 2 +- .../generated/BoxPat/BoxPat.expected | 2 +- .../generated/BoxPat/BoxPat_getPat.expected | 2 +- .../generated/BreakExpr/BreakExpr.expected | 4 +- .../BreakExpr/BreakExpr_getExpr.expected | 4 +- .../BreakExpr/BreakExpr_getLifetime.expected | 4 +- .../CallExpr/CallExpr_getExpr.expected | 2 +- .../generated/CastExpr/CastExpr.expected | 2 +- .../CastExpr/CastExpr_getExpr.expected | 2 +- .../CastExpr/CastExpr_getTy.expected | 2 +- .../generated/Comment/Comment.expected | 14 +- .../ContinueExpr/ContinueExpr.expected | 2 +- .../ContinueExpr_getLifetime.expected | 2 +- .../generated/FieldExpr/FieldExpr.expected | 2 +- .../FieldExpr/FieldExpr_getExpr.expected | 2 +- .../FieldExpr/FieldExpr_getNameRef.expected | 2 +- .../generated/IfExpr/IfExpr.expected | 4 +- .../IfExpr/IfExpr_getCondition.expected | 4 +- .../generated/IfExpr/IfExpr_getElse.expected | 2 +- .../generated/IfExpr/IfExpr_getThen.expected | 4 +- .../generated/IndexExpr/IndexExpr.expected | 4 +- .../IndexExpr/IndexExpr_getBase.expected | 4 +- .../IndexExpr/IndexExpr_getIndex.expected | 4 +- .../generated/LetExpr/LetExpr.expected | 2 +- .../LetExpr/LetExpr_getExpr.expected | 2 +- .../generated/LetExpr/LetExpr_getPat.expected | 2 +- .../generated/LetStmt/LetStmt.expected | 12 +- .../LetStmt/LetStmt_getInitializer.expected | 8 +- .../LetStmt/LetStmt_getLetElse.expected | 2 +- .../generated/LetStmt/LetStmt_getPat.expected | 12 +- .../generated/LetStmt/LetStmt_getTy.expected | 4 +- .../generated/LoopExpr/LoopExpr.expected | 6 +- .../LoopExpr/LoopExpr_getLabel.expected | 2 +- .../LoopExpr/LoopExpr_getLoopBody.expected | 6 +- .../CONSISTENCY/DataFlowConsistency.expected | 2 +- .../generated/MatchArm/MatchArm.expected | 8 +- .../MatchArm/MatchArm_getExpr.expected | 8 +- .../MatchArm/MatchArm_getGuard.expected | 2 +- .../MatchArm/MatchArm_getPat.expected | 8 +- .../generated/MatchExpr/MatchExpr.expected | 4 +- .../MatchExpr/MatchExpr_getExpr.expected | 4 +- .../MatchExpr_getMatchArmList.expected | 4 +- .../generated/OrPat/OrPat.expected | 2 +- .../generated/OrPat/OrPat_getPat.expected | 4 +- .../generated/RangeExpr/RangeExpr.expected | 12 +- .../RangeExpr/RangeExpr_getEnd.expected | 8 +- .../RangeExpr_getOperatorName.expected | 12 +- .../RangeExpr/RangeExpr_getStart.expected | 6 +- .../RecordExprField/RecordExprField.expected | 4 +- .../RecordExprField_getExpr.expected | 4 +- .../RecordExprField_getNameRef.expected | 4 +- .../generated/RefExpr/RefExpr.expected | 8 +- .../RefExpr/RefExpr_getExpr.expected | 8 +- .../generated/RefPat/RefPat.expected | 2 +- .../generated/RefPat/RefPat_getPat.expected | 2 +- .../generated/ReturnExpr/ReturnExpr.expected | 2 +- .../ReturnExpr/ReturnExpr_getExpr.expected | 2 +- .../ql/test/extractor-tests/utf8/ast.expected | 2 +- .../controlflow-unstable/Cfg.expected | 44 +- .../dataflow/barrier/inline-flow.expected | 16 +- .../dataflow/global/viableCallable.expected | 42 +- .../dataflow/local/DataFlowStep.expected | 42 +- .../dataflow/local/inline-flow.expected | 28 +- .../test/library-tests/variables/Cfg.expected | 530 +++++++++--------- .../test/library-tests/variables/Ssa.expected | 8 +- .../variables/variables.expected | 470 +++++++++++++++- .../ExtractionConsistency.expected | 1 - .../CONSISTENCY/DataFlowConsistency.expected | 14 - 70 files changed, 955 insertions(+), 504 deletions(-) diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected index 3efd724a0133..b832addc7998 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected @@ -1,3 +1,3 @@ -| gen_block_expr.rs:3:28:12:1 | { ... } | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | no | hasStmtList: | yes | -| gen_block_expr.rs:5:5:7:5 | { ... } | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | no | hasStmtList: | yes | -| gen_block_expr.rs:8:5:11:5 | { ... } | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasLabel: | yes | hasStmtList: | yes | +| gen_block_expr.rs:3:28:12:1 | { ... } | hasLabel: | no | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasStmtList: | yes | +| gen_block_expr.rs:5:5:7:5 | { ... } | hasLabel: | no | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasStmtList: | yes | +| gen_block_expr.rs:8:5:11:5 | ''label: { ... } | hasLabel: | yes | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasStmtList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected index 354199e9a073..289a157b0dce 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected @@ -1 +1 @@ -| gen_block_expr.rs:8:5:11:5 | { ... } | gen_block_expr.rs:8:5:8:11 | ''label | +| gen_block_expr.rs:8:5:11:5 | ''label: { ... } | gen_block_expr.rs:8:5:8:11 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected index 226f57703929..582cff1a3cb0 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected @@ -1,3 +1,3 @@ | gen_block_expr.rs:3:28:12:1 | { ... } | gen_block_expr.rs:3:28:12:1 | StmtList | | gen_block_expr.rs:5:5:7:5 | { ... } | gen_block_expr.rs:5:5:7:5 | StmtList | -| gen_block_expr.rs:8:5:11:5 | { ... } | gen_block_expr.rs:8:13:11:5 | StmtList | +| gen_block_expr.rs:8:5:11:5 | ''label: { ... } | gen_block_expr.rs:8:13:11:5 | StmtList | diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected index 20bc2bf7cc1b..810704f963ed 100644 --- a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected @@ -1,2 +1,2 @@ | gen_box_pat.rs:6:9:6:27 | box ... | hasPat: | yes | -| gen_box_pat.rs:7:9:7:24 | box ... | hasPat: | yes | +| gen_box_pat.rs:7:9:7:24 | box Option::None | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected index d98d750d3a8e..f30ce3248027 100644 --- a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected @@ -1,2 +1,2 @@ | gen_box_pat.rs:6:9:6:27 | box ... | gen_box_pat.rs:6:13:6:27 | TupleStructPat | -| gen_box_pat.rs:7:9:7:24 | box ... | gen_box_pat.rs:7:13:7:24 | Option::None | +| gen_box_pat.rs:7:9:7:24 | box Option::None | gen_box_pat.rs:7:13:7:24 | Option::None | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected index 2ffdacb68903..30c734fd682d 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected @@ -1,3 +1,3 @@ | gen_break_expr.rs:7:13:7:17 | break | getNumberOfAttrs: | 0 | hasExpr: | no | hasLifetime: | no | -| gen_break_expr.rs:12:13:12:27 | break ''label ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | -| gen_break_expr.rs:17:13:17:27 | break ''label ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | +| gen_break_expr.rs:12:13:12:27 | break ''label 42 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | +| gen_break_expr.rs:17:13:17:27 | break ''label 42 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected index 864069115dfe..20c5295354af 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected @@ -1,2 +1,2 @@ -| gen_break_expr.rs:12:13:12:27 | break ''label ... | gen_break_expr.rs:12:26:12:27 | 42 | -| gen_break_expr.rs:17:13:17:27 | break ''label ... | gen_break_expr.rs:17:26:17:27 | 42 | +| gen_break_expr.rs:12:13:12:27 | break ''label 42 | gen_break_expr.rs:12:26:12:27 | 42 | +| gen_break_expr.rs:17:13:17:27 | break ''label 42 | gen_break_expr.rs:17:26:17:27 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected index adbf9b15ff23..2e1a88017950 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected @@ -1,2 +1,2 @@ -| gen_break_expr.rs:12:13:12:27 | break ''label ... | gen_break_expr.rs:12:19:12:24 | ''label | -| gen_break_expr.rs:17:13:17:27 | break ''label ... | gen_break_expr.rs:17:19:17:24 | ''label | +| gen_break_expr.rs:12:13:12:27 | break ''label 42 | gen_break_expr.rs:12:19:12:24 | ''label | +| gen_break_expr.rs:17:13:17:27 | break ''label 42 | gen_break_expr.rs:17:19:17:24 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected index 68113cf5725b..ecaaf15cebbc 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected @@ -1,4 +1,4 @@ | gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:5:5:7 | foo | | gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:5:6:19 | foo::<...> | -| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:5:7:10 | ...[...] | +| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:5:7:10 | foo[0] | | gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:5:8:7 | foo | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected index 157e06c3f2b2..c85e41866313 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | ... as u64 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasTy: | yes | +| gen_cast_expr.rs:5:5:5:16 | value as u64 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasTy: | yes | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected index fda7db77d90d..01a710bfb533 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | ... as u64 | gen_cast_expr.rs:5:5:5:9 | value | +| gen_cast_expr.rs:5:5:5:16 | value as u64 | gen_cast_expr.rs:5:5:5:9 | value | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected index 90fa37e4f97a..87c07babb021 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | ... as u64 | gen_cast_expr.rs:5:14:5:16 | u64 | +| gen_cast_expr.rs:5:5:5:16 | value as u64 | gen_cast_expr.rs:5:14:5:16 | u64 | diff --git a/rust/ql/test/extractor-tests/generated/Comment/Comment.expected b/rust/ql/test/extractor-tests/generated/Comment/Comment.expected index 21861bb40bf9..24e95f123d8c 100644 --- a/rust/ql/test/extractor-tests/generated/Comment/Comment.expected +++ b/rust/ql/test/extractor-tests/generated/Comment/Comment.expected @@ -1,7 +1,7 @@ -| comments.rs:1:1:3:2 | Comment | getParent: | comments.rs:1:1:9:1 | foo | getText: | /** \n* A doc comment\n*/ | -| comments.rs:6:17:6:34 | Comment | getParent: | comments.rs:6:17:8:16 | nested | getText: | // print some text | -| comments.rs:7:3:7:31 | Comment | getParent: | comments.rs:6:17:8:16 | nested | getText: | /// This is a nested function | -| gen_comment.rs:1:1:1:36 | Comment | getParent: | gen_comment.rs:1:1:7:2 | SourceFile | getText: | // generated by codegen, do not edit | -| gen_comment.rs:4:5:4:30 | Comment | getParent: | gen_comment.rs:3:25:7:1 | StmtList | getText: | // A comment. For example: | -| gen_comment.rs:5:5:5:24 | Comment | getParent: | gen_comment.rs:3:25:7:1 | StmtList | getText: | // this is a comment | -| gen_comment.rs:6:5:6:29 | Comment | getParent: | gen_comment.rs:3:25:7:1 | StmtList | getText: | /// This is a doc comment | +| comments.rs:1:1:3:2 | /**...*/ | getParent: | comments.rs:1:1:9:1 | fn foo | getText: | /** \n* A doc comment\n*/ | +| comments.rs:6:17:6:34 | //... | getParent: | comments.rs:6:17:8:16 | fn nested | getText: | // print some text | +| comments.rs:7:3:7:31 | ///... | getParent: | comments.rs:6:17:8:16 | fn nested | getText: | /// This is a nested function | +| gen_comment.rs:1:1:1:36 | //... | getParent: | gen_comment.rs:1:1:7:2 | SourceFile | getText: | // generated by codegen, do not edit | +| gen_comment.rs:4:5:4:30 | //... | getParent: | gen_comment.rs:3:25:7:1 | StmtList | getText: | // A comment. For example: | +| gen_comment.rs:5:5:5:24 | //... | getParent: | gen_comment.rs:3:25:7:1 | StmtList | getText: | // this is a comment | +| gen_comment.rs:6:5:6:29 | ///... | getParent: | gen_comment.rs:3:25:7:1 | StmtList | getText: | /// This is a doc comment | diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected index a09556b9a3ff..f2c4e28c337e 100644 --- a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected @@ -1,2 +1,2 @@ | gen_continue_expr.rs:7:13:7:20 | continue | getNumberOfAttrs: | 0 | hasLifetime: | no | -| gen_continue_expr.rs:12:13:12:27 | continue 'label | getNumberOfAttrs: | 0 | hasLifetime: | yes | +| gen_continue_expr.rs:12:13:12:27 | continue ''label | getNumberOfAttrs: | 0 | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected index d81d276ce0ae..f4fa30ade3ce 100644 --- a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected @@ -1 +1 @@ -| gen_continue_expr.rs:12:13:12:27 | continue 'label | gen_continue_expr.rs:12:22:12:27 | ''label | +| gen_continue_expr.rs:12:13:12:27 | continue ''label | gen_continue_expr.rs:12:22:12:27 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected index 912f65f43e3a..c25a0633e402 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected @@ -1 +1 @@ -| gen_field_expr.rs:5:5:5:9 | ... .foo | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | +| gen_field_expr.rs:5:5:5:9 | x.foo | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected index ac80547d5ca2..7d21f7f7af81 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected @@ -1 +1 @@ -| gen_field_expr.rs:5:5:5:9 | ... .foo | gen_field_expr.rs:5:5:5:5 | x | +| gen_field_expr.rs:5:5:5:9 | x.foo | gen_field_expr.rs:5:5:5:5 | x | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected index 743f58b57410..0722ca1aaf28 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected @@ -1 +1 @@ -| gen_field_expr.rs:5:5:5:9 | ... .foo | gen_field_expr.rs:5:7:5:9 | foo | +| gen_field_expr.rs:5:5:5:9 | x.foo | gen_field_expr.rs:5:7:5:9 | foo | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected index 6c40caaae5c9..d9a33ad74f79 100644 --- a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected @@ -1,2 +1,2 @@ -| gen_if_expr.rs:5:5:7:5 | if ... { ... } | getNumberOfAttrs: | 0 | hasCondition: | yes | hasElse: | no | hasThen: | yes | -| gen_if_expr.rs:8:13:12:5 | if ... { ... } else { ... } | getNumberOfAttrs: | 0 | hasCondition: | yes | hasElse: | yes | hasThen: | yes | +| gen_if_expr.rs:5:5:7:5 | if ... {...} | getNumberOfAttrs: | 0 | hasCondition: | yes | hasElse: | no | hasThen: | yes | +| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | getNumberOfAttrs: | 0 | hasCondition: | yes | hasElse: | yes | hasThen: | yes | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected index 9dc91afd773e..4990a47bc96e 100644 --- a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected @@ -1,2 +1,2 @@ -| gen_if_expr.rs:5:5:7:5 | if ... { ... } | gen_if_expr.rs:5:8:5:14 | ... == ... | -| gen_if_expr.rs:8:13:12:5 | if ... { ... } else { ... } | gen_if_expr.rs:8:16:8:20 | ... > ... | +| gen_if_expr.rs:5:5:7:5 | if ... {...} | gen_if_expr.rs:5:8:5:14 | ... == ... | +| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | gen_if_expr.rs:8:16:8:20 | ... > ... | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected index 4f8d79008e6a..a03626f5e5dd 100644 --- a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected @@ -1 +1 @@ -| gen_if_expr.rs:8:13:12:5 | if ... { ... } else { ... } | gen_if_expr.rs:10:12:12:5 | { ... } | +| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | gen_if_expr.rs:10:12:12:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected index 961cb118409c..6080b004f38f 100644 --- a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected @@ -1,2 +1,2 @@ -| gen_if_expr.rs:5:5:7:5 | if ... { ... } | gen_if_expr.rs:5:16:7:5 | { ... } | -| gen_if_expr.rs:8:13:12:5 | if ... { ... } else { ... } | gen_if_expr.rs:8:22:10:5 | { ... } | +| gen_if_expr.rs:5:5:7:5 | if ... {...} | gen_if_expr.rs:5:16:7:5 | { ... } | +| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | gen_if_expr.rs:8:22:10:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected index e737827e89f6..614afc3040f4 100644 --- a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected @@ -1,2 +1,2 @@ -| gen_index_expr.rs:5:5:5:12 | ...[...] | getNumberOfAttrs: | 0 | hasBase: | yes | hasIndex: | yes | -| gen_index_expr.rs:6:5:6:12 | ...[...] | getNumberOfAttrs: | 0 | hasBase: | yes | hasIndex: | yes | +| gen_index_expr.rs:5:5:5:12 | list[42] | getNumberOfAttrs: | 0 | hasBase: | yes | hasIndex: | yes | +| gen_index_expr.rs:6:5:6:12 | list[42] | getNumberOfAttrs: | 0 | hasBase: | yes | hasIndex: | yes | diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected index fc1e9720fabb..13fb9a2c6a6d 100644 --- a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected @@ -1,2 +1,2 @@ -| gen_index_expr.rs:5:5:5:12 | ...[...] | gen_index_expr.rs:5:5:5:8 | list | -| gen_index_expr.rs:6:5:6:12 | ...[...] | gen_index_expr.rs:6:5:6:8 | list | +| gen_index_expr.rs:5:5:5:12 | list[42] | gen_index_expr.rs:5:5:5:8 | list | +| gen_index_expr.rs:6:5:6:12 | list[42] | gen_index_expr.rs:6:5:6:8 | list | diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected index 21c6228d5b95..dfca82040881 100644 --- a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected @@ -1,2 +1,2 @@ -| gen_index_expr.rs:5:5:5:12 | ...[...] | gen_index_expr.rs:5:10:5:11 | 42 | -| gen_index_expr.rs:6:5:6:12 | ...[...] | gen_index_expr.rs:6:10:6:11 | 42 | +| gen_index_expr.rs:5:5:5:12 | list[42] | gen_index_expr.rs:5:10:5:11 | 42 | +| gen_index_expr.rs:6:5:6:12 | list[42] | gen_index_expr.rs:6:10:6:11 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected index 6c6343e24d3c..7ff5ad393e19 100644 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected @@ -1 +1 @@ -| gen_let_expr.rs:5:8:5:31 | let TupleStructPat = ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasPat: | yes | +| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | getNumberOfAttrs: | 0 | hasExpr: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected index 9293ae80e1d0..0080ab4ee6e5 100644 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected @@ -1 +1 @@ -| gen_let_expr.rs:5:8:5:31 | let TupleStructPat = ... | gen_let_expr.rs:5:22:5:31 | maybe_some | +| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:22:5:31 | maybe_some | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected index 527a9fcc3a9d..7c31e314128d 100644 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected @@ -1 +1 @@ -| gen_let_expr.rs:5:8:5:31 | let TupleStructPat = ... | gen_let_expr.rs:5:12:5:18 | TupleStructPat | +| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:12:5:18 | TupleStructPat | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected index e433b420d4e5..87c62a65a3a5 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected @@ -1,6 +1,6 @@ -| gen_let_stmt.rs:5:5:5:15 | let x = ... | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | no | -| gen_let_stmt.rs:6:5:6:20 | let x = ... | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | yes | -| gen_let_stmt.rs:7:5:7:15 | let x | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTy: | yes | -| gen_let_stmt.rs:8:5:8:10 | let x | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTy: | no | -| gen_let_stmt.rs:9:5:9:24 | let TuplePat = ... | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | no | -| gen_let_stmt.rs:10:5:12:6 | let TupleStructPat = ... else { ... } | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | yes | hasPat: | yes | hasTy: | no | +| gen_let_stmt.rs:5:5:5:15 | let ... = 42 | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | no | +| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | yes | +| gen_let_stmt.rs:7:5:7:15 | let ... | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTy: | yes | +| gen_let_stmt.rs:8:5:8:10 | let ... | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTy: | no | +| gen_let_stmt.rs:9:5:9:24 | let ... = ... | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | no | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else { ... } | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | yes | hasPat: | yes | hasTy: | no | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected index a7323b834b3d..a88557f9d70f 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected @@ -1,4 +1,4 @@ -| gen_let_stmt.rs:5:5:5:15 | let x = ... | gen_let_stmt.rs:5:13:5:14 | 42 | -| gen_let_stmt.rs:6:5:6:20 | let x = ... | gen_let_stmt.rs:6:18:6:19 | 42 | -| gen_let_stmt.rs:9:5:9:24 | let TuplePat = ... | gen_let_stmt.rs:9:18:9:23 | TupleExpr | -| gen_let_stmt.rs:10:5:12:6 | let TupleStructPat = ... else { ... } | gen_let_stmt.rs:10:19:10:38 | std::env::var(...) | +| gen_let_stmt.rs:5:5:5:15 | let ... = 42 | gen_let_stmt.rs:5:13:5:14 | 42 | +| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:18:6:19 | 42 | +| gen_let_stmt.rs:9:5:9:24 | let ... = ... | gen_let_stmt.rs:9:18:9:23 | TupleExpr | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else { ... } | gen_let_stmt.rs:10:19:10:38 | std::env::var(...) | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected index a0531cdba9e3..84efa0be3b26 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected @@ -1 +1 @@ -| gen_let_stmt.rs:10:5:12:6 | let TupleStructPat = ... else { ... } | gen_let_stmt.rs:10:40:12:5 | else { ... } | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else { ... } | gen_let_stmt.rs:10:40:12:5 | else { ... } | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected index 09a185a51bd3..e2aa2b9e9575 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected @@ -1,6 +1,6 @@ -| gen_let_stmt.rs:5:5:5:15 | let x = ... | gen_let_stmt.rs:5:9:5:9 | x | -| gen_let_stmt.rs:6:5:6:20 | let x = ... | gen_let_stmt.rs:6:9:6:9 | x | -| gen_let_stmt.rs:7:5:7:15 | let x | gen_let_stmt.rs:7:9:7:9 | x | -| gen_let_stmt.rs:8:5:8:10 | let x | gen_let_stmt.rs:8:9:8:9 | x | -| gen_let_stmt.rs:9:5:9:24 | let TuplePat = ... | gen_let_stmt.rs:9:9:9:14 | TuplePat | -| gen_let_stmt.rs:10:5:12:6 | let TupleStructPat = ... else { ... } | gen_let_stmt.rs:10:9:10:15 | TupleStructPat | +| gen_let_stmt.rs:5:5:5:15 | let ... = 42 | gen_let_stmt.rs:5:9:5:9 | x | +| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:9:6:9 | x | +| gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:9:7:9 | x | +| gen_let_stmt.rs:8:5:8:10 | let ... | gen_let_stmt.rs:8:9:8:9 | x | +| gen_let_stmt.rs:9:5:9:24 | let ... = ... | gen_let_stmt.rs:9:9:9:14 | TuplePat | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else { ... } | gen_let_stmt.rs:10:9:10:15 | TupleStructPat | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected index f00814567d34..489647f4793a 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected @@ -1,2 +1,2 @@ -| gen_let_stmt.rs:6:5:6:20 | let x = ... | gen_let_stmt.rs:6:12:6:14 | i32 | -| gen_let_stmt.rs:7:5:7:15 | let x | gen_let_stmt.rs:7:12:7:14 | i32 | +| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:12:6:14 | i32 | +| gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:12:7:14 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected index 9cb3238c825b..f7129b163850 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected @@ -1,3 +1,3 @@ -| gen_loop_expr.rs:5:5:7:5 | loop {...} | getNumberOfAttrs: | 0 | hasLabel: | no | hasLoopBody: | yes | -| gen_loop_expr.rs:8:5:11:5 | loop {...} | getNumberOfAttrs: | 0 | hasLabel: | yes | hasLoopBody: | yes | -| gen_loop_expr.rs:13:5:19:5 | loop {...} | getNumberOfAttrs: | 0 | hasLabel: | no | hasLoopBody: | yes | +| gen_loop_expr.rs:5:5:7:5 | loop { ... } | hasLabel: | no | hasLoopBody: | yes | getNumberOfAttrs: | 0 | +| gen_loop_expr.rs:8:5:11:5 | ''label: loop { ... } | hasLabel: | yes | hasLoopBody: | yes | getNumberOfAttrs: | 0 | +| gen_loop_expr.rs:13:5:19:5 | loop { ... } | hasLabel: | no | hasLoopBody: | yes | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected index 6a71a241413b..167f84096fee 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected @@ -1 +1 @@ -| gen_loop_expr.rs:8:5:11:5 | loop {...} | gen_loop_expr.rs:8:5:8:11 | ''label | +| gen_loop_expr.rs:8:5:11:5 | ''label: loop { ... } | gen_loop_expr.rs:8:5:8:11 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected index 18a1091d89ac..952955da19dd 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected @@ -1,3 +1,3 @@ -| gen_loop_expr.rs:5:5:7:5 | loop {...} | gen_loop_expr.rs:5:10:7:5 | { ... } | -| gen_loop_expr.rs:8:5:11:5 | loop {...} | gen_loop_expr.rs:8:18:11:5 | { ... } | -| gen_loop_expr.rs:13:5:19:5 | loop {...} | gen_loop_expr.rs:13:10:19:5 | { ... } | +| gen_loop_expr.rs:5:5:7:5 | loop { ... } | gen_loop_expr.rs:5:10:7:5 | { ... } | +| gen_loop_expr.rs:8:5:11:5 | ''label: loop { ... } | gen_loop_expr.rs:8:18:11:5 | { ... } | +| gen_loop_expr.rs:13:5:19:5 | loop { ... } | gen_loop_expr.rs:13:10:19:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/DataFlowConsistency.expected b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/DataFlowConsistency.expected index b7a9f37a672e..6f8a83cb913b 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/DataFlowConsistency.expected +++ b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/DataFlowConsistency.expected @@ -1,9 +1,9 @@ uniqueNodeLocation | file://:0:0:0:0 | ... .parent(...) | Node should have one location but has 0. | | file://:0:0:0:0 | ... .unwrap(...) | Node should have one location but has 0. | +| file://:0:0:0:0 | ...: ... | Node should have one location but has 0. | | file://:0:0:0:0 | path | Node should have one location but has 0. | | file://:0:0:0:0 | path | Node should have one location but has 0. | -| file://:0:0:0:0 | path: RefType | Node should have one location but has 0. | | file://:0:0:0:0 | { ... } | Node should have one location but has 0. | missingLocation | Nodes without location: 6 | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected index 34033eeee089..d21faa7ff19b 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected @@ -1,4 +1,4 @@ -| gen_match_arm.rs:6:9:6:29 | TupleStructPat => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | -| gen_match_arm.rs:7:9:7:26 | Option::None => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | -| gen_match_arm.rs:10:9:10:35 | TupleStructPatif ... => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | yes | hasPat: | yes | -| gen_match_arm.rs:11:9:11:15 | _ => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | +| gen_match_arm.rs:6:9:6:29 | ... => y | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | +| gen_match_arm.rs:7:9:7:26 | Option::None => 0 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | +| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | yes | hasPat: | yes | +| gen_match_arm.rs:11:9:11:15 | _ => 0 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected index 493ea8d9bb03..ecf8098fd789 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected @@ -1,4 +1,4 @@ -| gen_match_arm.rs:6:9:6:29 | MatchArm | gen_match_arm.rs:6:28:6:28 | y | -| gen_match_arm.rs:7:9:7:26 | MatchArm | gen_match_arm.rs:7:25:7:25 | 0 | -| gen_match_arm.rs:10:9:10:35 | MatchArm | gen_match_arm.rs:10:30:10:34 | ... / ... | -| gen_match_arm.rs:11:9:11:15 | MatchArm | gen_match_arm.rs:11:14:11:14 | 0 | +| gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:28:6:28 | y | +| gen_match_arm.rs:7:9:7:26 | Option::None => 0 | gen_match_arm.rs:7:25:7:25 | 0 | +| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:30:10:34 | ... / ... | +| gen_match_arm.rs:11:9:11:15 | _ => 0 | gen_match_arm.rs:11:14:11:14 | 0 | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected index ad59397e84a3..002917455476 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected @@ -1 +1 @@ -| gen_match_arm.rs:10:9:10:35 | TupleStructPatif ... => ... | gen_match_arm.rs:10:17:10:25 | MatchGuard | +| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:17:10:25 | MatchGuard | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected index 2d8cf38991d9..010c7b50b066 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected @@ -1,4 +1,4 @@ -| gen_match_arm.rs:6:9:6:29 | TupleStructPat => ... | gen_match_arm.rs:6:9:6:23 | TupleStructPat | -| gen_match_arm.rs:7:9:7:26 | Option::None => ... | gen_match_arm.rs:7:9:7:20 | Option::None | -| gen_match_arm.rs:10:9:10:35 | TupleStructPatif ... => ... | gen_match_arm.rs:10:9:10:15 | TupleStructPat | -| gen_match_arm.rs:11:9:11:15 | _ => ... | gen_match_arm.rs:11:9:11:9 | _ | +| gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:9:6:23 | TupleStructPat | +| gen_match_arm.rs:7:9:7:26 | Option::None => 0 | gen_match_arm.rs:7:9:7:20 | Option::None | +| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:9:10:15 | TupleStructPat | +| gen_match_arm.rs:11:9:11:15 | _ => 0 | gen_match_arm.rs:11:9:11:9 | _ | diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected index ae8f3edb6658..b98c3de696b6 100644 --- a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected @@ -1,2 +1,2 @@ -| gen_match_expr.rs:5:5:8:5 | match ... { ... } | getNumberOfAttrs: | 0 | hasExpr: | yes | hasMatchArmList: | yes | -| gen_match_expr.rs:9:5:12:5 | match ... { ... } | getNumberOfAttrs: | 0 | hasExpr: | yes | hasMatchArmList: | yes | +| gen_match_expr.rs:5:5:8:5 | match x { ... } | getNumberOfAttrs: | 0 | hasExpr: | yes | hasMatchArmList: | yes | +| gen_match_expr.rs:9:5:12:5 | match x { ... } | getNumberOfAttrs: | 0 | hasExpr: | yes | hasMatchArmList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected index ac1ec296029c..427af7c6ed0c 100644 --- a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected @@ -1,2 +1,2 @@ -| gen_match_expr.rs:5:5:8:5 | match ... { ... } | gen_match_expr.rs:5:11:5:11 | x | -| gen_match_expr.rs:9:5:12:5 | match ... { ... } | gen_match_expr.rs:9:11:9:11 | x | +| gen_match_expr.rs:5:5:8:5 | match x { ... } | gen_match_expr.rs:5:11:5:11 | x | +| gen_match_expr.rs:9:5:12:5 | match x { ... } | gen_match_expr.rs:9:11:9:11 | x | diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected index 468fe9d14cf9..f5e25db5b39d 100644 --- a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected @@ -1,2 +1,2 @@ -| gen_match_expr.rs:5:5:8:5 | match ... { ... } | gen_match_expr.rs:5:13:8:5 | MatchArmList | -| gen_match_expr.rs:9:5:12:5 | match ... { ... } | gen_match_expr.rs:9:13:12:5 | MatchArmList | +| gen_match_expr.rs:5:5:8:5 | match x { ... } | gen_match_expr.rs:5:13:8:5 | MatchArmList | +| gen_match_expr.rs:9:5:12:5 | match x { ... } | gen_match_expr.rs:9:13:12:5 | MatchArmList | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected index 3574d6c18285..f4268aea84f0 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected @@ -1 +1 @@ -| gen_or_pat.rs:6:9:6:38 | ... \| ... | getNumberOfPats: | 2 | +| gen_or_pat.rs:6:9:6:38 | ...Option::None | getNumberOfPats: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected index ca76590a6265..e04c09875b53 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_or_pat.rs:6:9:6:38 | ... \| ... | 0 | gen_or_pat.rs:6:9:6:23 | TupleStructPat | -| gen_or_pat.rs:6:9:6:38 | ... \| ... | 1 | gen_or_pat.rs:6:27:6:38 | Option::None | +| gen_or_pat.rs:6:9:6:38 | ...Option::None | 0 | gen_or_pat.rs:6:9:6:23 | TupleStructPat | +| gen_or_pat.rs:6:9:6:38 | ...Option::None | 1 | gen_or_pat.rs:6:27:6:38 | Option::None | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected index de7e26d5197f..7d8aeff6dfa9 100644 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected @@ -1,6 +1,6 @@ -| gen_range_expr.rs:5:13:5:18 | ... ..= ... | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | -| gen_range_expr.rs:6:13:6:17 | ... .. ... | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | -| gen_range_expr.rs:7:13:7:16 | ... .. ... | getNumberOfAttrs: | 0 | hasEnd: | no | hasOperatorName: | yes | hasStart: | yes | -| gen_range_expr.rs:8:13:8:16 | ... .. ... | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | -| gen_range_expr.rs:9:13:9:17 | ... ..= ... | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | -| gen_range_expr.rs:10:13:10:14 | ... .. ... | getNumberOfAttrs: | 0 | hasEnd: | no | hasOperatorName: | yes | hasStart: | no | +| gen_range_expr.rs:5:13:5:18 | 1..=10 | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | +| gen_range_expr.rs:6:13:6:17 | 1..10 | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | +| gen_range_expr.rs:7:13:7:16 | 10.. | getNumberOfAttrs: | 0 | hasEnd: | no | hasOperatorName: | yes | hasStart: | yes | +| gen_range_expr.rs:8:13:8:16 | ..10 | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | +| gen_range_expr.rs:9:13:9:17 | ..=10 | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | +| gen_range_expr.rs:10:13:10:14 | .. | getNumberOfAttrs: | 0 | hasEnd: | no | hasOperatorName: | yes | hasStart: | no | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected index 85582cfd97f4..46f5dba778c5 100644 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected @@ -1,4 +1,4 @@ -| gen_range_expr.rs:5:13:5:18 | ... ..= ... | gen_range_expr.rs:5:17:5:18 | 10 | -| gen_range_expr.rs:6:13:6:17 | ... .. ... | gen_range_expr.rs:6:16:6:17 | 10 | -| gen_range_expr.rs:8:13:8:16 | ... .. ... | gen_range_expr.rs:8:15:8:16 | 10 | -| gen_range_expr.rs:9:13:9:17 | ... ..= ... | gen_range_expr.rs:9:16:9:17 | 10 | +| gen_range_expr.rs:5:13:5:18 | 1..=10 | gen_range_expr.rs:5:17:5:18 | 10 | +| gen_range_expr.rs:6:13:6:17 | 1..10 | gen_range_expr.rs:6:16:6:17 | 10 | +| gen_range_expr.rs:8:13:8:16 | ..10 | gen_range_expr.rs:8:15:8:16 | 10 | +| gen_range_expr.rs:9:13:9:17 | ..=10 | gen_range_expr.rs:9:16:9:17 | 10 | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected index ff6f77424c77..ee9172ac1ced 100644 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected @@ -1,6 +1,6 @@ -| gen_range_expr.rs:5:13:5:18 | ... ..= ... | ..= | -| gen_range_expr.rs:6:13:6:17 | ... .. ... | .. | -| gen_range_expr.rs:7:13:7:16 | ... .. ... | .. | -| gen_range_expr.rs:8:13:8:16 | ... .. ... | .. | -| gen_range_expr.rs:9:13:9:17 | ... ..= ... | ..= | -| gen_range_expr.rs:10:13:10:14 | ... .. ... | .. | +| gen_range_expr.rs:5:13:5:18 | 1..=10 | ..= | +| gen_range_expr.rs:6:13:6:17 | 1..10 | .. | +| gen_range_expr.rs:7:13:7:16 | 10.. | .. | +| gen_range_expr.rs:8:13:8:16 | ..10 | .. | +| gen_range_expr.rs:9:13:9:17 | ..=10 | ..= | +| gen_range_expr.rs:10:13:10:14 | .. | .. | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected index 0a012e5ecd55..7f58ee5299fb 100644 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected @@ -1,3 +1,3 @@ -| gen_range_expr.rs:5:13:5:18 | ... ..= ... | gen_range_expr.rs:5:13:5:13 | 1 | -| gen_range_expr.rs:6:13:6:17 | ... .. ... | gen_range_expr.rs:6:13:6:13 | 1 | -| gen_range_expr.rs:7:13:7:16 | ... .. ... | gen_range_expr.rs:7:13:7:14 | 10 | +| gen_range_expr.rs:5:13:5:18 | 1..=10 | gen_range_expr.rs:5:13:5:13 | 1 | +| gen_range_expr.rs:6:13:6:17 | 1..10 | gen_range_expr.rs:6:13:6:13 | 1 | +| gen_range_expr.rs:7:13:7:16 | 10.. | gen_range_expr.rs:7:13:7:14 | 10 | diff --git a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected index 7f3dd059b0a6..46e7ce811bb7 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected +++ b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected @@ -1,2 +1,2 @@ -| gen_record_expr_field.rs:5:11:5:14 | a: ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | -| gen_record_expr_field.rs:5:17:5:20 | b: ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | +| gen_record_expr_field.rs:5:11:5:14 | a: 1 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | +| gen_record_expr_field.rs:5:17:5:20 | b: 2 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected index 2af437f842b8..cfb892424494 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected @@ -1,2 +1,2 @@ -| gen_record_expr_field.rs:5:11:5:14 | a: ... | gen_record_expr_field.rs:5:14:5:14 | 1 | -| gen_record_expr_field.rs:5:17:5:20 | b: ... | gen_record_expr_field.rs:5:20:5:20 | 2 | +| gen_record_expr_field.rs:5:11:5:14 | a: 1 | gen_record_expr_field.rs:5:14:5:14 | 1 | +| gen_record_expr_field.rs:5:17:5:20 | b: 2 | gen_record_expr_field.rs:5:20:5:20 | 2 | diff --git a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected index d0fcb3d0d442..d0a3f82cd9d2 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected +++ b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected @@ -1,2 +1,2 @@ -| gen_record_expr_field.rs:5:11:5:14 | a: ... | gen_record_expr_field.rs:5:11:5:11 | a | -| gen_record_expr_field.rs:5:17:5:20 | b: ... | gen_record_expr_field.rs:5:17:5:17 | b | +| gen_record_expr_field.rs:5:11:5:14 | a: 1 | gen_record_expr_field.rs:5:11:5:11 | a | +| gen_record_expr_field.rs:5:17:5:20 | b: 2 | gen_record_expr_field.rs:5:17:5:17 | b | diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected index df32a2465db6..412f82142060 100644 --- a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected @@ -1,4 +1,4 @@ -| gen_ref_expr.rs:5:25:5:28 | &... | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | no | isRaw: | no | -| gen_ref_expr.rs:6:23:6:30 | &mut ... | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | no | -| gen_ref_expr.rs:7:35:7:48 | &raw const ... | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | yes | isMut: | no | isRaw: | yes | -| gen_ref_expr.rs:8:33:8:44 | &raw mut ... | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | yes | +| gen_ref_expr.rs:5:25:5:28 | &foo | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | no | isRaw: | no | +| gen_ref_expr.rs:6:23:6:30 | &mut foo | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | no | +| gen_ref_expr.rs:7:35:7:48 | &raw const foo | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | yes | isMut: | no | isRaw: | yes | +| gen_ref_expr.rs:8:33:8:44 | &raw mut foo | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected index b350b30b6a1e..7709668f6fd8 100644 --- a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected @@ -1,4 +1,4 @@ -| gen_ref_expr.rs:5:25:5:28 | &... | gen_ref_expr.rs:5:26:5:28 | foo | -| gen_ref_expr.rs:6:23:6:30 | &mut ... | gen_ref_expr.rs:6:28:6:30 | foo | -| gen_ref_expr.rs:7:35:7:48 | &raw const ... | gen_ref_expr.rs:7:46:7:48 | foo | -| gen_ref_expr.rs:8:33:8:44 | &raw mut ... | gen_ref_expr.rs:8:42:8:44 | foo | +| gen_ref_expr.rs:5:25:5:28 | &foo | gen_ref_expr.rs:5:26:5:28 | foo | +| gen_ref_expr.rs:6:23:6:30 | &mut foo | gen_ref_expr.rs:6:28:6:30 | foo | +| gen_ref_expr.rs:7:35:7:48 | &raw const foo | gen_ref_expr.rs:7:46:7:48 | foo | +| gen_ref_expr.rs:8:33:8:44 | &raw mut foo | gen_ref_expr.rs:8:42:8:44 | foo | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected index b851902ff567..3e52c12807e1 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected @@ -1,2 +1,2 @@ | gen_ref_pat.rs:6:9:6:28 | &mut ... | isMut: | yes | hasPat: | yes | -| gen_ref_pat.rs:7:9:7:21 | &... | isMut: | no | hasPat: | yes | +| gen_ref_pat.rs:7:9:7:21 | &Option::None | isMut: | no | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected index 6078837ceeaf..96b017a42ea9 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected @@ -1,2 +1,2 @@ | gen_ref_pat.rs:6:9:6:28 | &mut ... | gen_ref_pat.rs:6:14:6:28 | TupleStructPat | -| gen_ref_pat.rs:7:9:7:21 | &... | gen_ref_pat.rs:7:10:7:21 | Option::None | +| gen_ref_pat.rs:7:9:7:21 | &Option::None | gen_ref_pat.rs:7:10:7:21 | Option::None | diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected index c1d4bfbb6267..83220773989e 100644 --- a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected @@ -1,2 +1,2 @@ -| gen_return_expr.rs:5:5:5:13 | return ... | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_return_expr.rs:5:5:5:13 | return 42 | getNumberOfAttrs: | 0 | hasExpr: | yes | | gen_return_expr.rs:8:5:8:10 | return | getNumberOfAttrs: | 0 | hasExpr: | no | diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected index eb4b7a5f1aa1..c75ecd0b23c5 100644 --- a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected @@ -1 +1 @@ -| gen_return_expr.rs:5:5:5:13 | return ... | gen_return_expr.rs:5:12:5:13 | 42 | +| gen_return_expr.rs:5:5:5:13 | return 42 | gen_return_expr.rs:5:12:5:13 | 42 | diff --git a/rust/ql/test/extractor-tests/utf8/ast.expected b/rust/ql/test/extractor-tests/utf8/ast.expected index 17457550f79e..560f834766e3 100644 --- a/rust/ql/test/extractor-tests/utf8/ast.expected +++ b/rust/ql/test/extractor-tests/utf8/ast.expected @@ -27,7 +27,7 @@ | utf8_identifiers.rs:10:12:10:13 | ParamList | | utf8_identifiers.rs:10:15:12:1 | StmtList | | utf8_identifiers.rs:10:15:12:1 | { ... } | -| utf8_identifiers.rs:11:5:11:24 | let \u03b1 = ... | +| utf8_identifiers.rs:11:5:11:24 | let ... = 0.00001f64 | | utf8_identifiers.rs:11:9:11:9 | \u03b1 | | utf8_identifiers.rs:11:9:11:9 | \u03b1 | | utf8_identifiers.rs:11:14:11:23 | 0.00001f64 | diff --git a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected index 28a436b1cce7..4260e2384c8f 100644 --- a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected @@ -1,53 +1,53 @@ edges | test.rs:5:5:11:5 | enter fn test_and_if_let | test.rs:5:24:5:24 | a | | | test.rs:5:5:11:5 | exit fn test_and_if_let (normal) | test.rs:5:5:11:5 | exit fn test_and_if_let | | -| test.rs:5:24:5:24 | a | test.rs:5:24:5:30 | a: bool | match | -| test.rs:5:24:5:30 | a: bool | test.rs:5:33:5:33 | b | | -| test.rs:5:33:5:33 | b | test.rs:5:33:5:47 | b: Option::<...> | match | -| test.rs:5:33:5:47 | b: Option::<...> | test.rs:5:50:5:50 | c | | -| test.rs:5:50:5:50 | c | test.rs:5:50:5:56 | c: bool | match | -| test.rs:5:50:5:56 | c: bool | test.rs:6:12:6:12 | a | | +| test.rs:5:24:5:24 | a | test.rs:5:24:5:30 | ...: bool | match | +| test.rs:5:24:5:30 | ...: bool | test.rs:5:33:5:33 | b | | +| test.rs:5:33:5:33 | b | test.rs:5:33:5:47 | ...: Option::<...> | match | +| test.rs:5:33:5:47 | ...: Option::<...> | test.rs:5:50:5:50 | c | | +| test.rs:5:50:5:50 | c | test.rs:5:50:5:56 | ...: bool | match | +| test.rs:5:50:5:56 | ...: bool | test.rs:6:12:6:12 | a | | | test.rs:5:67:11:5 | { ... } | test.rs:5:5:11:5 | exit fn test_and_if_let (normal) | | -| test.rs:6:9:10:9 | if ... { ... } else { ... } | test.rs:5:67:11:5 | { ... } | | +| test.rs:6:9:10:9 | if ... {...} else {...} | test.rs:5:67:11:5 | { ... } | | | test.rs:6:12:6:12 | a | test.rs:6:12:6:31 | [boolean(false)] ... && ... | false | -| test.rs:6:12:6:12 | a | test.rs:6:17:6:31 | let TupleStructPat = ... | true | +| test.rs:6:12:6:12 | a | test.rs:6:17:6:31 | let ... = b | true | | test.rs:6:12:6:31 | [boolean(false)] ... && ... | test.rs:9:13:9:17 | false | false | | test.rs:6:12:6:31 | [boolean(true)] ... && ... | test.rs:7:13:7:13 | d | true | -| test.rs:6:17:6:31 | let TupleStructPat = ... | test.rs:6:31:6:31 | b | | +| test.rs:6:17:6:31 | let ... = b | test.rs:6:31:6:31 | b | | | test.rs:6:21:6:27 | TupleStructPat | test.rs:6:12:6:31 | [boolean(false)] ... && ... | no-match | | test.rs:6:21:6:27 | TupleStructPat | test.rs:6:26:6:26 | d | match | | test.rs:6:26:6:26 | d | test.rs:6:12:6:31 | [boolean(true)] ... && ... | match | | test.rs:6:31:6:31 | b | test.rs:6:21:6:27 | TupleStructPat | | -| test.rs:6:33:8:9 | { ... } | test.rs:6:9:10:9 | if ... { ... } else { ... } | | +| test.rs:6:33:8:9 | { ... } | test.rs:6:9:10:9 | if ... {...} else {...} | | | test.rs:7:13:7:13 | d | test.rs:6:33:8:9 | { ... } | | -| test.rs:8:16:10:9 | { ... } | test.rs:6:9:10:9 | if ... { ... } else { ... } | | +| test.rs:8:16:10:9 | { ... } | test.rs:6:9:10:9 | if ... {...} else {...} | | | test.rs:9:13:9:17 | false | test.rs:8:16:10:9 | { ... } | | | test.rs:13:5:21:5 | enter fn test_and_if_let2 | test.rs:13:25:13:25 | a | | | test.rs:13:5:21:5 | exit fn test_and_if_let2 (normal) | test.rs:13:5:21:5 | exit fn test_and_if_let2 | | -| test.rs:13:25:13:25 | a | test.rs:13:25:13:31 | a: bool | match | -| test.rs:13:25:13:31 | a: bool | test.rs:13:34:13:34 | b | | -| test.rs:13:34:13:34 | b | test.rs:13:34:13:39 | b: i64 | match | -| test.rs:13:34:13:39 | b: i64 | test.rs:13:42:13:42 | c | | -| test.rs:13:42:13:42 | c | test.rs:13:42:13:48 | c: bool | match | -| test.rs:13:42:13:48 | c: bool | test.rs:14:12:14:12 | a | | +| test.rs:13:25:13:25 | a | test.rs:13:25:13:31 | ...: bool | match | +| test.rs:13:25:13:31 | ...: bool | test.rs:13:34:13:34 | b | | +| test.rs:13:34:13:34 | b | test.rs:13:34:13:39 | ...: i64 | match | +| test.rs:13:34:13:39 | ...: i64 | test.rs:13:42:13:42 | c | | +| test.rs:13:42:13:42 | c | test.rs:13:42:13:48 | ...: bool | match | +| test.rs:13:42:13:48 | ...: bool | test.rs:14:12:14:12 | a | | | test.rs:13:59:21:5 | { ... } | test.rs:13:5:21:5 | exit fn test_and_if_let2 (normal) | | -| test.rs:14:9:20:9 | if ... { ... } else { ... } | test.rs:13:59:21:5 | { ... } | | +| test.rs:14:9:20:9 | if ... {...} else {...} | test.rs:13:59:21:5 | { ... } | | | test.rs:14:12:14:12 | a | test.rs:14:12:14:25 | [boolean(false)] ... && ... | false | -| test.rs:14:12:14:12 | a | test.rs:14:17:14:25 | let d = ... | true | +| test.rs:14:12:14:12 | a | test.rs:14:17:14:25 | let ... = b | true | | test.rs:14:12:14:25 | [boolean(false)] ... && ... | test.rs:14:12:15:16 | [boolean(false)] ... && ... | false | | test.rs:14:12:14:25 | [boolean(true)] ... && ... | test.rs:15:16:15:16 | c | true | | test.rs:14:12:15:16 | [boolean(false)] ... && ... | test.rs:19:13:19:17 | false | false | | test.rs:14:12:15:16 | [boolean(true)] ... && ... | test.rs:17:13:17:13 | d | true | -| test.rs:14:17:14:25 | let d = ... | test.rs:14:25:14:25 | b | | +| test.rs:14:17:14:25 | let ... = b | test.rs:14:25:14:25 | b | | | test.rs:14:21:14:21 | d | test.rs:14:12:14:25 | [boolean(true)] ... && ... | match | | test.rs:14:25:14:25 | b | test.rs:14:21:14:21 | d | | | test.rs:15:16:15:16 | c | test.rs:14:12:15:16 | [boolean(false)] ... && ... | false | | test.rs:15:16:15:16 | c | test.rs:14:12:15:16 | [boolean(true)] ... && ... | true | -| test.rs:16:9:18:9 | { ... } | test.rs:14:9:20:9 | if ... { ... } else { ... } | | +| test.rs:16:9:18:9 | { ... } | test.rs:14:9:20:9 | if ... {...} else {...} | | | test.rs:17:13:17:13 | d | test.rs:17:17:17:17 | 0 | | | test.rs:17:13:17:17 | ... > ... | test.rs:16:9:18:9 | { ... } | | | test.rs:17:17:17:17 | 0 | test.rs:17:13:17:17 | ... > ... | | -| test.rs:18:16:20:9 | { ... } | test.rs:14:9:20:9 | if ... { ... } else { ... } | | +| test.rs:18:16:20:9 | { ... } | test.rs:14:9:20:9 | if ... {...} else {...} | | | test.rs:19:13:19:17 | false | test.rs:18:16:20:9 | { ... } | | breakTarget continueTarget diff --git a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected index 29d8b8e3b920..c8d53f467e99 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected @@ -1,16 +1,16 @@ models edges -| main.rs:21:13:21:21 | (...) ... : unit | main.rs:22:10:22:10 | s | provenance | | -| main.rs:32:13:32:21 | (...) ... : unit | main.rs:33:10:33:10 | s | provenance | | +| main.rs:21:13:21:21 | source(...) : unit | main.rs:22:10:22:10 | s | provenance | | +| main.rs:32:13:32:21 | source(...) : unit | main.rs:33:10:33:10 | s | provenance | | nodes -| main.rs:17:10:17:18 | (...) ... | semmle.label | (...) ... | -| main.rs:21:13:21:21 | (...) ... : unit | semmle.label | (...) ... : unit | +| main.rs:17:10:17:18 | source(...) | semmle.label | source(...) | +| main.rs:21:13:21:21 | source(...) : unit | semmle.label | source(...) : unit | | main.rs:22:10:22:10 | s | semmle.label | s | -| main.rs:32:13:32:21 | (...) ... : unit | semmle.label | (...) ... : unit | +| main.rs:32:13:32:21 | source(...) : unit | semmle.label | source(...) : unit | | main.rs:33:10:33:10 | s | semmle.label | s | subpaths testFailures #select -| main.rs:17:10:17:18 | (...) ... | main.rs:17:10:17:18 | (...) ... | main.rs:17:10:17:18 | (...) ... | $@ | main.rs:17:10:17:18 | (...) ... | (...) ... | -| main.rs:22:10:22:10 | s | main.rs:21:13:21:21 | (...) ... : unit | main.rs:22:10:22:10 | s | $@ | main.rs:21:13:21:21 | (...) ... : unit | (...) ... : unit | -| main.rs:33:10:33:10 | s | main.rs:32:13:32:21 | (...) ... : unit | main.rs:33:10:33:10 | s | $@ | main.rs:32:13:32:21 | (...) ... : unit | (...) ... : unit | +| main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | $@ | main.rs:17:10:17:18 | source(...) | source(...) | +| main.rs:22:10:22:10 | s | main.rs:21:13:21:21 | source(...) : unit | main.rs:22:10:22:10 | s | $@ | main.rs:21:13:21:21 | source(...) : unit | source(...) : unit | +| main.rs:33:10:33:10 | s | main.rs:32:13:32:21 | source(...) : unit | main.rs:33:10:33:10 | s | $@ | main.rs:32:13:32:21 | source(...) : unit | source(...) : unit | diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index 5fbf2fe41e1a..28e43535c79e 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -1,24 +1,24 @@ -| main.rs:13:5:13:13 | (...) ... | main.rs:1:1:3:1 | fn source | -| main.rs:17:13:17:23 | (...) ... | main.rs:12:1:14:1 | fn get_data | -| main.rs:18:5:18:11 | (...) ... | main.rs:5:1:7:1 | fn sink | -| main.rs:22:5:22:15 | (...) ... | main.rs:5:1:7:1 | fn sink | -| main.rs:26:13:26:21 | (...) ... | main.rs:1:1:3:1 | fn source | -| main.rs:27:5:27:14 | (...) ... | main.rs:21:1:23:1 | fn data_in | -| main.rs:35:13:35:21 | (...) ... | main.rs:1:1:3:1 | fn source | -| main.rs:36:13:36:27 | (...) ... | main.rs:30:1:32:1 | fn pass_through | -| main.rs:37:5:37:11 | (...) ... | main.rs:5:1:7:1 | fn sink | -| main.rs:49:9:49:15 | (...) ... | main.rs:5:1:7:1 | fn sink | -| main.rs:55:13:55:21 | (...) ... | main.rs:1:1:3:1 | fn source | +| main.rs:13:5:13:13 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:17:13:17:23 | get_data(...) | main.rs:12:1:14:1 | fn get_data | +| main.rs:18:5:18:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:22:5:22:15 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:26:13:26:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:27:5:27:14 | data_in(...) | main.rs:21:1:23:1 | fn data_in | +| main.rs:35:13:35:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:36:13:36:27 | pass_through(...) | main.rs:30:1:32:1 | fn pass_through | +| main.rs:37:5:37:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:49:9:49:15 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:55:13:55:21 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:69:13:69:25 | ... .get_data(...) | main.rs:51:5:57:5 | fn get_data | -| main.rs:70:5:70:11 | (...) ... | main.rs:5:1:7:1 | fn sink | -| main.rs:75:13:75:21 | (...) ... | main.rs:1:1:3:1 | fn source | +| main.rs:70:5:70:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:75:13:75:21 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:76:5:76:17 | ... .data_in(...) | main.rs:48:5:50:5 | fn data_in | -| main.rs:81:13:81:21 | (...) ... | main.rs:1:1:3:1 | fn source | +| main.rs:81:13:81:21 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:82:5:82:22 | ... .data_through(...) | main.rs:58:5:64:5 | fn data_through | -| main.rs:83:5:83:11 | (...) ... | main.rs:5:1:7:1 | fn sink | -| main.rs:87:5:87:22 | (...) ... | main.rs:16:1:19:1 | fn data_out_of_call | -| main.rs:88:5:88:21 | (...) ... | main.rs:25:1:28:1 | fn data_in_to_call | -| main.rs:89:5:89:23 | (...) ... | main.rs:34:1:38:1 | fn data_through_call | -| main.rs:91:5:91:24 | (...) ... | main.rs:67:1:71:1 | fn data_out_of_method | -| main.rs:92:5:92:28 | (...) ... | main.rs:73:1:77:1 | fn data_in_to_method_call | -| main.rs:93:5:93:25 | (...) ... | main.rs:79:1:84:1 | fn data_through_method | +| main.rs:83:5:83:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:87:5:87:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call | +| main.rs:88:5:88:21 | data_in_to_call(...) | main.rs:25:1:28:1 | fn data_in_to_call | +| main.rs:89:5:89:23 | data_through_call(...) | main.rs:34:1:38:1 | fn data_through_call | +| main.rs:91:5:91:24 | data_out_of_method(...) | main.rs:67:1:71:1 | fn data_out_of_method | +| main.rs:92:5:92:28 | data_in_to_method_call(...) | main.rs:73:1:77:1 | fn data_in_to_method_call | +| main.rs:93:5:93:25 | data_through_method(...) | main.rs:79:1:84:1 | fn data_through_method | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index e0bab71ec1eb..1e342ba93e5d 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -5,42 +5,42 @@ | main.rs:7:9:7:9 | s | main.rs:7:9:7:9 | [SSA] s | | main.rs:19:9:19:9 | [SSA] s | main.rs:20:10:20:10 | s | | main.rs:19:9:19:9 | s | main.rs:19:9:19:9 | [SSA] s | -| main.rs:19:13:19:21 | (...) ... | main.rs:19:9:19:9 | s | +| main.rs:19:13:19:21 | source(...) | main.rs:19:9:19:9 | s | | main.rs:23:18:23:21 | [SSA] cond | main.rs:26:16:26:19 | cond | | main.rs:23:18:23:21 | cond | main.rs:23:18:23:21 | [SSA] cond | | main.rs:24:9:24:9 | [SSA] a | main.rs:26:23:26:23 | a | | main.rs:24:9:24:9 | a | main.rs:24:9:24:9 | [SSA] a | -| main.rs:24:13:24:21 | (...) ... | main.rs:24:9:24:9 | a | +| main.rs:24:13:24:21 | source(...) | main.rs:24:9:24:9 | a | | main.rs:25:9:25:9 | [SSA] b | main.rs:26:34:26:34 | b | | main.rs:25:9:25:9 | b | main.rs:25:9:25:9 | [SSA] b | | main.rs:25:13:25:13 | 2 | main.rs:25:9:25:9 | b | | main.rs:26:9:26:9 | [SSA] c | main.rs:27:10:27:10 | c | | main.rs:26:9:26:9 | c | main.rs:26:9:26:9 | [SSA] c | -| main.rs:26:13:26:36 | ... else { ... } if {...} | main.rs:26:9:26:9 | c | -| main.rs:26:21:26:25 | { ... } | main.rs:26:13:26:36 | ... else { ... } if {...} | +| main.rs:26:13:26:36 | if cond {...} else {...} | main.rs:26:9:26:9 | c | +| main.rs:26:21:26:25 | { ... } | main.rs:26:13:26:36 | if cond {...} else {...} | | main.rs:26:23:26:23 | a | main.rs:26:21:26:25 | { ... } | -| main.rs:26:32:26:36 | { ... } | main.rs:26:13:26:36 | ... else { ... } if {...} | +| main.rs:26:32:26:36 | { ... } | main.rs:26:13:26:36 | if cond {...} else {...} | | main.rs:26:34:26:34 | b | main.rs:26:32:26:36 | { ... } | | main.rs:30:21:30:21 | [SSA] m | main.rs:32:19:32:19 | m | | main.rs:30:21:30:21 | m | main.rs:30:21:30:21 | [SSA] m | | main.rs:31:9:31:9 | [SSA] a | main.rs:33:20:33:20 | a | | main.rs:31:9:31:9 | a | main.rs:31:9:31:9 | [SSA] a | -| main.rs:31:13:31:21 | (...) ... | main.rs:31:9:31:9 | a | +| main.rs:31:13:31:21 | source(...) | main.rs:31:9:31:9 | a | | main.rs:32:9:32:9 | [SSA] b | main.rs:36:10:36:10 | b | | main.rs:32:9:32:9 | b | main.rs:32:9:32:9 | [SSA] b | -| main.rs:32:13:35:5 | match ... { ... } | main.rs:32:9:32:9 | b | -| main.rs:33:20:33:20 | a | main.rs:32:13:35:5 | match ... { ... } | -| main.rs:34:17:34:17 | 0 | main.rs:32:13:35:5 | match ... { ... } | +| main.rs:32:13:35:5 | match m { ... } | main.rs:32:9:32:9 | b | +| main.rs:33:20:33:20 | a | main.rs:32:13:35:5 | match m { ... } | +| main.rs:34:17:34:17 | 0 | main.rs:32:13:35:5 | match m { ... } | | main.rs:40:9:40:9 | [SSA] a | main.rs:43:10:43:10 | a | | main.rs:40:9:40:9 | a | main.rs:40:9:40:9 | [SSA] a | | main.rs:40:13:42:5 | loop { ... } | main.rs:40:9:40:9 | a | -| main.rs:41:9:41:15 | 1 break | main.rs:40:13:42:5 | loop { ... } | -| main.rs:41:15:41:15 | 1 | main.rs:41:9:41:15 | 1 break | +| main.rs:41:9:41:15 | break 1 | main.rs:40:13:42:5 | loop { ... } | +| main.rs:41:15:41:15 | 1 | main.rs:41:9:41:15 | break 1 | | main.rs:44:9:44:9 | [SSA] b | main.rs:47:10:47:10 | b | | main.rs:44:9:44:9 | b | main.rs:44:9:44:9 | [SSA] b | | main.rs:44:13:46:5 | loop { ... } | main.rs:44:9:44:9 | b | -| main.rs:45:9:45:23 | ... break | main.rs:44:13:46:5 | loop { ... } | -| main.rs:45:15:45:23 | (...) ... | main.rs:45:9:45:23 | ... break | +| main.rs:45:9:45:23 | break ... | main.rs:44:13:46:5 | loop { ... } | +| main.rs:45:15:45:23 | source(...) | main.rs:45:9:45:23 | break ... | | main.rs:51:9:51:13 | [SSA] i | main.rs:52:10:52:10 | i | | main.rs:51:9:51:13 | i | main.rs:51:9:51:13 | [SSA] i | | main.rs:51:17:51:17 | 1 | main.rs:51:9:51:13 | i | @@ -48,7 +48,7 @@ | main.rs:53:5:53:5 | i | main.rs:53:5:53:5 | [SSA] i | | main.rs:61:9:61:9 | [SSA] i | main.rs:62:11:62:11 | i | | main.rs:61:9:61:9 | i | main.rs:61:9:61:9 | [SSA] i | -| main.rs:61:13:61:31 | (...) ... | main.rs:61:9:61:9 | i | +| main.rs:61:13:61:31 | Box::new(...) | main.rs:61:9:61:9 | i | | main.rs:66:9:66:9 | [SSA] a | main.rs:67:10:67:10 | a | | main.rs:66:9:66:9 | a | main.rs:66:9:66:9 | [SSA] a | | main.rs:66:13:66:26 | TupleExpr | main.rs:66:9:66:9 | a | @@ -70,16 +70,16 @@ | main.rs:97:38:97:38 | p | main.rs:97:9:97:34 | Point {...} | | main.rs:104:9:104:10 | [SSA] s1 | main.rs:106:11:106:12 | s1 | | main.rs:104:9:104:10 | s1 | main.rs:104:9:104:10 | [SSA] s1 | -| main.rs:104:14:104:28 | (...) ... | main.rs:104:9:104:10 | s1 | +| main.rs:104:14:104:28 | Some(...) | main.rs:104:9:104:10 | s1 | | main.rs:105:9:105:10 | [SSA] s2 | main.rs:110:11:110:12 | s2 | | main.rs:105:9:105:10 | s2 | main.rs:105:9:105:10 | [SSA] s2 | -| main.rs:105:14:105:20 | (...) ... | main.rs:105:9:105:10 | s2 | +| main.rs:105:14:105:20 | Some(...) | main.rs:105:9:105:10 | s2 | | main.rs:107:14:107:14 | [SSA] n | main.rs:107:25:107:25 | n | | main.rs:107:14:107:14 | n | main.rs:107:14:107:14 | [SSA] n | -| main.rs:107:20:107:26 | (...) ... | main.rs:106:5:109:5 | match ... { ... } | -| main.rs:108:17:108:23 | (...) ... | main.rs:106:5:109:5 | match ... { ... } | -| main.rs:110:5:113:5 | match ... { ... } | main.rs:103:27:114:1 | { ... } | +| main.rs:107:20:107:26 | sink(...) | main.rs:106:5:109:5 | match s1 { ... } | +| main.rs:108:17:108:23 | sink(...) | main.rs:106:5:109:5 | match s1 { ... } | +| main.rs:110:5:113:5 | match s2 { ... } | main.rs:103:27:114:1 | { ... } | | main.rs:111:14:111:14 | [SSA] n | main.rs:111:25:111:25 | n | | main.rs:111:14:111:14 | n | main.rs:111:14:111:14 | [SSA] n | -| main.rs:111:20:111:26 | (...) ... | main.rs:110:5:113:5 | match ... { ... } | -| main.rs:112:17:112:23 | (...) ... | main.rs:110:5:113:5 | match ... { ... } | +| main.rs:111:20:111:26 | sink(...) | main.rs:110:5:113:5 | match s2 { ... } | +| main.rs:112:17:112:23 | sink(...) | main.rs:110:5:113:5 | match s2 { ... } | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index 315c3580f3d1..b4c292a93d9a 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -1,24 +1,24 @@ models edges -| main.rs:19:13:19:21 | (...) ... : unit | main.rs:20:10:20:10 | s | provenance | | -| main.rs:24:13:24:21 | (...) ... : unit | main.rs:27:10:27:10 | c | provenance | | -| main.rs:31:13:31:21 | (...) ... : unit | main.rs:36:10:36:10 | b | provenance | | -| main.rs:45:15:45:23 | (...) ... : unit | main.rs:47:10:47:10 | b | provenance | | +| main.rs:19:13:19:21 | source(...) : unit | main.rs:20:10:20:10 | s | provenance | | +| main.rs:24:13:24:21 | source(...) : unit | main.rs:27:10:27:10 | c | provenance | | +| main.rs:31:13:31:21 | source(...) : unit | main.rs:36:10:36:10 | b | provenance | | +| main.rs:45:15:45:23 | source(...) : unit | main.rs:47:10:47:10 | b | provenance | | nodes -| main.rs:15:10:15:18 | (...) ... | semmle.label | (...) ... | -| main.rs:19:13:19:21 | (...) ... : unit | semmle.label | (...) ... : unit | +| main.rs:15:10:15:18 | source(...) | semmle.label | source(...) | +| main.rs:19:13:19:21 | source(...) : unit | semmle.label | source(...) : unit | | main.rs:20:10:20:10 | s | semmle.label | s | -| main.rs:24:13:24:21 | (...) ... : unit | semmle.label | (...) ... : unit | +| main.rs:24:13:24:21 | source(...) : unit | semmle.label | source(...) : unit | | main.rs:27:10:27:10 | c | semmle.label | c | -| main.rs:31:13:31:21 | (...) ... : unit | semmle.label | (...) ... : unit | +| main.rs:31:13:31:21 | source(...) : unit | semmle.label | source(...) : unit | | main.rs:36:10:36:10 | b | semmle.label | b | -| main.rs:45:15:45:23 | (...) ... : unit | semmle.label | (...) ... : unit | +| main.rs:45:15:45:23 | source(...) : unit | semmle.label | source(...) : unit | | main.rs:47:10:47:10 | b | semmle.label | b | subpaths testFailures #select -| main.rs:15:10:15:18 | (...) ... | main.rs:15:10:15:18 | (...) ... | main.rs:15:10:15:18 | (...) ... | $@ | main.rs:15:10:15:18 | (...) ... | (...) ... | -| main.rs:20:10:20:10 | s | main.rs:19:13:19:21 | (...) ... : unit | main.rs:20:10:20:10 | s | $@ | main.rs:19:13:19:21 | (...) ... : unit | (...) ... : unit | -| main.rs:27:10:27:10 | c | main.rs:24:13:24:21 | (...) ... : unit | main.rs:27:10:27:10 | c | $@ | main.rs:24:13:24:21 | (...) ... : unit | (...) ... : unit | -| main.rs:36:10:36:10 | b | main.rs:31:13:31:21 | (...) ... : unit | main.rs:36:10:36:10 | b | $@ | main.rs:31:13:31:21 | (...) ... : unit | (...) ... : unit | -| main.rs:47:10:47:10 | b | main.rs:45:15:45:23 | (...) ... : unit | main.rs:47:10:47:10 | b | $@ | main.rs:45:15:45:23 | (...) ... : unit | (...) ... : unit | +| main.rs:15:10:15:18 | source(...) | main.rs:15:10:15:18 | source(...) | main.rs:15:10:15:18 | source(...) | $@ | main.rs:15:10:15:18 | source(...) | source(...) | +| main.rs:20:10:20:10 | s | main.rs:19:13:19:21 | source(...) : unit | main.rs:20:10:20:10 | s | $@ | main.rs:19:13:19:21 | source(...) : unit | source(...) : unit | +| main.rs:27:10:27:10 | c | main.rs:24:13:24:21 | source(...) : unit | main.rs:27:10:27:10 | c | $@ | main.rs:24:13:24:21 | source(...) : unit | source(...) : unit | +| main.rs:36:10:36:10 | b | main.rs:31:13:31:21 | source(...) : unit | main.rs:36:10:36:10 | b | $@ | main.rs:31:13:31:21 | source(...) : unit | source(...) : unit | +| main.rs:47:10:47:10 | b | main.rs:45:15:45:23 | source(...) : unit | main.rs:47:10:47:10 | b | $@ | main.rs:45:15:45:23 | source(...) : unit | source(...) : unit | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index 338af96a7c4f..3a7e72f03491 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -1,8 +1,8 @@ edges | variables.rs:3:1:5:1 | enter fn print_str | variables.rs:3:14:3:14 | s | | | variables.rs:3:1:5:1 | exit fn print_str (normal) | variables.rs:3:1:5:1 | exit fn print_str | | -| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:20 | s: RefType | match | -| variables.rs:3:14:3:20 | s: RefType | variables.rs:4:5:4:22 | ExprStmt | | +| variables.rs:3:14:3:14 | s | variables.rs:3:14:3:20 | ...: ... | match | +| variables.rs:3:14:3:20 | ...: ... | variables.rs:4:5:4:22 | ExprStmt | | | variables.rs:3:23:5:1 | { ... } | variables.rs:3:1:5:1 | exit fn print_str (normal) | | | variables.rs:4:5:4:21 | $crate::io::_print | variables.rs:4:14:4:17 | "{}\\n" | | | variables.rs:4:5:4:21 | MacroExpr | variables.rs:3:23:5:1 | { ... } | | @@ -17,8 +17,8 @@ edges | variables.rs:4:20:4:20 | s | variables.rs:4:14:4:20 | FormatArgsExpr | | | variables.rs:7:1:9:1 | enter fn print_i64 | variables.rs:7:14:7:14 | i | | | variables.rs:7:1:9:1 | exit fn print_i64 (normal) | variables.rs:7:1:9:1 | exit fn print_i64 | | -| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:19 | i: i64 | match | -| variables.rs:7:14:7:19 | i: i64 | variables.rs:8:5:8:22 | ExprStmt | | +| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:19 | ...: i64 | match | +| variables.rs:7:14:7:19 | ...: i64 | variables.rs:8:5:8:22 | ExprStmt | | | variables.rs:7:22:9:1 | { ... } | variables.rs:7:1:9:1 | exit fn print_i64 (normal) | | | variables.rs:8:5:8:21 | $crate::io::_print | variables.rs:8:14:8:17 | "{}\\n" | | | variables.rs:8:5:8:21 | MacroExpr | variables.rs:7:22:9:1 | { ... } | | @@ -33,27 +33,27 @@ edges | variables.rs:8:20:8:20 | i | variables.rs:8:14:8:20 | FormatArgsExpr | | | variables.rs:11:1:13:1 | enter fn print_i64_ref | variables.rs:11:18:11:18 | i | | | variables.rs:11:1:13:1 | exit fn print_i64_ref (normal) | variables.rs:11:1:13:1 | exit fn print_i64_ref | | -| variables.rs:11:18:11:18 | i | variables.rs:11:18:11:24 | i: RefType | match | -| variables.rs:11:18:11:24 | i: RefType | variables.rs:12:5:12:13 | print_i64 | | +| variables.rs:11:18:11:18 | i | variables.rs:11:18:11:24 | ...: ... | match | +| variables.rs:11:18:11:24 | ...: ... | variables.rs:12:5:12:13 | print_i64 | | | variables.rs:11:27:13:1 | { ... } | variables.rs:11:1:13:1 | exit fn print_i64_ref (normal) | | | variables.rs:12:5:12:13 | print_i64 | variables.rs:12:16:12:16 | i | | | variables.rs:12:5:12:17 | print_i64(...) | variables.rs:11:27:13:1 | { ... } | | | variables.rs:12:15:12:16 | * ... | variables.rs:12:5:12:17 | print_i64(...) | | | variables.rs:12:16:12:16 | i | variables.rs:12:15:12:16 | * ... | | -| variables.rs:15:1:18:1 | enter fn immutable_variable | variables.rs:16:5:16:17 | let x1 = ... | | +| variables.rs:15:1:18:1 | enter fn immutable_variable | variables.rs:16:5:16:17 | let ... = "a" | | | variables.rs:15:1:18:1 | exit fn immutable_variable (normal) | variables.rs:15:1:18:1 | exit fn immutable_variable | | | variables.rs:15:25:18:1 | { ... } | variables.rs:15:1:18:1 | exit fn immutable_variable (normal) | | -| variables.rs:16:5:16:17 | let x1 = ... | variables.rs:16:14:16:16 | "a" | | +| variables.rs:16:5:16:17 | let ... = "a" | variables.rs:16:14:16:16 | "a" | | | variables.rs:16:9:16:10 | x1 | variables.rs:17:5:17:18 | ExprStmt | match | | variables.rs:16:14:16:16 | "a" | variables.rs:16:9:16:10 | x1 | | | variables.rs:17:5:17:13 | print_str | variables.rs:17:15:17:16 | x1 | | | variables.rs:17:5:17:17 | print_str(...) | variables.rs:15:25:18:1 | { ... } | | | variables.rs:17:5:17:18 | ExprStmt | variables.rs:17:5:17:13 | print_str | | | variables.rs:17:15:17:16 | x1 | variables.rs:17:5:17:17 | print_str(...) | | -| variables.rs:20:1:25:1 | enter fn mutable_variable | variables.rs:21:5:21:19 | let x2 = ... | | +| variables.rs:20:1:25:1 | enter fn mutable_variable | variables.rs:21:5:21:19 | let ... = 4 | | | variables.rs:20:1:25:1 | exit fn mutable_variable (normal) | variables.rs:20:1:25:1 | exit fn mutable_variable | | | variables.rs:20:23:25:1 | { ... } | variables.rs:20:1:25:1 | exit fn mutable_variable (normal) | | -| variables.rs:21:5:21:19 | let x2 = ... | variables.rs:21:18:21:18 | 4 | | +| variables.rs:21:5:21:19 | let ... = 4 | variables.rs:21:18:21:18 | 4 | | | variables.rs:21:9:21:14 | x2 | variables.rs:22:5:22:18 | ExprStmt | match | | variables.rs:21:18:21:18 | 4 | variables.rs:21:9:21:14 | x2 | | | variables.rs:22:5:22:13 | print_i64 | variables.rs:22:15:22:16 | x2 | | @@ -68,17 +68,17 @@ edges | variables.rs:24:5:24:17 | print_i64(...) | variables.rs:20:23:25:1 | { ... } | | | variables.rs:24:5:24:18 | ExprStmt | variables.rs:24:5:24:13 | print_i64 | | | variables.rs:24:15:24:16 | x2 | variables.rs:24:5:24:17 | print_i64(...) | | -| variables.rs:27:1:32:1 | enter fn mutable_variable_immutable_borrow | variables.rs:28:5:28:18 | let x = ... | | +| variables.rs:27:1:32:1 | enter fn mutable_variable_immutable_borrow | variables.rs:28:5:28:18 | let ... = 1 | | | variables.rs:27:1:32:1 | exit fn mutable_variable_immutable_borrow (normal) | variables.rs:27:1:32:1 | exit fn mutable_variable_immutable_borrow | | | variables.rs:27:40:32:1 | { ... } | variables.rs:27:1:32:1 | exit fn mutable_variable_immutable_borrow (normal) | | -| variables.rs:28:5:28:18 | let x = ... | variables.rs:28:17:28:17 | 1 | | +| variables.rs:28:5:28:18 | let ... = 1 | variables.rs:28:17:28:17 | 1 | | | variables.rs:28:9:28:13 | x | variables.rs:29:5:29:22 | ExprStmt | match | | variables.rs:28:17:28:17 | 1 | variables.rs:28:9:28:13 | x | | | variables.rs:29:5:29:17 | print_i64_ref | variables.rs:29:20:29:20 | x | | | variables.rs:29:5:29:21 | print_i64_ref(...) | variables.rs:30:5:30:10 | ExprStmt | | | variables.rs:29:5:29:22 | ExprStmt | variables.rs:29:5:29:17 | print_i64_ref | | -| variables.rs:29:19:29:20 | &... | variables.rs:29:5:29:21 | print_i64_ref(...) | | -| variables.rs:29:20:29:20 | x | variables.rs:29:19:29:20 | &... | | +| variables.rs:29:19:29:20 | &x | variables.rs:29:5:29:21 | print_i64_ref(...) | | +| variables.rs:29:20:29:20 | x | variables.rs:29:19:29:20 | &x | | | variables.rs:30:5:30:5 | x | variables.rs:30:9:30:9 | 2 | | | variables.rs:30:5:30:9 | ... = ... | variables.rs:31:5:31:22 | ExprStmt | | | variables.rs:30:5:30:10 | ExprStmt | variables.rs:30:5:30:5 | x | | @@ -86,19 +86,19 @@ edges | variables.rs:31:5:31:17 | print_i64_ref | variables.rs:31:20:31:20 | x | | | variables.rs:31:5:31:21 | print_i64_ref(...) | variables.rs:27:40:32:1 | { ... } | | | variables.rs:31:5:31:22 | ExprStmt | variables.rs:31:5:31:17 | print_i64_ref | | -| variables.rs:31:19:31:20 | &... | variables.rs:31:5:31:21 | print_i64_ref(...) | | -| variables.rs:31:20:31:20 | x | variables.rs:31:19:31:20 | &... | | -| variables.rs:34:1:40:1 | enter fn variable_shadow1 | variables.rs:35:5:35:15 | let x3 = ... | | +| variables.rs:31:19:31:20 | &x | variables.rs:31:5:31:21 | print_i64_ref(...) | | +| variables.rs:31:20:31:20 | x | variables.rs:31:19:31:20 | &x | | +| variables.rs:34:1:40:1 | enter fn variable_shadow1 | variables.rs:35:5:35:15 | let ... = 1 | | | variables.rs:34:1:40:1 | exit fn variable_shadow1 (normal) | variables.rs:34:1:40:1 | exit fn variable_shadow1 | | | variables.rs:34:23:40:1 | { ... } | variables.rs:34:1:40:1 | exit fn variable_shadow1 (normal) | | -| variables.rs:35:5:35:15 | let x3 = ... | variables.rs:35:14:35:14 | 1 | | +| variables.rs:35:5:35:15 | let ... = 1 | variables.rs:35:14:35:14 | 1 | | | variables.rs:35:9:35:10 | x3 | variables.rs:36:5:36:18 | ExprStmt | match | | variables.rs:35:14:35:14 | 1 | variables.rs:35:9:35:10 | x3 | | | variables.rs:36:5:36:13 | print_i64 | variables.rs:36:15:36:16 | x3 | | -| variables.rs:36:5:36:17 | print_i64(...) | variables.rs:37:5:38:15 | let x3 = ... | | +| variables.rs:36:5:36:17 | print_i64(...) | variables.rs:37:5:38:15 | let ... = ... | | | variables.rs:36:5:36:18 | ExprStmt | variables.rs:36:5:36:13 | print_i64 | | | variables.rs:36:15:36:16 | x3 | variables.rs:36:5:36:17 | print_i64(...) | | -| variables.rs:37:5:38:15 | let x3 = ... | variables.rs:38:9:38:10 | x3 | | +| variables.rs:37:5:38:15 | let ... = ... | variables.rs:38:9:38:10 | x3 | | | variables.rs:37:9:37:10 | x3 | variables.rs:39:5:39:18 | ExprStmt | match | | variables.rs:38:9:38:10 | x3 | variables.rs:38:14:38:14 | 1 | | | variables.rs:38:9:38:14 | ... + ... | variables.rs:37:9:37:10 | x3 | | @@ -107,19 +107,19 @@ edges | variables.rs:39:5:39:17 | print_i64(...) | variables.rs:34:23:40:1 | { ... } | | | variables.rs:39:5:39:18 | ExprStmt | variables.rs:39:5:39:13 | print_i64 | | | variables.rs:39:15:39:16 | x3 | variables.rs:39:5:39:17 | print_i64(...) | | -| variables.rs:42:1:50:1 | enter fn variable_shadow2 | variables.rs:43:5:43:17 | let x4 = ... | | +| variables.rs:42:1:50:1 | enter fn variable_shadow2 | variables.rs:43:5:43:17 | let ... = "a" | | | variables.rs:42:1:50:1 | exit fn variable_shadow2 (normal) | variables.rs:42:1:50:1 | exit fn variable_shadow2 | | | variables.rs:42:23:50:1 | { ... } | variables.rs:42:1:50:1 | exit fn variable_shadow2 (normal) | | -| variables.rs:43:5:43:17 | let x4 = ... | variables.rs:43:14:43:16 | "a" | | +| variables.rs:43:5:43:17 | let ... = "a" | variables.rs:43:14:43:16 | "a" | | | variables.rs:43:9:43:10 | x4 | variables.rs:44:5:44:18 | ExprStmt | match | | variables.rs:43:14:43:16 | "a" | variables.rs:43:9:43:10 | x4 | | | variables.rs:44:5:44:13 | print_str | variables.rs:44:15:44:16 | x4 | | | variables.rs:44:5:44:17 | print_str(...) | variables.rs:45:5:48:5 | ExprStmt | | | variables.rs:44:5:44:18 | ExprStmt | variables.rs:44:5:44:13 | print_str | | | variables.rs:44:15:44:16 | x4 | variables.rs:44:5:44:17 | print_str(...) | | -| variables.rs:45:5:48:5 | ExprStmt | variables.rs:46:9:46:21 | let x4 = ... | | +| variables.rs:45:5:48:5 | ExprStmt | variables.rs:46:9:46:21 | let ... = "b" | | | variables.rs:45:5:48:5 | { ... } | variables.rs:49:5:49:18 | ExprStmt | | -| variables.rs:46:9:46:21 | let x4 = ... | variables.rs:46:18:46:20 | "b" | | +| variables.rs:46:9:46:21 | let ... = "b" | variables.rs:46:18:46:20 | "b" | | | variables.rs:46:13:46:14 | x4 | variables.rs:47:9:47:22 | ExprStmt | match | | variables.rs:46:18:46:20 | "b" | variables.rs:46:13:46:14 | x4 | | | variables.rs:47:9:47:17 | print_str | variables.rs:47:19:47:20 | x4 | | @@ -130,10 +130,10 @@ edges | variables.rs:49:5:49:17 | print_str(...) | variables.rs:42:23:50:1 | { ... } | | | variables.rs:49:5:49:18 | ExprStmt | variables.rs:49:5:49:13 | print_str | | | variables.rs:49:15:49:16 | x4 | variables.rs:49:5:49:17 | print_str(...) | | -| variables.rs:57:1:72:1 | enter fn let_pattern1 | variables.rs:58:5:67:47 | let TuplePat = ... | | +| variables.rs:57:1:72:1 | enter fn let_pattern1 | variables.rs:58:5:67:47 | let ... = ... | | | variables.rs:57:1:72:1 | exit fn let_pattern1 (normal) | variables.rs:57:1:72:1 | exit fn let_pattern1 | | | variables.rs:57:19:72:1 | { ... } | variables.rs:57:1:72:1 | exit fn let_pattern1 (normal) | | -| variables.rs:58:5:67:47 | let TuplePat = ... | variables.rs:67:11:67:13 | "a" | | +| variables.rs:58:5:67:47 | let ... = ... | variables.rs:67:11:67:13 | "a" | | | variables.rs:58:9:67:5 | TuplePat | variables.rs:59:9:62:9 | TuplePat | match | | variables.rs:59:9:62:9 | TuplePat | variables.rs:60:13:60:14 | a1 | match | | variables.rs:60:13:60:14 | a1 | variables.rs:61:13:61:14 | b1 | match | @@ -164,15 +164,15 @@ edges | variables.rs:71:5:71:16 | print_str(...) | variables.rs:57:19:72:1 | { ... } | | | variables.rs:71:5:71:17 | ExprStmt | variables.rs:71:5:71:13 | print_str | | | variables.rs:71:15:71:15 | y | variables.rs:71:5:71:16 | print_str(...) | | -| variables.rs:74:1:82:1 | enter fn let_pattern2 | variables.rs:75:5:75:38 | let p1 = ... | | +| variables.rs:74:1:82:1 | enter fn let_pattern2 | variables.rs:75:5:75:38 | let ... = ... | | | variables.rs:74:1:82:1 | exit fn let_pattern2 (normal) | variables.rs:74:1:82:1 | exit fn let_pattern2 | | | variables.rs:74:19:82:1 | { ... } | variables.rs:74:1:82:1 | exit fn let_pattern2 (normal) | | -| variables.rs:75:5:75:38 | let p1 = ... | variables.rs:75:25:75:27 | "a" | | -| variables.rs:75:9:75:10 | p1 | variables.rs:76:5:79:11 | let Point {...} = ... | match | +| variables.rs:75:5:75:38 | let ... = ... | variables.rs:75:25:75:27 | "a" | | +| variables.rs:75:9:75:10 | p1 | variables.rs:76:5:79:11 | let ... = p1 | match | | variables.rs:75:14:75:37 | Point {...} | variables.rs:75:9:75:10 | p1 | | | variables.rs:75:25:75:27 | "a" | variables.rs:75:33:75:35 | "b" | | | variables.rs:75:33:75:35 | "b" | variables.rs:75:14:75:37 | Point {...} | | -| variables.rs:76:5:79:11 | let Point {...} = ... | variables.rs:79:9:79:10 | p1 | | +| variables.rs:76:5:79:11 | let ... = p1 | variables.rs:79:9:79:10 | p1 | | | variables.rs:76:9:79:5 | Point {...} | variables.rs:77:12:77:13 | a2 | match | | variables.rs:77:12:77:13 | a2 | variables.rs:78:12:78:13 | b2 | match | | variables.rs:78:12:78:13 | b2 | variables.rs:80:5:80:18 | ExprStmt | match | @@ -185,31 +185,31 @@ edges | variables.rs:81:5:81:17 | print_str(...) | variables.rs:74:19:82:1 | { ... } | | | variables.rs:81:5:81:18 | ExprStmt | variables.rs:81:5:81:13 | print_str | | | variables.rs:81:15:81:16 | b2 | variables.rs:81:5:81:17 | print_str(...) | | -| variables.rs:84:1:91:1 | enter fn let_pattern3 | variables.rs:85:5:85:42 | let s1 = ... | | +| variables.rs:84:1:91:1 | enter fn let_pattern3 | variables.rs:85:5:85:42 | let ... = ... | | | variables.rs:84:1:91:1 | exit fn let_pattern3 (normal) | variables.rs:84:1:91:1 | exit fn let_pattern3 | | | variables.rs:84:19:91:1 | { ... } | variables.rs:84:1:91:1 | exit fn let_pattern3 (normal) | | -| variables.rs:85:5:85:42 | let s1 = ... | variables.rs:85:14:85:17 | Some | | -| variables.rs:85:9:85:10 | s1 | variables.rs:87:8:88:12 | let TupleStructPat = ... | match | +| variables.rs:85:5:85:42 | let ... = ... | variables.rs:85:14:85:17 | Some | | +| variables.rs:85:9:85:10 | s1 | variables.rs:87:8:88:12 | let ... = s1 | match | | variables.rs:85:14:85:17 | Some | variables.rs:85:19:85:30 | String::from | | | variables.rs:85:14:85:41 | Some(...) | variables.rs:85:9:85:10 | s1 | | | variables.rs:85:19:85:30 | String::from | variables.rs:85:32:85:39 | "Hello!" | | | variables.rs:85:19:85:40 | String::from(...) | variables.rs:85:14:85:41 | Some(...) | | | variables.rs:85:32:85:39 | "Hello!" | variables.rs:85:19:85:40 | String::from(...) | | -| variables.rs:87:5:90:5 | if ... { ... } | variables.rs:84:19:91:1 | { ... } | | -| variables.rs:87:8:88:12 | let TupleStructPat = ... | variables.rs:88:11:88:12 | s1 | | -| variables.rs:87:12:87:23 | TupleStructPat | variables.rs:87:5:90:5 | if ... { ... } | no-match | +| variables.rs:87:5:90:5 | if ... {...} | variables.rs:84:19:91:1 | { ... } | | +| variables.rs:87:8:88:12 | let ... = s1 | variables.rs:88:11:88:12 | s1 | | +| variables.rs:87:12:87:23 | TupleStructPat | variables.rs:87:5:90:5 | if ... {...} | no-match | | variables.rs:87:12:87:23 | TupleStructPat | variables.rs:87:17:87:22 | s2 | match | | variables.rs:87:17:87:22 | s2 | variables.rs:89:9:89:22 | ExprStmt | match | | variables.rs:88:11:88:12 | s1 | variables.rs:87:12:87:23 | TupleStructPat | | -| variables.rs:88:14:90:5 | { ... } | variables.rs:87:5:90:5 | if ... { ... } | | +| variables.rs:88:14:90:5 | { ... } | variables.rs:87:5:90:5 | if ... {...} | | | variables.rs:89:9:89:17 | print_str | variables.rs:89:19:89:20 | s2 | | | variables.rs:89:9:89:21 | print_str(...) | variables.rs:88:14:90:5 | { ... } | | | variables.rs:89:9:89:22 | ExprStmt | variables.rs:89:9:89:17 | print_str | | | variables.rs:89:19:89:20 | s2 | variables.rs:89:9:89:21 | print_str(...) | | -| variables.rs:93:1:99:1 | enter fn let_pattern4 | variables.rs:94:5:97:10 | let TupleStructPat = ... else { ... } | | +| variables.rs:93:1:99:1 | enter fn let_pattern4 | variables.rs:94:5:97:10 | let ... = ... else { ... } | | | variables.rs:93:1:99:1 | exit fn let_pattern4 (normal) | variables.rs:93:1:99:1 | exit fn let_pattern4 | | | variables.rs:93:19:99:1 | { ... } | variables.rs:93:1:99:1 | exit fn let_pattern4 (normal) | | -| variables.rs:94:5:97:10 | let TupleStructPat = ... else { ... } | variables.rs:94:34:94:37 | Some | | +| variables.rs:94:5:97:10 | let ... = ... else { ... } | variables.rs:94:34:94:37 | Some | | | variables.rs:94:9:94:16 | TupleStructPat | variables.rs:94:14:94:15 | x5 | match | | variables.rs:94:9:94:16 | TupleStructPat | variables.rs:96:13:96:19 | MacroStmts | no-match | | variables.rs:94:14:94:15 | x5 | variables.rs:98:5:98:18 | ExprStmt | match | @@ -225,40 +225,40 @@ edges | variables.rs:98:5:98:17 | print_str(...) | variables.rs:93:19:99:1 | { ... } | | | variables.rs:98:5:98:18 | ExprStmt | variables.rs:98:5:98:13 | print_str | | | variables.rs:98:15:98:16 | x5 | variables.rs:98:5:98:17 | print_str(...) | | -| variables.rs:101:1:108:1 | enter fn let_pattern5 | variables.rs:102:5:102:42 | let s1 = ... | | +| variables.rs:101:1:108:1 | enter fn let_pattern5 | variables.rs:102:5:102:42 | let ... = ... | | | variables.rs:101:1:108:1 | exit fn let_pattern5 (normal) | variables.rs:101:1:108:1 | exit fn let_pattern5 | | | variables.rs:101:19:108:1 | { ... } | variables.rs:101:1:108:1 | exit fn let_pattern5 (normal) | | -| variables.rs:102:5:102:42 | let s1 = ... | variables.rs:102:14:102:17 | Some | | -| variables.rs:102:9:102:10 | s1 | variables.rs:104:11:105:12 | let TupleStructPat = ... | match | +| variables.rs:102:5:102:42 | let ... = ... | variables.rs:102:14:102:17 | Some | | +| variables.rs:102:9:102:10 | s1 | variables.rs:104:11:105:12 | let ... = s1 | match | | variables.rs:102:14:102:17 | Some | variables.rs:102:19:102:30 | String::from | | | variables.rs:102:14:102:41 | Some(...) | variables.rs:102:9:102:10 | s1 | | | variables.rs:102:19:102:30 | String::from | variables.rs:102:32:102:39 | "Hello!" | | | variables.rs:102:19:102:40 | String::from(...) | variables.rs:102:14:102:41 | Some(...) | | | variables.rs:102:32:102:39 | "Hello!" | variables.rs:102:19:102:40 | String::from(...) | | | variables.rs:104:5:107:5 | while ... { ... } | variables.rs:101:19:108:1 | { ... } | | -| variables.rs:104:11:105:12 | let TupleStructPat = ... | variables.rs:105:11:105:12 | s1 | | +| variables.rs:104:11:105:12 | let ... = s1 | variables.rs:105:11:105:12 | s1 | | | variables.rs:104:15:104:26 | TupleStructPat | variables.rs:104:5:107:5 | while ... { ... } | no-match | | variables.rs:104:15:104:26 | TupleStructPat | variables.rs:104:20:104:25 | s2 | match | | variables.rs:104:20:104:25 | s2 | variables.rs:106:9:106:22 | ExprStmt | match | | variables.rs:105:11:105:12 | s1 | variables.rs:104:15:104:26 | TupleStructPat | | -| variables.rs:105:14:107:5 | { ... } | variables.rs:104:11:105:12 | let TupleStructPat = ... | | +| variables.rs:105:14:107:5 | { ... } | variables.rs:104:11:105:12 | let ... = s1 | | | variables.rs:106:9:106:17 | print_str | variables.rs:106:19:106:20 | s2 | | | variables.rs:106:9:106:21 | print_str(...) | variables.rs:105:14:107:5 | { ... } | | | variables.rs:106:9:106:22 | ExprStmt | variables.rs:106:9:106:17 | print_str | | | variables.rs:106:19:106:20 | s2 | variables.rs:106:9:106:21 | print_str(...) | | -| variables.rs:110:1:125:1 | enter fn match_pattern1 | variables.rs:111:5:111:21 | let x6 = ... | | +| variables.rs:110:1:125:1 | enter fn match_pattern1 | variables.rs:111:5:111:21 | let ... = ... | | | variables.rs:110:1:125:1 | exit fn match_pattern1 (normal) | variables.rs:110:1:125:1 | exit fn match_pattern1 | | | variables.rs:110:21:125:1 | { ... } | variables.rs:110:1:125:1 | exit fn match_pattern1 (normal) | | -| variables.rs:111:5:111:21 | let x6 = ... | variables.rs:111:14:111:17 | Some | | -| variables.rs:111:9:111:10 | x6 | variables.rs:112:5:112:16 | let y1 = ... | match | +| variables.rs:111:5:111:21 | let ... = ... | variables.rs:111:14:111:17 | Some | | +| variables.rs:111:9:111:10 | x6 | variables.rs:112:5:112:16 | let ... = 10 | match | | variables.rs:111:14:111:17 | Some | variables.rs:111:19:111:19 | 5 | | | variables.rs:111:14:111:20 | Some(...) | variables.rs:111:9:111:10 | x6 | | | variables.rs:111:19:111:19 | 5 | variables.rs:111:14:111:20 | Some(...) | | -| variables.rs:112:5:112:16 | let y1 = ... | variables.rs:112:14:112:15 | 10 | | +| variables.rs:112:5:112:16 | let ... = 10 | variables.rs:112:14:112:15 | 10 | | | variables.rs:112:9:112:10 | y1 | variables.rs:114:5:122:5 | ExprStmt | match | | variables.rs:112:14:112:15 | 10 | variables.rs:112:9:112:10 | y1 | | | variables.rs:114:5:122:5 | ExprStmt | variables.rs:114:11:114:12 | x6 | | -| variables.rs:114:5:122:5 | match ... { ... } | variables.rs:124:5:124:18 | ExprStmt | | +| variables.rs:114:5:122:5 | match x6 { ... } | variables.rs:124:5:124:18 | ExprStmt | | | variables.rs:114:11:114:12 | x6 | variables.rs:115:9:115:16 | TupleStructPat | | | variables.rs:115:9:115:16 | TupleStructPat | variables.rs:115:14:115:15 | 50 | match | | variables.rs:115:9:115:16 | TupleStructPat | variables.rs:116:9:116:16 | TupleStructPat | no-match | @@ -266,27 +266,27 @@ edges | variables.rs:115:14:115:15 | 50 | variables.rs:115:21:115:29 | print_str | match | | variables.rs:115:14:115:15 | 50 | variables.rs:116:9:116:16 | TupleStructPat | no-match | | variables.rs:115:21:115:29 | print_str | variables.rs:115:31:115:38 | "Got 50" | | -| variables.rs:115:21:115:39 | print_str(...) | variables.rs:114:5:122:5 | match ... { ... } | | +| variables.rs:115:21:115:39 | print_str(...) | variables.rs:114:5:122:5 | match x6 { ... } | | | variables.rs:115:31:115:38 | "Got 50" | variables.rs:115:21:115:39 | print_str(...) | | | variables.rs:116:9:116:16 | TupleStructPat | variables.rs:116:14:116:15 | y1 | match | | variables.rs:116:9:116:16 | TupleStructPat | variables.rs:121:9:121:12 | None | no-match | | variables.rs:116:14:116:15 | y1 | variables.rs:119:13:119:21 | print_i64 | match | -| variables.rs:118:9:120:9 | { ... } | variables.rs:114:5:122:5 | match ... { ... } | | +| variables.rs:118:9:120:9 | { ... } | variables.rs:114:5:122:5 | match x6 { ... } | | | variables.rs:119:13:119:21 | print_i64 | variables.rs:119:23:119:24 | y1 | | | variables.rs:119:13:119:25 | print_i64(...) | variables.rs:118:9:120:9 | { ... } | | | variables.rs:119:23:119:24 | y1 | variables.rs:119:13:119:25 | print_i64(...) | | | variables.rs:121:9:121:12 | None | variables.rs:121:17:121:25 | print_str | match | | variables.rs:121:17:121:25 | print_str | variables.rs:121:27:121:32 | "NONE" | | -| variables.rs:121:17:121:33 | print_str(...) | variables.rs:114:5:122:5 | match ... { ... } | | +| variables.rs:121:17:121:33 | print_str(...) | variables.rs:114:5:122:5 | match x6 { ... } | | | variables.rs:121:27:121:32 | "NONE" | variables.rs:121:17:121:33 | print_str(...) | | | variables.rs:124:5:124:13 | print_i64 | variables.rs:124:15:124:16 | y1 | | | variables.rs:124:5:124:17 | print_i64(...) | variables.rs:110:21:125:1 | { ... } | | | variables.rs:124:5:124:18 | ExprStmt | variables.rs:124:5:124:13 | print_i64 | | | variables.rs:124:15:124:16 | y1 | variables.rs:124:5:124:17 | print_i64(...) | | -| variables.rs:127:1:152:1 | enter fn match_pattern2 | variables.rs:128:5:128:36 | let numbers = ... | | +| variables.rs:127:1:152:1 | enter fn match_pattern2 | variables.rs:128:5:128:36 | let ... = ... | | | variables.rs:127:1:152:1 | exit fn match_pattern2 (normal) | variables.rs:127:1:152:1 | exit fn match_pattern2 | | | variables.rs:127:21:152:1 | { ... } | variables.rs:127:1:152:1 | exit fn match_pattern2 (normal) | | -| variables.rs:128:5:128:36 | let numbers = ... | variables.rs:128:20:128:20 | 2 | | +| variables.rs:128:5:128:36 | let ... = ... | variables.rs:128:20:128:20 | 2 | | | variables.rs:128:9:128:15 | numbers | variables.rs:130:5:140:5 | ExprStmt | match | | variables.rs:128:19:128:35 | TupleExpr | variables.rs:128:9:128:15 | numbers | | | variables.rs:128:20:128:20 | 2 | variables.rs:128:23:128:23 | 4 | | @@ -295,7 +295,7 @@ edges | variables.rs:128:29:128:30 | 16 | variables.rs:128:33:128:34 | 32 | | | variables.rs:128:33:128:34 | 32 | variables.rs:128:19:128:35 | TupleExpr | | | variables.rs:130:5:140:5 | ExprStmt | variables.rs:130:11:130:17 | numbers | | -| variables.rs:130:5:140:5 | match ... { ... } | variables.rs:142:11:142:17 | numbers | | +| variables.rs:130:5:140:5 | match numbers { ... } | variables.rs:142:11:142:17 | numbers | | | variables.rs:130:11:130:17 | numbers | variables.rs:131:9:135:9 | TuplePat | | | variables.rs:131:9:135:9 | TuplePat | variables.rs:132:13:132:17 | first | match | | variables.rs:132:13:132:17 | first | variables.rs:132:20:132:20 | _ | match | @@ -303,7 +303,7 @@ edges | variables.rs:133:13:133:17 | third | variables.rs:133:20:133:20 | _ | match | | variables.rs:133:20:133:20 | _ | variables.rs:134:13:134:17 | fifth | match | | variables.rs:134:13:134:17 | fifth | variables.rs:136:13:136:29 | ExprStmt | match | -| variables.rs:135:14:139:9 | { ... } | variables.rs:130:5:140:5 | match ... { ... } | | +| variables.rs:135:14:139:9 | { ... } | variables.rs:130:5:140:5 | match numbers { ... } | | | variables.rs:136:13:136:21 | print_i64 | variables.rs:136:23:136:27 | first | | | variables.rs:136:13:136:28 | print_i64(...) | variables.rs:137:13:137:29 | ExprStmt | | | variables.rs:136:13:136:29 | ExprStmt | variables.rs:136:13:136:21 | print_i64 | | @@ -316,13 +316,13 @@ edges | variables.rs:138:13:138:28 | print_i64(...) | variables.rs:135:14:139:9 | { ... } | | | variables.rs:138:13:138:29 | ExprStmt | variables.rs:138:13:138:21 | print_i64 | | | variables.rs:138:23:138:27 | fifth | variables.rs:138:13:138:28 | print_i64(...) | | -| variables.rs:142:5:151:5 | match ... { ... } | variables.rs:127:21:152:1 | { ... } | | +| variables.rs:142:5:151:5 | match numbers { ... } | variables.rs:127:21:152:1 | { ... } | | | variables.rs:142:11:142:17 | numbers | variables.rs:143:9:147:9 | TuplePat | | | variables.rs:143:9:147:9 | TuplePat | variables.rs:144:13:144:17 | first | match | | variables.rs:144:13:144:17 | first | variables.rs:145:13:145:14 | .. | match | | variables.rs:145:13:145:14 | .. | variables.rs:146:13:146:16 | last | match | | variables.rs:146:13:146:16 | last | variables.rs:148:13:148:29 | ExprStmt | match | -| variables.rs:147:14:150:9 | { ... } | variables.rs:142:5:151:5 | match ... { ... } | | +| variables.rs:147:14:150:9 | { ... } | variables.rs:142:5:151:5 | match numbers { ... } | | | variables.rs:148:13:148:21 | print_i64 | variables.rs:148:23:148:27 | first | | | variables.rs:148:13:148:28 | print_i64(...) | variables.rs:149:13:149:28 | ExprStmt | | | variables.rs:148:13:148:29 | ExprStmt | variables.rs:148:13:148:21 | print_i64 | | @@ -331,30 +331,30 @@ edges | variables.rs:149:13:149:27 | print_i64(...) | variables.rs:147:14:150:9 | { ... } | | | variables.rs:149:13:149:28 | ExprStmt | variables.rs:149:13:149:21 | print_i64 | | | variables.rs:149:23:149:26 | last | variables.rs:149:13:149:27 | print_i64(...) | | -| variables.rs:154:1:162:1 | enter fn match_pattern3 | variables.rs:155:5:155:38 | let p2 = ... | | +| variables.rs:154:1:162:1 | enter fn match_pattern3 | variables.rs:155:5:155:38 | let ... = ... | | | variables.rs:154:1:162:1 | exit fn match_pattern3 (normal) | variables.rs:154:1:162:1 | exit fn match_pattern3 | | | variables.rs:154:21:162:1 | { ... } | variables.rs:154:1:162:1 | exit fn match_pattern3 (normal) | | -| variables.rs:155:5:155:38 | let p2 = ... | variables.rs:155:25:155:27 | "x" | | +| variables.rs:155:5:155:38 | let ... = ... | variables.rs:155:25:155:27 | "x" | | | variables.rs:155:9:155:10 | p2 | variables.rs:157:11:157:12 | p2 | match | | variables.rs:155:14:155:37 | Point {...} | variables.rs:155:9:155:10 | p2 | | | variables.rs:155:25:155:27 | "x" | variables.rs:155:33:155:35 | "y" | | | variables.rs:155:33:155:35 | "y" | variables.rs:155:14:155:37 | Point {...} | | -| variables.rs:157:5:161:5 | match ... { ... } | variables.rs:154:21:162:1 | { ... } | | +| variables.rs:157:5:161:5 | match p2 { ... } | variables.rs:154:21:162:1 | { ... } | | | variables.rs:157:11:157:12 | p2 | variables.rs:158:9:160:9 | Point {...} | | | variables.rs:158:9:160:9 | Point {...} | variables.rs:159:16:159:17 | x7 | match | | variables.rs:159:16:159:17 | x7 | variables.rs:159:20:159:21 | .. | match | | variables.rs:159:20:159:21 | .. | variables.rs:160:14:160:22 | print_str | match | | variables.rs:160:14:160:22 | print_str | variables.rs:160:24:160:25 | x7 | | -| variables.rs:160:14:160:26 | print_str(...) | variables.rs:157:5:161:5 | match ... { ... } | | +| variables.rs:160:14:160:26 | print_str(...) | variables.rs:157:5:161:5 | match p2 { ... } | | | variables.rs:160:24:160:25 | x7 | variables.rs:160:14:160:26 | print_str(...) | | -| variables.rs:168:1:181:1 | enter fn match_pattern4 | variables.rs:169:5:169:39 | let msg = ... | | +| variables.rs:168:1:181:1 | enter fn match_pattern4 | variables.rs:169:5:169:39 | let ... = ... | | | variables.rs:168:1:181:1 | exit fn match_pattern4 (normal) | variables.rs:168:1:181:1 | exit fn match_pattern4 | | | variables.rs:168:21:181:1 | { ... } | variables.rs:168:1:181:1 | exit fn match_pattern4 (normal) | | -| variables.rs:169:5:169:39 | let msg = ... | variables.rs:169:36:169:36 | 0 | | +| variables.rs:169:5:169:39 | let ... = ... | variables.rs:169:36:169:36 | 0 | | | variables.rs:169:9:169:11 | msg | variables.rs:171:11:171:13 | msg | match | | variables.rs:169:15:169:38 | Message::Hello {...} | variables.rs:169:9:169:11 | msg | | | variables.rs:169:36:169:36 | 0 | variables.rs:169:15:169:38 | Message::Hello {...} | | -| variables.rs:171:5:180:5 | match ... { ... } | variables.rs:168:21:181:1 | { ... } | | +| variables.rs:171:5:180:5 | match msg { ... } | variables.rs:168:21:181:1 | { ... } | | | variables.rs:171:11:171:13 | msg | variables.rs:172:9:174:9 | Message::Hello {...} | | | variables.rs:172:9:174:9 | Message::Hello {...} | variables.rs:173:31:173:35 | RangePat | match | | variables.rs:172:9:174:9 | Message::Hello {...} | variables.rs:175:9:175:38 | Message::Hello {...} | no-match | @@ -368,7 +368,7 @@ edges | variables.rs:173:35:173:35 | 7 | variables.rs:173:35:173:35 | 7 | | | variables.rs:173:35:173:35 | 7 | variables.rs:175:9:175:38 | Message::Hello {...} | no-match | | variables.rs:174:14:174:22 | print_i64 | variables.rs:174:24:174:34 | id_variable | | -| variables.rs:174:14:174:35 | print_i64(...) | variables.rs:171:5:180:5 | match ... { ... } | | +| variables.rs:174:14:174:35 | print_i64(...) | variables.rs:171:5:180:5 | match msg { ... } | | | variables.rs:174:24:174:34 | id_variable | variables.rs:174:14:174:35 | print_i64(...) | | | variables.rs:175:9:175:38 | Message::Hello {...} | variables.rs:175:30:175:36 | RangePat | match | | variables.rs:175:9:175:38 | Message::Hello {...} | variables.rs:178:9:178:29 | Message::Hello {...} | no-match | @@ -380,7 +380,7 @@ edges | variables.rs:175:35:175:36 | 12 | variables.rs:175:35:175:36 | 12 | | | variables.rs:175:35:175:36 | 12 | variables.rs:176:22:176:51 | MacroStmts | match | | variables.rs:175:35:175:36 | 12 | variables.rs:178:9:178:29 | Message::Hello {...} | no-match | -| variables.rs:175:43:177:9 | { ... } | variables.rs:171:5:180:5 | match ... { ... } | | +| variables.rs:175:43:177:9 | { ... } | variables.rs:171:5:180:5 | match msg { ... } | | | variables.rs:176:13:176:52 | $crate::io::_print | variables.rs:176:22:176:51 | "Found an id in another range\\n" | | | variables.rs:176:13:176:52 | MacroExpr | variables.rs:175:43:177:9 | { ... } | | | variables.rs:176:22:176:51 | "Found an id in another range\\n" | variables.rs:176:22:176:51 | FormatArgsExpr | | @@ -393,182 +393,182 @@ edges | variables.rs:178:9:178:29 | Message::Hello {...} | variables.rs:178:26:178:27 | id | match | | variables.rs:178:26:178:27 | id | variables.rs:179:13:179:21 | print_i64 | match | | variables.rs:179:13:179:21 | print_i64 | variables.rs:179:23:179:24 | id | | -| variables.rs:179:13:179:25 | print_i64(...) | variables.rs:171:5:180:5 | match ... { ... } | | +| variables.rs:179:13:179:25 | print_i64(...) | variables.rs:171:5:180:5 | match msg { ... } | | | variables.rs:179:23:179:24 | id | variables.rs:179:13:179:25 | print_i64(...) | | -| variables.rs:188:1:194:1 | enter fn match_pattern5 | variables.rs:189:5:189:34 | let either = ... | | +| variables.rs:188:1:194:1 | enter fn match_pattern5 | variables.rs:189:5:189:34 | let ... = ... | | | variables.rs:188:1:194:1 | exit fn match_pattern5 (normal) | variables.rs:188:1:194:1 | exit fn match_pattern5 | | | variables.rs:188:21:194:1 | { ... } | variables.rs:188:1:194:1 | exit fn match_pattern5 (normal) | | -| variables.rs:189:5:189:34 | let either = ... | variables.rs:189:18:189:29 | Either::Left | | +| variables.rs:189:5:189:34 | let ... = ... | variables.rs:189:18:189:29 | Either::Left | | | variables.rs:189:9:189:14 | either | variables.rs:190:11:190:16 | either | match | | variables.rs:189:18:189:29 | Either::Left | variables.rs:189:31:189:32 | 32 | | | variables.rs:189:18:189:33 | Either::Left(...) | variables.rs:189:9:189:14 | either | | | variables.rs:189:31:189:32 | 32 | variables.rs:189:18:189:33 | Either::Left(...) | | -| variables.rs:190:5:193:5 | match ... { ... } | variables.rs:188:21:194:1 | { ... } | | +| variables.rs:190:5:193:5 | match either { ... } | variables.rs:188:21:194:1 | { ... } | | | variables.rs:190:11:190:16 | either | variables.rs:191:9:191:24 | TupleStructPat | | | variables.rs:191:9:191:24 | TupleStructPat | variables.rs:191:22:191:23 | a3 | match | | variables.rs:191:9:191:24 | TupleStructPat | variables.rs:191:28:191:44 | TupleStructPat | no-match | -| variables.rs:191:9:191:44 | [match(true)] ... \| ... | variables.rs:192:16:192:24 | print_i64 | match | -| variables.rs:191:22:191:23 | a3 | variables.rs:191:9:191:44 | [match(true)] ... \| ... | match | +| variables.rs:191:9:191:44 | [match(true)] ...... | variables.rs:192:16:192:24 | print_i64 | match | +| variables.rs:191:22:191:23 | a3 | variables.rs:191:9:191:44 | [match(true)] ...... | match | | variables.rs:191:28:191:44 | TupleStructPat | variables.rs:191:42:191:43 | a3 | match | -| variables.rs:191:42:191:43 | a3 | variables.rs:191:9:191:44 | [match(true)] ... \| ... | match | +| variables.rs:191:42:191:43 | a3 | variables.rs:191:9:191:44 | [match(true)] ...... | match | | variables.rs:192:16:192:24 | print_i64 | variables.rs:192:26:192:27 | a3 | | -| variables.rs:192:16:192:28 | print_i64(...) | variables.rs:190:5:193:5 | match ... { ... } | | +| variables.rs:192:16:192:28 | print_i64(...) | variables.rs:190:5:193:5 | match either { ... } | | | variables.rs:192:26:192:27 | a3 | variables.rs:192:16:192:28 | print_i64(...) | | -| variables.rs:202:1:216:1 | enter fn match_pattern6 | variables.rs:203:5:203:37 | let tv = ... | | +| variables.rs:202:1:216:1 | enter fn match_pattern6 | variables.rs:203:5:203:37 | let ... = ... | | | variables.rs:202:1:216:1 | exit fn match_pattern6 (normal) | variables.rs:202:1:216:1 | exit fn match_pattern6 | | | variables.rs:202:21:216:1 | { ... } | variables.rs:202:1:216:1 | exit fn match_pattern6 (normal) | | -| variables.rs:203:5:203:37 | let tv = ... | variables.rs:203:14:203:32 | ThreeValued::Second | | +| variables.rs:203:5:203:37 | let ... = ... | variables.rs:203:14:203:32 | ThreeValued::Second | | | variables.rs:203:9:203:10 | tv | variables.rs:204:5:207:5 | ExprStmt | match | | variables.rs:203:14:203:32 | ThreeValued::Second | variables.rs:203:34:203:35 | 62 | | | variables.rs:203:14:203:36 | ThreeValued::Second(...) | variables.rs:203:9:203:10 | tv | | | variables.rs:203:34:203:35 | 62 | variables.rs:203:14:203:36 | ThreeValued::Second(...) | | | variables.rs:204:5:207:5 | ExprStmt | variables.rs:204:11:204:12 | tv | | -| variables.rs:204:5:207:5 | match ... { ... } | variables.rs:208:5:211:5 | ExprStmt | | +| variables.rs:204:5:207:5 | match tv { ... } | variables.rs:208:5:211:5 | ExprStmt | | | variables.rs:204:11:204:12 | tv | variables.rs:205:9:205:30 | TupleStructPat | | | variables.rs:205:9:205:30 | TupleStructPat | variables.rs:205:28:205:29 | a4 | match | | variables.rs:205:9:205:30 | TupleStructPat | variables.rs:205:34:205:56 | TupleStructPat | no-match | -| variables.rs:205:9:205:81 | [match(true)] ... \| ... | variables.rs:206:16:206:24 | print_i64 | match | -| variables.rs:205:28:205:29 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... | match | +| variables.rs:205:9:205:81 | [match(true)] ......... | variables.rs:206:16:206:24 | print_i64 | match | +| variables.rs:205:28:205:29 | a4 | variables.rs:205:9:205:81 | [match(true)] ......... | match | | variables.rs:205:34:205:56 | TupleStructPat | variables.rs:205:54:205:55 | a4 | match | | variables.rs:205:34:205:56 | TupleStructPat | variables.rs:205:60:205:81 | TupleStructPat | no-match | -| variables.rs:205:54:205:55 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... | match | +| variables.rs:205:54:205:55 | a4 | variables.rs:205:9:205:81 | [match(true)] ......... | match | | variables.rs:205:60:205:81 | TupleStructPat | variables.rs:205:79:205:80 | a4 | match | -| variables.rs:205:79:205:80 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... | match | +| variables.rs:205:79:205:80 | a4 | variables.rs:205:9:205:81 | [match(true)] ......... | match | | variables.rs:206:16:206:24 | print_i64 | variables.rs:206:26:206:27 | a4 | | -| variables.rs:206:16:206:28 | print_i64(...) | variables.rs:204:5:207:5 | match ... { ... } | | +| variables.rs:206:16:206:28 | print_i64(...) | variables.rs:204:5:207:5 | match tv { ... } | | | variables.rs:206:26:206:27 | a4 | variables.rs:206:16:206:28 | print_i64(...) | | | variables.rs:208:5:211:5 | ExprStmt | variables.rs:208:11:208:12 | tv | | -| variables.rs:208:5:211:5 | match ... { ... } | variables.rs:212:11:212:12 | tv | | +| variables.rs:208:5:211:5 | match tv { ... } | variables.rs:212:11:212:12 | tv | | | variables.rs:208:11:208:12 | tv | variables.rs:209:10:209:31 | TupleStructPat | | -| variables.rs:209:9:209:83 | [match(true)] ... \| ... | variables.rs:210:16:210:24 | print_i64 | match | +| variables.rs:209:9:209:83 | [match(true)] ...... | variables.rs:210:16:210:24 | print_i64 | match | | variables.rs:209:10:209:31 | TupleStructPat | variables.rs:209:29:209:30 | a5 | match | | variables.rs:209:10:209:31 | TupleStructPat | variables.rs:209:35:209:57 | TupleStructPat | no-match | -| variables.rs:209:10:209:57 | [match(false)] ... \| ... | variables.rs:209:62:209:83 | TupleStructPat | no-match | -| variables.rs:209:10:209:57 | [match(true)] ... \| ... | variables.rs:209:9:209:83 | [match(true)] ... \| ... | match | -| variables.rs:209:29:209:30 | a5 | variables.rs:209:10:209:57 | [match(true)] ... \| ... | match | -| variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:10:209:57 | [match(false)] ... \| ... | no-match | +| variables.rs:209:10:209:57 | [match(false)] ...... | variables.rs:209:62:209:83 | TupleStructPat | no-match | +| variables.rs:209:10:209:57 | [match(true)] ...... | variables.rs:209:9:209:83 | [match(true)] ...... | match | +| variables.rs:209:29:209:30 | a5 | variables.rs:209:10:209:57 | [match(true)] ...... | match | +| variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:10:209:57 | [match(false)] ...... | no-match | | variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:55:209:56 | a5 | match | -| variables.rs:209:55:209:56 | a5 | variables.rs:209:10:209:57 | [match(true)] ... \| ... | match | +| variables.rs:209:55:209:56 | a5 | variables.rs:209:10:209:57 | [match(true)] ...... | match | | variables.rs:209:62:209:83 | TupleStructPat | variables.rs:209:81:209:82 | a5 | match | -| variables.rs:209:81:209:82 | a5 | variables.rs:209:9:209:83 | [match(true)] ... \| ... | match | +| variables.rs:209:81:209:82 | a5 | variables.rs:209:9:209:83 | [match(true)] ...... | match | | variables.rs:210:16:210:24 | print_i64 | variables.rs:210:26:210:27 | a5 | | -| variables.rs:210:16:210:28 | print_i64(...) | variables.rs:208:5:211:5 | match ... { ... } | | +| variables.rs:210:16:210:28 | print_i64(...) | variables.rs:208:5:211:5 | match tv { ... } | | | variables.rs:210:26:210:27 | a5 | variables.rs:210:16:210:28 | print_i64(...) | | -| variables.rs:212:5:215:5 | match ... { ... } | variables.rs:202:21:216:1 | { ... } | | +| variables.rs:212:5:215:5 | match tv { ... } | variables.rs:202:21:216:1 | { ... } | | | variables.rs:212:11:212:12 | tv | variables.rs:213:9:213:30 | TupleStructPat | | | variables.rs:213:9:213:30 | TupleStructPat | variables.rs:213:28:213:29 | a6 | match | | variables.rs:213:9:213:30 | TupleStructPat | variables.rs:213:35:213:57 | TupleStructPat | no-match | -| variables.rs:213:9:213:83 | [match(true)] ... \| ... | variables.rs:214:16:214:24 | print_i64 | match | -| variables.rs:213:28:213:29 | a6 | variables.rs:213:9:213:83 | [match(true)] ... \| ... | match | +| variables.rs:213:9:213:83 | [match(true)] ...... | variables.rs:214:16:214:24 | print_i64 | match | +| variables.rs:213:28:213:29 | a6 | variables.rs:213:9:213:83 | [match(true)] ...... | match | | variables.rs:213:35:213:57 | TupleStructPat | variables.rs:213:55:213:56 | a6 | match | | variables.rs:213:35:213:57 | TupleStructPat | variables.rs:213:61:213:82 | TupleStructPat | no-match | -| variables.rs:213:35:213:82 | [match(true)] ... \| ... | variables.rs:213:9:213:83 | [match(true)] ... \| ... | match | -| variables.rs:213:55:213:56 | a6 | variables.rs:213:35:213:82 | [match(true)] ... \| ... | match | +| variables.rs:213:35:213:82 | [match(true)] ...... | variables.rs:213:9:213:83 | [match(true)] ...... | match | +| variables.rs:213:55:213:56 | a6 | variables.rs:213:35:213:82 | [match(true)] ...... | match | | variables.rs:213:61:213:82 | TupleStructPat | variables.rs:213:80:213:81 | a6 | match | -| variables.rs:213:80:213:81 | a6 | variables.rs:213:35:213:82 | [match(true)] ... \| ... | match | +| variables.rs:213:80:213:81 | a6 | variables.rs:213:35:213:82 | [match(true)] ...... | match | | variables.rs:214:16:214:24 | print_i64 | variables.rs:214:26:214:27 | a6 | | -| variables.rs:214:16:214:28 | print_i64(...) | variables.rs:212:5:215:5 | match ... { ... } | | +| variables.rs:214:16:214:28 | print_i64(...) | variables.rs:212:5:215:5 | match tv { ... } | | | variables.rs:214:26:214:27 | a6 | variables.rs:214:16:214:28 | print_i64(...) | | -| variables.rs:218:1:226:1 | enter fn match_pattern7 | variables.rs:219:5:219:34 | let either = ... | | +| variables.rs:218:1:226:1 | enter fn match_pattern7 | variables.rs:219:5:219:34 | let ... = ... | | | variables.rs:218:1:226:1 | exit fn match_pattern7 (normal) | variables.rs:218:1:226:1 | exit fn match_pattern7 | | | variables.rs:218:21:226:1 | { ... } | variables.rs:218:1:226:1 | exit fn match_pattern7 (normal) | | -| variables.rs:219:5:219:34 | let either = ... | variables.rs:219:18:219:29 | Either::Left | | +| variables.rs:219:5:219:34 | let ... = ... | variables.rs:219:18:219:29 | Either::Left | | | variables.rs:219:9:219:14 | either | variables.rs:220:11:220:16 | either | match | | variables.rs:219:18:219:29 | Either::Left | variables.rs:219:31:219:32 | 32 | | | variables.rs:219:18:219:33 | Either::Left(...) | variables.rs:219:9:219:14 | either | | | variables.rs:219:31:219:32 | 32 | variables.rs:219:18:219:33 | Either::Left(...) | | -| variables.rs:220:5:225:5 | match ... { ... } | variables.rs:218:21:226:1 | { ... } | | +| variables.rs:220:5:225:5 | match either { ... } | variables.rs:218:21:226:1 | { ... } | | | variables.rs:220:11:220:16 | either | variables.rs:221:9:221:24 | TupleStructPat | | | variables.rs:221:9:221:24 | TupleStructPat | variables.rs:221:22:221:23 | a7 | match | | variables.rs:221:9:221:24 | TupleStructPat | variables.rs:221:28:221:44 | TupleStructPat | no-match | -| variables.rs:221:9:221:44 | [match(false)] ... \| ... | variables.rs:224:9:224:9 | _ | no-match | -| variables.rs:221:9:221:44 | [match(true)] ... \| ... | variables.rs:222:16:222:17 | a7 | match | -| variables.rs:221:22:221:23 | a7 | variables.rs:221:9:221:44 | [match(true)] ... \| ... | match | -| variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:9:221:44 | [match(false)] ... \| ... | no-match | +| variables.rs:221:9:221:44 | [match(false)] ...... | variables.rs:224:9:224:9 | _ | no-match | +| variables.rs:221:9:221:44 | [match(true)] ...... | variables.rs:222:16:222:17 | a7 | match | +| variables.rs:221:22:221:23 | a7 | variables.rs:221:9:221:44 | [match(true)] ...... | match | +| variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:9:221:44 | [match(false)] ...... | no-match | | variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:42:221:43 | a7 | match | -| variables.rs:221:42:221:43 | a7 | variables.rs:221:9:221:44 | [match(true)] ... \| ... | match | +| variables.rs:221:42:221:43 | a7 | variables.rs:221:9:221:44 | [match(true)] ...... | match | | variables.rs:222:16:222:17 | a7 | variables.rs:222:21:222:21 | 0 | | | variables.rs:222:16:222:21 | ... > ... | variables.rs:223:16:223:24 | print_i64 | true | | variables.rs:222:16:222:21 | ... > ... | variables.rs:224:9:224:9 | _ | false | | variables.rs:222:21:222:21 | 0 | variables.rs:222:16:222:21 | ... > ... | | | variables.rs:223:16:223:24 | print_i64 | variables.rs:223:26:223:27 | a7 | | -| variables.rs:223:16:223:28 | print_i64(...) | variables.rs:220:5:225:5 | match ... { ... } | | +| variables.rs:223:16:223:28 | print_i64(...) | variables.rs:220:5:225:5 | match either { ... } | | | variables.rs:223:26:223:27 | a7 | variables.rs:223:16:223:28 | print_i64(...) | | | variables.rs:224:9:224:9 | _ | variables.rs:224:14:224:15 | TupleExpr | match | -| variables.rs:224:14:224:15 | TupleExpr | variables.rs:220:5:225:5 | match ... { ... } | | -| variables.rs:228:1:243:1 | enter fn match_pattern8 | variables.rs:229:5:229:34 | let either = ... | | +| variables.rs:224:14:224:15 | TupleExpr | variables.rs:220:5:225:5 | match either { ... } | | +| variables.rs:228:1:243:1 | enter fn match_pattern8 | variables.rs:229:5:229:34 | let ... = ... | | | variables.rs:228:1:243:1 | exit fn match_pattern8 (normal) | variables.rs:228:1:243:1 | exit fn match_pattern8 | | | variables.rs:228:21:243:1 | { ... } | variables.rs:228:1:243:1 | exit fn match_pattern8 (normal) | | -| variables.rs:229:5:229:34 | let either = ... | variables.rs:229:18:229:29 | Either::Left | | +| variables.rs:229:5:229:34 | let ... = ... | variables.rs:229:18:229:29 | Either::Left | | | variables.rs:229:9:229:14 | either | variables.rs:231:11:231:16 | either | match | | variables.rs:229:18:229:29 | Either::Left | variables.rs:229:31:229:32 | 32 | | | variables.rs:229:18:229:33 | Either::Left(...) | variables.rs:229:9:229:14 | either | | | variables.rs:229:31:229:32 | 32 | variables.rs:229:18:229:33 | Either::Left(...) | | -| variables.rs:231:5:242:5 | match ... { ... } | variables.rs:228:21:243:1 | { ... } | | +| variables.rs:231:5:242:5 | match either { ... } | variables.rs:228:21:243:1 | { ... } | | | variables.rs:231:11:231:16 | either | variables.rs:233:14:233:30 | TupleStructPat | | | variables.rs:232:9:233:52 | [match(true)] e | variables.rs:235:13:235:27 | ExprStmt | match | | variables.rs:233:14:233:30 | TupleStructPat | variables.rs:233:27:233:29 | a11 | match | | variables.rs:233:14:233:30 | TupleStructPat | variables.rs:233:34:233:51 | TupleStructPat | no-match | -| variables.rs:233:14:233:51 | [match(false)] ... \| ... | variables.rs:241:9:241:9 | _ | no-match | -| variables.rs:233:14:233:51 | [match(true)] ... \| ... | variables.rs:232:9:233:52 | [match(true)] e | match | -| variables.rs:233:27:233:29 | a11 | variables.rs:233:14:233:51 | [match(true)] ... \| ... | match | -| variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:14:233:51 | [match(false)] ... \| ... | no-match | +| variables.rs:233:14:233:51 | [match(false)] ...... | variables.rs:241:9:241:9 | _ | no-match | +| variables.rs:233:14:233:51 | [match(true)] ...... | variables.rs:232:9:233:52 | [match(true)] e | match | +| variables.rs:233:27:233:29 | a11 | variables.rs:233:14:233:51 | [match(true)] ...... | match | +| variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:14:233:51 | [match(false)] ...... | no-match | | variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:48:233:50 | a11 | match | -| variables.rs:233:48:233:50 | a11 | variables.rs:233:14:233:51 | [match(true)] ... \| ... | match | -| variables.rs:234:12:240:9 | { ... } | variables.rs:231:5:242:5 | match ... { ... } | | +| variables.rs:233:48:233:50 | a11 | variables.rs:233:14:233:51 | [match(true)] ...... | match | +| variables.rs:234:12:240:9 | { ... } | variables.rs:231:5:242:5 | match either { ... } | | | variables.rs:235:13:235:21 | print_i64 | variables.rs:235:23:235:25 | a11 | | -| variables.rs:235:13:235:26 | print_i64(...) | variables.rs:236:16:237:15 | let TupleStructPat = ... | | +| variables.rs:235:13:235:26 | print_i64(...) | variables.rs:236:16:237:15 | let ... = e | | | variables.rs:235:13:235:27 | ExprStmt | variables.rs:235:13:235:21 | print_i64 | | | variables.rs:235:23:235:25 | a11 | variables.rs:235:13:235:26 | print_i64(...) | | -| variables.rs:236:13:239:13 | if ... { ... } | variables.rs:234:12:240:9 | { ... } | | -| variables.rs:236:16:237:15 | let TupleStructPat = ... | variables.rs:237:15:237:15 | e | | -| variables.rs:236:20:236:36 | TupleStructPat | variables.rs:236:13:239:13 | if ... { ... } | no-match | +| variables.rs:236:13:239:13 | if ... {...} | variables.rs:234:12:240:9 | { ... } | | +| variables.rs:236:16:237:15 | let ... = e | variables.rs:237:15:237:15 | e | | +| variables.rs:236:20:236:36 | TupleStructPat | variables.rs:236:13:239:13 | if ... {...} | no-match | | variables.rs:236:20:236:36 | TupleStructPat | variables.rs:236:33:236:35 | a12 | match | | variables.rs:236:33:236:35 | a12 | variables.rs:238:17:238:32 | ExprStmt | match | | variables.rs:237:15:237:15 | e | variables.rs:236:20:236:36 | TupleStructPat | | -| variables.rs:237:17:239:13 | { ... } | variables.rs:236:13:239:13 | if ... { ... } | | +| variables.rs:237:17:239:13 | { ... } | variables.rs:236:13:239:13 | if ... {...} | | | variables.rs:238:17:238:25 | print_i64 | variables.rs:238:28:238:30 | a12 | | | variables.rs:238:17:238:31 | print_i64(...) | variables.rs:237:17:239:13 | { ... } | | | variables.rs:238:17:238:32 | ExprStmt | variables.rs:238:17:238:25 | print_i64 | | | variables.rs:238:27:238:30 | * ... | variables.rs:238:17:238:31 | print_i64(...) | | | variables.rs:238:28:238:30 | a12 | variables.rs:238:27:238:30 | * ... | | | variables.rs:241:9:241:9 | _ | variables.rs:241:14:241:15 | TupleExpr | match | -| variables.rs:241:14:241:15 | TupleExpr | variables.rs:231:5:242:5 | match ... { ... } | | -| variables.rs:252:1:258:1 | enter fn match_pattern9 | variables.rs:253:5:253:36 | let fv = ... | | +| variables.rs:241:14:241:15 | TupleExpr | variables.rs:231:5:242:5 | match either { ... } | | +| variables.rs:252:1:258:1 | enter fn match_pattern9 | variables.rs:253:5:253:36 | let ... = ... | | | variables.rs:252:1:258:1 | exit fn match_pattern9 (normal) | variables.rs:252:1:258:1 | exit fn match_pattern9 | | | variables.rs:252:21:258:1 | { ... } | variables.rs:252:1:258:1 | exit fn match_pattern9 (normal) | | -| variables.rs:253:5:253:36 | let fv = ... | variables.rs:253:14:253:31 | FourValued::Second | | +| variables.rs:253:5:253:36 | let ... = ... | variables.rs:253:14:253:31 | FourValued::Second | | | variables.rs:253:9:253:10 | fv | variables.rs:254:11:254:12 | fv | match | | variables.rs:253:14:253:31 | FourValued::Second | variables.rs:253:33:253:34 | 62 | | | variables.rs:253:14:253:35 | FourValued::Second(...) | variables.rs:253:9:253:10 | fv | | | variables.rs:253:33:253:34 | 62 | variables.rs:253:14:253:35 | FourValued::Second(...) | | -| variables.rs:254:5:257:5 | match ... { ... } | variables.rs:252:21:258:1 | { ... } | | +| variables.rs:254:5:257:5 | match fv { ... } | variables.rs:252:21:258:1 | { ... } | | | variables.rs:254:11:254:12 | fv | variables.rs:255:9:255:30 | TupleStructPat | | | variables.rs:255:9:255:30 | TupleStructPat | variables.rs:255:27:255:29 | a13 | match | | variables.rs:255:9:255:30 | TupleStructPat | variables.rs:255:35:255:57 | TupleStructPat | no-match | -| variables.rs:255:9:255:109 | [match(true)] ... \| ... | variables.rs:256:16:256:24 | print_i64 | match | -| variables.rs:255:27:255:29 | a13 | variables.rs:255:9:255:109 | [match(true)] ... \| ... | match | +| variables.rs:255:9:255:109 | [match(true)] ......... | variables.rs:256:16:256:24 | print_i64 | match | +| variables.rs:255:27:255:29 | a13 | variables.rs:255:9:255:109 | [match(true)] ......... | match | | variables.rs:255:35:255:57 | TupleStructPat | variables.rs:255:54:255:56 | a13 | match | | variables.rs:255:35:255:57 | TupleStructPat | variables.rs:255:61:255:82 | TupleStructPat | no-match | -| variables.rs:255:35:255:82 | [match(false)] ... \| ... | variables.rs:255:87:255:109 | TupleStructPat | no-match | -| variables.rs:255:35:255:82 | [match(true)] ... \| ... | variables.rs:255:9:255:109 | [match(true)] ... \| ... | match | -| variables.rs:255:54:255:56 | a13 | variables.rs:255:35:255:82 | [match(true)] ... \| ... | match | -| variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:35:255:82 | [match(false)] ... \| ... | no-match | +| variables.rs:255:35:255:82 | [match(false)] ...... | variables.rs:255:87:255:109 | TupleStructPat | no-match | +| variables.rs:255:35:255:82 | [match(true)] ...... | variables.rs:255:9:255:109 | [match(true)] ......... | match | +| variables.rs:255:54:255:56 | a13 | variables.rs:255:35:255:82 | [match(true)] ...... | match | +| variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:35:255:82 | [match(false)] ...... | no-match | | variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:79:255:81 | a13 | match | -| variables.rs:255:79:255:81 | a13 | variables.rs:255:35:255:82 | [match(true)] ... \| ... | match | +| variables.rs:255:79:255:81 | a13 | variables.rs:255:35:255:82 | [match(true)] ...... | match | | variables.rs:255:87:255:109 | TupleStructPat | variables.rs:255:106:255:108 | a13 | match | -| variables.rs:255:106:255:108 | a13 | variables.rs:255:9:255:109 | [match(true)] ... \| ... | match | +| variables.rs:255:106:255:108 | a13 | variables.rs:255:9:255:109 | [match(true)] ......... | match | | variables.rs:256:16:256:24 | print_i64 | variables.rs:256:26:256:28 | a13 | | -| variables.rs:256:16:256:29 | print_i64(...) | variables.rs:254:5:257:5 | match ... { ... } | | +| variables.rs:256:16:256:29 | print_i64(...) | variables.rs:254:5:257:5 | match fv { ... } | | | variables.rs:256:26:256:28 | a13 | variables.rs:256:16:256:29 | print_i64(...) | | | variables.rs:260:1:269:1 | enter fn param_pattern1 | variables.rs:261:5:261:6 | a8 | | | variables.rs:260:1:269:1 | exit fn param_pattern1 (normal) | variables.rs:260:1:269:1 | exit fn param_pattern1 | | -| variables.rs:261:5:261:6 | a8 | variables.rs:261:5:261:12 | a8: RefType | match | -| variables.rs:261:5:261:12 | a8: RefType | variables.rs:262:5:265:5 | TuplePat | | +| variables.rs:261:5:261:6 | a8 | variables.rs:261:5:261:12 | ...: ... | match | +| variables.rs:261:5:261:12 | ...: ... | variables.rs:262:5:265:5 | TuplePat | | | variables.rs:262:5:265:5 | TuplePat | variables.rs:263:9:263:10 | b3 | match | -| variables.rs:262:5:265:19 | TuplePat: TupleType | variables.rs:266:5:266:18 | ExprStmt | | +| variables.rs:262:5:265:19 | ...: ... | variables.rs:266:5:266:18 | ExprStmt | | | variables.rs:263:9:263:10 | b3 | variables.rs:264:9:264:10 | c1 | match | -| variables.rs:264:9:264:10 | c1 | variables.rs:262:5:265:19 | TuplePat: TupleType | match | +| variables.rs:264:9:264:10 | c1 | variables.rs:262:5:265:19 | ...: ... | match | | variables.rs:265:28:269:1 | { ... } | variables.rs:260:1:269:1 | exit fn param_pattern1 (normal) | | | variables.rs:266:5:266:13 | print_str | variables.rs:266:15:266:16 | a8 | | | variables.rs:266:5:266:17 | print_str(...) | variables.rs:267:5:267:18 | ExprStmt | | @@ -584,22 +584,22 @@ edges | variables.rs:268:15:268:16 | c1 | variables.rs:268:5:268:17 | print_str(...) | | | variables.rs:271:1:275:1 | enter fn param_pattern2 | variables.rs:272:6:272:21 | TupleStructPat | | | variables.rs:271:1:275:1 | exit fn param_pattern2 (normal) | variables.rs:271:1:275:1 | exit fn param_pattern2 | | -| variables.rs:272:5:272:50 | (...): Either | variables.rs:274:5:274:18 | ExprStmt | | +| variables.rs:272:5:272:50 | ...: Either | variables.rs:274:5:274:18 | ExprStmt | | | variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:19:272:20 | a9 | match | | variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:25:272:41 | TupleStructPat | no-match | -| variables.rs:272:6:272:41 | [match(true)] ... \| ... | variables.rs:272:5:272:50 | (...): Either | match | -| variables.rs:272:19:272:20 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | +| variables.rs:272:6:272:41 | [match(true)] ...... | variables.rs:272:5:272:50 | ...: Either | match | +| variables.rs:272:19:272:20 | a9 | variables.rs:272:6:272:41 | [match(true)] ...... | match | | variables.rs:272:25:272:41 | TupleStructPat | variables.rs:272:39:272:40 | a9 | match | -| variables.rs:272:39:272:40 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | +| variables.rs:272:39:272:40 | a9 | variables.rs:272:6:272:41 | [match(true)] ...... | match | | variables.rs:273:9:275:1 | { ... } | variables.rs:271:1:275:1 | exit fn param_pattern2 (normal) | | | variables.rs:274:5:274:13 | print_i64 | variables.rs:274:15:274:16 | a9 | | | variables.rs:274:5:274:17 | print_i64(...) | variables.rs:273:9:275:1 | { ... } | | | variables.rs:274:5:274:18 | ExprStmt | variables.rs:274:5:274:13 | print_i64 | | | variables.rs:274:15:274:16 | a9 | variables.rs:274:5:274:17 | print_i64(...) | | -| variables.rs:277:1:312:1 | enter fn destruct_assignment | variables.rs:278:5:282:18 | let TuplePat = ... | | +| variables.rs:277:1:312:1 | enter fn destruct_assignment | variables.rs:278:5:282:18 | let ... = ... | | | variables.rs:277:1:312:1 | exit fn destruct_assignment (normal) | variables.rs:277:1:312:1 | exit fn destruct_assignment | | | variables.rs:277:26:312:1 | { ... } | variables.rs:277:1:312:1 | exit fn destruct_assignment (normal) | | -| variables.rs:278:5:282:18 | let TuplePat = ... | variables.rs:282:10:282:10 | 1 | | +| variables.rs:278:5:282:18 | let ... = ... | variables.rs:282:10:282:10 | 1 | | | variables.rs:278:9:282:5 | TuplePat | variables.rs:279:9:279:15 | a10 | match | | variables.rs:279:9:279:15 | a10 | variables.rs:280:9:280:14 | b4 | match | | variables.rs:280:9:280:14 | b4 | variables.rs:281:9:281:14 | c2 | match | @@ -667,18 +667,18 @@ edges | variables.rs:311:5:311:17 | print_i64(...) | variables.rs:277:26:312:1 | { ... } | | | variables.rs:311:5:311:18 | ExprStmt | variables.rs:311:5:311:13 | print_i64 | | | variables.rs:311:15:311:16 | b4 | variables.rs:311:5:311:17 | print_i64(...) | | -| variables.rs:314:1:329:1 | enter fn closure_variable | variables.rs:315:5:317:10 | let example_closure = ... | | +| variables.rs:314:1:329:1 | enter fn closure_variable | variables.rs:315:5:317:10 | let ... = ... | | | variables.rs:314:1:329:1 | exit fn closure_variable (normal) | variables.rs:314:1:329:1 | exit fn closure_variable | | | variables.rs:314:23:329:1 | { ... } | variables.rs:314:1:329:1 | exit fn closure_variable (normal) | | -| variables.rs:315:5:317:10 | let example_closure = ... | variables.rs:316:9:317:9 | \|...\| ... | | -| variables.rs:315:9:315:23 | example_closure | variables.rs:318:5:319:27 | let n1 = ... | match | -| variables.rs:316:9:317:9 | \|...\| ... | variables.rs:315:9:315:23 | example_closure | | -| variables.rs:316:9:317:9 | enter \|...\| ... | variables.rs:316:10:316:10 | x | | -| variables.rs:316:9:317:9 | exit \|...\| ... (normal) | variables.rs:316:9:317:9 | exit \|...\| ... | | -| variables.rs:316:10:316:10 | x | variables.rs:316:10:316:15 | x: i64 | match | -| variables.rs:316:10:316:15 | x: i64 | variables.rs:317:9:317:9 | x | | -| variables.rs:317:9:317:9 | x | variables.rs:316:9:317:9 | exit \|...\| ... (normal) | | -| variables.rs:318:5:319:27 | let n1 = ... | variables.rs:319:9:319:23 | example_closure | | +| variables.rs:315:5:317:10 | let ... = ... | variables.rs:316:9:317:9 | \|...\| x | | +| variables.rs:315:9:315:23 | example_closure | variables.rs:318:5:319:27 | let ... = ... | match | +| variables.rs:316:9:317:9 | \|...\| x | variables.rs:315:9:315:23 | example_closure | | +| variables.rs:316:9:317:9 | enter \|...\| x | variables.rs:316:10:316:10 | x | | +| variables.rs:316:9:317:9 | exit \|...\| x (normal) | variables.rs:316:9:317:9 | exit \|...\| x | | +| variables.rs:316:10:316:10 | x | variables.rs:316:10:316:15 | ...: i64 | match | +| variables.rs:316:10:316:15 | ...: i64 | variables.rs:317:9:317:9 | x | | +| variables.rs:317:9:317:9 | x | variables.rs:316:9:317:9 | exit \|...\| x (normal) | | +| variables.rs:318:5:319:27 | let ... = ... | variables.rs:319:9:319:23 | example_closure | | | variables.rs:318:9:318:10 | n1 | variables.rs:320:5:320:18 | ExprStmt | match | | variables.rs:319:9:319:23 | example_closure | variables.rs:319:25:319:25 | 5 | | | variables.rs:319:9:319:26 | example_closure(...) | variables.rs:318:9:318:10 | n1 | | @@ -688,17 +688,17 @@ edges | variables.rs:320:5:320:18 | ExprStmt | variables.rs:320:5:320:13 | print_i64 | | | variables.rs:320:15:320:16 | n1 | variables.rs:320:5:320:17 | print_i64(...) | | | variables.rs:322:5:322:22 | immutable_variable | variables.rs:322:5:322:24 | immutable_variable(...) | | -| variables.rs:322:5:322:24 | immutable_variable(...) | variables.rs:323:5:325:10 | let immutable_variable = ... | | +| variables.rs:322:5:322:24 | immutable_variable(...) | variables.rs:323:5:325:10 | let ... = ... | | | variables.rs:322:5:322:25 | ExprStmt | variables.rs:322:5:322:22 | immutable_variable | | -| variables.rs:323:5:325:10 | let immutable_variable = ... | variables.rs:324:9:325:9 | \|...\| ... | | -| variables.rs:323:9:323:26 | immutable_variable | variables.rs:326:5:327:30 | let n2 = ... | match | -| variables.rs:324:9:325:9 | \|...\| ... | variables.rs:323:9:323:26 | immutable_variable | | -| variables.rs:324:9:325:9 | enter \|...\| ... | variables.rs:324:10:324:10 | x | | -| variables.rs:324:9:325:9 | exit \|...\| ... (normal) | variables.rs:324:9:325:9 | exit \|...\| ... | | -| variables.rs:324:10:324:10 | x | variables.rs:324:10:324:15 | x: i64 | match | -| variables.rs:324:10:324:15 | x: i64 | variables.rs:325:9:325:9 | x | | -| variables.rs:325:9:325:9 | x | variables.rs:324:9:325:9 | exit \|...\| ... (normal) | | -| variables.rs:326:5:327:30 | let n2 = ... | variables.rs:327:9:327:26 | immutable_variable | | +| variables.rs:323:5:325:10 | let ... = ... | variables.rs:324:9:325:9 | \|...\| x | | +| variables.rs:323:9:323:26 | immutable_variable | variables.rs:326:5:327:30 | let ... = ... | match | +| variables.rs:324:9:325:9 | \|...\| x | variables.rs:323:9:323:26 | immutable_variable | | +| variables.rs:324:9:325:9 | enter \|...\| x | variables.rs:324:10:324:10 | x | | +| variables.rs:324:9:325:9 | exit \|...\| x (normal) | variables.rs:324:9:325:9 | exit \|...\| x | | +| variables.rs:324:10:324:10 | x | variables.rs:324:10:324:15 | ...: i64 | match | +| variables.rs:324:10:324:15 | ...: i64 | variables.rs:325:9:325:9 | x | | +| variables.rs:325:9:325:9 | x | variables.rs:324:9:325:9 | exit \|...\| x (normal) | | +| variables.rs:326:5:327:30 | let ... = ... | variables.rs:327:9:327:26 | immutable_variable | | | variables.rs:326:9:326:10 | n2 | variables.rs:328:5:328:18 | ExprStmt | match | | variables.rs:327:9:327:26 | immutable_variable | variables.rs:327:28:327:28 | 6 | | | variables.rs:327:9:327:29 | immutable_variable(...) | variables.rs:326:9:326:10 | n2 | | @@ -707,18 +707,18 @@ edges | variables.rs:328:5:328:17 | print_i64(...) | variables.rs:314:23:329:1 | { ... } | | | variables.rs:328:5:328:18 | ExprStmt | variables.rs:328:5:328:13 | print_i64 | | | variables.rs:328:15:328:16 | n2 | variables.rs:328:5:328:17 | print_i64(...) | | -| variables.rs:331:1:338:1 | enter fn for_variable | variables.rs:332:5:332:42 | let v = ... | | +| variables.rs:331:1:338:1 | enter fn for_variable | variables.rs:332:5:332:42 | let ... = ... | | | variables.rs:331:1:338:1 | exit fn for_variable (normal) | variables.rs:331:1:338:1 | exit fn for_variable | | | variables.rs:331:19:338:1 | { ... } | variables.rs:331:1:338:1 | exit fn for_variable (normal) | | -| variables.rs:332:5:332:42 | let v = ... | variables.rs:332:15:332:22 | "apples" | | +| variables.rs:332:5:332:42 | let ... = ... | variables.rs:332:15:332:22 | "apples" | | | variables.rs:332:9:332:9 | v | variables.rs:335:12:335:12 | v | match | | variables.rs:332:13:332:41 | &... | variables.rs:332:9:332:9 | v | | | variables.rs:332:14:332:41 | [...] | variables.rs:332:13:332:41 | &... | | | variables.rs:332:15:332:22 | "apples" | variables.rs:332:25:332:30 | "cake" | | | variables.rs:332:25:332:30 | "cake" | variables.rs:332:33:332:40 | "coffee" | | | variables.rs:332:33:332:40 | "coffee" | variables.rs:332:14:332:41 | [...] | | -| variables.rs:334:5:337:5 | ForExpr | variables.rs:331:19:338:1 | { ... } | | -| variables.rs:334:9:334:12 | text | variables.rs:334:5:337:5 | ForExpr | no-match | +| variables.rs:334:5:337:5 | for ... in ... { ... } | variables.rs:331:19:338:1 | { ... } | | +| variables.rs:334:9:334:12 | text | variables.rs:334:5:337:5 | for ... in ... { ... } | no-match | | variables.rs:334:9:334:12 | text | variables.rs:336:9:336:24 | ExprStmt | match | | variables.rs:335:12:335:12 | v | variables.rs:334:9:334:12 | text | | | variables.rs:335:14:337:5 | { ... } | variables.rs:334:9:334:12 | text | | @@ -726,10 +726,10 @@ edges | variables.rs:336:9:336:23 | print_str(...) | variables.rs:335:14:337:5 | { ... } | | | variables.rs:336:9:336:24 | ExprStmt | variables.rs:336:9:336:17 | print_str | | | variables.rs:336:19:336:22 | text | variables.rs:336:9:336:23 | print_str(...) | | -| variables.rs:340:1:346:1 | enter fn add_assign | variables.rs:341:5:341:18 | let a = ... | | +| variables.rs:340:1:346:1 | enter fn add_assign | variables.rs:341:5:341:18 | let ... = 0 | | | variables.rs:340:1:346:1 | exit fn add_assign (normal) | variables.rs:340:1:346:1 | exit fn add_assign | | | variables.rs:340:17:346:1 | { ... } | variables.rs:340:1:346:1 | exit fn add_assign (normal) | | -| variables.rs:341:5:341:18 | let a = ... | variables.rs:341:17:341:17 | 0 | | +| variables.rs:341:5:341:18 | let ... = 0 | variables.rs:341:17:341:17 | 0 | | | variables.rs:341:9:341:13 | a | variables.rs:342:5:342:11 | ExprStmt | match | | variables.rs:341:17:341:17 | 0 | variables.rs:341:9:341:13 | a | | | variables.rs:342:5:342:5 | a | variables.rs:342:10:342:10 | 1 | | @@ -742,23 +742,23 @@ edges | variables.rs:343:15:343:15 | a | variables.rs:343:5:343:16 | print_i64(...) | | | variables.rs:344:5:344:27 | ... .add_assign(...) | variables.rs:345:5:345:17 | ExprStmt | | | variables.rs:344:5:344:28 | ExprStmt | variables.rs:344:11:344:11 | a | | -| variables.rs:344:6:344:11 | &mut ... | variables.rs:344:25:344:26 | 10 | | -| variables.rs:344:11:344:11 | a | variables.rs:344:6:344:11 | &mut ... | | +| variables.rs:344:6:344:11 | &mut a | variables.rs:344:25:344:26 | 10 | | +| variables.rs:344:11:344:11 | a | variables.rs:344:6:344:11 | &mut a | | | variables.rs:344:25:344:26 | 10 | variables.rs:344:5:344:27 | ... .add_assign(...) | | | variables.rs:345:5:345:13 | print_i64 | variables.rs:345:15:345:15 | a | | | variables.rs:345:5:345:16 | print_i64(...) | variables.rs:340:17:346:1 | { ... } | | | variables.rs:345:5:345:17 | ExprStmt | variables.rs:345:5:345:13 | print_i64 | | | variables.rs:345:15:345:15 | a | variables.rs:345:5:345:16 | print_i64(...) | | -| variables.rs:348:1:354:1 | enter fn mutate | variables.rs:349:5:349:18 | let i = ... | | +| variables.rs:348:1:354:1 | enter fn mutate | variables.rs:349:5:349:18 | let ... = 1 | | | variables.rs:348:1:354:1 | exit fn mutate (normal) | variables.rs:348:1:354:1 | exit fn mutate | | | variables.rs:348:13:354:1 | { ... } | variables.rs:348:1:354:1 | exit fn mutate (normal) | | -| variables.rs:349:5:349:18 | let i = ... | variables.rs:349:17:349:17 | 1 | | -| variables.rs:349:9:349:13 | i | variables.rs:350:5:351:15 | let ref_i = ... | match | +| variables.rs:349:5:349:18 | let ... = 1 | variables.rs:349:17:349:17 | 1 | | +| variables.rs:349:9:349:13 | i | variables.rs:350:5:351:15 | let ... = ... | match | | variables.rs:349:17:349:17 | 1 | variables.rs:349:9:349:13 | i | | -| variables.rs:350:5:351:15 | let ref_i = ... | variables.rs:351:14:351:14 | i | | +| variables.rs:350:5:351:15 | let ... = ... | variables.rs:351:14:351:14 | i | | | variables.rs:350:9:350:13 | ref_i | variables.rs:352:5:352:15 | ExprStmt | match | -| variables.rs:351:9:351:14 | &mut ... | variables.rs:350:9:350:13 | ref_i | | -| variables.rs:351:14:351:14 | i | variables.rs:351:9:351:14 | &mut ... | | +| variables.rs:351:9:351:14 | &mut i | variables.rs:350:9:350:13 | ref_i | | +| variables.rs:351:14:351:14 | i | variables.rs:351:9:351:14 | &mut i | | | variables.rs:352:5:352:10 | * ... | variables.rs:352:14:352:14 | 2 | | | variables.rs:352:5:352:14 | ... = ... | variables.rs:353:5:353:17 | ExprStmt | | | variables.rs:352:5:352:15 | ExprStmt | variables.rs:352:6:352:10 | ref_i | | @@ -770,8 +770,8 @@ edges | variables.rs:353:15:353:15 | i | variables.rs:353:5:353:16 | print_i64(...) | | | variables.rs:356:1:361:1 | enter fn mutate_param | variables.rs:356:17:356:17 | x | | | variables.rs:356:1:361:1 | exit fn mutate_param (normal) | variables.rs:356:1:361:1 | exit fn mutate_param | | -| variables.rs:356:17:356:17 | x | variables.rs:356:17:356:28 | x: RefType | match | -| variables.rs:356:17:356:28 | x: RefType | variables.rs:357:5:359:11 | ExprStmt | | +| variables.rs:356:17:356:17 | x | variables.rs:356:17:356:28 | ...: ... | match | +| variables.rs:356:17:356:28 | ...: ... | variables.rs:357:5:359:11 | ExprStmt | | | variables.rs:357:5:357:6 | * ... | variables.rs:358:10:358:10 | x | | | variables.rs:357:5:359:10 | ... = ... | variables.rs:360:5:360:13 | ExprStmt | | | variables.rs:357:5:359:11 | ExprStmt | variables.rs:357:6:357:6 | x | | @@ -781,15 +781,15 @@ edges | variables.rs:358:10:358:10 | x | variables.rs:358:9:358:10 | * ... | | | variables.rs:359:9:359:10 | * ... | variables.rs:358:9:359:10 | ... + ... | | | variables.rs:359:10:359:10 | x | variables.rs:359:9:359:10 | * ... | | -| variables.rs:360:5:360:12 | return ... | variables.rs:356:1:361:1 | exit fn mutate_param (normal) | return | +| variables.rs:360:5:360:12 | return x | variables.rs:356:1:361:1 | exit fn mutate_param (normal) | return | | variables.rs:360:5:360:13 | ExprStmt | variables.rs:360:12:360:12 | x | | -| variables.rs:360:12:360:12 | x | variables.rs:360:5:360:12 | return ... | | +| variables.rs:360:12:360:12 | x | variables.rs:360:5:360:12 | return x | | | variables.rs:363:1:369:1 | enter fn mutate_param2 | variables.rs:363:22:363:22 | x | | | variables.rs:363:1:369:1 | exit fn mutate_param2 (normal) | variables.rs:363:1:369:1 | exit fn mutate_param2 | | -| variables.rs:363:22:363:22 | x | variables.rs:363:22:363:36 | x: RefType | match | -| variables.rs:363:22:363:36 | x: RefType | variables.rs:363:39:363:39 | y | | -| variables.rs:363:39:363:39 | y | variables.rs:363:39:363:57 | y: RefType | match | -| variables.rs:363:39:363:57 | y: RefType | variables.rs:364:5:366:11 | ExprStmt | | +| variables.rs:363:22:363:22 | x | variables.rs:363:22:363:36 | ...: ... | match | +| variables.rs:363:22:363:36 | ...: ... | variables.rs:363:39:363:39 | y | | +| variables.rs:363:39:363:39 | y | variables.rs:363:39:363:57 | ...: ... | match | +| variables.rs:363:39:363:57 | ...: ... | variables.rs:364:5:366:11 | ExprStmt | | | variables.rs:363:60:369:1 | { ... } | variables.rs:363:1:369:1 | exit fn mutate_param2 (normal) | | | variables.rs:364:5:364:6 | * ... | variables.rs:365:10:365:10 | x | | | variables.rs:364:5:366:10 | ... = ... | variables.rs:367:5:368:10 | ExprStmt | | @@ -805,40 +805,40 @@ edges | variables.rs:367:5:368:10 | ExprStmt | variables.rs:367:6:367:6 | y | | | variables.rs:367:6:367:6 | y | variables.rs:367:5:367:6 | * ... | | | variables.rs:368:9:368:9 | x | variables.rs:367:5:368:9 | ... = ... | | -| variables.rs:371:1:389:1 | enter fn mutate_arg | variables.rs:372:5:372:18 | let x = ... | | +| variables.rs:371:1:389:1 | enter fn mutate_arg | variables.rs:372:5:372:18 | let ... = 2 | | | variables.rs:371:1:389:1 | exit fn mutate_arg (normal) | variables.rs:371:1:389:1 | exit fn mutate_arg | | | variables.rs:371:17:389:1 | { ... } | variables.rs:371:1:389:1 | exit fn mutate_arg (normal) | | -| variables.rs:372:5:372:18 | let x = ... | variables.rs:372:17:372:17 | 2 | | -| variables.rs:372:9:372:13 | x | variables.rs:373:5:374:29 | let y = ... | match | +| variables.rs:372:5:372:18 | let ... = 2 | variables.rs:372:17:372:17 | 2 | | +| variables.rs:372:9:372:13 | x | variables.rs:373:5:374:29 | let ... = ... | match | | variables.rs:372:17:372:17 | 2 | variables.rs:372:9:372:13 | x | | -| variables.rs:373:5:374:29 | let y = ... | variables.rs:374:9:374:20 | mutate_param | | +| variables.rs:373:5:374:29 | let ... = ... | variables.rs:374:9:374:20 | mutate_param | | | variables.rs:373:9:373:9 | y | variables.rs:375:5:375:12 | ExprStmt | match | | variables.rs:374:9:374:20 | mutate_param | variables.rs:374:27:374:27 | x | | | variables.rs:374:9:374:28 | mutate_param(...) | variables.rs:373:9:373:9 | y | | -| variables.rs:374:22:374:27 | &mut ... | variables.rs:374:9:374:28 | mutate_param(...) | | -| variables.rs:374:27:374:27 | x | variables.rs:374:22:374:27 | &mut ... | | +| variables.rs:374:22:374:27 | &mut x | variables.rs:374:9:374:28 | mutate_param(...) | | +| variables.rs:374:27:374:27 | x | variables.rs:374:22:374:27 | &mut x | | | variables.rs:375:5:375:6 | * ... | variables.rs:375:10:375:11 | 10 | | | variables.rs:375:5:375:11 | ... = ... | variables.rs:377:5:377:17 | ExprStmt | | | variables.rs:375:5:375:12 | ExprStmt | variables.rs:375:6:375:6 | y | | | variables.rs:375:6:375:6 | y | variables.rs:375:5:375:6 | * ... | | | variables.rs:375:10:375:11 | 10 | variables.rs:375:5:375:11 | ... = ... | | | variables.rs:377:5:377:13 | print_i64 | variables.rs:377:15:377:15 | x | | -| variables.rs:377:5:377:16 | print_i64(...) | variables.rs:379:5:379:18 | let z = ... | | +| variables.rs:377:5:377:16 | print_i64(...) | variables.rs:379:5:379:18 | let ... = 4 | | | variables.rs:377:5:377:17 | ExprStmt | variables.rs:377:5:377:13 | print_i64 | | | variables.rs:377:15:377:15 | x | variables.rs:377:5:377:16 | print_i64(...) | | -| variables.rs:379:5:379:18 | let z = ... | variables.rs:379:17:379:17 | 4 | | -| variables.rs:379:9:379:13 | z | variables.rs:380:5:381:20 | let w = ... | match | +| variables.rs:379:5:379:18 | let ... = 4 | variables.rs:379:17:379:17 | 4 | | +| variables.rs:379:9:379:13 | z | variables.rs:380:5:381:20 | let ... = ... | match | | variables.rs:379:17:379:17 | 4 | variables.rs:379:9:379:13 | z | | -| variables.rs:380:5:381:20 | let w = ... | variables.rs:381:19:381:19 | x | | +| variables.rs:380:5:381:20 | let ... = ... | variables.rs:381:19:381:19 | x | | | variables.rs:380:9:380:9 | w | variables.rs:382:5:385:6 | ExprStmt | match | | variables.rs:381:9:381:19 | &mut ... | variables.rs:380:9:380:9 | w | | -| variables.rs:381:14:381:19 | &mut ... | variables.rs:381:9:381:19 | &mut ... | | -| variables.rs:381:19:381:19 | x | variables.rs:381:14:381:19 | &mut ... | | +| variables.rs:381:14:381:19 | &mut x | variables.rs:381:9:381:19 | &mut ... | | +| variables.rs:381:19:381:19 | x | variables.rs:381:14:381:19 | &mut x | | | variables.rs:382:5:382:17 | mutate_param2 | variables.rs:383:14:383:14 | z | | | variables.rs:382:5:385:5 | mutate_param2(...) | variables.rs:386:5:386:13 | ExprStmt | | | variables.rs:382:5:385:6 | ExprStmt | variables.rs:382:5:382:17 | mutate_param2 | | -| variables.rs:383:9:383:14 | &mut ... | variables.rs:384:9:384:9 | w | | -| variables.rs:383:14:383:14 | z | variables.rs:383:9:383:14 | &mut ... | | +| variables.rs:383:9:383:14 | &mut z | variables.rs:384:9:384:9 | w | | +| variables.rs:383:14:383:14 | z | variables.rs:383:9:383:14 | &mut z | | | variables.rs:384:9:384:9 | w | variables.rs:382:5:385:5 | mutate_param2(...) | | | variables.rs:386:5:386:7 | * ... | variables.rs:386:11:386:12 | 11 | | | variables.rs:386:5:386:12 | ... = ... | variables.rs:388:5:388:17 | ExprStmt | | @@ -850,16 +850,16 @@ edges | variables.rs:388:5:388:16 | print_i64(...) | variables.rs:371:17:389:1 | { ... } | | | variables.rs:388:5:388:17 | ExprStmt | variables.rs:388:5:388:13 | print_i64 | | | variables.rs:388:15:388:15 | z | variables.rs:388:5:388:16 | print_i64(...) | | -| variables.rs:391:1:397:1 | enter fn alias | variables.rs:392:5:392:18 | let x = ... | | +| variables.rs:391:1:397:1 | enter fn alias | variables.rs:392:5:392:18 | let ... = 1 | | | variables.rs:391:1:397:1 | exit fn alias (normal) | variables.rs:391:1:397:1 | exit fn alias | | | variables.rs:391:12:397:1 | { ... } | variables.rs:391:1:397:1 | exit fn alias (normal) | | -| variables.rs:392:5:392:18 | let x = ... | variables.rs:392:17:392:17 | 1 | | -| variables.rs:392:9:392:13 | x | variables.rs:393:5:394:15 | let y = ... | match | +| variables.rs:392:5:392:18 | let ... = 1 | variables.rs:392:17:392:17 | 1 | | +| variables.rs:392:9:392:13 | x | variables.rs:393:5:394:15 | let ... = ... | match | | variables.rs:392:17:392:17 | 1 | variables.rs:392:9:392:13 | x | | -| variables.rs:393:5:394:15 | let y = ... | variables.rs:394:14:394:14 | x | | +| variables.rs:393:5:394:15 | let ... = ... | variables.rs:394:14:394:14 | x | | | variables.rs:393:9:393:9 | y | variables.rs:395:5:395:11 | ExprStmt | match | -| variables.rs:394:9:394:14 | &mut ... | variables.rs:393:9:393:9 | y | | -| variables.rs:394:14:394:14 | x | variables.rs:394:9:394:14 | &mut ... | | +| variables.rs:394:9:394:14 | &mut x | variables.rs:393:9:393:9 | y | | +| variables.rs:394:14:394:14 | x | variables.rs:394:9:394:14 | &mut x | | | variables.rs:395:5:395:6 | * ... | variables.rs:395:10:395:10 | 2 | | | variables.rs:395:5:395:10 | ... = ... | variables.rs:396:5:396:17 | ExprStmt | | | variables.rs:395:5:395:11 | ExprStmt | variables.rs:395:6:395:6 | y | | @@ -869,13 +869,13 @@ edges | variables.rs:396:5:396:16 | print_i64(...) | variables.rs:391:12:397:1 | { ... } | | | variables.rs:396:5:396:17 | ExprStmt | variables.rs:396:5:396:13 | print_i64 | | | variables.rs:396:15:396:15 | x | variables.rs:396:5:396:16 | print_i64(...) | | -| variables.rs:399:1:407:1 | enter fn capture_immut | variables.rs:400:5:400:16 | let x = ... | | +| variables.rs:399:1:407:1 | enter fn capture_immut | variables.rs:400:5:400:16 | let ... = 100 | | | variables.rs:399:1:407:1 | exit fn capture_immut (normal) | variables.rs:399:1:407:1 | exit fn capture_immut | | | variables.rs:399:20:407:1 | { ... } | variables.rs:399:1:407:1 | exit fn capture_immut (normal) | | -| variables.rs:400:5:400:16 | let x = ... | variables.rs:400:13:400:15 | 100 | | -| variables.rs:400:9:400:9 | x | variables.rs:402:5:404:6 | let cap = ... | match | +| variables.rs:400:5:400:16 | let ... = 100 | variables.rs:400:13:400:15 | 100 | | +| variables.rs:400:9:400:9 | x | variables.rs:402:5:404:6 | let ... = ... | match | | variables.rs:400:13:400:15 | 100 | variables.rs:400:9:400:9 | x | | -| variables.rs:402:5:404:6 | let cap = ... | variables.rs:402:15:404:5 | \|...\| ... | | +| variables.rs:402:5:404:6 | let ... = ... | variables.rs:402:15:404:5 | \|...\| ... | | | variables.rs:402:9:402:11 | cap | variables.rs:405:5:405:10 | ExprStmt | match | | variables.rs:402:15:404:5 | \|...\| ... | variables.rs:402:9:402:11 | cap | | | variables.rs:402:15:404:5 | enter \|...\| ... | variables.rs:403:9:403:21 | ExprStmt | | @@ -892,13 +892,13 @@ edges | variables.rs:406:5:406:16 | print_i64(...) | variables.rs:399:20:407:1 | { ... } | | | variables.rs:406:5:406:17 | ExprStmt | variables.rs:406:5:406:13 | print_i64 | | | variables.rs:406:15:406:15 | x | variables.rs:406:5:406:16 | print_i64(...) | | -| variables.rs:409:1:433:1 | enter fn capture_mut | variables.rs:410:5:410:18 | let x = ... | | +| variables.rs:409:1:433:1 | enter fn capture_mut | variables.rs:410:5:410:18 | let ... = 1 | | | variables.rs:409:1:433:1 | exit fn capture_mut (normal) | variables.rs:409:1:433:1 | exit fn capture_mut | | | variables.rs:409:18:433:1 | { ... } | variables.rs:409:1:433:1 | exit fn capture_mut (normal) | | -| variables.rs:410:5:410:18 | let x = ... | variables.rs:410:17:410:17 | 1 | | -| variables.rs:410:9:410:13 | x | variables.rs:412:5:414:6 | let closure1 = ... | match | +| variables.rs:410:5:410:18 | let ... = 1 | variables.rs:410:17:410:17 | 1 | | +| variables.rs:410:9:410:13 | x | variables.rs:412:5:414:6 | let ... = ... | match | | variables.rs:410:17:410:17 | 1 | variables.rs:410:9:410:13 | x | | -| variables.rs:412:5:414:6 | let closure1 = ... | variables.rs:412:20:414:5 | \|...\| ... | | +| variables.rs:412:5:414:6 | let ... = ... | variables.rs:412:20:414:5 | \|...\| ... | | | variables.rs:412:9:412:16 | closure1 | variables.rs:415:5:415:15 | ExprStmt | match | | variables.rs:412:20:414:5 | \|...\| ... | variables.rs:412:9:412:16 | closure1 | | | variables.rs:412:20:414:5 | enter \|...\| ... | variables.rs:413:9:413:21 | ExprStmt | | @@ -912,13 +912,13 @@ edges | variables.rs:415:5:415:14 | closure1(...) | variables.rs:416:5:416:17 | ExprStmt | | | variables.rs:415:5:415:15 | ExprStmt | variables.rs:415:5:415:12 | closure1 | | | variables.rs:416:5:416:13 | print_i64 | variables.rs:416:15:416:15 | x | | -| variables.rs:416:5:416:16 | print_i64(...) | variables.rs:418:5:418:18 | let y = ... | | +| variables.rs:416:5:416:16 | print_i64(...) | variables.rs:418:5:418:18 | let ... = 2 | | | variables.rs:416:5:416:17 | ExprStmt | variables.rs:416:5:416:13 | print_i64 | | | variables.rs:416:15:416:15 | x | variables.rs:416:5:416:16 | print_i64(...) | | -| variables.rs:418:5:418:18 | let y = ... | variables.rs:418:17:418:17 | 2 | | -| variables.rs:418:9:418:13 | y | variables.rs:420:5:422:6 | let closure2 = ... | match | +| variables.rs:418:5:418:18 | let ... = 2 | variables.rs:418:17:418:17 | 2 | | +| variables.rs:418:9:418:13 | y | variables.rs:420:5:422:6 | let ... = ... | match | | variables.rs:418:17:418:17 | 2 | variables.rs:418:9:418:13 | y | | -| variables.rs:420:5:422:6 | let closure2 = ... | variables.rs:420:24:422:5 | \|...\| ... | | +| variables.rs:420:5:422:6 | let ... = ... | variables.rs:420:24:422:5 | \|...\| ... | | | variables.rs:420:9:420:20 | closure2 | variables.rs:423:5:423:15 | ExprStmt | match | | variables.rs:420:24:422:5 | \|...\| ... | variables.rs:420:9:420:20 | closure2 | | | variables.rs:420:24:422:5 | enter \|...\| ... | variables.rs:421:9:421:14 | ExprStmt | | @@ -932,13 +932,13 @@ edges | variables.rs:423:5:423:14 | closure2(...) | variables.rs:424:5:424:17 | ExprStmt | | | variables.rs:423:5:423:15 | ExprStmt | variables.rs:423:5:423:12 | closure2 | | | variables.rs:424:5:424:13 | print_i64 | variables.rs:424:15:424:15 | y | | -| variables.rs:424:5:424:16 | print_i64(...) | variables.rs:426:5:426:18 | let z = ... | | +| variables.rs:424:5:424:16 | print_i64(...) | variables.rs:426:5:426:18 | let ... = 2 | | | variables.rs:424:5:424:17 | ExprStmt | variables.rs:424:5:424:13 | print_i64 | | | variables.rs:424:15:424:15 | y | variables.rs:424:5:424:16 | print_i64(...) | | -| variables.rs:426:5:426:18 | let z = ... | variables.rs:426:17:426:17 | 2 | | -| variables.rs:426:9:426:13 | z | variables.rs:428:5:430:6 | let closure3 = ... | match | +| variables.rs:426:5:426:18 | let ... = 2 | variables.rs:426:17:426:17 | 2 | | +| variables.rs:426:9:426:13 | z | variables.rs:428:5:430:6 | let ... = ... | match | | variables.rs:426:17:426:17 | 2 | variables.rs:426:9:426:13 | z | | -| variables.rs:428:5:430:6 | let closure3 = ... | variables.rs:428:24:430:5 | \|...\| ... | | +| variables.rs:428:5:430:6 | let ... = ... | variables.rs:428:24:430:5 | \|...\| ... | | | variables.rs:428:9:428:20 | closure3 | variables.rs:431:5:431:15 | ExprStmt | match | | variables.rs:428:24:430:5 | \|...\| ... | variables.rs:428:9:428:20 | closure3 | | | variables.rs:428:24:430:5 | enter \|...\| ... | variables.rs:429:9:429:24 | ExprStmt | | @@ -955,13 +955,13 @@ edges | variables.rs:432:5:432:16 | print_i64(...) | variables.rs:409:18:433:1 | { ... } | | | variables.rs:432:5:432:17 | ExprStmt | variables.rs:432:5:432:13 | print_i64 | | | variables.rs:432:15:432:15 | z | variables.rs:432:5:432:16 | print_i64(...) | | -| variables.rs:435:1:443:1 | enter fn async_block_capture | variables.rs:436:5:436:23 | let i = ... | | +| variables.rs:435:1:443:1 | enter fn async_block_capture | variables.rs:436:5:436:23 | let ... = 0 | | | variables.rs:435:1:443:1 | exit fn async_block_capture (normal) | variables.rs:435:1:443:1 | exit fn async_block_capture | | | variables.rs:435:32:443:1 | { ... } | variables.rs:435:1:443:1 | exit fn async_block_capture (normal) | | -| variables.rs:436:5:436:23 | let i = ... | variables.rs:436:22:436:22 | 0 | | -| variables.rs:436:9:436:13 | i | variables.rs:437:5:439:6 | let block = ... | match | +| variables.rs:436:5:436:23 | let ... = 0 | variables.rs:436:22:436:22 | 0 | | +| variables.rs:436:9:436:13 | i | variables.rs:437:5:439:6 | let ... = ... | match | | variables.rs:436:22:436:22 | 0 | variables.rs:436:9:436:13 | i | | -| variables.rs:437:5:439:6 | let block = ... | variables.rs:437:17:439:5 | { ... } | | +| variables.rs:437:5:439:6 | let ... = ... | variables.rs:437:17:439:5 | { ... } | | | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:16 | ExprStmt | match | | variables.rs:437:17:439:5 | enter { ... } | variables.rs:438:9:438:14 | ExprStmt | | | variables.rs:437:17:439:5 | exit { ... } (normal) | variables.rs:437:17:439:5 | exit { ... } | | @@ -970,8 +970,8 @@ edges | variables.rs:438:9:438:13 | ... = ... | variables.rs:437:17:439:5 | exit { ... } (normal) | | | variables.rs:438:9:438:14 | ExprStmt | variables.rs:438:9:438:9 | i | | | variables.rs:438:13:438:13 | 1 | variables.rs:438:9:438:13 | ... = ... | | -| variables.rs:441:5:441:9 | block | variables.rs:441:5:441:15 | await ... | | -| variables.rs:441:5:441:15 | await ... | variables.rs:442:5:442:17 | ExprStmt | | +| variables.rs:441:5:441:9 | block | variables.rs:441:5:441:15 | await block | | +| variables.rs:441:5:441:15 | await block | variables.rs:442:5:442:17 | ExprStmt | | | variables.rs:441:5:441:16 | ExprStmt | variables.rs:441:5:441:9 | block | | | variables.rs:442:5:442:13 | print_i64 | variables.rs:442:15:442:15 | i | | | variables.rs:442:5:442:16 | print_i64(...) | variables.rs:435:32:443:1 | { ... } | | @@ -979,10 +979,10 @@ edges | variables.rs:442:15:442:15 | i | variables.rs:442:5:442:16 | print_i64(...) | | | variables.rs:445:1:459:1 | enter fn phi | variables.rs:445:8:445:8 | b | | | variables.rs:445:1:459:1 | exit fn phi (normal) | variables.rs:445:1:459:1 | exit fn phi | | -| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:15 | b: bool | match | -| variables.rs:445:8:445:15 | b: bool | variables.rs:446:5:446:18 | let x = ... | | +| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:15 | ...: bool | match | +| variables.rs:445:8:445:15 | ...: bool | variables.rs:446:5:446:18 | let ... = 1 | | | variables.rs:445:18:459:1 | { ... } | variables.rs:445:1:459:1 | exit fn phi (normal) | | -| variables.rs:446:5:446:18 | let x = ... | variables.rs:446:17:446:17 | 1 | | +| variables.rs:446:5:446:18 | let ... = 1 | variables.rs:446:17:446:17 | 1 | | | variables.rs:446:9:446:13 | x | variables.rs:447:5:447:17 | ExprStmt | match | | variables.rs:446:17:446:17 | 1 | variables.rs:446:9:446:13 | x | | | variables.rs:447:5:447:13 | print_i64 | variables.rs:447:15:447:15 | x | | @@ -996,10 +996,10 @@ edges | variables.rs:448:15:448:19 | ... + ... | variables.rs:448:5:448:20 | print_i64(...) | | | variables.rs:448:19:448:19 | 1 | variables.rs:448:15:448:19 | ... + ... | | | variables.rs:449:5:457:5 | ExprStmt | variables.rs:449:8:449:8 | b | | -| variables.rs:449:5:457:5 | if ... { ... } else { ... } | variables.rs:458:5:458:17 | ExprStmt | | +| variables.rs:449:5:457:5 | if b {...} else {...} | variables.rs:458:5:458:17 | ExprStmt | | | variables.rs:449:8:449:8 | b | variables.rs:450:9:450:14 | ExprStmt | true | | variables.rs:449:8:449:8 | b | variables.rs:454:9:454:14 | ExprStmt | false | -| variables.rs:449:10:453:5 | { ... } | variables.rs:449:5:457:5 | if ... { ... } else { ... } | | +| variables.rs:449:10:453:5 | { ... } | variables.rs:449:5:457:5 | if b {...} else {...} | | | variables.rs:450:9:450:9 | x | variables.rs:450:13:450:13 | 2 | | | variables.rs:450:9:450:13 | ... = ... | variables.rs:451:9:451:21 | ExprStmt | | | variables.rs:450:9:450:14 | ExprStmt | variables.rs:450:9:450:9 | x | | @@ -1014,7 +1014,7 @@ edges | variables.rs:452:19:452:19 | x | variables.rs:452:23:452:23 | 1 | | | variables.rs:452:19:452:23 | ... + ... | variables.rs:452:9:452:24 | print_i64(...) | | | variables.rs:452:23:452:23 | 1 | variables.rs:452:19:452:23 | ... + ... | | -| variables.rs:453:12:457:5 | { ... } | variables.rs:449:5:457:5 | if ... { ... } else { ... } | | +| variables.rs:453:12:457:5 | { ... } | variables.rs:449:5:457:5 | if b {...} else {...} | | | variables.rs:454:9:454:9 | x | variables.rs:454:13:454:13 | 3 | | | variables.rs:454:9:454:13 | ... = ... | variables.rs:455:9:455:21 | ExprStmt | | | variables.rs:454:9:454:14 | ExprStmt | variables.rs:454:9:454:9 | x | | @@ -1035,37 +1035,37 @@ edges | variables.rs:458:15:458:15 | x | variables.rs:458:5:458:16 | print_i64(...) | | | variables.rs:461:1:474:1 | enter fn phi_read | variables.rs:461:13:461:14 | b1 | | | variables.rs:461:1:474:1 | exit fn phi_read (normal) | variables.rs:461:1:474:1 | exit fn phi_read | | -| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:21 | b1: bool | match | -| variables.rs:461:13:461:21 | b1: bool | variables.rs:461:24:461:25 | b2 | | -| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:32 | b2: bool | match | -| variables.rs:461:24:461:32 | b2: bool | variables.rs:462:5:462:14 | let x = ... | | +| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:21 | ...: bool | match | +| variables.rs:461:13:461:21 | ...: bool | variables.rs:461:24:461:25 | b2 | | +| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:32 | ...: bool | match | +| variables.rs:461:24:461:32 | ...: bool | variables.rs:462:5:462:14 | let ... = 1 | | | variables.rs:461:35:474:1 | { ... } | variables.rs:461:1:474:1 | exit fn phi_read (normal) | | -| variables.rs:462:5:462:14 | let x = ... | variables.rs:462:13:462:13 | 1 | | +| variables.rs:462:5:462:14 | let ... = 1 | variables.rs:462:13:462:13 | 1 | | | variables.rs:462:9:462:9 | x | variables.rs:463:5:467:5 | ExprStmt | match | | variables.rs:462:13:462:13 | 1 | variables.rs:462:9:462:9 | x | | | variables.rs:463:5:467:5 | ExprStmt | variables.rs:463:8:463:9 | b1 | | -| variables.rs:463:5:467:5 | if ... { ... } else { ... } | variables.rs:469:8:469:9 | b2 | | +| variables.rs:463:5:467:5 | if b1 {...} else {...} | variables.rs:469:8:469:9 | b2 | | | variables.rs:463:8:463:9 | b1 | variables.rs:464:9:464:21 | ExprStmt | true | | variables.rs:463:8:463:9 | b1 | variables.rs:466:9:466:21 | ExprStmt | false | -| variables.rs:463:11:465:5 | { ... } | variables.rs:463:5:467:5 | if ... { ... } else { ... } | | +| variables.rs:463:11:465:5 | { ... } | variables.rs:463:5:467:5 | if b1 {...} else {...} | | | variables.rs:464:9:464:17 | print_i64 | variables.rs:464:19:464:19 | x | | | variables.rs:464:9:464:20 | print_i64(...) | variables.rs:463:11:465:5 | { ... } | | | variables.rs:464:9:464:21 | ExprStmt | variables.rs:464:9:464:17 | print_i64 | | | variables.rs:464:19:464:19 | x | variables.rs:464:9:464:20 | print_i64(...) | | -| variables.rs:465:12:467:5 | { ... } | variables.rs:463:5:467:5 | if ... { ... } else { ... } | | +| variables.rs:465:12:467:5 | { ... } | variables.rs:463:5:467:5 | if b1 {...} else {...} | | | variables.rs:466:9:466:17 | print_i64 | variables.rs:466:19:466:19 | x | | | variables.rs:466:9:466:20 | print_i64(...) | variables.rs:465:12:467:5 | { ... } | | | variables.rs:466:9:466:21 | ExprStmt | variables.rs:466:9:466:17 | print_i64 | | | variables.rs:466:19:466:19 | x | variables.rs:466:9:466:20 | print_i64(...) | | -| variables.rs:469:5:473:5 | if ... { ... } else { ... } | variables.rs:461:35:474:1 | { ... } | | +| variables.rs:469:5:473:5 | if b2 {...} else {...} | variables.rs:461:35:474:1 | { ... } | | | variables.rs:469:8:469:9 | b2 | variables.rs:470:9:470:21 | ExprStmt | true | | variables.rs:469:8:469:9 | b2 | variables.rs:472:9:472:21 | ExprStmt | false | -| variables.rs:469:11:471:5 | { ... } | variables.rs:469:5:473:5 | if ... { ... } else { ... } | | +| variables.rs:469:11:471:5 | { ... } | variables.rs:469:5:473:5 | if b2 {...} else {...} | | | variables.rs:470:9:470:17 | print_i64 | variables.rs:470:19:470:19 | x | | | variables.rs:470:9:470:20 | print_i64(...) | variables.rs:469:11:471:5 | { ... } | | | variables.rs:470:9:470:21 | ExprStmt | variables.rs:470:9:470:17 | print_i64 | | | variables.rs:470:19:470:19 | x | variables.rs:470:9:470:20 | print_i64(...) | | -| variables.rs:471:12:473:5 | { ... } | variables.rs:469:5:473:5 | if ... { ... } else { ... } | | +| variables.rs:471:12:473:5 | { ... } | variables.rs:469:5:473:5 | if b2 {...} else {...} | | | variables.rs:472:9:472:17 | print_i64 | variables.rs:472:19:472:19 | x | | | variables.rs:472:9:472:20 | print_i64(...) | variables.rs:471:12:473:5 | { ... } | | | variables.rs:472:9:472:21 | ExprStmt | variables.rs:472:9:472:17 | print_i64 | | @@ -1074,12 +1074,12 @@ edges | variables.rs:482:5:484:5 | exit fn my_get (normal) | variables.rs:482:5:484:5 | exit fn my_get | | | variables.rs:483:9:483:23 | return ... | variables.rs:482:5:484:5 | exit fn my_get (normal) | return | | variables.rs:483:9:483:24 | ExprStmt | variables.rs:483:16:483:19 | self | | -| variables.rs:483:16:483:19 | self | variables.rs:483:16:483:23 | ... .val | | -| variables.rs:483:16:483:23 | ... .val | variables.rs:483:9:483:23 | return ... | | -| variables.rs:487:1:494:1 | enter fn structs | variables.rs:488:5:488:36 | let a = ... | | +| variables.rs:483:16:483:19 | self | variables.rs:483:16:483:23 | self.val | | +| variables.rs:483:16:483:23 | self.val | variables.rs:483:9:483:23 | return ... | | +| variables.rs:487:1:494:1 | enter fn structs | variables.rs:488:5:488:36 | let ... = ... | | | variables.rs:487:1:494:1 | exit fn structs (normal) | variables.rs:487:1:494:1 | exit fn structs | | | variables.rs:487:14:494:1 | { ... } | variables.rs:487:1:494:1 | exit fn structs (normal) | | -| variables.rs:488:5:488:36 | let a = ... | variables.rs:488:33:488:33 | 1 | | +| variables.rs:488:5:488:36 | let ... = ... | variables.rs:488:33:488:33 | 1 | | | variables.rs:488:9:488:13 | a | variables.rs:489:5:489:26 | ExprStmt | match | | variables.rs:488:17:488:35 | MyStruct {...} | variables.rs:488:9:488:13 | a | | | variables.rs:488:33:488:33 | 1 | variables.rs:488:17:488:35 | MyStruct {...} | | @@ -1088,8 +1088,8 @@ edges | variables.rs:489:5:489:26 | ExprStmt | variables.rs:489:5:489:13 | print_i64 | | | variables.rs:489:15:489:15 | a | variables.rs:489:15:489:24 | ... .my_get(...) | | | variables.rs:489:15:489:24 | ... .my_get(...) | variables.rs:489:5:489:25 | print_i64(...) | | -| variables.rs:490:5:490:5 | a | variables.rs:490:5:490:9 | ... .val | | -| variables.rs:490:5:490:9 | ... .val | variables.rs:490:13:490:13 | 5 | | +| variables.rs:490:5:490:5 | a | variables.rs:490:5:490:9 | a.val | | +| variables.rs:490:5:490:9 | a.val | variables.rs:490:13:490:13 | 5 | | | variables.rs:490:5:490:13 | ... = ... | variables.rs:491:5:491:26 | ExprStmt | | | variables.rs:490:5:490:14 | ExprStmt | variables.rs:490:5:490:5 | a | | | variables.rs:490:13:490:13 | 5 | variables.rs:490:5:490:13 | ... = ... | | @@ -1108,29 +1108,29 @@ edges | variables.rs:493:5:493:26 | ExprStmt | variables.rs:493:5:493:13 | print_i64 | | | variables.rs:493:15:493:15 | a | variables.rs:493:15:493:24 | ... .my_get(...) | | | variables.rs:493:15:493:24 | ... .my_get(...) | variables.rs:493:5:493:25 | print_i64(...) | | -| variables.rs:496:1:503:1 | enter fn ref_arg | variables.rs:497:5:497:15 | let x = ... | | +| variables.rs:496:1:503:1 | enter fn ref_arg | variables.rs:497:5:497:15 | let ... = 16 | | | variables.rs:496:1:503:1 | exit fn ref_arg (normal) | variables.rs:496:1:503:1 | exit fn ref_arg | | | variables.rs:496:14:503:1 | { ... } | variables.rs:496:1:503:1 | exit fn ref_arg (normal) | | -| variables.rs:497:5:497:15 | let x = ... | variables.rs:497:13:497:14 | 16 | | +| variables.rs:497:5:497:15 | let ... = 16 | variables.rs:497:13:497:14 | 16 | | | variables.rs:497:9:497:9 | x | variables.rs:498:5:498:22 | ExprStmt | match | | variables.rs:497:13:497:14 | 16 | variables.rs:497:9:497:9 | x | | | variables.rs:498:5:498:17 | print_i64_ref | variables.rs:498:20:498:20 | x | | | variables.rs:498:5:498:21 | print_i64_ref(...) | variables.rs:499:5:499:17 | ExprStmt | | | variables.rs:498:5:498:22 | ExprStmt | variables.rs:498:5:498:17 | print_i64_ref | | -| variables.rs:498:19:498:20 | &... | variables.rs:498:5:498:21 | print_i64_ref(...) | | -| variables.rs:498:20:498:20 | x | variables.rs:498:19:498:20 | &... | | +| variables.rs:498:19:498:20 | &x | variables.rs:498:5:498:21 | print_i64_ref(...) | | +| variables.rs:498:20:498:20 | x | variables.rs:498:19:498:20 | &x | | | variables.rs:499:5:499:13 | print_i64 | variables.rs:499:15:499:15 | x | | -| variables.rs:499:5:499:16 | print_i64(...) | variables.rs:501:5:501:15 | let z = ... | | +| variables.rs:499:5:499:16 | print_i64(...) | variables.rs:501:5:501:15 | let ... = 17 | | | variables.rs:499:5:499:17 | ExprStmt | variables.rs:499:5:499:13 | print_i64 | | | variables.rs:499:15:499:15 | x | variables.rs:499:5:499:16 | print_i64(...) | | -| variables.rs:501:5:501:15 | let z = ... | variables.rs:501:13:501:14 | 17 | | +| variables.rs:501:5:501:15 | let ... = 17 | variables.rs:501:13:501:14 | 17 | | | variables.rs:501:9:501:9 | z | variables.rs:502:5:502:22 | ExprStmt | match | | variables.rs:501:13:501:14 | 17 | variables.rs:501:9:501:9 | z | | | variables.rs:502:5:502:17 | print_i64_ref | variables.rs:502:20:502:20 | z | | | variables.rs:502:5:502:21 | print_i64_ref(...) | variables.rs:496:14:503:1 | { ... } | | | variables.rs:502:5:502:22 | ExprStmt | variables.rs:502:5:502:17 | print_i64_ref | | -| variables.rs:502:19:502:20 | &... | variables.rs:502:5:502:21 | print_i64_ref(...) | | -| variables.rs:502:20:502:20 | z | variables.rs:502:19:502:20 | &... | | +| variables.rs:502:19:502:20 | &z | variables.rs:502:5:502:21 | print_i64_ref(...) | | +| variables.rs:502:20:502:20 | z | variables.rs:502:19:502:20 | &z | | | variables.rs:510:3:512:3 | enter fn bar | variables.rs:511:5:511:32 | ExprStmt | | | variables.rs:510:3:512:3 | exit fn bar (normal) | variables.rs:510:3:512:3 | exit fn bar | | | variables.rs:510:21:512:3 | { ... } | variables.rs:510:3:512:3 | exit fn bar (normal) | | @@ -1140,10 +1140,10 @@ edges | variables.rs:511:6:511:9 | self | variables.rs:511:5:511:9 | * ... | | | variables.rs:511:13:511:31 | MyStruct {...} | variables.rs:511:5:511:31 | ... = ... | | | variables.rs:511:29:511:29 | 3 | variables.rs:511:13:511:31 | MyStruct {...} | | -| variables.rs:515:1:520:1 | enter fn ref_methodcall_receiver | variables.rs:516:3:516:34 | let a = ... | | +| variables.rs:515:1:520:1 | enter fn ref_methodcall_receiver | variables.rs:516:3:516:34 | let ... = ... | | | variables.rs:515:1:520:1 | exit fn ref_methodcall_receiver (normal) | variables.rs:515:1:520:1 | exit fn ref_methodcall_receiver | | | variables.rs:515:30:520:1 | { ... } | variables.rs:515:1:520:1 | exit fn ref_methodcall_receiver (normal) | | -| variables.rs:516:3:516:34 | let a = ... | variables.rs:516:31:516:31 | 1 | | +| variables.rs:516:3:516:34 | let ... = ... | variables.rs:516:31:516:31 | 1 | | | variables.rs:516:7:516:11 | a | variables.rs:517:3:517:10 | ExprStmt | match | | variables.rs:516:15:516:33 | MyStruct {...} | variables.rs:516:7:516:11 | a | | | variables.rs:516:31:516:31 | 1 | variables.rs:516:15:516:33 | MyStruct {...} | | @@ -1153,8 +1153,8 @@ edges | variables.rs:519:3:519:11 | print_i64 | variables.rs:519:13:519:13 | a | | | variables.rs:519:3:519:18 | print_i64(...) | variables.rs:515:30:520:1 | { ... } | | | variables.rs:519:3:519:19 | ExprStmt | variables.rs:519:3:519:11 | print_i64 | | -| variables.rs:519:13:519:13 | a | variables.rs:519:13:519:17 | ... .val | | -| variables.rs:519:13:519:17 | ... .val | variables.rs:519:3:519:18 | print_i64(...) | | +| variables.rs:519:13:519:13 | a | variables.rs:519:13:519:17 | a.val | | +| variables.rs:519:13:519:17 | a.val | variables.rs:519:3:519:18 | print_i64(...) | | | variables.rs:522:1:556:1 | enter fn main | variables.rs:523:5:523:25 | ExprStmt | | | variables.rs:522:1:556:1 | exit fn main (normal) | variables.rs:522:1:556:1 | exit fn main | | | variables.rs:522:11:556:1 | { ... } | variables.rs:522:1:556:1 | exit fn main (normal) | | diff --git a/rust/ql/test/library-tests/variables/Ssa.expected b/rust/ql/test/library-tests/variables/Ssa.expected index 8eb885d77d3f..af3c96d95030 100644 --- a/rust/ql/test/library-tests/variables/Ssa.expected +++ b/rust/ql/test/library-tests/variables/Ssa.expected @@ -125,7 +125,7 @@ definition | variables.rs:436:9:436:13 | i | variables.rs:436:13:436:13 | i | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | | variables.rs:438:9:438:9 | i | variables.rs:436:13:436:13 | i | -| variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | +| variables.rs:441:5:441:15 | await block | variables.rs:436:13:436:13 | i | | variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | | variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | | variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | @@ -242,7 +242,7 @@ read | variables.rs:423:5:423:14 | closure2(...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block | -| variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | +| variables.rs:441:5:441:15 | await block | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | | variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | variables.rs:449:8:449:8 | b | | variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:447:15:447:15 | x | | variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:448:15:448:15 | x | @@ -346,7 +346,7 @@ firstRead | variables.rs:423:5:423:14 | closure2(...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block | -| variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | +| variables.rs:441:5:441:15 | await block | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | | variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | variables.rs:449:8:449:8 | b | | variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:447:15:447:15 | x | | variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | variables.rs:458:15:458:15 | x | @@ -446,7 +446,7 @@ lastRead | variables.rs:423:5:423:14 | closure2(...) | variables.rs:418:13:418:13 | y | variables.rs:424:15:424:15 | y | | variables.rs:428:9:428:20 | closure3 | variables.rs:428:13:428:20 | closure3 | variables.rs:431:5:431:12 | closure3 | | variables.rs:437:9:437:13 | block | variables.rs:437:9:437:13 | block | variables.rs:441:5:441:9 | block | -| variables.rs:441:5:441:15 | await ... | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | +| variables.rs:441:5:441:15 | await block | variables.rs:436:13:436:13 | i | variables.rs:442:15:442:15 | i | | variables.rs:445:8:445:8 | b | variables.rs:445:8:445:8 | b | variables.rs:449:8:449:8 | b | | variables.rs:446:9:446:13 | x | variables.rs:446:13:446:13 | x | variables.rs:448:15:448:15 | x | | variables.rs:449:5:457:5 | phi | variables.rs:446:13:446:13 | x | variables.rs:458:15:458:15 | x | diff --git a/rust/ql/test/library-tests/variables/variables.expected b/rust/ql/test/library-tests/variables/variables.expected index ea439e78d5be..5ce79f25801a 100644 --- a/rust/ql/test/library-tests/variables/variables.expected +++ b/rust/ql/test/library-tests/variables/variables.expected @@ -1,2 +1,468 @@ -ERROR: empty recursive call: dispatch predicate for CommentImpl::Impl::Comment::getCommentMarker (CommentImpl.qll:23,47-63) -ERROR: empty recursive call: dispatch predicate for CommentImpl::Impl::Comment::getText (CommentImpl.qll:36,34-41) +testFailures +failures +variable +| variables.rs:3:14:3:14 | s | +| variables.rs:7:14:7:14 | i | +| variables.rs:11:18:11:18 | i | +| variables.rs:16:9:16:10 | x1 | +| variables.rs:21:13:21:14 | x2 | +| variables.rs:28:13:28:13 | x | +| variables.rs:35:9:35:10 | x3 | +| variables.rs:37:9:37:10 | x3 | +| variables.rs:43:9:43:10 | x4 | +| variables.rs:46:13:46:14 | x4 | +| variables.rs:60:13:60:14 | a1 | +| variables.rs:61:13:61:14 | b1 | +| variables.rs:64:13:64:13 | x | +| variables.rs:65:13:65:13 | y | +| variables.rs:75:9:75:10 | p1 | +| variables.rs:77:12:77:13 | a2 | +| variables.rs:78:12:78:13 | b2 | +| variables.rs:85:9:85:10 | s1 | +| variables.rs:87:21:87:22 | s2 | +| variables.rs:94:14:94:15 | x5 | +| variables.rs:102:9:102:10 | s1 | +| variables.rs:104:24:104:25 | s2 | +| variables.rs:111:9:111:10 | x6 | +| variables.rs:112:9:112:10 | y1 | +| variables.rs:116:14:116:15 | y1 | +| variables.rs:128:9:128:15 | numbers | +| variables.rs:132:13:132:17 | first | +| variables.rs:133:13:133:17 | third | +| variables.rs:134:13:134:17 | fifth | +| variables.rs:144:13:144:17 | first | +| variables.rs:146:13:146:16 | last | +| variables.rs:155:9:155:10 | p2 | +| variables.rs:159:16:159:17 | x7 | +| variables.rs:169:9:169:11 | msg | +| variables.rs:173:17:173:27 | id_variable | +| variables.rs:178:26:178:27 | id | +| variables.rs:189:9:189:14 | either | +| variables.rs:191:9:191:44 | a3 | +| variables.rs:203:9:203:10 | tv | +| variables.rs:205:9:205:81 | a4 | +| variables.rs:209:9:209:83 | a5 | +| variables.rs:213:9:213:83 | a6 | +| variables.rs:219:9:219:14 | either | +| variables.rs:221:9:221:44 | a7 | +| variables.rs:229:9:229:14 | either | +| variables.rs:232:13:232:13 | e | +| variables.rs:233:14:233:51 | a11 | +| variables.rs:236:33:236:35 | a12 | +| variables.rs:253:9:253:10 | fv | +| variables.rs:255:9:255:109 | a13 | +| variables.rs:261:5:261:6 | a8 | +| variables.rs:263:9:263:10 | b3 | +| variables.rs:264:9:264:10 | c1 | +| variables.rs:272:6:272:41 | a9 | +| variables.rs:279:13:279:15 | a10 | +| variables.rs:280:13:280:14 | b4 | +| variables.rs:281:13:281:14 | c2 | +| variables.rs:302:13:302:15 | a10 | +| variables.rs:303:13:303:14 | b4 | +| variables.rs:315:9:315:23 | example_closure | +| variables.rs:316:10:316:10 | x | +| variables.rs:318:9:318:10 | n1 | +| variables.rs:323:9:323:26 | immutable_variable | +| variables.rs:324:10:324:10 | x | +| variables.rs:326:9:326:10 | n2 | +| variables.rs:332:9:332:9 | v | +| variables.rs:334:9:334:12 | text | +| variables.rs:341:13:341:13 | a | +| variables.rs:349:13:349:13 | i | +| variables.rs:350:9:350:13 | ref_i | +| variables.rs:356:17:356:17 | x | +| variables.rs:363:22:363:22 | x | +| variables.rs:363:39:363:39 | y | +| variables.rs:372:13:372:13 | x | +| variables.rs:373:9:373:9 | y | +| variables.rs:379:13:379:13 | z | +| variables.rs:380:9:380:9 | w | +| variables.rs:392:13:392:13 | x | +| variables.rs:393:9:393:9 | y | +| variables.rs:400:9:400:9 | x | +| variables.rs:402:9:402:11 | cap | +| variables.rs:410:13:410:13 | x | +| variables.rs:412:9:412:16 | closure1 | +| variables.rs:418:13:418:13 | y | +| variables.rs:420:13:420:20 | closure2 | +| variables.rs:426:13:426:13 | z | +| variables.rs:428:13:428:20 | closure3 | +| variables.rs:436:13:436:13 | i | +| variables.rs:437:9:437:13 | block | +| variables.rs:445:8:445:8 | b | +| variables.rs:446:13:446:13 | x | +| variables.rs:461:13:461:14 | b1 | +| variables.rs:461:24:461:25 | b2 | +| variables.rs:462:9:462:9 | x | +| variables.rs:488:13:488:13 | a | +| variables.rs:497:9:497:9 | x | +| variables.rs:501:9:501:9 | z | +| variables.rs:516:11:516:11 | a | +variableAccess +| variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s | +| variables.rs:8:20:8:20 | i | variables.rs:7:14:7:14 | i | +| variables.rs:12:16:12:16 | i | variables.rs:11:18:11:18 | i | +| variables.rs:17:15:17:16 | x1 | variables.rs:16:9:16:10 | x1 | +| variables.rs:22:15:22:16 | x2 | variables.rs:21:13:21:14 | x2 | +| variables.rs:23:5:23:6 | x2 | variables.rs:21:13:21:14 | x2 | +| variables.rs:24:15:24:16 | x2 | variables.rs:21:13:21:14 | x2 | +| variables.rs:29:20:29:20 | x | variables.rs:28:13:28:13 | x | +| variables.rs:30:5:30:5 | x | variables.rs:28:13:28:13 | x | +| variables.rs:31:20:31:20 | x | variables.rs:28:13:28:13 | x | +| variables.rs:36:15:36:16 | x3 | variables.rs:35:9:35:10 | x3 | +| variables.rs:38:9:38:10 | x3 | variables.rs:35:9:35:10 | x3 | +| variables.rs:39:15:39:16 | x3 | variables.rs:37:9:37:10 | x3 | +| variables.rs:44:15:44:16 | x4 | variables.rs:43:9:43:10 | x4 | +| variables.rs:47:19:47:20 | x4 | variables.rs:46:13:46:14 | x4 | +| variables.rs:49:15:49:16 | x4 | variables.rs:43:9:43:10 | x4 | +| variables.rs:68:15:68:16 | a1 | variables.rs:60:13:60:14 | a1 | +| variables.rs:69:15:69:16 | b1 | variables.rs:61:13:61:14 | b1 | +| variables.rs:70:15:70:15 | x | variables.rs:64:13:64:13 | x | +| variables.rs:71:15:71:15 | y | variables.rs:65:13:65:13 | y | +| variables.rs:79:9:79:10 | p1 | variables.rs:75:9:75:10 | p1 | +| variables.rs:80:15:80:16 | a2 | variables.rs:77:12:77:13 | a2 | +| variables.rs:81:15:81:16 | b2 | variables.rs:78:12:78:13 | b2 | +| variables.rs:88:11:88:12 | s1 | variables.rs:85:9:85:10 | s1 | +| variables.rs:89:19:89:20 | s2 | variables.rs:87:21:87:22 | s2 | +| variables.rs:98:15:98:16 | x5 | variables.rs:94:14:94:15 | x5 | +| variables.rs:105:11:105:12 | s1 | variables.rs:102:9:102:10 | s1 | +| variables.rs:106:19:106:20 | s2 | variables.rs:104:24:104:25 | s2 | +| variables.rs:114:11:114:12 | x6 | variables.rs:111:9:111:10 | x6 | +| variables.rs:119:23:119:24 | y1 | variables.rs:116:14:116:15 | y1 | +| variables.rs:124:15:124:16 | y1 | variables.rs:112:9:112:10 | y1 | +| variables.rs:130:11:130:17 | numbers | variables.rs:128:9:128:15 | numbers | +| variables.rs:136:23:136:27 | first | variables.rs:132:13:132:17 | first | +| variables.rs:137:23:137:27 | third | variables.rs:133:13:133:17 | third | +| variables.rs:138:23:138:27 | fifth | variables.rs:134:13:134:17 | fifth | +| variables.rs:142:11:142:17 | numbers | variables.rs:128:9:128:15 | numbers | +| variables.rs:148:23:148:27 | first | variables.rs:144:13:144:17 | first | +| variables.rs:149:23:149:26 | last | variables.rs:146:13:146:16 | last | +| variables.rs:157:11:157:12 | p2 | variables.rs:155:9:155:10 | p2 | +| variables.rs:160:24:160:25 | x7 | variables.rs:159:16:159:17 | x7 | +| variables.rs:171:11:171:13 | msg | variables.rs:169:9:169:11 | msg | +| variables.rs:174:24:174:34 | id_variable | variables.rs:173:17:173:27 | id_variable | +| variables.rs:179:23:179:24 | id | variables.rs:178:26:178:27 | id | +| variables.rs:190:11:190:16 | either | variables.rs:189:9:189:14 | either | +| variables.rs:192:26:192:27 | a3 | variables.rs:191:9:191:44 | a3 | +| variables.rs:204:11:204:12 | tv | variables.rs:203:9:203:10 | tv | +| variables.rs:206:26:206:27 | a4 | variables.rs:205:9:205:81 | a4 | +| variables.rs:208:11:208:12 | tv | variables.rs:203:9:203:10 | tv | +| variables.rs:210:26:210:27 | a5 | variables.rs:209:9:209:83 | a5 | +| variables.rs:212:11:212:12 | tv | variables.rs:203:9:203:10 | tv | +| variables.rs:214:26:214:27 | a6 | variables.rs:213:9:213:83 | a6 | +| variables.rs:220:11:220:16 | either | variables.rs:219:9:219:14 | either | +| variables.rs:222:16:222:17 | a7 | variables.rs:221:9:221:44 | a7 | +| variables.rs:223:26:223:27 | a7 | variables.rs:221:9:221:44 | a7 | +| variables.rs:231:11:231:16 | either | variables.rs:229:9:229:14 | either | +| variables.rs:235:23:235:25 | a11 | variables.rs:233:14:233:51 | a11 | +| variables.rs:237:15:237:15 | e | variables.rs:232:13:232:13 | e | +| variables.rs:238:28:238:30 | a12 | variables.rs:236:33:236:35 | a12 | +| variables.rs:254:11:254:12 | fv | variables.rs:253:9:253:10 | fv | +| variables.rs:256:26:256:28 | a13 | variables.rs:255:9:255:109 | a13 | +| variables.rs:266:15:266:16 | a8 | variables.rs:261:5:261:6 | a8 | +| variables.rs:267:15:267:16 | b3 | variables.rs:263:9:263:10 | b3 | +| variables.rs:268:15:268:16 | c1 | variables.rs:264:9:264:10 | c1 | +| variables.rs:274:15:274:16 | a9 | variables.rs:272:6:272:41 | a9 | +| variables.rs:283:15:283:17 | a10 | variables.rs:279:13:279:15 | a10 | +| variables.rs:284:15:284:16 | b4 | variables.rs:280:13:280:14 | b4 | +| variables.rs:285:15:285:16 | c2 | variables.rs:281:13:281:14 | c2 | +| variables.rs:288:9:288:10 | c2 | variables.rs:281:13:281:14 | c2 | +| variables.rs:289:9:289:10 | b4 | variables.rs:280:13:280:14 | b4 | +| variables.rs:290:9:290:11 | a10 | variables.rs:279:13:279:15 | a10 | +| variables.rs:292:9:292:11 | a10 | variables.rs:279:13:279:15 | a10 | +| variables.rs:293:9:293:10 | b4 | variables.rs:280:13:280:14 | b4 | +| variables.rs:294:9:294:10 | c2 | variables.rs:281:13:281:14 | c2 | +| variables.rs:296:15:296:17 | a10 | variables.rs:279:13:279:15 | a10 | +| variables.rs:297:15:297:16 | b4 | variables.rs:280:13:280:14 | b4 | +| variables.rs:298:15:298:16 | c2 | variables.rs:281:13:281:14 | c2 | +| variables.rs:305:23:305:25 | a10 | variables.rs:302:13:302:15 | a10 | +| variables.rs:306:23:306:24 | b4 | variables.rs:303:13:303:14 | b4 | +| variables.rs:310:15:310:17 | a10 | variables.rs:279:13:279:15 | a10 | +| variables.rs:311:15:311:16 | b4 | variables.rs:280:13:280:14 | b4 | +| variables.rs:317:9:317:9 | x | variables.rs:316:10:316:10 | x | +| variables.rs:319:9:319:23 | example_closure | variables.rs:315:9:315:23 | example_closure | +| variables.rs:320:15:320:16 | n1 | variables.rs:318:9:318:10 | n1 | +| variables.rs:325:9:325:9 | x | variables.rs:324:10:324:10 | x | +| variables.rs:327:9:327:26 | immutable_variable | variables.rs:323:9:323:26 | immutable_variable | +| variables.rs:328:15:328:16 | n2 | variables.rs:326:9:326:10 | n2 | +| variables.rs:335:12:335:12 | v | variables.rs:332:9:332:9 | v | +| variables.rs:336:19:336:22 | text | variables.rs:334:9:334:12 | text | +| variables.rs:342:5:342:5 | a | variables.rs:341:13:341:13 | a | +| variables.rs:343:15:343:15 | a | variables.rs:341:13:341:13 | a | +| variables.rs:344:11:344:11 | a | variables.rs:341:13:341:13 | a | +| variables.rs:345:15:345:15 | a | variables.rs:341:13:341:13 | a | +| variables.rs:351:14:351:14 | i | variables.rs:349:13:349:13 | i | +| variables.rs:352:6:352:10 | ref_i | variables.rs:350:9:350:13 | ref_i | +| variables.rs:353:15:353:15 | i | variables.rs:349:13:349:13 | i | +| variables.rs:357:6:357:6 | x | variables.rs:356:17:356:17 | x | +| variables.rs:358:10:358:10 | x | variables.rs:356:17:356:17 | x | +| variables.rs:359:10:359:10 | x | variables.rs:356:17:356:17 | x | +| variables.rs:360:12:360:12 | x | variables.rs:356:17:356:17 | x | +| variables.rs:364:6:364:6 | x | variables.rs:363:22:363:22 | x | +| variables.rs:365:10:365:10 | x | variables.rs:363:22:363:22 | x | +| variables.rs:366:10:366:10 | x | variables.rs:363:22:363:22 | x | +| variables.rs:367:6:367:6 | y | variables.rs:363:39:363:39 | y | +| variables.rs:368:9:368:9 | x | variables.rs:363:22:363:22 | x | +| variables.rs:374:27:374:27 | x | variables.rs:372:13:372:13 | x | +| variables.rs:375:6:375:6 | y | variables.rs:373:9:373:9 | y | +| variables.rs:377:15:377:15 | x | variables.rs:372:13:372:13 | x | +| variables.rs:381:19:381:19 | x | variables.rs:372:13:372:13 | x | +| variables.rs:383:14:383:14 | z | variables.rs:379:13:379:13 | z | +| variables.rs:384:9:384:9 | w | variables.rs:380:9:380:9 | w | +| variables.rs:386:7:386:7 | w | variables.rs:380:9:380:9 | w | +| variables.rs:388:15:388:15 | z | variables.rs:379:13:379:13 | z | +| variables.rs:394:14:394:14 | x | variables.rs:392:13:392:13 | x | +| variables.rs:395:6:395:6 | y | variables.rs:393:9:393:9 | y | +| variables.rs:396:15:396:15 | x | variables.rs:392:13:392:13 | x | +| variables.rs:403:19:403:19 | x | variables.rs:400:9:400:9 | x | +| variables.rs:405:5:405:7 | cap | variables.rs:402:9:402:11 | cap | +| variables.rs:406:15:406:15 | x | variables.rs:400:9:400:9 | x | +| variables.rs:413:19:413:19 | x | variables.rs:410:13:410:13 | x | +| variables.rs:415:5:415:12 | closure1 | variables.rs:412:9:412:16 | closure1 | +| variables.rs:416:15:416:15 | x | variables.rs:410:13:410:13 | x | +| variables.rs:421:9:421:9 | y | variables.rs:418:13:418:13 | y | +| variables.rs:423:5:423:12 | closure2 | variables.rs:420:13:420:20 | closure2 | +| variables.rs:424:15:424:15 | y | variables.rs:418:13:418:13 | y | +| variables.rs:429:9:429:9 | z | variables.rs:426:13:426:13 | z | +| variables.rs:431:5:431:12 | closure3 | variables.rs:428:13:428:20 | closure3 | +| variables.rs:432:15:432:15 | z | variables.rs:426:13:426:13 | z | +| variables.rs:438:9:438:9 | i | variables.rs:436:13:436:13 | i | +| variables.rs:441:5:441:9 | block | variables.rs:437:9:437:13 | block | +| variables.rs:442:15:442:15 | i | variables.rs:436:13:436:13 | i | +| variables.rs:447:15:447:15 | x | variables.rs:446:13:446:13 | x | +| variables.rs:448:15:448:15 | x | variables.rs:446:13:446:13 | x | +| variables.rs:449:8:449:8 | b | variables.rs:445:8:445:8 | b | +| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x | +| variables.rs:451:19:451:19 | x | variables.rs:446:13:446:13 | x | +| variables.rs:452:19:452:19 | x | variables.rs:446:13:446:13 | x | +| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x | +| variables.rs:455:19:455:19 | x | variables.rs:446:13:446:13 | x | +| variables.rs:456:19:456:19 | x | variables.rs:446:13:446:13 | x | +| variables.rs:458:15:458:15 | x | variables.rs:446:13:446:13 | x | +| variables.rs:463:8:463:9 | b1 | variables.rs:461:13:461:14 | b1 | +| variables.rs:464:19:464:19 | x | variables.rs:462:9:462:9 | x | +| variables.rs:466:19:466:19 | x | variables.rs:462:9:462:9 | x | +| variables.rs:469:8:469:9 | b2 | variables.rs:461:24:461:25 | b2 | +| variables.rs:470:19:470:19 | x | variables.rs:462:9:462:9 | x | +| variables.rs:472:19:472:19 | x | variables.rs:462:9:462:9 | x | +| variables.rs:489:15:489:15 | a | variables.rs:488:13:488:13 | a | +| variables.rs:490:5:490:5 | a | variables.rs:488:13:488:13 | a | +| variables.rs:491:15:491:15 | a | variables.rs:488:13:488:13 | a | +| variables.rs:492:5:492:5 | a | variables.rs:488:13:488:13 | a | +| variables.rs:493:15:493:15 | a | variables.rs:488:13:488:13 | a | +| variables.rs:498:20:498:20 | x | variables.rs:497:9:497:9 | x | +| variables.rs:499:15:499:15 | x | variables.rs:497:9:497:9 | x | +| variables.rs:502:20:502:20 | z | variables.rs:501:9:501:9 | z | +| variables.rs:517:3:517:3 | a | variables.rs:516:11:516:11 | a | +| variables.rs:519:13:519:13 | a | variables.rs:516:11:516:11 | a | +variableWriteAccess +| variables.rs:23:5:23:6 | x2 | variables.rs:21:13:21:14 | x2 | +| variables.rs:30:5:30:5 | x | variables.rs:28:13:28:13 | x | +| variables.rs:288:9:288:10 | c2 | variables.rs:281:13:281:14 | c2 | +| variables.rs:289:9:289:10 | b4 | variables.rs:280:13:280:14 | b4 | +| variables.rs:290:9:290:11 | a10 | variables.rs:279:13:279:15 | a10 | +| variables.rs:421:9:421:9 | y | variables.rs:418:13:418:13 | y | +| variables.rs:438:9:438:9 | i | variables.rs:436:13:436:13 | i | +| variables.rs:450:9:450:9 | x | variables.rs:446:13:446:13 | x | +| variables.rs:454:9:454:9 | x | variables.rs:446:13:446:13 | x | +| variables.rs:492:5:492:5 | a | variables.rs:488:13:488:13 | a | +variableReadAccess +| variables.rs:4:20:4:20 | s | variables.rs:3:14:3:14 | s | +| variables.rs:8:20:8:20 | i | variables.rs:7:14:7:14 | i | +| variables.rs:12:16:12:16 | i | variables.rs:11:18:11:18 | i | +| variables.rs:17:15:17:16 | x1 | variables.rs:16:9:16:10 | x1 | +| variables.rs:22:15:22:16 | x2 | variables.rs:21:13:21:14 | x2 | +| variables.rs:24:15:24:16 | x2 | variables.rs:21:13:21:14 | x2 | +| variables.rs:36:15:36:16 | x3 | variables.rs:35:9:35:10 | x3 | +| variables.rs:38:9:38:10 | x3 | variables.rs:35:9:35:10 | x3 | +| variables.rs:39:15:39:16 | x3 | variables.rs:37:9:37:10 | x3 | +| variables.rs:44:15:44:16 | x4 | variables.rs:43:9:43:10 | x4 | +| variables.rs:47:19:47:20 | x4 | variables.rs:46:13:46:14 | x4 | +| variables.rs:49:15:49:16 | x4 | variables.rs:43:9:43:10 | x4 | +| variables.rs:68:15:68:16 | a1 | variables.rs:60:13:60:14 | a1 | +| variables.rs:69:15:69:16 | b1 | variables.rs:61:13:61:14 | b1 | +| variables.rs:70:15:70:15 | x | variables.rs:64:13:64:13 | x | +| variables.rs:71:15:71:15 | y | variables.rs:65:13:65:13 | y | +| variables.rs:79:9:79:10 | p1 | variables.rs:75:9:75:10 | p1 | +| variables.rs:80:15:80:16 | a2 | variables.rs:77:12:77:13 | a2 | +| variables.rs:81:15:81:16 | b2 | variables.rs:78:12:78:13 | b2 | +| variables.rs:88:11:88:12 | s1 | variables.rs:85:9:85:10 | s1 | +| variables.rs:89:19:89:20 | s2 | variables.rs:87:21:87:22 | s2 | +| variables.rs:98:15:98:16 | x5 | variables.rs:94:14:94:15 | x5 | +| variables.rs:105:11:105:12 | s1 | variables.rs:102:9:102:10 | s1 | +| variables.rs:106:19:106:20 | s2 | variables.rs:104:24:104:25 | s2 | +| variables.rs:114:11:114:12 | x6 | variables.rs:111:9:111:10 | x6 | +| variables.rs:119:23:119:24 | y1 | variables.rs:116:14:116:15 | y1 | +| variables.rs:124:15:124:16 | y1 | variables.rs:112:9:112:10 | y1 | +| variables.rs:130:11:130:17 | numbers | variables.rs:128:9:128:15 | numbers | +| variables.rs:136:23:136:27 | first | variables.rs:132:13:132:17 | first | +| variables.rs:137:23:137:27 | third | variables.rs:133:13:133:17 | third | +| variables.rs:138:23:138:27 | fifth | variables.rs:134:13:134:17 | fifth | +| variables.rs:142:11:142:17 | numbers | variables.rs:128:9:128:15 | numbers | +| variables.rs:148:23:148:27 | first | variables.rs:144:13:144:17 | first | +| variables.rs:149:23:149:26 | last | variables.rs:146:13:146:16 | last | +| variables.rs:157:11:157:12 | p2 | variables.rs:155:9:155:10 | p2 | +| variables.rs:160:24:160:25 | x7 | variables.rs:159:16:159:17 | x7 | +| variables.rs:171:11:171:13 | msg | variables.rs:169:9:169:11 | msg | +| variables.rs:174:24:174:34 | id_variable | variables.rs:173:17:173:27 | id_variable | +| variables.rs:179:23:179:24 | id | variables.rs:178:26:178:27 | id | +| variables.rs:190:11:190:16 | either | variables.rs:189:9:189:14 | either | +| variables.rs:192:26:192:27 | a3 | variables.rs:191:9:191:44 | a3 | +| variables.rs:204:11:204:12 | tv | variables.rs:203:9:203:10 | tv | +| variables.rs:206:26:206:27 | a4 | variables.rs:205:9:205:81 | a4 | +| variables.rs:208:11:208:12 | tv | variables.rs:203:9:203:10 | tv | +| variables.rs:210:26:210:27 | a5 | variables.rs:209:9:209:83 | a5 | +| variables.rs:212:11:212:12 | tv | variables.rs:203:9:203:10 | tv | +| variables.rs:214:26:214:27 | a6 | variables.rs:213:9:213:83 | a6 | +| variables.rs:220:11:220:16 | either | variables.rs:219:9:219:14 | either | +| variables.rs:222:16:222:17 | a7 | variables.rs:221:9:221:44 | a7 | +| variables.rs:223:26:223:27 | a7 | variables.rs:221:9:221:44 | a7 | +| variables.rs:231:11:231:16 | either | variables.rs:229:9:229:14 | either | +| variables.rs:235:23:235:25 | a11 | variables.rs:233:14:233:51 | a11 | +| variables.rs:237:15:237:15 | e | variables.rs:232:13:232:13 | e | +| variables.rs:238:28:238:30 | a12 | variables.rs:236:33:236:35 | a12 | +| variables.rs:254:11:254:12 | fv | variables.rs:253:9:253:10 | fv | +| variables.rs:256:26:256:28 | a13 | variables.rs:255:9:255:109 | a13 | +| variables.rs:266:15:266:16 | a8 | variables.rs:261:5:261:6 | a8 | +| variables.rs:267:15:267:16 | b3 | variables.rs:263:9:263:10 | b3 | +| variables.rs:268:15:268:16 | c1 | variables.rs:264:9:264:10 | c1 | +| variables.rs:274:15:274:16 | a9 | variables.rs:272:6:272:41 | a9 | +| variables.rs:283:15:283:17 | a10 | variables.rs:279:13:279:15 | a10 | +| variables.rs:284:15:284:16 | b4 | variables.rs:280:13:280:14 | b4 | +| variables.rs:285:15:285:16 | c2 | variables.rs:281:13:281:14 | c2 | +| variables.rs:292:9:292:11 | a10 | variables.rs:279:13:279:15 | a10 | +| variables.rs:293:9:293:10 | b4 | variables.rs:280:13:280:14 | b4 | +| variables.rs:294:9:294:10 | c2 | variables.rs:281:13:281:14 | c2 | +| variables.rs:296:15:296:17 | a10 | variables.rs:279:13:279:15 | a10 | +| variables.rs:297:15:297:16 | b4 | variables.rs:280:13:280:14 | b4 | +| variables.rs:298:15:298:16 | c2 | variables.rs:281:13:281:14 | c2 | +| variables.rs:305:23:305:25 | a10 | variables.rs:302:13:302:15 | a10 | +| variables.rs:306:23:306:24 | b4 | variables.rs:303:13:303:14 | b4 | +| variables.rs:310:15:310:17 | a10 | variables.rs:279:13:279:15 | a10 | +| variables.rs:311:15:311:16 | b4 | variables.rs:280:13:280:14 | b4 | +| variables.rs:317:9:317:9 | x | variables.rs:316:10:316:10 | x | +| variables.rs:319:9:319:23 | example_closure | variables.rs:315:9:315:23 | example_closure | +| variables.rs:320:15:320:16 | n1 | variables.rs:318:9:318:10 | n1 | +| variables.rs:325:9:325:9 | x | variables.rs:324:10:324:10 | x | +| variables.rs:327:9:327:26 | immutable_variable | variables.rs:323:9:323:26 | immutable_variable | +| variables.rs:328:15:328:16 | n2 | variables.rs:326:9:326:10 | n2 | +| variables.rs:335:12:335:12 | v | variables.rs:332:9:332:9 | v | +| variables.rs:336:19:336:22 | text | variables.rs:334:9:334:12 | text | +| variables.rs:343:15:343:15 | a | variables.rs:341:13:341:13 | a | +| variables.rs:345:15:345:15 | a | variables.rs:341:13:341:13 | a | +| variables.rs:352:6:352:10 | ref_i | variables.rs:350:9:350:13 | ref_i | +| variables.rs:353:15:353:15 | i | variables.rs:349:13:349:13 | i | +| variables.rs:357:6:357:6 | x | variables.rs:356:17:356:17 | x | +| variables.rs:358:10:358:10 | x | variables.rs:356:17:356:17 | x | +| variables.rs:359:10:359:10 | x | variables.rs:356:17:356:17 | x | +| variables.rs:360:12:360:12 | x | variables.rs:356:17:356:17 | x | +| variables.rs:364:6:364:6 | x | variables.rs:363:22:363:22 | x | +| variables.rs:365:10:365:10 | x | variables.rs:363:22:363:22 | x | +| variables.rs:366:10:366:10 | x | variables.rs:363:22:363:22 | x | +| variables.rs:367:6:367:6 | y | variables.rs:363:39:363:39 | y | +| variables.rs:368:9:368:9 | x | variables.rs:363:22:363:22 | x | +| variables.rs:375:6:375:6 | y | variables.rs:373:9:373:9 | y | +| variables.rs:377:15:377:15 | x | variables.rs:372:13:372:13 | x | +| variables.rs:384:9:384:9 | w | variables.rs:380:9:380:9 | w | +| variables.rs:386:7:386:7 | w | variables.rs:380:9:380:9 | w | +| variables.rs:388:15:388:15 | z | variables.rs:379:13:379:13 | z | +| variables.rs:395:6:395:6 | y | variables.rs:393:9:393:9 | y | +| variables.rs:396:15:396:15 | x | variables.rs:392:13:392:13 | x | +| variables.rs:403:19:403:19 | x | variables.rs:400:9:400:9 | x | +| variables.rs:405:5:405:7 | cap | variables.rs:402:9:402:11 | cap | +| variables.rs:406:15:406:15 | x | variables.rs:400:9:400:9 | x | +| variables.rs:413:19:413:19 | x | variables.rs:410:13:410:13 | x | +| variables.rs:415:5:415:12 | closure1 | variables.rs:412:9:412:16 | closure1 | +| variables.rs:416:15:416:15 | x | variables.rs:410:13:410:13 | x | +| variables.rs:423:5:423:12 | closure2 | variables.rs:420:13:420:20 | closure2 | +| variables.rs:424:15:424:15 | y | variables.rs:418:13:418:13 | y | +| variables.rs:429:9:429:9 | z | variables.rs:426:13:426:13 | z | +| variables.rs:431:5:431:12 | closure3 | variables.rs:428:13:428:20 | closure3 | +| variables.rs:432:15:432:15 | z | variables.rs:426:13:426:13 | z | +| variables.rs:441:5:441:9 | block | variables.rs:437:9:437:13 | block | +| variables.rs:442:15:442:15 | i | variables.rs:436:13:436:13 | i | +| variables.rs:447:15:447:15 | x | variables.rs:446:13:446:13 | x | +| variables.rs:448:15:448:15 | x | variables.rs:446:13:446:13 | x | +| variables.rs:449:8:449:8 | b | variables.rs:445:8:445:8 | b | +| variables.rs:451:19:451:19 | x | variables.rs:446:13:446:13 | x | +| variables.rs:452:19:452:19 | x | variables.rs:446:13:446:13 | x | +| variables.rs:455:19:455:19 | x | variables.rs:446:13:446:13 | x | +| variables.rs:456:19:456:19 | x | variables.rs:446:13:446:13 | x | +| variables.rs:458:15:458:15 | x | variables.rs:446:13:446:13 | x | +| variables.rs:463:8:463:9 | b1 | variables.rs:461:13:461:14 | b1 | +| variables.rs:464:19:464:19 | x | variables.rs:462:9:462:9 | x | +| variables.rs:466:19:466:19 | x | variables.rs:462:9:462:9 | x | +| variables.rs:469:8:469:9 | b2 | variables.rs:461:24:461:25 | b2 | +| variables.rs:470:19:470:19 | x | variables.rs:462:9:462:9 | x | +| variables.rs:472:19:472:19 | x | variables.rs:462:9:462:9 | x | +| variables.rs:489:15:489:15 | a | variables.rs:488:13:488:13 | a | +| variables.rs:490:5:490:5 | a | variables.rs:488:13:488:13 | a | +| variables.rs:491:15:491:15 | a | variables.rs:488:13:488:13 | a | +| variables.rs:493:15:493:15 | a | variables.rs:488:13:488:13 | a | +| variables.rs:499:15:499:15 | x | variables.rs:497:9:497:9 | x | +| variables.rs:517:3:517:3 | a | variables.rs:516:11:516:11 | a | +| variables.rs:519:13:519:13 | a | variables.rs:516:11:516:11 | a | +variableInitializer +| variables.rs:16:9:16:10 | x1 | variables.rs:16:14:16:16 | "a" | +| variables.rs:21:13:21:14 | x2 | variables.rs:21:18:21:18 | 4 | +| variables.rs:28:13:28:13 | x | variables.rs:28:17:28:17 | 1 | +| variables.rs:35:9:35:10 | x3 | variables.rs:35:14:35:14 | 1 | +| variables.rs:37:9:37:10 | x3 | variables.rs:38:9:38:14 | ... + ... | +| variables.rs:43:9:43:10 | x4 | variables.rs:43:14:43:16 | "a" | +| variables.rs:46:13:46:14 | x4 | variables.rs:46:18:46:20 | "b" | +| variables.rs:75:9:75:10 | p1 | variables.rs:75:14:75:37 | Point {...} | +| variables.rs:85:9:85:10 | s1 | variables.rs:85:14:85:41 | Some(...) | +| variables.rs:102:9:102:10 | s1 | variables.rs:102:14:102:41 | Some(...) | +| variables.rs:111:9:111:10 | x6 | variables.rs:111:14:111:20 | Some(...) | +| variables.rs:112:9:112:10 | y1 | variables.rs:112:14:112:15 | 10 | +| variables.rs:128:9:128:15 | numbers | variables.rs:128:19:128:35 | TupleExpr | +| variables.rs:155:9:155:10 | p2 | variables.rs:155:14:155:37 | Point {...} | +| variables.rs:169:9:169:11 | msg | variables.rs:169:15:169:38 | Message::Hello {...} | +| variables.rs:189:9:189:14 | either | variables.rs:189:18:189:33 | Either::Left(...) | +| variables.rs:203:9:203:10 | tv | variables.rs:203:14:203:36 | ThreeValued::Second(...) | +| variables.rs:219:9:219:14 | either | variables.rs:219:18:219:33 | Either::Left(...) | +| variables.rs:229:9:229:14 | either | variables.rs:229:18:229:33 | Either::Left(...) | +| variables.rs:253:9:253:10 | fv | variables.rs:253:14:253:35 | FourValued::Second(...) | +| variables.rs:315:9:315:23 | example_closure | variables.rs:316:9:317:9 | \|...\| x | +| variables.rs:318:9:318:10 | n1 | variables.rs:319:9:319:26 | example_closure(...) | +| variables.rs:323:9:323:26 | immutable_variable | variables.rs:324:9:325:9 | \|...\| x | +| variables.rs:326:9:326:10 | n2 | variables.rs:327:9:327:29 | immutable_variable(...) | +| variables.rs:332:9:332:9 | v | variables.rs:332:13:332:41 | &... | +| variables.rs:341:13:341:13 | a | variables.rs:341:17:341:17 | 0 | +| variables.rs:349:13:349:13 | i | variables.rs:349:17:349:17 | 1 | +| variables.rs:350:9:350:13 | ref_i | variables.rs:351:9:351:14 | &mut i | +| variables.rs:372:13:372:13 | x | variables.rs:372:17:372:17 | 2 | +| variables.rs:373:9:373:9 | y | variables.rs:374:9:374:28 | mutate_param(...) | +| variables.rs:379:13:379:13 | z | variables.rs:379:17:379:17 | 4 | +| variables.rs:380:9:380:9 | w | variables.rs:381:9:381:19 | &mut ... | +| variables.rs:392:13:392:13 | x | variables.rs:392:17:392:17 | 1 | +| variables.rs:393:9:393:9 | y | variables.rs:394:9:394:14 | &mut x | +| variables.rs:400:9:400:9 | x | variables.rs:400:13:400:15 | 100 | +| variables.rs:402:9:402:11 | cap | variables.rs:402:15:404:5 | \|...\| ... | +| variables.rs:410:13:410:13 | x | variables.rs:410:17:410:17 | 1 | +| variables.rs:412:9:412:16 | closure1 | variables.rs:412:20:414:5 | \|...\| ... | +| variables.rs:418:13:418:13 | y | variables.rs:418:17:418:17 | 2 | +| variables.rs:420:13:420:20 | closure2 | variables.rs:420:24:422:5 | \|...\| ... | +| variables.rs:426:13:426:13 | z | variables.rs:426:17:426:17 | 2 | +| variables.rs:428:13:428:20 | closure3 | variables.rs:428:24:430:5 | \|...\| ... | +| variables.rs:436:13:436:13 | i | variables.rs:436:22:436:22 | 0 | +| variables.rs:437:9:437:13 | block | variables.rs:437:17:439:5 | { ... } | +| variables.rs:446:13:446:13 | x | variables.rs:446:17:446:17 | 1 | +| variables.rs:462:9:462:9 | x | variables.rs:462:13:462:13 | 1 | +| variables.rs:488:13:488:13 | a | variables.rs:488:17:488:35 | MyStruct {...} | +| variables.rs:497:9:497:9 | x | variables.rs:497:13:497:14 | 16 | +| variables.rs:501:9:501:9 | z | variables.rs:501:13:501:14 | 17 | +| variables.rs:516:11:516:11 | a | variables.rs:516:15:516:33 | MyStruct {...} | +capturedVariable +| variables.rs:400:9:400:9 | x | +| variables.rs:410:13:410:13 | x | +| variables.rs:418:13:418:13 | y | +| variables.rs:426:13:426:13 | z | +| variables.rs:436:13:436:13 | i | +capturedAccess +| variables.rs:403:19:403:19 | x | +| variables.rs:413:19:413:19 | x | +| variables.rs:421:9:421:9 | y | +| variables.rs:429:9:429:9 | z | +| variables.rs:438:9:438:9 | i | diff --git a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected index bdfa4a9792dd..5b4796faa8c5 100644 --- a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected +++ b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/ExtractionConsistency.expected @@ -4,5 +4,4 @@ extractionWarning | does_not_compile.rs:2:13:2:12 | expected SEMICOLON | | does_not_compile.rs:2:21:2:20 | expected SEMICOLON | | does_not_compile.rs:2:26:2:25 | expected SEMICOLON | -| does_not_compile.rs:2:32:2:31 | expected field name or number | | error.rs:2:5:2:17 | An error! | diff --git a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/DataFlowConsistency.expected b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/DataFlowConsistency.expected index f4a07cc45c2d..0a61a151c204 100644 --- a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/DataFlowConsistency.expected +++ b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/DataFlowConsistency.expected @@ -3,17 +3,3 @@ uniqueEnclosingCallable | main.rs:198:28:198:28 | x | Node should have one enclosing callable but has 0. | | main.rs:202:28:202:28 | x | Node should have one enclosing callable but has 0. | | main.rs:206:28:206:28 | x | Node should have one enclosing callable but has 0. | -uniqueNodeToString -| main.rs:205:32:205:32 | (no string representation) | Node should have one toString but has 0. | -| main.rs:219:9:219:13 | (no string representation) | Node should have one toString but has 0. | -| main.rs:224:9:224:13 | (no string representation) | Node should have one toString but has 0. | -| main.rs:424:21:424:23 | (no string representation) | Node should have one toString but has 0. | -| main.rs:424:26:424:28 | (no string representation) | Node should have one toString but has 0. | -| main.rs:427:21:427:23 | (no string representation) | Node should have one toString but has 0. | -| main.rs:427:26:427:28 | (no string representation) | Node should have one toString but has 0. | -| main.rs:430:21:430:23 | (no string representation) | Node should have one toString but has 0. | -| main.rs:430:26:430:28 | (no string representation) | Node should have one toString but has 0. | -| main.rs:434:21:434:23 | (no string representation) | Node should have one toString but has 0. | -| main.rs:434:26:434:28 | (no string representation) | Node should have one toString but has 0. | -| unreachable.rs:10:34:10:34 | (no string representation) | Node should have one toString but has 0. | -| unreachable.rs:230:13:230:17 | (no string representation) | Node should have one toString but has 0. | From d609c1b7e65da0c4e3d45334a7766be83d4555b8 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 20 Nov 2024 17:00:13 +0100 Subject: [PATCH 13/35] Rust: fix `OrPat.toString` --- .../rust/elements/internal/OrPatImpl.qll | 2 +- .../generated/OrPat/OrPat.expected | 2 +- .../generated/OrPat/OrPat_getPat.expected | 4 +- .../test/library-tests/variables/Cfg.expected | 80 +++++++++---------- 4 files changed, 44 insertions(+), 44 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll index 20ee0f688522..07cc59f0ddee 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/OrPatImpl.qll @@ -22,7 +22,7 @@ module Impl { */ class OrPat extends Generated::OrPat { override string toString() { - result = concat(int i | | this.getPat(i).toAbbreviatedString() order by i, " | ") + result = concat(int i | | this.getPat(i).toAbbreviatedString(), " | " order by i) } /** Gets the last pattern in this or pattern. */ diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected index f4268aea84f0..26426d2c5aaf 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected @@ -1 +1 @@ -| gen_or_pat.rs:6:9:6:38 | ...Option::None | getNumberOfPats: | 2 | +| gen_or_pat.rs:6:9:6:38 | ... \| Option::None | getNumberOfPats: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected index e04c09875b53..80326c82f0d3 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_or_pat.rs:6:9:6:38 | ...Option::None | 0 | gen_or_pat.rs:6:9:6:23 | TupleStructPat | -| gen_or_pat.rs:6:9:6:38 | ...Option::None | 1 | gen_or_pat.rs:6:27:6:38 | Option::None | +| gen_or_pat.rs:6:9:6:38 | ... \| Option::None | 0 | gen_or_pat.rs:6:9:6:23 | TupleStructPat | +| gen_or_pat.rs:6:9:6:38 | ... \| Option::None | 1 | gen_or_pat.rs:6:27:6:38 | Option::None | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index 3a7e72f03491..93356b894085 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -407,10 +407,10 @@ edges | variables.rs:190:11:190:16 | either | variables.rs:191:9:191:24 | TupleStructPat | | | variables.rs:191:9:191:24 | TupleStructPat | variables.rs:191:22:191:23 | a3 | match | | variables.rs:191:9:191:24 | TupleStructPat | variables.rs:191:28:191:44 | TupleStructPat | no-match | -| variables.rs:191:9:191:44 | [match(true)] ...... | variables.rs:192:16:192:24 | print_i64 | match | -| variables.rs:191:22:191:23 | a3 | variables.rs:191:9:191:44 | [match(true)] ...... | match | +| variables.rs:191:9:191:44 | [match(true)] ... \| ... | variables.rs:192:16:192:24 | print_i64 | match | +| variables.rs:191:22:191:23 | a3 | variables.rs:191:9:191:44 | [match(true)] ... \| ... | match | | variables.rs:191:28:191:44 | TupleStructPat | variables.rs:191:42:191:43 | a3 | match | -| variables.rs:191:42:191:43 | a3 | variables.rs:191:9:191:44 | [match(true)] ...... | match | +| variables.rs:191:42:191:43 | a3 | variables.rs:191:9:191:44 | [match(true)] ... \| ... | match | | variables.rs:192:16:192:24 | print_i64 | variables.rs:192:26:192:27 | a3 | | | variables.rs:192:16:192:28 | print_i64(...) | variables.rs:190:5:193:5 | match either { ... } | | | variables.rs:192:26:192:27 | a3 | variables.rs:192:16:192:28 | print_i64(...) | | @@ -427,30 +427,30 @@ edges | variables.rs:204:11:204:12 | tv | variables.rs:205:9:205:30 | TupleStructPat | | | variables.rs:205:9:205:30 | TupleStructPat | variables.rs:205:28:205:29 | a4 | match | | variables.rs:205:9:205:30 | TupleStructPat | variables.rs:205:34:205:56 | TupleStructPat | no-match | -| variables.rs:205:9:205:81 | [match(true)] ......... | variables.rs:206:16:206:24 | print_i64 | match | -| variables.rs:205:28:205:29 | a4 | variables.rs:205:9:205:81 | [match(true)] ......... | match | +| variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | variables.rs:206:16:206:24 | print_i64 | match | +| variables.rs:205:28:205:29 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | match | | variables.rs:205:34:205:56 | TupleStructPat | variables.rs:205:54:205:55 | a4 | match | | variables.rs:205:34:205:56 | TupleStructPat | variables.rs:205:60:205:81 | TupleStructPat | no-match | -| variables.rs:205:54:205:55 | a4 | variables.rs:205:9:205:81 | [match(true)] ......... | match | +| variables.rs:205:54:205:55 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | match | | variables.rs:205:60:205:81 | TupleStructPat | variables.rs:205:79:205:80 | a4 | match | -| variables.rs:205:79:205:80 | a4 | variables.rs:205:9:205:81 | [match(true)] ......... | match | +| variables.rs:205:79:205:80 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | match | | variables.rs:206:16:206:24 | print_i64 | variables.rs:206:26:206:27 | a4 | | | variables.rs:206:16:206:28 | print_i64(...) | variables.rs:204:5:207:5 | match tv { ... } | | | variables.rs:206:26:206:27 | a4 | variables.rs:206:16:206:28 | print_i64(...) | | | variables.rs:208:5:211:5 | ExprStmt | variables.rs:208:11:208:12 | tv | | | variables.rs:208:5:211:5 | match tv { ... } | variables.rs:212:11:212:12 | tv | | | variables.rs:208:11:208:12 | tv | variables.rs:209:10:209:31 | TupleStructPat | | -| variables.rs:209:9:209:83 | [match(true)] ...... | variables.rs:210:16:210:24 | print_i64 | match | +| variables.rs:209:9:209:83 | [match(true)] ... \| ... | variables.rs:210:16:210:24 | print_i64 | match | | variables.rs:209:10:209:31 | TupleStructPat | variables.rs:209:29:209:30 | a5 | match | | variables.rs:209:10:209:31 | TupleStructPat | variables.rs:209:35:209:57 | TupleStructPat | no-match | -| variables.rs:209:10:209:57 | [match(false)] ...... | variables.rs:209:62:209:83 | TupleStructPat | no-match | -| variables.rs:209:10:209:57 | [match(true)] ...... | variables.rs:209:9:209:83 | [match(true)] ...... | match | -| variables.rs:209:29:209:30 | a5 | variables.rs:209:10:209:57 | [match(true)] ...... | match | -| variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:10:209:57 | [match(false)] ...... | no-match | +| variables.rs:209:10:209:57 | [match(false)] ... \| ... | variables.rs:209:62:209:83 | TupleStructPat | no-match | +| variables.rs:209:10:209:57 | [match(true)] ... \| ... | variables.rs:209:9:209:83 | [match(true)] ... \| ... | match | +| variables.rs:209:29:209:30 | a5 | variables.rs:209:10:209:57 | [match(true)] ... \| ... | match | +| variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:10:209:57 | [match(false)] ... \| ... | no-match | | variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:55:209:56 | a5 | match | -| variables.rs:209:55:209:56 | a5 | variables.rs:209:10:209:57 | [match(true)] ...... | match | +| variables.rs:209:55:209:56 | a5 | variables.rs:209:10:209:57 | [match(true)] ... \| ... | match | | variables.rs:209:62:209:83 | TupleStructPat | variables.rs:209:81:209:82 | a5 | match | -| variables.rs:209:81:209:82 | a5 | variables.rs:209:9:209:83 | [match(true)] ...... | match | +| variables.rs:209:81:209:82 | a5 | variables.rs:209:9:209:83 | [match(true)] ... \| ... | match | | variables.rs:210:16:210:24 | print_i64 | variables.rs:210:26:210:27 | a5 | | | variables.rs:210:16:210:28 | print_i64(...) | variables.rs:208:5:211:5 | match tv { ... } | | | variables.rs:210:26:210:27 | a5 | variables.rs:210:16:210:28 | print_i64(...) | | @@ -458,14 +458,14 @@ edges | variables.rs:212:11:212:12 | tv | variables.rs:213:9:213:30 | TupleStructPat | | | variables.rs:213:9:213:30 | TupleStructPat | variables.rs:213:28:213:29 | a6 | match | | variables.rs:213:9:213:30 | TupleStructPat | variables.rs:213:35:213:57 | TupleStructPat | no-match | -| variables.rs:213:9:213:83 | [match(true)] ...... | variables.rs:214:16:214:24 | print_i64 | match | -| variables.rs:213:28:213:29 | a6 | variables.rs:213:9:213:83 | [match(true)] ...... | match | +| variables.rs:213:9:213:83 | [match(true)] ... \| ... | variables.rs:214:16:214:24 | print_i64 | match | +| variables.rs:213:28:213:29 | a6 | variables.rs:213:9:213:83 | [match(true)] ... \| ... | match | | variables.rs:213:35:213:57 | TupleStructPat | variables.rs:213:55:213:56 | a6 | match | | variables.rs:213:35:213:57 | TupleStructPat | variables.rs:213:61:213:82 | TupleStructPat | no-match | -| variables.rs:213:35:213:82 | [match(true)] ...... | variables.rs:213:9:213:83 | [match(true)] ...... | match | -| variables.rs:213:55:213:56 | a6 | variables.rs:213:35:213:82 | [match(true)] ...... | match | +| variables.rs:213:35:213:82 | [match(true)] ... \| ... | variables.rs:213:9:213:83 | [match(true)] ... \| ... | match | +| variables.rs:213:55:213:56 | a6 | variables.rs:213:35:213:82 | [match(true)] ... \| ... | match | | variables.rs:213:61:213:82 | TupleStructPat | variables.rs:213:80:213:81 | a6 | match | -| variables.rs:213:80:213:81 | a6 | variables.rs:213:35:213:82 | [match(true)] ...... | match | +| variables.rs:213:80:213:81 | a6 | variables.rs:213:35:213:82 | [match(true)] ... \| ... | match | | variables.rs:214:16:214:24 | print_i64 | variables.rs:214:26:214:27 | a6 | | | variables.rs:214:16:214:28 | print_i64(...) | variables.rs:212:5:215:5 | match tv { ... } | | | variables.rs:214:26:214:27 | a6 | variables.rs:214:16:214:28 | print_i64(...) | | @@ -481,12 +481,12 @@ edges | variables.rs:220:11:220:16 | either | variables.rs:221:9:221:24 | TupleStructPat | | | variables.rs:221:9:221:24 | TupleStructPat | variables.rs:221:22:221:23 | a7 | match | | variables.rs:221:9:221:24 | TupleStructPat | variables.rs:221:28:221:44 | TupleStructPat | no-match | -| variables.rs:221:9:221:44 | [match(false)] ...... | variables.rs:224:9:224:9 | _ | no-match | -| variables.rs:221:9:221:44 | [match(true)] ...... | variables.rs:222:16:222:17 | a7 | match | -| variables.rs:221:22:221:23 | a7 | variables.rs:221:9:221:44 | [match(true)] ...... | match | -| variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:9:221:44 | [match(false)] ...... | no-match | +| variables.rs:221:9:221:44 | [match(false)] ... \| ... | variables.rs:224:9:224:9 | _ | no-match | +| variables.rs:221:9:221:44 | [match(true)] ... \| ... | variables.rs:222:16:222:17 | a7 | match | +| variables.rs:221:22:221:23 | a7 | variables.rs:221:9:221:44 | [match(true)] ... \| ... | match | +| variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:9:221:44 | [match(false)] ... \| ... | no-match | | variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:42:221:43 | a7 | match | -| variables.rs:221:42:221:43 | a7 | variables.rs:221:9:221:44 | [match(true)] ...... | match | +| variables.rs:221:42:221:43 | a7 | variables.rs:221:9:221:44 | [match(true)] ... \| ... | match | | variables.rs:222:16:222:17 | a7 | variables.rs:222:21:222:21 | 0 | | | variables.rs:222:16:222:21 | ... > ... | variables.rs:223:16:223:24 | print_i64 | true | | variables.rs:222:16:222:21 | ... > ... | variables.rs:224:9:224:9 | _ | false | @@ -509,12 +509,12 @@ edges | variables.rs:232:9:233:52 | [match(true)] e | variables.rs:235:13:235:27 | ExprStmt | match | | variables.rs:233:14:233:30 | TupleStructPat | variables.rs:233:27:233:29 | a11 | match | | variables.rs:233:14:233:30 | TupleStructPat | variables.rs:233:34:233:51 | TupleStructPat | no-match | -| variables.rs:233:14:233:51 | [match(false)] ...... | variables.rs:241:9:241:9 | _ | no-match | -| variables.rs:233:14:233:51 | [match(true)] ...... | variables.rs:232:9:233:52 | [match(true)] e | match | -| variables.rs:233:27:233:29 | a11 | variables.rs:233:14:233:51 | [match(true)] ...... | match | -| variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:14:233:51 | [match(false)] ...... | no-match | +| variables.rs:233:14:233:51 | [match(false)] ... \| ... | variables.rs:241:9:241:9 | _ | no-match | +| variables.rs:233:14:233:51 | [match(true)] ... \| ... | variables.rs:232:9:233:52 | [match(true)] e | match | +| variables.rs:233:27:233:29 | a11 | variables.rs:233:14:233:51 | [match(true)] ... \| ... | match | +| variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:14:233:51 | [match(false)] ... \| ... | no-match | | variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:48:233:50 | a11 | match | -| variables.rs:233:48:233:50 | a11 | variables.rs:233:14:233:51 | [match(true)] ...... | match | +| variables.rs:233:48:233:50 | a11 | variables.rs:233:14:233:51 | [match(true)] ... \| ... | match | | variables.rs:234:12:240:9 | { ... } | variables.rs:231:5:242:5 | match either { ... } | | | variables.rs:235:13:235:21 | print_i64 | variables.rs:235:23:235:25 | a11 | | | variables.rs:235:13:235:26 | print_i64(...) | variables.rs:236:16:237:15 | let ... = e | | @@ -546,18 +546,18 @@ edges | variables.rs:254:11:254:12 | fv | variables.rs:255:9:255:30 | TupleStructPat | | | variables.rs:255:9:255:30 | TupleStructPat | variables.rs:255:27:255:29 | a13 | match | | variables.rs:255:9:255:30 | TupleStructPat | variables.rs:255:35:255:57 | TupleStructPat | no-match | -| variables.rs:255:9:255:109 | [match(true)] ......... | variables.rs:256:16:256:24 | print_i64 | match | -| variables.rs:255:27:255:29 | a13 | variables.rs:255:9:255:109 | [match(true)] ......... | match | +| variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | variables.rs:256:16:256:24 | print_i64 | match | +| variables.rs:255:27:255:29 | a13 | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | match | | variables.rs:255:35:255:57 | TupleStructPat | variables.rs:255:54:255:56 | a13 | match | | variables.rs:255:35:255:57 | TupleStructPat | variables.rs:255:61:255:82 | TupleStructPat | no-match | -| variables.rs:255:35:255:82 | [match(false)] ...... | variables.rs:255:87:255:109 | TupleStructPat | no-match | -| variables.rs:255:35:255:82 | [match(true)] ...... | variables.rs:255:9:255:109 | [match(true)] ......... | match | -| variables.rs:255:54:255:56 | a13 | variables.rs:255:35:255:82 | [match(true)] ...... | match | -| variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:35:255:82 | [match(false)] ...... | no-match | +| variables.rs:255:35:255:82 | [match(false)] ... \| ... | variables.rs:255:87:255:109 | TupleStructPat | no-match | +| variables.rs:255:35:255:82 | [match(true)] ... \| ... | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | match | +| variables.rs:255:54:255:56 | a13 | variables.rs:255:35:255:82 | [match(true)] ... \| ... | match | +| variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:35:255:82 | [match(false)] ... \| ... | no-match | | variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:79:255:81 | a13 | match | -| variables.rs:255:79:255:81 | a13 | variables.rs:255:35:255:82 | [match(true)] ...... | match | +| variables.rs:255:79:255:81 | a13 | variables.rs:255:35:255:82 | [match(true)] ... \| ... | match | | variables.rs:255:87:255:109 | TupleStructPat | variables.rs:255:106:255:108 | a13 | match | -| variables.rs:255:106:255:108 | a13 | variables.rs:255:9:255:109 | [match(true)] ......... | match | +| variables.rs:255:106:255:108 | a13 | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | match | | variables.rs:256:16:256:24 | print_i64 | variables.rs:256:26:256:28 | a13 | | | variables.rs:256:16:256:29 | print_i64(...) | variables.rs:254:5:257:5 | match fv { ... } | | | variables.rs:256:26:256:28 | a13 | variables.rs:256:16:256:29 | print_i64(...) | | @@ -587,10 +587,10 @@ edges | variables.rs:272:5:272:50 | ...: Either | variables.rs:274:5:274:18 | ExprStmt | | | variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:19:272:20 | a9 | match | | variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:25:272:41 | TupleStructPat | no-match | -| variables.rs:272:6:272:41 | [match(true)] ...... | variables.rs:272:5:272:50 | ...: Either | match | -| variables.rs:272:19:272:20 | a9 | variables.rs:272:6:272:41 | [match(true)] ...... | match | +| variables.rs:272:6:272:41 | [match(true)] ... \| ... | variables.rs:272:5:272:50 | ...: Either | match | +| variables.rs:272:19:272:20 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | | variables.rs:272:25:272:41 | TupleStructPat | variables.rs:272:39:272:40 | a9 | match | -| variables.rs:272:39:272:40 | a9 | variables.rs:272:6:272:41 | [match(true)] ...... | match | +| variables.rs:272:39:272:40 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | | variables.rs:273:9:275:1 | { ... } | variables.rs:271:1:275:1 | exit fn param_pattern2 (normal) | | | variables.rs:274:5:274:13 | print_i64 | variables.rs:274:15:274:16 | a9 | | | variables.rs:274:5:274:17 | print_i64(...) | variables.rs:273:9:275:1 | { ... } | | From 5012332bb28a3002ed12b196d7795f7b2ab032e9 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 21 Nov 2024 11:12:29 +0100 Subject: [PATCH 14/35] Rust: fix `Path.toString` and address some review comments --- rust/ql/.generated.list | 40 +++++++++---------- rust/ql/.gitattributes | 30 +++++++------- rust/ql/lib/codeql/rust/elements/Path.qll | 1 + .../lib/codeql/rust/elements/PathSegment.qll | 5 +-- .../rust/elements/internal/BreakExprImpl.qll | 4 +- .../rust/elements/internal/CastExprImpl.qll | 2 +- .../elements/internal/ContinueExprImpl.qll | 6 ++- .../rust/elements/internal/EnumImpl.qll | 2 +- .../rust/elements/internal/FieldExprImpl.qll | 2 +- .../rust/elements/internal/ImplImpl.qll | 4 +- .../rust/elements/internal/LabelImpl.qll | 9 ++++- .../elements/internal/LabelableExprImpl.qll | 12 +++++- .../rust/elements/internal/LetElseImpl.qll | 4 +- .../rust/elements/internal/LetStmtImpl.qll | 6 ++- .../elements/internal/LiteralExprImpl.qll | 16 +++++++- .../rust/elements/internal/LiteralPatImpl.qll | 2 +- .../rust/elements/internal/MacroCallImpl.qll | 2 +- .../rust/elements/internal/PathImpl.qll | 5 +-- .../rust/elements/internal/PathPatImpl.qll | 2 +- .../elements/internal/PathSegmentImpl.qll | 20 ++++++---- .../rust/elements/internal/PathTypeImpl.qll | 4 +- .../elements/internal/RecordExprFieldImpl.qll | 2 +- .../rust/elements/internal/RecordPatImpl.qll | 2 +- .../rust/elements/internal/TraitImpl.qll | 2 +- .../rust/elements/internal/UnionImpl.qll | 2 +- .../rust/elements/internal/generated/Path.qll | 1 + .../internal/generated/PathSegment.qll | 5 +-- .../rust/elements/internal/generated/Raw.qll | 6 +-- .../generated/.generated_tests.list | 9 ++--- .../extractor-tests/generated/.gitattributes | 7 ++-- .../generated/Path/Path.expected | 25 +++++++++++- .../generated/Path/PathExpr.expected | 7 ++++ .../generated/{PathExpr => Path}/PathExpr.ql | 0 .../PathExpr_getAttr.expected | 0 .../{PathExpr => Path}/PathExpr_getAttr.ql | 0 .../generated/Path/PathExpr_getPath.expected | 7 ++++ .../{PathExpr => Path}/PathExpr_getPath.ql | 0 .../generated/Path/PathPat.expected | 1 + .../generated/{PathPat => Path}/PathPat.ql | 0 .../generated/Path/PathPat_getPath.expected | 1 + .../{PathPat => Path}/PathPat_getPath.ql | 0 .../generated/Path/PathSegment.expected | 23 +++++++++++ .../{PathSegment => Path}/PathSegment.ql | 0 .../PathSegment_getGenericArgList.expected | 0 .../PathSegment_getGenericArgList.ql | 0 .../Path/PathSegment_getNameRef.expected | 21 ++++++++++ .../PathSegment_getNameRef.ql | 0 .../PathSegment_getParamList.expected | 0 .../PathSegment_getParamList.ql | 0 .../Path/PathSegment_getPathType.expected | 2 + .../PathSegment_getPathType.ql | 0 .../PathSegment_getRetType.expected | 0 .../PathSegment_getRetType.ql | 0 .../PathSegment_getReturnTypeSyntax.expected | 0 .../PathSegment_getReturnTypeSyntax.ql | 0 .../generated/Path/PathSegment_getTy.expected | 2 + .../PathSegment_getTy.ql | 0 .../generated/Path/PathType.expected | 4 ++ .../generated/{PathType => Path}/PathType.ql | 0 .../generated/Path/PathType_getPath.expected | 4 ++ .../{PathType => Path}/PathType_getPath.ql | 0 .../generated/Path/Path_getPart.expected | 25 +++++++++++- .../generated/Path/Path_getQualifier.expected | 10 ++++- .../Path/Path_getResolvedCrateOrigin.expected | 2 + .../Path/Path_getResolvedPath.expected | 2 + .../generated/Path/gen_path.rs | 1 + .../{PathExpr => Path}/gen_path_expr.rs | 0 .../{PathPat => Path}/gen_path_pat.rs | 0 .../{PathType => Path}/gen_path_type.rs | 0 .../CONSISTENCY/DataFlowConsistency.expected | 3 -- .../generated/PathExpr/PathExpr.expected | 4 -- .../PathExpr/PathExpr_getPath.expected | 4 -- .../generated/PathPat/PathPat.expected | 1 - .../PathPat/PathPat_getPath.expected | 1 - .../PathSegment/PathSegment.expected | 4 -- .../PathSegment_getNameRef.expected | 4 -- .../PathSegment_getPathType.expected | 0 .../PathSegment/PathSegment_getTy.expected | 0 .../generated/PathSegment/gen_path_segment.rs | 6 --- .../generated/PathType/PathType.expected | 0 .../PathType/PathType_getPath.expected | 0 rust/schema/annotations.py | 10 +++-- 82 files changed, 261 insertions(+), 127 deletions(-) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathExpr.expected rename rust/ql/test/extractor-tests/generated/{PathExpr => Path}/PathExpr.ql (100%) rename rust/ql/test/extractor-tests/generated/{PathExpr => Path}/PathExpr_getAttr.expected (100%) rename rust/ql/test/extractor-tests/generated/{PathExpr => Path}/PathExpr_getAttr.ql (100%) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected rename rust/ql/test/extractor-tests/generated/{PathExpr => Path}/PathExpr_getPath.ql (100%) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathPat.expected rename rust/ql/test/extractor-tests/generated/{PathPat => Path}/PathPat.ql (100%) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.expected rename rust/ql/test/extractor-tests/generated/{PathPat => Path}/PathPat_getPath.ql (100%) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathSegment.expected rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment.ql (100%) rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getGenericArgList.expected (100%) rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getGenericArgList.ql (100%) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getNameRef.ql (100%) rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getParamList.expected (100%) rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getParamList.ql (100%) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getPathType.ql (100%) rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getRetType.expected (100%) rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getRetType.ql (100%) rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getReturnTypeSyntax.expected (100%) rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getReturnTypeSyntax.ql (100%) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathSegment_getTy.expected rename rust/ql/test/extractor-tests/generated/{PathSegment => Path}/PathSegment_getTy.ql (100%) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathType.expected rename rust/ql/test/extractor-tests/generated/{PathType => Path}/PathType.ql (100%) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathType_getPath.expected rename rust/ql/test/extractor-tests/generated/{PathType => Path}/PathType_getPath.ql (100%) rename rust/ql/test/extractor-tests/generated/{PathExpr => Path}/gen_path_expr.rs (100%) rename rust/ql/test/extractor-tests/generated/{PathPat => Path}/gen_path_pat.rs (100%) rename rust/ql/test/extractor-tests/generated/{PathType => Path}/gen_path_type.rs (100%) delete mode 100644 rust/ql/test/extractor-tests/generated/PathExpr/CONSISTENCY/DataFlowConsistency.expected delete mode 100644 rust/ql/test/extractor-tests/generated/PathExpr/PathExpr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/PathExpr/PathExpr_getPath.expected delete mode 100644 rust/ql/test/extractor-tests/generated/PathPat/PathPat.expected delete mode 100644 rust/ql/test/extractor-tests/generated/PathPat/PathPat_getPath.expected delete mode 100644 rust/ql/test/extractor-tests/generated/PathSegment/PathSegment.expected delete mode 100644 rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getPathType.expected delete mode 100644 rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getTy.expected delete mode 100644 rust/ql/test/extractor-tests/generated/PathSegment/gen_path_segment.rs delete mode 100644 rust/ql/test/extractor-tests/generated/PathType/PathType.expected delete mode 100644 rust/ql/test/extractor-tests/generated/PathType/PathType_getPath.expected diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 3e240b0b61d7..4ab35c1b4b32 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -98,11 +98,11 @@ lib/codeql/rust/elements/ParenExpr.qll b635f0e5d300cd9cf3651cfcefd58316c21727295 lib/codeql/rust/elements/ParenPat.qll 40d033de6c85ad042223e0da80479adebab35494396ab652da85d3497e435c5a 8f2febe5d5cefcb076d201ae9607d403b9cfe8169d2f4b71d13868e0af43dc25 lib/codeql/rust/elements/ParenType.qll e1f5695b143c97b98ccdb460a5cf872461cfc13b83a4f005f26c288dc0afae10 1164f8efae7f255925411bddb33939fab0bf1c07955a16fef173b3f4675d09ae lib/codeql/rust/elements/Pat.qll 56211c5cb4709e7c12a2bfd2da5e413a451672d99e23a8386c08ad0b999fd45c b1b1893a13a75c4f0390f7e2a14ee98a46f067cfdc991a8d43adc82497d20aff -lib/codeql/rust/elements/Path.qll a0078e6d57dfd5a3b7fb2be4587f55f8e9c65ee042815a8a5b8dbd5273b4076a 0e2d4f8cbd54bd60aa4929b5fd50fe214346b6c0451f73e45143445d15420108 +lib/codeql/rust/elements/Path.qll 94869df09b929c4a60bae42b7e3a66c007f41078c08b7d9c6defb705b953ce8e eb317f75b89978d41fd3b166c7e3d871da4c04b3e17afbbcd0a5d73881e0d1d9 lib/codeql/rust/elements/PathExpr.qll 906df1d80c662b79f1b0b0428c39754b7f8dbcb2234919dd45dd8206a099dd36 1d6015afab6378c926c5838c9a5772cfcfeedf474e2eeca3e46085300ff8d4e1 lib/codeql/rust/elements/PathExprBase.qll bb41092ec690ae926e3233c215dcaf1fd8e161b8a6955151949f492e02dba13a b2257072f8062d31c29c63ee1311b07e0d2eb37075f582cfc76bb542ef773198 lib/codeql/rust/elements/PathPat.qll 6897e69bcb24b56d39ede796cf5767988dcd5741e02333fa8495dd7c814f771a 2a011fb92f17e4b4ff713e6d29f591054dfede22a9aaa006e67fca2c23ab76bf -lib/codeql/rust/elements/PathSegment.qll 536a8fe172db367e5f1dc678a014e2350eadfc379242d2b5451725e826ab1448 1a3a237f56c1d9ccdce6832ec6417fed25cd3e29ba836363cc6085e2125de4c5 +lib/codeql/rust/elements/PathSegment.qll 9560551cf8b65e84705e7f302e12b48330e048613129e87c0f65a7eb297a6cc3 3aa75a5fd81f8ea32bd2b4bf0c51c386de57cbe9ab035fe3ec68ad7fcf51b375 lib/codeql/rust/elements/PathType.qll a7bd3b05dc2c0e96c91c5485db508a1f5bb8fe3a01486be6815ae9dabb163add b11e996b6c0cc21a3d8d1ddc23c37e4d54a78e84a9278b3ceca1e94cb7321532 lib/codeql/rust/elements/PrefixExpr.qll 107e7bd111b637fd6d76026062d54c2780760b965f172ef119c50dd0714a377d 46954a9404e561c51682395729daac3bda5442113f29839d043e9605d63f7f6d lib/codeql/rust/elements/PtrType.qll b137f47a53e41b3b30c7d80dbdd6724bf15f99530ca40cc264a04af5f07aa878 b2ffdf739bfb7564d942fe54409834a59511c0b305b6d5b2219a8ee0ef594332 @@ -512,18 +512,18 @@ lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af2003 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 lib/codeql/rust/elements/internal/generated/ParentChild.qll 2237ba700c7d790cbbf7ad4d86889d22c6d210af62474ad8d363d79abb574722 36f9d47b002a241f0f793816ca9e6327fbbefb02268665553c56ded6012f82ec lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 -lib/codeql/rust/elements/internal/generated/Path.qll f2b1be2f8f44001a6533533c978c4a9a8b7d64838d6f39eef5f0c0e7890611b8 d724a00a38f42429ffa8fb3bffbb5ec69e16a32ceeeb1d1f026fc7adf87424a8 +lib/codeql/rust/elements/internal/generated/Path.qll 4c1c8e840ed57880e574142b081b11d7a7428a009f10e3aa8f4645e211f6b2e0 989668cf0f1bdee7557e2f97c01e41d2a56848227fed41477833f5fc1e1d35f6 lib/codeql/rust/elements/internal/generated/PathExpr.qll 2096e3c1db22ee488a761690adabfc9cfdea501c99f7c5d96c0019cb113fc506 54245ce0449c4e263173213df01e079d5168a758503a5dbd61b25ad35a311140 lib/codeql/rust/elements/internal/generated/PathExprBase.qll d8218e201b8557fa6d9ca2c30b764e5ad9a04a2e4fb695cc7219bbd7636a6ac2 4ef178426d7095a156f4f8c459b4d16f63abc64336cb50a6cf883a5f7ee09113 lib/codeql/rust/elements/internal/generated/PathPat.qll 98c9938d6a359fd717829b196eb09701d2c798e18c1f43fa7b2a9145afdf6c19 caba2e629cae08682baac90a76ae9a48cda2d7d6f9c23d506fa0ff3f292978a4 -lib/codeql/rust/elements/internal/generated/PathSegment.qll 4621597fd86246f788b8f9ca73f6b0f27929fc04261ce3ccf85da1183071431d aadda8bce386a3b7a9c53b98465eedcc4f724e37b8a904c1775af5b7ffb041ee +lib/codeql/rust/elements/internal/generated/PathSegment.qll 0fa07886deb0fc4d909d7edf691238a344f2739900aafb168cbac171eb1729a8 8f4bb418d8bea5e40128a87977c57d0a9183d06d111601ad93130c8615c11465 lib/codeql/rust/elements/internal/generated/PathType.qll 45de78e5374d6eb0446e2112ec72d3692c2811df9fa2ad03d0127e426940abe3 622cf70408413a565a0dac58f451035ac1339c8d0ee5b24f630680201cb0aa48 lib/codeql/rust/elements/internal/generated/PrefixExpr.qll c9ede5f2deb7b41bc8240969e8554f645057018fe96e7e9ad9c2924c8b14722b 5ae2e3c3dc8fa73e7026ef6534185afa6b0b5051804435d8b741dd3640c864e1 lib/codeql/rust/elements/internal/generated/PtrType.qll 40099c5a4041314b66932dfd777c9e2bef90a0711fb8d7c2c2cec764c003ac4a cf8297d93557356a572223d3e8acca701837c4b1f54e8d4351ba195fb7ed27f8 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll 462d87edee9e0fc463f789a765e19d94c4c027a73db876ad306f918dd87e9511 33a6782598a6ba0e02e6b772b5b74ebbe609b0bc3a92180f85db7472e00aa8d9 +lib/codeql/rust/elements/internal/generated/Raw.qll fd2eeb93f84b668f5083ecad8ff5f5d4bbdfcf4c65f4a40907aca47e33b031d6 de433b9feec8276ed34d106b97c7b66d81206a21a2b5343253f4cf799f1bf567 lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -888,25 +888,25 @@ test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql 96f3db0ec4e71fd870619 test/extractor-tests/generated/ParenType/ParenType.ql 81c8ad667397ce36157941abd9b879e9305a440018853af4528eb737ae4d2935 3ef3b86203b0143be2d7f7f4833f55fd6c226cb9205e3c1940b6c2a1371622f3 test/extractor-tests/generated/ParenType/ParenType_getTy.ql 41dd6605e7b348618156712b559e2f1b6aac02d6c727e8cbf8653530794ec969 30ac6611c730e76cfb75f98efcf817783a50cec0cf3b3197459d7642f74dde85 test/extractor-tests/generated/Path/Path.ql f17c1c4d23c0d5e9776cee84444f6ee7445de88afbc1f26c34b96e13ab618158 89499cb0f63b3634d6b5e2b8c4a13bd4401ce82e54af0ab46e41a34b0288eeb9 +test/extractor-tests/generated/Path/PathExpr.ql b9696cd7ad9f3874e4bc4b1b9c77f42f06ab6c61b77fb641458da63667087b9b db84a7a8dd05e30ff80733af01f08d43ff031bb4b3e3af06332a73ba7e7bbc43 +test/extractor-tests/generated/Path/PathExpr_getAttr.ql 2ccac48cd91d86670c1d2742de20344135d424e6f0e3dafcc059555046f92d92 9b7b5f5f9e3674fad9b3a5bcd3cabc0dff32a95640da0fce6f4d0eb931f1757d +test/extractor-tests/generated/Path/PathExpr_getPath.ql e7894071313a74166bdd31d7cd974037fcd5a7f0e92d5eec42833266196eb858 46a06e8a1207e7a0fa175cd4b61068e5fd6c43b5575b88986409f0ac2be64c51 +test/extractor-tests/generated/Path/PathPat.ql 823732954a5882e33a37bd0bf0cafb2cec51659a5203a4831eec2516da0e49fa 54001149718a9ca15d8c0d4be63f3fe00a9f0d44fa1309e2f605d7932355ea5d +test/extractor-tests/generated/Path/PathPat_getPath.ql 6c0c71c80a6e631ea7775ec8660b470ff6b264bab14a399606cf113b1fb190fc 8e34cbb4d064db929e94652e1901ec4f26affa71e30e556b7acdff71dd622cbb +test/extractor-tests/generated/Path/PathSegment.ql efc39cea1b4c0b2b0da6434136334430d074699f84124d6bcf94c24aa854dc64 c0a4bd60c67665c058ca22a59e535e925fdb00dec95ffc5c71697fb0ed78a329 +test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql 8f6e67b3e316309f20e21d7e7944accf66b0256b76fa50ee9a714044c6ec8cea 15f10a701fc4d3f9fd6734da90790cdbc8a1ddd57bf52695740acedcb2e6e485 +test/extractor-tests/generated/Path/PathSegment_getNameRef.ql 799d284e2f9267d6bbe67aa7035e525ef347dc74cb3e2180e7b2171b5cb49674 592130bc2358989536abf62e8a261272c851483ede4f19783f7d61ffc1803e4b +test/extractor-tests/generated/Path/PathSegment_getParamList.ql e1e7b9b5062f936c33b7e7e29b21456448242df4985c6cffb54900063cfd3e63 6568e851cb6bcb32622f89d01e3aa6e7dd21940d21572a9988584e34bdf25366 +test/extractor-tests/generated/Path/PathSegment_getPathType.ql 01942da6d0b10c1d15caec6abb8c53f1dc7f8c04a91a797f572063aa003dbc4b cb21e6cb160652527ba571265297dae86beffe191dd7dfc4d0beee45cb0cda29 +test/extractor-tests/generated/Path/PathSegment_getRetType.ql 36386a514bc925f5b17ad87afba9fef7986900c1b791732de061213c6e86743f f38bcee68c1da19e70bb1e1c4a4047c763a466f1b8ef2c4f65f8c724c0b58197 +test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql d1db51208a311c30af369ce2fdc3a3296e7d598b27bf4960b8b34622a9d9163b 561b1e38c6d8b301fdc016e1d012dd805fde1b42b0720c17d7b15535715047f2 +test/extractor-tests/generated/Path/PathSegment_getTy.ql a0ceaf3f37e521cc92c21cc0bae929499ef3584f86349ef34808c20963d31c75 d674e56e08a6d2a7d211503a466df2cc90c35a3951e41598febf62c8dc693655 +test/extractor-tests/generated/Path/PathType.ql cb67b05cf7e4f32cbd46ac89a15f6eafe3507cc655db0b9d54a1cf8e7fbcca40 890053e7fd8cd8a92015c09588c7c646f075901cddc3eb8d57210b02b23a5944 +test/extractor-tests/generated/Path/PathType_getPath.ql 7043c7939e4f835e4b2c7e3e207637c362d7a9dbdba0151b38c873fdaf43e7a5 ee2aad1b4fb2b00e1a5d39387848aa164a39e3cd49141f07c175b205c8451bb1 test/extractor-tests/generated/Path/Path_getPart.ql 8aa45a0b58203ef1177166efbe1c2851faf4b4c9a453c83137f0c9298badcdbf b82d490d9b3a8237487cd5da8b3b6fc4aa477977b332a5c6539b3cd4e6d5b45b test/extractor-tests/generated/Path/Path_getQualifier.ql 9af95e22cdf3a65da6a41d93136aef4523db5ce81d38f6ed4bc613f1c68784d0 3102d9241a417a92c97a53ac56a7a8683463f1adc7a593cda1382c0d25b3f261 test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.ql 7c0ff524595514630de4178028260d4832bfc4f57bfddec9f8e72a6c6dbf241c 55e617380476c183ef9259199d2cfd551b07466e94bc452c4723754d0c82691b test/extractor-tests/generated/Path/Path_getResolvedPath.ql 20c8977781dfe687d5db03290612179cf1360eb47b86ea62d25d1eef62a681e7 c35b76e7d63c05dc80867285bb913042cbe90b45d4d4306df9eac2cba5e8db70 -test/extractor-tests/generated/PathExpr/PathExpr.ql b9696cd7ad9f3874e4bc4b1b9c77f42f06ab6c61b77fb641458da63667087b9b db84a7a8dd05e30ff80733af01f08d43ff031bb4b3e3af06332a73ba7e7bbc43 -test/extractor-tests/generated/PathExpr/PathExpr_getAttr.ql 2ccac48cd91d86670c1d2742de20344135d424e6f0e3dafcc059555046f92d92 9b7b5f5f9e3674fad9b3a5bcd3cabc0dff32a95640da0fce6f4d0eb931f1757d -test/extractor-tests/generated/PathExpr/PathExpr_getPath.ql e7894071313a74166bdd31d7cd974037fcd5a7f0e92d5eec42833266196eb858 46a06e8a1207e7a0fa175cd4b61068e5fd6c43b5575b88986409f0ac2be64c51 -test/extractor-tests/generated/PathPat/PathPat.ql 823732954a5882e33a37bd0bf0cafb2cec51659a5203a4831eec2516da0e49fa 54001149718a9ca15d8c0d4be63f3fe00a9f0d44fa1309e2f605d7932355ea5d -test/extractor-tests/generated/PathPat/PathPat_getPath.ql 6c0c71c80a6e631ea7775ec8660b470ff6b264bab14a399606cf113b1fb190fc 8e34cbb4d064db929e94652e1901ec4f26affa71e30e556b7acdff71dd622cbb -test/extractor-tests/generated/PathSegment/PathSegment.ql efc39cea1b4c0b2b0da6434136334430d074699f84124d6bcf94c24aa854dc64 c0a4bd60c67665c058ca22a59e535e925fdb00dec95ffc5c71697fb0ed78a329 -test/extractor-tests/generated/PathSegment/PathSegment_getGenericArgList.ql 8f6e67b3e316309f20e21d7e7944accf66b0256b76fa50ee9a714044c6ec8cea 15f10a701fc4d3f9fd6734da90790cdbc8a1ddd57bf52695740acedcb2e6e485 -test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.ql 799d284e2f9267d6bbe67aa7035e525ef347dc74cb3e2180e7b2171b5cb49674 592130bc2358989536abf62e8a261272c851483ede4f19783f7d61ffc1803e4b -test/extractor-tests/generated/PathSegment/PathSegment_getParamList.ql e1e7b9b5062f936c33b7e7e29b21456448242df4985c6cffb54900063cfd3e63 6568e851cb6bcb32622f89d01e3aa6e7dd21940d21572a9988584e34bdf25366 -test/extractor-tests/generated/PathSegment/PathSegment_getPathType.ql 01942da6d0b10c1d15caec6abb8c53f1dc7f8c04a91a797f572063aa003dbc4b cb21e6cb160652527ba571265297dae86beffe191dd7dfc4d0beee45cb0cda29 -test/extractor-tests/generated/PathSegment/PathSegment_getRetType.ql 36386a514bc925f5b17ad87afba9fef7986900c1b791732de061213c6e86743f f38bcee68c1da19e70bb1e1c4a4047c763a466f1b8ef2c4f65f8c724c0b58197 -test/extractor-tests/generated/PathSegment/PathSegment_getReturnTypeSyntax.ql d1db51208a311c30af369ce2fdc3a3296e7d598b27bf4960b8b34622a9d9163b 561b1e38c6d8b301fdc016e1d012dd805fde1b42b0720c17d7b15535715047f2 -test/extractor-tests/generated/PathSegment/PathSegment_getTy.ql a0ceaf3f37e521cc92c21cc0bae929499ef3584f86349ef34808c20963d31c75 d674e56e08a6d2a7d211503a466df2cc90c35a3951e41598febf62c8dc693655 -test/extractor-tests/generated/PathType/PathType.ql cb67b05cf7e4f32cbd46ac89a15f6eafe3507cc655db0b9d54a1cf8e7fbcca40 890053e7fd8cd8a92015c09588c7c646f075901cddc3eb8d57210b02b23a5944 -test/extractor-tests/generated/PathType/PathType_getPath.ql 7043c7939e4f835e4b2c7e3e207637c362d7a9dbdba0151b38c873fdaf43e7a5 ee2aad1b4fb2b00e1a5d39387848aa164a39e3cd49141f07c175b205c8451bb1 test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql 44fb7174365c6deecdc22c720d84617c6e060c05d49c41c90433451588f8aa6f 871fab471c82fede3c36edc003f9decee5bb7844c016951d28be78d0c91487e5 test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql fdad6ad5199435ded1e4a9ea6b246e76b904cd73a36aaa4780e84eef91741c5b 75d63940046e62c1efa1151b0cac45b5ec0bab5e39aec2e11d43f6c385e37984 test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql 2d1d97f6277794871fbb032ea87ac30b1aa902a74cd874720156162057ea202e b1b9880fce07d66df7ec87f12189c37adf9f233a1d0b38a1b09808d052a95642 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 91644fc94afa..40fea9eb65de 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -890,25 +890,25 @@ /test/extractor-tests/generated/ParenType/ParenType.ql linguist-generated /test/extractor-tests/generated/ParenType/ParenType_getTy.ql linguist-generated /test/extractor-tests/generated/Path/Path.ql linguist-generated +/test/extractor-tests/generated/Path/PathExpr.ql linguist-generated +/test/extractor-tests/generated/Path/PathExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/Path/PathExpr_getPath.ql linguist-generated +/test/extractor-tests/generated/Path/PathPat.ql linguist-generated +/test/extractor-tests/generated/Path/PathPat_getPath.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getNameRef.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getParamList.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getPathType.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getRetType.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getTy.ql linguist-generated +/test/extractor-tests/generated/Path/PathType.ql linguist-generated +/test/extractor-tests/generated/Path/PathType_getPath.ql linguist-generated /test/extractor-tests/generated/Path/Path_getPart.ql linguist-generated /test/extractor-tests/generated/Path/Path_getQualifier.ql linguist-generated /test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.ql linguist-generated /test/extractor-tests/generated/Path/Path_getResolvedPath.ql linguist-generated -/test/extractor-tests/generated/PathExpr/PathExpr.ql linguist-generated -/test/extractor-tests/generated/PathExpr/PathExpr_getAttr.ql linguist-generated -/test/extractor-tests/generated/PathExpr/PathExpr_getPath.ql linguist-generated -/test/extractor-tests/generated/PathPat/PathPat.ql linguist-generated -/test/extractor-tests/generated/PathPat/PathPat_getPath.ql linguist-generated -/test/extractor-tests/generated/PathSegment/PathSegment.ql linguist-generated -/test/extractor-tests/generated/PathSegment/PathSegment_getGenericArgList.ql linguist-generated -/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.ql linguist-generated -/test/extractor-tests/generated/PathSegment/PathSegment_getParamList.ql linguist-generated -/test/extractor-tests/generated/PathSegment/PathSegment_getPathType.ql linguist-generated -/test/extractor-tests/generated/PathSegment/PathSegment_getRetType.ql linguist-generated -/test/extractor-tests/generated/PathSegment/PathSegment_getReturnTypeSyntax.ql linguist-generated -/test/extractor-tests/generated/PathSegment/PathSegment_getTy.ql linguist-generated -/test/extractor-tests/generated/PathType/PathType.ql linguist-generated -/test/extractor-tests/generated/PathType/PathType_getPath.ql linguist-generated /test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql linguist-generated /test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/Path.qll b/rust/ql/lib/codeql/rust/elements/Path.qll index 530c40397c31..cb228373cf5a 100644 --- a/rust/ql/lib/codeql/rust/elements/Path.qll +++ b/rust/ql/lib/codeql/rust/elements/Path.qll @@ -10,6 +10,7 @@ import codeql.rust.elements.Resolvable /** * A path. For example: * ```rust + * use some_crate::some_module::some_item; * foo::bar; * ``` */ diff --git a/rust/ql/lib/codeql/rust/elements/PathSegment.qll b/rust/ql/lib/codeql/rust/elements/PathSegment.qll index 5566ba322b62..9edc7d6573f7 100644 --- a/rust/ql/lib/codeql/rust/elements/PathSegment.qll +++ b/rust/ql/lib/codeql/rust/elements/PathSegment.qll @@ -14,9 +14,6 @@ import codeql.rust.elements.ReturnTypeSyntax import codeql.rust.elements.TypeRef /** - * A PathSegment. For example: - * ```rust - * todo!() - * ``` + * A path segment, which is one part of a whole path. */ final class PathSegment = Impl::PathSegment; diff --git a/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll index 9104a07a5474..d156e207150c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BreakExprImpl.qll @@ -104,7 +104,9 @@ module Impl { ) } - override string toString() { result = concat(int i | | this.toStringPart(i), " " order by i) } + override string toString() { + result = strictconcat(int i | | this.toStringPart(i), " " order by i) + } private string toStringPart(int index) { index = 0 and result = "break" diff --git a/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll index 59cc960a67bd..13270d1ca0b3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CastExprImpl.qll @@ -20,7 +20,7 @@ module Impl { */ class CastExpr extends Generated::CastExpr { override string toString() { - result = this.getExpr().toAbbreviatedString() + " as " + this.getTy().toString() + result = this.getExpr().toAbbreviatedString() + " as " + this.getTy().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll index 957574d409a5..ecfcd1a48429 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ContinueExprImpl.qll @@ -49,12 +49,14 @@ module Impl { * ``` */ class ContinueExpr extends Generated::ContinueExpr { - override string toString() { result = concat(int i | | this.toStringPart(i), " " order by i) } + override string toString() { + result = strictconcat(int i | | this.toStringPart(i), " " order by i) + } private string toStringPart(int index) { index = 0 and result = "continue" or - index = 1 and result = this.getLifetime().toString() + index = 1 and result = this.getLifetime().getText() } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll index 532fa3ed0b3b..0299ce9f05e6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll @@ -19,6 +19,6 @@ module Impl { * ``` */ class Enum extends Generated::Enum { - override string toString() { result = "enum " + this.getName().toString() } + override string toString() { result = "enum " + this.getName().getText() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll index 922de73c65d9..b3cd63b79229 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll @@ -22,7 +22,7 @@ module Impl { override string toString() { exists(string abbr, string name | abbr = this.getExpr().toAbbreviatedString() and - name = this.getNameRef().toString() and + name = this.getNameRef().getText() and if abbr = "..." then result = "... ." + name else result = abbr + "." + name ) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll index d8ec0ca9d372..c75c36b280b9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll @@ -22,11 +22,11 @@ module Impl { override string toString() { exists(string trait | ( - trait = this.getTrait().toString() + " for " + trait = this.getTrait().toAbbreviatedString() + " for " or not this.hasTrait() and trait = "" ) and - result = "impl " + trait + this.getSelfTy().toString() + " { ... }" + result = "impl " + trait + this.getSelfTy().toAbbreviatedString() + " { ... }" ) } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LabelImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LabelImpl.qll index e1b3eb4e4d79..822029bf3a73 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LabelImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LabelImpl.qll @@ -22,6 +22,13 @@ module Impl { * ``` */ class Label extends Generated::Label { - override string toString() { result = this.getLifetime().toString() } + override string toString() { result = this.getText() } + + override string toAbbreviatedString() { result = this.getText() } + + /** + * Gets the name of the label, together with the leading `'`. + */ + string getText() { result = this.getLifetime().getText() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LabelableExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LabelableExprImpl.qll index 1b354658a2ed..070481817145 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LabelableExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LabelableExprImpl.qll @@ -16,8 +16,16 @@ module Impl { * The base class for expressions that can be labeled (`LoopExpr`, `ForExpr`, `WhileExpr` or `BlockExpr`). */ class LabelableExpr extends Generated::LabelableExpr { - override string toString() { - result = concat([this.getLabel().toString() + ":", this.toStringPrefix(), "{ ... }"], " ") + final override string toString() { + result = strictconcat(int i | | this.toStringPart(i), " " order by i) + } + + private string toStringPart(int index) { + index = 0 and result = this.getLabel().getText() + ":" + or + index = 1 and result = this.toStringPrefix() + or + index = 2 and result = "{ ... }" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll index 7924d8d8453e..0ca4e58fb850 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LetElseImpl.qll @@ -19,6 +19,8 @@ module Impl { * ``` */ class LetElse extends Generated::LetElse { - override string toString() { result = "else { ... }" } + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = "else {...}" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll index 1205836c2306..d612c2082a64 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LetStmtImpl.qll @@ -26,7 +26,9 @@ module Impl { * ``` */ class LetStmt extends Generated::LetStmt { - override string toString() { result = concat(int i | | this.toStringPart(i), " " order by i) } + override string toString() { + result = strictconcat(int i | | this.toStringPart(i), " " order by i) + } private string toStringPart(int index) { index = 0 and result = "let" @@ -35,7 +37,7 @@ module Impl { or index = 2 and result = "= " + this.getInitializer().toAbbreviatedString() or - index = 3 and result = this.getLetElse().toString() + index = 3 and result = this.getLetElse().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll index efcc4bf073e9..f68c79da16b1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll @@ -26,8 +26,20 @@ module Impl { * ``` */ class LiteralExpr extends Generated::LiteralExpr { - override string toString() { result = this.getTextValue() } + override string toString() { result = this.getTrimmedText() } - override string toAbbreviatedString() { result = this.getTextValue() } + override string toAbbreviatedString() { result = this.getTrimmedText() } + + /** + * Get the text of this literal, trimmed with `...` if it is too long. + * + * INTERNAL: Do not use. + */ + string getTrimmedText() { + exists(string v | + v = this.getTextValue() and + if v.length() > 30 then result = v.substring(0, 30) + "..." else result = v + ) + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll index 65074603796a..1c59c3fa284a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LiteralPatImpl.qll @@ -24,6 +24,6 @@ module Impl { class LiteralPat extends Generated::LiteralPat { override string toString() { result = this.toAbbreviatedString() } - override string toAbbreviatedString() { result = this.getLiteral().toString() } + override string toAbbreviatedString() { result = this.getLiteral().getTrimmedText() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll index eed9a65d4327..a34d64c0735e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroCallImpl.qll @@ -19,6 +19,6 @@ module Impl { * ``` */ class MacroCall extends Generated::MacroCall { - override string toString() { result = this.getPath().toString() + "!..." } + override string toString() { result = this.getPath().toAbbreviatedString() + "!..." } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll index 8d0a2ab0ecf1..34cd16c144b4 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll @@ -15,6 +15,7 @@ module Impl { /** * A path. For example: * ```rust + * use some_crate::some_module::some_item; * foo::bar; * ``` */ @@ -23,9 +24,7 @@ module Impl { override string toAbbreviatedString() { if this.hasQualifier() - then - result = - this.getQualifier().toAbbreviatedString() + "::" + this.getPart().toAbbreviatedString() + then result = "...::" + this.getPart().toAbbreviatedString() else result = this.getPart().toAbbreviatedString() } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll index a78d0dd7ab9b..27914a8f4159 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathPatImpl.qll @@ -24,6 +24,6 @@ module Impl { class PathPat extends Generated::PathPat { override string toString() { result = this.toAbbreviatedString() } - override string toAbbreviatedString() { result = this.getPath().toString() } + override string toAbbreviatedString() { result = this.getPath().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll index 90d7cee66392..01ce58788349 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll @@ -13,19 +13,23 @@ private import codeql.rust.elements.internal.generated.PathSegment module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A PathSegment. For example: - * ```rust - * todo!() - * ``` + * A path segment, which is one part of a whole path. */ class PathSegment extends Generated::PathSegment { override string toString() { result = this.toAbbreviatedString() } override string toAbbreviatedString() { - // TODO: this does not cover everything - if this.hasGenericArgList() - then result = this.getNameRef().toString() + "::<...>" - else result = this.getNameRef().toString() + result = this.getAbbreviatedPrefix() + this.getAbbreviatedGenericArgList() + } + + private string getAbbreviatedGenericArgList() { + if this.hasGenericArgList() then result = "::<...>" else result = "" + } + + private string getAbbreviatedPrefix() { + if this.hasPathType() or this.hasTy() + then result = "<...>" + else result = this.getNameRef().getText() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll index 3f88c50fa6a2..a2ca1752ccab 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll @@ -21,6 +21,8 @@ module Impl { class PathType extends Generated::PathType { override string toString() { result = this.toAbbreviatedString() } - override string toAbbreviatedString() { result = this.getPath().toString() } + override string toAbbreviatedString() { + result = "<" + this.getPath().toAbbreviatedString() + ">" + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll index 6e24c31d5524..fe898c82fea4 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RecordExprFieldImpl.qll @@ -22,7 +22,7 @@ module Impl { override string toString() { result = concat(int i | | this.toStringPart(i) order by i) } private string toStringPart(int index) { - index = 0 and result = this.getNameRef().toString() + index = 0 and result = this.getNameRef().getText() or index = 1 and result = ": " + this.getExpr().toAbbreviatedString() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RecordPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/RecordPatImpl.qll index 39ccad020655..0bed25bb779f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RecordPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/RecordPatImpl.qll @@ -22,6 +22,6 @@ module Impl { * ``` */ class RecordPat extends Generated::RecordPat { - override string toString() { result = this.getPath().toString() + " {...}" } + override string toString() { result = this.getPath().toAbbreviatedString() + " {...}" } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll index 59d685a18e81..564e54e78d64 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll @@ -25,6 +25,6 @@ module Impl { * ``` */ class Trait extends Generated::Trait { - override string toString() { result = "trait " + this.getName() } + override string toString() { result = "trait " + this.getName().getText() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll index 4357dcf68a98..15a793741172 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UnionImpl.qll @@ -19,6 +19,6 @@ module Impl { * ``` */ class Union extends Generated::Union { - override string toString() { result = "union " + this.getName().toString() } + override string toString() { result = "union " + this.getName().getText() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll index 58f7d891d263..36313ca9fe9a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll @@ -18,6 +18,7 @@ module Generated { /** * A path. For example: * ```rust + * use some_crate::some_module::some_item; * foo::bar; * ``` * INTERNAL: Do not reference the `Generated::Path` class directly. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll index 0878635e7d17..a2c3b970df68 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll @@ -21,10 +21,7 @@ import codeql.rust.elements.TypeRef */ module Generated { /** - * A PathSegment. For example: - * ```rust - * todo!() - * ``` + * A path segment, which is one part of a whole path. * INTERNAL: Do not reference the `Generated::PathSegment` class directly. * Use the subclass `PathSegment`, where the following predicates are available. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index dc9f577bffc5..90fc0ae935bb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -578,10 +578,7 @@ module Raw { /** * INTERNAL: Do not use. - * A PathSegment. For example: - * ```rust - * todo!() - * ``` + * A path segment, which is one part of a whole path. */ class PathSegment extends @path_segment, AstNode { override string toString() { result = "PathSegment" } @@ -2337,6 +2334,7 @@ module Raw { * INTERNAL: Do not use. * A path. For example: * ```rust + * use some_crate::some_module::some_item; * foo::bar; * ``` */ diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index b60779ebd86a..e8221c66efdc 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -78,11 +78,10 @@ ParamList/gen_param_list.rs ef2e83d0aed45b969fe78dd717e87ef3c1f848e6179cfb4dc3cb ParenExpr/gen_paren_expr.rs dd0c4a21a92e54e8a6151145e013cbec9c9e1cad093d572e293b4f51d6c44aea dd0c4a21a92e54e8a6151145e013cbec9c9e1cad093d572e293b4f51d6c44aea ParenPat/gen_paren_pat.rs c8d18521b9a0b7d39841eb72e3895914aa652b7235dea42ed12a4eb280e3bf0e c8d18521b9a0b7d39841eb72e3895914aa652b7235dea42ed12a4eb280e3bf0e ParenType/gen_paren_type.rs ae1a945b56020eab14bb0ef75ae9ccb735d8e45d1213adee210a90e6dba8430f ae1a945b56020eab14bb0ef75ae9ccb735d8e45d1213adee210a90e6dba8430f -Path/gen_path.rs e32637d04445d5b9411086f3ad5d8b41de24327f7ad641d1a1a25c1d160121c8 e32637d04445d5b9411086f3ad5d8b41de24327f7ad641d1a1a25c1d160121c8 -PathExpr/gen_path_expr.rs a1e0ececfe62a63a43583c9bd8064a80a90c042c55bac29d86776c0c6559f33a a1e0ececfe62a63a43583c9bd8064a80a90c042c55bac29d86776c0c6559f33a -PathPat/gen_path_pat.rs fd7f941f8b33f19d3693be1fdb595c2fb2e85e8296702b82bf12bcd44632f371 fd7f941f8b33f19d3693be1fdb595c2fb2e85e8296702b82bf12bcd44632f371 -PathSegment/gen_path_segment.rs bc0c914821a70f9a7db23766f4d84e2d69fc76d5075a8bc3341f2ba59a8ce911 bc0c914821a70f9a7db23766f4d84e2d69fc76d5075a8bc3341f2ba59a8ce911 -PathType/gen_path_type.rs 710a5505615769da940202e7c6d9031edc23a4b05cd9fb25241c60affbba4027 710a5505615769da940202e7c6d9031edc23a4b05cd9fb25241c60affbba4027 +Path/gen_path.rs 490268d6bfb1635883b8bdefc683d59c4dd0e9c7f86c2e55954661efb3ab0253 490268d6bfb1635883b8bdefc683d59c4dd0e9c7f86c2e55954661efb3ab0253 +Path/gen_path_expr.rs a1e0ececfe62a63a43583c9bd8064a80a90c042c55bac29d86776c0c6559f33a a1e0ececfe62a63a43583c9bd8064a80a90c042c55bac29d86776c0c6559f33a +Path/gen_path_pat.rs fd7f941f8b33f19d3693be1fdb595c2fb2e85e8296702b82bf12bcd44632f371 fd7f941f8b33f19d3693be1fdb595c2fb2e85e8296702b82bf12bcd44632f371 +Path/gen_path_type.rs 710a5505615769da940202e7c6d9031edc23a4b05cd9fb25241c60affbba4027 710a5505615769da940202e7c6d9031edc23a4b05cd9fb25241c60affbba4027 PrefixExpr/gen_prefix_expr.rs c4b53e87f370713b9a9e257be26d082b0761497bac19b1d7401a31b22b30d1ab c4b53e87f370713b9a9e257be26d082b0761497bac19b1d7401a31b22b30d1ab PtrType/gen_ptr_type.rs dd7faad19454b92d7942ef664df1a5f26c01863e408b87249aa4d5d4f68c78b3 dd7faad19454b92d7942ef664df1a5f26c01863e408b87249aa4d5d4f68c78b3 RangeExpr/gen_range_expr.rs 3f27cff9cc76b2703beff622d1453b84121e1970a869e45f9428deac92c4ecb0 3f27cff9cc76b2703beff622d1453b84121e1970a869e45f9428deac92c4ecb0 diff --git a/rust/ql/test/extractor-tests/generated/.gitattributes b/rust/ql/test/extractor-tests/generated/.gitattributes index 8ea3a00a31f0..b585a058480b 100644 --- a/rust/ql/test/extractor-tests/generated/.gitattributes +++ b/rust/ql/test/extractor-tests/generated/.gitattributes @@ -81,10 +81,9 @@ /ParenPat/gen_paren_pat.rs linguist-generated /ParenType/gen_paren_type.rs linguist-generated /Path/gen_path.rs linguist-generated -/PathExpr/gen_path_expr.rs linguist-generated -/PathPat/gen_path_pat.rs linguist-generated -/PathSegment/gen_path_segment.rs linguist-generated -/PathType/gen_path_type.rs linguist-generated +/Path/gen_path_expr.rs linguist-generated +/Path/gen_path_pat.rs linguist-generated +/Path/gen_path_type.rs linguist-generated /PrefixExpr/gen_prefix_expr.rs linguist-generated /PtrType/gen_ptr_type.rs linguist-generated /RangeExpr/gen_range_expr.rs linguist-generated diff --git a/rust/ql/test/extractor-tests/generated/Path/Path.expected b/rust/ql/test/extractor-tests/generated/Path/Path.expected index db093224b76b..42f266cb4edd 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path.expected @@ -1,2 +1,23 @@ -| gen_path.rs:5:5:5:7 | foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path.rs:5:5:5:12 | foo::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | +| gen_path.rs:5:9:5:18 | some_crate | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path.rs:5:9:5:31 | ...::some_module | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | +| gen_path.rs:5:9:5:42 | ...::some_item | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | +| gen_path.rs:6:5:6:7 | foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path.rs:6:5:6:12 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | +| gen_path_expr.rs:5:13:5:20 | variable | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:6:13:6:15 | foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:6:13:6:20 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | +| gen_path_expr.rs:7:13:7:15 | <...> | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:7:13:7:20 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | +| gen_path_expr.rs:7:14:7:14 | T | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:7:14:7:14 | T | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:8:13:8:30 | <...> | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:8:13:8:35 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | +| gen_path_expr.rs:8:14:8:20 | TypeRef | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:8:14:8:20 | TypeRef | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_pat.rs:5:11:5:11 | x | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_pat.rs:6:9:6:11 | Foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | +| gen_path_type.rs:5:5:5:8 | todo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_type.rs:5:5:5:11 | $crate | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_type.rs:5:5:5:11 | ...::panic | hasResolvedPath: | yes | hasResolvedCrateOrigin: | yes | hasQualifier: | yes | hasPart: | yes | +| gen_path_type.rs:5:5:5:11 | ...::panicking | hasResolvedPath: | yes | hasResolvedCrateOrigin: | yes | hasQualifier: | yes | hasPart: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected new file mode 100644 index 000000000000..c84497c6881d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected @@ -0,0 +1,7 @@ +| gen_path.rs:6:5:6:12 | ...::bar | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_expr.rs:5:13:5:20 | variable | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_expr.rs:6:13:6:20 | ...::bar | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_expr.rs:7:13:7:20 | ...::foo | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_expr.rs:8:13:8:35 | ...::foo | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_pat.rs:5:11:5:11 | x | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_type.rs:5:5:5:11 | ...::panic | getNumberOfAttrs: | 0 | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/PathExpr/PathExpr.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathExpr/PathExpr.ql rename to rust/ql/test/extractor-tests/generated/Path/PathExpr.ql diff --git a/rust/ql/test/extractor-tests/generated/PathExpr/PathExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getAttr.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathExpr/PathExpr_getAttr.expected rename to rust/ql/test/extractor-tests/generated/Path/PathExpr_getAttr.expected diff --git a/rust/ql/test/extractor-tests/generated/PathExpr/PathExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getAttr.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathExpr/PathExpr_getAttr.ql rename to rust/ql/test/extractor-tests/generated/Path/PathExpr_getAttr.ql diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected new file mode 100644 index 000000000000..925412bc6166 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected @@ -0,0 +1,7 @@ +| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:5:6:12 | ...::bar | +| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | +| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:13:6:20 | ...::bar | +| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:13:7:20 | ...::foo | +| gen_path_expr.rs:8:13:8:35 | ...::foo | gen_path_expr.rs:8:13:8:35 | ...::foo | +| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | +| gen_path_type.rs:5:5:5:11 | ...::panic | gen_path_type.rs:5:5:5:11 | ...::panic | diff --git a/rust/ql/test/extractor-tests/generated/PathExpr/PathExpr_getPath.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathExpr/PathExpr_getPath.ql rename to rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.ql diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat.expected b/rust/ql/test/extractor-tests/generated/Path/PathPat.expected new file mode 100644 index 000000000000..159f006eecb1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat.expected @@ -0,0 +1 @@ +| gen_path_pat.rs:6:9:6:16 | ...::Bar | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/PathPat/PathPat.ql b/rust/ql/test/extractor-tests/generated/Path/PathPat.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathPat/PathPat.ql rename to rust/ql/test/extractor-tests/generated/Path/PathPat.ql diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.expected new file mode 100644 index 000000000000..3a601023f3f9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.expected @@ -0,0 +1 @@ +| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:9:6:16 | ...::Bar | diff --git a/rust/ql/test/extractor-tests/generated/PathPat/PathPat_getPath.ql b/rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathPat/PathPat_getPath.ql rename to rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.ql diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected new file mode 100644 index 000000000000..418895093413 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected @@ -0,0 +1,23 @@ +| gen_path.rs:5:9:5:18 | some_crate | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path.rs:5:21:5:31 | some_module | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path.rs:5:34:5:42 | some_item | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path.rs:6:5:6:7 | foo | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path.rs:6:10:6:12 | bar | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_expr.rs:5:13:5:20 | variable | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_expr.rs:6:13:6:15 | foo | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_expr.rs:6:18:6:20 | bar | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_expr.rs:7:13:7:15 | <...> | hasGenericArgList: | no | hasNameRef: | no | hasParamList: | no | hasPathType: | yes | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | yes | +| gen_path_expr.rs:7:14:7:14 | T | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_expr.rs:7:14:7:14 | T | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_expr.rs:7:18:7:20 | foo | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_expr.rs:8:13:8:30 | <...> | hasGenericArgList: | no | hasNameRef: | no | hasParamList: | no | hasPathType: | yes | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | yes | +| gen_path_expr.rs:8:14:8:20 | TypeRef | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_expr.rs:8:14:8:20 | TypeRef | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_expr.rs:8:33:8:35 | foo | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_pat.rs:5:11:5:11 | x | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_pat.rs:6:9:6:11 | Foo | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_pat.rs:6:14:6:16 | Bar | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:5:5:5:8 | todo | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:5:5:5:11 | $crate | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:5:5:5:11 | panic | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:5:5:5:11 | panicking | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment.ql rename to rust/ql/test/extractor-tests/generated/Path/PathSegment.ql diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getGenericArgList.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getGenericArgList.expected rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.expected diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getGenericArgList.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getGenericArgList.ql rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected new file mode 100644 index 000000000000..e6b487851b7c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected @@ -0,0 +1,21 @@ +| gen_path.rs:5:9:5:18 | some_crate | gen_path.rs:5:9:5:18 | some_crate | +| gen_path.rs:5:21:5:31 | some_module | gen_path.rs:5:21:5:31 | some_module | +| gen_path.rs:5:34:5:42 | some_item | gen_path.rs:5:34:5:42 | some_item | +| gen_path.rs:6:5:6:7 | foo | gen_path.rs:6:5:6:7 | foo | +| gen_path.rs:6:10:6:12 | bar | gen_path.rs:6:10:6:12 | bar | +| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | +| gen_path_expr.rs:6:13:6:15 | foo | gen_path_expr.rs:6:13:6:15 | foo | +| gen_path_expr.rs:6:18:6:20 | bar | gen_path_expr.rs:6:18:6:20 | bar | +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:7:18:7:20 | foo | gen_path_expr.rs:7:18:7:20 | foo | +| gen_path_expr.rs:8:14:8:20 | TypeRef | gen_path_expr.rs:8:14:8:20 | TypeRef | +| gen_path_expr.rs:8:14:8:20 | TypeRef | gen_path_expr.rs:8:14:8:20 | TypeRef | +| gen_path_expr.rs:8:33:8:35 | foo | gen_path_expr.rs:8:33:8:35 | foo | +| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | +| gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | +| gen_path_pat.rs:6:14:6:16 | Bar | gen_path_pat.rs:6:14:6:16 | Bar | +| gen_path_type.rs:5:5:5:8 | todo | gen_path_type.rs:5:5:5:8 | todo | +| gen_path_type.rs:5:5:5:11 | $crate | gen_path_type.rs:5:5:5:11 | $crate | +| gen_path_type.rs:5:5:5:11 | panic | gen_path_type.rs:5:5:5:11 | panic | +| gen_path_type.rs:5:5:5:11 | panicking | gen_path_type.rs:5:5:5:11 | panicking | diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.ql rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.ql diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getParamList.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getParamList.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getParamList.expected rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getParamList.expected diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getParamList.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getParamList.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getParamList.ql rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getParamList.ql diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected new file mode 100644 index 000000000000..b63a629ccb10 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected @@ -0,0 +1,2 @@ +| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:14:7:14 | | +| gen_path_expr.rs:8:13:8:30 | <...> | gen_path_expr.rs:8:14:8:20 | | diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getPathType.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getPathType.ql rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.ql diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getRetType.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getRetType.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getRetType.expected rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getRetType.expected diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getRetType.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getRetType.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getRetType.ql rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getRetType.ql diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getReturnTypeSyntax.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getReturnTypeSyntax.expected rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.expected diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getReturnTypeSyntax.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getReturnTypeSyntax.ql rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTy.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTy.expected new file mode 100644 index 000000000000..b63a629ccb10 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTy.expected @@ -0,0 +1,2 @@ +| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:14:7:14 | | +| gen_path_expr.rs:8:13:8:30 | <...> | gen_path_expr.rs:8:14:8:20 | | diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getTy.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTy.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getTy.ql rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getTy.ql diff --git a/rust/ql/test/extractor-tests/generated/Path/PathType.expected b/rust/ql/test/extractor-tests/generated/Path/PathType.expected new file mode 100644 index 000000000000..5347001fb413 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathType.expected @@ -0,0 +1,4 @@ +| gen_path_expr.rs:7:14:7:14 | | hasPath: | yes | +| gen_path_expr.rs:7:14:7:14 | | hasPath: | yes | +| gen_path_expr.rs:8:14:8:20 | | hasPath: | yes | +| gen_path_expr.rs:8:14:8:20 | | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/PathType/PathType.ql b/rust/ql/test/extractor-tests/generated/Path/PathType.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathType/PathType.ql rename to rust/ql/test/extractor-tests/generated/Path/PathType.ql diff --git a/rust/ql/test/extractor-tests/generated/Path/PathType_getPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathType_getPath.expected new file mode 100644 index 000000000000..3d98da0c2b84 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathType_getPath.expected @@ -0,0 +1,4 @@ +| gen_path_expr.rs:7:14:7:14 | | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:7:14:7:14 | | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:8:14:8:20 | | gen_path_expr.rs:8:14:8:20 | TypeRef | +| gen_path_expr.rs:8:14:8:20 | | gen_path_expr.rs:8:14:8:20 | TypeRef | diff --git a/rust/ql/test/extractor-tests/generated/PathType/PathType_getPath.ql b/rust/ql/test/extractor-tests/generated/Path/PathType_getPath.ql similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathType/PathType_getPath.ql rename to rust/ql/test/extractor-tests/generated/Path/PathType_getPath.ql diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected index 0e05956ea897..9b0f05f0727f 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected @@ -1,2 +1,23 @@ -| gen_path.rs:5:5:5:7 | foo | gen_path.rs:5:5:5:7 | foo | -| gen_path.rs:5:5:5:12 | foo::bar | gen_path.rs:5:10:5:12 | bar | +| gen_path.rs:5:9:5:18 | some_crate | gen_path.rs:5:9:5:18 | some_crate | +| gen_path.rs:5:9:5:31 | ...::some_module | gen_path.rs:5:21:5:31 | some_module | +| gen_path.rs:5:9:5:42 | ...::some_item | gen_path.rs:5:34:5:42 | some_item | +| gen_path.rs:6:5:6:7 | foo | gen_path.rs:6:5:6:7 | foo | +| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:10:6:12 | bar | +| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | +| gen_path_expr.rs:6:13:6:15 | foo | gen_path_expr.rs:6:13:6:15 | foo | +| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:18:6:20 | bar | +| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:13:7:15 | <...> | +| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:18:7:20 | foo | +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:8:13:8:30 | <...> | gen_path_expr.rs:8:13:8:30 | <...> | +| gen_path_expr.rs:8:13:8:35 | ...::foo | gen_path_expr.rs:8:33:8:35 | foo | +| gen_path_expr.rs:8:14:8:20 | TypeRef | gen_path_expr.rs:8:14:8:20 | TypeRef | +| gen_path_expr.rs:8:14:8:20 | TypeRef | gen_path_expr.rs:8:14:8:20 | TypeRef | +| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | +| gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:14:6:16 | Bar | +| gen_path_type.rs:5:5:5:8 | todo | gen_path_type.rs:5:5:5:8 | todo | +| gen_path_type.rs:5:5:5:11 | $crate | gen_path_type.rs:5:5:5:11 | $crate | +| gen_path_type.rs:5:5:5:11 | ...::panic | gen_path_type.rs:5:5:5:11 | panic | +| gen_path_type.rs:5:5:5:11 | ...::panicking | gen_path_type.rs:5:5:5:11 | panicking | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected index 44aa2ca5a006..6fb72c5159aa 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected @@ -1 +1,9 @@ -| gen_path.rs:5:5:5:12 | foo::bar | gen_path.rs:5:5:5:7 | foo | +| gen_path.rs:5:9:5:31 | ...::some_module | gen_path.rs:5:9:5:18 | some_crate | +| gen_path.rs:5:9:5:42 | ...::some_item | gen_path.rs:5:9:5:31 | ...::some_module | +| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:5:6:7 | foo | +| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:13:6:15 | foo | +| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:13:7:15 | <...> | +| gen_path_expr.rs:8:13:8:35 | ...::foo | gen_path_expr.rs:8:13:8:30 | <...> | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:9:6:11 | Foo | +| gen_path_type.rs:5:5:5:11 | ...::panic | gen_path_type.rs:5:5:5:11 | ...::panicking | +| gen_path_type.rs:5:5:5:11 | ...::panicking | gen_path_type.rs:5:5:5:11 | $crate | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected index e69de29bb2d1..9da37a05d71e 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected @@ -0,0 +1,2 @@ +| gen_path_type.rs:5:5:5:11 | ...::panic | lang:core | +| gen_path_type.rs:5:5:5:11 | ...::panicking | lang:core | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected index e69de29bb2d1..4a7a9a1e2ae3 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected @@ -0,0 +1,2 @@ +| gen_path_type.rs:5:5:5:11 | ...::panic | crate::panicking::panic | +| gen_path_type.rs:5:5:5:11 | ...::panicking | crate::panicking | diff --git a/rust/ql/test/extractor-tests/generated/Path/gen_path.rs b/rust/ql/test/extractor-tests/generated/Path/gen_path.rs index 3b3f054875a9..de58e6978afe 100644 --- a/rust/ql/test/extractor-tests/generated/Path/gen_path.rs +++ b/rust/ql/test/extractor-tests/generated/Path/gen_path.rs @@ -2,5 +2,6 @@ fn test_path() -> () { // A path. For example: + use some_crate::some_module::some_item; foo::bar; } diff --git a/rust/ql/test/extractor-tests/generated/PathExpr/gen_path_expr.rs b/rust/ql/test/extractor-tests/generated/Path/gen_path_expr.rs similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathExpr/gen_path_expr.rs rename to rust/ql/test/extractor-tests/generated/Path/gen_path_expr.rs diff --git a/rust/ql/test/extractor-tests/generated/PathPat/gen_path_pat.rs b/rust/ql/test/extractor-tests/generated/Path/gen_path_pat.rs similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathPat/gen_path_pat.rs rename to rust/ql/test/extractor-tests/generated/Path/gen_path_pat.rs diff --git a/rust/ql/test/extractor-tests/generated/PathType/gen_path_type.rs b/rust/ql/test/extractor-tests/generated/Path/gen_path_type.rs similarity index 100% rename from rust/ql/test/extractor-tests/generated/PathType/gen_path_type.rs rename to rust/ql/test/extractor-tests/generated/Path/gen_path_type.rs diff --git a/rust/ql/test/extractor-tests/generated/PathExpr/CONSISTENCY/DataFlowConsistency.expected b/rust/ql/test/extractor-tests/generated/PathExpr/CONSISTENCY/DataFlowConsistency.expected deleted file mode 100644 index c54360f7361b..000000000000 --- a/rust/ql/test/extractor-tests/generated/PathExpr/CONSISTENCY/DataFlowConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -uniqueNodeToString -| gen_path_expr.rs:7:13:7:20 | (no string representation) | Node should have one toString but has 0. | -| gen_path_expr.rs:8:13:8:35 | (no string representation) | Node should have one toString but has 0. | diff --git a/rust/ql/test/extractor-tests/generated/PathExpr/PathExpr.expected b/rust/ql/test/extractor-tests/generated/PathExpr/PathExpr.expected deleted file mode 100644 index a676396a2f9b..000000000000 --- a/rust/ql/test/extractor-tests/generated/PathExpr/PathExpr.expected +++ /dev/null @@ -1,4 +0,0 @@ -| gen_path_expr.rs:5:13:5:20 | variable | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:6:13:6:20 | foo::bar | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:7:13:7:20 | (no string representation) | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:8:13:8:35 | (no string representation) | getNumberOfAttrs: | 0 | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/PathExpr/PathExpr_getPath.expected b/rust/ql/test/extractor-tests/generated/PathExpr/PathExpr_getPath.expected deleted file mode 100644 index a5765b5be60b..000000000000 --- a/rust/ql/test/extractor-tests/generated/PathExpr/PathExpr_getPath.expected +++ /dev/null @@ -1,4 +0,0 @@ -| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | -| gen_path_expr.rs:6:13:6:20 | foo::bar | gen_path_expr.rs:6:13:6:20 | foo::bar | -| gen_path_expr.rs:7:13:7:20 | (no string representation) | gen_path_expr.rs:7:13:7:20 | (no string representation) | -| gen_path_expr.rs:8:13:8:35 | (no string representation) | gen_path_expr.rs:8:13:8:35 | (no string representation) | diff --git a/rust/ql/test/extractor-tests/generated/PathPat/PathPat.expected b/rust/ql/test/extractor-tests/generated/PathPat/PathPat.expected deleted file mode 100644 index f7cee5c5586d..000000000000 --- a/rust/ql/test/extractor-tests/generated/PathPat/PathPat.expected +++ /dev/null @@ -1 +0,0 @@ -| gen_path_pat.rs:6:9:6:16 | Foo::Bar | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/PathPat/PathPat_getPath.expected b/rust/ql/test/extractor-tests/generated/PathPat/PathPat_getPath.expected deleted file mode 100644 index 1f450c24938b..000000000000 --- a/rust/ql/test/extractor-tests/generated/PathPat/PathPat_getPath.expected +++ /dev/null @@ -1 +0,0 @@ -| gen_path_pat.rs:6:9:6:16 | Foo::Bar | gen_path_pat.rs:6:9:6:16 | Foo::Bar | diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment.expected b/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment.expected deleted file mode 100644 index 32042fc6a59d..000000000000 --- a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment.expected +++ /dev/null @@ -1,4 +0,0 @@ -| gen_path_segment.rs:5:5:5:8 | todo | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | -| gen_path_segment.rs:5:5:5:11 | $crate | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | -| gen_path_segment.rs:5:5:5:11 | panic | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | -| gen_path_segment.rs:5:5:5:11 | panicking | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.expected b/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.expected deleted file mode 100644 index 28346240d296..000000000000 --- a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getNameRef.expected +++ /dev/null @@ -1,4 +0,0 @@ -| gen_path_segment.rs:5:5:5:8 | todo | gen_path_segment.rs:5:5:5:8 | todo | -| gen_path_segment.rs:5:5:5:11 | $crate | gen_path_segment.rs:5:5:5:11 | $crate | -| gen_path_segment.rs:5:5:5:11 | panic | gen_path_segment.rs:5:5:5:11 | panic | -| gen_path_segment.rs:5:5:5:11 | panicking | gen_path_segment.rs:5:5:5:11 | panicking | diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getPathType.expected b/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getPathType.expected deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getTy.expected b/rust/ql/test/extractor-tests/generated/PathSegment/PathSegment_getTy.expected deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/rust/ql/test/extractor-tests/generated/PathSegment/gen_path_segment.rs b/rust/ql/test/extractor-tests/generated/PathSegment/gen_path_segment.rs deleted file mode 100644 index 0ab008b6a685..000000000000 --- a/rust/ql/test/extractor-tests/generated/PathSegment/gen_path_segment.rs +++ /dev/null @@ -1,6 +0,0 @@ -// generated by codegen, do not edit - -fn test_path_segment() -> () { - // A PathSegment. For example: - todo!() -} diff --git a/rust/ql/test/extractor-tests/generated/PathType/PathType.expected b/rust/ql/test/extractor-tests/generated/PathType/PathType.expected deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/rust/ql/test/extractor-tests/generated/PathType/PathType_getPath.expected b/rust/ql/test/extractor-tests/generated/PathType/PathType_getPath.expected deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 323e946e4f99..8f5aee1677b2 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -81,6 +81,7 @@ class _: """ A path. For example: ```rust + use some_crate::some_module::some_item; foo::bar; ``` """ @@ -120,6 +121,7 @@ class PathExprBase(Expr): @annotate(PathExpr, replace_bases={Expr: PathExprBase}) +@qltest.test_with(Path) class _: """ A path expression. For example: @@ -721,6 +723,7 @@ class _: @annotate(PathPat) +@qltest.test_with(Path) class _: """ A path pattern. For example: @@ -1366,16 +1369,15 @@ class _: @annotate(PathSegment) +@qltest.test_with(Path) class _: """ - A PathSegment. For example: - ```rust - todo!() - ``` + A path segment, which is one part of a whole path. """ @annotate(PathType) +@qltest.test_with(Path) class _: """ A PathType. For example: From d8b453fc0d7dbb5fdcc1510503f83f06be13c37b Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 21 Nov 2024 11:14:59 +0100 Subject: [PATCH 15/35] Rust: add consistency query printing AST classes of nodes with wrong `toString` --- rust/ql/consistency-queries/DataFlowConsistency.ql | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rust/ql/consistency-queries/DataFlowConsistency.ql b/rust/ql/consistency-queries/DataFlowConsistency.ql index 3513121f2608..9c472b2d97c4 100644 --- a/rust/ql/consistency-queries/DataFlowConsistency.ql +++ b/rust/ql/consistency-queries/DataFlowConsistency.ql @@ -14,3 +14,11 @@ private import codeql.dataflow.internal.DataFlowImplConsistency private module Input implements InputSig { } import MakeConsistency + +/** + * This adds `AstNode` class names to the results of `uniqueNodeToString`, if any. + */ +query predicate uniqueNodeToStringClasses(Node n, string cls) { + uniqueNodeToString(n, _) and + cls = n.getCfgNode().getAstNode().getPrimaryQlClasses() +} From 36d8a6d05fda6bbf1633af89905e0d71e0a6eb99 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 21 Nov 2024 11:42:00 +0100 Subject: [PATCH 16/35] Rust: add class printouts to `AstConsistency.ql` --- rust/ql/consistency-queries/DataFlowConsistency.ql | 8 -------- rust/ql/lib/codeql/rust/AstConsistency.qll | 9 ++++++--- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/rust/ql/consistency-queries/DataFlowConsistency.ql b/rust/ql/consistency-queries/DataFlowConsistency.ql index 9c472b2d97c4..3513121f2608 100644 --- a/rust/ql/consistency-queries/DataFlowConsistency.ql +++ b/rust/ql/consistency-queries/DataFlowConsistency.ql @@ -14,11 +14,3 @@ private import codeql.dataflow.internal.DataFlowImplConsistency private module Input implements InputSig { } import MakeConsistency - -/** - * This adds `AstNode` class names to the results of `uniqueNodeToString`, if any. - */ -query predicate uniqueNodeToStringClasses(Node n, string cls) { - uniqueNodeToString(n, _) and - cls = n.getCfgNode().getAstNode().getPrimaryQlClasses() -} diff --git a/rust/ql/lib/codeql/rust/AstConsistency.qll b/rust/ql/lib/codeql/rust/AstConsistency.qll index dbb7f7216d72..3902f56d20ba 100644 --- a/rust/ql/lib/codeql/rust/AstConsistency.qll +++ b/rust/ql/lib/codeql/rust/AstConsistency.qll @@ -10,8 +10,9 @@ private predicate multipleToStrings(Element e) { strictcount(e.toString()) > 1 } /** * Holds if `e` has more than one `toString()` result. */ -query predicate multipleToStrings(Element e, string s) { +query predicate multipleToStrings(Element e, string cls, string s) { multipleToStrings(e) and + cls = e.getPrimaryQlClasses() and s = strictconcat(e.toString(), ", ") } @@ -39,9 +40,11 @@ private predicate multipleParents(Element child) { strictcount(getParent(child)) /** * Holds if `child` has more than one AST parent. */ -query predicate multipleParents(Element child, Element parent) { +query predicate multipleParents(Element child, string childClass, Element parent, string parentClass) { multipleParents(child) and - parent = getParent(child) + childClass = child.getPrimaryQlClasses() and + parent = getParent(child) and + parentClass = parent.getPrimaryQlClasses() } /** From c2b426df768b62dd2bb38c43a3515f64905ae2b8 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 21 Nov 2024 12:54:13 +0100 Subject: [PATCH 17/35] Rust: accept test changes --- .../canonical_path/canonical_paths.expected | 28 +++++++++---------- .../generated/BlockExpr/BlockExpr.expected | 2 +- .../BlockExpr/BlockExpr_getLabel.expected | 2 +- .../BlockExpr/BlockExpr_getStmtList.expected | 2 +- .../generated/BoxPat/BoxPat.expected | 2 +- .../generated/BoxPat/BoxPat_getPat.expected | 2 +- .../generated/CastExpr/CastExpr.expected | 2 +- .../CastExpr/CastExpr_getExpr.expected | 2 +- .../CastExpr/CastExpr_getTy.expected | 2 +- .../ContinueExpr/ContinueExpr.expected | 2 +- .../ContinueExpr_getLifetime.expected | 2 +- .../generated/Label/Label.expected | 2 +- .../Label/Label_getLifetime.expected | 2 +- .../generated/LetStmt/LetStmt.expected | 2 +- .../LetStmt/LetStmt_getInitializer.expected | 2 +- .../LetStmt/LetStmt_getLetElse.expected | 2 +- .../generated/LetStmt/LetStmt_getPat.expected | 2 +- .../generated/LetStmt/LetStmt_getTy.expected | 4 +-- .../generated/LoopExpr/LoopExpr.expected | 2 +- .../LoopExpr/LoopExpr_getLabel.expected | 2 +- .../LoopExpr/LoopExpr_getLoopBody.expected | 2 +- .../generated/MatchArm/MatchArm.expected | 2 +- .../MatchArm/MatchArm_getExpr.expected | 2 +- .../MatchArm/MatchArm_getPat.expected | 2 +- .../OffsetOfExpr/OffsetOfExpr_getTy.expected | 2 +- .../generated/OrPat/OrPat.expected | 2 +- .../generated/OrPat/OrPat_getPat.expected | 4 +-- .../generated/RefPat/RefPat.expected | 2 +- .../generated/RefPat/RefPat_getPat.expected | 2 +- .../ql/test/extractor-tests/utf8/ast.expected | 2 +- .../controlflow-unstable/Cfg.expected | 24 ++++++++-------- 31 files changed, 57 insertions(+), 57 deletions(-) diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected index d9919af198c2..c65eaaff234e 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected @@ -3,13 +3,13 @@ canonicalPaths | canonical_paths.rs:2:5:3:22 | Struct | repo::test | crate::canonical_paths::a::Struct | | canonical_paths.rs:5:5:7:5 | trait Trait | repo::test | crate::canonical_paths::a::Trait | | canonical_paths.rs:6:9:6:20 | fn f | repo::test | crate::canonical_paths::a::Trait::f | -| canonical_paths.rs:9:5:11:5 | impl Trait for Struct { ... } | None | None | +| canonical_paths.rs:9:5:11:5 | impl for { ... } | None | None | | canonical_paths.rs:10:9:10:22 | fn f | repo::test | ::f | -| canonical_paths.rs:13:5:15:5 | impl Struct { ... } | None | None | +| canonical_paths.rs:13:5:15:5 | impl { ... } | None | None | | canonical_paths.rs:14:9:14:22 | fn g | repo::test | ::g | | canonical_paths.rs:17:5:19:5 | trait TraitWithBlanketImpl | repo::test | crate::canonical_paths::a::TraitWithBlanketImpl | | canonical_paths.rs:18:9:18:20 | fn h | repo::test | crate::canonical_paths::a::TraitWithBlanketImpl::h | -| canonical_paths.rs:21:5:23:5 | impl TraitWithBlanketImpl for T { ... } | None | None | +| canonical_paths.rs:21:5:23:5 | impl for { ... } | None | None | | canonical_paths.rs:22:9:22:22 | fn h | repo::test | <_ as crate::canonical_paths::a::TraitWithBlanketImpl>::h | | canonical_paths.rs:25:5:25:16 | fn free | repo::test | crate::canonical_paths::a::free | | canonical_paths.rs:27:5:33:5 | fn usage | repo::test | crate::canonical_paths::a::usage | @@ -19,11 +19,11 @@ canonicalPaths | canonical_paths.rs:40:9:40:27 | Struct | repo::test | {34}::OtherStruct | | canonical_paths.rs:42:9:44:9 | trait OtherTrait | repo::test | {34}::OtherTrait | | canonical_paths.rs:43:13:43:24 | fn g | repo::test | {34}::OtherTrait::g | -| canonical_paths.rs:46:9:48:9 | impl OtherTrait for OtherStruct { ... } | None | None | +| canonical_paths.rs:46:9:48:9 | impl for { ... } | None | None | | canonical_paths.rs:47:13:47:26 | fn g | repo::test | <{34}::OtherStruct as {34}::OtherTrait>::g | -| canonical_paths.rs:50:9:52:9 | impl OtherTrait for crate::canonical_paths::a::Struct { ... } | None | None | +| canonical_paths.rs:50:9:52:9 | impl for <...::Struct> { ... } | None | None | | canonical_paths.rs:51:13:51:26 | fn g | repo::test | ::g | -| canonical_paths.rs:54:9:56:9 | impl crate::canonical_paths::a::Trait for OtherStruct { ... } | None | None | +| canonical_paths.rs:54:9:56:9 | impl <...::Trait> for { ... } | None | None | | canonical_paths.rs:55:13:55:26 | fn f | repo::test | <{34}::OtherStruct as crate::canonical_paths::a::Trait>::f | | canonical_paths.rs:58:9:60:9 | fn nested | repo::test | {34}::nested | | canonical_paths.rs:59:13:59:31 | Struct | repo::test | {35}::OtherStruct | @@ -48,19 +48,19 @@ resolvedPaths | canonical_paths.rs:31:9:31:13 | ... .h(...) | repo::test | <_ as crate::canonical_paths::a::TraitWithBlanketImpl>::h | | canonical_paths.rs:32:9:32:12 | free | repo::test | crate::canonical_paths::a::free | | canonical_paths.rs:37:9:37:13 | super | repo::test | crate::canonical_paths | -| canonical_paths.rs:37:9:37:16 | super::a | repo::test | crate::canonical_paths::a | -| canonical_paths.rs:37:9:37:23 | super::a::Trait | repo::test | crate::canonical_paths::a::Trait | +| canonical_paths.rs:37:9:37:16 | ...::a | repo::test | crate::canonical_paths::a | +| canonical_paths.rs:37:9:37:23 | ...::Trait | repo::test | crate::canonical_paths::a::Trait | | canonical_paths.rs:46:14:46:23 | OtherTrait | repo::test | {34}::OtherTrait | | canonical_paths.rs:46:29:46:39 | OtherStruct | repo::test | {34}::OtherStruct | | canonical_paths.rs:50:14:50:23 | OtherTrait | repo::test | {34}::OtherTrait | | canonical_paths.rs:50:29:50:33 | crate | None | None | -| canonical_paths.rs:50:29:50:50 | crate::canonical_paths | repo::test | crate::canonical_paths | -| canonical_paths.rs:50:29:50:53 | crate::canonical_paths::a | repo::test | crate::canonical_paths::a | -| canonical_paths.rs:50:29:50:61 | crate::canonical_paths::a::Struct | repo::test | crate::canonical_paths::a::Struct | +| canonical_paths.rs:50:29:50:50 | ...::canonical_paths | repo::test | crate::canonical_paths | +| canonical_paths.rs:50:29:50:53 | ...::a | repo::test | crate::canonical_paths::a | +| canonical_paths.rs:50:29:50:61 | ...::Struct | repo::test | crate::canonical_paths::a::Struct | | canonical_paths.rs:54:14:54:18 | crate | None | None | -| canonical_paths.rs:54:14:54:35 | crate::canonical_paths | repo::test | crate::canonical_paths | -| canonical_paths.rs:54:14:54:38 | crate::canonical_paths::a | repo::test | crate::canonical_paths::a | -| canonical_paths.rs:54:14:54:45 | crate::canonical_paths::a::Trait | repo::test | crate::canonical_paths::a::Trait | +| canonical_paths.rs:54:14:54:35 | ...::canonical_paths | repo::test | crate::canonical_paths | +| canonical_paths.rs:54:14:54:38 | ...::a | repo::test | crate::canonical_paths::a | +| canonical_paths.rs:54:14:54:45 | ...::Trait | repo::test | crate::canonical_paths::a::Trait | | canonical_paths.rs:54:51:54:61 | OtherStruct | repo::test | {34}::OtherStruct | | canonical_paths.rs:63:21:63:31 | OtherStruct | repo::test | {34}::OtherStruct | | canonical_paths.rs:64:13:64:13 | s | None | None | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected index b832addc7998..b6be24d0bb73 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected @@ -1,3 +1,3 @@ | gen_block_expr.rs:3:28:12:1 | { ... } | hasLabel: | no | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasStmtList: | yes | | gen_block_expr.rs:5:5:7:5 | { ... } | hasLabel: | no | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasStmtList: | yes | -| gen_block_expr.rs:8:5:11:5 | ''label: { ... } | hasLabel: | yes | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasStmtList: | yes | +| gen_block_expr.rs:8:5:11:5 | 'label: { ... } | hasLabel: | yes | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasStmtList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected index 289a157b0dce..a6933d65b22b 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected @@ -1 +1 @@ -| gen_block_expr.rs:8:5:11:5 | ''label: { ... } | gen_block_expr.rs:8:5:8:11 | ''label | +| gen_block_expr.rs:8:5:11:5 | 'label: { ... } | gen_block_expr.rs:8:5:8:11 | 'label | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected index 582cff1a3cb0..4863264491b3 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected @@ -1,3 +1,3 @@ | gen_block_expr.rs:3:28:12:1 | { ... } | gen_block_expr.rs:3:28:12:1 | StmtList | | gen_block_expr.rs:5:5:7:5 | { ... } | gen_block_expr.rs:5:5:7:5 | StmtList | -| gen_block_expr.rs:8:5:11:5 | ''label: { ... } | gen_block_expr.rs:8:13:11:5 | StmtList | +| gen_block_expr.rs:8:5:11:5 | 'label: { ... } | gen_block_expr.rs:8:13:11:5 | StmtList | diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected index 810704f963ed..8ca2412e8ff5 100644 --- a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected @@ -1,2 +1,2 @@ | gen_box_pat.rs:6:9:6:27 | box ... | hasPat: | yes | -| gen_box_pat.rs:7:9:7:24 | box Option::None | hasPat: | yes | +| gen_box_pat.rs:7:9:7:24 | box ...::None | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected index f30ce3248027..4e12432652dc 100644 --- a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected @@ -1,2 +1,2 @@ | gen_box_pat.rs:6:9:6:27 | box ... | gen_box_pat.rs:6:13:6:27 | TupleStructPat | -| gen_box_pat.rs:7:9:7:24 | box Option::None | gen_box_pat.rs:7:13:7:24 | Option::None | +| gen_box_pat.rs:7:9:7:24 | box ...::None | gen_box_pat.rs:7:13:7:24 | ...::None | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected index c85e41866313..35cb00b044af 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | value as u64 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasTy: | yes | +| gen_cast_expr.rs:5:5:5:16 | value as | getNumberOfAttrs: | 0 | hasExpr: | yes | hasTy: | yes | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected index 01a710bfb533..d3bf1efc8b1d 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | value as u64 | gen_cast_expr.rs:5:5:5:9 | value | +| gen_cast_expr.rs:5:5:5:16 | value as | gen_cast_expr.rs:5:5:5:9 | value | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected index 87c07babb021..4e7fdb1e25c9 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | value as u64 | gen_cast_expr.rs:5:14:5:16 | u64 | +| gen_cast_expr.rs:5:5:5:16 | value as | gen_cast_expr.rs:5:14:5:16 | | diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected index f2c4e28c337e..a09556b9a3ff 100644 --- a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected @@ -1,2 +1,2 @@ | gen_continue_expr.rs:7:13:7:20 | continue | getNumberOfAttrs: | 0 | hasLifetime: | no | -| gen_continue_expr.rs:12:13:12:27 | continue ''label | getNumberOfAttrs: | 0 | hasLifetime: | yes | +| gen_continue_expr.rs:12:13:12:27 | continue 'label | getNumberOfAttrs: | 0 | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected index f4fa30ade3ce..d81d276ce0ae 100644 --- a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected @@ -1 +1 @@ -| gen_continue_expr.rs:12:13:12:27 | continue ''label | gen_continue_expr.rs:12:22:12:27 | ''label | +| gen_continue_expr.rs:12:13:12:27 | continue 'label | gen_continue_expr.rs:12:22:12:27 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/Label/Label.expected b/rust/ql/test/extractor-tests/generated/Label/Label.expected index ad594afe55b0..7525044aaa25 100644 --- a/rust/ql/test/extractor-tests/generated/Label/Label.expected +++ b/rust/ql/test/extractor-tests/generated/Label/Label.expected @@ -1 +1 @@ -| gen_label.rs:5:5:5:11 | ''label | hasLifetime: | yes | +| gen_label.rs:5:5:5:11 | 'label | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected b/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected index d3ea9171b8cf..73ebbe963e85 100644 --- a/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected +++ b/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected @@ -1 +1 @@ -| gen_label.rs:5:5:5:11 | ''label | gen_label.rs:5:5:5:10 | ''label | +| gen_label.rs:5:5:5:11 | 'label | gen_label.rs:5:5:5:10 | ''label | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected index 87c62a65a3a5..847ff988ff0d 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected @@ -3,4 +3,4 @@ | gen_let_stmt.rs:7:5:7:15 | let ... | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTy: | yes | | gen_let_stmt.rs:8:5:8:10 | let ... | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTy: | no | | gen_let_stmt.rs:9:5:9:24 | let ... = ... | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTy: | no | -| gen_let_stmt.rs:10:5:12:6 | let ... = ... else { ... } | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | yes | hasPat: | yes | hasTy: | no | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | yes | hasPat: | yes | hasTy: | no | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected index a88557f9d70f..bd8368e351fb 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected @@ -1,4 +1,4 @@ | gen_let_stmt.rs:5:5:5:15 | let ... = 42 | gen_let_stmt.rs:5:13:5:14 | 42 | | gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:18:6:19 | 42 | | gen_let_stmt.rs:9:5:9:24 | let ... = ... | gen_let_stmt.rs:9:18:9:23 | TupleExpr | -| gen_let_stmt.rs:10:5:12:6 | let ... = ... else { ... } | gen_let_stmt.rs:10:19:10:38 | std::env::var(...) | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:19:10:38 | ...::var(...) | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected index 84efa0be3b26..5e8090859af5 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected @@ -1 +1 @@ -| gen_let_stmt.rs:10:5:12:6 | let ... = ... else { ... } | gen_let_stmt.rs:10:40:12:5 | else { ... } | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:40:12:5 | else {...} | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected index e2aa2b9e9575..758837c946d1 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected @@ -3,4 +3,4 @@ | gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:9:7:9 | x | | gen_let_stmt.rs:8:5:8:10 | let ... | gen_let_stmt.rs:8:9:8:9 | x | | gen_let_stmt.rs:9:5:9:24 | let ... = ... | gen_let_stmt.rs:9:9:9:14 | TuplePat | -| gen_let_stmt.rs:10:5:12:6 | let ... = ... else { ... } | gen_let_stmt.rs:10:9:10:15 | TupleStructPat | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:9:10:15 | TupleStructPat | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected index 489647f4793a..b917fcb8c7c3 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected @@ -1,2 +1,2 @@ -| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:12:6:14 | i32 | -| gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:12:7:14 | i32 | +| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:12:6:14 | | +| gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:12:7:14 | | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected index f7129b163850..b0adbe40897f 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected @@ -1,3 +1,3 @@ | gen_loop_expr.rs:5:5:7:5 | loop { ... } | hasLabel: | no | hasLoopBody: | yes | getNumberOfAttrs: | 0 | -| gen_loop_expr.rs:8:5:11:5 | ''label: loop { ... } | hasLabel: | yes | hasLoopBody: | yes | getNumberOfAttrs: | 0 | +| gen_loop_expr.rs:8:5:11:5 | 'label: loop { ... } | hasLabel: | yes | hasLoopBody: | yes | getNumberOfAttrs: | 0 | | gen_loop_expr.rs:13:5:19:5 | loop { ... } | hasLabel: | no | hasLoopBody: | yes | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected index 167f84096fee..e2dc2fdf8950 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected @@ -1 +1 @@ -| gen_loop_expr.rs:8:5:11:5 | ''label: loop { ... } | gen_loop_expr.rs:8:5:8:11 | ''label | +| gen_loop_expr.rs:8:5:11:5 | 'label: loop { ... } | gen_loop_expr.rs:8:5:8:11 | 'label | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected index 952955da19dd..9cf0c64dd0b8 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected @@ -1,3 +1,3 @@ | gen_loop_expr.rs:5:5:7:5 | loop { ... } | gen_loop_expr.rs:5:10:7:5 | { ... } | -| gen_loop_expr.rs:8:5:11:5 | ''label: loop { ... } | gen_loop_expr.rs:8:18:11:5 | { ... } | +| gen_loop_expr.rs:8:5:11:5 | 'label: loop { ... } | gen_loop_expr.rs:8:18:11:5 | { ... } | | gen_loop_expr.rs:13:5:19:5 | loop { ... } | gen_loop_expr.rs:13:10:19:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected index d21faa7ff19b..b3eb4c178b26 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected @@ -1,4 +1,4 @@ | gen_match_arm.rs:6:9:6:29 | ... => y | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | -| gen_match_arm.rs:7:9:7:26 | Option::None => 0 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | +| gen_match_arm.rs:7:9:7:26 | ...::None => 0 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | | gen_match_arm.rs:10:9:10:35 | ... if ... => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | yes | hasPat: | yes | | gen_match_arm.rs:11:9:11:15 | _ => 0 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected index ecf8098fd789..95d4a7fc2f22 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected @@ -1,4 +1,4 @@ | gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:28:6:28 | y | -| gen_match_arm.rs:7:9:7:26 | Option::None => 0 | gen_match_arm.rs:7:25:7:25 | 0 | +| gen_match_arm.rs:7:9:7:26 | ...::None => 0 | gen_match_arm.rs:7:25:7:25 | 0 | | gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:30:10:34 | ... / ... | | gen_match_arm.rs:11:9:11:15 | _ => 0 | gen_match_arm.rs:11:14:11:14 | 0 | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected index 010c7b50b066..9928555fc324 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected @@ -1,4 +1,4 @@ | gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:9:6:23 | TupleStructPat | -| gen_match_arm.rs:7:9:7:26 | Option::None => 0 | gen_match_arm.rs:7:9:7:20 | Option::None | +| gen_match_arm.rs:7:9:7:26 | ...::None => 0 | gen_match_arm.rs:7:9:7:20 | ...::None | | gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:9:10:15 | TupleStructPat | | gen_match_arm.rs:11:9:11:15 | _ => 0 | gen_match_arm.rs:11:9:11:9 | _ | diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected index e2e11abb6a0f..f6ab8a92afff 100644 --- a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected @@ -1 +1 @@ -| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | gen_offset_of_expr.rs:5:25:5:30 | Struct | +| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | gen_offset_of_expr.rs:5:25:5:30 | | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected index 26426d2c5aaf..1d67a8509b91 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected @@ -1 +1 @@ -| gen_or_pat.rs:6:9:6:38 | ... \| Option::None | getNumberOfPats: | 2 | +| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | getNumberOfPats: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected index 80326c82f0d3..22ebce5dde55 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_or_pat.rs:6:9:6:38 | ... \| Option::None | 0 | gen_or_pat.rs:6:9:6:23 | TupleStructPat | -| gen_or_pat.rs:6:9:6:38 | ... \| Option::None | 1 | gen_or_pat.rs:6:27:6:38 | Option::None | +| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 0 | gen_or_pat.rs:6:9:6:23 | TupleStructPat | +| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 1 | gen_or_pat.rs:6:27:6:38 | ...::None | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected index 3e52c12807e1..a9dfaf874561 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected @@ -1,2 +1,2 @@ | gen_ref_pat.rs:6:9:6:28 | &mut ... | isMut: | yes | hasPat: | yes | -| gen_ref_pat.rs:7:9:7:21 | &Option::None | isMut: | no | hasPat: | yes | +| gen_ref_pat.rs:7:9:7:21 | &...::None | isMut: | no | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected index 96b017a42ea9..d4f78daeb829 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected @@ -1,2 +1,2 @@ | gen_ref_pat.rs:6:9:6:28 | &mut ... | gen_ref_pat.rs:6:14:6:28 | TupleStructPat | -| gen_ref_pat.rs:7:9:7:21 | &Option::None | gen_ref_pat.rs:7:10:7:21 | Option::None | +| gen_ref_pat.rs:7:9:7:21 | &...::None | gen_ref_pat.rs:7:10:7:21 | ...::None | diff --git a/rust/ql/test/extractor-tests/utf8/ast.expected b/rust/ql/test/extractor-tests/utf8/ast.expected index 560f834766e3..e1d0418c206f 100644 --- a/rust/ql/test/extractor-tests/utf8/ast.expected +++ b/rust/ql/test/extractor-tests/utf8/ast.expected @@ -17,7 +17,7 @@ | utf8_identifiers.rs:6:10:8:1 | RecordFieldList | | utf8_identifiers.rs:7:5:7:5 | \u03b4 | | utf8_identifiers.rs:7:5:7:13 | RecordField | -| utf8_identifiers.rs:7:9:7:13 | usize | +| utf8_identifiers.rs:7:9:7:13 | | | utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | diff --git a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected index 4260e2384c8f..bdc9d30f09c2 100644 --- a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected @@ -1,12 +1,12 @@ edges | test.rs:5:5:11:5 | enter fn test_and_if_let | test.rs:5:24:5:24 | a | | | test.rs:5:5:11:5 | exit fn test_and_if_let (normal) | test.rs:5:5:11:5 | exit fn test_and_if_let | | -| test.rs:5:24:5:24 | a | test.rs:5:24:5:30 | ...: bool | match | -| test.rs:5:24:5:30 | ...: bool | test.rs:5:33:5:33 | b | | -| test.rs:5:33:5:33 | b | test.rs:5:33:5:47 | ...: Option::<...> | match | -| test.rs:5:33:5:47 | ...: Option::<...> | test.rs:5:50:5:50 | c | | -| test.rs:5:50:5:50 | c | test.rs:5:50:5:56 | ...: bool | match | -| test.rs:5:50:5:56 | ...: bool | test.rs:6:12:6:12 | a | | +| test.rs:5:24:5:24 | a | test.rs:5:24:5:30 | ...: | match | +| test.rs:5:24:5:30 | ...: | test.rs:5:33:5:33 | b | | +| test.rs:5:33:5:33 | b | test.rs:5:33:5:47 | ...: > | match | +| test.rs:5:33:5:47 | ...: > | test.rs:5:50:5:50 | c | | +| test.rs:5:50:5:50 | c | test.rs:5:50:5:56 | ...: | match | +| test.rs:5:50:5:56 | ...: | test.rs:6:12:6:12 | a | | | test.rs:5:67:11:5 | { ... } | test.rs:5:5:11:5 | exit fn test_and_if_let (normal) | | | test.rs:6:9:10:9 | if ... {...} else {...} | test.rs:5:67:11:5 | { ... } | | | test.rs:6:12:6:12 | a | test.rs:6:12:6:31 | [boolean(false)] ... && ... | false | @@ -24,12 +24,12 @@ edges | test.rs:9:13:9:17 | false | test.rs:8:16:10:9 | { ... } | | | test.rs:13:5:21:5 | enter fn test_and_if_let2 | test.rs:13:25:13:25 | a | | | test.rs:13:5:21:5 | exit fn test_and_if_let2 (normal) | test.rs:13:5:21:5 | exit fn test_and_if_let2 | | -| test.rs:13:25:13:25 | a | test.rs:13:25:13:31 | ...: bool | match | -| test.rs:13:25:13:31 | ...: bool | test.rs:13:34:13:34 | b | | -| test.rs:13:34:13:34 | b | test.rs:13:34:13:39 | ...: i64 | match | -| test.rs:13:34:13:39 | ...: i64 | test.rs:13:42:13:42 | c | | -| test.rs:13:42:13:42 | c | test.rs:13:42:13:48 | ...: bool | match | -| test.rs:13:42:13:48 | ...: bool | test.rs:14:12:14:12 | a | | +| test.rs:13:25:13:25 | a | test.rs:13:25:13:31 | ...: | match | +| test.rs:13:25:13:31 | ...: | test.rs:13:34:13:34 | b | | +| test.rs:13:34:13:34 | b | test.rs:13:34:13:39 | ...: | match | +| test.rs:13:34:13:39 | ...: | test.rs:13:42:13:42 | c | | +| test.rs:13:42:13:42 | c | test.rs:13:42:13:48 | ...: | match | +| test.rs:13:42:13:48 | ...: | test.rs:14:12:14:12 | a | | | test.rs:13:59:21:5 | { ... } | test.rs:13:5:21:5 | exit fn test_and_if_let2 (normal) | | | test.rs:14:9:20:9 | if ... {...} else {...} | test.rs:13:59:21:5 | { ... } | | | test.rs:14:12:14:12 | a | test.rs:14:12:14:25 | [boolean(false)] ... && ... | false | From 6776b31c0d2613eaafc26959af658e87cd01b66e Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 21 Nov 2024 15:27:34 +0100 Subject: [PATCH 18/35] Rust: tweak `PathType` string representations and add one for `InferType` --- rust/ql/.generated.list | 8 +++----- rust/ql/.gitattributes | 2 -- rust/ql/lib/codeql/rust/elements/PathType.qll | 5 +++-- .../rust/elements/internal/GenericArgListImpl.qll | 8 ++++++-- .../codeql/rust/elements/internal/InferTypeImpl.qll | 8 ++++++-- .../rust/elements/internal/PathSegmentImpl.qll | 11 +++++------ .../codeql/rust/elements/internal/PathTypeImpl.qll | 9 ++++----- .../rust/elements/internal/generated/PathType.qll | 5 +++-- .../codeql/rust/elements/internal/generated/Raw.qll | 5 +++-- .../extractor-tests/generated/.generated_tests.list | 2 +- .../extractor-tests/generated/Path/Path.expected | 11 +++++++---- .../extractor-tests/generated/Path/PathExpr.expected | 1 - .../generated/Path/PathExpr_getPath.expected | 1 - .../generated/Path/PathSegment.expected | 11 +++++++---- .../Path/PathSegment_getGenericArgList.expected | 1 + .../generated/Path/PathSegment_getNameRef.expected | 11 +++++++---- .../generated/Path/PathSegment_getPathType.expected | 4 ++-- .../generated/Path/PathSegment_getTy.expected | 4 ++-- .../extractor-tests/generated/Path/PathType.expected | 12 ++++++++---- .../generated/Path/PathType_getPath.expected | 12 ++++++++---- .../generated/Path/Path_getPart.expected | 11 +++++++---- .../generated/Path/Path_getQualifier.expected | 5 +++-- .../Path/Path_getResolvedCrateOrigin.expected | 4 ++-- .../generated/Path/Path_getResolvedPath.expected | 4 ++-- .../extractor-tests/generated/Path/gen_path_type.rs | 5 +++-- rust/schema/annotations.py | 5 +++-- 26 files changed, 96 insertions(+), 69 deletions(-) diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 0e6b53b2067e..b51e8fb53ef7 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -104,7 +104,7 @@ lib/codeql/rust/elements/PathExpr.qll 906df1d80c662b79f1b0b0428c39754b7f8dbcb223 lib/codeql/rust/elements/PathExprBase.qll bb41092ec690ae926e3233c215dcaf1fd8e161b8a6955151949f492e02dba13a b2257072f8062d31c29c63ee1311b07e0d2eb37075f582cfc76bb542ef773198 lib/codeql/rust/elements/PathPat.qll 6897e69bcb24b56d39ede796cf5767988dcd5741e02333fa8495dd7c814f771a 2a011fb92f17e4b4ff713e6d29f591054dfede22a9aaa006e67fca2c23ab76bf lib/codeql/rust/elements/PathSegment.qll 9560551cf8b65e84705e7f302e12b48330e048613129e87c0f65a7eb297a6cc3 3aa75a5fd81f8ea32bd2b4bf0c51c386de57cbe9ab035fe3ec68ad7fcf51b375 -lib/codeql/rust/elements/PathType.qll a7bd3b05dc2c0e96c91c5485db508a1f5bb8fe3a01486be6815ae9dabb163add b11e996b6c0cc21a3d8d1ddc23c37e4d54a78e84a9278b3ceca1e94cb7321532 +lib/codeql/rust/elements/PathType.qll 257ede178bb74ebdb8e266ebaa95082e7fb7cc8d921ef476f4df268ee8a1366c c48f6e04a8945a11f965e71819f68c00abc53a055042882b61716feda3ca63ae lib/codeql/rust/elements/PrefixExpr.qll 107e7bd111b637fd6d76026062d54c2780760b965f172ef119c50dd0714a377d 46954a9404e561c51682395729daac3bda5442113f29839d043e9605d63f7f6d lib/codeql/rust/elements/PtrType.qll b137f47a53e41b3b30c7d80dbdd6724bf15f99530ca40cc264a04af5f07aa878 b2ffdf739bfb7564d942fe54409834a59511c0b305b6d5b2219a8ee0ef594332 lib/codeql/rust/elements/RangeExpr.qll 43785bea08a6a537010db1138e68ae92eed7e481744188dfb3bad119425ff740 5e81cfbdf4617372a73d662a248a0b380c1f40988a5daefb7f00057cae10d3d4 @@ -233,7 +233,6 @@ lib/codeql/rust/elements/internal/FormatArgsExprConstructor.qll ce29ff5a839b885b lib/codeql/rust/elements/internal/FunctionConstructor.qll b50aea579938d03745dfbd8b5fa8498f7f83b967369f63d6875510e09ab7f5d2 19cca32aeaecaf9debc27329e8c39ecec69464bb1d89d7b09908a1d73a8d92a2 lib/codeql/rust/elements/internal/GenericArgImpl.qll 6b1b804c357425c223f926e560a688e81506f5a35b95485cecf704e88cc009ee cc1ccf6a23dadc397e82664f3911d4b385d4c8ca80b1ee16d5275d9c936148dd lib/codeql/rust/elements/internal/GenericArgListConstructor.qll 46859bb3eb09d77987a18642d65ba2e13471a4dc9c0a83a192fddc82e37c335c 2c7d54c876269a88d3461b05745e73b06532b1616cae9b614ac94b28735d8fc4 -lib/codeql/rust/elements/internal/GenericArgListImpl.qll 1a39ba7080147abccaaba451852c9c124fb6177f2ebd64e38ee74014444a34e1 80df3150c961936037ac02b46ef5f775c3f82e66490afbca00a016cb9eee798a lib/codeql/rust/elements/internal/GenericParamImpl.qll f435f80d7f275803c1311d362467f4a367deb5a2c0245b17a9e12468a2c3ce2f 8e8fcc29f510efa03ce194ad3a1e2ae3fbd7f8e04ab5a4a2d1db03e95f388446 lib/codeql/rust/elements/internal/GenericParamListConstructor.qll 7221146d1724e0add3a8e70e0e46670142589eb7143425e1871ac4358a8c8bdb 2fbb7576444d6b2da6164245e2660d592d276ae2c1ca9f2bda5656b1c5c0a73a lib/codeql/rust/elements/internal/GenericParamListImpl.qll 524aa0949df6d4d2cb9bee6226650f63a6f181d7644933fa265673b281074885 27b0210e5eaa2040bc8a093e35e1394befb6994b25369544738d0447ef269a9c @@ -244,7 +243,6 @@ lib/codeql/rust/elements/internal/ImplTraitTypeConstructor.qll b47501280b026a4e9 lib/codeql/rust/elements/internal/ImplTraitTypeImpl.qll 9826a676525c98c30019f62f3c5943b4f62f278ed738dcc023d15f82f36a9d32 da369a61b95685c29fce3c07082d2a58ab633d526d094fa9eaefa82f564609f6 lib/codeql/rust/elements/internal/IndexExprConstructor.qll 99bdc3d793c4dbd993860da60abe2b7c604345d645e86916462bc55a6939a5d1 3fe9d7da725956903707806aadbecac8d5b3874e8bed63c9bab54fff630e75dd lib/codeql/rust/elements/internal/InferTypeConstructor.qll fb8f2aec6cd1e681cd84a7bd574459e19b9b2a152009290e2eac550f012a06b7 e2b1694f00a4e6a82b13d08d7bb95c98a73792370c1155263d696e60d39b2c3b -lib/codeql/rust/elements/internal/InferTypeImpl.qll 9d0bf471a7e0c2671aae52cebadc763ed13e6a62451bf22da3061d7781d8f0bf 4e9e218862e48700523d882eb64d24135289216653cf92195f74eb8a35f50d7c lib/codeql/rust/elements/internal/ItemImpl.qll 3eaa97dcbdb8870acaebc1e11a37a5cfdfa200751461e54d3a52ca48b90ba9bd 41fbd1110b0e24f4d5a3deee0a51c02d206178111a361a1e94501ca1ab70d7f7 lib/codeql/rust/elements/internal/ItemListConstructor.qll 08af3bd12536941c3dd4a43c81cc861be24325e242e2593c087a3ce632674291 2fa166159c409d2aaffa73a30babb40829a6de580bd40894d909ee6152801082 lib/codeql/rust/elements/internal/ItemListImpl.qll fb27417bb3ee17a739ae966dd7c6f382bc2a1de3e7efdfe1586d76a257c0b573 dee7ded650df8ef46b2ac9d472718536fd76dffee86bc208b5a6144060221886 @@ -518,13 +516,13 @@ lib/codeql/rust/elements/internal/generated/PathExpr.qll 2096e3c1db22ee488a76169 lib/codeql/rust/elements/internal/generated/PathExprBase.qll d8218e201b8557fa6d9ca2c30b764e5ad9a04a2e4fb695cc7219bbd7636a6ac2 4ef178426d7095a156f4f8c459b4d16f63abc64336cb50a6cf883a5f7ee09113 lib/codeql/rust/elements/internal/generated/PathPat.qll 98c9938d6a359fd717829b196eb09701d2c798e18c1f43fa7b2a9145afdf6c19 caba2e629cae08682baac90a76ae9a48cda2d7d6f9c23d506fa0ff3f292978a4 lib/codeql/rust/elements/internal/generated/PathSegment.qll 0fa07886deb0fc4d909d7edf691238a344f2739900aafb168cbac171eb1729a8 8f4bb418d8bea5e40128a87977c57d0a9183d06d111601ad93130c8615c11465 -lib/codeql/rust/elements/internal/generated/PathType.qll 45de78e5374d6eb0446e2112ec72d3692c2811df9fa2ad03d0127e426940abe3 622cf70408413a565a0dac58f451035ac1339c8d0ee5b24f630680201cb0aa48 +lib/codeql/rust/elements/internal/generated/PathType.qll df6fd322ba0d99d6cb315edce8dbf099b661b84fdfcc3ad629fdd1fd066c1986 e11c8615cd7b02034b47b58f30a7b6fcbc6d33ec53303288dfd34d9a25f5a186 lib/codeql/rust/elements/internal/generated/PrefixExpr.qll c9ede5f2deb7b41bc8240969e8554f645057018fe96e7e9ad9c2924c8b14722b 5ae2e3c3dc8fa73e7026ef6534185afa6b0b5051804435d8b741dd3640c864e1 lib/codeql/rust/elements/internal/generated/PtrType.qll 40099c5a4041314b66932dfd777c9e2bef90a0711fb8d7c2c2cec764c003ac4a cf8297d93557356a572223d3e8acca701837c4b1f54e8d4351ba195fb7ed27f8 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll fd2eeb93f84b668f5083ecad8ff5f5d4bbdfcf4c65f4a40907aca47e33b031d6 de433b9feec8276ed34d106b97c7b66d81206a21a2b5343253f4cf799f1bf567 +lib/codeql/rust/elements/internal/generated/Raw.qll b534b0f2318a3a15d27cfa1d2d98ad4ef778b48edf2d36b49c56cf350a0f8328 baf18167656d407fc496ed222fcc9766030b018651f8bc4e2801a1ccbbfb29d6 lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index f83cefce87be..eaefca5a2c1a 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -235,7 +235,6 @@ /lib/codeql/rust/elements/internal/FunctionConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/GenericArgImpl.qll linguist-generated /lib/codeql/rust/elements/internal/GenericArgListConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/GenericArgListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/GenericParamImpl.qll linguist-generated /lib/codeql/rust/elements/internal/GenericParamListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/GenericParamListImpl.qll linguist-generated @@ -246,7 +245,6 @@ /lib/codeql/rust/elements/internal/ImplTraitTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/IndexExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/InferTypeConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/InferTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ItemImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ItemListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ItemListImpl.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/PathType.qll b/rust/ql/lib/codeql/rust/elements/PathType.qll index e313b9d1b561..773fe910bfa3 100644 --- a/rust/ql/lib/codeql/rust/elements/PathType.qll +++ b/rust/ql/lib/codeql/rust/elements/PathType.qll @@ -8,9 +8,10 @@ import codeql.rust.elements.Path import codeql.rust.elements.TypeRef /** - * A PathType. For example: + * A type referring to a path. For example: * ```rust - * todo!() + * type X = std::collections::HashMap; + * type Y = X::Item; * ``` */ final class PathType = Impl::PathType; diff --git a/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll index 44d74bffbc6f..a701801b68cf 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/GenericArgListImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `GenericArgList`. * @@ -12,11 +11,16 @@ private import codeql.rust.elements.internal.generated.GenericArgList * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * The base class for generic arguments. * ```rust * x.foo::(42); * ``` */ - class GenericArgList extends Generated::GenericArgList { } + class GenericArgList extends Generated::GenericArgList { + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = "<...>" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/InferTypeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/InferTypeImpl.qll index b29406661ba9..25c1a40701fd 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/InferTypeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/InferTypeImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `InferType`. * @@ -12,11 +11,16 @@ private import codeql.rust.elements.internal.generated.InferType * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A InferType. For example: * ```rust * todo!() * ``` */ - class InferType extends Generated::InferType { } + class InferType extends Generated::InferType { + override string toString() { result = this.toAbbreviatedString() } + + override string toAbbreviatedString() { result = "_" } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll index 01ce58788349..7f586afa3755 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll @@ -19,17 +19,16 @@ module Impl { override string toString() { result = this.toAbbreviatedString() } override string toAbbreviatedString() { - result = this.getAbbreviatedPrefix() + this.getAbbreviatedGenericArgList() + result = strictconcat(int i | | this.toAbbreviatedStringPart(i), "::" order by i) } - private string getAbbreviatedGenericArgList() { - if this.hasGenericArgList() then result = "::<...>" else result = "" - } - - private string getAbbreviatedPrefix() { + private string toAbbreviatedStringPart(int index) { + index = 0 and if this.hasPathType() or this.hasTy() then result = "<...>" else result = this.getNameRef().getText() + or + index = 1 and result = this.getGenericArgList().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll index a2ca1752ccab..02d8a98d42a3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathTypeImpl.qll @@ -13,16 +13,15 @@ private import codeql.rust.elements.internal.generated.PathType module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A PathType. For example: + * A type referring to a path. For example: * ```rust - * todo!() + * type X = std::collections::HashMap; + * type Y = X::Item; * ``` */ class PathType extends Generated::PathType { override string toString() { result = this.toAbbreviatedString() } - override string toAbbreviatedString() { - result = "<" + this.getPath().toAbbreviatedString() + ">" - } + override string toAbbreviatedString() { result = this.getPath().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathType.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathType.qll index 3ac799108ccb..13d7957c40e0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathType.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathType.qll @@ -15,9 +15,10 @@ import codeql.rust.elements.internal.TypeRefImpl::Impl as TypeRefImpl */ module Generated { /** - * A PathType. For example: + * A type referring to a path. For example: * ```rust - * todo!() + * type X = std::collections::HashMap; + * type Y = X::Item; * ``` * INTERNAL: Do not reference the `Generated::PathType` class directly. * Use the subclass `PathType`, where the following predicates are available. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 90fc0ae935bb..3ab5808bad39 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -2379,9 +2379,10 @@ module Raw { /** * INTERNAL: Do not use. - * A PathType. For example: + * A type referring to a path. For example: * ```rust - * todo!() + * type X = std::collections::HashMap; + * type Y = X::Item; * ``` */ class PathType extends @path_type, TypeRef { diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index e8221c66efdc..7e6f2cb65895 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -81,7 +81,7 @@ ParenType/gen_paren_type.rs ae1a945b56020eab14bb0ef75ae9ccb735d8e45d1213adee210a Path/gen_path.rs 490268d6bfb1635883b8bdefc683d59c4dd0e9c7f86c2e55954661efb3ab0253 490268d6bfb1635883b8bdefc683d59c4dd0e9c7f86c2e55954661efb3ab0253 Path/gen_path_expr.rs a1e0ececfe62a63a43583c9bd8064a80a90c042c55bac29d86776c0c6559f33a a1e0ececfe62a63a43583c9bd8064a80a90c042c55bac29d86776c0c6559f33a Path/gen_path_pat.rs fd7f941f8b33f19d3693be1fdb595c2fb2e85e8296702b82bf12bcd44632f371 fd7f941f8b33f19d3693be1fdb595c2fb2e85e8296702b82bf12bcd44632f371 -Path/gen_path_type.rs 710a5505615769da940202e7c6d9031edc23a4b05cd9fb25241c60affbba4027 710a5505615769da940202e7c6d9031edc23a4b05cd9fb25241c60affbba4027 +Path/gen_path_type.rs 210f2ce4000b59d2f908801c22c5497a0f0c9a3b1a5130e7dad0931430f49eb9 210f2ce4000b59d2f908801c22c5497a0f0c9a3b1a5130e7dad0931430f49eb9 PrefixExpr/gen_prefix_expr.rs c4b53e87f370713b9a9e257be26d082b0761497bac19b1d7401a31b22b30d1ab c4b53e87f370713b9a9e257be26d082b0761497bac19b1d7401a31b22b30d1ab PtrType/gen_ptr_type.rs dd7faad19454b92d7942ef664df1a5f26c01863e408b87249aa4d5d4f68c78b3 dd7faad19454b92d7942ef664df1a5f26c01863e408b87249aa4d5d4f68c78b3 RangeExpr/gen_range_expr.rs 3f27cff9cc76b2703beff622d1453b84121e1970a869e45f9428deac92c4ecb0 3f27cff9cc76b2703beff622d1453b84121e1970a869e45f9428deac92c4ecb0 diff --git a/rust/ql/test/extractor-tests/generated/Path/Path.expected b/rust/ql/test/extractor-tests/generated/Path/Path.expected index 42f266cb4edd..dfc303c3293c 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path.expected @@ -17,7 +17,10 @@ | gen_path_pat.rs:5:11:5:11 | x | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | | gen_path_pat.rs:6:9:6:11 | Foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | | gen_path_pat.rs:6:9:6:16 | ...::Bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | -| gen_path_type.rs:5:5:5:8 | todo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_type.rs:5:5:5:11 | $crate | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_type.rs:5:5:5:11 | ...::panic | hasResolvedPath: | yes | hasResolvedCrateOrigin: | yes | hasQualifier: | yes | hasPart: | yes | -| gen_path_type.rs:5:5:5:11 | ...::panicking | hasResolvedPath: | yes | hasResolvedCrateOrigin: | yes | hasQualifier: | yes | hasPart: | yes | +| gen_path_type.rs:5:14:5:16 | std | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_type.rs:5:14:5:29 | ...::collections | hasResolvedPath: | yes | hasResolvedCrateOrigin: | yes | hasQualifier: | yes | hasPart: | yes | +| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | hasResolvedPath: | yes | hasResolvedCrateOrigin: | yes | hasQualifier: | yes | hasPart: | yes | +| gen_path_type.rs:5:40:5:42 | i32 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_type.rs:5:45:5:47 | i32 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_type.rs:6:14:6:14 | X | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | +| gen_path_type.rs:6:14:6:20 | ...::Item | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected index c84497c6881d..4f6def5dd438 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected @@ -4,4 +4,3 @@ | gen_path_expr.rs:7:13:7:20 | ...::foo | getNumberOfAttrs: | 0 | hasPath: | yes | | gen_path_expr.rs:8:13:8:35 | ...::foo | getNumberOfAttrs: | 0 | hasPath: | yes | | gen_path_pat.rs:5:11:5:11 | x | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_type.rs:5:5:5:11 | ...::panic | getNumberOfAttrs: | 0 | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected index 925412bc6166..31b98a6a8ecf 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected @@ -4,4 +4,3 @@ | gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:13:7:20 | ...::foo | | gen_path_expr.rs:8:13:8:35 | ...::foo | gen_path_expr.rs:8:13:8:35 | ...::foo | | gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | -| gen_path_type.rs:5:5:5:11 | ...::panic | gen_path_type.rs:5:5:5:11 | ...::panic | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected index 418895093413..8278d7685dc3 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected @@ -17,7 +17,10 @@ | gen_path_pat.rs:5:11:5:11 | x | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | | gen_path_pat.rs:6:9:6:11 | Foo | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | | gen_path_pat.rs:6:14:6:16 | Bar | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | -| gen_path_type.rs:5:5:5:8 | todo | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | -| gen_path_type.rs:5:5:5:11 | $crate | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | -| gen_path_type.rs:5:5:5:11 | panic | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | -| gen_path_type.rs:5:5:5:11 | panicking | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:5:14:5:16 | std | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:5:19:5:29 | collections | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:5:32:5:48 | HashMap::<...> | hasGenericArgList: | yes | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:5:40:5:42 | i32 | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:5:45:5:47 | i32 | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:6:14:6:14 | X | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | +| gen_path_type.rs:6:17:6:20 | Item | hasGenericArgList: | no | hasNameRef: | yes | hasParamList: | no | hasPathType: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTy: | no | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.expected index e69de29bb2d1..7487eb65c84c 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.expected @@ -0,0 +1 @@ +| gen_path_type.rs:5:32:5:48 | HashMap::<...> | gen_path_type.rs:5:39:5:48 | <...> | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected index e6b487851b7c..8778f6b4aefd 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected @@ -15,7 +15,10 @@ | gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | | gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | | gen_path_pat.rs:6:14:6:16 | Bar | gen_path_pat.rs:6:14:6:16 | Bar | -| gen_path_type.rs:5:5:5:8 | todo | gen_path_type.rs:5:5:5:8 | todo | -| gen_path_type.rs:5:5:5:11 | $crate | gen_path_type.rs:5:5:5:11 | $crate | -| gen_path_type.rs:5:5:5:11 | panic | gen_path_type.rs:5:5:5:11 | panic | -| gen_path_type.rs:5:5:5:11 | panicking | gen_path_type.rs:5:5:5:11 | panicking | +| gen_path_type.rs:5:14:5:16 | std | gen_path_type.rs:5:14:5:16 | std | +| gen_path_type.rs:5:19:5:29 | collections | gen_path_type.rs:5:19:5:29 | collections | +| gen_path_type.rs:5:32:5:48 | HashMap::<...> | gen_path_type.rs:5:32:5:38 | HashMap | +| gen_path_type.rs:5:40:5:42 | i32 | gen_path_type.rs:5:40:5:42 | i32 | +| gen_path_type.rs:5:45:5:47 | i32 | gen_path_type.rs:5:45:5:47 | i32 | +| gen_path_type.rs:6:14:6:14 | X | gen_path_type.rs:6:14:6:14 | X | +| gen_path_type.rs:6:17:6:20 | Item | gen_path_type.rs:6:17:6:20 | Item | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected index b63a629ccb10..db25db90b83e 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected @@ -1,2 +1,2 @@ -| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:14:7:14 | | -| gen_path_expr.rs:8:13:8:30 | <...> | gen_path_expr.rs:8:14:8:20 | | +| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:8:13:8:30 | <...> | gen_path_expr.rs:8:14:8:20 | TypeRef | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTy.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTy.expected index b63a629ccb10..db25db90b83e 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTy.expected @@ -1,2 +1,2 @@ -| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:14:7:14 | | -| gen_path_expr.rs:8:13:8:30 | <...> | gen_path_expr.rs:8:14:8:20 | | +| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:8:13:8:30 | <...> | gen_path_expr.rs:8:14:8:20 | TypeRef | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathType.expected b/rust/ql/test/extractor-tests/generated/Path/PathType.expected index 5347001fb413..7d876dc4fa8d 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathType.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathType.expected @@ -1,4 +1,8 @@ -| gen_path_expr.rs:7:14:7:14 | | hasPath: | yes | -| gen_path_expr.rs:7:14:7:14 | | hasPath: | yes | -| gen_path_expr.rs:8:14:8:20 | | hasPath: | yes | -| gen_path_expr.rs:8:14:8:20 | | hasPath: | yes | +| gen_path_expr.rs:7:14:7:14 | T | hasPath: | yes | +| gen_path_expr.rs:7:14:7:14 | T | hasPath: | yes | +| gen_path_expr.rs:8:14:8:20 | TypeRef | hasPath: | yes | +| gen_path_expr.rs:8:14:8:20 | TypeRef | hasPath: | yes | +| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | hasPath: | yes | +| gen_path_type.rs:5:40:5:42 | i32 | hasPath: | yes | +| gen_path_type.rs:5:45:5:47 | i32 | hasPath: | yes | +| gen_path_type.rs:6:14:6:20 | ...::Item | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathType_getPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathType_getPath.expected index 3d98da0c2b84..879ed298b93f 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathType_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathType_getPath.expected @@ -1,4 +1,8 @@ -| gen_path_expr.rs:7:14:7:14 | | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:7:14:7:14 | | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:8:14:8:20 | | gen_path_expr.rs:8:14:8:20 | TypeRef | -| gen_path_expr.rs:8:14:8:20 | | gen_path_expr.rs:8:14:8:20 | TypeRef | +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:8:14:8:20 | TypeRef | gen_path_expr.rs:8:14:8:20 | TypeRef | +| gen_path_expr.rs:8:14:8:20 | TypeRef | gen_path_expr.rs:8:14:8:20 | TypeRef | +| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | +| gen_path_type.rs:5:40:5:42 | i32 | gen_path_type.rs:5:40:5:42 | i32 | +| gen_path_type.rs:5:45:5:47 | i32 | gen_path_type.rs:5:45:5:47 | i32 | +| gen_path_type.rs:6:14:6:20 | ...::Item | gen_path_type.rs:6:14:6:20 | ...::Item | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected index 9b0f05f0727f..99ed98b3f521 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected @@ -17,7 +17,10 @@ | gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | | gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | | gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:14:6:16 | Bar | -| gen_path_type.rs:5:5:5:8 | todo | gen_path_type.rs:5:5:5:8 | todo | -| gen_path_type.rs:5:5:5:11 | $crate | gen_path_type.rs:5:5:5:11 | $crate | -| gen_path_type.rs:5:5:5:11 | ...::panic | gen_path_type.rs:5:5:5:11 | panic | -| gen_path_type.rs:5:5:5:11 | ...::panicking | gen_path_type.rs:5:5:5:11 | panicking | +| gen_path_type.rs:5:14:5:16 | std | gen_path_type.rs:5:14:5:16 | std | +| gen_path_type.rs:5:14:5:29 | ...::collections | gen_path_type.rs:5:19:5:29 | collections | +| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type.rs:5:32:5:48 | HashMap::<...> | +| gen_path_type.rs:5:40:5:42 | i32 | gen_path_type.rs:5:40:5:42 | i32 | +| gen_path_type.rs:5:45:5:47 | i32 | gen_path_type.rs:5:45:5:47 | i32 | +| gen_path_type.rs:6:14:6:14 | X | gen_path_type.rs:6:14:6:14 | X | +| gen_path_type.rs:6:14:6:20 | ...::Item | gen_path_type.rs:6:17:6:20 | Item | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected index 6fb72c5159aa..162efd4b1870 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected @@ -5,5 +5,6 @@ | gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:13:7:15 | <...> | | gen_path_expr.rs:8:13:8:35 | ...::foo | gen_path_expr.rs:8:13:8:30 | <...> | | gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:9:6:11 | Foo | -| gen_path_type.rs:5:5:5:11 | ...::panic | gen_path_type.rs:5:5:5:11 | ...::panicking | -| gen_path_type.rs:5:5:5:11 | ...::panicking | gen_path_type.rs:5:5:5:11 | $crate | +| gen_path_type.rs:5:14:5:29 | ...::collections | gen_path_type.rs:5:14:5:16 | std | +| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type.rs:5:14:5:29 | ...::collections | +| gen_path_type.rs:6:14:6:20 | ...::Item | gen_path_type.rs:6:14:6:14 | X | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected index 9da37a05d71e..df80e22f7446 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected @@ -1,2 +1,2 @@ -| gen_path_type.rs:5:5:5:11 | ...::panic | lang:core | -| gen_path_type.rs:5:5:5:11 | ...::panicking | lang:core | +| gen_path_type.rs:5:14:5:29 | ...::collections | lang:std | +| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | lang:std | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected index 4a7a9a1e2ae3..7d1c698b0ce5 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected @@ -1,2 +1,2 @@ -| gen_path_type.rs:5:5:5:11 | ...::panic | crate::panicking::panic | -| gen_path_type.rs:5:5:5:11 | ...::panicking | crate::panicking | +| gen_path_type.rs:5:14:5:29 | ...::collections | crate::collections | +| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | crate::collections::hash::map::HashMap | diff --git a/rust/ql/test/extractor-tests/generated/Path/gen_path_type.rs b/rust/ql/test/extractor-tests/generated/Path/gen_path_type.rs index e7666e2128a6..62797d756779 100644 --- a/rust/ql/test/extractor-tests/generated/Path/gen_path_type.rs +++ b/rust/ql/test/extractor-tests/generated/Path/gen_path_type.rs @@ -1,6 +1,7 @@ // generated by codegen, do not edit fn test_path_type() -> () { - // A PathType. For example: - todo!() + // A type referring to a path. For example: + type X = std::collections::HashMap; + type Y = X::Item; } diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index d716b3370fbd..a0292876eaba 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1380,9 +1380,10 @@ class _: @qltest.test_with(Path) class _: """ - A PathType. For example: + A type referring to a path. For example: ```rust - todo!() + type X = std::collections::HashMap; + type Y = X::Item; ``` """ From a82d2672233e5199a3097c213b2d8544954e5b50 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 21 Nov 2024 16:03:56 +0100 Subject: [PATCH 19/35] Rust: accept test changes --- .../canonical_path/canonical_paths.expected | 12 +- .../generated/CastExpr/CastExpr.expected | 2 +- .../CastExpr/CastExpr_getExpr.expected | 2 +- .../CastExpr/CastExpr_getTy.expected | 2 +- .../GenericArgList/GenericArgList.expected | 2 +- .../GenericArgList_getGenericArg.expected | 4 +- .../generated/LetStmt/LetStmt_getTy.expected | 4 +- .../MethodCallExpr_getGenericArgList.expected | 2 +- .../OffsetOfExpr/OffsetOfExpr_getTy.expected | 2 +- .../ql/test/extractor-tests/utf8/ast.expected | 2 +- .../controlflow-unstable/Cfg.expected | 24 +-- .../library-tests/controlflow/Cfg.expected | 204 +++++++++--------- .../test/library-tests/variables/Cfg.expected | 28 +-- 13 files changed, 145 insertions(+), 145 deletions(-) diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected index c65eaaff234e..94bcc7379d95 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected @@ -3,13 +3,13 @@ canonicalPaths | canonical_paths.rs:2:5:3:22 | Struct | repo::test | crate::canonical_paths::a::Struct | | canonical_paths.rs:5:5:7:5 | trait Trait | repo::test | crate::canonical_paths::a::Trait | | canonical_paths.rs:6:9:6:20 | fn f | repo::test | crate::canonical_paths::a::Trait::f | -| canonical_paths.rs:9:5:11:5 | impl for { ... } | None | None | +| canonical_paths.rs:9:5:11:5 | impl Trait for Struct { ... } | None | None | | canonical_paths.rs:10:9:10:22 | fn f | repo::test | ::f | -| canonical_paths.rs:13:5:15:5 | impl { ... } | None | None | +| canonical_paths.rs:13:5:15:5 | impl Struct { ... } | None | None | | canonical_paths.rs:14:9:14:22 | fn g | repo::test | ::g | | canonical_paths.rs:17:5:19:5 | trait TraitWithBlanketImpl | repo::test | crate::canonical_paths::a::TraitWithBlanketImpl | | canonical_paths.rs:18:9:18:20 | fn h | repo::test | crate::canonical_paths::a::TraitWithBlanketImpl::h | -| canonical_paths.rs:21:5:23:5 | impl for { ... } | None | None | +| canonical_paths.rs:21:5:23:5 | impl TraitWithBlanketImpl for T { ... } | None | None | | canonical_paths.rs:22:9:22:22 | fn h | repo::test | <_ as crate::canonical_paths::a::TraitWithBlanketImpl>::h | | canonical_paths.rs:25:5:25:16 | fn free | repo::test | crate::canonical_paths::a::free | | canonical_paths.rs:27:5:33:5 | fn usage | repo::test | crate::canonical_paths::a::usage | @@ -19,11 +19,11 @@ canonicalPaths | canonical_paths.rs:40:9:40:27 | Struct | repo::test | {34}::OtherStruct | | canonical_paths.rs:42:9:44:9 | trait OtherTrait | repo::test | {34}::OtherTrait | | canonical_paths.rs:43:13:43:24 | fn g | repo::test | {34}::OtherTrait::g | -| canonical_paths.rs:46:9:48:9 | impl for { ... } | None | None | +| canonical_paths.rs:46:9:48:9 | impl OtherTrait for OtherStruct { ... } | None | None | | canonical_paths.rs:47:13:47:26 | fn g | repo::test | <{34}::OtherStruct as {34}::OtherTrait>::g | -| canonical_paths.rs:50:9:52:9 | impl for <...::Struct> { ... } | None | None | +| canonical_paths.rs:50:9:52:9 | impl OtherTrait for ...::Struct { ... } | None | None | | canonical_paths.rs:51:13:51:26 | fn g | repo::test | ::g | -| canonical_paths.rs:54:9:56:9 | impl <...::Trait> for { ... } | None | None | +| canonical_paths.rs:54:9:56:9 | impl ...::Trait for OtherStruct { ... } | None | None | | canonical_paths.rs:55:13:55:26 | fn f | repo::test | <{34}::OtherStruct as crate::canonical_paths::a::Trait>::f | | canonical_paths.rs:58:9:60:9 | fn nested | repo::test | {34}::nested | | canonical_paths.rs:59:13:59:31 | Struct | repo::test | {35}::OtherStruct | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected index 35cb00b044af..c85e41866313 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | value as | getNumberOfAttrs: | 0 | hasExpr: | yes | hasTy: | yes | +| gen_cast_expr.rs:5:5:5:16 | value as u64 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasTy: | yes | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected index d3bf1efc8b1d..01a710bfb533 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | value as | gen_cast_expr.rs:5:5:5:9 | value | +| gen_cast_expr.rs:5:5:5:16 | value as u64 | gen_cast_expr.rs:5:5:5:9 | value | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected index 4e7fdb1e25c9..87c07babb021 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTy.expected @@ -1 +1 @@ -| gen_cast_expr.rs:5:5:5:16 | value as | gen_cast_expr.rs:5:14:5:16 | | +| gen_cast_expr.rs:5:5:5:16 | value as u64 | gen_cast_expr.rs:5:14:5:16 | u64 | diff --git a/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.expected b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.expected index 370ee8ce4d66..d2a5b7bcd8f0 100644 --- a/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.expected +++ b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.expected @@ -1 +1 @@ -| gen_generic_arg_list.rs:5:10:5:21 | GenericArgList | getNumberOfGenericArgs: | 2 | +| gen_generic_arg_list.rs:5:10:5:21 | <...> | getNumberOfGenericArgs: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.expected b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.expected index b72d3035ed14..69e416a57ad7 100644 --- a/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.expected +++ b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.expected @@ -1,2 +1,2 @@ -| gen_generic_arg_list.rs:5:10:5:21 | GenericArgList | 0 | gen_generic_arg_list.rs:5:13:5:15 | TypeArg | -| gen_generic_arg_list.rs:5:10:5:21 | GenericArgList | 1 | gen_generic_arg_list.rs:5:18:5:20 | TypeArg | +| gen_generic_arg_list.rs:5:10:5:21 | <...> | 0 | gen_generic_arg_list.rs:5:13:5:15 | TypeArg | +| gen_generic_arg_list.rs:5:10:5:21 | <...> | 1 | gen_generic_arg_list.rs:5:18:5:20 | TypeArg | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected index b917fcb8c7c3..489647f4793a 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTy.expected @@ -1,2 +1,2 @@ -| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:12:6:14 | | -| gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:12:7:14 | | +| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:12:6:14 | i32 | +| gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:12:7:14 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.expected index 8b2622f09abe..dd1ed8c03041 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.expected +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.expected @@ -1 +1 @@ -| gen_method_call_expr.rs:6:5:6:25 | ... .foo(...) | gen_method_call_expr.rs:6:10:6:21 | GenericArgList | +| gen_method_call_expr.rs:6:5:6:25 | ... .foo(...) | gen_method_call_expr.rs:6:10:6:21 | <...> | diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected index f6ab8a92afff..e2e11abb6a0f 100644 --- a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.expected @@ -1 +1 @@ -| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | gen_offset_of_expr.rs:5:25:5:30 | | +| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | gen_offset_of_expr.rs:5:25:5:30 | Struct | diff --git a/rust/ql/test/extractor-tests/utf8/ast.expected b/rust/ql/test/extractor-tests/utf8/ast.expected index e1d0418c206f..560f834766e3 100644 --- a/rust/ql/test/extractor-tests/utf8/ast.expected +++ b/rust/ql/test/extractor-tests/utf8/ast.expected @@ -17,7 +17,7 @@ | utf8_identifiers.rs:6:10:8:1 | RecordFieldList | | utf8_identifiers.rs:7:5:7:5 | \u03b4 | | utf8_identifiers.rs:7:5:7:13 | RecordField | -| utf8_identifiers.rs:7:9:7:13 | | +| utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | | utf8_identifiers.rs:7:9:7:13 | usize | diff --git a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected index bdc9d30f09c2..4260e2384c8f 100644 --- a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected @@ -1,12 +1,12 @@ edges | test.rs:5:5:11:5 | enter fn test_and_if_let | test.rs:5:24:5:24 | a | | | test.rs:5:5:11:5 | exit fn test_and_if_let (normal) | test.rs:5:5:11:5 | exit fn test_and_if_let | | -| test.rs:5:24:5:24 | a | test.rs:5:24:5:30 | ...: | match | -| test.rs:5:24:5:30 | ...: | test.rs:5:33:5:33 | b | | -| test.rs:5:33:5:33 | b | test.rs:5:33:5:47 | ...: > | match | -| test.rs:5:33:5:47 | ...: > | test.rs:5:50:5:50 | c | | -| test.rs:5:50:5:50 | c | test.rs:5:50:5:56 | ...: | match | -| test.rs:5:50:5:56 | ...: | test.rs:6:12:6:12 | a | | +| test.rs:5:24:5:24 | a | test.rs:5:24:5:30 | ...: bool | match | +| test.rs:5:24:5:30 | ...: bool | test.rs:5:33:5:33 | b | | +| test.rs:5:33:5:33 | b | test.rs:5:33:5:47 | ...: Option::<...> | match | +| test.rs:5:33:5:47 | ...: Option::<...> | test.rs:5:50:5:50 | c | | +| test.rs:5:50:5:50 | c | test.rs:5:50:5:56 | ...: bool | match | +| test.rs:5:50:5:56 | ...: bool | test.rs:6:12:6:12 | a | | | test.rs:5:67:11:5 | { ... } | test.rs:5:5:11:5 | exit fn test_and_if_let (normal) | | | test.rs:6:9:10:9 | if ... {...} else {...} | test.rs:5:67:11:5 | { ... } | | | test.rs:6:12:6:12 | a | test.rs:6:12:6:31 | [boolean(false)] ... && ... | false | @@ -24,12 +24,12 @@ edges | test.rs:9:13:9:17 | false | test.rs:8:16:10:9 | { ... } | | | test.rs:13:5:21:5 | enter fn test_and_if_let2 | test.rs:13:25:13:25 | a | | | test.rs:13:5:21:5 | exit fn test_and_if_let2 (normal) | test.rs:13:5:21:5 | exit fn test_and_if_let2 | | -| test.rs:13:25:13:25 | a | test.rs:13:25:13:31 | ...: | match | -| test.rs:13:25:13:31 | ...: | test.rs:13:34:13:34 | b | | -| test.rs:13:34:13:34 | b | test.rs:13:34:13:39 | ...: | match | -| test.rs:13:34:13:39 | ...: | test.rs:13:42:13:42 | c | | -| test.rs:13:42:13:42 | c | test.rs:13:42:13:48 | ...: | match | -| test.rs:13:42:13:48 | ...: | test.rs:14:12:14:12 | a | | +| test.rs:13:25:13:25 | a | test.rs:13:25:13:31 | ...: bool | match | +| test.rs:13:25:13:31 | ...: bool | test.rs:13:34:13:34 | b | | +| test.rs:13:34:13:34 | b | test.rs:13:34:13:39 | ...: i64 | match | +| test.rs:13:34:13:39 | ...: i64 | test.rs:13:42:13:42 | c | | +| test.rs:13:42:13:42 | c | test.rs:13:42:13:48 | ...: bool | match | +| test.rs:13:42:13:48 | ...: bool | test.rs:14:12:14:12 | a | | | test.rs:13:59:21:5 | { ... } | test.rs:13:5:21:5 | exit fn test_and_if_let2 (normal) | | | test.rs:14:9:20:9 | if ... {...} else {...} | test.rs:13:59:21:5 | { ... } | | | test.rs:14:12:14:12 | a | test.rs:14:12:14:25 | [boolean(false)] ... && ... | false | diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 7045c8c3f8b2..5137e2f8b89c 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -25,8 +25,8 @@ edges | test.rs:12:24:12:26 | "a" | test.rs:12:9:12:27 | ... .insert(...) | | | test.rs:18:5:24:5 | enter fn next | test.rs:18:13:18:13 | n | | | test.rs:18:5:24:5 | exit fn next (normal) | test.rs:18:5:24:5 | exit fn next | | -| test.rs:18:13:18:13 | n | test.rs:18:13:18:18 | ...: | match | -| test.rs:18:13:18:18 | ...: | test.rs:19:12:19:12 | n | | +| test.rs:18:13:18:13 | n | test.rs:18:13:18:18 | ...: i64 | match | +| test.rs:18:13:18:18 | ...: i64 | test.rs:19:12:19:12 | n | | | test.rs:18:28:24:5 | { ... } | test.rs:18:5:24:5 | exit fn next (normal) | | | test.rs:19:9:23:9 | if ... {...} else {...} | test.rs:18:28:24:5 | { ... } | | | test.rs:19:12:19:12 | n | test.rs:19:16:19:16 | 2 | | @@ -47,8 +47,8 @@ edges | test.rs:22:21:22:21 | 1 | test.rs:22:13:22:21 | ... + ... | | | test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:26:32:26:32 | n | | | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:26:5:42:5 | exit fn test_break_and_continue | | -| test.rs:26:32:26:32 | n | test.rs:26:32:26:37 | ...: | match | -| test.rs:26:32:26:37 | ...: | test.rs:27:9:27:22 | let ... = n | | +| test.rs:26:32:26:32 | n | test.rs:26:32:26:37 | ...: i64 | match | +| test.rs:26:32:26:37 | ...: i64 | test.rs:27:9:27:22 | let ... = n | | | test.rs:27:9:27:22 | let ... = n | test.rs:27:21:27:21 | n | | | test.rs:27:13:27:17 | i | test.rs:28:9:40:9 | ExprStmt | match | | test.rs:27:21:27:21 | n | test.rs:27:13:27:17 | i | | @@ -98,8 +98,8 @@ edges | test.rs:41:16:41:19 | true | test.rs:41:9:41:19 | return true | | | test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:44:31:44:31 | b | | | test.rs:44:5:56:5 | exit fn test_break_with_labels (normal) | test.rs:44:5:56:5 | exit fn test_break_with_labels | | -| test.rs:44:31:44:31 | b | test.rs:44:31:44:37 | ...: | match | -| test.rs:44:31:44:37 | ...: | test.rs:45:9:54:9 | ExprStmt | | +| test.rs:44:31:44:31 | b | test.rs:44:31:44:37 | ...: bool | match | +| test.rs:44:31:44:37 | ...: bool | test.rs:45:9:54:9 | ExprStmt | | | test.rs:44:48:56:5 | { ... } | test.rs:44:5:56:5 | exit fn test_break_with_labels (normal) | | | test.rs:45:9:54:9 | 'outer: loop { ... } | test.rs:55:9:55:12 | true | | | test.rs:45:9:54:9 | ExprStmt | test.rs:47:17:51:17 | ExprStmt | | @@ -120,8 +120,8 @@ edges | test.rs:52:17:52:29 | ExprStmt | test.rs:52:17:52:28 | break ''inner | | | test.rs:55:9:55:12 | true | test.rs:44:48:56:5 | { ... } | | | test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:58:34:58:34 | b | | -| test.rs:58:34:58:34 | b | test.rs:58:34:58:40 | ...: | match | -| test.rs:58:34:58:40 | ...: | test.rs:60:13:60:14 | ExprStmt | | +| test.rs:58:34:58:34 | b | test.rs:58:34:58:40 | ...: bool | match | +| test.rs:58:34:58:40 | ...: bool | test.rs:60:13:60:14 | ExprStmt | | | test.rs:60:13:60:13 | 1 | test.rs:62:17:66:17 | ExprStmt | | | test.rs:60:13:60:14 | ExprStmt | test.rs:60:13:60:13 | 1 | | | test.rs:62:17:66:17 | ExprStmt | test.rs:62:20:62:20 | b | | @@ -138,8 +138,8 @@ edges | test.rs:67:17:67:31 | continue 'inner | test.rs:62:17:66:17 | ExprStmt | continue | | test.rs:67:17:67:32 | ExprStmt | test.rs:67:17:67:31 | continue 'inner | | | test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | test.rs:72:34:72:34 | b | | -| test.rs:72:34:72:34 | b | test.rs:72:34:72:40 | ...: | match | -| test.rs:72:34:72:40 | ...: | test.rs:74:13:74:14 | ExprStmt | | +| test.rs:72:34:72:34 | b | test.rs:72:34:72:40 | ...: bool | match | +| test.rs:72:34:72:40 | ...: bool | test.rs:74:13:74:14 | ExprStmt | | | test.rs:74:13:74:13 | 1 | test.rs:76:17:80:17 | ExprStmt | | | test.rs:74:13:74:14 | ExprStmt | test.rs:74:13:74:13 | 1 | | | test.rs:76:17:80:17 | ExprStmt | test.rs:76:20:76:20 | b | | @@ -157,8 +157,8 @@ edges | test.rs:81:17:81:32 | ExprStmt | test.rs:81:17:81:31 | continue 'label | | | test.rs:86:5:95:5 | enter fn test_while | test.rs:86:19:86:19 | i | | | test.rs:86:5:95:5 | exit fn test_while (normal) | test.rs:86:5:95:5 | exit fn test_while | | -| test.rs:86:19:86:19 | i | test.rs:86:19:86:24 | ...: | match | -| test.rs:86:19:86:24 | ...: | test.rs:87:9:87:25 | let ... = true | | +| test.rs:86:19:86:19 | i | test.rs:86:19:86:24 | ...: i64 | match | +| test.rs:86:19:86:24 | ...: i64 | test.rs:87:9:87:25 | let ... = true | | | test.rs:86:27:95:5 | { ... } | test.rs:86:5:95:5 | exit fn test_while (normal) | | | test.rs:87:9:87:25 | let ... = true | test.rs:87:21:87:24 | true | | | test.rs:87:13:87:17 | b | test.rs:88:15:88:15 | b | match | @@ -206,8 +206,8 @@ edges | test.rs:101:17:101:22 | ExprStmt | test.rs:101:17:101:21 | break | | | test.rs:106:5:113:5 | enter fn test_for | test.rs:106:17:106:17 | j | | | test.rs:106:5:113:5 | exit fn test_for (normal) | test.rs:106:5:113:5 | exit fn test_for | | -| test.rs:106:17:106:17 | j | test.rs:106:17:106:22 | ...: | match | -| test.rs:106:17:106:22 | ...: | test.rs:107:18:107:18 | 0 | | +| test.rs:106:17:106:17 | j | test.rs:106:17:106:22 | ...: i64 | match | +| test.rs:106:17:106:22 | ...: i64 | test.rs:107:18:107:18 | 0 | | | test.rs:106:25:113:5 | { ... } | test.rs:106:5:113:5 | exit fn test_for (normal) | | | test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:106:25:113:5 | { ... } | | | test.rs:107:13:107:13 | i | test.rs:107:9:112:9 | for ... in ... { ... } | no-match | @@ -233,8 +233,8 @@ edges | test.rs:117:26:117:26 | 1 | test.rs:117:19:117:26 | return 1 | | | test.rs:122:1:125:1 | enter fn test_nested_function | test.rs:122:25:122:25 | n | | | test.rs:122:1:125:1 | exit fn test_nested_function (normal) | test.rs:122:1:125:1 | exit fn test_nested_function | | -| test.rs:122:25:122:25 | n | test.rs:122:25:122:30 | ...: | match | -| test.rs:122:25:122:30 | ...: | test.rs:123:5:123:28 | let ... = ... | | +| test.rs:122:25:122:25 | n | test.rs:122:25:122:30 | ...: i64 | match | +| test.rs:122:25:122:30 | ...: i64 | test.rs:123:5:123:28 | let ... = ... | | | test.rs:122:40:125:1 | { ... } | test.rs:122:1:125:1 | exit fn test_nested_function (normal) | | | test.rs:123:5:123:28 | let ... = ... | test.rs:123:19:123:27 | \|...\| ... | | | test.rs:123:9:123:15 | add_one | test.rs:124:5:124:11 | add_one | match | @@ -253,8 +253,8 @@ edges | test.rs:124:21:124:21 | n | test.rs:124:13:124:22 | add_one(...) | | | test.rs:129:5:135:5 | enter fn test_if_else | test.rs:129:21:129:21 | n | | | test.rs:129:5:135:5 | exit fn test_if_else (normal) | test.rs:129:5:135:5 | exit fn test_if_else | | -| test.rs:129:21:129:21 | n | test.rs:129:21:129:26 | ...: | match | -| test.rs:129:21:129:26 | ...: | test.rs:130:12:130:12 | n | | +| test.rs:129:21:129:21 | n | test.rs:129:21:129:26 | ...: i64 | match | +| test.rs:129:21:129:26 | ...: i64 | test.rs:130:12:130:12 | n | | | test.rs:129:36:135:5 | { ... } | test.rs:129:5:135:5 | exit fn test_if_else (normal) | | | test.rs:130:9:134:9 | if ... {...} else {...} | test.rs:129:36:135:5 | { ... } | | | test.rs:130:12:130:12 | n | test.rs:130:17:130:17 | 0 | | @@ -269,8 +269,8 @@ edges | test.rs:133:17:133:17 | 1 | test.rs:133:13:133:17 | ... - ... | | | test.rs:137:5:143:5 | enter fn test_if_let_else | test.rs:137:25:137:25 | a | | | test.rs:137:5:143:5 | exit fn test_if_let_else (normal) | test.rs:137:5:143:5 | exit fn test_if_let_else | | -| test.rs:137:25:137:25 | a | test.rs:137:25:137:38 | ...: > | match | -| test.rs:137:25:137:38 | ...: > | test.rs:138:12:138:26 | let ... = a | | +| test.rs:137:25:137:25 | a | test.rs:137:25:137:38 | ...: Option::<...> | match | +| test.rs:137:25:137:38 | ...: Option::<...> | test.rs:138:12:138:26 | let ... = a | | | test.rs:137:48:143:5 | { ... } | test.rs:137:5:143:5 | exit fn test_if_let_else (normal) | | | test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:137:48:143:5 | { ... } | | | test.rs:138:12:138:26 | let ... = a | test.rs:138:26:138:26 | a | | @@ -284,8 +284,8 @@ edges | test.rs:141:13:141:13 | 0 | test.rs:140:16:142:9 | { ... } | | | test.rs:145:5:150:5 | enter fn test_if_let | test.rs:145:20:145:20 | a | | | test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:145:5:150:5 | exit fn test_if_let | | -| test.rs:145:20:145:20 | a | test.rs:145:20:145:33 | ...: > | match | -| test.rs:145:20:145:33 | ...: > | test.rs:146:9:148:9 | ExprStmt | | +| test.rs:145:20:145:20 | a | test.rs:145:20:145:33 | ...: Option::<...> | match | +| test.rs:145:20:145:33 | ...: Option::<...> | test.rs:146:9:148:9 | ExprStmt | | | test.rs:145:43:150:5 | { ... } | test.rs:145:5:150:5 | exit fn test_if_let (normal) | | | test.rs:146:9:148:9 | ExprStmt | test.rs:146:12:146:26 | let ... = a | | | test.rs:146:9:148:9 | if ... {...} | test.rs:149:9:149:9 | 0 | | @@ -300,8 +300,8 @@ edges | test.rs:149:9:149:9 | 0 | test.rs:145:43:150:5 | { ... } | | | test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:152:23:152:23 | a | | | test.rs:152:5:158:5 | exit fn test_nested_if (normal) | test.rs:152:5:158:5 | exit fn test_nested_if | | -| test.rs:152:23:152:23 | a | test.rs:152:23:152:28 | ...: | match | -| test.rs:152:23:152:28 | ...: | test.rs:153:16:153:16 | a | | +| test.rs:152:23:152:23 | a | test.rs:152:23:152:28 | ...: i64 | match | +| test.rs:152:23:152:28 | ...: i64 | test.rs:153:16:153:16 | a | | | test.rs:152:38:158:5 | { ... } | test.rs:152:5:158:5 | exit fn test_nested_if (normal) | | | test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:152:38:158:5 | { ... } | | | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:156:13:156:13 | 0 | false | @@ -329,8 +329,8 @@ edges | test.rs:156:13:156:13 | 0 | test.rs:155:16:157:9 | { ... } | | | test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:160:29:160:29 | a | | | test.rs:160:5:169:5 | exit fn test_nested_if_match (normal) | test.rs:160:5:169:5 | exit fn test_nested_if_match | | -| test.rs:160:29:160:29 | a | test.rs:160:29:160:34 | ...: | match | -| test.rs:160:29:160:34 | ...: | test.rs:161:19:161:19 | a | | +| test.rs:160:29:160:29 | a | test.rs:160:29:160:34 | ...: i64 | match | +| test.rs:160:29:160:34 | ...: i64 | test.rs:161:19:161:19 | a | | | test.rs:160:44:169:5 | { ... } | test.rs:160:5:169:5 | exit fn test_nested_if_match (normal) | | | test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:160:44:169:5 | { ... } | | | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | test.rs:167:13:167:13 | 0 | false | @@ -348,8 +348,8 @@ edges | test.rs:167:13:167:13 | 0 | test.rs:166:16:168:9 | { ... } | | | test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:171:29:171:29 | a | | | test.rs:171:5:180:5 | exit fn test_nested_if_block (normal) | test.rs:171:5:180:5 | exit fn test_nested_if_block | | -| test.rs:171:29:171:29 | a | test.rs:171:29:171:34 | ...: | match | -| test.rs:171:29:171:34 | ...: | test.rs:173:13:173:15 | ExprStmt | | +| test.rs:171:29:171:29 | a | test.rs:171:29:171:34 | ...: i64 | match | +| test.rs:171:29:171:34 | ...: i64 | test.rs:173:13:173:15 | ExprStmt | | | test.rs:171:44:180:5 | { ... } | test.rs:171:5:180:5 | exit fn test_nested_if_block (normal) | | | test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:171:44:180:5 | { ... } | | | test.rs:172:12:175:9 | [boolean(false)] { ... } | test.rs:178:13:178:13 | 0 | false | @@ -366,8 +366,8 @@ edges | test.rs:178:13:178:13 | 0 | test.rs:177:16:179:9 | { ... } | | | test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:182:27:182:27 | a | | | test.rs:182:5:192:5 | exit fn test_if_assignment (normal) | test.rs:182:5:192:5 | exit fn test_if_assignment | | -| test.rs:182:27:182:27 | a | test.rs:182:27:182:32 | ...: | match | -| test.rs:182:27:182:32 | ...: | test.rs:183:9:183:26 | let ... = false | | +| test.rs:182:27:182:27 | a | test.rs:182:27:182:32 | ...: i64 | match | +| test.rs:182:27:182:32 | ...: i64 | test.rs:183:9:183:26 | let ... = false | | | test.rs:182:42:192:5 | { ... } | test.rs:182:5:192:5 | exit fn test_if_assignment (normal) | | | test.rs:183:9:183:26 | let ... = false | test.rs:183:21:183:25 | false | | | test.rs:183:13:183:17 | x | test.rs:185:13:185:21 | ExprStmt | match | @@ -387,8 +387,8 @@ edges | test.rs:190:13:190:13 | 0 | test.rs:189:16:191:9 | { ... } | | | test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:194:22:194:22 | a | | | test.rs:194:5:205:5 | exit fn test_if_loop1 (normal) | test.rs:194:5:205:5 | exit fn test_if_loop1 | | -| test.rs:194:22:194:22 | a | test.rs:194:22:194:27 | ...: | match | -| test.rs:194:22:194:27 | ...: | test.rs:196:13:198:14 | ExprStmt | | +| test.rs:194:22:194:22 | a | test.rs:194:22:194:27 | ...: i64 | match | +| test.rs:194:22:194:27 | ...: i64 | test.rs:196:13:198:14 | ExprStmt | | | test.rs:194:37:205:5 | { ... } | test.rs:194:5:205:5 | exit fn test_if_loop1 (normal) | | | test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:194:37:205:5 | { ... } | | | test.rs:195:13:200:9 | [boolean(false)] loop { ... } | test.rs:203:13:203:13 | 0 | false | @@ -417,8 +417,8 @@ edges | test.rs:203:13:203:13 | 0 | test.rs:202:16:204:9 | { ... } | | | test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:207:22:207:22 | a | | | test.rs:207:5:218:5 | exit fn test_if_loop2 (normal) | test.rs:207:5:218:5 | exit fn test_if_loop2 | | -| test.rs:207:22:207:22 | a | test.rs:207:22:207:27 | ...: | match | -| test.rs:207:22:207:27 | ...: | test.rs:209:13:211:14 | ExprStmt | | +| test.rs:207:22:207:22 | a | test.rs:207:22:207:27 | ...: i64 | match | +| test.rs:207:22:207:27 | ...: i64 | test.rs:209:13:211:14 | ExprStmt | | | test.rs:207:37:218:5 | { ... } | test.rs:207:5:218:5 | exit fn test_if_loop2 (normal) | | | test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:207:37:218:5 | { ... } | | | test.rs:208:13:213:9 | [boolean(false)] 'label: loop { ... } | test.rs:216:13:216:13 | 0 | false | @@ -447,8 +447,8 @@ edges | test.rs:216:13:216:13 | 0 | test.rs:215:16:217:9 | { ... } | | | test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:220:28:220:28 | a | | | test.rs:220:5:228:5 | exit fn test_labelled_block (normal) | test.rs:220:5:228:5 | exit fn test_labelled_block | | -| test.rs:220:28:220:28 | a | test.rs:220:28:220:33 | ...: | match | -| test.rs:220:28:220:33 | ...: | test.rs:222:13:222:31 | ExprStmt | | +| test.rs:220:28:220:28 | a | test.rs:220:28:220:33 | ...: i64 | match | +| test.rs:220:28:220:33 | ...: i64 | test.rs:222:13:222:31 | ExprStmt | | | test.rs:220:43:228:5 | { ... } | test.rs:220:5:228:5 | exit fn test_labelled_block (normal) | | | test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:220:43:228:5 | { ... } | | | test.rs:221:13:223:9 | [boolean(false)] 'block: { ... } | test.rs:226:13:226:13 | 0 | false | @@ -466,12 +466,12 @@ edges | test.rs:226:13:226:13 | 0 | test.rs:225:16:227:9 | { ... } | | | test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:233:30:233:30 | a | | | test.rs:233:5:236:5 | exit fn test_and_operator (normal) | test.rs:233:5:236:5 | exit fn test_and_operator | | -| test.rs:233:30:233:30 | a | test.rs:233:30:233:36 | ...: | match | -| test.rs:233:30:233:36 | ...: | test.rs:233:39:233:39 | b | | -| test.rs:233:39:233:39 | b | test.rs:233:39:233:45 | ...: | match | -| test.rs:233:39:233:45 | ...: | test.rs:233:48:233:48 | c | | -| test.rs:233:48:233:48 | c | test.rs:233:48:233:54 | ...: | match | -| test.rs:233:48:233:54 | ...: | test.rs:234:9:234:28 | let ... = ... | | +| test.rs:233:30:233:30 | a | test.rs:233:30:233:36 | ...: bool | match | +| test.rs:233:30:233:36 | ...: bool | test.rs:233:39:233:39 | b | | +| test.rs:233:39:233:39 | b | test.rs:233:39:233:45 | ...: bool | match | +| test.rs:233:39:233:45 | ...: bool | test.rs:233:48:233:48 | c | | +| test.rs:233:48:233:48 | c | test.rs:233:48:233:54 | ...: bool | match | +| test.rs:233:48:233:54 | ...: bool | test.rs:234:9:234:28 | let ... = ... | | | test.rs:233:65:236:5 | { ... } | test.rs:233:5:236:5 | exit fn test_and_operator (normal) | | | test.rs:234:9:234:28 | let ... = ... | test.rs:234:17:234:17 | a | | | test.rs:234:13:234:13 | d | test.rs:235:9:235:9 | d | match | @@ -486,12 +486,12 @@ edges | test.rs:235:9:235:9 | d | test.rs:233:65:236:5 | { ... } | | | test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:238:25:238:25 | a | | | test.rs:238:5:241:5 | exit fn test_or_operator (normal) | test.rs:238:5:241:5 | exit fn test_or_operator | | -| test.rs:238:25:238:25 | a | test.rs:238:25:238:31 | ...: | match | -| test.rs:238:25:238:31 | ...: | test.rs:238:34:238:34 | b | | -| test.rs:238:34:238:34 | b | test.rs:238:34:238:40 | ...: | match | -| test.rs:238:34:238:40 | ...: | test.rs:238:43:238:43 | c | | -| test.rs:238:43:238:43 | c | test.rs:238:43:238:49 | ...: | match | -| test.rs:238:43:238:49 | ...: | test.rs:239:9:239:28 | let ... = ... | | +| test.rs:238:25:238:25 | a | test.rs:238:25:238:31 | ...: bool | match | +| test.rs:238:25:238:31 | ...: bool | test.rs:238:34:238:34 | b | | +| test.rs:238:34:238:34 | b | test.rs:238:34:238:40 | ...: bool | match | +| test.rs:238:34:238:40 | ...: bool | test.rs:238:43:238:43 | c | | +| test.rs:238:43:238:43 | c | test.rs:238:43:238:49 | ...: bool | match | +| test.rs:238:43:238:49 | ...: bool | test.rs:239:9:239:28 | let ... = ... | | | test.rs:238:60:241:5 | { ... } | test.rs:238:5:241:5 | exit fn test_or_operator (normal) | | | test.rs:239:9:239:28 | let ... = ... | test.rs:239:17:239:17 | a | | | test.rs:239:13:239:13 | d | test.rs:240:9:240:9 | d | match | @@ -506,12 +506,12 @@ edges | test.rs:240:9:240:9 | d | test.rs:238:60:241:5 | { ... } | | | test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:243:27:243:27 | a | | | test.rs:243:5:246:5 | exit fn test_or_operator_2 (normal) | test.rs:243:5:246:5 | exit fn test_or_operator_2 | | -| test.rs:243:27:243:27 | a | test.rs:243:27:243:33 | ...: | match | -| test.rs:243:27:243:33 | ...: | test.rs:243:36:243:36 | b | | -| test.rs:243:36:243:36 | b | test.rs:243:36:243:41 | ...: | match | -| test.rs:243:36:243:41 | ...: | test.rs:243:44:243:44 | c | | -| test.rs:243:44:243:44 | c | test.rs:243:44:243:50 | ...: | match | -| test.rs:243:44:243:50 | ...: | test.rs:244:9:244:36 | let ... = ... | | +| test.rs:243:27:243:27 | a | test.rs:243:27:243:33 | ...: bool | match | +| test.rs:243:27:243:33 | ...: bool | test.rs:243:36:243:36 | b | | +| test.rs:243:36:243:36 | b | test.rs:243:36:243:41 | ...: i64 | match | +| test.rs:243:36:243:41 | ...: i64 | test.rs:243:44:243:44 | c | | +| test.rs:243:44:243:44 | c | test.rs:243:44:243:50 | ...: bool | match | +| test.rs:243:44:243:50 | ...: bool | test.rs:244:9:244:36 | let ... = ... | | | test.rs:243:61:246:5 | { ... } | test.rs:243:5:246:5 | exit fn test_or_operator_2 (normal) | | | test.rs:244:9:244:36 | let ... = ... | test.rs:244:17:244:17 | a | | | test.rs:244:13:244:13 | d | test.rs:245:9:245:9 | d | match | @@ -528,8 +528,8 @@ edges | test.rs:245:9:245:9 | d | test.rs:243:61:246:5 | { ... } | | | test.rs:248:5:251:5 | enter fn test_not_operator | test.rs:248:26:248:26 | a | | | test.rs:248:5:251:5 | exit fn test_not_operator (normal) | test.rs:248:5:251:5 | exit fn test_not_operator | | -| test.rs:248:26:248:26 | a | test.rs:248:26:248:32 | ...: | match | -| test.rs:248:26:248:32 | ...: | test.rs:249:9:249:19 | let ... = ... | | +| test.rs:248:26:248:26 | a | test.rs:248:26:248:32 | ...: bool | match | +| test.rs:248:26:248:32 | ...: bool | test.rs:249:9:249:19 | let ... = ... | | | test.rs:248:43:251:5 | { ... } | test.rs:248:5:251:5 | exit fn test_not_operator (normal) | | | test.rs:249:9:249:19 | let ... = ... | test.rs:249:18:249:18 | a | | | test.rs:249:13:249:13 | d | test.rs:250:9:250:9 | d | match | @@ -538,12 +538,12 @@ edges | test.rs:250:9:250:9 | d | test.rs:248:43:251:5 | { ... } | | | test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:253:29:253:29 | a | | | test.rs:253:5:259:5 | exit fn test_if_and_operator (normal) | test.rs:253:5:259:5 | exit fn test_if_and_operator | | -| test.rs:253:29:253:29 | a | test.rs:253:29:253:35 | ...: | match | -| test.rs:253:29:253:35 | ...: | test.rs:253:38:253:38 | b | | -| test.rs:253:38:253:38 | b | test.rs:253:38:253:44 | ...: | match | -| test.rs:253:38:253:44 | ...: | test.rs:253:47:253:47 | c | | -| test.rs:253:47:253:47 | c | test.rs:253:47:253:53 | ...: | match | -| test.rs:253:47:253:53 | ...: | test.rs:254:12:254:12 | a | | +| test.rs:253:29:253:29 | a | test.rs:253:29:253:35 | ...: bool | match | +| test.rs:253:29:253:35 | ...: bool | test.rs:253:38:253:38 | b | | +| test.rs:253:38:253:38 | b | test.rs:253:38:253:44 | ...: bool | match | +| test.rs:253:38:253:44 | ...: bool | test.rs:253:47:253:47 | c | | +| test.rs:253:47:253:47 | c | test.rs:253:47:253:53 | ...: bool | match | +| test.rs:253:47:253:53 | ...: bool | test.rs:254:12:254:12 | a | | | test.rs:253:64:259:5 | { ... } | test.rs:253:5:259:5 | exit fn test_if_and_operator (normal) | | | test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:253:64:259:5 | { ... } | | | test.rs:254:12:254:12 | a | test.rs:254:12:254:17 | [boolean(false)] ... && ... | false | @@ -562,12 +562,12 @@ edges | test.rs:257:13:257:17 | false | test.rs:256:16:258:9 | { ... } | | | test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:261:28:261:28 | a | | | test.rs:261:5:267:5 | exit fn test_if_or_operator (normal) | test.rs:261:5:267:5 | exit fn test_if_or_operator | | -| test.rs:261:28:261:28 | a | test.rs:261:28:261:34 | ...: | match | -| test.rs:261:28:261:34 | ...: | test.rs:261:37:261:37 | b | | -| test.rs:261:37:261:37 | b | test.rs:261:37:261:43 | ...: | match | -| test.rs:261:37:261:43 | ...: | test.rs:261:46:261:46 | c | | -| test.rs:261:46:261:46 | c | test.rs:261:46:261:52 | ...: | match | -| test.rs:261:46:261:52 | ...: | test.rs:262:12:262:12 | a | | +| test.rs:261:28:261:28 | a | test.rs:261:28:261:34 | ...: bool | match | +| test.rs:261:28:261:34 | ...: bool | test.rs:261:37:261:37 | b | | +| test.rs:261:37:261:37 | b | test.rs:261:37:261:43 | ...: bool | match | +| test.rs:261:37:261:43 | ...: bool | test.rs:261:46:261:46 | c | | +| test.rs:261:46:261:46 | c | test.rs:261:46:261:52 | ...: bool | match | +| test.rs:261:46:261:52 | ...: bool | test.rs:262:12:262:12 | a | | | test.rs:261:63:267:5 | { ... } | test.rs:261:5:267:5 | exit fn test_if_or_operator (normal) | | | test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:261:63:267:5 | { ... } | | | test.rs:262:12:262:12 | a | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | true | @@ -586,8 +586,8 @@ edges | test.rs:265:13:265:17 | false | test.rs:264:16:266:9 | { ... } | | | test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:269:29:269:29 | a | | | test.rs:269:5:275:5 | exit fn test_if_not_operator (normal) | test.rs:269:5:275:5 | exit fn test_if_not_operator | | -| test.rs:269:29:269:29 | a | test.rs:269:29:269:35 | ...: | match | -| test.rs:269:29:269:35 | ...: | test.rs:270:13:270:13 | a | | +| test.rs:269:29:269:29 | a | test.rs:269:29:269:35 | ...: bool | match | +| test.rs:269:29:269:35 | ...: bool | test.rs:270:13:270:13 | a | | | test.rs:269:46:275:5 | { ... } | test.rs:269:5:275:5 | exit fn test_if_not_operator (normal) | | | test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:269:46:275:5 | { ... } | | | test.rs:270:12:270:13 | [boolean(false)] ! ... | test.rs:273:13:273:17 | false | false | @@ -600,8 +600,8 @@ edges | test.rs:273:13:273:17 | false | test.rs:272:16:274:9 | { ... } | | | test.rs:277:5:279:5 | enter fn test_and_return | test.rs:277:24:277:24 | a | | | test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:277:5:279:5 | exit fn test_and_return | | -| test.rs:277:24:277:24 | a | test.rs:277:24:277:30 | ...: | match | -| test.rs:277:24:277:30 | ...: | test.rs:278:9:278:20 | ExprStmt | | +| test.rs:277:24:277:24 | a | test.rs:277:24:277:30 | ...: bool | match | +| test.rs:277:24:277:30 | ...: bool | test.rs:278:9:278:20 | ExprStmt | | | test.rs:277:33:279:5 | { ... } | test.rs:277:5:279:5 | exit fn test_and_return (normal) | | | test.rs:278:9:278:9 | a | test.rs:278:9:278:19 | ... && ... | false | | test.rs:278:9:278:9 | a | test.rs:278:14:278:19 | return | true | @@ -610,8 +610,8 @@ edges | test.rs:278:14:278:19 | return | test.rs:277:5:279:5 | exit fn test_and_return (normal) | return | | test.rs:281:5:286:5 | enter fn test_and_true | test.rs:281:22:281:22 | a | | | test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:281:5:286:5 | exit fn test_and_true | | -| test.rs:281:22:281:22 | a | test.rs:281:22:281:28 | ...: | match | -| test.rs:281:22:281:28 | ...: | test.rs:282:9:284:9 | ExprStmt | | +| test.rs:281:22:281:22 | a | test.rs:281:22:281:28 | ...: bool | match | +| test.rs:281:22:281:28 | ...: bool | test.rs:282:9:284:9 | ExprStmt | | | test.rs:281:38:286:5 | { ... } | test.rs:281:5:286:5 | exit fn test_and_true (normal) | | | test.rs:282:9:284:9 | ExprStmt | test.rs:282:13:282:13 | a | | | test.rs:282:9:284:9 | if ... {...} | test.rs:285:9:285:9 | 0 | | @@ -639,8 +639,8 @@ edges | test.rs:293:32:293:32 | 4 | test.rs:293:12:293:32 | ... + ... | | | test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | test.rs:296:38:296:38 | b | | | test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 | | -| test.rs:296:38:296:38 | b | test.rs:296:38:296:52 | ...: > | match | -| test.rs:296:38:296:52 | ...: > | test.rs:297:15:297:15 | b | | +| test.rs:296:38:296:38 | b | test.rs:296:38:296:52 | ...: Option::<...> | match | +| test.rs:296:38:296:52 | ...: Option::<...> | test.rs:297:15:297:15 | b | | | test.rs:296:71:301:5 | { ... } | test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | | | test.rs:297:9:300:9 | match ... { ... } | test.rs:296:71:301:5 | { ... } | | | test.rs:297:15:297:15 | b | test.rs:297:15:297:16 | TryExpr | | @@ -659,8 +659,8 @@ edges | test.rs:299:27:299:30 | true | test.rs:299:22:299:31 | Some(...) | | | test.rs:307:5:313:5 | enter fn test_match | test.rs:307:19:307:29 | maybe_digit | | | test.rs:307:5:313:5 | exit fn test_match (normal) | test.rs:307:5:313:5 | exit fn test_match | | -| test.rs:307:19:307:29 | maybe_digit | test.rs:307:19:307:42 | ...: > | match | -| test.rs:307:19:307:42 | ...: > | test.rs:308:15:308:25 | maybe_digit | | +| test.rs:307:19:307:29 | maybe_digit | test.rs:307:19:307:42 | ...: Option::<...> | match | +| test.rs:307:19:307:42 | ...: Option::<...> | test.rs:308:15:308:25 | maybe_digit | | | test.rs:307:52:313:5 | { ... } | test.rs:307:5:313:5 | exit fn test_match (normal) | | | test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:307:52:313:5 | { ... } | | | test.rs:308:15:308:25 | maybe_digit | test.rs:309:13:309:27 | TupleStructPat | | @@ -682,8 +682,8 @@ edges | test.rs:311:29:311:29 | 5 | test.rs:308:9:312:9 | match maybe_digit { ... } | | | test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:315:44:315:54 | maybe_digit | | | test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee | | -| test.rs:315:44:315:54 | maybe_digit | test.rs:315:44:315:67 | ...: > | match | -| test.rs:315:44:315:67 | ...: > | test.rs:316:19:316:29 | maybe_digit | | +| test.rs:315:44:315:54 | maybe_digit | test.rs:315:44:315:67 | ...: Option::<...> | match | +| test.rs:315:44:315:67 | ...: Option::<...> | test.rs:316:19:316:29 | maybe_digit | | | test.rs:315:77:324:5 | { ... } | test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | | | test.rs:316:9:323:9 | match ... { ... } | test.rs:315:77:324:5 | { ... } | | | test.rs:316:16:320:9 | if ... {...} else {...} | test.rs:321:13:321:27 | TupleStructPat | | @@ -708,10 +708,10 @@ edges | test.rs:322:29:322:29 | 5 | test.rs:316:9:323:9 | match ... { ... } | | | test.rs:326:5:331:5 | enter fn test_match_and | test.rs:326:23:326:26 | cond | | | test.rs:326:5:331:5 | exit fn test_match_and (normal) | test.rs:326:5:331:5 | exit fn test_match_and | | -| test.rs:326:23:326:26 | cond | test.rs:326:23:326:32 | ...: | match | -| test.rs:326:23:326:32 | ...: | test.rs:326:35:326:35 | r | | -| test.rs:326:35:326:35 | r | test.rs:326:35:326:49 | ...: > | match | -| test.rs:326:35:326:49 | ...: > | test.rs:327:16:327:16 | r | | +| test.rs:326:23:326:26 | cond | test.rs:326:23:326:32 | ...: bool | match | +| test.rs:326:23:326:32 | ...: bool | test.rs:326:35:326:35 | r | | +| test.rs:326:35:326:35 | r | test.rs:326:35:326:49 | ...: Option::<...> | match | +| test.rs:326:35:326:49 | ...: Option::<...> | test.rs:327:16:327:16 | r | | | test.rs:326:60:331:5 | { ... } | test.rs:326:5:331:5 | exit fn test_match_and (normal) | | | test.rs:327:9:330:18 | ... && ... | test.rs:326:60:331:5 | { ... } | | | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | test.rs:327:9:330:18 | ... && ... | false | @@ -727,8 +727,8 @@ edges | test.rs:330:15:330:18 | cond | test.rs:327:9:330:18 | ... && ... | | | test.rs:333:5:338:5 | enter fn test_match_with_no_arms | test.rs:333:35:333:35 | r | | | test.rs:333:5:338:5 | exit fn test_match_with_no_arms (normal) | test.rs:333:5:338:5 | exit fn test_match_with_no_arms | | -| test.rs:333:35:333:35 | r | test.rs:333:35:333:58 | ...: > | match | -| test.rs:333:35:333:58 | ...: > | test.rs:334:15:334:15 | r | | +| test.rs:333:35:333:35 | r | test.rs:333:35:333:58 | ...: Result::<...> | match | +| test.rs:333:35:333:58 | ...: Result::<...> | test.rs:334:15:334:15 | r | | | test.rs:333:66:338:5 | { ... } | test.rs:333:5:338:5 | exit fn test_match_with_no_arms (normal) | | | test.rs:334:9:337:9 | match r { ... } | test.rs:333:66:338:5 | { ... } | | | test.rs:334:15:334:15 | r | test.rs:335:13:335:21 | TupleStructPat | | @@ -742,8 +742,8 @@ edges | test.rs:336:33:336:37 | never | test.rs:336:27:336:40 | match never { ... } | | | test.rs:343:5:346:5 | enter fn test_let_match | test.rs:343:23:343:23 | a | | | test.rs:343:5:346:5 | exit fn test_let_match (normal) | test.rs:343:5:346:5 | exit fn test_let_match | | -| test.rs:343:23:343:23 | a | test.rs:343:23:343:36 | ...: > | match | -| test.rs:343:23:343:36 | ...: > | test.rs:344:9:344:57 | let ... = a else {...} | | +| test.rs:343:23:343:23 | a | test.rs:343:23:343:36 | ...: Option::<...> | match | +| test.rs:343:23:343:36 | ...: Option::<...> | test.rs:344:9:344:57 | let ... = a else {...} | | | test.rs:343:46:346:5 | { ... } | test.rs:343:5:346:5 | exit fn test_let_match (normal) | | | test.rs:344:9:344:57 | let ... = a else {...} | test.rs:344:23:344:23 | a | | | test.rs:344:13:344:19 | TupleStructPat | test.rs:344:18:344:18 | n | match | @@ -764,8 +764,8 @@ edges | test.rs:345:9:345:9 | n | test.rs:343:46:346:5 | { ... } | | | test.rs:348:5:354:5 | enter fn test_let_with_return | test.rs:348:29:348:29 | m | | | test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | test.rs:348:5:354:5 | exit fn test_let_with_return | | -| test.rs:348:29:348:29 | m | test.rs:348:29:348:42 | ...: > | match | -| test.rs:348:29:348:42 | ...: > | test.rs:349:9:352:10 | let ... = ... | | +| test.rs:348:29:348:29 | m | test.rs:348:29:348:42 | ...: Option::<...> | match | +| test.rs:348:29:348:42 | ...: Option::<...> | test.rs:349:9:352:10 | let ... = ... | | | test.rs:348:53:354:5 | { ... } | test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | | | test.rs:349:9:352:10 | let ... = ... | test.rs:349:25:349:25 | m | | | test.rs:349:13:349:15 | ret | test.rs:353:9:353:12 | true | match | @@ -790,8 +790,8 @@ edges | test.rs:361:9:361:15 | ExprStmt | test.rs:361:9:361:14 | return | | | test.rs:366:5:370:5 | enter fn empty_struct_pattern | test.rs:366:29:366:30 | st | | | test.rs:366:5:370:5 | exit fn empty_struct_pattern (normal) | test.rs:366:5:370:5 | exit fn empty_struct_pattern | | -| test.rs:366:29:366:30 | st | test.rs:366:29:366:40 | ...: | match | -| test.rs:366:29:366:40 | ...: | test.rs:367:15:367:16 | st | | +| test.rs:366:29:366:30 | st | test.rs:366:29:366:40 | ...: MyStruct | match | +| test.rs:366:29:366:40 | ...: MyStruct | test.rs:367:15:367:16 | st | | | test.rs:366:50:370:5 | { ... } | test.rs:366:5:370:5 | exit fn empty_struct_pattern (normal) | | | test.rs:367:9:369:9 | match st { ... } | test.rs:366:50:370:5 | { ... } | | | test.rs:367:15:367:16 | st | test.rs:368:13:368:27 | MyStruct {...} | | @@ -845,8 +845,8 @@ edges | test.rs:393:18:393:32 | { ... } | test.rs:393:9:393:33 | MacroExpr | | | test.rs:396:5:415:5 | enter fn async_block | test.rs:396:26:396:26 | b | | | test.rs:396:5:415:5 | exit fn async_block (normal) | test.rs:396:5:415:5 | exit fn async_block | | -| test.rs:396:26:396:26 | b | test.rs:396:26:396:32 | ...: | match | -| test.rs:396:26:396:32 | ...: | test.rs:397:9:399:10 | let ... = ... | | +| test.rs:396:26:396:26 | b | test.rs:396:26:396:32 | ...: bool | match | +| test.rs:396:26:396:32 | ...: bool | test.rs:397:9:399:10 | let ... = ... | | | test.rs:396:35:415:5 | { ... } | test.rs:396:5:415:5 | exit fn async_block (normal) | | | test.rs:397:9:399:10 | let ... = ... | test.rs:397:26:399:9 | { ... } | | | test.rs:397:13:397:22 | say_godbye | test.rs:400:9:402:10 | let ... = ... | match | @@ -916,8 +916,8 @@ edges | test.rs:413:13:413:15 | foo | test.rs:409:28:414:9 | exit { ... } (normal) | | | test.rs:421:5:423:5 | enter fn add_two | test.rs:421:22:421:22 | n | | | test.rs:421:5:423:5 | exit fn add_two (normal) | test.rs:421:5:423:5 | exit fn add_two | | -| test.rs:421:22:421:22 | n | test.rs:421:22:421:27 | ...: | match | -| test.rs:421:22:421:27 | ...: | test.rs:422:9:422:9 | n | | +| test.rs:421:22:421:22 | n | test.rs:421:22:421:27 | ...: i64 | match | +| test.rs:421:22:421:27 | ...: i64 | test.rs:422:9:422:9 | n | | | test.rs:421:37:423:5 | { ... } | test.rs:421:5:423:5 | exit fn add_two (normal) | | | test.rs:422:9:422:9 | n | test.rs:422:13:422:13 | 2 | | | test.rs:422:9:422:13 | ... + ... | test.rs:421:37:423:5 | { ... } | | @@ -1062,8 +1062,8 @@ edges | test.rs:497:17:497:17 | x | test.rs:497:12:497:17 | &mut x | | | test.rs:509:5:511:5 | enter fn new | test.rs:509:12:509:12 | a | | | test.rs:509:5:511:5 | exit fn new (normal) | test.rs:509:5:511:5 | exit fn new | | -| test.rs:509:12:509:12 | a | test.rs:509:12:509:17 | ...: | match | -| test.rs:509:12:509:17 | ...: | test.rs:510:23:510:23 | a | | +| test.rs:509:12:509:12 | a | test.rs:509:12:509:17 | ...: i64 | match | +| test.rs:509:12:509:17 | ...: i64 | test.rs:510:23:510:23 | a | | | test.rs:509:28:511:5 | { ... } | test.rs:509:5:511:5 | exit fn new (normal) | | | test.rs:510:9:510:25 | MyNumber {...} | test.rs:509:28:511:5 | { ... } | | | test.rs:510:23:510:23 | a | test.rs:510:9:510:25 | MyNumber {...} | | @@ -1079,10 +1079,10 @@ edges | test.rs:517:5:519:5 | exit fn multifly_add (normal) | test.rs:517:5:519:5 | exit fn multifly_add | | | test.rs:517:21:517:29 | SelfParam | test.rs:517:32:517:32 | a | | | test.rs:517:26:517:29 | self | test.rs:517:21:517:29 | SelfParam | | -| test.rs:517:32:517:32 | a | test.rs:517:32:517:37 | ...: | match | -| test.rs:517:32:517:37 | ...: | test.rs:517:40:517:40 | b | | -| test.rs:517:40:517:40 | b | test.rs:517:40:517:45 | ...: | match | -| test.rs:517:40:517:45 | ...: | test.rs:518:9:518:34 | ExprStmt | | +| test.rs:517:32:517:32 | a | test.rs:517:32:517:37 | ...: i64 | match | +| test.rs:517:32:517:37 | ...: i64 | test.rs:517:40:517:40 | b | | +| test.rs:517:40:517:40 | b | test.rs:517:40:517:45 | ...: i64 | match | +| test.rs:517:40:517:45 | ...: i64 | test.rs:518:9:518:34 | ExprStmt | | | test.rs:517:48:519:5 | { ... } | test.rs:517:5:519:5 | exit fn multifly_add (normal) | | | test.rs:518:9:518:12 | self | test.rs:518:9:518:14 | self.n | | | test.rs:518:9:518:14 | self.n | test.rs:518:19:518:22 | self | | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index f3a4e282dab3..77ea9a8b15bf 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -17,8 +17,8 @@ edges | variables.rs:4:20:4:20 | s | variables.rs:4:14:4:20 | FormatArgsExpr | | | variables.rs:7:1:9:1 | enter fn print_i64 | variables.rs:7:14:7:14 | i | | | variables.rs:7:1:9:1 | exit fn print_i64 (normal) | variables.rs:7:1:9:1 | exit fn print_i64 | | -| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:19 | ...: | match | -| variables.rs:7:14:7:19 | ...: | variables.rs:8:5:8:22 | ExprStmt | | +| variables.rs:7:14:7:14 | i | variables.rs:7:14:7:19 | ...: i64 | match | +| variables.rs:7:14:7:19 | ...: i64 | variables.rs:8:5:8:22 | ExprStmt | | | variables.rs:7:22:9:1 | { ... } | variables.rs:7:1:9:1 | exit fn print_i64 (normal) | | | variables.rs:8:5:8:21 | ...::_print | variables.rs:8:14:8:17 | "{}\\n" | | | variables.rs:8:5:8:21 | MacroExpr | variables.rs:7:22:9:1 | { ... } | | @@ -584,10 +584,10 @@ edges | variables.rs:268:15:268:16 | c1 | variables.rs:268:5:268:17 | print_str(...) | | | variables.rs:271:1:275:1 | enter fn param_pattern2 | variables.rs:272:6:272:21 | TupleStructPat | | | variables.rs:271:1:275:1 | exit fn param_pattern2 (normal) | variables.rs:271:1:275:1 | exit fn param_pattern2 | | -| variables.rs:272:5:272:50 | ...: | variables.rs:274:5:274:18 | ExprStmt | | +| variables.rs:272:5:272:50 | ...: Either | variables.rs:274:5:274:18 | ExprStmt | | | variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:19:272:20 | a9 | match | | variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:25:272:41 | TupleStructPat | no-match | -| variables.rs:272:6:272:41 | [match(true)] ... \| ... | variables.rs:272:5:272:50 | ...: | match | +| variables.rs:272:6:272:41 | [match(true)] ... \| ... | variables.rs:272:5:272:50 | ...: Either | match | | variables.rs:272:19:272:20 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | | variables.rs:272:25:272:41 | TupleStructPat | variables.rs:272:39:272:40 | a9 | match | | variables.rs:272:39:272:40 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | @@ -675,8 +675,8 @@ edges | variables.rs:316:9:317:9 | \|...\| x | variables.rs:315:9:315:23 | example_closure | | | variables.rs:316:9:317:9 | enter \|...\| x | variables.rs:316:10:316:10 | x | | | variables.rs:316:9:317:9 | exit \|...\| x (normal) | variables.rs:316:9:317:9 | exit \|...\| x | | -| variables.rs:316:10:316:10 | x | variables.rs:316:10:316:15 | ...: | match | -| variables.rs:316:10:316:15 | ...: | variables.rs:317:9:317:9 | x | | +| variables.rs:316:10:316:10 | x | variables.rs:316:10:316:15 | ...: i64 | match | +| variables.rs:316:10:316:15 | ...: i64 | variables.rs:317:9:317:9 | x | | | variables.rs:317:9:317:9 | x | variables.rs:316:9:317:9 | exit \|...\| x (normal) | | | variables.rs:318:5:319:27 | let ... = ... | variables.rs:319:9:319:23 | example_closure | | | variables.rs:318:9:318:10 | n1 | variables.rs:320:5:320:18 | ExprStmt | match | @@ -695,8 +695,8 @@ edges | variables.rs:324:9:325:9 | \|...\| x | variables.rs:323:9:323:26 | immutable_variable | | | variables.rs:324:9:325:9 | enter \|...\| x | variables.rs:324:10:324:10 | x | | | variables.rs:324:9:325:9 | exit \|...\| x (normal) | variables.rs:324:9:325:9 | exit \|...\| x | | -| variables.rs:324:10:324:10 | x | variables.rs:324:10:324:15 | ...: | match | -| variables.rs:324:10:324:15 | ...: | variables.rs:325:9:325:9 | x | | +| variables.rs:324:10:324:10 | x | variables.rs:324:10:324:15 | ...: i64 | match | +| variables.rs:324:10:324:15 | ...: i64 | variables.rs:325:9:325:9 | x | | | variables.rs:325:9:325:9 | x | variables.rs:324:9:325:9 | exit \|...\| x (normal) | | | variables.rs:326:5:327:30 | let ... = ... | variables.rs:327:9:327:26 | immutable_variable | | | variables.rs:326:9:326:10 | n2 | variables.rs:328:5:328:18 | ExprStmt | match | @@ -979,8 +979,8 @@ edges | variables.rs:442:15:442:15 | i | variables.rs:442:5:442:16 | print_i64(...) | | | variables.rs:445:1:459:1 | enter fn phi | variables.rs:445:8:445:8 | b | | | variables.rs:445:1:459:1 | exit fn phi (normal) | variables.rs:445:1:459:1 | exit fn phi | | -| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:15 | ...: | match | -| variables.rs:445:8:445:15 | ...: | variables.rs:446:5:446:18 | let ... = 1 | | +| variables.rs:445:8:445:8 | b | variables.rs:445:8:445:15 | ...: bool | match | +| variables.rs:445:8:445:15 | ...: bool | variables.rs:446:5:446:18 | let ... = 1 | | | variables.rs:445:18:459:1 | { ... } | variables.rs:445:1:459:1 | exit fn phi (normal) | | | variables.rs:446:5:446:18 | let ... = 1 | variables.rs:446:17:446:17 | 1 | | | variables.rs:446:9:446:13 | x | variables.rs:447:5:447:17 | ExprStmt | match | @@ -1035,10 +1035,10 @@ edges | variables.rs:458:15:458:15 | x | variables.rs:458:5:458:16 | print_i64(...) | | | variables.rs:461:1:474:1 | enter fn phi_read | variables.rs:461:13:461:14 | b1 | | | variables.rs:461:1:474:1 | exit fn phi_read (normal) | variables.rs:461:1:474:1 | exit fn phi_read | | -| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:21 | ...: | match | -| variables.rs:461:13:461:21 | ...: | variables.rs:461:24:461:25 | b2 | | -| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:32 | ...: | match | -| variables.rs:461:24:461:32 | ...: | variables.rs:462:5:462:14 | let ... = 1 | | +| variables.rs:461:13:461:14 | b1 | variables.rs:461:13:461:21 | ...: bool | match | +| variables.rs:461:13:461:21 | ...: bool | variables.rs:461:24:461:25 | b2 | | +| variables.rs:461:24:461:25 | b2 | variables.rs:461:24:461:32 | ...: bool | match | +| variables.rs:461:24:461:32 | ...: bool | variables.rs:462:5:462:14 | let ... = 1 | | | variables.rs:461:35:474:1 | { ... } | variables.rs:461:1:474:1 | exit fn phi_read (normal) | | | variables.rs:462:5:462:14 | let ... = 1 | variables.rs:462:13:462:13 | 1 | | | variables.rs:462:9:462:9 | x | variables.rs:463:5:467:5 | ExprStmt | match | From 143d7e20849bb9abd93a0b4c35b52bcd72795d9e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 22 Nov 2024 10:30:33 +0100 Subject: [PATCH 20/35] Rust: Use extended canonical paths to resolve calls in data flow --- .../rust/dataflow/internal/DataFlowImpl.qll | 54 ++++++++++++++++--- shared/util/codeql/util/Option.qll | 1 + 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index 1ec8a42ee7e0..3710004b8de6 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -399,13 +399,55 @@ module RustDataFlow implements InputSig { final class ReturnKind = ReturnKindAlias; + private import codeql.util.Option + + private class CrateOrigin extends string { + CrateOrigin() { + this = [any(Item i).getCrateOrigin(), any(Resolvable r).getResolvedCrateOrigin()] + } + } + + private class CrateOriginOption = Option::Option; + + pragma[nomagic] + private predicate hasExtendedCanonicalPath( + DataFlowCallable c, CrateOriginOption crate, string path + ) { + exists(Item i | + i = c.asCfgScope() and + path = i.getExtendedCanonicalPath() + | + crate.asSome() = i.getCrateOrigin() + or + crate.isNone() and + not i.hasCrateOrigin() + ) + } + + pragma[nomagic] + private predicate resolvesExtendedCanonicalPath( + DataFlowCall c, CrateOriginOption crate, string path + ) { + exists(Resolvable r | + path = r.getResolvedPath() and + ( + r = c.asMethodCallExprCfgNode().getExpr() + or + r = c.asCallExprCfgNode().getExpr().(PathExprCfgNode).getPath() + ) + | + crate.asSome() = r.getResolvedCrateOrigin() + or + crate.isNone() and + not r.hasResolvedCrateOrigin() + ) + } + /** Gets a viable implementation of the target of the given `Call`. */ - DataFlowCallable viableCallable(DataFlowCall c) { - exists(Function f, string name | result.asCfgScope() = f and name = f.getName().toString() | - if f.getParamList().hasSelfParam() - then name = c.asMethodCallExprCfgNode().getNameRef().getText() - else - name = c.asCallExprCfgNode().getExpr().getExpr().(PathExpr).getPath().getPart().toString() + DataFlowCallable viableCallable(DataFlowCall call) { + exists(string path, CrateOriginOption crate | + hasExtendedCanonicalPath(result, crate, path) and + resolvesExtendedCanonicalPath(call, crate, path) ) } diff --git a/shared/util/codeql/util/Option.qll b/shared/util/codeql/util/Option.qll index 31df747afe87..8ba4d8e840bc 100644 --- a/shared/util/codeql/util/Option.qll +++ b/shared/util/codeql/util/Option.qll @@ -2,6 +2,7 @@ /** A type with `toString`. */ private signature class TypeWithToString { + bindingset[this] string toString(); } From 4d851440b6d10439b9c6641597815bfb9e4ba5df Mon Sep 17 00:00:00 2001 From: Calum Grant Date: Wed, 6 Nov 2024 14:12:36 +0000 Subject: [PATCH 21/35] C++: Remove FPs from cpp/too-few-arguments --- .../Likely Bugs/Underspecified Functions/TooFewArguments.qll | 4 +++- .../Underspecified Functions/TooFewArguments.expected | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Underspecified Functions/TooFewArguments.qll b/cpp/ql/src/Likely Bugs/Underspecified Functions/TooFewArguments.qll index 6f3f4d43e9aa..218a54b36c51 100644 --- a/cpp/ql/src/Likely Bugs/Underspecified Functions/TooFewArguments.qll +++ b/cpp/ql/src/Likely Bugs/Underspecified Functions/TooFewArguments.qll @@ -51,5 +51,7 @@ predicate tooFewArguments(FunctionCall fc, Function f) { hasDefiniteNumberOfParameters(fde) | fde.getNumberOfParameters() > fc.getNumberOfArguments() - ) + ) and + // Don't report on implicit function declarations, as these are likely extraction errors. + not f.getADeclarationEntry().isImplicit() } diff --git a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooFewArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooFewArguments.expected index 42c4f7f94559..956729115d75 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooFewArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooFewArguments.expected @@ -1,4 +1,2 @@ -| test.c:34:3:34:19 | call to not_yet_declared2 | This call has fewer arguments than required by $@. | test.c:32:3:32:3 | not_yet_declared2 | not_yet_declared2 | -| test.c:34:3:34:19 | call to not_yet_declared2 | This call has fewer arguments than required by $@. | test.c:76:6:76:22 | not_yet_declared2 | not_yet_declared2 | | test.c:36:3:36:29 | call to declared_empty_defined_with | This call has fewer arguments than required by $@. | test.c:77:6:77:32 | declared_empty_defined_with | declared_empty_defined_with | | test.c:87:10:87:20 | call to dereference | This call has fewer arguments than required by $@. | test.c:90:5:90:15 | dereference | dereference | From 227f9c7c1bfb04e049f965a03d8381908b42f56b Mon Sep 17 00:00:00 2001 From: Calum Grant Date: Fri, 22 Nov 2024 14:56:13 +0000 Subject: [PATCH 22/35] C++: Update the test.c comments --- .../query-tests/Likely Bugs/Underspecified Functions/test.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c index 86e940a8e282..324ce9098f4d 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c +++ b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c @@ -30,8 +30,8 @@ void test(int *argv[]) { not_yet_declared1(1); // BAD (GOOD for everything except for cpp/implicit-function-declaration) not_yet_declared2(1); // BAD (GOOD for everything except for cpp/implicit-function-declaration) - not_yet_declared2(ca); // BAD - not_yet_declared2(); // BAD + not_yet_declared2(ca); // BAD (GOOD for everything except for cpp/mistyped-function-arguments) + not_yet_declared2(); // GOOD declared_empty_defined_with(); // BAD declared_empty_defined_with(1); // GOOD From 4fa8c6ae6549a4cbc3bc8cef1a5a99cd73e143fc Mon Sep 17 00:00:00 2001 From: Calum Grant Date: Fri, 22 Nov 2024 15:09:30 +0000 Subject: [PATCH 23/35] C++: Add change note --- cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md diff --git a/cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md b/cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md new file mode 100644 index 000000000000..9ac608ac74c2 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "Call to function with fewer arguments than declared parameters" query (`cpp/too-few-arguments`) query produces no results if the function has been implicitly declared. From 60155ce2052ec22a9ed6e1c5cdeba92bda740003 Mon Sep 17 00:00:00 2001 From: Calum Grant Date: Fri, 22 Nov 2024 15:30:24 +0000 Subject: [PATCH 24/35] C++: Address review comments --- cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md | 2 +- .../query-tests/Likely Bugs/Underspecified Functions/test.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md b/cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md index 9ac608ac74c2..116df08838a1 100644 --- a/cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md +++ b/cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* The "Call to function with fewer arguments than declared parameters" query (`cpp/too-few-arguments`) query produces no results if the function has been implicitly declared. +* The "Call to function with fewer arguments than declared parameters" query (`cpp/too-few-arguments`) query no longer produces results if the function has been implicitly declared. diff --git a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c index 324ce9098f4d..5bcd12e9c2db 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c +++ b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c @@ -31,7 +31,7 @@ void test(int *argv[]) { not_yet_declared1(1); // BAD (GOOD for everything except for cpp/implicit-function-declaration) not_yet_declared2(1); // BAD (GOOD for everything except for cpp/implicit-function-declaration) not_yet_declared2(ca); // BAD (GOOD for everything except for cpp/mistyped-function-arguments) - not_yet_declared2(); // GOOD + not_yet_declared2(); // BAD [NOT DETECTED] (GOOD for everything except for cpp/too-few-arguments) declared_empty_defined_with(); // BAD declared_empty_defined_with(1); // GOOD From 3b4fdb3fc2922949341b8e23d381e18ce026d179 Mon Sep 17 00:00:00 2001 From: Calum Grant <42069085+calumgrant@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:39:28 +0000 Subject: [PATCH 25/35] Update cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com> --- .../query-tests/Likely Bugs/Underspecified Functions/test.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c index 5bcd12e9c2db..d77c16683ed6 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c +++ b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c @@ -30,7 +30,8 @@ void test(int *argv[]) { not_yet_declared1(1); // BAD (GOOD for everything except for cpp/implicit-function-declaration) not_yet_declared2(1); // BAD (GOOD for everything except for cpp/implicit-function-declaration) - not_yet_declared2(ca); // BAD (GOOD for everything except for cpp/mistyped-function-arguments) + not_yet_declared2(ca); // BAD (GOOD for everything except for cpp/mistyped-function-arguments + // and cpp/too-few-arguments. Not detected in the case of cpp/too-few-arguments.) not_yet_declared2(); // BAD [NOT DETECTED] (GOOD for everything except for cpp/too-few-arguments) declared_empty_defined_with(); // BAD From fcf16848d2a881ff317d7335301027e5f53f4ec6 Mon Sep 17 00:00:00 2001 From: Calum Grant <42069085+calumgrant@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:48:50 +0000 Subject: [PATCH 26/35] Revert "Revert "C++: Implement compilation_build_mode"" --- .../old.dbscheme | 2339 +++++++++++++++ .../semmlecode.cpp.dbscheme | 2323 +++++++++++++++ .../upgrade.properties | 3 + cpp/ql/lib/semmle/code/cpp/Compilation.qll | 3 + cpp/ql/lib/semmlecode.cpp.dbscheme | 16 + cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 2635 +++++++++-------- .../old.dbscheme | 2323 +++++++++++++++ .../semmlecode.cpp.dbscheme | 2339 +++++++++++++++ .../upgrade.properties | 2 + 9 files changed, 10697 insertions(+), 1286 deletions(-) create mode 100644 cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/old.dbscheme create mode 100644 cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/upgrade.properties diff --git a/cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/old.dbscheme b/cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/old.dbscheme new file mode 100644 index 000000000000..f0156f5f88ab --- /dev/null +++ b/cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/old.dbscheme @@ -0,0 +1,2339 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/semmlecode.cpp.dbscheme b/cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..e51fad7a2436 --- /dev/null +++ b/cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/semmlecode.cpp.dbscheme @@ -0,0 +1,2323 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/upgrade.properties b/cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/upgrade.properties new file mode 100644 index 000000000000..cf362f384dae --- /dev/null +++ b/cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/upgrade.properties @@ -0,0 +1,3 @@ +description: Implement compilation_build_mode/2 +compatibility: full +compilation_build_mode.rel: delete diff --git a/cpp/ql/lib/semmle/code/cpp/Compilation.qll b/cpp/ql/lib/semmle/code/cpp/Compilation.qll index 1a8d90f991c1..407dc31e05f1 100644 --- a/cpp/ql/lib/semmle/code/cpp/Compilation.qll +++ b/cpp/ql/lib/semmle/code/cpp/Compilation.qll @@ -112,4 +112,7 @@ class Compilation extends @compilation { * termination, but crashing due to something like a segfault is not. */ predicate normalTermination() { compilation_finished(this, _, _) } + + /** Holds if this compilation was compiled using the "none" build mode. */ + predicate buildModeNone() { compilation_build_mode(this, 0) } } diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index e51fad7a2436..f0156f5f88ab 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -46,6 +46,22 @@ compilation_args( string arg : string ref ); +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + /** * The source files that are compiled by a compiler invocation. * If `id` is for the compiler invocation diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 7f0d99272e7e..758aba346080 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -18,7 +18,7 @@ @location_default - 29764890 + 29746763 @location_stmt @@ -34,11 +34,11 @@ @file - 123251 + 123176 @folder - 16340 + 16330 @macro_expansion @@ -46,23 +46,23 @@ @other_macro_reference - 859029 + 858505 @function - 4179363 + 4176817 @fun_decl - 4543516 + 4541216 @var_decl - 8039391 + 8034962 @type_decl - 3283451 + 3281452 @namespace_decl @@ -70,11 +70,11 @@ @using_declaration - 363219 + 362998 @using_directive - 6536 + 6532 @using_enum_declaration @@ -86,7 +86,7 @@ @parameter - 6190611 + 6186841 @membervariable @@ -98,7 +98,7 @@ @localvariable - 576945 + 576952 @enumconstant @@ -330,15 +330,15 @@ @pointer - 568173 + 567827 @type_with_specifiers - 852026 + 851507 @array - 110179 + 110112 @routineptr @@ -346,7 +346,7 @@ @reference - 1276405 + 1275627 @gnu_vector @@ -358,7 +358,7 @@ @rvalue_reference - 333340 + 333137 @block @@ -366,15 +366,15 @@ @decltype - 27078 + 27061 @usertype - 5234008 + 5230820 @mangledname - 6061757 + 6058065 @type_mention @@ -386,15 +386,15 @@ @ptrtomember - 37815 + 37792 @specifier - 24743 + 24728 @gnuattribute - 553700 + 553363 @stdattribute @@ -410,15 +410,15 @@ @alignas - 4668 + 4665 @attribute_arg_token - 25210 + 25195 @attribute_arg_constant_expr - 318400 + 318207 @attribute_arg_empty @@ -450,7 +450,7 @@ @namespace - 12138 + 12131 @specialnamequalifyingelement @@ -482,7 +482,7 @@ @parexpr - 3587463 + 3587464 @arithnegexpr @@ -582,11 +582,11 @@ @gtexpr - 104110 + 104047 @ltexpr - 101776 + 101714 @geexpr @@ -634,7 +634,7 @@ @assignorexpr - 23627 + 23628 @assignxorexpr @@ -662,11 +662,11 @@ @subscriptexpr - 364477 + 364481 @callexpr - 316533 + 316340 @vastartexpr @@ -678,7 +678,7 @@ @vaendexpr - 2801 + 2799 @vacopyexpr @@ -830,7 +830,7 @@ @sizeof_pack - 5602 + 5598 @hasassignexpr @@ -978,7 +978,7 @@ @lambdaexpr - 21475 + 21462 @param_ref @@ -1022,7 +1022,7 @@ @istriviallycopyableexpr - 3734 + 3732 @isliteraltypeexpr @@ -1374,7 +1374,7 @@ @lambdacapture - 28011 + 27994 @stmt_expr @@ -1398,11 +1398,11 @@ @stmt_return - 1280140 + 1279827 @stmt_block - 1419265 + 1418867 @stmt_end_test_while @@ -1430,7 +1430,7 @@ @stmt_empty - 192682 + 192685 @stmt_continue @@ -1462,7 +1462,7 @@ @stmt_range_based_for - 8403 + 8398 @stmt_handler @@ -1478,31 +1478,31 @@ @ppd_if - 667148 + 666741 @ppd_ifdef - 263311 + 263150 @ppd_ifndef - 266579 + 266416 @ppd_elif - 25210 + 25195 @ppd_else - 209154 + 209027 @ppd_endif - 1197038 + 1196309 @ppd_plain_include - 311398 + 311208 @ppd_define @@ -1510,15 +1510,15 @@ @ppd_undef - 258642 + 258484 @ppd_include_next - 1867 + 1866 @ppd_line - 27520 + 27521 @ppd_error @@ -1900,6 +1900,54 @@ + + compilation_build_mode + 9742 + + + id + 9742 + + + mode + 11 + + + + + id + mode + + + 12 + + + 1 + 2 + 9742 + + + + + + + mode + id + + + 12 + + + 863 + 864 + 11 + + + + + + + compilation_compiling_files 11546 @@ -2164,7 +2212,7 @@ seconds - 8429 + 8030 @@ -2245,47 +2293,52 @@ 3 4 - 639 + 799 4 5 - 359 + 199 - 6 + 5 7 119 8 - 10 - 159 + 9 + 79 - 10 - 11 + 9 + 10 119 - 11 - 15 + 10 + 12 159 - 16 - 19 + 12 + 16 + 119 + + + 17 + 20 159 - 19 - 24 + 21 + 42 159 - 40 - 89 - 119 + 55 + 90 + 79 @@ -2368,7 +2421,7 @@ 6 7 - 439 + 399 7 @@ -2377,18 +2430,18 @@ 8 - 10 - 279 + 9 + 239 - 10 - 26 + 9 + 24 279 - 28 - 81 - 199 + 25 + 85 + 279 @@ -2439,8 +2492,8 @@ 79 - 125 - 126 + 124 + 125 39 @@ -2462,27 +2515,37 @@ 1 2 - 3635 + 3755 2 3 - 1917 + 1398 3 4 - 1558 + 998 4 + 5 + 759 + + + 5 6 - 719 + 439 6 - 48 - 599 + 25 + 639 + + + 46 + 47 + 39 @@ -2498,27 +2561,27 @@ 1 2 - 3595 + 3515 2 3 - 1438 + 1278 3 4 - 1358 + 599 4 5 - 639 + 878 5 6 - 479 + 759 6 @@ -2527,8 +2590,8 @@ 8 - 73 - 239 + 76 + 319 @@ -2544,12 +2607,12 @@ 1 2 - 6512 + 5753 2 3 - 1917 + 2277 @@ -2893,7 +2956,7 @@ cpu_seconds - 7507 + 7292 elapsed_seconds @@ -2943,17 +3006,17 @@ 1 2 - 6242 + 5937 2 3 - 835 + 846 3 - 15 - 428 + 16 + 507 @@ -2969,12 +3032,12 @@ 1 2 - 6976 + 6682 2 3 - 530 + 609 @@ -3003,48 +3066,48 @@ 11 - 6 - 7 + 7 + 8 11 - 9 - 10 + 8 + 9 11 - 11 - 12 + 12 + 13 11 - 16 - 17 + 13 + 14 11 - 49 - 50 + 51 + 52 11 - 154 - 155 + 163 + 164 11 - 160 - 161 + 167 + 168 11 - 204 - 205 + 187 + 188 11 - 248 - 249 + 249 + 250 11 @@ -3074,48 +3137,48 @@ 11 - 6 - 7 + 7 + 8 11 - 9 - 10 + 8 + 9 11 - 11 - 12 + 12 + 13 11 - 16 - 17 + 13 + 14 11 - 47 - 48 + 49 + 50 11 - 118 - 119 + 120 + 121 11 - 128 - 129 + 123 + 124 11 - 149 - 150 + 138 + 139 11 - 222 - 223 + 224 + 225 11 @@ -4888,31 +4951,31 @@ locations_default - 29764890 + 29746763 id - 29764890 + 29746763 container - 123251 + 123176 startLine - 2095283 + 2094007 startColumn - 36882 + 36859 endLine - 2099485 + 2098207 endColumn - 48086 + 48057 @@ -4926,7 +4989,7 @@ 1 2 - 29764890 + 29746763 @@ -4942,7 +5005,7 @@ 1 2 - 29764890 + 29746763 @@ -4958,7 +5021,7 @@ 1 2 - 29764890 + 29746763 @@ -4974,7 +5037,7 @@ 1 2 - 29764890 + 29746763 @@ -4990,7 +5053,7 @@ 1 2 - 29764890 + 29746763 @@ -5006,67 +5069,67 @@ 1 11 - 9804 + 9798 11 18 - 10270 + 10264 18 30 - 9337 + 9331 30 42 - 9804 + 9798 43 61 - 9804 + 9798 61 79 - 9337 + 9331 80 106 - 9804 + 9798 108 149 - 9337 + 9331 149 199 - 9337 + 9331 206 291 - 9337 + 9331 304 469 - 9337 + 9331 482 850 - 9337 + 9331 936 2380 - 8403 + 8398 @@ -5082,67 +5145,67 @@ 1 8 - 9337 + 9331 8 13 - 9337 + 9331 13 20 - 9804 + 9798 20 32 - 9337 + 9331 32 43 - 9804 + 9798 44 61 - 9337 + 9331 62 72 - 9337 + 9331 73 93 - 9337 + 9331 97 128 - 9337 + 9331 128 180 - 9337 + 9331 180 267 - 9337 + 9331 277 414 - 9337 + 9331 439 1465 - 9337 + 9331 1557 @@ -5163,67 +5226,67 @@ 1 4 - 8870 + 8865 4 5 - 7936 + 7931 5 6 - 7469 + 7465 6 8 - 11204 + 11197 8 10 - 9337 + 9331 10 15 - 10737 + 10731 15 23 - 9804 + 9798 23 28 - 11204 + 11197 28 34 - 9804 + 9798 34 44 - 9337 + 9331 44 55 - 9337 + 9331 55 66 - 9804 + 9798 66 77 - 8403 + 8398 @@ -5239,67 +5302,67 @@ 1 8 - 9337 + 9331 8 13 - 9337 + 9331 13 20 - 9804 + 9798 20 32 - 9337 + 9331 32 43 - 9804 + 9798 43 60 - 9337 + 9331 61 71 - 9337 + 9331 72 93 - 9337 + 9331 94 127 - 9337 + 9331 128 179 - 9337 + 9331 180 268 - 9337 + 9331 278 413 - 9337 + 9331 437 1465 - 9337 + 9331 1554 @@ -5320,67 +5383,67 @@ 1 9 - 9804 + 9798 9 13 - 9337 + 9331 13 18 - 9337 + 9331 18 26 - 10270 + 10264 27 33 - 9337 + 9331 33 39 - 9337 + 9331 39 47 - 10270 + 10264 47 53 - 9337 + 9331 53 60 - 10270 + 10264 60 66 - 9337 + 9331 66 74 - 9804 + 9798 74 78 - 9804 + 9798 78 90 - 7002 + 6998 @@ -5396,52 +5459,52 @@ 1 2 - 583112 + 582757 2 3 - 314199 + 314007 3 4 - 195615 + 195496 4 6 - 162001 + 161903 6 10 - 183010 + 182899 10 16 - 162935 + 162836 16 25 - 169004 + 168901 25 46 - 161067 + 160969 46 169 - 157333 + 157237 169 265 - 7002 + 6998 @@ -5457,42 +5520,42 @@ 1 2 - 871167 + 870636 2 3 - 273582 + 273415 3 5 - 193748 + 193630 5 8 - 173673 + 173567 8 13 - 188146 + 188031 13 20 - 161067 + 160969 20 51 - 159667 + 159570 51 265 - 74231 + 74186 @@ -5508,47 +5571,47 @@ 1 2 - 612058 + 611685 2 3 - 313265 + 313074 3 4 - 198417 + 198296 4 6 - 183010 + 182899 6 9 - 173206 + 173100 9 13 - 163402 + 163302 13 19 - 174606 + 174500 19 29 - 164802 + 164702 29 52 - 112514 + 112445 @@ -5564,22 +5627,22 @@ 1 2 - 1531779 + 1530846 2 3 - 348747 + 348534 3 5 - 162001 + 161903 5 16 - 52755 + 52723 @@ -5595,47 +5658,47 @@ 1 2 - 587781 + 587423 2 3 - 316066 + 315874 3 4 - 197483 + 197363 4 6 - 168537 + 168435 6 9 - 158266 + 158170 9 14 - 170872 + 170768 14 21 - 175073 + 174967 21 32 - 162468 + 162369 32 63 - 157799 + 157703 64 @@ -5656,67 +5719,67 @@ 1 31 - 2801 + 2799 42 85 - 2801 + 2799 86 128 - 2801 + 2799 129 229 - 2801 + 2799 247 286 - 2801 + 2799 291 360 - 2801 + 2799 373 457 - 2801 + 2799 473 565 - 2801 + 2799 566 619 - 2801 + 2799 619 689 - 2801 + 2799 696 807 - 2801 + 2799 819 1563 - 2801 + 2799 1634 5631 - 2801 + 2799 15295 @@ -5737,67 +5800,67 @@ 1 18 - 2801 + 2799 23 35 - 3268 + 3266 38 43 - 2801 + 2799 44 61 - 2801 + 2799 65 73 - 2801 + 2799 73 84 - 3268 + 3266 84 96 - 2801 + 2799 96 101 - 3268 + 3266 101 105 - 3268 + 3266 107 112 - 2801 + 2799 112 126 - 2801 + 2799 137 170 - 2801 + 2799 195 265 - 1400 + 1399 @@ -5813,67 +5876,67 @@ 1 19 - 2801 + 2799 30 72 - 2801 + 2799 83 122 - 2801 + 2799 122 205 - 2801 + 2799 214 261 - 2801 + 2799 265 322 - 2801 + 2799 322 379 - 2801 + 2799 404 430 - 2801 + 2799 453 474 - 2801 + 2799 478 505 - 2801 + 2799 511 583 - 2801 + 2799 585 836 - 2801 + 2799 1104 2196 - 2801 + 2799 2387 @@ -5894,67 +5957,67 @@ 1 19 - 2801 + 2799 30 72 - 2801 + 2799 83 122 - 2801 + 2799 122 205 - 2801 + 2799 214 261 - 2801 + 2799 265 322 - 2801 + 2799 322 380 - 2801 + 2799 404 430 - 2801 + 2799 453 474 - 2801 + 2799 477 504 - 2801 + 2799 514 582 - 2801 + 2799 585 835 - 2801 + 2799 1109 2203 - 2801 + 2799 2382 @@ -5975,67 +6038,67 @@ 1 7 - 2801 + 2799 7 11 - 3268 + 3266 11 16 - 3268 + 3266 16 22 - 2801 + 2799 22 24 - 3268 + 3266 24 28 - 2801 + 2799 29 34 - 3268 + 3266 34 41 - 3268 + 3266 41 46 - 2801 + 2799 47 49 - 1867 + 1866 49 54 - 2801 + 2799 54 74 - 2801 + 2799 75 86 - 1867 + 1866 @@ -6051,52 +6114,52 @@ 1 2 - 593383 + 593022 2 3 - 306262 + 306076 3 4 - 198417 + 198296 4 6 - 159667 + 159570 6 10 - 182543 + 182432 10 16 - 162001 + 161903 16 25 - 171338 + 171234 25 46 - 158733 + 158636 46 161 - 158266 + 158170 162 265 - 8870 + 8865 @@ -6112,47 +6175,47 @@ 1 2 - 886574 + 886034 2 3 - 260043 + 259884 3 4 - 125119 + 125043 4 6 - 140992 + 140906 6 10 - 184877 + 184765 10 15 - 168537 + 168435 15 26 - 163402 + 163302 26 120 - 158266 + 158170 121 265 - 11671 + 11664 @@ -6168,22 +6231,22 @@ 1 2 - 1529445 + 1528513 2 3 - 341744 + 341536 3 5 - 170872 + 170768 5 10 - 57424 + 57389 @@ -6199,47 +6262,47 @@ 1 2 - 623262 + 622883 2 3 - 303461 + 303276 3 4 - 201685 + 201562 4 6 - 183944 + 183832 6 9 - 169938 + 169834 9 13 - 166670 + 166568 13 19 - 175073 + 174967 19 29 - 161067 + 160969 29 52 - 114381 + 114311 @@ -6255,52 +6318,52 @@ 1 2 - 599919 + 599554 2 3 - 306262 + 306076 3 4 - 197016 + 196896 4 6 - 169004 + 168901 6 9 - 156399 + 156304 9 14 - 169004 + 168901 14 21 - 177875 + 177766 21 32 - 162001 + 161903 32 60 - 158266 + 158170 60 65 - 3734 + 3732 @@ -6316,67 +6379,67 @@ 1 2 - 5135 + 5132 2 8 - 3734 + 3732 9 186 - 3734 + 3732 193 288 - 3734 + 3732 294 495 - 3734 + 3732 503 555 - 3734 + 3732 561 633 - 3734 + 3732 640 758 - 3734 + 3732 758 869 - 3734 + 3732 875 1074 - 3734 + 3732 1074 1281 - 3734 + 3732 1289 1590 - 3734 + 3732 1685 2418 - 1867 + 1866 @@ -6392,62 +6455,62 @@ 1 2 - 5602 + 5598 2 5 - 3734 + 3732 5 65 - 3734 + 3732 70 100 - 3734 + 3732 100 111 - 3734 + 3732 112 122 - 4201 + 4199 122 140 - 3734 + 3732 143 153 - 3734 + 3732 153 161 - 4201 + 4199 161 173 - 4201 + 4199 173 178 - 3734 + 3732 188 265 - 3734 + 3732 @@ -6463,62 +6526,62 @@ 1 2 - 5602 + 5598 2 8 - 3734 + 3732 9 105 - 3734 + 3732 155 241 - 3734 + 3732 253 336 - 3734 + 3732 340 426 - 3734 + 3732 434 488 - 3734 + 3732 489 572 - 3734 + 3732 573 623 - 3734 + 3732 626 696 - 4201 + 4199 701 813 - 3734 + 3732 818 1095 - 3734 + 3732 1172 @@ -6539,67 +6602,67 @@ 1 2 - 6069 + 6065 2 4 - 3734 + 3732 4 8 - 4201 + 4199 8 15 - 3734 + 3732 15 23 - 3734 + 3732 23 29 - 3734 + 3732 29 35 - 4201 + 4199 35 39 - 3268 + 3266 39 42 - 3268 + 3266 42 44 - 3268 + 3266 44 46 - 3734 + 3732 46 49 - 3734 + 3732 49 53 - 1400 + 1399 @@ -6615,67 +6678,67 @@ 1 2 - 5602 + 5598 2 8 - 3734 + 3732 9 156 - 3734 + 3732 159 240 - 3734 + 3732 251 335 - 3734 + 3732 342 430 - 3734 + 3732 432 490 - 3734 + 3732 490 573 - 3734 + 3732 574 622 - 3734 + 3732 626 698 - 3734 + 3732 700 798 - 3734 + 3732 811 987 - 3734 + 3732 1096 1180 - 1400 + 1399 @@ -10599,23 +10662,23 @@ numlines - 1383783 + 1382941 element_id - 1376780 + 1375942 num_lines - 101776 + 101714 num_code - 84969 + 84917 num_comment - 59758 + 59722 @@ -10629,12 +10692,12 @@ 1 2 - 1369777 + 1368943 2 3 - 7002 + 6998 @@ -10650,12 +10713,12 @@ 1 2 - 1370711 + 1369876 2 3 - 6069 + 6065 @@ -10671,7 +10734,7 @@ 1 2 - 1376780 + 1375942 @@ -10687,27 +10750,27 @@ 1 2 - 68162 + 68120 2 3 - 12138 + 12131 3 4 - 7469 + 7465 4 21 - 7936 + 7931 29 921 - 6069 + 6065 @@ -10723,27 +10786,27 @@ 1 2 - 70496 + 70453 2 3 - 12138 + 12131 3 4 - 8403 + 8398 4 6 - 9337 + 9331 6 7 - 1400 + 1399 @@ -10759,22 +10822,22 @@ 1 2 - 69562 + 69520 2 3 - 14939 + 14930 3 4 - 10737 + 10731 4 7 - 6536 + 6532 @@ -10790,27 +10853,27 @@ 1 2 - 52755 + 52723 2 3 - 14472 + 14463 3 5 - 6536 + 6532 5 42 - 6536 + 6532 44 922 - 4668 + 4665 @@ -10826,27 +10889,27 @@ 1 2 - 52755 + 52723 2 3 - 16807 + 16796 3 5 - 6069 + 6065 5 8 - 6536 + 6532 8 12 - 2801 + 2799 @@ -10862,27 +10925,27 @@ 1 2 - 53222 + 53190 2 3 - 15873 + 15863 3 5 - 7469 + 7465 5 7 - 5135 + 5132 7 10 - 3268 + 3266 @@ -10898,32 +10961,32 @@ 1 2 - 34547 + 34526 2 3 - 9337 + 9331 3 4 - 4201 + 4199 4 6 - 4668 + 4665 6 11 - 5135 + 5132 17 2596 - 1867 + 1866 @@ -10939,32 +11002,32 @@ 1 2 - 34547 + 34526 2 3 - 9337 + 9331 3 4 - 4201 + 4199 4 6 - 4668 + 4665 6 8 - 4668 + 4665 10 38 - 2334 + 2332 @@ -10980,32 +11043,32 @@ 1 2 - 34547 + 34526 2 3 - 9337 + 9331 3 4 - 4201 + 4199 4 6 - 4668 + 4665 6 10 - 4668 + 4665 10 37 - 2334 + 2332 @@ -11647,15 +11710,15 @@ files - 123251 + 123176 id - 123251 + 123176 name - 123251 + 123176 @@ -11669,7 +11732,7 @@ 1 2 - 123251 + 123176 @@ -11685,7 +11748,7 @@ 1 2 - 123251 + 123176 @@ -11695,15 +11758,15 @@ folders - 16340 + 16330 id - 16340 + 16330 name - 16340 + 16330 @@ -11717,7 +11780,7 @@ 1 2 - 16340 + 16330 @@ -11733,7 +11796,7 @@ 1 2 - 16340 + 16330 @@ -11743,15 +11806,15 @@ containerparent - 138658 + 138574 parent - 16340 + 16330 child - 138658 + 138574 @@ -11765,32 +11828,32 @@ 1 2 - 7469 + 7465 2 3 - 3268 + 3266 3 4 - 1400 + 1399 4 12 - 1400 + 1399 23 28 - 1400 + 1399 40 67 - 1400 + 1399 @@ -11806,7 +11869,7 @@ 1 2 - 138658 + 138574 @@ -12392,15 +12455,15 @@ inmacroexpansion - 109779080 + 109779103 id - 18027694 + 18027697 inv - 2700160 + 2700159 @@ -12414,12 +12477,12 @@ 1 3 - 1582361 + 1582360 3 5 - 1077793 + 1077794 5 @@ -12429,17 +12492,17 @@ 6 7 - 4819903 + 4819904 7 8 - 6385932 + 6385934 8 9 - 2605242 + 2605243 9 @@ -12460,12 +12523,12 @@ 1 2 - 378424 + 378422 2 3 - 544104 + 544105 3 @@ -12500,7 +12563,7 @@ 11 337 - 224847 + 224845 339 @@ -12520,15 +12583,15 @@ affectedbymacroexpansion - 35689251 + 35689257 id - 5156949 + 5156948 inv - 2784762 + 2784761 @@ -12542,7 +12605,7 @@ 1 2 - 2816079 + 2816078 2 @@ -12588,7 +12651,7 @@ 1 4 - 229116 + 229115 4 @@ -12603,12 +12666,12 @@ 9 12 - 251119 + 251120 12 13 - 333984 + 333985 13 @@ -12628,7 +12691,7 @@ 16 17 - 276608 + 276609 17 @@ -13607,19 +13670,19 @@ functions - 4179363 + 4176817 id - 4179363 + 4176817 name - 1895466 + 1894311 kind - 3268 + 3266 @@ -13633,7 +13696,7 @@ 1 2 - 4179363 + 4176817 @@ -13649,7 +13712,7 @@ 1 2 - 4179363 + 4176817 @@ -13665,22 +13728,22 @@ 1 2 - 1498165 + 1497253 2 3 - 153131 + 153038 3 5 - 142860 + 142773 5 952 - 101309 + 101247 @@ -13696,7 +13759,7 @@ 1 2 - 1894999 + 1893845 2 @@ -13798,15 +13861,15 @@ function_entry_point - 1151752 + 1151517 id - 1141948 + 1141719 entry_point - 1151752 + 1151517 @@ -13820,12 +13883,12 @@ 1 2 - 1132144 + 1131921 2 3 - 9804 + 9798 @@ -13841,7 +13904,7 @@ 1 2 - 1151752 + 1151517 @@ -13851,15 +13914,15 @@ function_return_type - 4184498 + 4181950 id - 4179363 + 4176817 return_type - 817945 + 817446 @@ -13873,12 +13936,12 @@ 1 2 - 4174227 + 4171685 2 3 - 5135 + 5132 @@ -13894,22 +13957,22 @@ 1 2 - 506080 + 505771 2 3 - 211489 + 211360 3 7 - 66294 + 66254 7 2231 - 34081 + 34060 @@ -14200,33 +14263,33 @@ function_deleted - 96173 + 96115 id - 96173 + 96115 function_defaulted - 73764 + 73719 id - 73764 + 73719 function_prototyped - 4087391 + 4084901 id - 4087391 + 4084901 @@ -14379,27 +14442,27 @@ fun_decls - 4548652 + 4546348 id - 4543516 + 4541216 function - 4035569 + 4033111 type_id - 816544 + 816047 name - 1797891 + 1796796 location - 3370755 + 3368702 @@ -14413,7 +14476,7 @@ 1 2 - 4543516 + 4541216 @@ -14429,12 +14492,12 @@ 1 2 - 4538381 + 4536084 2 3 - 5135 + 5132 @@ -14450,7 +14513,7 @@ 1 2 - 4543516 + 4541216 @@ -14466,7 +14529,7 @@ 1 2 - 4543516 + 4541216 @@ -14482,17 +14545,17 @@ 1 2 - 3606521 + 3603858 2 3 - 356216 + 356466 3 7 - 72830 + 72786 @@ -14508,12 +14571,12 @@ 1 2 - 3995885 + 3993452 2 3 - 39683 + 39659 @@ -14529,7 +14592,7 @@ 1 2 - 4035569 + 4033111 @@ -14545,17 +14608,17 @@ 1 2 - 3663012 + 3660781 2 3 - 311864 + 311674 3 6 - 60692 + 60655 @@ -14571,22 +14634,22 @@ 1 2 - 431381 + 431119 2 3 - 274048 + 273882 3 6 - 63493 + 63454 6 - 2476 - 47620 + 2477 + 47591 @@ -14602,22 +14665,22 @@ 1 2 - 515417 + 515103 2 3 - 203085 + 202961 3 7 - 63026 + 62988 7 2192 - 35014 + 34993 @@ -14633,17 +14696,17 @@ 1 2 - 690024 + 689604 2 4 - 67228 + 67187 4 773 - 59291 + 59255 @@ -14659,22 +14722,22 @@ 1 2 - 595251 + 594888 2 3 - 121384 + 121310 3 7 - 63493 + 63454 7 1959 - 36415 + 36393 @@ -14690,27 +14753,27 @@ 1 2 - 1228318 + 1227570 2 3 - 267045 + 266883 3 4 - 77966 + 77918 4 7 - 146128 + 146039 7 986 - 78433 + 78385 @@ -14726,22 +14789,22 @@ 1 2 - 1407593 + 1406736 2 3 - 152197 + 152104 3 5 - 136791 + 136707 5 936 - 101309 + 101247 @@ -14757,17 +14820,17 @@ 1 2 - 1579399 + 1578437 2 4 - 134923 + 134841 4 562 - 83568 + 83517 @@ -14783,27 +14846,27 @@ 1 2 - 1236254 + 1235502 2 3 - 293190 + 293011 3 4 - 78899 + 78851 4 8 - 137257 + 137174 8 542 - 52288 + 52256 @@ -14819,17 +14882,17 @@ 1 2 - 2966451 + 2964644 2 4 - 277783 + 277614 4 55 - 126520 + 126442 @@ -14845,17 +14908,17 @@ 1 2 - 3033679 + 3031832 2 7 - 244169 + 244020 7 55 - 92905 + 92849 @@ -14871,12 +14934,12 @@ 1 2 - 3207353 + 3205399 2 18 - 163402 + 163302 @@ -14892,12 +14955,12 @@ 1 2 - 3232563 + 3230595 2 13 - 138191 + 138107 @@ -14907,22 +14970,22 @@ fun_def - 1888930 + 1888246 id - 1888930 + 1888246 fun_specialized - 26144 + 26128 id - 26144 + 26128 @@ -14940,15 +15003,15 @@ fun_decl_specifiers - 2906692 + 2904922 id - 1689579 + 1688550 name - 2801 + 2799 @@ -14962,17 +15025,17 @@ 1 2 - 491140 + 490841 2 3 - 1179764 + 1179045 3 4 - 18674 + 18663 @@ -15144,11 +15207,11 @@ fun_decl_empty_throws - 1472021 + 1471124 fun_decl - 1472021 + 1471124 @@ -15208,11 +15271,11 @@ fun_decl_empty_noexcept - 863230 + 863171 fun_decl - 863230 + 863171 @@ -15317,19 +15380,19 @@ param_decl_bind - 6995017 + 6991224 id - 6995017 + 6991224 index - 7936 + 7931 fun_decl - 3835284 + 3833415 @@ -15343,7 +15406,7 @@ 1 2 - 6995017 + 6991224 @@ -15359,7 +15422,7 @@ 1 2 - 6995017 + 6991224 @@ -15438,8 +15501,8 @@ 466 - 8215 - 8216 + 8216 + 8217 466 @@ -15519,8 +15582,8 @@ 466 - 8215 - 8216 + 8216 + 8217 466 @@ -15537,27 +15600,27 @@ 1 2 - 1973899 + 1973163 2 3 - 1061647 + 1061001 3 4 - 502812 + 502505 4 8 - 290856 + 290678 8 18 - 6069 + 6065 @@ -15573,27 +15636,27 @@ 1 2 - 1973899 + 1973163 2 3 - 1061647 + 1061001 3 4 - 502812 + 502505 4 8 - 290856 + 290678 8 18 - 6069 + 6065 @@ -15603,27 +15666,27 @@ var_decls - 8110354 + 8105882 id - 8039391 + 8034962 variable - 7027231 + 7022951 type_id - 2043462 + 2042217 name - 667614 + 667208 location - 5311974 + 5308739 @@ -15637,7 +15700,7 @@ 1 2 - 8039391 + 8034962 @@ -15653,12 +15716,12 @@ 1 2 - 7971229 + 7966841 2 3 - 68162 + 68120 @@ -15674,7 +15737,7 @@ 1 2 - 8039391 + 8034962 @@ -15690,12 +15753,12 @@ 1 2 - 8036590 + 8032162 2 3 - 2801 + 2799 @@ -15711,17 +15774,17 @@ 1 2 - 6175205 + 6170977 2 3 - 698427 + 698469 3 7 - 153598 + 153504 @@ -15737,12 +15800,12 @@ 1 2 - 6855892 + 6851717 2 4 - 171338 + 171234 @@ -15758,12 +15821,12 @@ 1 2 - 6911916 + 6907706 2 3 - 115315 + 115245 @@ -15779,17 +15842,17 @@ 1 2 - 6481934 + 6477987 2 3 - 542962 + 542631 3 4 - 2334 + 2332 @@ -15805,27 +15868,27 @@ 1 2 - 1165758 + 1165048 2 3 - 477134 + 476377 3 4 - 94773 + 95182 4 7 - 184877 + 184765 7 762 - 120917 + 120844 @@ -15841,22 +15904,22 @@ 1 2 - 1299281 + 1298490 2 3 - 452390 + 452115 3 6 - 155932 + 155837 6 724 - 135857 + 135774 @@ -15872,17 +15935,17 @@ 1 2 - 1539249 + 1538311 2 3 - 383295 + 383061 3 128 - 120917 + 120844 @@ -15898,22 +15961,22 @@ 1 2 - 1365576 + 1364744 2 3 - 404303 + 404057 3 7 - 173206 + 173100 7 592 - 100375 + 100314 @@ -15929,37 +15992,37 @@ 1 2 - 341277 + 341069 2 3 - 86836 + 86783 3 4 - 48553 + 48524 4 6 - 51821 + 51790 6 12 - 52288 + 52256 12 33 - 50421 + 50390 34 - 2384 - 36415 + 2385 + 36393 @@ -15975,37 +16038,37 @@ 1 2 - 368822 + 368597 2 3 - 77966 + 77918 3 4 - 45285 + 45258 4 6 - 49487 + 49457 6 14 - 53222 + 53190 14 56 - 50888 + 50857 56 2301 - 21942 + 21929 @@ -16021,27 +16084,27 @@ 1 2 - 457059 + 456781 2 3 - 93839 + 93782 3 5 - 46686 + 46657 5 19 - 50888 + 50857 19 1182 - 19141 + 19129 @@ -16057,32 +16120,32 @@ 1 2 - 379093 + 378862 2 3 - 90571 + 90516 3 5 - 59758 + 59722 5 9 - 51354 + 51323 9 21 - 50421 + 50390 21 1010 - 36415 + 36393 @@ -16098,17 +16161,17 @@ 1 2 - 4496363 + 4493625 2 3 - 531757 + 531433 3 - 896 - 283853 + 897 + 283680 @@ -16124,17 +16187,17 @@ 1 2 - 4885727 + 4882752 2 17 - 415508 + 415255 17 892 - 10737 + 10731 @@ -16150,12 +16213,12 @@ 1 2 - 4961826 + 4958804 2 759 - 350147 + 349934 @@ -16171,12 +16234,12 @@ 1 2 - 5302637 + 5299407 2 6 - 9337 + 9331 @@ -16186,26 +16249,26 @@ var_def - 3994952 + 3992985 id - 3994952 + 3992985 var_decl_specifiers - 378626 + 378395 id - 378626 + 378395 name - 1867 + 1866 @@ -16219,7 +16282,7 @@ 1 2 - 378626 + 378395 @@ -16271,19 +16334,19 @@ type_decls - 3283451 + 3281452 id - 3283451 + 3281452 type_id - 3233030 + 3231061 location - 3166269 + 3164340 @@ -16297,7 +16360,7 @@ 1 2 - 3283451 + 3281452 @@ -16313,7 +16376,7 @@ 1 2 - 3283451 + 3281452 @@ -16329,12 +16392,12 @@ 1 2 - 3191479 + 3189536 2 5 - 41550 + 41525 @@ -16350,12 +16413,12 @@ 1 2 - 3191479 + 3189536 2 5 - 41550 + 41525 @@ -16371,12 +16434,12 @@ 1 2 - 3113980 + 3112083 2 20 - 52288 + 52256 @@ -16392,12 +16455,12 @@ 1 2 - 3113980 + 3112083 2 20 - 52288 + 52256 @@ -16407,22 +16470,22 @@ type_def - 2641981 + 2640372 id - 2641981 + 2640372 type_decl_top - 743713 + 743260 type_decl - 743713 + 743260 @@ -16795,19 +16858,19 @@ usings - 369755 + 369530 id - 369755 + 369530 element_id - 315599 + 315407 location - 247904 + 247753 kind @@ -16825,7 +16888,7 @@ 1 2 - 369755 + 369530 @@ -16841,7 +16904,7 @@ 1 2 - 369755 + 369530 @@ -16857,7 +16920,7 @@ 1 2 - 369755 + 369530 @@ -16873,17 +16936,17 @@ 1 2 - 263311 + 263150 2 3 - 50888 + 50857 3 5 - 1400 + 1399 @@ -16899,17 +16962,17 @@ 1 2 - 263311 + 263150 2 3 - 50888 + 50857 3 5 - 1400 + 1399 @@ -16925,7 +16988,7 @@ 1 2 - 315599 + 315407 @@ -16941,22 +17004,22 @@ 1 2 - 202618 + 202495 2 4 - 10737 + 10731 4 5 - 31279 + 31260 5 11 - 3268 + 3266 @@ -16972,22 +17035,22 @@ 1 2 - 202618 + 202495 2 4 - 10737 + 10731 4 5 - 31279 + 31260 5 11 - 3268 + 3266 @@ -17003,7 +17066,7 @@ 1 2 - 247904 + 247753 @@ -17787,23 +17850,23 @@ params - 6354480 + 6350610 id - 6190611 + 6186841 function - 3491673 + 3489546 index - 7936 + 7931 type_id - 1846445 + 1845321 @@ -17817,7 +17880,7 @@ 1 2 - 6190611 + 6186841 @@ -17833,7 +17896,7 @@ 1 2 - 6190611 + 6186841 @@ -17849,12 +17912,12 @@ 1 2 - 6066892 + 6063198 2 4 - 123718 + 123643 @@ -17870,22 +17933,22 @@ 1 2 - 1867454 + 1866317 2 3 - 952868 + 952288 3 4 - 429981 + 429719 4 18 - 241368 + 241221 @@ -17901,22 +17964,22 @@ 1 2 - 1867454 + 1866317 2 3 - 952868 + 952288 3 4 - 429981 + 429719 4 18 - 241368 + 241221 @@ -17932,22 +17995,22 @@ 1 2 - 2165780 + 2164461 2 3 - 826815 + 826311 3 4 - 346412 + 346201 4 12 - 152664 + 152571 @@ -18145,7 +18208,7 @@ 6 7 - 1400 + 1399 7 @@ -18201,22 +18264,22 @@ 1 2 - 1183966 + 1183245 2 3 - 406171 + 405923 3 7 - 154064 + 153971 7 518 - 102243 + 102180 @@ -18232,22 +18295,22 @@ 1 2 - 1404792 + 1403937 2 3 - 212422 + 212293 3 7 - 147528 + 147439 7 502 - 81701 + 81651 @@ -18263,17 +18326,17 @@ 1 2 - 1420199 + 1419334 2 3 - 347346 + 347135 3 13 - 78899 + 78851 @@ -18283,11 +18346,11 @@ overrides - 125725 + 125735 new - 122752 + 122762 old @@ -18305,7 +18368,7 @@ 1 2 - 119788 + 119797 2 @@ -18713,11 +18776,11 @@ localvariables - 576945 + 576952 id - 576945 + 576952 type_id @@ -18725,7 +18788,7 @@ name - 90547 + 90549 @@ -18739,7 +18802,7 @@ 1 2 - 576945 + 576952 @@ -18755,7 +18818,7 @@ 1 2 - 576945 + 576952 @@ -18812,7 +18875,7 @@ 1 2 - 26912 + 26913 2 @@ -18848,12 +18911,12 @@ 1 2 - 57031 + 57032 2 3 - 14284 + 14285 3 @@ -18884,7 +18947,7 @@ 1 2 - 76491 + 76492 2 @@ -18894,7 +18957,7 @@ 3 1486 - 6644 + 6645 @@ -19922,31 +19985,31 @@ builtintypes - 26144 + 26128 id - 26144 + 26128 name - 26144 + 26128 kind - 26144 + 26128 size - 3268 + 3266 sign - 1400 + 1399 alignment - 2334 + 2332 @@ -19960,7 +20023,7 @@ 1 2 - 26144 + 26128 @@ -19976,7 +20039,7 @@ 1 2 - 26144 + 26128 @@ -19992,7 +20055,7 @@ 1 2 - 26144 + 26128 @@ -20008,7 +20071,7 @@ 1 2 - 26144 + 26128 @@ -20024,7 +20087,7 @@ 1 2 - 26144 + 26128 @@ -20040,7 +20103,7 @@ 1 2 - 26144 + 26128 @@ -20056,7 +20119,7 @@ 1 2 - 26144 + 26128 @@ -20072,7 +20135,7 @@ 1 2 - 26144 + 26128 @@ -20088,7 +20151,7 @@ 1 2 - 26144 + 26128 @@ -20104,7 +20167,7 @@ 1 2 - 26144 + 26128 @@ -20120,7 +20183,7 @@ 1 2 - 26144 + 26128 @@ -20136,7 +20199,7 @@ 1 2 - 26144 + 26128 @@ -20152,7 +20215,7 @@ 1 2 - 26144 + 26128 @@ -20168,7 +20231,7 @@ 1 2 - 26144 + 26128 @@ -20184,7 +20247,7 @@ 1 2 - 26144 + 26128 @@ -20343,7 +20406,7 @@ 3 4 - 2334 + 2332 @@ -20359,12 +20422,12 @@ 1 2 - 1867 + 1866 2 3 - 1400 + 1399 @@ -20479,7 +20542,7 @@ 5 6 - 1400 + 1399 @@ -20603,7 +20666,7 @@ 2 3 - 2334 + 2332 @@ -20619,7 +20682,7 @@ 3 4 - 2334 + 2332 @@ -20629,23 +20692,23 @@ derivedtypes - 3669548 + 3667313 id - 3669548 + 3667313 name - 1552788 + 1551842 kind - 2801 + 2799 type_id - 2362796 + 2361357 @@ -20659,7 +20722,7 @@ 1 2 - 3669548 + 3667313 @@ -20675,7 +20738,7 @@ 1 2 - 3669548 + 3667313 @@ -20691,7 +20754,7 @@ 1 2 - 3669548 + 3667313 @@ -20707,17 +20770,17 @@ 1 2 - 1324025 + 1323218 2 4 - 120450 + 120377 4 1153 - 108312 + 108246 @@ -20733,7 +20796,7 @@ 1 2 - 1551854 + 1550909 2 @@ -20754,17 +20817,17 @@ 1 2 - 1324025 + 1323218 2 4 - 120450 + 120377 4 1135 - 108312 + 108246 @@ -20903,22 +20966,22 @@ 1 2 - 1515439 + 1514516 2 3 - 546230 + 545897 3 4 - 218492 + 218359 4 72 - 82634 + 82584 @@ -20934,22 +20997,22 @@ 1 2 - 1526644 + 1525714 2 3 - 538760 + 538432 3 4 - 215690 + 215559 4 72 - 81701 + 81651 @@ -20965,22 +21028,22 @@ 1 2 - 1519641 + 1518715 2 3 - 549965 + 549630 3 4 - 217558 + 217425 4 6 - 75631 + 75585 @@ -20990,11 +21053,11 @@ pointerishsize - 2707342 + 2705693 id - 2707342 + 2705693 size @@ -21016,7 +21079,7 @@ 1 2 - 2707342 + 2705693 @@ -21032,7 +21095,7 @@ 1 2 - 2707342 + 2705693 @@ -21106,23 +21169,23 @@ arraysizes - 88237 + 88183 id - 88237 + 88183 num_elements - 31746 + 31727 bytesize - 33147 + 33127 alignment - 1867 + 1866 @@ -21136,7 +21199,7 @@ 1 2 - 88237 + 88183 @@ -21152,7 +21215,7 @@ 1 2 - 88237 + 88183 @@ -21168,7 +21231,7 @@ 1 2 - 88237 + 88183 @@ -21184,22 +21247,22 @@ 1 2 - 1867 + 1866 2 3 - 23810 + 23795 3 5 - 2801 + 2799 5 13 - 2801 + 2799 13 @@ -21220,17 +21283,17 @@ 1 2 - 26611 + 26595 2 3 - 2334 + 2332 3 7 - 2801 + 2799 @@ -21246,17 +21309,17 @@ 1 2 - 26611 + 26595 2 3 - 2801 + 2799 3 5 - 2334 + 2332 @@ -21272,27 +21335,27 @@ 1 2 - 1867 + 1866 2 3 - 23810 + 23795 3 4 - 3268 + 3266 4 6 - 2334 + 2332 7 16 - 1867 + 1866 @@ -21308,17 +21371,17 @@ 1 2 - 27544 + 27528 2 3 - 3734 + 3732 3 5 - 1867 + 1866 @@ -21334,12 +21397,12 @@ 1 2 - 27544 + 27528 2 3 - 4668 + 4665 4 @@ -21791,19 +21854,19 @@ usertypes - 5234008 + 5230820 id - 5234008 + 5230820 name - 1352503 + 1351680 kind - 5135 + 5132 @@ -21817,7 +21880,7 @@ 1 2 - 5234008 + 5230820 @@ -21833,7 +21896,7 @@ 1 2 - 5234008 + 5230820 @@ -21849,27 +21912,27 @@ 1 2 - 983681 + 983082 2 3 - 153598 + 153504 3 7 - 104577 + 104513 7 61 - 101776 + 101714 65 874 - 8870 + 8865 @@ -21885,17 +21948,17 @@ 1 2 - 1211977 + 1211239 2 3 - 125586 + 125509 3 7 - 14939 + 14930 @@ -22037,19 +22100,19 @@ usertypesize - 1706386 + 1705347 id - 1706386 + 1705347 size - 13539 + 13530 alignment - 2334 + 2332 @@ -22063,7 +22126,7 @@ 1 2 - 1706386 + 1705347 @@ -22079,7 +22142,7 @@ 1 2 - 1706386 + 1705347 @@ -22095,12 +22158,12 @@ 1 2 - 3268 + 3266 2 3 - 4201 + 4199 3 @@ -22151,12 +22214,12 @@ 1 2 - 10270 + 10264 2 3 - 2801 + 2799 3 @@ -22307,15 +22370,15 @@ mangled_name - 9019338 + 9013845 id - 9019338 + 9013845 mangled_name - 6061757 + 6058065 is_complete @@ -22333,7 +22396,7 @@ 1 2 - 9019338 + 9013845 @@ -22349,7 +22412,7 @@ 1 2 - 9019338 + 9013845 @@ -22365,12 +22428,12 @@ 1 2 - 5789108 + 5785583 2 874 - 272648 + 272482 @@ -22386,7 +22449,7 @@ 1 2 - 6061757 + 6058065 @@ -22439,48 +22502,48 @@ is_standard_layout_class - 1253995 + 1253232 id - 1253995 + 1253232 is_complete - 1645694 + 1644692 id - 1645694 + 1644692 is_class_template - 398234 + 397992 id - 398234 + 397992 class_instantiation - 1089659 + 1088996 to - 1089659 + 1088996 from - 168537 + 168435 @@ -22494,7 +22557,7 @@ 1 2 - 1089659 + 1088996 @@ -22510,47 +22573,47 @@ 1 2 - 59758 + 59722 2 3 - 29412 + 29394 3 4 - 15873 + 15863 4 5 - 13072 + 13064 5 6 - 9804 + 9798 6 10 - 12605 + 12597 10 16 - 13072 + 13064 16 70 - 13539 + 13530 70 84 - 1400 + 1399 @@ -22801,19 +22864,19 @@ class_template_argument_value - 495342 + 495040 type_id - 304861 + 304676 index - 1867 + 1866 arg_value - 495342 + 495040 @@ -22827,17 +22890,17 @@ 1 2 - 249772 + 249619 2 3 - 53222 + 53190 3 4 - 1867 + 1866 @@ -22853,22 +22916,22 @@ 1 2 - 189546 + 189431 2 3 - 81234 + 81184 3 4 - 12138 + 12131 4 9 - 21942 + 21929 @@ -22946,7 +23009,7 @@ 1 2 - 495342 + 495040 @@ -22962,7 +23025,7 @@ 1 2 - 495342 + 495040 @@ -22972,15 +23035,15 @@ is_proxy_class_for - 62092 + 62055 id - 62092 + 62055 templ_param_id - 62092 + 62055 @@ -22994,7 +23057,7 @@ 1 2 - 62092 + 62055 @@ -23010,7 +23073,7 @@ 1 2 - 62092 + 62055 @@ -23316,11 +23379,11 @@ is_function_template - 1402925 + 1402070 id - 1402925 + 1402070 @@ -24451,19 +24514,19 @@ routinetypeargs - 983214 + 982616 routine - 423445 + 423187 index - 7936 + 7931 type_id - 226895 + 226757 @@ -24477,27 +24540,27 @@ 1 2 - 152664 + 152571 2 3 - 133989 + 133908 3 4 - 63493 + 63454 4 5 - 45752 + 45724 5 18 - 27544 + 27528 @@ -24513,27 +24576,27 @@ 1 2 - 182543 + 182432 2 3 - 133522 + 133441 3 4 - 58824 + 58788 4 5 - 33614 + 33593 5 11 - 14939 + 14930 @@ -24574,7 +24637,7 @@ 10 11 - 1400 + 1399 13 @@ -24635,7 +24698,7 @@ 4 5 - 1400 + 1399 5 @@ -24691,27 +24754,27 @@ 1 2 - 146595 + 146505 2 3 - 30812 + 30794 3 5 - 16807 + 16796 5 12 - 18207 + 18196 12 110 - 14472 + 14463 @@ -24727,22 +24790,22 @@ 1 2 - 172739 + 172634 2 3 - 30812 + 30794 3 6 - 18674 + 18663 6 14 - 4668 + 4665 @@ -24752,19 +24815,19 @@ ptrtomembers - 37815 + 37792 id - 37815 + 37792 type_id - 37815 + 37792 class_id - 15406 + 15397 @@ -24778,7 +24841,7 @@ 1 2 - 37815 + 37792 @@ -24794,7 +24857,7 @@ 1 2 - 37815 + 37792 @@ -24810,7 +24873,7 @@ 1 2 - 37815 + 37792 @@ -24826,7 +24889,7 @@ 1 2 - 37815 + 37792 @@ -24842,12 +24905,12 @@ 1 2 - 13539 + 13530 8 9 - 1400 + 1399 28 @@ -24868,12 +24931,12 @@ 1 2 - 13539 + 13530 8 9 - 1400 + 1399 28 @@ -24888,15 +24951,15 @@ specifiers - 24743 + 24728 id - 24743 + 24728 str - 24743 + 24728 @@ -24910,7 +24973,7 @@ 1 2 - 24743 + 24728 @@ -24926,7 +24989,7 @@ 1 2 - 24743 + 24728 @@ -24936,15 +24999,15 @@ typespecifiers - 1132144 + 1131454 type_id - 1113936 + 1113258 spec_id - 3734 + 3732 @@ -24958,12 +25021,12 @@ 1 2 - 1095728 + 1095061 2 3 - 18207 + 18196 @@ -25019,15 +25082,15 @@ funspecifiers - 10305080 + 10298338 func_id - 4068249 + 4065772 spec_id - 8403 + 8398 @@ -25041,27 +25104,27 @@ 1 2 - 1357639 + 1356812 2 3 - 640536 + 640613 3 4 - 985549 + 984482 4 5 - 780129 + 779654 5 8 - 304395 + 304209 @@ -25160,8 +25223,8 @@ 466 - 6435 - 6436 + 6434 + 6435 466 @@ -25172,15 +25235,15 @@ varspecifiers - 2246080 + 2244713 var_id - 1225050 + 1224304 spec_id - 3734 + 3732 @@ -25194,22 +25257,22 @@ 1 2 - 730174 + 729730 2 3 - 202618 + 202495 3 4 - 58357 + 58322 4 5 - 233898 + 233756 @@ -25318,19 +25381,19 @@ attributes - 561636 + 561294 id - 561636 + 561294 kind - 1400 + 1399 name - 11204 + 11197 name_space @@ -25338,7 +25401,7 @@ location - 481336 + 481043 @@ -25352,7 +25415,7 @@ 1 2 - 561636 + 561294 @@ -25368,7 +25431,7 @@ 1 2 - 561636 + 561294 @@ -25384,7 +25447,7 @@ 1 2 - 561636 + 561294 @@ -25400,7 +25463,7 @@ 1 2 - 561636 + 561294 @@ -25591,7 +25654,7 @@ 1 2 - 10270 + 10264 2 @@ -25612,7 +25675,7 @@ 1 2 - 11204 + 11197 @@ -25783,17 +25846,17 @@ 1 2 - 431848 + 431585 2 3 - 20075 + 20062 3 7 - 29412 + 29394 @@ -25809,7 +25872,7 @@ 1 2 - 481336 + 481043 @@ -25825,17 +25888,17 @@ 1 2 - 433249 + 432985 2 3 - 19608 + 19596 3 4 - 28478 + 28461 @@ -25851,7 +25914,7 @@ 1 2 - 481336 + 481043 @@ -25861,27 +25924,27 @@ attribute_args - 344078 + 343868 id - 344078 + 343868 kind - 1400 + 1399 attribute - 262844 + 262684 index - 1400 + 1399 location - 327738 + 327538 @@ -25895,7 +25958,7 @@ 1 2 - 344078 + 343868 @@ -25911,7 +25974,7 @@ 1 2 - 344078 + 343868 @@ -25927,7 +25990,7 @@ 1 2 - 344078 + 343868 @@ -25943,7 +26006,7 @@ 1 2 - 344078 + 343868 @@ -26058,17 +26121,17 @@ 1 2 - 197483 + 197363 2 3 - 49487 + 49457 3 4 - 15873 + 15863 @@ -26084,12 +26147,12 @@ 1 2 - 252573 + 252419 2 3 - 10270 + 10264 @@ -26105,17 +26168,17 @@ 1 2 - 197483 + 197363 2 3 - 49487 + 49457 3 4 - 15873 + 15863 @@ -26131,17 +26194,17 @@ 1 2 - 197483 + 197363 2 3 - 49487 + 49457 3 4 - 15873 + 15863 @@ -26256,12 +26319,12 @@ 1 2 - 313732 + 313541 2 7 - 14005 + 13997 @@ -26277,12 +26340,12 @@ 1 2 - 315132 + 314941 2 3 - 12605 + 12597 @@ -26298,12 +26361,12 @@ 1 2 - 313732 + 313541 2 7 - 14005 + 13997 @@ -26319,7 +26382,7 @@ 1 2 - 327738 + 327538 @@ -26329,15 +26392,15 @@ attribute_arg_value - 25210 + 25195 arg - 25210 + 25195 value - 15873 + 15863 @@ -26351,7 +26414,7 @@ 1 2 - 25210 + 25195 @@ -26367,12 +26430,12 @@ 1 2 - 14472 + 14463 2 16 - 1400 + 1399 @@ -26430,15 +26493,15 @@ attribute_arg_constant - 318400 + 318207 arg - 318400 + 318207 constant - 318400 + 318207 @@ -26452,7 +26515,7 @@ 1 2 - 318400 + 318207 @@ -26468,7 +26531,7 @@ 1 2 - 318400 + 318207 @@ -26647,15 +26710,15 @@ funcattributes - 630265 + 629882 func_id - 443520 + 443250 spec_id - 524754 + 524435 @@ -26669,17 +26732,17 @@ 1 2 - 338476 + 338269 2 3 - 64427 + 64387 3 6 - 39683 + 39659 6 @@ -26700,12 +26763,12 @@ 1 2 - 506080 + 505771 2 17 - 18674 + 18663 @@ -26841,15 +26904,15 @@ unspecifiedtype - 9488069 + 9482291 type_id - 9488069 + 9482291 unspecified_type_id - 6490338 + 6486385 @@ -26863,7 +26926,7 @@ 1 2 - 9488069 + 9482291 @@ -26879,17 +26942,17 @@ 1 2 - 4558923 + 4556146 2 3 - 1715723 + 1714678 3 145 - 215690 + 215559 @@ -26899,19 +26962,19 @@ member - 3881037 + 3878673 parent - 545763 + 545431 index - 92905 + 92849 child - 3809607 + 3807287 @@ -26925,47 +26988,47 @@ 1 2 - 129788 + 129709 2 3 - 64894 + 64854 3 4 - 73297 + 73252 4 5 - 75165 + 75119 5 6 - 40617 + 40592 6 8 - 46686 + 46657 8 14 - 45752 + 45724 14 30 - 41550 + 41525 30 200 - 28011 + 27994 @@ -26981,52 +27044,52 @@ 1 2 - 129788 + 129709 2 3 - 64894 + 64854 3 4 - 73297 + 73252 4 5 - 76098 + 76052 5 6 - 39683 + 39659 6 7 - 24276 + 24262 7 9 - 42017 + 41992 9 17 - 43885 + 43858 17 41 - 41550 + 41525 41 200 - 10270 + 10264 @@ -27042,62 +27105,62 @@ 1 2 - 26144 + 26128 2 3 - 7002 + 6998 3 4 - 3734 + 3732 4 5 - 7936 + 7931 5 6 - 5602 + 5598 6 7 - 5602 + 5598 7 9 - 7469 + 7465 9 16 - 7002 + 6998 16 52 - 7002 + 6998 52 107 - 7002 + 6998 108 577 - 7002 + 6998 737 1162 - 1400 + 1399 @@ -27113,62 +27176,62 @@ 1 2 - 26144 + 26128 2 3 - 7002 + 6998 3 4 - 3734 + 3732 4 5 - 7936 + 7931 5 6 - 5602 + 5598 6 7 - 5602 + 5598 7 9 - 7469 + 7465 9 16 - 7002 + 6998 16 52 - 7002 + 6998 52 107 - 7002 + 6998 108 577 - 7002 + 6998 738 1163 - 1400 + 1399 @@ -27184,7 +27247,7 @@ 1 2 - 3809607 + 3807287 @@ -27200,12 +27263,12 @@ 1 2 - 3738177 + 3735900 2 3 - 71430 + 71386 @@ -28735,15 +28798,15 @@ commentbinding - 3091104 + 3089221 id - 2445431 + 2443942 element - 3014538 + 3012702 @@ -28757,12 +28820,12 @@ 1 2 - 2368399 + 2366956 2 97 - 77032 + 76985 @@ -28778,12 +28841,12 @@ 1 2 - 2937972 + 2936183 2 3 - 76565 + 76519 @@ -28793,15 +28856,15 @@ exprconv - 7032991 + 7032993 converted - 7032991 + 7032993 conversion - 7032991 + 7032993 @@ -28815,7 +28878,7 @@ 1 2 - 7032991 + 7032993 @@ -28831,7 +28894,7 @@ 1 2 - 7032991 + 7032993 @@ -29188,15 +29251,15 @@ namespaces - 12138 + 12131 id - 12138 + 12131 name - 9804 + 9798 @@ -29210,7 +29273,7 @@ 1 2 - 12138 + 12131 @@ -29226,7 +29289,7 @@ 1 2 - 8403 + 8398 2 @@ -29246,26 +29309,26 @@ namespace_inline - 1400 + 1399 id - 1400 + 1399 namespacembrs - 2388007 + 2386553 parentid - 10270 + 10264 memberid - 2388007 + 2386553 @@ -29279,7 +29342,7 @@ 1 2 - 1867 + 1866 2 @@ -29340,7 +29403,7 @@ 1 2 - 2388007 + 2386553 @@ -29836,7 +29899,7 @@ qualifyingelement - 97518 + 97537 location @@ -29950,7 +30013,7 @@ 1 2 - 58401 + 58420 2 @@ -29986,7 +30049,7 @@ 1 2 - 58401 + 58420 2 @@ -30022,7 +30085,7 @@ 1 2 - 63815 + 63834 2 @@ -30135,12 +30198,12 @@ 1 2 - 137073 + 137054 2 3 - 55684 + 55703 3 @@ -32081,7 +32144,7 @@ expr_types - 18451442 + 18451397 id @@ -32107,12 +32170,12 @@ 1 2 - 18188121 + 18188166 2 3 - 131660 + 131615 @@ -32149,17 +32212,17 @@ 2 3 - 249334 + 249345 3 4 - 102840 + 102817 4 5 - 81865 + 81877 5 @@ -32174,12 +32237,12 @@ 14 41 - 91664 + 91653 41 125325 - 44579 + 44590 @@ -33706,11 +33769,11 @@ lambdas - 21475 + 21462 expr - 21475 + 21462 default_capture @@ -33732,7 +33795,7 @@ 1 2 - 21475 + 21462 @@ -33748,7 +33811,7 @@ 1 2 - 21475 + 21462 @@ -33822,15 +33885,15 @@ lambda_capture - 28011 + 27994 id - 28011 + 27994 lambda - 20541 + 20529 index @@ -33838,7 +33901,7 @@ field - 28011 + 27994 captured_by_reference @@ -33850,7 +33913,7 @@ location - 2801 + 2799 @@ -33864,7 +33927,7 @@ 1 2 - 28011 + 27994 @@ -33880,7 +33943,7 @@ 1 2 - 28011 + 27994 @@ -33896,7 +33959,7 @@ 1 2 - 28011 + 27994 @@ -33912,7 +33975,7 @@ 1 2 - 28011 + 27994 @@ -33928,7 +33991,7 @@ 1 2 - 28011 + 27994 @@ -33944,7 +34007,7 @@ 1 2 - 28011 + 27994 @@ -33960,12 +34023,12 @@ 1 2 - 13072 + 13064 2 3 - 7469 + 7465 @@ -33981,12 +34044,12 @@ 1 2 - 13072 + 13064 2 3 - 7469 + 7465 @@ -34002,12 +34065,12 @@ 1 2 - 13072 + 13064 2 3 - 7469 + 7465 @@ -34023,7 +34086,7 @@ 1 2 - 20541 + 20529 @@ -34039,7 +34102,7 @@ 1 2 - 20541 + 20529 @@ -34055,12 +34118,12 @@ 1 2 - 13072 + 13064 2 3 - 7469 + 7465 @@ -34192,7 +34255,7 @@ 1 2 - 28011 + 27994 @@ -34208,7 +34271,7 @@ 1 2 - 28011 + 27994 @@ -34224,7 +34287,7 @@ 1 2 - 28011 + 27994 @@ -34240,7 +34303,7 @@ 1 2 - 28011 + 27994 @@ -34256,7 +34319,7 @@ 1 2 - 28011 + 27994 @@ -34272,7 +34335,7 @@ 1 2 - 28011 + 27994 @@ -34480,7 +34543,7 @@ 8 9 - 1867 + 1866 14 @@ -34501,7 +34564,7 @@ 8 9 - 1867 + 1866 14 @@ -34522,7 +34585,7 @@ 1 2 - 2801 + 2799 @@ -34538,7 +34601,7 @@ 8 9 - 1867 + 1866 14 @@ -34559,7 +34622,7 @@ 1 2 - 2801 + 2799 @@ -34575,7 +34638,7 @@ 1 2 - 2801 + 2799 @@ -36318,11 +36381,11 @@ stmt_decl_bind - 580842 + 580849 stmt - 541060 + 541066 num @@ -36330,7 +36393,7 @@ decl - 580738 + 580745 @@ -36344,7 +36407,7 @@ 1 2 - 520371 + 520377 2 @@ -36365,7 +36428,7 @@ 1 2 - 520371 + 520377 2 @@ -36568,7 +36631,7 @@ 1 2 - 580700 + 580707 2 @@ -36589,7 +36652,7 @@ 1 2 - 580738 + 580745 @@ -36599,11 +36662,11 @@ stmt_decl_entry_bind - 580842 + 580849 stmt - 541060 + 541066 num @@ -36611,7 +36674,7 @@ decl_entry - 580784 + 580791 @@ -36625,7 +36688,7 @@ 1 2 - 520371 + 520377 2 @@ -36646,7 +36709,7 @@ 1 2 - 520371 + 520377 2 @@ -36849,7 +36912,7 @@ 1 2 - 580763 + 580770 3 @@ -36870,7 +36933,7 @@ 1 2 - 580784 + 580791 @@ -36880,15 +36943,15 @@ blockscope - 1410861 + 1410469 block - 1410861 + 1410469 enclosing - 1295546 + 1295224 @@ -36902,7 +36965,7 @@ 1 2 - 1410861 + 1410469 @@ -36918,12 +36981,12 @@ 1 2 - 1230185 + 1229903 2 13 - 65360 + 65321 @@ -37119,19 +37182,19 @@ preprocdirects - 4190567 + 4188015 id - 4190567 + 4188015 kind - 5135 + 5132 location - 4149950 + 4147423 @@ -37145,7 +37208,7 @@ 1 2 - 4190567 + 4188015 @@ -37161,7 +37224,7 @@ 1 2 - 4190567 + 4188015 @@ -37309,7 +37372,7 @@ 1 2 - 4149483 + 4146956 88 @@ -37330,7 +37393,7 @@ 1 2 - 4149950 + 4147423 @@ -37340,15 +37403,15 @@ preprocpair - 1431403 + 1430532 begin - 1197038 + 1196309 elseelifend - 1431403 + 1430532 @@ -37362,17 +37425,17 @@ 1 2 - 978546 + 977950 2 3 - 208221 + 208094 3 11 - 10270 + 10264 @@ -37388,7 +37451,7 @@ 1 2 - 1431403 + 1430532 @@ -37398,22 +37461,22 @@ preproctrue - 767056 + 766589 branch - 767056 + 766589 preprocfalse - 331473 + 331271 branch - 331473 + 331271 @@ -37566,15 +37629,15 @@ includes - 313265 + 313074 id - 313265 + 313074 included - 117182 + 117111 @@ -37588,7 +37651,7 @@ 1 2 - 313265 + 313074 @@ -37604,32 +37667,32 @@ 1 2 - 61159 + 61121 2 3 - 21942 + 21929 3 4 - 12605 + 12597 4 6 - 10270 + 10264 6 14 - 8870 + 8865 14 47 - 2334 + 2332 diff --git a/cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/old.dbscheme b/cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/old.dbscheme new file mode 100644 index 000000000000..e51fad7a2436 --- /dev/null +++ b/cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/old.dbscheme @@ -0,0 +1,2323 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/semmlecode.cpp.dbscheme new file mode 100644 index 000000000000..f0156f5f88ab --- /dev/null +++ b/cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/semmlecode.cpp.dbscheme @@ -0,0 +1,2339 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/upgrade.properties b/cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/upgrade.properties new file mode 100644 index 000000000000..08e1dc42eb29 --- /dev/null +++ b/cpp/ql/lib/upgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/upgrade.properties @@ -0,0 +1,2 @@ +description: Implement compilation_build_mode/2 +compatibility: backwards From 4dab0390c996183967232630bbfea667c50588be Mon Sep 17 00:00:00 2001 From: Calum Grant Date: Fri, 22 Nov 2024 16:10:23 +0000 Subject: [PATCH 27/35] C++: Update expected output --- .../ImplicitFunctionDeclaration.expected | 12 +++---- .../MistypedFunctionArguments.expected | 36 +++++++++---------- .../TooFewArguments.expected | 4 +-- .../TooManyArguments.expected | 4 +-- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/ImplicitFunctionDeclaration.expected b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/ImplicitFunctionDeclaration.expected index 8547894e769b..d3e0ecbd591b 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/ImplicitFunctionDeclaration.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/ImplicitFunctionDeclaration.expected @@ -1,9 +1,9 @@ | test.c:28:3:28:12 | call to undeclared | Function call implicitly declares 'undeclared'. | | test.c:31:3:31:19 | call to not_yet_declared1 | Function call implicitly declares 'not_yet_declared1'. | | test.c:32:3:32:19 | call to not_yet_declared2 | Function call implicitly declares 'not_yet_declared2'. | -| test.c:43:3:43:27 | call to not_declared_defined_with | Function call implicitly declares 'not_declared_defined_with'. | -| test.c:54:3:54:21 | call to defined_with_double | Function call implicitly declares 'defined_with_double'. | -| test.c:66:3:66:22 | call to defined_with_ptr_ptr | Function call implicitly declares 'defined_with_ptr_ptr'. | -| test.c:68:3:68:22 | call to defined_with_ptr_arr | Function call implicitly declares 'defined_with_ptr_arr'. | -| test.c:132:3:132:22 | call to implicit_declaration | Function call implicitly declares 'implicit_declaration'. | -| test.c:133:3:133:30 | call to implicit_declaration_k_and_r | Function call implicitly declares 'implicit_declaration_k_and_r'. | +| test.c:44:3:44:27 | call to not_declared_defined_with | Function call implicitly declares 'not_declared_defined_with'. | +| test.c:55:3:55:21 | call to defined_with_double | Function call implicitly declares 'defined_with_double'. | +| test.c:67:3:67:22 | call to defined_with_ptr_ptr | Function call implicitly declares 'defined_with_ptr_ptr'. | +| test.c:69:3:69:22 | call to defined_with_ptr_arr | Function call implicitly declares 'defined_with_ptr_arr'. | +| test.c:133:3:133:22 | call to implicit_declaration | Function call implicitly declares 'implicit_declaration'. | +| test.c:134:3:134:30 | call to implicit_declaration_k_and_r | Function call implicitly declares 'implicit_declaration_k_and_r'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected index b6015dad4564..d067430aba9c 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected @@ -1,18 +1,18 @@ -| test.c:33:3:33:19 | call to not_yet_declared2 | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:32:3:32:3 | not_yet_declared2 | not_yet_declared2 | test.c:33:21:33:22 | ca | ca | file://:0:0:0:0 | int[4] | int[4] | test.c:76:24:76:26 | (unnamed parameter 0) | int (unnamed parameter 0) | -| test.c:33:3:33:19 | call to not_yet_declared2 | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:76:6:76:22 | not_yet_declared2 | not_yet_declared2 | test.c:33:21:33:22 | ca | ca | file://:0:0:0:0 | int[4] | int[4] | test.c:76:24:76:26 | (unnamed parameter 0) | int (unnamed parameter 0) | -| test.c:40:3:40:29 | call to declared_empty_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:77:6:77:32 | declared_empty_defined_with | declared_empty_defined_with | test.c:40:31:40:32 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:77:38:77:38 | x | int x | -| test.c:44:3:44:27 | call to not_declared_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:80:6:80:30 | not_declared_defined_with | not_declared_defined_with | test.c:44:29:44:31 | 4 | 4 | file://:0:0:0:0 | long long | long long | test.c:80:36:80:36 | x | int x | -| test.c:44:3:44:27 | call to not_declared_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:80:6:80:30 | not_declared_defined_with | not_declared_defined_with | test.c:44:37:44:42 | 2500000000.0 | 2500000000.0 | file://:0:0:0:0 | float | float | test.c:80:50:80:50 | z | int z | -| test.c:47:3:47:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:5:6:5:27 | declared_with_pointers | declared_with_pointers | test.c:47:26:47:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:92:34:92:34 | x | int * x | -| test.c:47:3:47:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:5:6:5:27 | declared_with_pointers | declared_with_pointers | test.c:47:34:47:34 | 0 | 0 | file://:0:0:0:0 | int | int | test.c:92:43:92:43 | y | void * y | -| test.c:47:3:47:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:92:6:92:27 | declared_with_pointers | declared_with_pointers | test.c:47:26:47:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:92:34:92:34 | x | int * x | -| test.c:47:3:47:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:92:6:92:27 | declared_with_pointers | declared_with_pointers | test.c:47:34:47:34 | 0 | 0 | file://:0:0:0:0 | int | int | test.c:92:43:92:43 | y | void * y | -| test.c:49:3:49:21 | call to declared_with_array | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:6:6:6:24 | declared_with_array | declared_with_array | test.c:49:23:49:24 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:93:31:93:31 | a | char[6] a | -| test.c:49:3:49:21 | call to declared_with_array | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:93:6:93:24 | declared_with_array | declared_with_array | test.c:49:23:49:24 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:93:31:93:31 | a | char[6] a | -| test.c:51:3:51:20 | call to defined_with_float | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:95:7:95:24 | defined_with_float | defined_with_float | test.c:51:22:51:24 | 2.0 | 2.0 | file://:0:0:0:0 | float | float | test.c:95:32:95:32 | f | float f | -| test.c:52:3:52:20 | call to defined_with_float | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:95:7:95:24 | defined_with_float | defined_with_float | test.c:52:22:52:24 | 2.0 | 2.0 | file://:0:0:0:0 | double | double | test.c:95:32:95:32 | f | float f | -| test.c:55:3:55:21 | call to defined_with_double | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:99:8:99:26 | defined_with_double | defined_with_double | test.c:55:23:55:25 | 99 | 99 | file://:0:0:0:0 | int | int | test.c:99:35:99:35 | d | double d | -| test.c:57:3:57:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:103:11:103:32 | defined_with_long_long | defined_with_long_long | test.c:57:26:57:28 | 99 | 99 | file://:0:0:0:0 | int | int | test.c:103:44:103:45 | ll | long long ll | -| test.c:58:3:58:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:103:11:103:32 | defined_with_long_long | defined_with_long_long | test.c:58:26:58:26 | 3 | 3 | file://:0:0:0:0 | int | int | test.c:103:44:103:45 | ll | long long ll | -| test.c:60:3:60:21 | call to defined_with_double | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:99:8:99:26 | defined_with_double | defined_with_double | test.c:60:23:60:25 | 2 | 2 | file://:0:0:0:0 | long long | long long | test.c:99:35:99:35 | d | double d | -| test.c:61:3:61:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:103:11:103:32 | defined_with_long_long | defined_with_long_long | test.c:61:26:61:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:103:44:103:45 | ll | long long ll | +| test.c:33:3:33:19 | call to not_yet_declared2 | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:32:3:32:3 | not_yet_declared2 | not_yet_declared2 | test.c:33:21:33:22 | ca | ca | file://:0:0:0:0 | int[4] | int[4] | test.c:77:24:77:26 | (unnamed parameter 0) | int (unnamed parameter 0) | +| test.c:33:3:33:19 | call to not_yet_declared2 | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:77:6:77:22 | not_yet_declared2 | not_yet_declared2 | test.c:33:21:33:22 | ca | ca | file://:0:0:0:0 | int[4] | int[4] | test.c:77:24:77:26 | (unnamed parameter 0) | int (unnamed parameter 0) | +| test.c:41:3:41:29 | call to declared_empty_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:78:6:78:32 | declared_empty_defined_with | declared_empty_defined_with | test.c:41:31:41:32 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:78:38:78:38 | x | int x | +| test.c:45:3:45:27 | call to not_declared_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:81:6:81:30 | not_declared_defined_with | not_declared_defined_with | test.c:45:29:45:31 | 4 | 4 | file://:0:0:0:0 | long long | long long | test.c:81:36:81:36 | x | int x | +| test.c:45:3:45:27 | call to not_declared_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:81:6:81:30 | not_declared_defined_with | not_declared_defined_with | test.c:45:37:45:42 | 2500000000.0 | 2500000000.0 | file://:0:0:0:0 | float | float | test.c:81:50:81:50 | z | int z | +| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:5:6:5:27 | declared_with_pointers | declared_with_pointers | test.c:48:26:48:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:93:34:93:34 | x | int * x | +| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:5:6:5:27 | declared_with_pointers | declared_with_pointers | test.c:48:34:48:34 | 0 | 0 | file://:0:0:0:0 | int | int | test.c:93:43:93:43 | y | void * y | +| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:93:6:93:27 | declared_with_pointers | declared_with_pointers | test.c:48:26:48:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:93:34:93:34 | x | int * x | +| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:93:6:93:27 | declared_with_pointers | declared_with_pointers | test.c:48:34:48:34 | 0 | 0 | file://:0:0:0:0 | int | int | test.c:93:43:93:43 | y | void * y | +| test.c:50:3:50:21 | call to declared_with_array | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:6:6:6:24 | declared_with_array | declared_with_array | test.c:50:23:50:24 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:94:31:94:31 | a | char[6] a | +| test.c:50:3:50:21 | call to declared_with_array | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:94:6:94:24 | declared_with_array | declared_with_array | test.c:50:23:50:24 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:94:31:94:31 | a | char[6] a | +| test.c:52:3:52:20 | call to defined_with_float | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:96:7:96:24 | defined_with_float | defined_with_float | test.c:52:22:52:24 | 2.0 | 2.0 | file://:0:0:0:0 | float | float | test.c:96:32:96:32 | f | float f | +| test.c:53:3:53:20 | call to defined_with_float | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:96:7:96:24 | defined_with_float | defined_with_float | test.c:53:22:53:24 | 2.0 | 2.0 | file://:0:0:0:0 | double | double | test.c:96:32:96:32 | f | float f | +| test.c:56:3:56:21 | call to defined_with_double | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:100:8:100:26 | defined_with_double | defined_with_double | test.c:56:23:56:25 | 99 | 99 | file://:0:0:0:0 | int | int | test.c:100:35:100:35 | d | double d | +| test.c:58:3:58:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:58:26:58:28 | 99 | 99 | file://:0:0:0:0 | int | int | test.c:104:44:104:45 | ll | long long ll | +| test.c:59:3:59:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:59:26:59:26 | 3 | 3 | file://:0:0:0:0 | int | int | test.c:104:44:104:45 | ll | long long ll | +| test.c:61:3:61:21 | call to defined_with_double | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:100:8:100:26 | defined_with_double | defined_with_double | test.c:61:23:61:25 | 2 | 2 | file://:0:0:0:0 | long long | long long | test.c:100:35:100:35 | d | double d | +| test.c:62:3:62:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:62:26:62:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:104:44:104:45 | ll | long long ll | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooFewArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooFewArguments.expected index 956729115d75..90468d3a9bfc 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooFewArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooFewArguments.expected @@ -1,2 +1,2 @@ -| test.c:36:3:36:29 | call to declared_empty_defined_with | This call has fewer arguments than required by $@. | test.c:77:6:77:32 | declared_empty_defined_with | declared_empty_defined_with | -| test.c:87:10:87:20 | call to dereference | This call has fewer arguments than required by $@. | test.c:90:5:90:15 | dereference | dereference | +| test.c:37:3:37:29 | call to declared_empty_defined_with | This call has fewer arguments than required by $@. | test.c:78:6:78:32 | declared_empty_defined_with | declared_empty_defined_with | +| test.c:88:10:88:20 | call to dereference | This call has fewer arguments than required by $@. | test.c:91:5:91:15 | dereference | dereference | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooManyArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooManyArguments.expected index bc64434578b2..6eff27c3adb3 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooManyArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/TooManyArguments.expected @@ -1,2 +1,2 @@ -| test.c:41:3:41:29 | call to declared_empty_defined_with | This call has more arguments than required by $@. | test.c:77:6:77:32 | declared_empty_defined_with | declared_empty_defined_with | -| test.c:72:3:72:28 | call to declared_and_defined_empty | This call has more arguments than required by $@. | test.c:114:6:114:31 | declared_and_defined_empty | declared_and_defined_empty | +| test.c:42:3:42:29 | call to declared_empty_defined_with | This call has more arguments than required by $@. | test.c:78:6:78:32 | declared_empty_defined_with | declared_empty_defined_with | +| test.c:73:3:73:28 | call to declared_and_defined_empty | This call has more arguments than required by $@. | test.c:115:6:115:31 | declared_and_defined_empty | declared_and_defined_empty | From b32e578580d707346807ac5408aa1757dac91c8d Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 22 Nov 2024 17:18:32 +0100 Subject: [PATCH 28/35] Rust: accept test changes --- .../FormatArgsExpr/FormatArgsExpr_getTemplate.expected | 2 +- .../security/CWE-089/CONSISTENCY/DataFlowConsistency.expected | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/DataFlowConsistency.expected diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected index 6c4f70308109..1b201bbf36f2 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected @@ -3,5 +3,5 @@ | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | gen_format_args_expr.rs:6:18:6:30 | "{} foo {:?}" | | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | gen_format_args_expr.rs:7:18:7:32 | "{b} foo {a:?}" | | gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | gen_format_args_expr.rs:9:18:9:27 | "{x}, {y}" | -| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | gen_format_argument.rs:5:14:5:47 | "Value {value:#width$.precision$}\\n" | +| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | gen_format_argument.rs:5:14:5:47 | "Value {value:#width$.precisio... | | gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | gen_format_argument.rs:7:14:7:31 | "Value {0:#1$.2$}\\n" | diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/DataFlowConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/DataFlowConsistency.expected deleted file mode 100644 index d9a60435a6f9..000000000000 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/DataFlowConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -uniqueNodeToString -| sqlx.rs:154:13:154:81 | (no string representation) | Node should have one toString but has 0. | -| sqlx.rs:156:17:156:86 | (no string representation) | Node should have one toString but has 0. | From 7f84cf6d72e23e78192de040aad73c8671e93fc4 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 22 Nov 2024 18:56:18 +0100 Subject: [PATCH 29/35] Add test case --- .../CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected | 2 ++ .../security/CWE-327/semmle/tests/WeakHashing.java | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected b/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected index da6f6312a896..a9365ae398dd 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected @@ -4,9 +4,11 @@ nodes | WeakHashing.java:15:55:15:83 | getProperty(...) | semmle.label | getProperty(...) | | WeakHashing.java:18:56:18:95 | getProperty(...) | semmle.label | getProperty(...) | | WeakHashing.java:21:56:21:91 | getProperty(...) | semmle.label | getProperty(...) | +| WeakHashing.java:30:55:30:64 | "SHA3-512" | semmle.label | "SHA3-512" | subpaths #select | Test.java:34:21:34:53 | new SecretKeySpec(...) | Test.java:34:48:34:52 | "foo" | Test.java:34:48:34:52 | "foo" | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | Test.java:34:48:34:52 | "foo" | foo | | WeakHashing.java:15:29:15:84 | getInstance(...) | WeakHashing.java:15:55:15:83 | getProperty(...) | WeakHashing.java:15:55:15:83 | getProperty(...) | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:15:55:15:83 | getProperty(...) | MD5 | | WeakHashing.java:18:30:18:96 | getInstance(...) | WeakHashing.java:18:56:18:95 | getProperty(...) | WeakHashing.java:18:56:18:95 | getProperty(...) | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:18:56:18:95 | getProperty(...) | MD5 | | WeakHashing.java:21:30:21:92 | getInstance(...) | WeakHashing.java:21:56:21:91 | getProperty(...) | WeakHashing.java:21:56:21:91 | getProperty(...) | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:21:56:21:91 | getProperty(...) | MD5 | +| WeakHashing.java:30:29:30:65 | getInstance(...) | WeakHashing.java:30:55:30:64 | "SHA3-512" | WeakHashing.java:30:55:30:64 | "SHA3-512" | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:30:55:30:64 | "SHA3-512" | SHA3-512 | diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java b/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java index 6a3565fc1412..8858576cb904 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java @@ -25,5 +25,8 @@ void hashing() throws NoSuchAlgorithmException, IOException { // OK: Property does not exist and default is secure MessageDigest ok2 = MessageDigest.getInstance(props.getProperty("hashAlg3", "SHA-256")); + + // GOOD: Using a strong hashing algorithm + MessageDigest ok3 = MessageDigest.getInstance("SHA3-512"); } -} \ No newline at end of file +} From c6eaed343d25275580fa228c0c2013dc1a0af206 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 22 Nov 2024 18:43:48 +0100 Subject: [PATCH 30/35] Java: add SHA3 family to list of secure crypto algorithms --- java/ql/lib/semmle/code/java/security/Encryption.qll | 2 +- java/ql/src/change-notes/2024-11-22-sha3.md | 4 ++++ .../CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected | 2 -- 3 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 java/ql/src/change-notes/2024-11-22-sha3.md diff --git a/java/ql/lib/semmle/code/java/security/Encryption.qll b/java/ql/lib/semmle/code/java/security/Encryption.qll index 6fc7f6b7d16a..80b41233bde3 100644 --- a/java/ql/lib/semmle/code/java/security/Encryption.qll +++ b/java/ql/lib/semmle/code/java/security/Encryption.qll @@ -250,7 +250,7 @@ string getASecureAlgorithmName() { result = [ "RSA", "SHA-?256", "SHA-?512", "CCM", "GCM", "AES(?![^a-zA-Z](ECB|CBC/PKCS[57]Padding))", - "Blowfish", "ECIES" + "Blowfish", "ECIES", "SHA3-(224|256|384|512)" ] } diff --git a/java/ql/src/change-notes/2024-11-22-sha3.md b/java/ql/src/change-notes/2024-11-22-sha3.md new file mode 100644 index 000000000000..61dbc35162e1 --- /dev/null +++ b/java/ql/src/change-notes/2024-11-22-sha3.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added SHA3 to the list of secure hashing algorithms. As a result the `java/potentially-weak-cryptographic-algorithm` query should no longer flag up uses of SHA3. diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected b/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected index a9365ae398dd..da6f6312a896 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected @@ -4,11 +4,9 @@ nodes | WeakHashing.java:15:55:15:83 | getProperty(...) | semmle.label | getProperty(...) | | WeakHashing.java:18:56:18:95 | getProperty(...) | semmle.label | getProperty(...) | | WeakHashing.java:21:56:21:91 | getProperty(...) | semmle.label | getProperty(...) | -| WeakHashing.java:30:55:30:64 | "SHA3-512" | semmle.label | "SHA3-512" | subpaths #select | Test.java:34:21:34:53 | new SecretKeySpec(...) | Test.java:34:48:34:52 | "foo" | Test.java:34:48:34:52 | "foo" | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | Test.java:34:48:34:52 | "foo" | foo | | WeakHashing.java:15:29:15:84 | getInstance(...) | WeakHashing.java:15:55:15:83 | getProperty(...) | WeakHashing.java:15:55:15:83 | getProperty(...) | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:15:55:15:83 | getProperty(...) | MD5 | | WeakHashing.java:18:30:18:96 | getInstance(...) | WeakHashing.java:18:56:18:95 | getProperty(...) | WeakHashing.java:18:56:18:95 | getProperty(...) | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:18:56:18:95 | getProperty(...) | MD5 | | WeakHashing.java:21:30:21:92 | getInstance(...) | WeakHashing.java:21:56:21:91 | getProperty(...) | WeakHashing.java:21:56:21:91 | getProperty(...) | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:21:56:21:91 | getProperty(...) | MD5 | -| WeakHashing.java:30:29:30:65 | getInstance(...) | WeakHashing.java:30:55:30:64 | "SHA3-512" | WeakHashing.java:30:55:30:64 | "SHA3-512" | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:30:55:30:64 | "SHA3-512" | SHA3-512 | From f8d623e9051fa5b09775d922b431e2fadf1132c0 Mon Sep 17 00:00:00 2001 From: Napalys Date: Mon, 25 Nov 2024 09:08:51 +0100 Subject: [PATCH 31/35] JS: Bumped TS version to 5.7.2 --- javascript/extractor/lib/typescript/package-lock.json | 8 ++++---- javascript/extractor/lib/typescript/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/javascript/extractor/lib/typescript/package-lock.json b/javascript/extractor/lib/typescript/package-lock.json index 47015f8f6e31..1978e3963246 100644 --- a/javascript/extractor/lib/typescript/package-lock.json +++ b/javascript/extractor/lib/typescript/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "typescript-parser-wrapper", "dependencies": { - "typescript": "^5.7.1-rc" + "typescript": "^5.7.2" }, "devDependencies": { "@types/node": "18.15.3" @@ -20,9 +20,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.7.1-rc", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.1-rc.tgz", - "integrity": "sha512-d6m+HT78uZtyUbXbUyIvuJ6kXCTSJEfy+2pZSUwt9d6JZ0kOMNDwhIILfV5FnaxMwVa48Yfw4sK0ISC4Qyq5tw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", diff --git a/javascript/extractor/lib/typescript/package.json b/javascript/extractor/lib/typescript/package.json index 730a3b5f53e4..9d77f4ab740a 100644 --- a/javascript/extractor/lib/typescript/package.json +++ b/javascript/extractor/lib/typescript/package.json @@ -2,7 +2,7 @@ "name": "typescript-parser-wrapper", "private": true, "dependencies": { - "typescript": "^5.7.1-rc" + "typescript": "^5.7.2" }, "scripts": { "build": "tsc --project tsconfig.json", From 3d467b24f8f40f0e0d3f2bdfffbc7249fdd72135 Mon Sep 17 00:00:00 2001 From: Napalys Date: Mon, 25 Nov 2024 09:30:01 +0100 Subject: [PATCH 32/35] Added change notes --- 2024-11-25-ts57.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 2024-11-25-ts57.md diff --git a/2024-11-25-ts57.md b/2024-11-25-ts57.md new file mode 100644 index 000000000000..3a92872d6d60 --- /dev/null +++ b/2024-11-25-ts57.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* Added support for TypeScript 5.7. From 5eb91fd5168ae675bf1c8f6f89ae38641cc4da14 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Mon, 25 Nov 2024 11:25:45 +0100 Subject: [PATCH 33/35] Drop SHA3-224 Drop the 224bits variant as it looks like SHA3-224 may be deprecated soon based on NIST's most recent draft revision of Transitioning the Use of Cryptographic Algorithms and Key Lengths --- java/ql/lib/semmle/code/java/security/Encryption.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/security/Encryption.qll b/java/ql/lib/semmle/code/java/security/Encryption.qll index 80b41233bde3..e6608d85872a 100644 --- a/java/ql/lib/semmle/code/java/security/Encryption.qll +++ b/java/ql/lib/semmle/code/java/security/Encryption.qll @@ -250,7 +250,7 @@ string getASecureAlgorithmName() { result = [ "RSA", "SHA-?256", "SHA-?512", "CCM", "GCM", "AES(?![^a-zA-Z](ECB|CBC/PKCS[57]Padding))", - "Blowfish", "ECIES", "SHA3-(224|256|384|512)" + "Blowfish", "ECIES", "SHA3-(256|384|512)" ] } From 0d02126f12b469dc292da390ec51fee3c212c1e1 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 25 Nov 2024 14:07:50 +0100 Subject: [PATCH 34/35] Generate ParamBase, superclass of Param and SelfParam --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 256 +++++++++++------- rust/ql/.generated.list | 27 +- rust/ql/.gitattributes | 3 + .../internal/generated/CfgNodes.qll | 83 +++--- rust/ql/lib/codeql/rust/elements.qll | 1 + rust/ql/lib/codeql/rust/elements/Param.qll | 10 +- .../ql/lib/codeql/rust/elements/ParamBase.qll | 14 + .../ql/lib/codeql/rust/elements/SelfParam.qll | 10 +- .../rust/elements/internal/ParamBaseImpl.qll | 19 ++ .../rust/elements/internal/ParamImpl.qll | 6 +- .../rust/elements/internal/SelfParamImpl.qll | 6 +- .../elements/internal/generated/Param.qll | 41 +-- .../elements/internal/generated/ParamBase.qll | 55 ++++ .../internal/generated/ParentChild.qll | 80 +++--- .../rust/elements/internal/generated/Raw.qll | 104 +++---- .../elements/internal/generated/SelfParam.qll | 43 +-- .../elements/internal/generated/Synth.qll | 41 ++- rust/ql/lib/rust.dbscheme | 89 +++--- .../generated/.generated_tests.list | 4 +- .../generated/Param/Param.expected | 1 + .../extractor-tests/generated/Param/Param.ql | 8 +- .../generated/Param/Param_getPat.expected | 1 + .../generated/Param/Param_getTy.expected | 1 + .../generated/Param/gen_param.rs | 6 +- .../generated/SelfParam/SelfParam.expected | 1 + .../generated/SelfParam/SelfParam.ql | 10 +- .../SelfParam/SelfParam_getName.expected | 1 + .../generated/SelfParam/gen_self_param.rs | 6 +- rust/schema/annotations.py | 31 ++- 30 files changed, 547 insertions(+), 413 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/elements/ParamBase.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/ParamBaseImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/ParamBase.qll diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 0f781aae8dab..3ff79b9b0411 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 7a5bbe75eae6069f4f255db13787a3575e706742af1f57122c02d46895de9a1b 7a5bbe75eae6069f4f255db13787a3575e706742af1f57122c02d46895de9a1b +top.rs 4504ceb7e13020d5b19a4b938395fa2d5d804a962743985efe8563903448ae0c 4504ceb7e13020d5b19a4b938395fa2d5d804a962743985efe8563903448ae0c diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index eb1f16f8cc66..a3e1d7aac803 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -1501,57 +1501,35 @@ impl From> for trap::Label { } #[derive(Debug)] -pub struct Param { - pub id: trap::TrapId, - pub attrs: Vec>, - pub pat: Option>, - pub ty: Option>, -} - -impl trap::TrapEntry for Param { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("params", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("param_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.pat { - out.add_tuple("param_pats", vec![id.into(), v.into()]); - } - if let Some(v) = self.ty { - out.add_tuple("param_ties", vec![id.into(), v.into()]); - } - } +pub struct ParamBase { + _unused: () } -impl trap::TrapClass for Param { - fn class_name() -> &'static str { "Param" } +impl trap::TrapClass for ParamBase { + fn class_name() -> &'static str { "ParamBase" } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Param is a subclass of AstNode +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ParamBase is a subclass of AstNode unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Param is a subclass of Element +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ParamBase is a subclass of Element unsafe { Self::from_untyped(value.as_untyped()) } } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Param is a subclass of Locatable +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ParamBase is a subclass of Locatable unsafe { Self::from_untyped(value.as_untyped()) } @@ -2203,72 +2181,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct SelfParam { - pub id: trap::TrapId, - pub attrs: Vec>, - pub is_mut: bool, - pub lifetime: Option>, - pub name: Option>, - pub ty: Option>, -} - -impl trap::TrapEntry for SelfParam { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("self_params", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("self_param_attrs", vec![id.into(), i.into(), v.into()]); - } - if self.is_mut { - out.add_tuple("self_param_is_mut", vec![id.into()]); - } - if let Some(v) = self.lifetime { - out.add_tuple("self_param_lifetimes", vec![id.into(), v.into()]); - } - if let Some(v) = self.name { - out.add_tuple("self_param_names", vec![id.into(), v.into()]); - } - if let Some(v) = self.ty { - out.add_tuple("self_param_ties", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for SelfParam { - fn class_name() -> &'static str { "SelfParam" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme SelfParam is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme SelfParam is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme SelfParam is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct SourceFile { pub id: trap::TrapId, @@ -5862,6 +5774,73 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct Param { + pub id: trap::TrapId, + pub attrs: Vec>, + pub ty: Option>, + pub pat: Option>, +} + +impl trap::TrapEntry for Param { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("params", vec![id.into()]); + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("param_base_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.ty { + out.add_tuple("param_base_ties", vec![id.into(), v.into()]); + } + if let Some(v) = self.pat { + out.add_tuple("param_pats", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for Param { + fn class_name() -> &'static str { "Param" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Param is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Param is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Param is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Param is a subclass of ParamBase + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct ParenExpr { pub id: trap::TrapId, @@ -7053,6 +7032,81 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct SelfParam { + pub id: trap::TrapId, + pub attrs: Vec>, + pub ty: Option>, + pub is_mut: bool, + pub lifetime: Option>, + pub name: Option>, +} + +impl trap::TrapEntry for SelfParam { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("self_params", vec![id.into()]); + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("param_base_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.ty { + out.add_tuple("param_base_ties", vec![id.into(), v.into()]); + } + if self.is_mut { + out.add_tuple("self_param_is_mut", vec![id.into()]); + } + if let Some(v) = self.lifetime { + out.add_tuple("self_param_lifetimes", vec![id.into(), v.into()]); + } + if let Some(v) = self.name { + out.add_tuple("self_param_names", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for SelfParam { + fn class_name() -> &'static str { "SelfParam" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme SelfParam is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme SelfParam is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme SelfParam is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme SelfParam is a subclass of ParamBase + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct SlicePat { pub id: trap::TrapId, diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 6c3cf6ea6a07..913bdf1d293c 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,4 +1,4 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 4005dd5213c45c8f96e12f08d8a6a7532692d68a3cd9e3a0fd55d7f982a92f23 ec753357ac4fc76706acc0cf1d9208e63a0688e480ece52e4314d7dc2a743de5 +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll e1d6ad3a582c15addb042ce1e054a916f81030f7a10a69408ab929679e9a92ad f1837efe28fb1ae5162437a482d35d24a792e133e10879284202c45e90c62ff6 lib/codeql/rust/elements/Abi.qll 4c973d28b6d628f5959d1f1cc793704572fd0acaae9a97dfce82ff9d73f73476 250f68350180af080f904cd34cb2af481c5c688dc93edf7365fd0ae99855e893 lib/codeql/rust/elements/ArgList.qll 661f5100f5d3ef8351452d9058b663a2a5c720eea8cf11bedd628969741486a2 28e424aac01a90fb58cd6f9f83c7e4cf379eea39e636bc0ba07efc818be71c71 lib/codeql/rust/elements/ArrayExpr.qll a3e6e122632f4011644ec31b37f88b32fe3f2b7e388e7e878a6883309937049f 12ccb5873d95c433da5606fd371d182ef2f71b78d0c53c2d6dec10fa45852bdc @@ -93,7 +93,8 @@ lib/codeql/rust/elements/NameRef.qll f11e33cdbefb3efdd8db6cd1eee593948a16ef5dd13 lib/codeql/rust/elements/NeverType.qll 669823dd60bba0cebac614f9dbad9dc9228405d76e62092e265df57fdd2e04e2 8fe32975ef80d86fb8b218f56962f0a89911008a8d6989e245c3e0362f2c747f lib/codeql/rust/elements/OffsetOfExpr.qll 8f6dd1fe0aad1642e58f5e97620306e4b36cdf01324fead1e2a92e8e60951c41 b192f7a5fae3049a6cac3b7a225a0e590f744e6c5ff6346ffdd1699f83bf718f lib/codeql/rust/elements/OrPat.qll 408b71f51edbfc79bf93b86fb058d01fa79caf2ebfeef37b50ae1da886c71b68 4a3f2b00db33fe26ee0859e35261016312cb491e23c46746cdd6d8bb1f6c88ef -lib/codeql/rust/elements/Param.qll 3108a710214977218421b220d1330793173d6b6b91708b641e3d1275f80faedb 4bb2b80d0a9a4d86f980440851d59ca6fffea681e5518f5d605c521191efd7b4 +lib/codeql/rust/elements/Param.qll d0c0a427c003bbbacaeb0c2f4566f35b997ad0bca4d49f97b50c3a4bd1ddbd71 e654a17dfcb7aaeb589e7944c38f591c4cf922ebceb834071bcb9f9165ee48be +lib/codeql/rust/elements/ParamBase.qll ab8cb39ac313a5dce7d1a6dcd490c5033034d88f0e402f315f4236bb76c2c464 414afc1f34c1df28f76220c5d3255ae3d7629f3df8b870d0949f3a6c87e26d71 lib/codeql/rust/elements/ParamList.qll 33a22ba7de565db4009d3f56eecd5ef809c28d9dce9bbac3fb71b528baae4f70 004375e227d87f76f930322ad3eac274f9b691bf58785ae69977fa319f3dba7e lib/codeql/rust/elements/ParenExpr.qll b635f0e5d300cd9cf3651cfcefd58316c21727295bbfd44b1f5672f9e3de67b6 d81c0034d4ea7ca5829f9b00e0a634ba5b557a6296d99f0b5344b11e1ba705a1 lib/codeql/rust/elements/ParenPat.qll 40d033de6c85ad042223e0da80479adebab35494396ab652da85d3497e435c5a 8f2febe5d5cefcb076d201ae9607d403b9cfe8169d2f4b71d13868e0af43dc25 @@ -126,7 +127,7 @@ lib/codeql/rust/elements/RestPat.qll a898a2c396f974a52424efbc8168174416ac6ed30f9 lib/codeql/rust/elements/RetType.qll 36ea39240a56c504d94d5487ea9679563eef3dfe0e23bf42d992d1ab2b883518 2fe5b6f62a634c6aa30a1ecd620f3446c167669cf1285c8ef8dd5e5a6ef5fc71 lib/codeql/rust/elements/ReturnExpr.qll b87187cff55bc33c8c18558c9b88617179183d1341b322c1cab35ba07167bbdb 892f3a9df2187e745c869e67f33c228ee42754bc9e4f8f4c1718472eb8f8c80f lib/codeql/rust/elements/ReturnTypeSyntax.qll 0aa9125f5ea8864ecf1e4ff6e85f060f1b11fdd603448816145fea1b290f0232 3911819548ad1cf493199aac2ed15652c8e48b532a1e92153388b062191c1e6e -lib/codeql/rust/elements/SelfParam.qll 5c9629e1cd837f5d84bdd79a1aef9cca6fb0acb1fb18671d4a4d28c23a74551a 41eb92527cf4379a2df54a0c9fabc368cb6f9b8d1ac73bd2ab3f13214573e764 +lib/codeql/rust/elements/SelfParam.qll 7d720c99097a340bc7bf6cc27ac6fe291a04af53e9bac23bf070b04b36e6e033 736488794a46ea702dcd3f603134052598207f3953acce3c9237bd6c6a038b23 lib/codeql/rust/elements/SlicePat.qll f48f13bb13378cc68f935d5b09175c316f3e81f50ef6a3ac5fdbfbfb473d6fc1 4c8df0b092274f37028e287a949f1a287f7505b7c2c36ee8d5f47fb8365d278a lib/codeql/rust/elements/SliceType.qll 7e49dba57826c7bb72a88f9e802febdb09adfc49804f6205dc88f2a307fd1f30 6c3ee430f812f1d9fbb1fb1fdd2c47130a4bde7fccf17f09404b8cbc8104678a lib/codeql/rust/elements/SourceFile.qll 5916d550385d618bd3b3d4835fbd3040485822220af8ce52ee1adb649b3d8594 0b79766216649e948fa59de467d64fa752de4666c28e0e503e88740ae27a2aef @@ -292,6 +293,7 @@ lib/codeql/rust/elements/internal/NeverTypeConstructor.qll 6a86bff9d885eddf39a15 lib/codeql/rust/elements/internal/OffsetOfExprConstructor.qll 616e146562adb3ac0fba4d6f55dd6ce60518ed377c0856f1f09ba49593e7bfab 80518ce90fc6d08011d6f5fc2a543958067739e1b0a6a5f2ed90fc9b1db078f0 lib/codeql/rust/elements/internal/OffsetOfExprImpl.qll e52d4596068cc54719438121f7d5afcaab04e0c70168ac5e4df1a3a0969817a6 6ab37e659d79e02fb2685d6802ae124157bf14b6f790b31688f437c87f40f52c lib/codeql/rust/elements/internal/OrPatConstructor.qll 4ef583e07298487c0c4c6d7c76ffcc04b1e5fe58aba0c1da3e2c8446a9e0c92b 980a6bd176ae5e5b11c134569910c5468ba91f480982d846e222d031a6a05f1a +lib/codeql/rust/elements/internal/ParamBaseImpl.qll fe11999c728c443c46c992e9bed7a2b3e23afa16ae99592e70054bc57ae371b8 df86fdb23266bdfb9ed8a8f02558a760b67f173943b9d075b081229eb5844f66 lib/codeql/rust/elements/internal/ParamConstructor.qll b98a2d8969f289fdcc8c0fb11cbd19a3b0c71be038c4a74f5988295a2bae52f0 77d81b31064167945b79b19d9697b57ca24462c3a7cc19e462c4693ce87db532 lib/codeql/rust/elements/internal/ParamListConstructor.qll 3123142ab3cab46fb53d7f3eff6ba2d3ff7a45b78839a53dc1979a9c6a54920e 165f3d777ea257cfcf142cc4ba9a0ebcd1902eb99842b8a6657c87087f3df6fe lib/codeql/rust/elements/internal/ParamListImpl.qll 0ed6e9affe1dc0144641502292c2ddd51958fe3d503419caf15198176e3a4174 92d053cc5fdf40a2d98acb665083b5da15403d7da205779a97a4ee66fac0add4 @@ -338,7 +340,7 @@ lib/codeql/rust/elements/internal/ReturnExprConstructor.qll 57be5afbe20aa8db6e63 lib/codeql/rust/elements/internal/ReturnTypeSyntaxConstructor.qll 8994672e504d1674e5773157d0ad8a0dc3aad3d64ef295e7722e647e78e36c11 abe7df754721f4ff7f3e3bb22d275976b2e9a1ef51436a461fe52ebd2d29cff1 lib/codeql/rust/elements/internal/ReturnTypeSyntaxImpl.qll d47a3dcfcc2b02a6a9eaeefe9a7a4be2074ecd2019da129dda0f218bc3fbd94b 87198db7c0620ed49369da160f09287015e0cd1718784e1ba28ec3ec5a0bb4a8 lib/codeql/rust/elements/internal/SelfParamConstructor.qll a63af1d1ccde6013c09e0397f1247f5ab3efd97f3410dd1b6c15e1fb6cd96e54 0d8977653c074d5010c78144327f8b6c4da07f09d21e5cc3342082cd50107a81 -lib/codeql/rust/elements/internal/SelfParamImpl.qll 5408738c40f070e0cea83a6a38d638ac7a134b5a055ecf0cccc035af58ff9b36 604922319ecf9a9405fdd0fe953169162ee2c8cca36349b49163a2895c53ed40 +lib/codeql/rust/elements/internal/SelfParamImpl.qll def23beb8926f498fc81b7b44489001b35d704da1a2058c84c23b329e8bc2f49 c9be1e8fa2c4e23b314a4d0563be6cffcbab6f03d08b77a366f7638b28a09de4 lib/codeql/rust/elements/internal/SlicePatConstructor.qll 19216ec9e87ca98784d78b29b8b06ea9ac428e2faa468f0717d1c0d0a8e7351c 458e5be76aa51aec579566be39486525ec9d4c73d248cb228da74892e2a56c08 lib/codeql/rust/elements/internal/SlicePatImpl.qll c6176095360e3b23382557242d2d3ff0b5e0f01f8b1c438452518e9c36ff3c70 644ab41a59a619947f69f75e2d0807245d4ddefc247efaeab63b99b4f08c1cc1 lib/codeql/rust/elements/internal/SliceTypeConstructor.qll 643e7a2ae261e8f62de8bc2886efddcc096e0c7e8159c0b9e87b24d0509e10d0 719545abb0ccf6e8a203ec9c9f75109c5ab0593c838e2f90e388858680ec62f7 @@ -504,12 +506,13 @@ lib/codeql/rust/elements/internal/generated/NameRef.qll 4292fc7aa9ba22a7fa5bd638 lib/codeql/rust/elements/internal/generated/NeverType.qll 14dd3c08db1db873b365fc7f0d1cf3f5d6229b1f78bc85100c36c22d1bb8ee40 34257df0ac59cfd982ea5f30ab225c8bfece71d9fd3be84ff79cf1b0bff55060 lib/codeql/rust/elements/internal/generated/OffsetOfExpr.qll bb17a1e1d4332225cf4bbbae4a1bab9302c2d81d191fe835f2f973915d40dd2a f9e73210b81992040a5a5a9ac3ad936159fb3475445f130c7b28f83dfb4170f5 lib/codeql/rust/elements/internal/generated/OrPat.qll ee0487b90849c3e2a836c956ae8837f27515a9dc795bf17287cba2cf7a39d839 35117b6a3dcebab09f12665441332b6863200e206679ee97894170dd9ef7795c -lib/codeql/rust/elements/internal/generated/Param.qll c57bf238123e8337adb1556cf788bde2b2e8841d4afa0799649db9d507b02d85 7cb580219ec9b6257735f7c53260cd2bb5533dbe342bef3b793ec7b6a65e7027 +lib/codeql/rust/elements/internal/generated/Param.qll 4f853cece9ca8d41ef41ff7656a7f291568f1218403bebcd8afbf07e93fab6bf 93a1372f1d129b83470aa0dc481f46649771d1f5b72b114f215a51514ddd641a +lib/codeql/rust/elements/internal/generated/ParamBase.qll 9d9a82643019d2a13f28555dbdd60221cf6dc2e890f6541e7f85a91646585f2c 0e4a3e4c0e069a43d449167cb706c6f5d0d097b4cab2a7ade84c2c1b5528eca7 lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b63a2ca5296b5506bffdeea054893a56cde08f91560 d4599c52231f93e1260fbae7de8891fe4287fa68b1423592b7a1d51c80146dc8 lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 -lib/codeql/rust/elements/internal/generated/ParentChild.qll 52186ab2aead10bbbaab401272afff0b8247b0050064123d0e45d972ec501dee f082318c0da678845763d6070283872b94b59425fbaa305582b5fe72da03e7e6 +lib/codeql/rust/elements/internal/generated/ParentChild.qll ae0288399423b8b69a98a520ff4d2cb53d15ec404696cf62b0ceea965e2258ba aed73c416d74b504c02ee2e9bc2a72881d851ad0819b331b59728a4084e14fdd lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 4c1c8e840ed57880e574142b081b11d7a7428a009f10e3aa8f4645e211f6b2e0 989668cf0f1bdee7557e2f97c01e41d2a56848227fed41477833f5fc1e1d35f6 lib/codeql/rust/elements/internal/generated/PathExpr.qll 2096e3c1db22ee488a761690adabfc9cfdea501c99f7c5d96c0019cb113fc506 54245ce0449c4e263173213df01e079d5168a758503a5dbd61b25ad35a311140 @@ -522,7 +525,7 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 40099c5a4041314b66932dfd lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll b23d3574920376ca7c52858d6ad2ea6670640812422329f9c44f699075c16d89 13c1a199de3e71f012bdab0fa2b982f1c92f95536b07bbbe816e680a0e64ad71 +lib/codeql/rust/elements/internal/generated/Raw.qll ee5642a7a5ad75f48d4db10eccb197b1a11db2fc3432cf2e24a8bcbe83a474e2 134f2e0c87039d052dd31991017fb35597f37f28879abd702b62ec1d880118c6 lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -540,7 +543,7 @@ lib/codeql/rust/elements/internal/generated/RestPat.qll b3a4206e68cf67a0310a4667 lib/codeql/rust/elements/internal/generated/RetType.qll a26860cd526b339b9527c089d126c5486e678dd080e88c60ea2fe641e7d661fd a83c1ce32fd043945ad455b892a60c2a9b6a62d7a5aadf121c4b4056d1dfb094 lib/codeql/rust/elements/internal/generated/ReturnExpr.qll c9c05400d326cd8e0da11c3bfa524daa08b2579ecaee80e468076e5dd7911d56 e7694926727220f46a7617b6ca336767450e359c6fa3782e82b1e21d85d37268 lib/codeql/rust/elements/internal/generated/ReturnTypeSyntax.qll 34e32623d2c0e848c57ce1892c16f4bc81ccca7df22dc21dad5eb48969224465 ccb07c205468bce06392ff4a150136c0d8ebacfb15d1d96dd599ab020b353f47 -lib/codeql/rust/elements/internal/generated/SelfParam.qll cf6837c2731b45632f04092079d295eee3e02d19f73c73b3ccbce1abe12203bf 87eaa9d982506904c42030f7173dd01fd52f3edd9d2c8d19b572f6d5454f769b +lib/codeql/rust/elements/internal/generated/SelfParam.qll e1d994dea58a406dbfca3ea0c724ac48be66ac4380e7270e4037ca2714eef722 90f8ebfac723eef259e13d3c8a7ef6b886c2831d4f436a742144b96db6b6fc92 lib/codeql/rust/elements/internal/generated/SlicePat.qll 8b1463758d7b15a0303384c8136a48a8e71ce27da4ba6e421272b9751a988e64 7562d47308f197bc63ade0f114cd23a17e7f60fa696716f6a30fc7b7411642fe lib/codeql/rust/elements/internal/generated/SliceType.qll 98ee8b566be28f392ab9c9507600e8461ad0b48cbbbd422d22548aca691f8330 528d6eabddf49b9dc474971a2f3a6ddb6f2d77dc7f8449140ef54646c1ceb822 lib/codeql/rust/elements/internal/generated/SourceFile.qll 55d44c9f09c5ff28c4f715f779a0db74083e1180acaf0d410e63ca07b90d1cb5 78c0af48b0b64aa377413ea4799dfe977602a111208e1d25e4bdfa920dbd7238 @@ -548,7 +551,7 @@ lib/codeql/rust/elements/internal/generated/Static.qll 5fbd6879858cf356d4bdaa6da lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 lib/codeql/rust/elements/internal/generated/Struct.qll 4d57f0db12dc7ad3e31e750a24172ef1505406b4dab16386af0674bd18bf8f4b 1a73c83df926b996f629316f74c61ea775be04532ab61b56af904223354f033e -lib/codeql/rust/elements/internal/generated/Synth.qll 0e5767568fd119df13928adf00950586f5f9f355dae520059b2d6daa7a2bda56 219b40f6458fec2cc436dc2cf80bb1dbfb34dfdbe8576606b5e25f78d36d6210 +lib/codeql/rust/elements/internal/generated/Synth.qll db8ffbd55def03f0b0278cafa60274220eb571257da36e185f380e3c5b2caedf 19074971c3e96a43414738976c9625385c4bbac6b01c7eca2f46432034a279b7 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll e929c49ea60810a2bbc19ad38110b8bbaf21db54dae90393b21a3459a54abf6f e929c49ea60810a2bbc19ad38110b8bbaf21db54dae90393b21a3459a54abf6f lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c @@ -583,7 +586,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll 7edf1f23fbf953a2baabcd lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll 76fe494d20d2665777bcb5c5ced016a262789a0e6aa874c1a77ce4cb134422b6 76fe494d20d2665777bcb5c5ced016a262789a0e6aa874c1a77ce4cb134422b6 +lib/codeql/rust/elements.qll 83bda9f3bc481aaecc039db9cecb628495e15e469cc843336ca089f0d707f8d6 83bda9f3bc481aaecc039db9cecb628495e15e469cc843336ca089f0d707f8d6 test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52 test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684 @@ -878,7 +881,7 @@ test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getField.ql 6d729fb91de test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTy.ql b8597637cffd7a492148020b306c4ab1d2f17f919f441f462ebc00d229b038ca 2c7de1df4351929c221b30e3cede4cd6981fe8a2c1861e194489981c65e00f33 test/extractor-tests/generated/OrPat/OrPat.ql 49d881b384acaf68fa79de46da997cacab3e75467641f61150908f4112c47fa4 5d721da23be44e79d7b8a0dd475119836828d6a1edaff2c55decea8da83e65b8 test/extractor-tests/generated/OrPat/OrPat_getPat.ql d56b78287cecebacb25249380647500387e0d9e28be20034b8a12406a999a7c4 cba7bb60afaaed4333ea5ff6d3850fb44a8b42edee67d86fd16df85938454269 -test/extractor-tests/generated/Param/Param.ql 060c53b7e93840ae9cbf0c8fdaea17b16d6825f4b7aaa2eab164a660c5a7ea4d 172f6f4b86a98720f710e5d4342b7d52839c6f3c169ce1debb37629961a702ba +test/extractor-tests/generated/Param/Param.ql ab8d0f8cc3c71f5d24be4aebde1ef7d016519490a9715aca6069e58fd11aeb1c 61197a0c2b8d6f0c5a9cddda39585dcd413644cf80e3ea28b037385142100b27 test/extractor-tests/generated/Param/Param_getAttr.ql e1dcf86540fd2971ced34a33b2959f001c3f654914d82e576caa4534b80fbfbf 987a826bf6dcd25c3426edb603a22f6caa030c82c1cb0e9e11062fdbfed23030 test/extractor-tests/generated/Param/Param_getPat.ql 0c448e8ba8bf3432be08b5eb4a052aa19cccf0eb4596a3239481401dae9d2dc2 c943d4da36e1e734c1a012f092b2f597cb389a7ab33d5371ff8ee9c93e115ffc test/extractor-tests/generated/Param/Param_getTy.ql 134dec0c5562a8df68224069f10ee51c7dcc35e0b44a49c0e2078c305487db87 94fa72a213c37f2f63f03789a33e55fc5a22bd83cf0c1d293281bceffb63bd78 @@ -973,7 +976,7 @@ test/extractor-tests/generated/ReturnExpr/ReturnExpr.ql 8e9eba0837a466255e8e249e test/extractor-tests/generated/ReturnExpr/ReturnExpr_getAttr.ql 9fb7e1c79798e4f42e18785f3af17ea75f901a36abf9beb47a1eede69c613ba9 9cdb7cc4a4742865f6c92357973f84cee9229f55ff28081e5d17b6d57d6d275f test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.ql 7d4562efb0d26d92d11f03a0ef80338eb7d5a0c073f1f09cbb8a826f0cef33de 523ebd51b97f957afaf497e5a4d27929eed18e1d276054e3d5a7c5cfe7285c6e test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.ql 976ce33fe3fd34aae2028a11b4accdee122b6d82d07722488c3239f0d2c14609 906bf8c8e7769a1052196bc78947b655158dd3b2903fef2802e2031cffbc1d78 -test/extractor-tests/generated/SelfParam/SelfParam.ql d051c7a2dd88382e37895f1d691f2702aed7f925d3936f51d49949463e4757c8 37f1f429093be7923a55f8b4f46b37bbf71d0dff3843c4d3686383c2863dee1a +test/extractor-tests/generated/SelfParam/SelfParam.ql 12ad3244a2700e13a84603d6992f0c872572bca68d25515a7a9414b3c96a62e0 70028e344bc4ab2937f391f1fd8afd1549935aa621ce2cb9944da6a1dcf4be27 test/extractor-tests/generated/SelfParam/SelfParam_getAttr.ql 00dd5409c07e9a7b5dc51c1444e24b35d2ac3cab11320396ef70f531a3b65dc0 effbed79ad530a835e85b931389a0c8609a10ee035cb694f2e39b8539f8e54ba test/extractor-tests/generated/SelfParam/SelfParam_getLifetime.ql 0b7c243f609e005dd63fd1b3b9f0096fc13cb98fe113e6f3fefb0d5c414e9a5f f6e06de8bcddfc9bd978c058079e53174edbe7b39f18df3c0bd4e80486808eda test/extractor-tests/generated/SelfParam/SelfParam_getName.ql 69207a57b415ba590e50003d506a64fd1780b27b8832b14f9bd3c909bddb5593 56fa28ba1222f45893237052fa5a9421d960e14fbf1396b2d1049b440c2e5abe diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 6daad6a68c7b..afb5cbf6c695 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -96,6 +96,7 @@ /lib/codeql/rust/elements/OffsetOfExpr.qll linguist-generated /lib/codeql/rust/elements/OrPat.qll linguist-generated /lib/codeql/rust/elements/Param.qll linguist-generated +/lib/codeql/rust/elements/ParamBase.qll linguist-generated /lib/codeql/rust/elements/ParamList.qll linguist-generated /lib/codeql/rust/elements/ParenExpr.qll linguist-generated /lib/codeql/rust/elements/ParenPat.qll linguist-generated @@ -294,6 +295,7 @@ /lib/codeql/rust/elements/internal/OffsetOfExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/OffsetOfExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/OrPatConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/ParamBaseImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ParamConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParamListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParamListImpl.qll linguist-generated @@ -507,6 +509,7 @@ /lib/codeql/rust/elements/internal/generated/OffsetOfExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/OrPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Param.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/ParamBase.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ParamList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ParenExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ParenPat.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll index b550ecf89b75..8038c0dcee14 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -1940,12 +1940,14 @@ module MakeCfgNodes Input> { } /** - * A Param. For example: + * A parameter in a function or method. For example `x` in: * ```rust - * todo!() + * fn new(x: T) -> Foo { + * // ... + * } * ``` */ - final class ParamCfgNode extends CfgNodeFinal { + final class ParamCfgNode extends CfgNodeFinal, ParamBaseCfgNode { private Param node; ParamCfgNode() { node = this.getAstNode() } @@ -1954,34 +1956,50 @@ module MakeCfgNodes Input> { Param getParam() { result = node } /** - * Gets the `index`th attr of this parameter (0-based). + * Gets the pat of this parameter, if it exists. */ - Attr getAttr(int index) { result = node.getAttr(index) } + PatCfgNode getPat() { + any(ChildMapping mapping).hasCfgChild(node, node.getPat(), this, result) + } /** - * Gets any of the attrs of this parameter. + * Holds if `getPat()` exists. */ - Attr getAnAttr() { result = this.getAttr(_) } + predicate hasPat() { exists(this.getPat()) } + } + + final private class ParentParamBase extends ParentAstNode, ParamBase { + override predicate relevantChild(AstNode child) { none() } + } + + /** + * A normal parameter, `Param`, or a self parameter `SelfParam`. + */ + final class ParamBaseCfgNode extends CfgNodeFinal { + private ParamBase node; + + ParamBaseCfgNode() { node = this.getAstNode() } + + /** Gets the underlying `ParamBase`. */ + ParamBase getParamBase() { result = node } /** - * Gets the number of attrs of this parameter. + * Gets the `index`th attr of this parameter base (0-based). */ - int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + Attr getAttr(int index) { result = node.getAttr(index) } /** - * Gets the pat of this parameter, if it exists. + * Gets any of the attrs of this parameter base. */ - PatCfgNode getPat() { - any(ChildMapping mapping).hasCfgChild(node, node.getPat(), this, result) - } + Attr getAnAttr() { result = this.getAttr(_) } /** - * Holds if `getPat()` exists. + * Gets the number of attrs of this parameter base. */ - predicate hasPat() { exists(this.getPat()) } + int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } /** - * Gets the ty of this parameter, if it exists. + * Gets the ty of this parameter base, if it exists. */ TypeRef getTy() { result = node.getTy() } @@ -2597,12 +2615,14 @@ module MakeCfgNodes Input> { } /** - * A SelfParam. For example: + * A `self` parameter. For example `self` in: * ```rust - * todo!() + * fn push(&mut self, value: T) { + * // ... + * } * ``` */ - final class SelfParamCfgNode extends CfgNodeFinal { + final class SelfParamCfgNode extends CfgNodeFinal, ParamBaseCfgNode { private SelfParam node; SelfParamCfgNode() { node = this.getAstNode() } @@ -2610,21 +2630,6 @@ module MakeCfgNodes Input> { /** Gets the underlying `SelfParam`. */ SelfParam getSelfParam() { result = node } - /** - * Gets the `index`th attr of this self parameter (0-based). - */ - Attr getAttr(int index) { result = node.getAttr(index) } - - /** - * Gets any of the attrs of this self parameter. - */ - Attr getAnAttr() { result = this.getAttr(_) } - - /** - * Gets the number of attrs of this self parameter. - */ - int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - /** * Holds if this self parameter is mut. */ @@ -2649,16 +2654,6 @@ module MakeCfgNodes Input> { * Holds if `getName()` exists. */ predicate hasName() { exists(this.getName()) } - - /** - * Gets the ty of this self parameter, if it exists. - */ - TypeRef getTy() { result = node.getTy() } - - /** - * Holds if `getTy()` exists. - */ - predicate hasTy() { exists(this.getTy()) } } final private class ParentSlicePat extends ParentAstNode, SlicePat { diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 6bb59b428824..7d752c1b9be6 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -98,6 +98,7 @@ import codeql.rust.elements.NeverType import codeql.rust.elements.OffsetOfExpr import codeql.rust.elements.OrPat import codeql.rust.elements.Param +import codeql.rust.elements.ParamBase import codeql.rust.elements.ParamList import codeql.rust.elements.ParenExpr import codeql.rust.elements.ParenPat diff --git a/rust/ql/lib/codeql/rust/elements/Param.qll b/rust/ql/lib/codeql/rust/elements/Param.qll index eb46d206ba48..74eda683740e 100644 --- a/rust/ql/lib/codeql/rust/elements/Param.qll +++ b/rust/ql/lib/codeql/rust/elements/Param.qll @@ -4,15 +4,15 @@ */ private import internal.ParamImpl -import codeql.rust.elements.AstNode -import codeql.rust.elements.Attr +import codeql.rust.elements.ParamBase import codeql.rust.elements.Pat -import codeql.rust.elements.TypeRef /** - * A Param. For example: + * A parameter in a function or method. For example `x` in: * ```rust - * todo!() + * fn new(x: T) -> Foo { + * // ... + * } * ``` */ final class Param = Impl::Param; diff --git a/rust/ql/lib/codeql/rust/elements/ParamBase.qll b/rust/ql/lib/codeql/rust/elements/ParamBase.qll new file mode 100644 index 000000000000..d3a031f4da5b --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/ParamBase.qll @@ -0,0 +1,14 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `ParamBase`. + */ + +private import internal.ParamBaseImpl +import codeql.rust.elements.AstNode +import codeql.rust.elements.Attr +import codeql.rust.elements.TypeRef + +/** + * A normal parameter, `Param`, or a self parameter `SelfParam`. + */ +final class ParamBase = Impl::ParamBase; diff --git a/rust/ql/lib/codeql/rust/elements/SelfParam.qll b/rust/ql/lib/codeql/rust/elements/SelfParam.qll index 74d2fb5e2ebc..88c1a05d8371 100644 --- a/rust/ql/lib/codeql/rust/elements/SelfParam.qll +++ b/rust/ql/lib/codeql/rust/elements/SelfParam.qll @@ -4,16 +4,16 @@ */ private import internal.SelfParamImpl -import codeql.rust.elements.AstNode -import codeql.rust.elements.Attr import codeql.rust.elements.Lifetime import codeql.rust.elements.Name -import codeql.rust.elements.TypeRef +import codeql.rust.elements.ParamBase /** - * A SelfParam. For example: + * A `self` parameter. For example `self` in: * ```rust - * todo!() + * fn push(&mut self, value: T) { + * // ... + * } * ``` */ final class SelfParam = Impl::SelfParam; diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParamBaseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParamBaseImpl.qll new file mode 100644 index 000000000000..3b0f82eb6c3d --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/ParamBaseImpl.qll @@ -0,0 +1,19 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `ParamBase`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.ParamBase + +/** + * INTERNAL: This module contains the customizable definition of `ParamBase` and should not + * be referenced directly. + */ +module Impl { + /** + * A normal parameter, `Param`, or a self parameter `SelfParam`. + */ + class ParamBase extends Generated::ParamBase { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll index 33e4f5fee59b..02d38d32c386 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParamImpl.qll @@ -13,9 +13,11 @@ private import codeql.rust.elements.internal.generated.Param module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * A Param. For example: + * A parameter in a function or method. For example `x` in: * ```rust - * todo!() + * fn new(x: T) -> Foo { + * // ... + * } * ``` */ class Param extends Generated::Param { diff --git a/rust/ql/lib/codeql/rust/elements/internal/SelfParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/SelfParamImpl.qll index 2be3b75ac47a..0d0d23a1e8c5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/SelfParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/SelfParamImpl.qll @@ -13,9 +13,11 @@ private import codeql.rust.elements.internal.generated.SelfParam */ module Impl { /** - * A SelfParam. For example: + * A `self` parameter. For example `self` in: * ```rust - * todo!() + * fn push(&mut self, value: T) { + * // ... + * } * ``` */ class SelfParam extends Generated::SelfParam { } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Param.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Param.qll index 1ac10da37d35..2bbbc81b2c9f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Param.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Param.qll @@ -6,10 +6,8 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl -import codeql.rust.elements.Attr +import codeql.rust.elements.internal.ParamBaseImpl::Impl as ParamBaseImpl import codeql.rust.elements.Pat -import codeql.rust.elements.TypeRef /** * INTERNAL: This module contains the fully generated definition of `Param` and should not @@ -17,33 +15,18 @@ import codeql.rust.elements.TypeRef */ module Generated { /** - * A Param. For example: + * A parameter in a function or method. For example `x` in: * ```rust - * todo!() + * fn new(x: T) -> Foo { + * // ... + * } * ``` * INTERNAL: Do not reference the `Generated::Param` class directly. * Use the subclass `Param`, where the following predicates are available. */ - class Param extends Synth::TParam, AstNodeImpl::AstNode { + class Param extends Synth::TParam, ParamBaseImpl::ParamBase { override string getAPrimaryQlClass() { result = "Param" } - /** - * Gets the `index`th attr of this parameter (0-based). - */ - Attr getAttr(int index) { - result = Synth::convertAttrFromRaw(Synth::convertParamToRaw(this).(Raw::Param).getAttr(index)) - } - - /** - * Gets any of the attrs of this parameter. - */ - final Attr getAnAttr() { result = this.getAttr(_) } - - /** - * Gets the number of attrs of this parameter. - */ - final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - /** * Gets the pat of this parameter, if it exists. */ @@ -55,17 +38,5 @@ module Generated { * Holds if `getPat()` exists. */ final predicate hasPat() { exists(this.getPat()) } - - /** - * Gets the ty of this parameter, if it exists. - */ - TypeRef getTy() { - result = Synth::convertTypeRefFromRaw(Synth::convertParamToRaw(this).(Raw::Param).getTy()) - } - - /** - * Holds if `getTy()` exists. - */ - final predicate hasTy() { exists(this.getTy()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParamBase.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParamBase.qll new file mode 100644 index 000000000000..ea5ef12a64f5 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParamBase.qll @@ -0,0 +1,55 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `ParamBase`. + * INTERNAL: Do not import directly. + */ + +private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl +import codeql.rust.elements.Attr +import codeql.rust.elements.TypeRef + +/** + * INTERNAL: This module contains the fully generated definition of `ParamBase` and should not + * be referenced directly. + */ +module Generated { + /** + * A normal parameter, `Param`, or a self parameter `SelfParam`. + * INTERNAL: Do not reference the `Generated::ParamBase` class directly. + * Use the subclass `ParamBase`, where the following predicates are available. + */ + class ParamBase extends Synth::TParamBase, AstNodeImpl::AstNode { + /** + * Gets the `index`th attr of this parameter base (0-based). + */ + Attr getAttr(int index) { + result = + Synth::convertAttrFromRaw(Synth::convertParamBaseToRaw(this).(Raw::ParamBase).getAttr(index)) + } + + /** + * Gets any of the attrs of this parameter base. + */ + final Attr getAnAttr() { result = this.getAttr(_) } + + /** + * Gets the number of attrs of this parameter base. + */ + final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + + /** + * Gets the ty of this parameter base, if it exists. + */ + TypeRef getTy() { + result = + Synth::convertTypeRefFromRaw(Synth::convertParamBaseToRaw(this).(Raw::ParamBase).getTy()) + } + + /** + * Holds if `getTy()` exists. + */ + final predicate hasTy() { exists(this.getTy()) } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index b03310ce2638..9f3bbfac30c1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -602,14 +602,13 @@ private module Impl { ) } - private Element getImmediateChildOfParam(Param e, int index, string partialPredicateCall) { - exists(int b, int bAstNode, int n, int nAttr, int nPat, int nTy | + private Element getImmediateChildOfParamBase(ParamBase e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n, int nAttr, int nTy | b = 0 and bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nPat = nAttr + 1 and - nTy = nPat + 1 and + nTy = nAttr + 1 and ( none() or @@ -618,9 +617,7 @@ private module Impl { result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nAttr and result = e.getPat() and partialPredicateCall = "Pat()" - or - index = nPat and result = e.getTy() and partialPredicateCall = "Ty()" + index = nAttr and result = e.getTy() and partialPredicateCall = "Ty()" ) ) } @@ -885,32 +882,6 @@ private module Impl { ) } - private Element getImmediateChildOfSelfParam(SelfParam e, int index, string partialPredicateCall) { - exists(int b, int bAstNode, int n, int nAttr, int nLifetime, int nName, int nTy | - b = 0 and - bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and - n = bAstNode and - nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nLifetime = nAttr + 1 and - nName = nLifetime + 1 and - nTy = nName + 1 and - ( - none() - or - result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) - or - result = e.getAttr(index - n) and - partialPredicateCall = "Attr(" + (index - n).toString() + ")" - or - index = nAttr and result = e.getLifetime() and partialPredicateCall = "Lifetime()" - or - index = nLifetime and result = e.getName() and partialPredicateCall = "Name()" - or - index = nName and result = e.getTy() and partialPredicateCall = "Ty()" - ) - ) - } - private Element getImmediateChildOfSourceFile(SourceFile e, int index, string partialPredicateCall) { exists(int b, int bAstNode, int n, int nAttr, int nItem | b = 0 and @@ -2137,6 +2108,22 @@ private module Impl { ) } + private Element getImmediateChildOfParam(Param e, int index, string partialPredicateCall) { + exists(int b, int bParamBase, int n, int nPat | + b = 0 and + bParamBase = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfParamBase(e, i, _)) | i) and + n = bParamBase and + nPat = n + 1 and + ( + none() + or + result = getImmediateChildOfParamBase(e, index - b, partialPredicateCall) + or + index = n and result = e.getPat() and partialPredicateCall = "Pat()" + ) + ) + } + private Element getImmediateChildOfParenExpr(ParenExpr e, int index, string partialPredicateCall) { exists(int b, int bExpr, int n, int nAttr, int nExpr | b = 0 and @@ -2487,6 +2474,25 @@ private module Impl { ) } + private Element getImmediateChildOfSelfParam(SelfParam e, int index, string partialPredicateCall) { + exists(int b, int bParamBase, int n, int nLifetime, int nName | + b = 0 and + bParamBase = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfParamBase(e, i, _)) | i) and + n = bParamBase and + nLifetime = n + 1 and + nName = nLifetime + 1 and + ( + none() + or + result = getImmediateChildOfParamBase(e, index - b, partialPredicateCall) + or + index = n and result = e.getLifetime() and partialPredicateCall = "Lifetime()" + or + index = nLifetime and result = e.getName() and partialPredicateCall = "Name()" + ) + ) + } + private Element getImmediateChildOfSlicePat(SlicePat e, int index, string partialPredicateCall) { exists(int b, int bPat, int n, int nPat | b = 0 and @@ -3621,8 +3627,6 @@ private module Impl { or result = getImmediateChildOfNameRef(e, index, partialAccessor) or - result = getImmediateChildOfParam(e, index, partialAccessor) - or result = getImmediateChildOfParamList(e, index, partialAccessor) or result = getImmediateChildOfPathSegment(e, index, partialAccessor) @@ -3643,8 +3647,6 @@ private module Impl { or result = getImmediateChildOfReturnTypeSyntax(e, index, partialAccessor) or - result = getImmediateChildOfSelfParam(e, index, partialAccessor) - or result = getImmediateChildOfSourceFile(e, index, partialAccessor) or result = getImmediateChildOfStmtList(e, index, partialAccessor) @@ -3751,6 +3753,8 @@ private module Impl { or result = getImmediateChildOfOrPat(e, index, partialAccessor) or + result = getImmediateChildOfParam(e, index, partialAccessor) + or result = getImmediateChildOfParenExpr(e, index, partialAccessor) or result = getImmediateChildOfParenPat(e, index, partialAccessor) @@ -3787,6 +3791,8 @@ private module Impl { or result = getImmediateChildOfReturnExpr(e, index, partialAccessor) or + result = getImmediateChildOfSelfParam(e, index, partialAccessor) + or result = getImmediateChildOfSlicePat(e, index, partialAccessor) or result = getImmediateChildOfSliceType(e, index, partialAccessor) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 64de46c55bb1..01d28fedd7cf 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -525,28 +525,18 @@ module Raw { /** * INTERNAL: Do not use. - * A Param. For example: - * ```rust - * todo!() - * ``` + * A normal parameter, `Param`, or a self parameter `SelfParam`. */ - class Param extends @param, AstNode { - override string toString() { result = "Param" } - + class ParamBase extends @param_base, AstNode { /** - * Gets the `index`th attr of this parameter (0-based). + * Gets the `index`th attr of this parameter base (0-based). */ - Attr getAttr(int index) { param_attrs(this, index, result) } - - /** - * Gets the pat of this parameter, if it exists. - */ - Pat getPat() { param_pats(this, result) } + Attr getAttr(int index) { param_base_attrs(this, index, result) } /** - * Gets the ty of this parameter, if it exists. + * Gets the ty of this parameter base, if it exists. */ - TypeRef getTy() { param_ties(this, result) } + TypeRef getTy() { param_base_ties(this, result) } } /** @@ -808,42 +798,6 @@ module Raw { override string toString() { result = "ReturnTypeSyntax" } } - /** - * INTERNAL: Do not use. - * A SelfParam. For example: - * ```rust - * todo!() - * ``` - */ - class SelfParam extends @self_param, AstNode { - override string toString() { result = "SelfParam" } - - /** - * Gets the `index`th attr of this self parameter (0-based). - */ - Attr getAttr(int index) { self_param_attrs(this, index, result) } - - /** - * Holds if this self parameter is mut. - */ - predicate isMut() { self_param_is_mut(this) } - - /** - * Gets the lifetime of this self parameter, if it exists. - */ - Lifetime getLifetime() { self_param_lifetimes(this, result) } - - /** - * Gets the name of this self parameter, if it exists. - */ - Name getName() { self_param_names(this, result) } - - /** - * Gets the ty of this self parameter, if it exists. - */ - TypeRef getTy() { self_param_ties(this, result) } - } - /** * INTERNAL: Do not use. * A SourceFile. For example: @@ -2281,6 +2235,24 @@ module Raw { Pat getPat(int index) { or_pat_pats(this, index, result) } } + /** + * INTERNAL: Do not use. + * A parameter in a function or method. For example `x` in: + * ```rust + * fn new(x: T) -> Foo { + * // ... + * } + * ``` + */ + class Param extends @param, ParamBase { + override string toString() { result = "Param" } + + /** + * Gets the pat of this parameter, if it exists. + */ + Pat getPat() { param_pats(this, result) } + } + /** * INTERNAL: Do not use. * A ParenExpr. For example: @@ -2717,6 +2689,34 @@ module Raw { Expr getExpr() { return_expr_exprs(this, result) } } + /** + * INTERNAL: Do not use. + * A `self` parameter. For example `self` in: + * ```rust + * fn push(&mut self, value: T) { + * // ... + * } + * ``` + */ + class SelfParam extends @self_param, ParamBase { + override string toString() { result = "SelfParam" } + + /** + * Holds if this self parameter is mut. + */ + predicate isMut() { self_param_is_mut(this) } + + /** + * Gets the lifetime of this self parameter, if it exists. + */ + Lifetime getLifetime() { self_param_lifetimes(this, result) } + + /** + * Gets the name of this self parameter, if it exists. + */ + Name getName() { self_param_names(this, result) } + } + /** * INTERNAL: Do not use. * A slice pattern. For example: diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/SelfParam.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/SelfParam.qll index 243d04e9bb77..b2cc6e4b0c4a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/SelfParam.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/SelfParam.qll @@ -6,11 +6,9 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl -import codeql.rust.elements.Attr import codeql.rust.elements.Lifetime import codeql.rust.elements.Name -import codeql.rust.elements.TypeRef +import codeql.rust.elements.internal.ParamBaseImpl::Impl as ParamBaseImpl /** * INTERNAL: This module contains the fully generated definition of `SelfParam` and should not @@ -18,34 +16,18 @@ import codeql.rust.elements.TypeRef */ module Generated { /** - * A SelfParam. For example: + * A `self` parameter. For example `self` in: * ```rust - * todo!() + * fn push(&mut self, value: T) { + * // ... + * } * ``` * INTERNAL: Do not reference the `Generated::SelfParam` class directly. * Use the subclass `SelfParam`, where the following predicates are available. */ - class SelfParam extends Synth::TSelfParam, AstNodeImpl::AstNode { + class SelfParam extends Synth::TSelfParam, ParamBaseImpl::ParamBase { override string getAPrimaryQlClass() { result = "SelfParam" } - /** - * Gets the `index`th attr of this self parameter (0-based). - */ - Attr getAttr(int index) { - result = - Synth::convertAttrFromRaw(Synth::convertSelfParamToRaw(this).(Raw::SelfParam).getAttr(index)) - } - - /** - * Gets any of the attrs of this self parameter. - */ - final Attr getAnAttr() { result = this.getAttr(_) } - - /** - * Gets the number of attrs of this self parameter. - */ - final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - /** * Holds if this self parameter is mut. */ @@ -78,18 +60,5 @@ module Generated { * Holds if `getName()` exists. */ final predicate hasName() { exists(this.getName()) } - - /** - * Gets the ty of this self parameter, if it exists. - */ - TypeRef getTy() { - result = - Synth::convertTypeRefFromRaw(Synth::convertSelfParamToRaw(this).(Raw::SelfParam).getTy()) - } - - /** - * Holds if `getTy()` exists. - */ - final predicate hasTy() { exists(this.getTy()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index dda242ffdf93..b6b1a92a01f7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -624,12 +624,12 @@ module Synth { TExpr or TExternItem or TExternItemList or TFieldList or TFormatArgsArg or TGenericArg or TGenericArgList or TGenericParam or TGenericParamList or TItemList or TLabel or TLetElse or TLifetime or TMacroItems or TMacroStmts or TMatchArm or TMatchArmList or TMatchGuard or - TMeta or TName or TNameRef or TParam or TParamList or TPat or TPathSegment or + TMeta or TName or TNameRef or TParamBase or TParamList or TPat or TPathSegment or TRecordExprField or TRecordExprFieldList or TRecordField or TRecordPatField or TRecordPatFieldList or TRename or TResolvable or TRetType or TReturnTypeSyntax or - TSelfParam or TSourceFile or TStmt or TStmtList or TToken or TTokenTree or TTupleField or - TTypeBound or TTypeBoundList or TTypeRef or TUseTree or TUseTreeList or TVariant or - TVariantList or TVisibility or TWhereClause or TWherePred; + TSourceFile or TStmt or TStmtList or TToken or TTokenTree or TTupleField or TTypeBound or + TTypeBoundList or TTypeRef or TUseTree or TUseTreeList or TVariant or TVariantList or + TVisibility or TWhereClause or TWherePred; /** * INTERNAL: Do not use. @@ -695,6 +695,11 @@ module Synth { */ class TLoopingExpr = TForExpr or TLoopExpr or TWhileExpr; + /** + * INTERNAL: Do not use. + */ + class TParamBase = TParam or TSelfParam; + /** * INTERNAL: Do not use. */ @@ -1699,7 +1704,7 @@ module Synth { or result = convertNameRefFromRaw(e) or - result = convertParamFromRaw(e) + result = convertParamBaseFromRaw(e) or result = convertParamListFromRaw(e) or @@ -1725,8 +1730,6 @@ module Synth { or result = convertReturnTypeSyntaxFromRaw(e) or - result = convertSelfParamFromRaw(e) - or result = convertSourceFileFromRaw(e) or result = convertStmtFromRaw(e) @@ -1984,6 +1987,16 @@ module Synth { result = convertWhileExprFromRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a raw DB element to a synthesized `TParamBase`, if possible. + */ + TParamBase convertParamBaseFromRaw(Raw::Element e) { + result = convertParamFromRaw(e) + or + result = convertSelfParamFromRaw(e) + } + /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TPat`, if possible. @@ -3065,7 +3078,7 @@ module Synth { or result = convertNameRefToRaw(e) or - result = convertParamToRaw(e) + result = convertParamBaseToRaw(e) or result = convertParamListToRaw(e) or @@ -3091,8 +3104,6 @@ module Synth { or result = convertReturnTypeSyntaxToRaw(e) or - result = convertSelfParamToRaw(e) - or result = convertSourceFileToRaw(e) or result = convertStmtToRaw(e) @@ -3350,6 +3361,16 @@ module Synth { result = convertWhileExprToRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TParamBase` to a raw DB element, if possible. + */ + Raw::Element convertParamBaseToRaw(TParamBase e) { + result = convertParamToRaw(e) + or + result = convertSelfParamToRaw(e) + } + /** * INTERNAL: Do not use. * Converts a synthesized `TPat` to a raw DB element, if possible. diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index c9933b5b5e33..7c2ba7da58c8 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -162,7 +162,7 @@ locatable_locations( | @meta | @name | @name_ref -| @param +| @param_base | @param_list | @pat | @path_segment @@ -175,7 +175,6 @@ locatable_locations( | @resolvable | @ret_type | @return_type_syntax -| @self_param | @source_file | @stmt | @stmt_list @@ -582,26 +581,21 @@ name_ref_texts( string text: string ref ); -params( - unique int id: @param -); +@param_base = + @param +| @self_param +; #keyset[id, index] -param_attrs( - int id: @param ref, +param_base_attrs( + int id: @param_base ref, int index: int ref, int attr: @attr ref ); #keyset[id] -param_pats( - int id: @param ref, - int pat: @pat ref -); - -#keyset[id] -param_ties( - int id: @param ref, +param_base_ties( + int id: @param_base ref, int ty: @type_ref ref ); @@ -844,40 +838,6 @@ return_type_syntaxes( unique int id: @return_type_syntax ); -self_params( - unique int id: @self_param -); - -#keyset[id, index] -self_param_attrs( - int id: @self_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -self_param_is_mut( - int id: @self_param ref -); - -#keyset[id] -self_param_lifetimes( - int id: @self_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -self_param_names( - int id: @self_param ref, - int name: @name ref -); - -#keyset[id] -self_param_ties( - int id: @self_param ref, - int ty: @type_ref ref -); - source_files( unique int id: @source_file ); @@ -1986,6 +1946,16 @@ or_pat_pats( int pat: @pat ref ); +params( + unique int id: @param +); + +#keyset[id] +param_pats( + int id: @param ref, + int pat: @pat ref +); + paren_exprs( unique int id: @paren_expr ); @@ -2296,6 +2266,27 @@ return_expr_exprs( int expr: @expr ref ); +self_params( + unique int id: @self_param +); + +#keyset[id] +self_param_is_mut( + int id: @self_param ref +); + +#keyset[id] +self_param_lifetimes( + int id: @self_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +self_param_names( + int id: @self_param ref, + int name: @name ref +); + slice_pats( unique int id: @slice_pat ); diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index 83affdc7e649..1fe8e805b268 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -75,7 +75,7 @@ NameRef/gen_name_ref.rs 41307c2f7ca82d28217129639e556bd4c91221cf3a4170250b313fd5 NeverType/gen_never_type.rs a5413fab6a45dcfc2ff0ec5c8308b6c515963212ec4aa9edb9a96ec9a7e96830 a5413fab6a45dcfc2ff0ec5c8308b6c515963212ec4aa9edb9a96ec9a7e96830 OffsetOfExpr/gen_offset_of_expr.rs 8e2077b4d7b85c91c17c3630511bc4f929950e9007261cbf0471c4a064c4b934 8e2077b4d7b85c91c17c3630511bc4f929950e9007261cbf0471c4a064c4b934 OrPat/gen_or_pat.rs 71feef6e056bfe4cc8c22c9eb54fa3fecef613606769061d0efd059adbbd6f56 71feef6e056bfe4cc8c22c9eb54fa3fecef613606769061d0efd059adbbd6f56 -Param/gen_param.rs 6c9e4a972b2dc0702dc29ebcbdcbe2c6a433b3cd372ad6924feedcea4698faba 6c9e4a972b2dc0702dc29ebcbdcbe2c6a433b3cd372ad6924feedcea4698faba +Param/gen_param.rs 39f3979d6cb10e4c43e0b5601af2a92b7520a75a104211955bbbb5e6f13e9db9 39f3979d6cb10e4c43e0b5601af2a92b7520a75a104211955bbbb5e6f13e9db9 ParamList/gen_param_list.rs ef2e83d0aed45b969fe78dd717e87ef3c1f848e6179cfb4dc3cb136f1836b998 ef2e83d0aed45b969fe78dd717e87ef3c1f848e6179cfb4dc3cb136f1836b998 ParenExpr/gen_paren_expr.rs dd0c4a21a92e54e8a6151145e013cbec9c9e1cad093d572e293b4f51d6c44aea dd0c4a21a92e54e8a6151145e013cbec9c9e1cad093d572e293b4f51d6c44aea ParenPat/gen_paren_pat.rs c8d18521b9a0b7d39841eb72e3895914aa652b7235dea42ed12a4eb280e3bf0e c8d18521b9a0b7d39841eb72e3895914aa652b7235dea42ed12a4eb280e3bf0e @@ -104,7 +104,7 @@ RestPat/gen_rest_pat.rs e762bf7537225f97da751c5dca6a2cd3836ad7579b68c748b8c6cba6 RetType/gen_ret_type.rs 0947aed0974461b7a5b56bbc5fe36131663bde715c37302345d4eee23b71c825 0947aed0974461b7a5b56bbc5fe36131663bde715c37302345d4eee23b71c825 ReturnExpr/gen_return_expr.rs 4f6ef29d7b3c60d6d71d1a6034a0721671f517428ba21897361a92b01009d38f 4f6ef29d7b3c60d6d71d1a6034a0721671f517428ba21897361a92b01009d38f ReturnTypeSyntax/gen_return_type_syntax.rs 0b11a4cc400f9a2001996f99d61391bdb636e8aea036f587cf18ad6a957fe496 0b11a4cc400f9a2001996f99d61391bdb636e8aea036f587cf18ad6a957fe496 -SelfParam/gen_self_param.rs b7bf9f23fedad6f1a15f02e5fac33fc2c68ec3409b44f24142c2fdec1e5e6f1f b7bf9f23fedad6f1a15f02e5fac33fc2c68ec3409b44f24142c2fdec1e5e6f1f +SelfParam/gen_self_param.rs 9be528c454e2734292d54550f8850ae8e48e1558da46dcf7f06fc7a7a8c3e569 9be528c454e2734292d54550f8850ae8e48e1558da46dcf7f06fc7a7a8c3e569 SlicePat/gen_slice_pat.rs df4a6692f5100aa11dd777561400ce71e37b85f2363b0638c21975a1771b15d5 df4a6692f5100aa11dd777561400ce71e37b85f2363b0638c21975a1771b15d5 SliceType/gen_slice_type.rs 073282f4755994473933db7e4f1e4d34a80363d7e331299ec4ac1a2d6a235b86 073282f4755994473933db7e4f1e4d34a80363d7e331299ec4ac1a2d6a235b86 SourceFile/gen_source_file.rs a7a1d4fa77b53adb6fbc031bf7ab49cf7c8787728ba0a687c348b5eefbb5b9df a7a1d4fa77b53adb6fbc031bf7ab49cf7c8787728ba0a687c348b5eefbb5b9df diff --git a/rust/ql/test/extractor-tests/generated/Param/Param.expected b/rust/ql/test/extractor-tests/generated/Param/Param.expected index e69de29bb2d1..e0f54f135831 100644 --- a/rust/ql/test/extractor-tests/generated/Param/Param.expected +++ b/rust/ql/test/extractor-tests/generated/Param/Param.expected @@ -0,0 +1 @@ +| gen_param.rs:5:12:5:15 | ...: T | getNumberOfAttrs: | 0 | hasTy: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Param/Param.ql b/rust/ql/test/extractor-tests/generated/Param/Param.ql index 6e022c29db92..1e744bae58b6 100644 --- a/rust/ql/test/extractor-tests/generated/Param/Param.ql +++ b/rust/ql/test/extractor-tests/generated/Param/Param.ql @@ -2,11 +2,11 @@ import codeql.rust.elements import TestUtils -from Param x, int getNumberOfAttrs, string hasPat, string hasTy +from Param x, int getNumberOfAttrs, string hasTy, string hasPat where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and - (if x.hasPat() then hasPat = "yes" else hasPat = "no") and - if x.hasTy() then hasTy = "yes" else hasTy = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasPat:", hasPat, "hasTy:", hasTy + (if x.hasTy() then hasTy = "yes" else hasTy = "no") and + if x.hasPat() then hasPat = "yes" else hasPat = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasTy:", hasTy, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/Param/Param_getPat.expected b/rust/ql/test/extractor-tests/generated/Param/Param_getPat.expected index e69de29bb2d1..c42d7ce0b9f2 100644 --- a/rust/ql/test/extractor-tests/generated/Param/Param_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/Param/Param_getPat.expected @@ -0,0 +1 @@ +| gen_param.rs:5:12:5:15 | ...: T | gen_param.rs:5:12:5:12 | x | diff --git a/rust/ql/test/extractor-tests/generated/Param/Param_getTy.expected b/rust/ql/test/extractor-tests/generated/Param/Param_getTy.expected index e69de29bb2d1..10bf906af5da 100644 --- a/rust/ql/test/extractor-tests/generated/Param/Param_getTy.expected +++ b/rust/ql/test/extractor-tests/generated/Param/Param_getTy.expected @@ -0,0 +1 @@ +| gen_param.rs:5:12:5:15 | ...: T | gen_param.rs:5:15:5:15 | T | diff --git a/rust/ql/test/extractor-tests/generated/Param/gen_param.rs b/rust/ql/test/extractor-tests/generated/Param/gen_param.rs index 5bc96d632198..679943f8aa7f 100644 --- a/rust/ql/test/extractor-tests/generated/Param/gen_param.rs +++ b/rust/ql/test/extractor-tests/generated/Param/gen_param.rs @@ -1,6 +1,8 @@ // generated by codegen, do not edit fn test_param() -> () { - // A Param. For example: - todo!() + // A parameter in a function or method. For example `x` in: + fn new(x: T) -> Foo { + // ... + } } diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.expected b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.expected index e69de29bb2d1..41c5e89e83d0 100644 --- a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.expected +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.expected @@ -0,0 +1 @@ +| gen_self_param.rs:5:13:5:21 | SelfParam | getNumberOfAttrs: | 0 | hasTy: | no | isMut: | yes | hasLifetime: | no | hasName: | yes | diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql index af2fa064a724..579ec7ffa2ad 100644 --- a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql @@ -3,14 +3,14 @@ import codeql.rust.elements import TestUtils from - SelfParam x, int getNumberOfAttrs, string isMut, string hasLifetime, string hasName, string hasTy + SelfParam x, int getNumberOfAttrs, string hasTy, string isMut, string hasLifetime, string hasName where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasTy() then hasTy = "yes" else hasTy = "no") and (if x.isMut() then isMut = "yes" else isMut = "no") and (if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no") and - (if x.hasName() then hasName = "yes" else hasName = "no") and - if x.hasTy() then hasTy = "yes" else hasTy = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "isMut:", isMut, "hasLifetime:", hasLifetime, - "hasName:", hasName, "hasTy:", hasTy + if x.hasName() then hasName = "yes" else hasName = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasTy:", hasTy, "isMut:", isMut, "hasLifetime:", + hasLifetime, "hasName:", hasName diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getName.expected b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getName.expected index e69de29bb2d1..70a9a4a06596 100644 --- a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getName.expected +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getName.expected @@ -0,0 +1 @@ +| gen_self_param.rs:5:13:5:21 | SelfParam | gen_self_param.rs:5:18:5:21 | self | diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/gen_self_param.rs b/rust/ql/test/extractor-tests/generated/SelfParam/gen_self_param.rs index 36f8ffd8baf5..6278147a8783 100644 --- a/rust/ql/test/extractor-tests/generated/SelfParam/gen_self_param.rs +++ b/rust/ql/test/extractor-tests/generated/SelfParam/gen_self_param.rs @@ -1,6 +1,8 @@ // generated by codegen, do not edit fn test_self_param() -> () { - // A SelfParam. For example: - todo!() + // A `self` parameter. For example `self` in: + fn push(&mut self, value: T) { + // ... + } } diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 91a6d6add281..e2ab1bf8e56a 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1324,14 +1324,29 @@ class _: """ -@annotate(Param, cfg = True) +class ParamBase(AstNode): + """ + A normal parameter, `Param`, or a self parameter `SelfParam`. + """ + attrs: list["Attr"] | child + ty: optional["TypeRef"] | child + +@annotate(ParamBase, cfg = True) +class _: + pass + +@annotate(Param, replace_bases={AstNode: ParamBase}, cfg = True) class _: """ - A Param. For example: + A parameter in a function or method. For example `x` in: ```rust - todo!() + fn new(x: T) -> Foo { + // ... + } ``` """ + attrs: drop + ty: drop @annotate(ParamList) @@ -1494,14 +1509,18 @@ class _: """ -@annotate(SelfParam, cfg = True) +@annotate(SelfParam, replace_bases={AstNode: ParamBase}, cfg = True) class _: """ - A SelfParam. For example: + A `self` parameter. For example `self` in: ```rust - todo!() + fn push(&mut self, value: T) { + // ... + } ``` """ + attrs: drop + ty: drop @annotate(SliceType) From 0de66586608f8cfefd737cc40efebe5a83f75715 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 25 Nov 2024 14:18:08 +0100 Subject: [PATCH 35/35] Rust: Use `ParamBase` in data flow implementation --- .../rust/dataflow/internal/DataFlowImpl.qll | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index 1ec8a42ee7e0..d5e496c3f0bc 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -83,7 +83,7 @@ final class ParameterPosition extends TParameterPosition { result = "self" and this.isSelf() } - AstNode getParameterIn(ParamList ps) { + ParamBase getParameterIn(ParamList ps) { result = ps.getParam(this.getPosition()) or result = ps.getSelfParam() and this.isSelf() @@ -181,28 +181,17 @@ module Node { PatCfgNode getPat() { result = n } } - abstract class ParameterNode extends AstCfgFlowNode { } - /** * The value of a parameter at function entry, viewed as a node in a data * flow graph. */ - final class PositionalParameterNode extends ParameterNode, TParameterNode { - override ParamCfgNode n; + final class ParameterNode extends AstCfgFlowNode, TParameterNode { + override ParamBaseCfgNode n; - PositionalParameterNode() { this = TParameterNode(n) } + ParameterNode() { this = TParameterNode(n) } /** Gets the parameter in the CFG that this node corresponds to. */ - ParamCfgNode getParameter() { result = n } - } - - final class SelfParameterNode extends ParameterNode, TSelfParameterNode { - override SelfParamCfgNode n; - - SelfParameterNode() { this = TSelfParameterNode(n) } - - /** Gets the self parameter in the AST that this node corresponds to. */ - SelfParamCfgNode getSelfParameter() { result = n } + ParamBaseCfgNode getParameter() { result = n } } final class ArgumentNode extends ExprNode { @@ -284,7 +273,7 @@ module SsaFlow { private module SsaFlow = SsaImpl::DataFlowIntegration; private Node::ParameterNode toParameterNode(ParamCfgNode p) { - result.(Node::PositionalParameterNode).getParameter() = p + result.(Node::ParameterNode).getParameter() = p } /** Converts a control flow node into an SSA control flow node. */ @@ -333,7 +322,7 @@ module LocalFlow { nodeFrom.(Node::AstCfgFlowNode).getCfgNode() = nodeTo.(Node::SsaNode).getDefinitionExt().(Ssa::WriteDefinition).getControlFlowNode() or - nodeFrom.(Node::PositionalParameterNode).getParameter().getPat() = + nodeFrom.(Node::ParameterNode).getParameter().(ParamCfgNode).getPat() = nodeTo.(Node::PatNode).getPat() or SsaFlow::localFlowStep(_, nodeFrom, nodeTo, _) @@ -559,8 +548,7 @@ private module Cached { cached newtype TNode = TExprNode(ExprCfgNode n) or - TParameterNode(ParamCfgNode p) or - TSelfParameterNode(SelfParamCfgNode p) or + TParameterNode(ParamBaseCfgNode p) or TPatNode(PatCfgNode p) or TArgumentPostUpdateNode(ExprCfgNode e) { isArgumentForCall(e, _, _) } or TSsaNode(SsaImpl::DataFlowIntegration::SsaNode node)