1
1
private import rust
2
2
private import codeql.rust.elements.internal.generated.ParentChild
3
3
private import codeql.rust.elements.internal.ExprImpl:: Impl as ExprImpl
4
+ private import codeql.rust.elements.internal.PathExprImpl:: Impl as PathExprImpl
5
+ private import codeql.rust.elements.internal.ImplicitVariableAccessImpl:: Impl as ImplicitVariableAccessImpl
4
6
private import codeql.util.DenseRank
5
7
6
8
module Impl {
@@ -449,7 +451,8 @@ module Impl {
449
451
private class TVariableAccess = Synth:: TPathExpr or Synth:: TImplicitVariableAccess ;
450
452
451
453
/** A variable access. */
452
- class VariableAccess extends ExprImpl:: Expr , TVariableAccess instanceof VariableAccessCand {
454
+ abstract class VariableAccess extends ExprImpl:: Expr , TVariableAccess instanceof VariableAccessCand
455
+ {
453
456
private string name ;
454
457
private Variable v ;
455
458
@@ -466,6 +469,18 @@ module Impl {
466
469
override string getAPrimaryQlClass ( ) { result = "VariableAccess" }
467
470
}
468
471
472
+ private class VariableAccessPathExpr extends VariableAccess , PathExprImpl:: PathExpr {
473
+ override string getAPrimaryQlClass ( ) { result = VariableAccess .super .getAPrimaryQlClass ( ) }
474
+ }
475
+
476
+ private class VariableAccessImplicitVariableAccess extends VariableAccess ,
477
+ ImplicitVariableAccessImpl:: ImplicitVariableAccess
478
+ {
479
+ override string toString ( ) { result = VariableAccess .super .toString ( ) }
480
+
481
+ override string getAPrimaryQlClass ( ) { result = VariableAccess .super .getAPrimaryQlClass ( ) }
482
+ }
483
+
469
484
/** Holds if `e` occurs in the LHS of an assignment or compound assignment. */
470
485
private predicate assignmentExprDescendant ( Expr e ) {
471
486
e = any ( AssignmentExpr ae ) .getLhs ( )
0 commit comments