Skip to content

Commit b3161b1

Browse files
committed
JS: Factor TNode into a separate file
1 parent d912383 commit b3161b1

2 files changed

Lines changed: 34 additions & 24 deletions

File tree

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

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,32 +21,9 @@
2121
import javascript
2222
private import internal.CallGraphs
2323
private import internal.FlowSteps as FlowSteps
24+
private import internal.DataFlowNode
2425

2526
module DataFlow {
26-
cached
27-
private newtype TNode =
28-
TValueNode(AST::ValueNode nd) or
29-
TSsaDefNode(SsaDefinition d) or
30-
TCapturedVariableNode(LocalVariable v) { v.isCaptured() } or
31-
TPropNode(@property p) or
32-
TRestPatternNode(DestructuringPattern dp, Expr rest) { rest = dp.getRest() } or
33-
TDestructuringPatternNode(DestructuringPattern dp) or
34-
TElementPatternNode(ArrayPattern ap, Expr p) { p = ap.getElement(_) } or
35-
TElementNode(ArrayExpr arr, Expr e) { e = arr.getAnElement() } or
36-
TReflectiveCallNode(MethodCallExpr ce, string kind) {
37-
ce.getMethodName() = kind and
38-
(kind = "call" or kind = "apply")
39-
} or
40-
TThisNode(StmtContainer f) { f.(Function).getThisBinder() = f or f instanceof TopLevel } or
41-
TUnusedParameterNode(SimpleParameter p) { not exists(SSA::definition(p)) } or
42-
TDestructuredModuleImportNode(ImportDeclaration decl) {
43-
exists(decl.getASpecifier().getImportedName())
44-
} or
45-
THtmlAttributeNode(HTML::Attribute attr) or
46-
TExceptionalFunctionReturnNode(Function f) or
47-
TExceptionalInvocationReturnNode(InvokeExpr e) or
48-
TGlobalAccessPathRoot()
49-
5027
/**
5128
* A node in the data flow graph.
5229
*/
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* INTERNAL: Do not use outside the data flow library.
3+
*
4+
* Contains the raw data type underlying `DataFlow::Node`.
5+
*/
6+
private import javascript
7+
8+
/**
9+
* The raw data type underlying `DataFlow::Node`.
10+
*/
11+
cached
12+
newtype TNode =
13+
TValueNode(AST::ValueNode nd) or
14+
TSsaDefNode(SsaDefinition d) or
15+
TCapturedVariableNode(LocalVariable v) { v.isCaptured() } or
16+
TPropNode(@property p) or
17+
TRestPatternNode(DestructuringPattern dp, Expr rest) { rest = dp.getRest() } or
18+
TDestructuringPatternNode(DestructuringPattern dp) or
19+
TElementPatternNode(ArrayPattern ap, Expr p) { p = ap.getElement(_) } or
20+
TElementNode(ArrayExpr arr, Expr e) { e = arr.getAnElement() } or
21+
TReflectiveCallNode(MethodCallExpr ce, string kind) {
22+
ce.getMethodName() = kind and
23+
(kind = "call" or kind = "apply")
24+
} or
25+
TThisNode(StmtContainer f) { f.(Function).getThisBinder() = f or f instanceof TopLevel } or
26+
TUnusedParameterNode(SimpleParameter p) { not exists(SSA::definition(p)) } or
27+
TDestructuredModuleImportNode(ImportDeclaration decl) {
28+
exists(decl.getASpecifier().getImportedName())
29+
} or
30+
THtmlAttributeNode(HTML::Attribute attr) or
31+
TExceptionalFunctionReturnNode(Function f) or
32+
TExceptionalInvocationReturnNode(InvokeExpr e) or
33+
TGlobalAccessPathRoot()

0 commit comments

Comments
 (0)