mirror of
https://github.com/github/codeql.git
synced 2026-02-08 03:01:10 +01:00
Merge pull request #99 from github/missing-noinline
Add query: Missing `noinline`
This commit is contained in:
@@ -16,15 +16,6 @@ private string stringIndexedMember(string name, string index) {
|
||||
result = name + "(_)" and exists(index)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `node` has an annotation with `name`.
|
||||
*/
|
||||
private predicate hasAnnotation(AstNode node, string name) {
|
||||
exists(Generated::Annotation annotation | annotation.getName().getValue() = name |
|
||||
toGenerated(node).getParent() = annotation.getParent()
|
||||
)
|
||||
}
|
||||
|
||||
/** An AST node of a QL program */
|
||||
class AstNode extends TAstNode {
|
||||
string toString() { result = getAPrimaryQlClass() }
|
||||
@@ -60,6 +51,12 @@ class AstNode extends TAstNode {
|
||||
/** Gets the QLDoc comment for this AST node, if any. */
|
||||
QLDoc getQLDoc() { none() }
|
||||
|
||||
/** Holds if `node` has an annotation with `name`. */
|
||||
predicate hasAnnotation(string name) { this.getAnAnnotation().getName() = name }
|
||||
|
||||
/** Gets an annotation of this AST node. */
|
||||
Annotation getAnAnnotation() { toGenerated(this).getParent() = toGenerated(result).getParent() }
|
||||
|
||||
/**
|
||||
* Gets the predicate that contains this AST node.
|
||||
*/
|
||||
@@ -400,12 +397,12 @@ class ClassPredicate extends TClassPredicate, Predicate {
|
||||
/**
|
||||
* Holds if this predicate is private.
|
||||
*/
|
||||
predicate isPrivate() { hasAnnotation(this, "private") }
|
||||
predicate isPrivate() { hasAnnotation("private") }
|
||||
|
||||
/**
|
||||
* Holds if this predicate is annotated as overriding another predicate.
|
||||
*/
|
||||
predicate isOverride() { hasAnnotation(this, "override") }
|
||||
predicate isOverride() { hasAnnotation("override") }
|
||||
|
||||
override VarDecl getParameter(int i) {
|
||||
toGenerated(result) =
|
||||
@@ -618,7 +615,7 @@ class Module extends TModule, ModuleDeclaration {
|
||||
*/
|
||||
class ModuleMember extends TModuleMember, AstNode {
|
||||
/** Holds if this member is declared as `private`. */
|
||||
predicate isPrivate() { hasAnnotation(this, "private") }
|
||||
predicate isPrivate() { hasAnnotation("private") }
|
||||
}
|
||||
|
||||
/** A declaration. E.g. a class, type, predicate, newtype... */
|
||||
@@ -2090,6 +2087,112 @@ class ModuleExpr extends TModuleExpr, ModuleRef {
|
||||
}
|
||||
}
|
||||
|
||||
/** An argument to an annotation. */
|
||||
private class AnnotationArg extends TAnnotationArg, AstNode {
|
||||
Generated::AnnotArg arg;
|
||||
|
||||
AnnotationArg() { this = TAnnotationArg(arg) }
|
||||
|
||||
/** Gets the name of this argument. */
|
||||
string getValue() {
|
||||
result =
|
||||
[
|
||||
arg.getChild().(Generated::SimpleId).getValue(),
|
||||
arg.getChild().(Generated::Result).getValue(), arg.getChild().(Generated::This).getValue()
|
||||
]
|
||||
}
|
||||
|
||||
override string toString() { result = this.getValue() }
|
||||
}
|
||||
|
||||
private class NoInlineArg extends AnnotationArg {
|
||||
NoInlineArg() { this.getValue() = "noinline" }
|
||||
}
|
||||
|
||||
private class NoMagicArg extends AnnotationArg {
|
||||
NoMagicArg() { this.getValue() = "nomagic" }
|
||||
}
|
||||
|
||||
private class InlineArg extends AnnotationArg {
|
||||
InlineArg() { this.getValue() = "inline" }
|
||||
}
|
||||
|
||||
private class NoOptArg extends AnnotationArg {
|
||||
NoOptArg() { this.getValue() = "noopt" }
|
||||
}
|
||||
|
||||
private class MonotonicAggregatesArg extends AnnotationArg {
|
||||
MonotonicAggregatesArg() { this.getValue() = "monotonicAggregates" }
|
||||
}
|
||||
|
||||
/** An annotation on an element. */
|
||||
class Annotation extends TAnnotation, AstNode {
|
||||
Generated::Annotation annot;
|
||||
|
||||
Annotation() { this = TAnnotation(annot) }
|
||||
|
||||
override string toString() { result = "annotation" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "Annotation" }
|
||||
|
||||
override Location getLocation() { result = annot.getLocation() }
|
||||
|
||||
/** Gets the node corresponding to the field `args`. */
|
||||
AnnotationArg getArgs(int i) { toGenerated(result) = annot.getArgs(i) }
|
||||
|
||||
/** Gets the node corresponding to the field `name`. */
|
||||
string getName() { result = annot.getName().getValue() }
|
||||
}
|
||||
|
||||
/** A `pragma[noinline]` annotation. */
|
||||
class NoInline extends Annotation {
|
||||
NoInline() { this.getArgs(0) instanceof NoInlineArg }
|
||||
|
||||
override string toString() { result = "noinline" }
|
||||
}
|
||||
|
||||
/** A `pragma[inline]` annotation. */
|
||||
class Inline extends Annotation {
|
||||
Inline() { this.getArgs(0) instanceof InlineArg }
|
||||
|
||||
override string toString() { result = "inline" }
|
||||
}
|
||||
|
||||
/** A `pragma[nomagic]` annotation. */
|
||||
class NoMagic extends Annotation {
|
||||
NoMagic() { this.getArgs(0) instanceof NoMagicArg }
|
||||
|
||||
override string toString() { result = "nomagic" }
|
||||
}
|
||||
|
||||
/** A `pragma[noopt]` annotation. */
|
||||
class NoOpt extends Annotation {
|
||||
NoOpt() { this.getArgs(0) instanceof NoOptArg }
|
||||
|
||||
override string toString() { result = "noopt" }
|
||||
}
|
||||
|
||||
/** A `language[monotonicAggregates]` annotation. */
|
||||
class MonotonicAggregates extends Annotation {
|
||||
MonotonicAggregates() { this.getArgs(0) instanceof MonotonicAggregatesArg }
|
||||
|
||||
override string toString() { result = "monotonicaggregates" }
|
||||
}
|
||||
|
||||
/** A `bindingset` annotation. */
|
||||
class BindingSet extends Annotation {
|
||||
BindingSet() { this.getName() = "bindingset" }
|
||||
|
||||
/** Gets the `index`'th bound name in this bindingset. */
|
||||
string getBoundName(int index) { result = this.getArgs(index).getValue() }
|
||||
|
||||
/** Gets a name bound by this bindingset, if any. */
|
||||
string getABoundName() { result = getBoundName(_) }
|
||||
|
||||
/** Gets the number of names bound by this bindingset. */
|
||||
int getNumberOfBoundNames() { result = count(getABoundName()) }
|
||||
}
|
||||
|
||||
/**
|
||||
* Classes modelling YAML AST nodes.
|
||||
*/
|
||||
|
||||
@@ -59,6 +59,8 @@ newtype TAstNode =
|
||||
TDontCare(Generated::Underscore dontcare) or
|
||||
TModuleExpr(Generated::ModuleExpr me) or
|
||||
TPredicateExpr(Generated::PredicateExpr pe) or
|
||||
TAnnotation(Generated::Annotation annot) or
|
||||
TAnnotationArg(Generated::AnnotArg arg) or
|
||||
TYamlCommemt(Generated::YamlComment yc) or
|
||||
TYamlEntry(Generated::YamlEntry ye) or
|
||||
TYamlKey(Generated::YamlKey yk) or
|
||||
@@ -184,6 +186,10 @@ Generated::AstNode toGenerated(AST::AstNode n) {
|
||||
n = TAnyCall(result)
|
||||
or
|
||||
n = TSuper(result)
|
||||
or
|
||||
n = TAnnotation(result)
|
||||
or
|
||||
n = TAnnotationArg(result)
|
||||
}
|
||||
|
||||
class TPredicate = TCharPred or TClasslessPredicate or TClassPredicate or TDBRelation;
|
||||
|
||||
23
ql/src/queries/performance/MissingNoinline.ql
Normal file
23
ql/src/queries/performance/MissingNoinline.ql
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* @name Missing `noinline` or `nomagic` annotation
|
||||
* @description When a predicate is factored out to improve join-ordering, it should be marked as `noinline` or `nomagic`.
|
||||
* @kind problem
|
||||
* @problem.severity error
|
||||
* @id ql/missing-noinline
|
||||
* @tags performance
|
||||
* @precision high
|
||||
*/
|
||||
|
||||
import ql
|
||||
|
||||
from QLDoc doc, Predicate decl
|
||||
where
|
||||
doc.getContents().matches(["%join order%", "%join-order%"]) and
|
||||
decl.getQLDoc() = doc and
|
||||
not decl.getAnAnnotation() instanceof NoInline and
|
||||
not decl.getAnAnnotation() instanceof NoMagic and
|
||||
not decl.getAnAnnotation() instanceof NoOpt and
|
||||
// If it's marked as inline it's probably because the QLDoc says something like
|
||||
// "this predicate is inlined because it gives a better join-order".
|
||||
not decl.getAnAnnotation() instanceof Inline
|
||||
select decl, "This predicate might be inlined."
|
||||
@@ -29,159 +29,161 @@ nodes
|
||||
| Foo.qll:6:30:6:30 | ComparisonOp | semmle.order | 14 |
|
||||
| Foo.qll:6:32:6:36 | String | semmle.label | [String] String |
|
||||
| Foo.qll:6:32:6:36 | String | semmle.order | 15 |
|
||||
| Foo.qll:9:1:9:5 | annotation | semmle.label | [Annotation] annotation |
|
||||
| Foo.qll:9:1:9:5 | annotation | semmle.order | 16 |
|
||||
| Foo.qll:9:7:11:1 | ClasslessPredicate foo | semmle.label | [ClasslessPredicate] ClasslessPredicate foo |
|
||||
| Foo.qll:9:7:11:1 | ClasslessPredicate foo | semmle.order | 16 |
|
||||
| Foo.qll:9:7:11:1 | ClasslessPredicate foo | semmle.order | 17 |
|
||||
| Foo.qll:9:21:9:23 | TypeExpr | semmle.label | [TypeExpr] TypeExpr |
|
||||
| Foo.qll:9:21:9:23 | TypeExpr | semmle.order | 17 |
|
||||
| Foo.qll:9:21:9:23 | TypeExpr | semmle.order | 18 |
|
||||
| Foo.qll:9:21:9:25 | f | semmle.label | [VarDecl] f |
|
||||
| Foo.qll:9:21:9:25 | f | semmle.order | 17 |
|
||||
| Foo.qll:9:21:9:25 | f | semmle.order | 18 |
|
||||
| Foo.qll:10:3:10:3 | f | semmle.label | [VarAccess] f |
|
||||
| Foo.qll:10:3:10:3 | f | semmle.order | 19 |
|
||||
| Foo.qll:10:3:10:3 | f | semmle.order | 20 |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | semmle.order | 19 |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | semmle.order | 20 |
|
||||
| Foo.qll:10:5:10:5 | ComparisonOp | semmle.label | [ComparisonOp] ComparisonOp |
|
||||
| Foo.qll:10:5:10:5 | ComparisonOp | semmle.order | 21 |
|
||||
| Foo.qll:10:5:10:5 | ComparisonOp | semmle.order | 22 |
|
||||
| Foo.qll:10:7:10:85 | Rank | semmle.label | [Rank] Rank |
|
||||
| Foo.qll:10:7:10:85 | Rank | semmle.order | 22 |
|
||||
| Foo.qll:10:7:10:85 | Rank | semmle.order | 23 |
|
||||
| Foo.qll:10:12:10:12 | Integer | semmle.label | [Integer] Integer |
|
||||
| Foo.qll:10:12:10:12 | Integer | semmle.order | 23 |
|
||||
| Foo.qll:10:12:10:12 | Integer | semmle.order | 24 |
|
||||
| Foo.qll:10:15:10:17 | TypeExpr | semmle.label | [TypeExpr] TypeExpr |
|
||||
| Foo.qll:10:15:10:17 | TypeExpr | semmle.order | 24 |
|
||||
| Foo.qll:10:15:10:17 | TypeExpr | semmle.order | 25 |
|
||||
| Foo.qll:10:15:10:23 | inner | semmle.label | [VarDecl] inner |
|
||||
| Foo.qll:10:15:10:23 | inner | semmle.order | 24 |
|
||||
| Foo.qll:10:15:10:23 | inner | semmle.order | 25 |
|
||||
| Foo.qll:10:27:10:31 | inner | semmle.label | [VarAccess] inner |
|
||||
| Foo.qll:10:27:10:31 | inner | semmle.order | 26 |
|
||||
| Foo.qll:10:27:10:31 | inner | semmle.order | 27 |
|
||||
| Foo.qll:10:27:10:42 | MemberCall | semmle.label | [MemberCall] MemberCall |
|
||||
| Foo.qll:10:27:10:42 | MemberCall | semmle.order | 26 |
|
||||
| Foo.qll:10:27:10:42 | MemberCall | semmle.order | 27 |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | semmle.order | 26 |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | semmle.order | 27 |
|
||||
| Foo.qll:10:44:10:44 | ComparisonOp | semmle.label | [ComparisonOp] ComparisonOp |
|
||||
| Foo.qll:10:44:10:44 | ComparisonOp | semmle.order | 29 |
|
||||
| Foo.qll:10:44:10:44 | ComparisonOp | semmle.order | 30 |
|
||||
| Foo.qll:10:46:10:50 | String | semmle.label | [String] String |
|
||||
| Foo.qll:10:46:10:50 | String | semmle.order | 30 |
|
||||
| Foo.qll:10:46:10:50 | String | semmle.order | 31 |
|
||||
| Foo.qll:10:54:10:58 | inner | semmle.label | [VarAccess] inner |
|
||||
| Foo.qll:10:54:10:58 | inner | semmle.order | 31 |
|
||||
| Foo.qll:10:54:10:58 | inner | semmle.order | 32 |
|
||||
| Foo.qll:10:69:10:73 | inner | semmle.label | [VarAccess] inner |
|
||||
| Foo.qll:10:69:10:73 | inner | semmle.order | 32 |
|
||||
| Foo.qll:10:69:10:73 | inner | semmle.order | 33 |
|
||||
| Foo.qll:10:69:10:84 | MemberCall | semmle.label | [MemberCall] MemberCall |
|
||||
| Foo.qll:10:69:10:84 | MemberCall | semmle.order | 32 |
|
||||
| Foo.qll:10:69:10:84 | MemberCall | semmle.order | 33 |
|
||||
| Foo.qll:13:1:27:1 | ClasslessPredicate calls | semmle.label | [ClasslessPredicate] ClasslessPredicate calls |
|
||||
| Foo.qll:13:1:27:1 | ClasslessPredicate calls | semmle.order | 34 |
|
||||
| Foo.qll:13:1:27:1 | ClasslessPredicate calls | semmle.order | 35 |
|
||||
| Foo.qll:13:17:13:19 | TypeExpr | semmle.label | [TypeExpr] TypeExpr |
|
||||
| Foo.qll:13:17:13:19 | TypeExpr | semmle.order | 35 |
|
||||
| Foo.qll:13:17:13:19 | TypeExpr | semmle.order | 36 |
|
||||
| Foo.qll:13:17:13:21 | f | semmle.label | [VarDecl] f |
|
||||
| Foo.qll:13:17:13:21 | f | semmle.order | 35 |
|
||||
| Foo.qll:13:17:13:21 | f | semmle.order | 36 |
|
||||
| Foo.qll:14:3:14:10 | PredicateCall | semmle.label | [PredicateCall] PredicateCall |
|
||||
| Foo.qll:14:3:14:10 | PredicateCall | semmle.order | 37 |
|
||||
| Foo.qll:14:3:14:10 | PredicateCall | semmle.order | 38 |
|
||||
| Foo.qll:14:3:16:29 | Disjunction | semmle.label | [Disjunction] Disjunction |
|
||||
| Foo.qll:14:3:16:29 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:16:29 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:3:18:28 | Disjunction | semmle.label | [Disjunction] Disjunction |
|
||||
| Foo.qll:14:3:18:28 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:18:28 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:3:20:13 | Disjunction | semmle.label | [Disjunction] Disjunction |
|
||||
| Foo.qll:14:3:20:13 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:20:13 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:3:22:16 | Disjunction | semmle.label | [Disjunction] Disjunction |
|
||||
| Foo.qll:14:3:22:16 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:22:16 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:3:24:23 | Disjunction | semmle.label | [Disjunction] Disjunction |
|
||||
| Foo.qll:14:3:24:23 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:24:23 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:3:26:14 | Disjunction | semmle.label | [Disjunction] Disjunction |
|
||||
| Foo.qll:14:3:26:14 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:26:14 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:9:14:9 | f | semmle.label | [VarAccess] f |
|
||||
| Foo.qll:14:9:14:9 | f | semmle.order | 44 |
|
||||
| Foo.qll:14:9:14:9 | f | semmle.order | 45 |
|
||||
| Foo.qll:16:3:16:7 | String | semmle.label | [String] String |
|
||||
| Foo.qll:16:3:16:7 | String | semmle.order | 45 |
|
||||
| Foo.qll:16:3:16:7 | String | semmle.order | 46 |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | semmle.order | 45 |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | semmle.order | 46 |
|
||||
| Foo.qll:16:9:16:9 | ComparisonOp | semmle.label | [ComparisonOp] ComparisonOp |
|
||||
| Foo.qll:16:9:16:9 | ComparisonOp | semmle.order | 47 |
|
||||
| Foo.qll:16:9:16:9 | ComparisonOp | semmle.order | 48 |
|
||||
| Foo.qll:16:11:16:11 | f | semmle.label | [VarAccess] f |
|
||||
| Foo.qll:16:11:16:11 | f | semmle.order | 48 |
|
||||
| Foo.qll:16:11:16:11 | f | semmle.order | 49 |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | semmle.label | [MemberCall] MemberCall |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | semmle.order | 48 |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | semmle.order | 49 |
|
||||
| Foo.qll:16:22:16:22 | Integer | semmle.label | [Integer] Integer |
|
||||
| Foo.qll:16:22:16:22 | Integer | semmle.order | 50 |
|
||||
| Foo.qll:16:22:16:22 | Integer | semmle.order | 51 |
|
||||
| Foo.qll:16:25:16:25 | Integer | semmle.label | [Integer] Integer |
|
||||
| Foo.qll:16:25:16:25 | Integer | semmle.order | 51 |
|
||||
| Foo.qll:16:25:16:25 | Integer | semmle.order | 52 |
|
||||
| Foo.qll:16:28:16:28 | Integer | semmle.label | [Integer] Integer |
|
||||
| Foo.qll:16:28:16:28 | Integer | semmle.order | 52 |
|
||||
| Foo.qll:16:28:16:28 | Integer | semmle.order | 53 |
|
||||
| Foo.qll:18:3:18:3 | f | semmle.label | [VarAccess] f |
|
||||
| Foo.qll:18:3:18:3 | f | semmle.order | 53 |
|
||||
| Foo.qll:18:3:18:3 | f | semmle.order | 54 |
|
||||
| Foo.qll:18:3:18:9 | InlineCast | semmle.label | [InlineCast] InlineCast |
|
||||
| Foo.qll:18:3:18:9 | InlineCast | semmle.order | 53 |
|
||||
| Foo.qll:18:3:18:9 | InlineCast | semmle.order | 54 |
|
||||
| Foo.qll:18:3:18:20 | MemberCall | semmle.label | [MemberCall] MemberCall |
|
||||
| Foo.qll:18:3:18:20 | MemberCall | semmle.order | 53 |
|
||||
| Foo.qll:18:3:18:20 | MemberCall | semmle.order | 54 |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | semmle.order | 53 |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | semmle.order | 54 |
|
||||
| Foo.qll:18:6:18:8 | TypeExpr | semmle.label | [TypeExpr] TypeExpr |
|
||||
| Foo.qll:18:6:18:8 | TypeExpr | semmle.order | 57 |
|
||||
| Foo.qll:18:6:18:8 | TypeExpr | semmle.order | 58 |
|
||||
| Foo.qll:18:22:18:22 | ComparisonOp | semmle.label | [ComparisonOp] ComparisonOp |
|
||||
| Foo.qll:18:22:18:22 | ComparisonOp | semmle.order | 58 |
|
||||
| Foo.qll:18:22:18:22 | ComparisonOp | semmle.order | 59 |
|
||||
| Foo.qll:18:24:18:28 | String | semmle.label | [String] String |
|
||||
| Foo.qll:18:24:18:28 | String | semmle.order | 59 |
|
||||
| Foo.qll:18:24:18:28 | String | semmle.order | 60 |
|
||||
| Foo.qll:20:3:20:3 | f | semmle.label | [VarAccess] f |
|
||||
| Foo.qll:20:3:20:3 | f | semmle.order | 60 |
|
||||
| Foo.qll:20:3:20:3 | f | semmle.order | 61 |
|
||||
| Foo.qll:20:3:20:9 | InlineCast | semmle.label | [InlineCast] InlineCast |
|
||||
| Foo.qll:20:3:20:9 | InlineCast | semmle.order | 60 |
|
||||
| Foo.qll:20:3:20:9 | InlineCast | semmle.order | 61 |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | semmle.order | 60 |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | semmle.order | 61 |
|
||||
| Foo.qll:20:6:20:8 | TypeExpr | semmle.label | [TypeExpr] TypeExpr |
|
||||
| Foo.qll:20:6:20:8 | TypeExpr | semmle.order | 63 |
|
||||
| Foo.qll:20:6:20:8 | TypeExpr | semmle.order | 64 |
|
||||
| Foo.qll:20:11:20:11 | ComparisonOp | semmle.label | [ComparisonOp] ComparisonOp |
|
||||
| Foo.qll:20:11:20:11 | ComparisonOp | semmle.order | 64 |
|
||||
| Foo.qll:20:11:20:11 | ComparisonOp | semmle.order | 65 |
|
||||
| Foo.qll:20:13:20:13 | f | semmle.label | [VarAccess] f |
|
||||
| Foo.qll:20:13:20:13 | f | semmle.order | 65 |
|
||||
| Foo.qll:20:13:20:13 | f | semmle.order | 66 |
|
||||
| Foo.qll:22:3:22:3 | f | semmle.label | [VarAccess] f |
|
||||
| Foo.qll:22:3:22:3 | f | semmle.order | 66 |
|
||||
| Foo.qll:22:3:22:3 | f | semmle.order | 67 |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | semmle.order | 66 |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | semmle.order | 67 |
|
||||
| Foo.qll:22:5:22:5 | ComparisonOp | semmle.label | [ComparisonOp] ComparisonOp |
|
||||
| Foo.qll:22:5:22:5 | ComparisonOp | semmle.order | 68 |
|
||||
| Foo.qll:22:5:22:5 | ComparisonOp | semmle.order | 69 |
|
||||
| Foo.qll:22:7:22:16 | FullAggregate[any] | semmle.label | [FullAggregate[any]] FullAggregate[any] |
|
||||
| Foo.qll:22:7:22:16 | FullAggregate[any] | semmle.order | 69 |
|
||||
| Foo.qll:22:7:22:16 | FullAggregate[any] | semmle.order | 70 |
|
||||
| Foo.qll:22:11:22:13 | TypeExpr | semmle.label | [TypeExpr] TypeExpr |
|
||||
| Foo.qll:22:11:22:13 | TypeExpr | semmle.order | 70 |
|
||||
| Foo.qll:22:11:22:13 | TypeExpr | semmle.order | 71 |
|
||||
| Foo.qll:22:11:22:15 | f | semmle.label | [VarDecl] f |
|
||||
| Foo.qll:22:11:22:15 | f | semmle.order | 70 |
|
||||
| Foo.qll:22:11:22:15 | f | semmle.order | 71 |
|
||||
| Foo.qll:24:3:24:3 | Integer | semmle.label | [Integer] Integer |
|
||||
| Foo.qll:24:3:24:3 | Integer | semmle.order | 72 |
|
||||
| Foo.qll:24:3:24:3 | Integer | semmle.order | 73 |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | semmle.order | 72 |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | semmle.order | 73 |
|
||||
| Foo.qll:24:5:24:5 | ComparisonOp | semmle.label | [ComparisonOp] ComparisonOp |
|
||||
| Foo.qll:24:5:24:5 | ComparisonOp | semmle.order | 74 |
|
||||
| Foo.qll:24:5:24:5 | ComparisonOp | semmle.order | 75 |
|
||||
| Foo.qll:24:7:24:7 | Integer | semmle.label | [Integer] Integer |
|
||||
| Foo.qll:24:7:24:7 | Integer | semmle.order | 75 |
|
||||
| Foo.qll:24:7:24:7 | Integer | semmle.order | 76 |
|
||||
| Foo.qll:24:7:24:23 | AddExpr | semmle.label | [AddExpr] AddExpr |
|
||||
| Foo.qll:24:7:24:23 | AddExpr | semmle.order | 75 |
|
||||
| Foo.qll:24:7:24:23 | AddExpr | semmle.order | 76 |
|
||||
| Foo.qll:24:12:24:12 | Integer | semmle.label | [Integer] Integer |
|
||||
| Foo.qll:24:12:24:12 | Integer | semmle.order | 77 |
|
||||
| Foo.qll:24:12:24:12 | Integer | semmle.order | 78 |
|
||||
| Foo.qll:24:12:24:22 | AddExpr | semmle.label | [AddExpr] AddExpr |
|
||||
| Foo.qll:24:12:24:22 | AddExpr | semmle.order | 77 |
|
||||
| Foo.qll:24:12:24:22 | AddExpr | semmle.order | 78 |
|
||||
| Foo.qll:24:17:24:17 | Integer | semmle.label | [Integer] Integer |
|
||||
| Foo.qll:24:17:24:17 | Integer | semmle.order | 79 |
|
||||
| Foo.qll:24:17:24:17 | Integer | semmle.order | 80 |
|
||||
| Foo.qll:24:17:24:21 | AddExpr | semmle.label | [AddExpr] AddExpr |
|
||||
| Foo.qll:24:17:24:21 | AddExpr | semmle.order | 79 |
|
||||
| Foo.qll:24:17:24:21 | AddExpr | semmle.order | 80 |
|
||||
| Foo.qll:24:21:24:21 | Integer | semmle.label | [Integer] Integer |
|
||||
| Foo.qll:24:21:24:21 | Integer | semmle.order | 81 |
|
||||
| Foo.qll:24:21:24:21 | Integer | semmle.order | 82 |
|
||||
| Foo.qll:26:3:26:6 | Boolean | semmle.label | [Boolean] Boolean |
|
||||
| Foo.qll:26:3:26:6 | Boolean | semmle.order | 82 |
|
||||
| Foo.qll:26:3:26:6 | Boolean | semmle.order | 83 |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | semmle.order | 82 |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | semmle.order | 83 |
|
||||
| Foo.qll:26:8:26:8 | ComparisonOp | semmle.label | [ComparisonOp] ComparisonOp |
|
||||
| Foo.qll:26:8:26:8 | ComparisonOp | semmle.order | 84 |
|
||||
| Foo.qll:26:8:26:8 | ComparisonOp | semmle.order | 85 |
|
||||
| Foo.qll:26:10:26:14 | Boolean | semmle.label | [Boolean] Boolean |
|
||||
| Foo.qll:26:10:26:14 | Boolean | semmle.order | 85 |
|
||||
| Foo.qll:26:10:26:14 | Boolean | semmle.order | 86 |
|
||||
| printAst.ql:1:1:1:28 | Import | semmle.label | [Import] Import |
|
||||
| printAst.ql:1:1:1:28 | Import | semmle.order | 86 |
|
||||
| printAst.ql:1:1:1:28 | Import | semmle.order | 87 |
|
||||
| printAst.ql:1:1:1:29 | TopLevel | semmle.label | [TopLevel] TopLevel |
|
||||
| printAst.ql:1:1:1:29 | TopLevel | semmle.order | 86 |
|
||||
| printAst.ql:1:1:1:29 | TopLevel | semmle.order | 87 |
|
||||
edges
|
||||
| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.label | getAnImport() |
|
||||
| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.order | 1 |
|
||||
| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:3:1:7:1 | Class Foo | semmle.label | getAClass() |
|
||||
| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:3:1:7:1 | Class Foo | semmle.order | 3 |
|
||||
| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:9:7:11:1 | ClasslessPredicate foo | semmle.label | getAPredicate() |
|
||||
| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:9:7:11:1 | ClasslessPredicate foo | semmle.order | 16 |
|
||||
| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:9:7:11:1 | ClasslessPredicate foo | semmle.order | 17 |
|
||||
| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:13:1:27:1 | ClasslessPredicate calls | semmle.label | getAPredicate() |
|
||||
| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:13:1:27:1 | ClasslessPredicate calls | semmle.order | 34 |
|
||||
| Foo.qll:1:1:27:2 | TopLevel | Foo.qll:13:1:27:1 | ClasslessPredicate calls | semmle.order | 35 |
|
||||
| Foo.qll:3:1:7:1 | Class Foo | Foo.qll:3:19:3:22 | TypeExpr | semmle.label | getASuperType() |
|
||||
| Foo.qll:3:1:7:1 | Class Foo | Foo.qll:3:19:3:22 | TypeExpr | semmle.order | 4 |
|
||||
| Foo.qll:3:1:7:1 | Class Foo | Foo.qll:4:3:4:17 | CharPred Foo | semmle.label | getCharPred() |
|
||||
@@ -207,142 +209,142 @@ edges
|
||||
| Foo.qll:6:23:6:36 | ComparisonFormula | Foo.qll:6:32:6:36 | String | semmle.label | getRightOperand() |
|
||||
| Foo.qll:6:23:6:36 | ComparisonFormula | Foo.qll:6:32:6:36 | String | semmle.order | 15 |
|
||||
| Foo.qll:9:7:11:1 | ClasslessPredicate foo | Foo.qll:9:21:9:25 | f | semmle.label | getParameter(_) |
|
||||
| Foo.qll:9:7:11:1 | ClasslessPredicate foo | Foo.qll:9:21:9:25 | f | semmle.order | 17 |
|
||||
| Foo.qll:9:7:11:1 | ClasslessPredicate foo | Foo.qll:9:21:9:25 | f | semmle.order | 18 |
|
||||
| Foo.qll:9:7:11:1 | ClasslessPredicate foo | Foo.qll:10:3:10:85 | ComparisonFormula | semmle.label | getBody() |
|
||||
| Foo.qll:9:7:11:1 | ClasslessPredicate foo | Foo.qll:10:3:10:85 | ComparisonFormula | semmle.order | 19 |
|
||||
| Foo.qll:9:7:11:1 | ClasslessPredicate foo | Foo.qll:10:3:10:85 | ComparisonFormula | semmle.order | 20 |
|
||||
| Foo.qll:9:21:9:25 | f | Foo.qll:9:21:9:23 | TypeExpr | semmle.label | getTypeExpr() |
|
||||
| Foo.qll:9:21:9:25 | f | Foo.qll:9:21:9:23 | TypeExpr | semmle.order | 17 |
|
||||
| Foo.qll:9:21:9:25 | f | Foo.qll:9:21:9:23 | TypeExpr | semmle.order | 18 |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | Foo.qll:10:3:10:3 | f | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | Foo.qll:10:3:10:3 | f | semmle.order | 19 |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | Foo.qll:10:3:10:3 | f | semmle.order | 20 |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | Foo.qll:10:5:10:5 | ComparisonOp | semmle.label | getOperator() |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | Foo.qll:10:5:10:5 | ComparisonOp | semmle.order | 21 |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | Foo.qll:10:5:10:5 | ComparisonOp | semmle.order | 22 |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | Foo.qll:10:7:10:85 | Rank | semmle.label | getRightOperand() |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | Foo.qll:10:7:10:85 | Rank | semmle.order | 22 |
|
||||
| Foo.qll:10:3:10:85 | ComparisonFormula | Foo.qll:10:7:10:85 | Rank | semmle.order | 23 |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:12:10:12 | Integer | semmle.label | getRankExpr() |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:12:10:12 | Integer | semmle.order | 23 |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:12:10:12 | Integer | semmle.order | 24 |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:15:10:23 | inner | semmle.label | getArgument(_) |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:15:10:23 | inner | semmle.order | 24 |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:15:10:23 | inner | semmle.order | 25 |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:27:10:50 | ComparisonFormula | semmle.label | getRange() |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:27:10:50 | ComparisonFormula | semmle.order | 26 |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:27:10:50 | ComparisonFormula | semmle.order | 27 |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:54:10:58 | inner | semmle.label | getExpr(_) |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:54:10:58 | inner | semmle.order | 31 |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:54:10:58 | inner | semmle.order | 32 |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:69:10:84 | MemberCall | semmle.label | getOrderBy(_) |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:69:10:84 | MemberCall | semmle.order | 32 |
|
||||
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:69:10:84 | MemberCall | semmle.order | 33 |
|
||||
| Foo.qll:10:15:10:23 | inner | Foo.qll:10:15:10:17 | TypeExpr | semmle.label | getTypeExpr() |
|
||||
| Foo.qll:10:15:10:23 | inner | Foo.qll:10:15:10:17 | TypeExpr | semmle.order | 24 |
|
||||
| Foo.qll:10:15:10:23 | inner | Foo.qll:10:15:10:17 | TypeExpr | semmle.order | 25 |
|
||||
| Foo.qll:10:27:10:42 | MemberCall | Foo.qll:10:27:10:31 | inner | semmle.label | getBase() |
|
||||
| Foo.qll:10:27:10:42 | MemberCall | Foo.qll:10:27:10:31 | inner | semmle.order | 26 |
|
||||
| Foo.qll:10:27:10:42 | MemberCall | Foo.qll:10:27:10:31 | inner | semmle.order | 27 |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:27:10:42 | MemberCall | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:27:10:42 | MemberCall | semmle.order | 26 |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:27:10:42 | MemberCall | semmle.order | 27 |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:44:10:44 | ComparisonOp | semmle.label | getOperator() |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:44:10:44 | ComparisonOp | semmle.order | 29 |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:44:10:44 | ComparisonOp | semmle.order | 30 |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:46:10:50 | String | semmle.label | getRightOperand() |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:46:10:50 | String | semmle.order | 30 |
|
||||
| Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:46:10:50 | String | semmle.order | 31 |
|
||||
| Foo.qll:10:69:10:84 | MemberCall | Foo.qll:10:69:10:73 | inner | semmle.label | getBase() |
|
||||
| Foo.qll:10:69:10:84 | MemberCall | Foo.qll:10:69:10:73 | inner | semmle.order | 32 |
|
||||
| Foo.qll:10:69:10:84 | MemberCall | Foo.qll:10:69:10:73 | inner | semmle.order | 33 |
|
||||
| Foo.qll:13:1:27:1 | ClasslessPredicate calls | Foo.qll:13:17:13:21 | f | semmle.label | getParameter(_) |
|
||||
| Foo.qll:13:1:27:1 | ClasslessPredicate calls | Foo.qll:13:17:13:21 | f | semmle.order | 35 |
|
||||
| Foo.qll:13:1:27:1 | ClasslessPredicate calls | Foo.qll:13:17:13:21 | f | semmle.order | 36 |
|
||||
| Foo.qll:13:1:27:1 | ClasslessPredicate calls | Foo.qll:14:3:26:14 | Disjunction | semmle.label | getBody() |
|
||||
| Foo.qll:13:1:27:1 | ClasslessPredicate calls | Foo.qll:14:3:26:14 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:13:1:27:1 | ClasslessPredicate calls | Foo.qll:14:3:26:14 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:13:17:13:21 | f | Foo.qll:13:17:13:19 | TypeExpr | semmle.label | getTypeExpr() |
|
||||
| Foo.qll:13:17:13:21 | f | Foo.qll:13:17:13:19 | TypeExpr | semmle.order | 35 |
|
||||
| Foo.qll:13:17:13:21 | f | Foo.qll:13:17:13:19 | TypeExpr | semmle.order | 36 |
|
||||
| Foo.qll:14:3:14:10 | PredicateCall | Foo.qll:14:9:14:9 | f | semmle.label | getArgument(_) |
|
||||
| Foo.qll:14:3:14:10 | PredicateCall | Foo.qll:14:9:14:9 | f | semmle.order | 44 |
|
||||
| Foo.qll:14:3:14:10 | PredicateCall | Foo.qll:14:9:14:9 | f | semmle.order | 45 |
|
||||
| Foo.qll:14:3:16:29 | Disjunction | Foo.qll:14:3:14:10 | PredicateCall | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:16:29 | Disjunction | Foo.qll:14:3:14:10 | PredicateCall | semmle.order | 37 |
|
||||
| Foo.qll:14:3:16:29 | Disjunction | Foo.qll:14:3:14:10 | PredicateCall | semmle.order | 38 |
|
||||
| Foo.qll:14:3:16:29 | Disjunction | Foo.qll:16:3:16:29 | ComparisonFormula | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:16:29 | Disjunction | Foo.qll:16:3:16:29 | ComparisonFormula | semmle.order | 45 |
|
||||
| Foo.qll:14:3:16:29 | Disjunction | Foo.qll:16:3:16:29 | ComparisonFormula | semmle.order | 46 |
|
||||
| Foo.qll:14:3:18:28 | Disjunction | Foo.qll:14:3:16:29 | Disjunction | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:18:28 | Disjunction | Foo.qll:14:3:16:29 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:18:28 | Disjunction | Foo.qll:14:3:16:29 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:3:18:28 | Disjunction | Foo.qll:18:3:18:28 | ComparisonFormula | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:18:28 | Disjunction | Foo.qll:18:3:18:28 | ComparisonFormula | semmle.order | 53 |
|
||||
| Foo.qll:14:3:18:28 | Disjunction | Foo.qll:18:3:18:28 | ComparisonFormula | semmle.order | 54 |
|
||||
| Foo.qll:14:3:20:13 | Disjunction | Foo.qll:14:3:18:28 | Disjunction | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:20:13 | Disjunction | Foo.qll:14:3:18:28 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:20:13 | Disjunction | Foo.qll:14:3:18:28 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:3:20:13 | Disjunction | Foo.qll:20:3:20:13 | ComparisonFormula | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:20:13 | Disjunction | Foo.qll:20:3:20:13 | ComparisonFormula | semmle.order | 60 |
|
||||
| Foo.qll:14:3:20:13 | Disjunction | Foo.qll:20:3:20:13 | ComparisonFormula | semmle.order | 61 |
|
||||
| Foo.qll:14:3:22:16 | Disjunction | Foo.qll:14:3:20:13 | Disjunction | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:22:16 | Disjunction | Foo.qll:14:3:20:13 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:22:16 | Disjunction | Foo.qll:14:3:20:13 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:3:22:16 | Disjunction | Foo.qll:22:3:22:16 | ComparisonFormula | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:22:16 | Disjunction | Foo.qll:22:3:22:16 | ComparisonFormula | semmle.order | 66 |
|
||||
| Foo.qll:14:3:22:16 | Disjunction | Foo.qll:22:3:22:16 | ComparisonFormula | semmle.order | 67 |
|
||||
| Foo.qll:14:3:24:23 | Disjunction | Foo.qll:14:3:22:16 | Disjunction | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:24:23 | Disjunction | Foo.qll:14:3:22:16 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:24:23 | Disjunction | Foo.qll:14:3:22:16 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:3:24:23 | Disjunction | Foo.qll:24:3:24:23 | ComparisonFormula | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:24:23 | Disjunction | Foo.qll:24:3:24:23 | ComparisonFormula | semmle.order | 72 |
|
||||
| Foo.qll:14:3:24:23 | Disjunction | Foo.qll:24:3:24:23 | ComparisonFormula | semmle.order | 73 |
|
||||
| Foo.qll:14:3:26:14 | Disjunction | Foo.qll:14:3:24:23 | Disjunction | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:26:14 | Disjunction | Foo.qll:14:3:24:23 | Disjunction | semmle.order | 37 |
|
||||
| Foo.qll:14:3:26:14 | Disjunction | Foo.qll:14:3:24:23 | Disjunction | semmle.order | 38 |
|
||||
| Foo.qll:14:3:26:14 | Disjunction | Foo.qll:26:3:26:14 | ComparisonFormula | semmle.label | getAnOperand() |
|
||||
| Foo.qll:14:3:26:14 | Disjunction | Foo.qll:26:3:26:14 | ComparisonFormula | semmle.order | 82 |
|
||||
| Foo.qll:14:3:26:14 | Disjunction | Foo.qll:26:3:26:14 | ComparisonFormula | semmle.order | 83 |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:3:16:7 | String | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:3:16:7 | String | semmle.order | 45 |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:3:16:7 | String | semmle.order | 46 |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:9:16:9 | ComparisonOp | semmle.label | getOperator() |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:9:16:9 | ComparisonOp | semmle.order | 47 |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:9:16:9 | ComparisonOp | semmle.order | 48 |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:11:16:29 | MemberCall | semmle.label | getRightOperand() |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:11:16:29 | MemberCall | semmle.order | 48 |
|
||||
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:11:16:29 | MemberCall | semmle.order | 49 |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:11:16:11 | f | semmle.label | getBase() |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:11:16:11 | f | semmle.order | 48 |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:11:16:11 | f | semmle.order | 49 |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:22:16:22 | Integer | semmle.label | getArgument(_) |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:22:16:22 | Integer | semmle.order | 50 |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:22:16:22 | Integer | semmle.order | 51 |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:25:16:25 | Integer | semmle.label | getArgument(_) |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:25:16:25 | Integer | semmle.order | 51 |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:25:16:25 | Integer | semmle.order | 52 |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:28:16:28 | Integer | semmle.label | getArgument(_) |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:28:16:28 | Integer | semmle.order | 52 |
|
||||
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:28:16:28 | Integer | semmle.order | 53 |
|
||||
| Foo.qll:18:3:18:9 | InlineCast | Foo.qll:18:3:18:3 | f | semmle.label | getBase() |
|
||||
| Foo.qll:18:3:18:9 | InlineCast | Foo.qll:18:3:18:3 | f | semmle.order | 53 |
|
||||
| Foo.qll:18:3:18:9 | InlineCast | Foo.qll:18:3:18:3 | f | semmle.order | 54 |
|
||||
| Foo.qll:18:3:18:9 | InlineCast | Foo.qll:18:6:18:8 | TypeExpr | semmle.label | getTypeExpr() |
|
||||
| Foo.qll:18:3:18:9 | InlineCast | Foo.qll:18:6:18:8 | TypeExpr | semmle.order | 57 |
|
||||
| Foo.qll:18:3:18:9 | InlineCast | Foo.qll:18:6:18:8 | TypeExpr | semmle.order | 58 |
|
||||
| Foo.qll:18:3:18:20 | MemberCall | Foo.qll:18:3:18:9 | InlineCast | semmle.label | getBase() |
|
||||
| Foo.qll:18:3:18:20 | MemberCall | Foo.qll:18:3:18:9 | InlineCast | semmle.order | 53 |
|
||||
| Foo.qll:18:3:18:20 | MemberCall | Foo.qll:18:3:18:9 | InlineCast | semmle.order | 54 |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:3:18:20 | MemberCall | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:3:18:20 | MemberCall | semmle.order | 53 |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:3:18:20 | MemberCall | semmle.order | 54 |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:22:18:22 | ComparisonOp | semmle.label | getOperator() |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:22:18:22 | ComparisonOp | semmle.order | 58 |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:22:18:22 | ComparisonOp | semmle.order | 59 |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:24:18:28 | String | semmle.label | getRightOperand() |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:24:18:28 | String | semmle.order | 59 |
|
||||
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:24:18:28 | String | semmle.order | 60 |
|
||||
| Foo.qll:20:3:20:9 | InlineCast | Foo.qll:20:3:20:3 | f | semmle.label | getBase() |
|
||||
| Foo.qll:20:3:20:9 | InlineCast | Foo.qll:20:3:20:3 | f | semmle.order | 60 |
|
||||
| Foo.qll:20:3:20:9 | InlineCast | Foo.qll:20:3:20:3 | f | semmle.order | 61 |
|
||||
| Foo.qll:20:3:20:9 | InlineCast | Foo.qll:20:6:20:8 | TypeExpr | semmle.label | getTypeExpr() |
|
||||
| Foo.qll:20:3:20:9 | InlineCast | Foo.qll:20:6:20:8 | TypeExpr | semmle.order | 63 |
|
||||
| Foo.qll:20:3:20:9 | InlineCast | Foo.qll:20:6:20:8 | TypeExpr | semmle.order | 64 |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:3:20:9 | InlineCast | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:3:20:9 | InlineCast | semmle.order | 60 |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:3:20:9 | InlineCast | semmle.order | 61 |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:11:20:11 | ComparisonOp | semmle.label | getOperator() |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:11:20:11 | ComparisonOp | semmle.order | 64 |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:11:20:11 | ComparisonOp | semmle.order | 65 |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:13:20:13 | f | semmle.label | getRightOperand() |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:13:20:13 | f | semmle.order | 65 |
|
||||
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:13:20:13 | f | semmle.order | 66 |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:3:22:3 | f | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:3:22:3 | f | semmle.order | 66 |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:3:22:3 | f | semmle.order | 67 |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:5:22:5 | ComparisonOp | semmle.label | getOperator() |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:5:22:5 | ComparisonOp | semmle.order | 68 |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:5:22:5 | ComparisonOp | semmle.order | 69 |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:7:22:16 | FullAggregate[any] | semmle.label | getRightOperand() |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:7:22:16 | FullAggregate[any] | semmle.order | 69 |
|
||||
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:7:22:16 | FullAggregate[any] | semmle.order | 70 |
|
||||
| Foo.qll:22:7:22:16 | FullAggregate[any] | Foo.qll:22:11:22:15 | f | semmle.label | getArgument(_) |
|
||||
| Foo.qll:22:7:22:16 | FullAggregate[any] | Foo.qll:22:11:22:15 | f | semmle.order | 70 |
|
||||
| Foo.qll:22:7:22:16 | FullAggregate[any] | Foo.qll:22:11:22:15 | f | semmle.order | 71 |
|
||||
| Foo.qll:22:11:22:15 | f | Foo.qll:22:11:22:13 | TypeExpr | semmle.label | getTypeExpr() |
|
||||
| Foo.qll:22:11:22:15 | f | Foo.qll:22:11:22:13 | TypeExpr | semmle.order | 70 |
|
||||
| Foo.qll:22:11:22:15 | f | Foo.qll:22:11:22:13 | TypeExpr | semmle.order | 71 |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:3:24:3 | Integer | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:3:24:3 | Integer | semmle.order | 72 |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:3:24:3 | Integer | semmle.order | 73 |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:5:24:5 | ComparisonOp | semmle.label | getOperator() |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:5:24:5 | ComparisonOp | semmle.order | 74 |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:5:24:5 | ComparisonOp | semmle.order | 75 |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:7:24:23 | AddExpr | semmle.label | getRightOperand() |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:7:24:23 | AddExpr | semmle.order | 75 |
|
||||
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:7:24:23 | AddExpr | semmle.order | 76 |
|
||||
| Foo.qll:24:7:24:23 | AddExpr | Foo.qll:24:7:24:7 | Integer | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:24:7:24:23 | AddExpr | Foo.qll:24:7:24:7 | Integer | semmle.order | 75 |
|
||||
| Foo.qll:24:7:24:23 | AddExpr | Foo.qll:24:7:24:7 | Integer | semmle.order | 76 |
|
||||
| Foo.qll:24:7:24:23 | AddExpr | Foo.qll:24:12:24:22 | AddExpr | semmle.label | getRightOperand() |
|
||||
| Foo.qll:24:7:24:23 | AddExpr | Foo.qll:24:12:24:22 | AddExpr | semmle.order | 77 |
|
||||
| Foo.qll:24:7:24:23 | AddExpr | Foo.qll:24:12:24:22 | AddExpr | semmle.order | 78 |
|
||||
| Foo.qll:24:12:24:22 | AddExpr | Foo.qll:24:12:24:12 | Integer | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:24:12:24:22 | AddExpr | Foo.qll:24:12:24:12 | Integer | semmle.order | 77 |
|
||||
| Foo.qll:24:12:24:22 | AddExpr | Foo.qll:24:12:24:12 | Integer | semmle.order | 78 |
|
||||
| Foo.qll:24:12:24:22 | AddExpr | Foo.qll:24:17:24:21 | AddExpr | semmle.label | getRightOperand() |
|
||||
| Foo.qll:24:12:24:22 | AddExpr | Foo.qll:24:17:24:21 | AddExpr | semmle.order | 79 |
|
||||
| Foo.qll:24:12:24:22 | AddExpr | Foo.qll:24:17:24:21 | AddExpr | semmle.order | 80 |
|
||||
| Foo.qll:24:17:24:21 | AddExpr | Foo.qll:24:17:24:17 | Integer | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:24:17:24:21 | AddExpr | Foo.qll:24:17:24:17 | Integer | semmle.order | 79 |
|
||||
| Foo.qll:24:17:24:21 | AddExpr | Foo.qll:24:17:24:17 | Integer | semmle.order | 80 |
|
||||
| Foo.qll:24:17:24:21 | AddExpr | Foo.qll:24:21:24:21 | Integer | semmle.label | getRightOperand() |
|
||||
| Foo.qll:24:17:24:21 | AddExpr | Foo.qll:24:21:24:21 | Integer | semmle.order | 81 |
|
||||
| Foo.qll:24:17:24:21 | AddExpr | Foo.qll:24:21:24:21 | Integer | semmle.order | 82 |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:3:26:6 | Boolean | semmle.label | getLeftOperand() |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:3:26:6 | Boolean | semmle.order | 82 |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:3:26:6 | Boolean | semmle.order | 83 |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:8:26:8 | ComparisonOp | semmle.label | getOperator() |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:8:26:8 | ComparisonOp | semmle.order | 84 |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:8:26:8 | ComparisonOp | semmle.order | 85 |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:10:26:14 | Boolean | semmle.label | getRightOperand() |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:10:26:14 | Boolean | semmle.order | 85 |
|
||||
| Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:10:26:14 | Boolean | semmle.order | 86 |
|
||||
| printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.label | getAnImport() |
|
||||
| printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.order | 86 |
|
||||
| printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.order | 87 |
|
||||
graphProperties
|
||||
| semmle.graphKind | tree |
|
||||
|
||||
Reference in New Issue
Block a user