diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index c37a4e938a23..9465a7608845 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -123,6 +123,7 @@ class AstNode extends @ast_node, NodeInStmtContainer { AstNode getParent() { Stages::Ast::ref() and this = result.getAChild() } /** Gets the first control flow node belonging to this syntactic entity. */ + pragma[no_dynamic_join_order] ControlFlowNode getFirstControlFlowNode() { result = this } /** Holds if this syntactic entity belongs to an externs file. */ diff --git a/javascript/ql/lib/semmle/javascript/RangeAnalysis.qll b/javascript/ql/lib/semmle/javascript/RangeAnalysis.qll index a385df662ce2..dfb6a826a0a2 100644 --- a/javascript/ql/lib/semmle/javascript/RangeAnalysis.qll +++ b/javascript/ql/lib/semmle/javascript/RangeAnalysis.qll @@ -289,6 +289,7 @@ module RangeAnalysis { /** * Holds if the given container has a comment or identifier mentioning `NaN`. */ + pragma[no_dynamic_join_order] predicate hasNaNIndicator(StmtContainer container) { exists(Comment comment | comment.getText().regexpMatch("(?s).*N[aA]N.*") and diff --git a/javascript/ql/lib/semmle/javascript/Regexp.qll b/javascript/ql/lib/semmle/javascript/Regexp.qll index c42df3939c22..205062d32705 100644 --- a/javascript/ql/lib/semmle/javascript/Regexp.qll +++ b/javascript/ql/lib/semmle/javascript/Regexp.qll @@ -1092,6 +1092,7 @@ predicate isInterpretedAsRegExp(DataFlow::Node source) { * as a part of a regular expression. */ overlay[global] +pragma[no_dynamic_join_order] private DataFlow::Node regExpSource(DataFlow::Node re, DataFlow::TypeBackTracker t) { t.start() and re = result and diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index a24d7976b3d6..e5e75650eda8 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -1803,6 +1803,7 @@ module DataFlow { * Holds if there is a step from `pred` to `succ` through a field accessed through `this` in a class. */ overlay[global] + pragma[no_dynamic_join_order] predicate localFieldStep(DataFlow::Node pred, DataFlow::Node succ) { exists(ClassNode cls, string prop | pred = AccessPath::getAnAssignmentTo(cls.getADirectSuperClass*().getAReceiverNode(), prop) or diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll index d854dfc3f628..dcd2b33a97a5 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll @@ -1739,6 +1739,7 @@ class RegExpCreationNode extends DataFlow::SourceNode { /** Gets a data flow node referring to this regular expression. */ overlay[global] + pragma[no_dynamic_join_order] private DataFlow::SourceNode getAReference(DataFlow::TypeTracker t) { t.start() and result = this diff --git a/javascript/ql/src/Statements/LabelInCase.ql b/javascript/ql/src/Statements/LabelInCase.ql index 15690c83bcc3..a85c22003554 100644 --- a/javascript/ql/src/Statements/LabelInCase.ql +++ b/javascript/ql/src/Statements/LabelInCase.ql @@ -13,6 +13,7 @@ import javascript +pragma[no_dynamic_join_order] from LabeledStmt l, Case c where l = c.getAChildStmt+() and