diff --git a/ql/src/codeql_ql/ast/Ast.qll b/ql/src/codeql_ql/ast/Ast.qll index 3ef2a87a7f4..70d0d8307a2 100644 --- a/ql/src/codeql_ql/ast/Ast.qll +++ b/ql/src/codeql_ql/ast/Ast.qll @@ -1523,6 +1523,13 @@ class ThisAccess extends Identifier { override string getAPrimaryQlClass() { result = "ThisAccess" } } +/** A use of `super`. */ +class Super extends TSuper, Expr { + Super() { this = TSuper(_) } + + override string getAPrimaryQlClass() { result = "SuperAccess" } +} + /** An access to `result`. */ class ResultAccess extends Identifier { ResultAccess() { any(Generated::Result r).getParent() = id } diff --git a/ql/src/codeql_ql/ast/internal/AstNodes.qll b/ql/src/codeql_ql/ast/internal/AstNodes.qll index d3f5bb6e2e3..c21b77f7a53 100644 --- a/ql/src/codeql_ql/ast/internal/AstNodes.qll +++ b/ql/src/codeql_ql/ast/internal/AstNodes.qll @@ -24,6 +24,7 @@ newtype TAstNode = TExprAggregate(Generated::Aggregate agg) { agg.getChild(_) instanceof Generated::ExprAggregateBody } or + TSuper(Generated::SuperRef sup) or TIdentifier(Generated::Variable var) or TAsExpr(Generated::AsExpr asExpr) { asExpr.getChild(1) instanceof Generated::VarName } or TPredicateCall(Generated::CallOrUnqualAggExpr call) or @@ -63,7 +64,7 @@ class TBinOpExpr = TAddSubExpr or TMulDivModExpr; class TExpr = TBinOpExpr or TLiteral or TAggregate or TExprAggregate or TIdentifier or TInlineCast or TCall or - TUnaryExpr or TExprAnnotation or TDontCare or TRange or TSet or TAsExpr; + TUnaryExpr or TExprAnnotation or TDontCare or TRange or TSet or TAsExpr or TSuper; class TCall = TPredicateCall or TMemberCall or TNoneCall or TAnyCall; @@ -154,6 +155,8 @@ Generated::AstNode toGenerated(AST::AstNode n) { n = TNoneCall(result) or n = TAnyCall(result) + or + n = TSuper(result) } class TPredicate = TCharPred or TClasslessPredicate or TClassPredicate;