Skip to content

Commit 553fe02

Browse files
committed
next performance attempt
1 parent 111f770 commit 553fe02

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,13 +1613,40 @@ module DataFlow {
16131613
succ = cls.getAReceiverNode().getAPropertyRead(prop)
16141614
}
16151615

1616+
// split into many smaller steps, because that helps performance A LOT!
16161617
private class LocalFieldStep extends DataFlow::SharedFlowStep {
1617-
override predicate loadStep(DataFlow::Node pred, DataFlow::Node succ, string prop) {
1618-
localFieldLoadStep(_, pred, succ, prop)
1618+
/*
1619+
* override predicate loadStep(DataFlow::Node pred, DataFlow::Node succ, string prop) {
1620+
* exists(ClassNode cls |
1621+
* pred = cls.getConstructor().getReceiver() and
1622+
* succ = cls.getAReceiverNode().getAPropertyRead(prop)
1623+
* )
1624+
* }
1625+
*/
1626+
1627+
override predicate step(DataFlow::Node pred, DataFlow::Node succ) {
1628+
exists(ClassNode cls |
1629+
pred = cls.getConstructor().getReceiver() and
1630+
succ = cls.getAReceiverNode()
1631+
)
1632+
or
1633+
exists(ClassNode cls |
1634+
pred = cls.getADirectSuperClass().getConstructor().getReceiver() and
1635+
succ = cls.getConstructor().getReceiver()
1636+
)
16191637
}
16201638

16211639
override predicate storeStep(DataFlow::Node pred, DataFlow::SourceNode succ, string prop) {
1622-
localFieldStoreStep(_, pred, succ, prop)
1640+
exists(ClassNode cls |
1641+
(
1642+
pred = cls.getAReceiverNode().getAPropertyWrite(prop).getRhs()
1643+
or
1644+
// add support for writes on nested properties
1645+
pred = cls.getAReceiverNode().getAPropertyRead(prop) and
1646+
pred = any(DataFlow::PropRef ref).getBase()
1647+
) and
1648+
succ = cls.getConstructor().getReceiver()
1649+
)
16231650
}
16241651
}
16251652

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy