@@ -61,12 +61,7 @@ predicate postDominatedPropWrite(
6161int getRank ( ReachableBasicBlock bb , ControlFlowNode ref , string name ) {
6262 ref =
6363 rank [ result ] ( ControlFlowNode e |
64- exists ( DataFlow:: PropWrite write |
65- write .getPropertyName ( ) = name and
66- e = write .getWriteNode ( ) and
67- unambiguousPropWrite ( write )
68- )
69- or
64+ isAPropertyWrite ( e , name ) or
7065 isAPropertyRead ( e , name )
7166 |
7267 e order by any ( int i | e = bb .getNode ( i ) )
@@ -80,6 +75,13 @@ predicate isAPropertyRead(Expr e, string name) {
8075 exists ( DataFlow:: PropRead read | read .asExpr ( ) = e and read .getPropertyName ( ) = name )
8176}
8277
78+ /**
79+ * Holds if `e` is a property write of a property `name`.
80+ */
81+ predicate isAPropertyWrite ( ControlFlowNode e , string name ) {
82+ exists ( DataFlow:: PropWrite write | write .getWriteNode ( ) = e and write .getPropertyName ( ) = name ) // TODO: umambi?
83+ }
84+
8385/**
8486 * Holds if `e` may access a property named `name`.
8587 */
@@ -218,12 +220,11 @@ ControlFlowNode getANodeWithNoPropAccessBetweenInsideBlock(string name, DataFlow
218220 // stop at reads of `name` and at impure expressions (except writes to `name`)
219221 not (
220222 maybeAccessesProperty ( result , name ) and
221- not result = any ( DataFlow :: PropWrite w | w . getPropertyName ( ) = name ) . getWriteNode ( )
223+ not isAPropertyWrite ( result , name )
222224 ) and
223225 // stop at the first write to `name` that comes after `write`.
224226 (
225- not result .getAPredecessor ( ) =
226- any ( DataFlow:: PropWrite w | w .getPropertyName ( ) = name ) .getWriteNode ( )
227+ not isAPropertyWrite ( result .getAPredecessor ( ) , name )
227228 or
228229 result .getAPredecessor ( ) = write .getWriteNode ( )
229230 )
0 commit comments