Skip to content

Commit 378c482

Browse files
committed
next performance attempt
1 parent 1b0129d commit 378c482

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
@@ -1618,13 +1618,40 @@ module DataFlow {
16181618
succ = cls.getAReceiverNode().getAPropertyRead(prop)
16191619
}
16201620

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

16261644
override predicate storeStep(DataFlow::Node pred, DataFlow::SourceNode succ, string prop) {
1627-
localFieldStoreStep(_, pred, succ, prop)
1645+
exists(ClassNode cls |
1646+
(
1647+
pred = cls.getAReceiverNode().getAPropertyWrite(prop).getRhs()
1648+
or
1649+
// add support for writes on nested properties
1650+
pred = cls.getAReceiverNode().getAPropertyRead(prop) and
1651+
pred = any(DataFlow::PropRef ref).getBase()
1652+
) and
1653+
succ = cls.getConstructor().getReceiver()
1654+
)
16281655
}
16291656
}
16301657

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