Merge pull request #23 from github/as-expr

Only generate `AsExpr`s when there is an `as` keyword
This commit is contained in:
Tom Hvitved
2021-05-28 12:16:11 +02:00
committed by GitHub
4 changed files with 242 additions and 164 deletions

View File

@@ -27,6 +27,8 @@ class AstNode extends TAstNode {
AstNode getParent() {
toGenerated(result) = toGenerated(this).getParent() and
not result = this
or
result.getAChild(_) = this
}
/**
@@ -65,19 +67,21 @@ class Select extends TSelect, AstNode {
Formula getWhere() { toGenerated(result) = sel.getChild(_) }
AsExpr getAsExpr(int i) { toGenerated(result) = sel.getChild(_).(Generated::AsExprs).getChild(i) }
Expr getExpr(int i) { toGenerated(result) = sel.getChild(_).(Generated::AsExprs).getChild(i) }
Expr getOrderBy(int i) {
toGenerated(result) = sel.getChild(_).(Generated::OrderBys).getChild(i).getChild(0)
}
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getWhere" and result = this.getWhere()
or
exists(int i |
pred = indexedMember("getVarDecl", i) and result = this.getVarDecl(i)
or
pred = indexedMember("getAsExpr", i) and result = this.getAsExpr(i)
pred = indexedMember("getExpr", i) and result = this.getExpr(i)
or
pred = indexedMember("getOrderBy", i) and result = this.getOrderBy(i)
)
@@ -110,6 +114,8 @@ class Predicate extends TPredicate, AstNode {
// TODO: ReturnType.
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getBody" and result = this.getBody()
or
exists(int i | pred = indexedMember("getParameter", i) and result = this.getParameter(i))
@@ -150,10 +156,16 @@ class PredicateExpr extends TPredicateExpr, AstNode {
Predicate getResolvedPredicate() { resolvePredicateExpr(this, result) }
override AstNode getParent() {
result = super.getParent()
or
this in [result.(ClasslessPredicate).getAlias(), result.(HigherOrderFormula).getInput(_)]
}
override AstNode getAChild(string pred) { pred = "getQualifier" and result = this.getQualifier() }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getQualifier" and result = this.getQualifier()
}
override string getAPrimaryQlClass() { result = "PredicateExpr" }
}
@@ -190,6 +202,8 @@ class ClasslessPredicate extends TClasslessPredicate, Predicate, ModuleDeclarati
}
override AstNode getAChild(string pred_name) {
result = Predicate.super.getAChild(pred_name)
or
pred_name = "getAlias" and result = this.getAlias()
or
pred_name = "getBody" and result = this.getBody()
@@ -231,6 +245,8 @@ class ClassPredicate extends TClassPredicate, Predicate {
predicate overrides(ClassPredicate other) { predOverrides(this, other) }
override AstNode getAChild(string pred_name) {
result = super.getAChild(pred_name)
or
pred_name = "getBody" and result = this.getBody()
or
exists(int i | pred_name = indexedMember("getParameter", i) and result = this.getParameter(i))
@@ -253,7 +269,11 @@ class CharPred extends TCharPred, Predicate {
override Class getParent() { result.getCharPred() = this }
override AstNode getAChild(string pred_name) { pred_name = "getBody" and result = this.getBody() }
override AstNode getAChild(string pred_name) {
result = super.getAChild(pred_name)
or
pred_name = "getBody" and result = this.getBody()
}
}
/**
@@ -305,7 +325,11 @@ class VarDecl extends TVarDecl, VarDef {
predicate overrides(VarDecl other) { fieldOverrides(this, other) }
override AstNode getAChild(string pred) { pred = "getType" and result = this.getType() }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getType" and result = this.getType()
}
}
/**
@@ -395,6 +419,8 @@ class Module extends TModule, ModuleDeclaration {
}
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getAlias" and result = this.getAlias()
or
pred = "getAMember" and result = this.getAMember()
@@ -406,6 +432,8 @@ class Module extends TModule, ModuleDeclaration {
*/
class ModuleMember extends TModuleMember, AstNode {
override AstNode getParent() {
result = super.getParent()
or
this in [result.(Module).getAMember(), result.(TopLevel).getAMember()]
}
@@ -492,6 +520,8 @@ class Class extends TClass, TypeDeclaration, ModuleDeclaration {
Type getType() { result.getDeclaration() = this }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getAliasType" and result = this.getAliasType()
or
pred = "getUnionMember" and result = this.getUnionMember()
@@ -533,7 +563,11 @@ class NewType extends TNewType, TypeDeclaration, ModuleDeclaration {
*/
NewTypeBranch getABranch() { toGenerated(result) = type.getChild().getChild(_) }
override AstNode getAChild(string pred) { pred = "getABranch" and result = this.getABranch() }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getABranch" and result = this.getABranch()
}
}
/**
@@ -560,6 +594,8 @@ class NewTypeBranch extends TNewTypeBranch, TypeDeclaration {
override NewType getParent() { result.getABranch() = this }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getBody" and result = this.getBody()
or
exists(int i | pred = indexedMember("getField", i) and result = this.getField(i))
@@ -599,6 +635,8 @@ class PredicateCall extends TPredicateCall, Call {
}
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
exists(int i | pred = indexedMember("getArgument", i) and result = this.getArgument(i))
or
pred = "getQualifier" and result = this.getQualifier()
@@ -637,6 +675,8 @@ class MemberCall extends TMemberCall, Call {
Expr getBase() { toGenerated(result) = expr.getChild(0) }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getBase" and result = this.getBase()
or
pred = "getSuperType" and result = this.getSuperType()
@@ -760,7 +800,11 @@ class Conjunction extends TConjunction, AstNode, Formula {
/** Gets an operand to this formula. */
Formula getAnOperand() { toGenerated(result) in [conj.getLeft(), conj.getRight()] }
override AstNode getAChild(string pred) { pred = "getAnOperand" and result = this.getAnOperand() }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getAnOperand" and result = this.getAnOperand()
}
}
/** An `or` formula, with 2 or more operands. */
@@ -774,7 +818,11 @@ class Disjunction extends TDisjunction, AstNode {
/** Gets an operand to this formula. */
Formula getAnOperand() { toGenerated(result) in [disj.getLeft(), disj.getRight()] }
override AstNode getAChild(string pred) { pred = "getAnOperand" and result = this.getAnOperand() }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getAnOperand" and result = this.getAnOperand()
}
}
/**
@@ -861,6 +909,8 @@ class ComparisonFormula extends TComparisonFormula, Formula {
override string getAPrimaryQlClass() { result = "ComparisonFormula" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getLeftOperand" and result = this.getLeftOperand()
or
pred = "getRightOperand" and result = this.getRightOperand()
@@ -909,6 +959,8 @@ class Quantifier extends TQuantifier, Formula {
override string getAPrimaryQlClass() { result = "Quantifier" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
exists(int i | pred = indexedMember("getArgument", i) and result = this.getArgument(i))
or
pred = "getRange" and result = this.getRange()
@@ -958,6 +1010,8 @@ class IfFormula extends TIfFormula, Formula {
override string getAPrimaryQlClass() { result = "IfFormula" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getCondition" and result = this.getCondition()
or
pred = "getThenPart" and result = this.getThenPart()
@@ -983,6 +1037,8 @@ class Implication extends TImplication, Formula {
override string getAPrimaryQlClass() { result = "Implication" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getLeftOperand" and result = this.getLeftOperand()
or
pred = "getRightOperand" and result = this.getRightOperand()
@@ -1008,6 +1064,8 @@ class InstanceOf extends TInstanceOf, Formula {
override string getAPrimaryQlClass() { result = "InstanceOf" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getExpr" and result = this.getExpr()
or
pred = "getType" and result = this.getType()
@@ -1026,6 +1084,8 @@ class InFormula extends TInFormula, Formula {
override string getAPrimaryQlClass() { result = "InFormula" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getExpr" and result = this.getExpr()
or
pred = "getRange" and result = this.getRange()
@@ -1048,6 +1108,8 @@ class HigherOrderFormula extends THigherOrderFormula, Formula {
override string getAPrimaryQlClass() { result = "HigherOrderFormula" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
exists(int i |
pred = indexedMember("getInput", i) and result = this.getInput(i)
or
@@ -1072,7 +1134,7 @@ class ExprAggregate extends TExprAggregate, Expr {
/**
* Gets the ith "as" expression of this aggregate, if any.
*/
AsExpr getAsExpr(int i) { toGenerated(result) = body.getAsExprs().getChild(i) }
Expr getExpr(int i) { toGenerated(result) = body.getAsExprs().getChild(i) }
/**
* Gets the ith "order by" expression of this aggregate, if any.
@@ -1089,8 +1151,10 @@ class ExprAggregate extends TExprAggregate, Expr {
override string getAPrimaryQlClass() { result = "ExprAggregate[" + kind + "]" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
exists(int i |
pred = indexedMember("getAsExpr", i) and result = this.getAsExpr(i)
pred = indexedMember("getExpr", i) and result = this.getExpr(i)
or
pred = indexedMember("getOrderBy", i) and result = this.getOrderBy(i)
)
@@ -1101,20 +1165,18 @@ class ExprAggregate extends TExprAggregate, Expr {
class Aggregate extends TAggregate, Expr {
Generated::Aggregate agg;
string kind;
Generated::FullAggregateBody body;
Aggregate() {
this = TAggregate(agg) and
kind = agg.getChild(0).(Generated::AggId).getValue()
kind = agg.getChild(0).(Generated::AggId).getValue() and
body = agg.getChild(_)
}
private Generated::FullAggregateBody getBody1() { result = agg.getChild(_) }
private Generated::ExprAggregateBody getBody2() { result = agg.getChild(_) }
string getKind() { result = kind }
/** Gets the ith declared argument of this quantifier. */
VarDecl getArgument(int i) { toGenerated(result) = this.getBody1().getChild(i) }
VarDecl getArgument(int i) { toGenerated(result) = body.getChild(i) }
/** Gets an argument of this quantifier. */
VarDecl getAnArgument() { result = this.getArgument(_) }
@@ -1122,42 +1184,34 @@ class Aggregate extends TAggregate, Expr {
/**
* Gets the formula restricting the range of this quantifier, if any.
*/
Formula getRange() { toGenerated(result) = this.getBody1().getGuard() }
Formula getRange() { toGenerated(result) = body.getGuard() }
/**
* Gets the ith "as" expression of this aggregate, if any.
*/
AsExpr getAsExpr(int i) {
toGenerated(result) = [this.getBody1().getAsExprs(), this.getBody2().getAsExprs()].getChild(i)
}
Expr getExpr(int i) { toGenerated(result) = body.getAsExprs().getChild(i) }
/**
* Gets the ith "order by" expression of this aggregate, if any.
*/
Expr getOrderBy(int i) {
toGenerated(result) =
[this.getBody1().getOrderBys(), this.getBody2().getOrderBys()].getChild(i).getChild(0)
}
Expr getOrderBy(int i) { toGenerated(result) = body.getOrderBys().getChild(i).getChild(0) }
/**
* Gets the direction (ascending or descending) of the ith "order by" expression of this aggregate.
*/
string getOrderbyDirection(int i) {
result =
[this.getBody1().getOrderBys(), this.getBody2().getOrderBys()]
.getChild(i)
.getChild(1)
.(Generated::Direction)
.getValue()
result = body.getOrderBys().getChild(i).getChild(1).(Generated::Direction).getValue()
}
override string getAPrimaryQlClass() { result = "Aggregate[" + kind + "]" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
exists(int i |
pred = indexedMember("getArgument", i) and result = this.getArgument(i)
or
pred = indexedMember("getAsExpr", i) and result = this.getAsExpr(i)
pred = indexedMember("getExpr", i) and result = this.getExpr(i)
or
pred = indexedMember("getOrderBy", i) and result = this.getOrderBy(i)
)
@@ -1177,13 +1231,17 @@ class Rank extends Aggregate {
*/
Expr getRankExpr() { toGenerated(result) = agg.getChild(1) }
override AstNode getAChild(string pred) { pred = "getRankExpr" and result = this.getRankExpr() }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getRankExpr" and result = this.getRankExpr()
}
}
/**
* An "as" expression, such as `foo as bar`.
*/
class AsExpr extends TAsExpr, VarDef {
class AsExpr extends TAsExpr, VarDef, Expr {
Generated::AsExpr asExpr;
AsExpr() { this = TAsExpr(asExpr) }
@@ -1193,7 +1251,7 @@ class AsExpr extends TAsExpr, VarDef {
final override string getName() { result = this.getAsName() }
/**
* Gets the name the inner expression gets "saved" under, if it exists.
* Gets the name the inner expression gets "saved" under.
* For example this is `bar` in the expression `foo as bar`.
*/
string getAsName() { result = asExpr.getChild(1).(Generated::VarName).getChild().getValue() }
@@ -1207,20 +1265,17 @@ class AsExpr extends TAsExpr, VarDef {
override AstNode getParent() {
result = super.getParent()
or
result.(Aggregate).getAsExpr(_) = this
result.(Aggregate).getExpr(_) = this
or
result.(ExprAggregate).getAsExpr(_) = this
result.(ExprAggregate).getExpr(_) = this
or
result.(Select).getAsExpr(_) = this
result.(Select).getExpr(_) = this
}
override AstNode getAChild(string pred) { pred = "getInnerExpr" and result = this.getInnerExpr() }
override string toString() {
result = this.getName()
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
not exists(this.getName()) and
result = "AsExpr"
pred = "getInnerExpr" and result = this.getInnerExpr()
}
}
@@ -1293,7 +1348,11 @@ class Negation extends TNegation, Formula {
override string getAPrimaryQlClass() { result = "Negation" }
override AstNode getAChild(string pred) { pred = "getFormula" and result = this.getFormula() }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getFormula" and result = this.getFormula()
}
}
/** An expression, such as `x+4`. */
@@ -1325,6 +1384,8 @@ class ExprAnnotation extends TExprAnnotation, Expr {
override string getAPrimaryQlClass() { result = "ExprAnnotation" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getExpression" and result = this.getExpression()
}
}
@@ -1361,6 +1422,8 @@ class AddSubExpr extends TAddSubExpr, BinOpExpr {
FunctionSymbol getOperator() { result = operator }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getLeftOperand" and result = this.getLeftOperand()
or
pred = "getRightOperand" and result = this.getRightOperand()
@@ -1407,6 +1470,8 @@ class MulDivModExpr extends TMulDivModExpr, BinOpExpr {
FunctionSymbol getOperator() { result = operator }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getLeftOperand" and result = this.getLeftOperand()
or
pred = "getRightOperand" and result = this.getRightOperand()
@@ -1461,6 +1526,8 @@ class Range extends TRange, Expr {
override string getAPrimaryQlClass() { result = "Range" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getLowEndpoint" and result = this.getLowEndpoint()
or
pred = "getHighEndpoint" and result = this.getHighEndpoint()
@@ -1483,6 +1550,8 @@ class Set extends TSet, Expr {
override string getAPrimaryQlClass() { result = "Set" }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
exists(int i | pred = indexedMember("getElement", i) and result = getElement(i))
}
}
@@ -1501,7 +1570,11 @@ class UnaryExpr extends TUnaryExpr, Expr {
override string getAPrimaryQlClass() { result = "UnaryExpr" }
override AstNode getAChild(string pred) { pred = "getOperand" and result = this.getOperand() }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getOperand" and result = this.getOperand()
}
}
/** A "don't care" expression, denoted by `_`. */
@@ -1558,5 +1631,9 @@ class ModuleExpr extends TModuleExpr, ModuleRef {
result.(Module).getAlias() = this
}
override AstNode getAChild(string pred) { pred = "getQualifier" and result = this.getQualifier() }
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
pred = "getQualifier" and result = this.getQualifier()
}
}

View File

@@ -22,15 +22,12 @@ newtype TAstNode =
TComparisonFormula(Generated::CompTerm comp) or
TComparisonOp(Generated::Compop op) or
TQuantifier(Generated::Quantified quant) or
TAggregate(Generated::Aggregate agg) {
agg.getChild(_) instanceof Generated::FullAggregateBody or
agg.getChild(_) instanceof Generated::ExprAggregateBody
} or
TAggregate(Generated::Aggregate agg) { agg.getChild(_) instanceof Generated::FullAggregateBody } or
TExprAggregate(Generated::Aggregate agg) {
agg.getChild(_) instanceof Generated::ExprAggregateBody
} or
TIdentifier(Generated::Variable var) or
TAsExpr(Generated::AsExpr asExpr) or
TAsExpr(Generated::AsExpr asExpr) { asExpr.getChild(1) instanceof Generated::VarName } or
TPredicateCall(Generated::CallOrUnqualAggExpr call) or
TMemberCall(Generated::QualifiedExpr expr) {
not expr.getChild(_).(Generated::QualifiedRhs).getChild(_) instanceof Generated::TypeExpr
@@ -68,13 +65,13 @@ class TBinOpExpr = TAddSubExpr or TMulDivModExpr;
class TExpr =
TBinOpExpr or TLiteral or TAggregate or TExprAggregate or TIdentifier or TInlineCast or TCall or
TUnaryExpr or TExprAnnotation or TDontCare or TRange or TSet;
TUnaryExpr or TExprAnnotation or TDontCare or TRange or TSet or TAsExpr;
class TCall = TPredicateCall or TMemberCall or TNoneCall or TAnyCall;
class TModuleRef = TImport or TModuleExpr;
Generated::AstNode toGeneratedFormula(AST::AstNode n) {
private Generated::AstNode toGeneratedFormula(AST::AstNode n) {
n = TConjunction(result) or
n = TDisjunction(result) or
n = TComparisonFormula(result) or
@@ -90,7 +87,7 @@ Generated::AstNode toGeneratedFormula(AST::AstNode n) {
n = TInFormula(result)
}
Generated::AstNode toGeneratedExpr(AST::AstNode n) {
private Generated::AstNode toGeneratedExpr(AST::AstNode n) {
n = TAddSubExpr(result) or
n = TMulDivModExpr(result) or
n = TRange(result) or
@@ -114,6 +111,12 @@ Generated::AstNode toGenerated(AST::AstNode n) {
or
result.(Generated::ParExpr).getChild() = toGenerated(n)
or
result =
any(Generated::AsExpr ae |
not ae.getChild(1) instanceof Generated::VarName and
toGenerated(n) = ae.getChild(0)
)
or
n = TTopLevel(result)
or
n = TClasslessPredicate(_, result)

View File

@@ -2,7 +2,7 @@ import ql
import codeql_ql.ast.internal.AstNodes
private class TScope =
TClass or TAggregate or TQuantifier or TSelect or TPredicate or TNewTypeBranch;
TClass or TAggregate or TExprAggregate or TQuantifier or TSelect or TPredicate or TNewTypeBranch;
/** A variable scope. */
class VariableScope extends TScope, AstNode {
@@ -17,9 +17,11 @@ class VariableScope extends TScope, AstNode {
not this instanceof Class and
decl = this.getADefinition()
or
decl = this.(Select).getAsExpr(_)
decl = this.(Select).getExpr(_).(AsExpr)
or
decl = this.(Aggregate).getAsExpr(_)
decl = this.(Aggregate).getExpr(_).(AsExpr)
or
decl = this.(ExprAggregate).getExpr(_).(AsExpr)
or
this.getOuterScope().containsVar(decl) and
not this.getADefinition().getName() = decl.getName()

View File

@@ -59,112 +59,110 @@ nodes
| Foo.qll:10:44:10:44 | ComparisonOp | semmle.order | 29 |
| Foo.qll:10:46:10:50 | String | semmle.label | [String] String |
| Foo.qll:10:46:10:50 | String | semmle.order | 30 |
| Foo.qll:10:54:10:58 | AsExpr | semmle.label | [AsExpr] AsExpr |
| Foo.qll:10:54:10:58 | AsExpr | 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:69:10:73 | inner | semmle.label | [VarAccess] inner |
| Foo.qll:10:69:10:73 | inner | semmle.order | 33 |
| Foo.qll:10:69:10:73 | inner | semmle.order | 32 |
| Foo.qll:10:69:10:84 | MemberCall | semmle.label | [MemberCall] MemberCall |
| Foo.qll:10:69:10:84 | MemberCall | semmle.order | 33 |
| Foo.qll:10:69:10:84 | MemberCall | semmle.order | 32 |
| Foo.qll:13:1:25:1 | calls | semmle.label | [ClasslessPredicate] calls |
| Foo.qll:13:1:25:1 | calls | semmle.order | 35 |
| Foo.qll:13:1:25:1 | calls | semmle.order | 34 |
| Foo.qll:13:17:13:19 | TypeExpr | semmle.label | [TypeExpr] TypeExpr |
| Foo.qll:13:17:13:19 | TypeExpr | semmle.order | 36 |
| Foo.qll:13:17:13:19 | TypeExpr | semmle.order | 35 |
| Foo.qll:13:17:13:21 | f | semmle.label | [VarDecl] f |
| Foo.qll:13:17:13:21 | f | semmle.order | 36 |
| Foo.qll:13:17:13:21 | f | semmle.order | 35 |
| Foo.qll:14:3:14:10 | PredicateCall | semmle.label | [PredicateCall] PredicateCall |
| Foo.qll:14:3:14:10 | PredicateCall | semmle.order | 38 |
| Foo.qll:14:3:14:10 | PredicateCall | semmle.order | 37 |
| Foo.qll:14:3:16:29 | Disjunction | semmle.label | [Disjunction] Disjunction |
| Foo.qll:14:3:16:29 | Disjunction | semmle.order | 38 |
| Foo.qll:14:3:16:29 | Disjunction | semmle.order | 37 |
| Foo.qll:14:3:18:28 | Disjunction | semmle.label | [Disjunction] Disjunction |
| Foo.qll:14:3:18:28 | Disjunction | semmle.order | 38 |
| Foo.qll:14:3:18:28 | Disjunction | semmle.order | 37 |
| Foo.qll:14:3:20:13 | Disjunction | semmle.label | [Disjunction] Disjunction |
| Foo.qll:14:3:20:13 | Disjunction | semmle.order | 38 |
| Foo.qll:14:3:20:13 | Disjunction | semmle.order | 37 |
| Foo.qll:14:3:22:16 | Disjunction | semmle.label | [Disjunction] Disjunction |
| Foo.qll:14:3:22:16 | Disjunction | semmle.order | 38 |
| Foo.qll:14:3:22:16 | Disjunction | semmle.order | 37 |
| Foo.qll:14:3:24:23 | Disjunction | semmle.label | [Disjunction] Disjunction |
| Foo.qll:14:3:24:23 | Disjunction | semmle.order | 38 |
| Foo.qll:14:3:24:23 | Disjunction | semmle.order | 37 |
| 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 | 43 |
| 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 | 44 |
| 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 | 44 |
| 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 | 46 |
| 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 | 47 |
| 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 | 47 |
| 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 | 49 |
| 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 | 50 |
| 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 | 51 |
| 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 | 52 |
| 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 | 52 |
| 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 | 52 |
| 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 | 52 |
| 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 | 56 |
| 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 | 57 |
| 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 | 58 |
| 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 | 59 |
| 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 | 59 |
| 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 | 59 |
| 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 | 62 |
| 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 | 63 |
| 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 | 64 |
| 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 | 65 |
| 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 | 65 |
| 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 | 67 |
| Foo.qll:22:7:22:16 | Aggregate[any] | semmle.label | [Aggregate[any]] Aggregate[any] |
| Foo.qll:22:7:22:16 | Aggregate[any] | semmle.order | 69 |
| Foo.qll:22:7:22:16 | Aggregate[any] | semmle.order | 68 |
| 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 | 69 |
| 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 | 69 |
| 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 | 71 |
| 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 | 71 |
| 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 | 73 |
| 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 | 74 |
| 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 | 74 |
| 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 | 76 |
| 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 | 76 |
| 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 | 78 |
| 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 | 78 |
| 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 | 80 |
| printAst.ql:1:1:1:28 | Import | semmle.label | [Import] Import |
| printAst.ql:1:1:1:28 | Import | semmle.order | 82 |
| printAst.ql:1:1:1:28 | Import | semmle.order | 81 |
| printAst.ql:1:1:1:29 | TopLevel | semmle.label | [TopLevel] TopLevel |
| printAst.ql:1:1:1:29 | TopLevel | semmle.order | 82 |
| printAst.ql:1:1:1:29 | TopLevel | semmle.order | 81 |
edges
| Foo.qll:1:1:25:2 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.label | 1 |
| Foo.qll:1:1:25:2 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.order | 1 |
@@ -173,7 +171,7 @@ edges
| Foo.qll:1:1:25:2 | TopLevel | Foo.qll:9:7:11:1 | foo | semmle.label | 3 |
| Foo.qll:1:1:25:2 | TopLevel | Foo.qll:9:7:11:1 | foo | semmle.order | 16 |
| Foo.qll:1:1:25:2 | TopLevel | Foo.qll:13:1:25:1 | calls | semmle.label | 4 |
| Foo.qll:1:1:25:2 | TopLevel | Foo.qll:13:1:25:1 | calls | semmle.order | 35 |
| Foo.qll:1:1:25:2 | TopLevel | Foo.qll:13:1:25:1 | calls | semmle.order | 34 |
| Foo.qll:3:1:7:1 | Foo | Foo.qll:3:19:3:22 | TypeExpr | semmle.label | 1 |
| Foo.qll:3:1:7:1 | Foo | Foo.qll:3:19:3:22 | TypeExpr | semmle.order | 4 |
| Foo.qll:3:1:7:1 | Foo | Foo.qll:4:3:4:17 | CharPred | semmle.label | 2 |
@@ -216,10 +214,10 @@ edges
| 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:27:10:50 | ComparisonFormula | semmle.label | 3 |
| 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:54:10:58 | AsExpr | semmle.label | 4 |
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:54:10:58 | AsExpr | semmle.order | 31 |
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:54:10:58 | inner | semmle.label | 4 |
| 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:69:10:84 | MemberCall | semmle.label | 5 |
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:69:10:84 | MemberCall | semmle.order | 33 |
| Foo.qll:10:7:10:85 | Rank | Foo.qll:10:69:10:84 | MemberCall | semmle.order | 32 |
| Foo.qll:10:15:10:23 | inner | Foo.qll:10:15:10:17 | TypeExpr | semmle.label | 1 |
| Foo.qll:10:15:10:23 | inner | Foo.qll:10:15:10:17 | TypeExpr | semmle.order | 24 |
| Foo.qll:10:27:10:42 | MemberCall | Foo.qll:10:27:10:31 | inner | semmle.label | 1 |
@@ -230,103 +228,101 @@ edges
| 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:46:10:50 | String | semmle.label | 3 |
| Foo.qll:10:27:10:50 | ComparisonFormula | Foo.qll:10:46:10:50 | String | semmle.order | 30 |
| Foo.qll:10:54:10:58 | AsExpr | Foo.qll:10:54:10:58 | inner | semmle.label | 1 |
| Foo.qll:10:54:10:58 | AsExpr | Foo.qll:10:54:10:58 | inner | semmle.order | 31 |
| Foo.qll:10:69:10:84 | MemberCall | Foo.qll:10:69:10:73 | inner | semmle.label | 1 |
| Foo.qll:10:69:10:84 | MemberCall | Foo.qll:10:69:10:73 | inner | semmle.order | 33 |
| Foo.qll:10:69:10:84 | MemberCall | Foo.qll:10:69:10:73 | inner | semmle.order | 32 |
| Foo.qll:13:1:25:1 | calls | Foo.qll:13:17:13:21 | f | semmle.label | 1 |
| Foo.qll:13:1:25:1 | calls | Foo.qll:13:17:13:21 | f | semmle.order | 36 |
| Foo.qll:13:1:25:1 | calls | Foo.qll:13:17:13:21 | f | semmle.order | 35 |
| Foo.qll:13:1:25:1 | calls | Foo.qll:14:3:24:23 | Disjunction | semmle.label | 2 |
| Foo.qll:13:1:25:1 | calls | Foo.qll:14:3:24:23 | Disjunction | semmle.order | 38 |
| Foo.qll:13:1:25:1 | calls | Foo.qll:14:3:24:23 | Disjunction | semmle.order | 37 |
| Foo.qll:13:17:13:21 | f | Foo.qll:13:17:13:19 | TypeExpr | semmle.label | 1 |
| Foo.qll:13:17:13:21 | f | Foo.qll:13:17:13:19 | TypeExpr | semmle.order | 36 |
| Foo.qll:13:17:13:21 | f | Foo.qll:13:17:13:19 | TypeExpr | semmle.order | 35 |
| Foo.qll:14:3:14:10 | PredicateCall | Foo.qll:14:9:14:9 | f | semmle.label | 1 |
| 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 | 43 |
| Foo.qll:14:3:16:29 | Disjunction | Foo.qll:14:3:14:10 | PredicateCall | semmle.label | 1 |
| 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:14:3:14:10 | PredicateCall | semmle.order | 37 |
| Foo.qll:14:3:16:29 | Disjunction | Foo.qll:16:3:16:29 | ComparisonFormula | semmle.label | 2 |
| 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 | 44 |
| Foo.qll:14:3:18:28 | Disjunction | Foo.qll:14:3:16:29 | Disjunction | semmle.label | 1 |
| 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:14:3:16:29 | Disjunction | semmle.order | 37 |
| Foo.qll:14:3:18:28 | Disjunction | Foo.qll:18:3:18:28 | ComparisonFormula | semmle.label | 2 |
| 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 | 52 |
| Foo.qll:14:3:20:13 | Disjunction | Foo.qll:14:3:18:28 | Disjunction | semmle.label | 1 |
| 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:14:3:18:28 | Disjunction | semmle.order | 37 |
| Foo.qll:14:3:20:13 | Disjunction | Foo.qll:20:3:20:13 | ComparisonFormula | semmle.label | 2 |
| 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 | 59 |
| Foo.qll:14:3:22:16 | Disjunction | Foo.qll:14:3:20:13 | Disjunction | semmle.label | 1 |
| 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:14:3:20:13 | Disjunction | semmle.order | 37 |
| Foo.qll:14:3:22:16 | Disjunction | Foo.qll:22:3:22:16 | ComparisonFormula | semmle.label | 2 |
| 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 | 65 |
| Foo.qll:14:3:24:23 | Disjunction | Foo.qll:14:3:22:16 | Disjunction | semmle.label | 1 |
| 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:14:3:22:16 | Disjunction | semmle.order | 37 |
| Foo.qll:14:3:24:23 | Disjunction | Foo.qll:24:3:24:23 | ComparisonFormula | semmle.label | 2 |
| 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 | 71 |
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:3:16:7 | String | semmle.label | 1 |
| 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 | 44 |
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:9:16:9 | ComparisonOp | semmle.label | 2 |
| 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 | 46 |
| Foo.qll:16:3:16:29 | ComparisonFormula | Foo.qll:16:11:16:29 | MemberCall | semmle.label | 3 |
| 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 | 47 |
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:11:16:11 | f | semmle.label | 1 |
| 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 | 47 |
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:22:16:22 | Integer | semmle.label | 2 |
| 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 | 49 |
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:25:16:25 | Integer | semmle.label | 3 |
| 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 | 50 |
| Foo.qll:16:11:16:29 | MemberCall | Foo.qll:16:28:16:28 | Integer | semmle.label | 4 |
| 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 | 51 |
| Foo.qll:18:3:18:9 | InlineCast | Foo.qll:18:3:18:3 | f | semmle.label | 1 |
| 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 | 52 |
| Foo.qll:18:3:18:9 | InlineCast | Foo.qll:18:6:18:8 | TypeExpr | semmle.label | 2 |
| 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 | 56 |
| Foo.qll:18:3:18:20 | MemberCall | Foo.qll:18:3:18:9 | InlineCast | semmle.label | 1 |
| 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 | 52 |
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:3:18:20 | MemberCall | semmle.label | 1 |
| 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 | 52 |
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:22:18:22 | ComparisonOp | semmle.label | 2 |
| 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 | 57 |
| Foo.qll:18:3:18:28 | ComparisonFormula | Foo.qll:18:24:18:28 | String | semmle.label | 3 |
| 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 | 58 |
| Foo.qll:20:3:20:9 | InlineCast | Foo.qll:20:3:20:3 | f | semmle.label | 1 |
| 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 | 59 |
| Foo.qll:20:3:20:9 | InlineCast | Foo.qll:20:6:20:8 | TypeExpr | semmle.label | 2 |
| 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 | 62 |
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:3:20:9 | InlineCast | semmle.label | 1 |
| 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 | 59 |
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:11:20:11 | ComparisonOp | semmle.label | 2 |
| 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 | 63 |
| Foo.qll:20:3:20:13 | ComparisonFormula | Foo.qll:20:13:20:13 | f | semmle.label | 3 |
| 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 | 64 |
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:3:22:3 | f | semmle.label | 1 |
| 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 | 65 |
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:5:22:5 | ComparisonOp | semmle.label | 2 |
| 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 | 67 |
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:7:22:16 | Aggregate[any] | semmle.label | 3 |
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:7:22:16 | Aggregate[any] | semmle.order | 69 |
| Foo.qll:22:3:22:16 | ComparisonFormula | Foo.qll:22:7:22:16 | Aggregate[any] | semmle.order | 68 |
| Foo.qll:22:7:22:16 | Aggregate[any] | Foo.qll:22:11:22:15 | f | semmle.label | 1 |
| Foo.qll:22:7:22:16 | Aggregate[any] | Foo.qll:22:11:22:15 | f | semmle.order | 70 |
| Foo.qll:22:7:22:16 | Aggregate[any] | Foo.qll:22:11:22:15 | f | semmle.order | 69 |
| Foo.qll:22:11:22:15 | f | Foo.qll:22:11:22:13 | TypeExpr | semmle.label | 1 |
| 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 | 69 |
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:3:24:3 | Integer | semmle.label | 1 |
| 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 | 71 |
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:5:24:5 | ComparisonOp | semmle.label | 2 |
| 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 | 73 |
| Foo.qll:24:3:24:23 | ComparisonFormula | Foo.qll:24:7:24:23 | AddExpr | semmle.label | 3 |
| 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 | 74 |
| Foo.qll:24:7:24:23 | AddExpr | Foo.qll:24:7:24:7 | Integer | semmle.label | 1 |
| 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 | 74 |
| Foo.qll:24:7:24:23 | AddExpr | Foo.qll:24:12:24:22 | AddExpr | semmle.label | 2 |
| 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 | 76 |
| Foo.qll:24:12:24:22 | AddExpr | Foo.qll:24:12:24:12 | Integer | semmle.label | 1 |
| 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 | 76 |
| Foo.qll:24:12:24:22 | AddExpr | Foo.qll:24:17:24:21 | AddExpr | semmle.label | 2 |
| 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 | 78 |
| Foo.qll:24:17:24:21 | AddExpr | Foo.qll:24:17:24:17 | Integer | semmle.label | 1 |
| 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 | 78 |
| Foo.qll:24:17:24:21 | AddExpr | Foo.qll:24:21:24:21 | Integer | semmle.label | 2 |
| 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 | 80 |
| printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.label | 1 |
| printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.order | 82 |
| printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.order | 81 |
graphProperties
| semmle.graphKind | tree |