Rust: Handle captured self parameter in variable implementation

This commit is contained in:
Simon Friis Vindum
2024-12-06 14:12:27 +01:00
parent 43dd3ebf14
commit ed68423d6e
3 changed files with 11 additions and 1 deletions

View File

@@ -139,6 +139,9 @@ module Impl {
*/
IdentPat getPat() { variableDecl(definingNode, result, name) }
/** Gets the enclosing CFG scope for this variable declaration. */
CfgScope getEnclosingCfgScope() { result = definingNode.getEnclosingCfgScope() }
/** Gets the `let` statement that introduces this variable, if any. */
LetStmt getLetStmt() { this.getPat() = result.getPat() }
@@ -452,7 +455,7 @@ module Impl {
Variable getVariable() { result = v }
/** Holds if this access is a capture. */
predicate isCapture() { this.getEnclosingCfgScope() != v.getPat().getEnclosingCfgScope() }
predicate isCapture() { this.getEnclosingCfgScope() != v.getEnclosingCfgScope() }
override string toString() { result = name }

View File

@@ -136,7 +136,9 @@ definition
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x |
| variables.rs:482:15:482:23 | SelfParam | variables.rs:482:20:482:23 | self |
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self |
| variables.rs:490:18:490:26 | SelfParam | variables.rs:490:23:490:26 | self |
| variables.rs:491:13:491:17 | f | variables.rs:491:17:491:17 | f |
| variables.rs:491:21:494:9 | <captured entry> self | variables.rs:490:23:490:26 | self |
| variables.rs:491:22:491:22 | n | variables.rs:491:22:491:22 | n |
| variables.rs:510:9:510:13 | a | variables.rs:510:13:510:13 | a |
| variables.rs:514:5:514:5 | a | variables.rs:510:13:510:13 | a |
@@ -268,6 +270,7 @@ read
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self | variables.rs:487:9:487:12 | self |
| variables.rs:491:13:491:17 | f | variables.rs:491:17:491:17 | f | variables.rs:495:9:495:9 | f |
| variables.rs:491:13:491:17 | f | variables.rs:491:17:491:17 | f | variables.rs:496:9:496:9 | f |
| variables.rs:491:21:494:9 | <captured entry> self | variables.rs:490:23:490:26 | self | variables.rs:493:13:493:16 | self |
| variables.rs:491:22:491:22 | n | variables.rs:491:22:491:22 | n | variables.rs:493:25:493:25 | n |
| variables.rs:510:9:510:13 | a | variables.rs:510:13:510:13 | a | variables.rs:511:15:511:15 | a |
| variables.rs:510:9:510:13 | a | variables.rs:510:13:510:13 | a | variables.rs:512:5:512:5 | a |
@@ -376,6 +379,7 @@ firstRead
| variables.rs:482:15:482:23 | SelfParam | variables.rs:482:20:482:23 | self | variables.rs:483:16:483:19 | self |
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self | variables.rs:487:9:487:12 | self |
| variables.rs:491:13:491:17 | f | variables.rs:491:17:491:17 | f | variables.rs:495:9:495:9 | f |
| variables.rs:491:21:494:9 | <captured entry> self | variables.rs:490:23:490:26 | self | variables.rs:493:13:493:16 | self |
| variables.rs:491:22:491:22 | n | variables.rs:491:22:491:22 | n | variables.rs:493:25:493:25 | n |
| variables.rs:510:9:510:13 | a | variables.rs:510:13:510:13 | a | variables.rs:511:15:511:15 | a |
| variables.rs:514:5:514:5 | a | variables.rs:510:13:510:13 | a | variables.rs:515:15:515:15 | a |
@@ -483,6 +487,7 @@ lastRead
| variables.rs:482:15:482:23 | SelfParam | variables.rs:482:20:482:23 | self | variables.rs:483:16:483:19 | self |
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self | variables.rs:487:9:487:12 | self |
| variables.rs:491:13:491:17 | f | variables.rs:491:17:491:17 | f | variables.rs:496:9:496:9 | f |
| variables.rs:491:21:494:9 | <captured entry> self | variables.rs:490:23:490:26 | self | variables.rs:493:13:493:16 | self |
| variables.rs:491:22:491:22 | n | variables.rs:491:22:491:22 | n | variables.rs:493:25:493:25 | n |
| variables.rs:510:9:510:13 | a | variables.rs:510:13:510:13 | a | variables.rs:513:15:513:15 | a |
| variables.rs:514:5:514:5 | a | variables.rs:510:13:510:13 | a | variables.rs:515:15:515:15 | a |

View File

@@ -496,9 +496,11 @@ capturedVariable
| variables.rs:418:13:418:13 | y |
| variables.rs:426:13:426:13 | z |
| variables.rs:436:13:436:13 | i |
| variables.rs:490:23:490:26 | self |
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 |
| variables.rs:493:13:493:16 | self |