Skip to content

Commit 32979b2

Browse files
committed
unified: Add MemberAccess as union of MemberAccessExpr and UnqualifiedMemberAccess
1 parent c7c80a7 commit 32979b2

2 files changed

Lines changed: 19 additions & 4 deletions

File tree

‎unified/ql/lib/codeql/unified/internal/StaticNameBinding.qll‎

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -755,10 +755,25 @@ predicate unqualifiedMemberAccess(
755755
}
756756

757757
module Public {
758+
/**
759+
* An expression that accesses a named member, either with an explicit base (`MemberAccessExpr`)
760+
* or with an implicit base (`UnqualifiedMemberAccess`).
761+
*/
762+
abstract private class MemberAccessImpl extends Expr {
763+
/** Gets the name of the member being accessed. */
764+
abstract string getMemberName();
765+
}
766+
767+
final class MemberAccess = MemberAccessImpl;
768+
769+
private class MemberAccessExprImpl extends MemberAccessImpl instanceof MemberAccessExpr {
770+
override string getMemberName() { result = MemberAccessExpr.super.getMemberName() }
771+
}
772+
758773
/**
759774
* A name node appearing in an unqualified position, referring to a member of an enclosing class.
760775
*/
761-
class UnqualifiedMemberAccess extends Identifier {
776+
class UnqualifiedMemberAccess extends Identifier, MemberAccessImpl {
762777
private boolean instanceAccess;
763778
private NameBinding target;
764779
private ClassLikeDeclaration accessingClass;
@@ -783,7 +798,7 @@ module Public {
783798
}
784799

785800
/** Gets the simple name of this identifier, that is, the name of the member being accessed. */
786-
string getName() { result = this.getValue() }
801+
override string getMemberName() { result = this.getValue() }
787802
}
788803
}
789804

‎unified/ql/lib/codeql/unified/internal/dataflow/DataFlowGraph.qll‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ predicate step(BuilderNode node1, Step step, BuilderNode node2) {
9292
or
9393
exists(UnqualifiedMemberAccess access | access.isInstanceAccess() |
9494
node1.isLocalVariableRead(access, access.getImplicitQualifierVariable()) and
95-
step.readName(access.getName()) and
95+
step.readName(access.getMemberName()) and
9696
node2.isResultValue(access)
9797
or
9898
(node1.isIncomingValue(access) or node1.isPostUpdate(access)) and
99-
step.storeName(access.getName()) and
99+
step.storeName(access.getMemberName()) and
100100
node2.isLocalVariablePostUpdate(access, access.getImplicitQualifierVariable())
101101
)
102102
or

0 commit comments

Comments
 (0)