Swift: generate getParent implementation

By explicitly marking children in the `schema.yml` file, an internal
`getAChild` predicate is implemented, that is in turn used in `AstNode`
to implement `getParent`.

This is yet to be used in the control flow library to replace the
hand-rolled implementation.

A further, more complex step is to use the same information to fully
generate the core implementation of `PrintAst` (including the
accessor string). This will be done later.

The `parent` tests use the same swift code as the extractor tests, and
this is currently enforced by `sync-files.py`. Notice that `qltest.sh`
had to be modified to deal with multiple files, which was not working
yet.
This commit is contained in:
Paolo Tranquilli
2022-05-30 17:24:19 +02:00
parent 6f9e9e889b
commit 946e1f498a
342 changed files with 4632 additions and 586 deletions

View File

@@ -25,7 +25,7 @@ repos:
- id: sync-files
name: Fix files required to be identical
files: \.(qll?|qhelp)$
files: \.(qll?|qhelp|swift)$
language: system
entry: python3 config/sync-files.py --latest
pass_filenames: false

View File

@@ -566,5 +566,21 @@
"Typo database": [
"javascript/ql/src/Expressions/TypoDatabase.qll",
"ql/ql/src/codeql_ql/style/TypoDatabase.qll"
],
"Swift declarations test file": [
"swift/ql/test/extractor-tests/declarations/declarations.swift",
"swift/ql/test/library-tests/parent/declarations.swift"
],
"Swift statements test file": [
"swift/ql/test/extractor-tests/statements/statements.swift",
"swift/ql/test/library-tests/parent/statements.swift"
],
"Swift expressions test file": [
"swift/ql/test/extractor-tests/expressions/expressions.swift",
"swift/ql/test/library-tests/parent/expressions.swift"
],
"Swift patterns test file": [
"swift/ql/test/extractor-tests/patterns/patterns.swift",
"swift/ql/test/library-tests/parent/patterns.swift"
]
}
}

View File

@@ -19,6 +19,7 @@ def get_ql_property(cls: schema.Class, prop: schema.Property):
type=prop.type,
tablename=inflection.tableize(cls.name),
tableparams=["this"] + ["result" if p is prop else "_" for p in cls.properties if p.is_single],
is_child=prop.is_child,
)
elif prop.is_repeated:
return ql.Property(
@@ -28,6 +29,7 @@ def get_ql_property(cls: schema.Class, prop: schema.Property):
tablename=inflection.tableize(f"{cls.name}_{prop.name}"),
tableparams=["this", "index", "result"],
is_optional=prop.is_optional,
is_child=prop.is_child,
)
elif prop.is_optional:
return ql.Property(
@@ -36,6 +38,7 @@ def get_ql_property(cls: schema.Class, prop: schema.Property):
tablename=inflection.tableize(f"{cls.name}_{prop.name}"),
tableparams=["this", "result"],
is_optional=True,
is_child=prop.is_child,
)
elif prop.is_predicate:
return ql.Property(

View File

@@ -22,6 +22,7 @@ class Property:
local_var: str = "x"
is_optional: bool = False
is_predicate: bool = False
is_child: bool = False
def __post_init__(self):
if self.tableparams:

View File

@@ -19,6 +19,7 @@ class Property:
name: str
type: str = None
is_child: bool = False
@dataclass
@@ -62,17 +63,18 @@ class Schema:
includes: Set[str] = field(default_factory=set)
def _parse_property(name, type):
def _parse_property(name: str, type: str, is_child: bool = False):
assert not (is_child and type[0].islower()), f"children must have class type, got {type} for {name}"
if type.endswith("?*"):
return RepeatedOptionalProperty(name, type[:-2])
return RepeatedOptionalProperty(name, type[:-2], is_child=is_child)
elif type.endswith("*"):
return RepeatedProperty(name, type[:-1])
return RepeatedProperty(name, type[:-1], is_child=is_child)
elif type.endswith("?"):
return OptionalProperty(name, type[:-1])
return OptionalProperty(name, type[:-1], is_child=is_child)
elif type == "predicate":
return PredicateProperty(name)
else:
return SingleProperty(name, type)
return SingleProperty(name, type, is_child=is_child)
class _DirSelector:
@@ -109,6 +111,8 @@ def load(path):
classes[base].derived.add(name)
elif k == "_dir":
cls.dir = pathlib.Path(v)
elif k == "_children":
cls.properties.extend(_parse_property(kk, vv, is_child=True) for kk, vv in v.items())
if not cls.bases and cls.name != root_class_name:
cls.bases.add(root_class_name)
classes[root_class_name].derived.add(name)

View File

@@ -52,9 +52,10 @@ AstNode:
ConditionElement:
_extends: Locatable
boolean: Expr?
pattern: Pattern?
initializer: Expr?
_children:
boolean: Expr?
pattern: Pattern?
initializer: Expr?
_dir: stmt
AnyFunctionType:
@@ -247,7 +248,8 @@ TypeAliasType:
EnumCaseDecl:
_extends: Decl
elements: EnumElementDecl*
_children:
elements: EnumElementDecl*
IfConfigDecl:
_extends: Decl
@@ -264,8 +266,9 @@ OperatorDecl:
PatternBindingDecl:
_extends: Decl
inits: Expr?*
patterns: Pattern*
_children:
inits: Expr?*
patterns: Pattern*
PoundDiagnosticDecl:
_extends: Decl
@@ -275,7 +278,8 @@ PrecedenceGroupDecl:
TopLevelCodeDecl:
_extends: Decl
body: BraceStmt
_children:
body: BraceStmt
ValueDecl:
_extends: Decl
@@ -286,37 +290,43 @@ AbstractClosureExpr:
AnyTryExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
AppliedPropertyWrapperExpr:
_extends: Expr
Argument:
label: string
expr: Expr
_children:
expr: Expr
_dir: expr
ApplyExpr:
_extends: Expr
function: Expr
arguments: Argument*
_children:
function: Expr
arguments: Argument*
ArrowExpr:
_extends: Expr
AssignExpr:
_extends: Expr
dest: Expr
source: Expr
_children:
dest: Expr
source: Expr
BindOptionalExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
CaptureListExpr:
_extends: Expr
binding_decls: PatternBindingDecl*
closure_body: ClosureExpr
_children:
binding_decls: PatternBindingDecl*
closure_body: ClosureExpr
CodeCompletionExpr:
_extends: Expr
@@ -343,103 +353,121 @@ DiscardAssignmentExpr:
DotSyntaxBaseIgnoredExpr:
_extends: Expr
qualifier: Expr
sub_expr: Expr
_children:
qualifier: Expr
sub_expr: Expr
DynamicTypeExpr:
_extends: Expr
base_expr: Expr
_children:
base_expr: Expr
EditorPlaceholderExpr:
_extends: Expr
EnumIsCaseExpr:
_extends: Expr
sub_expr: Expr
type_repr: TypeRepr
element: EnumElementDecl
_children:
sub_expr: Expr
type_repr: TypeRepr
element: EnumElementDecl
ErrorExpr:
_extends: Expr
ExplicitCastExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
ForceValueExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
IdentityExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
IfExpr:
_extends: Expr
condition: Expr
then_expr: Expr
else_expr: Expr
_children:
condition: Expr
then_expr: Expr
else_expr: Expr
ImplicitConversionExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
InOutExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
KeyPathApplicationExpr:
_extends: Expr
base: Expr
key_path: Expr
_children:
base: Expr
key_path: Expr
KeyPathDotExpr:
_extends: Expr
KeyPathExpr:
_extends: Expr
parsed_root: Expr?
parsed_path: Expr?
_children:
parsed_root: Expr?
parsed_path: Expr?
LazyInitializerExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
LiteralExpr:
_extends: Expr
LookupExpr:
_extends: Expr
base_expr: Expr
_children:
base_expr: Expr
member: Decl
MakeTemporarilyEscapableExpr:
_extends: Expr
escaping_closure: OpaqueValueExpr
nonescaping_closure: Expr
sub_expr: Expr
_children:
escaping_closure: OpaqueValueExpr
nonescaping_closure: Expr
sub_expr: Expr
ObjCSelectorExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
method: AbstractFunctionDecl
OneWayExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
OpaqueValueExpr:
_extends: Expr
OpenExistentialExpr:
_extends: Expr
sub_expr: Expr
existential: Expr
opaque_expr: OpaqueValueExpr
_children:
sub_expr: Expr
existential: Expr
opaque_expr: OpaqueValueExpr
OptionalEvaluationExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
OtherConstructorDeclRefExpr:
_extends: Expr
@@ -452,8 +480,9 @@ PropertyWrapperValuePlaceholderExpr:
RebindSelfInConstructorExpr:
_extends: Expr
sub_expr: Expr
self: VarDecl
_children:
sub_expr: Expr
self: VarDecl
SequenceExpr:
_extends: Expr
@@ -464,22 +493,26 @@ SuperRefExpr:
TapExpr:
_extends: Expr
sub_expr: Expr?
_children:
sub_expr: Expr?
body: BraceStmt
var: VarDecl
body: BraceStmt
TupleElementExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
index: int
TupleExpr:
_extends: Expr
elements: Expr*
_children:
elements: Expr*
TypeExpr:
_extends: Expr
type_repr: TypeRepr?
_children:
type_repr: TypeRepr?
UnresolvedDeclRefExpr:
_extends: Expr
@@ -498,14 +531,16 @@ UnresolvedSpecializeExpr:
VarargExpansionExpr:
_extends: Expr
sub_expr: Expr
_children:
sub_expr: Expr
AnyPattern:
_extends: Pattern
BindingPattern:
_extends: Pattern
sub_pattern: Pattern
_children:
sub_pattern: Pattern
BoolPattern:
_extends: Pattern
@@ -514,11 +549,13 @@ BoolPattern:
EnumElementPattern:
_extends: Pattern
element: EnumElementDecl
sub_pattern: Pattern?
_children:
sub_pattern: Pattern?
ExprPattern:
_extends: Pattern
sub_expr: Expr
_children:
sub_expr: Expr
IsPattern:
_extends: Pattern
@@ -531,24 +568,29 @@ NamedPattern:
OptionalSomePattern:
_extends: Pattern
sub_pattern: Pattern
_children:
sub_pattern: Pattern
ParenPattern:
_extends: Pattern
sub_pattern: Pattern
_children:
sub_pattern: Pattern
TuplePattern:
_extends: Pattern
elements: Pattern*
_children:
elements: Pattern*
TypedPattern:
_extends: Pattern
sub_pattern: Pattern
type_repr: TypeRepr?
_children:
sub_pattern: Pattern
type_repr: TypeRepr?
BraceStmt:
_extends: Stmt
elements: AstNode*
_children:
elements: AstNode*
BreakStmt:
_extends: Stmt
@@ -557,14 +599,16 @@ BreakStmt:
CaseStmt:
_extends: Stmt
body: Stmt
labels: CaseLabelItem*
_children:
body: Stmt
labels: CaseLabelItem*
variables: VarDecl*
CaseLabelItem:
_extends: AstNode
pattern: Pattern
guard: Expr?
_children:
pattern: Pattern
guard: Expr?
_dir: stmt
ContinueStmt:
@@ -574,7 +618,8 @@ ContinueStmt:
DeferStmt:
_extends: Stmt
body: BraceStmt
_children:
body: BraceStmt
FailStmt:
_extends: Stmt
@@ -593,15 +638,18 @@ PoundAssertStmt:
ReturnStmt:
_extends: Stmt
result: Expr?
_children:
result: Expr?
ThrowStmt:
_extends: Stmt
sub_expr: Expr
_children:
sub_expr: Expr
YieldStmt:
_extends: Stmt
results: Expr*
_children:
results: Expr*
BoundGenericType:
_extends: NominalOrBoundGenericNominalType
@@ -657,17 +705,20 @@ AbstractFunctionDecl:
- GenericContext
- ValueDecl
name: string
body: BraceStmt?
params: ParamDecl*
_children:
body: BraceStmt?
params: ParamDecl*
AbstractStorageDecl:
_extends: ValueDecl
accessor_decls: AccessorDecl*
_children:
accessor_decls: AccessorDecl*
EnumElementDecl:
_extends: ValueDecl
name: string
params: ParamDecl*
_children:
params: ParamDecl*
TypeDecl:
_extends: ValueDecl
@@ -676,11 +727,13 @@ TypeDecl:
AutoClosureExpr:
_extends: AbstractClosureExpr
body: BraceStmt
_children:
body: BraceStmt
ClosureExpr:
_extends: AbstractClosureExpr
body: BraceStmt
_children:
body: BraceStmt
ForceTryExpr:
_extends: AnyTryExpr
@@ -705,15 +758,18 @@ PrefixUnaryExpr:
SelfApplyExpr:
_extends: ApplyExpr
base_expr: Expr
_children:
base_expr: Expr
ArrayExpr:
_extends: CollectionExpr
elements: Expr*
_children:
elements: Expr*
DictionaryExpr:
_extends: CollectionExpr
elements: Expr*
_children:
elements: Expr*
CheckedCastExpr:
_extends: ExplicitCastExpr
@@ -832,9 +888,10 @@ BuiltinLiteralExpr:
InterpolatedStringLiteralExpr:
_extends: LiteralExpr
interpolation_expr: OpaqueValueExpr?
interpolation_count_expr: Expr?
literal_capacity_expr: Expr?
appending_expr: TapExpr?
_children:
interpolation_count_expr: Expr?
literal_capacity_expr: Expr?
appending_expr: TapExpr?
RegexLiteralExpr:
_extends: LiteralExpr
@@ -857,7 +914,8 @@ MemberRefExpr:
SubscriptExpr:
_extends:
- LookupExpr
arguments: Argument*
_children:
arguments: Argument*
has_direct_to_storage_semantics: predicate
has_direct_to_implementation_semantics: predicate
has_ordinary_semantics: predicate
@@ -867,38 +925,45 @@ OverloadedDeclRefExpr:
DoCatchStmt:
_extends: LabeledStmt
body: Stmt
catches: CaseStmt*
_children:
body: Stmt
catches: CaseStmt*
DoStmt:
_extends: LabeledStmt
body: BraceStmt
_children:
body: BraceStmt
ForEachStmt:
_extends: LabeledStmt
pattern: Pattern
sequence: Expr
where: Expr?
body: BraceStmt
_children:
pattern: Pattern
sequence: Expr
where: Expr?
body: BraceStmt
LabeledConditionalStmt:
_extends: LabeledStmt
condition: StmtCondition
_children:
condition: StmtCondition
StmtCondition:
_extends: AstNode
elements: ConditionElement*
_children:
elements: ConditionElement*
_dir: stmt
RepeatWhileStmt:
_extends: LabeledStmt
condition: Expr
body: Stmt
_children:
condition: Expr
body: Stmt
SwitchStmt:
_extends: LabeledStmt
expr: Expr
cases: CaseStmt*
_children:
expr: Expr
cases: CaseStmt*
BoundGenericClassType:
_extends: BoundGenericType
@@ -943,7 +1008,8 @@ SubscriptDecl:
_extends:
- AbstractStorageDecl
- GenericContext
params: ParamDecl*
_children:
params: ParamDecl*
element_type: Type
VarDecl:
@@ -1006,16 +1072,19 @@ DynamicSubscriptExpr:
GuardStmt:
_extends: LabeledConditionalStmt
body: BraceStmt
_children:
body: BraceStmt
IfStmt:
_extends: LabeledConditionalStmt
then: Stmt
else: Stmt?
_children:
then: Stmt
else: Stmt?
WhileStmt:
_extends: LabeledConditionalStmt
body: Stmt
_children:
body: Stmt
AccessorDecl:
_extends: FuncDecl

View File

@@ -1,5 +1,8 @@
// generated by {{generator}}
{{^root}}
import codeql.swift.elements.Element
{{/root}}
{{#imports}}
import {{.}}
{{/imports}}
@@ -19,10 +22,26 @@ class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} {
or
result = getResolveStep().resolve()
}
{{name}}Base getAChild() { none() } // overridden by subclasses, internal use only
{{/root}}
{{#final}}
override string getAPrimaryQlClass() { result = "{{name}}" }
{{/final}}
{{^root}}
cached override Element getAChild() {
none()
{{#bases}}
or result = {{.}}.super.getAChild()
{{/bases}}
{{#properties}}
{{#is_child}}
or result = {{getter}}({{#is_repeated}}_{{/is_repeated}})
{{/is_child}}
{{/properties}}
}
{{/root}}
{{#properties}}
{{type}} {{getter}}({{#is_repeated}}int index{{/is_repeated}}) {

View File

@@ -99,44 +99,47 @@ def test_single_properties(opts, input, renderer):
}
def test_optional_property(opts, input, renderer):
@pytest.mark.parametrize("is_child", [False, True])
def test_optional_property(opts, input, renderer, is_child):
input.classes = [
schema.Class("MyObject", properties=[schema.OptionalProperty("foo", "bar")]),
schema.Class("MyObject", properties=[schema.OptionalProperty("foo", "bar", is_child=is_child)]),
]
assert generate(opts, renderer) == {
import_file(): ql.ImportList([stub_import_prefix + "MyObject"]),
stub_path() / "MyObject.qll": ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"),
ql_output_path() / "MyObject.qll": ql.Class(name="MyObject", final=True, properties=[
ql.Property(singular="Foo", type="bar", tablename="my_object_foos", tableparams=["this", "result"],
is_optional=True),
is_optional=True, is_child=is_child),
])
}
def test_repeated_property(opts, input, renderer):
@pytest.mark.parametrize("is_child", [False, True])
def test_repeated_property(opts, input, renderer, is_child):
input.classes = [
schema.Class("MyObject", properties=[schema.RepeatedProperty("foo", "bar")]),
schema.Class("MyObject", properties=[schema.RepeatedProperty("foo", "bar", is_child=is_child)]),
]
assert generate(opts, renderer) == {
import_file(): ql.ImportList([stub_import_prefix + "MyObject"]),
stub_path() / "MyObject.qll": ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"),
ql_output_path() / "MyObject.qll": ql.Class(name="MyObject", final=True, properties=[
ql.Property(singular="Foo", plural="Foos", type="bar", tablename="my_object_foos",
tableparams=["this", "index", "result"]),
tableparams=["this", "index", "result"], is_child=is_child),
])
}
def test_repeated_optional_property(opts, input, renderer):
@pytest.mark.parametrize("is_child", [False, True])
def test_repeated_optional_property(opts, input, renderer, is_child):
input.classes = [
schema.Class("MyObject", properties=[schema.RepeatedOptionalProperty("foo", "bar")]),
schema.Class("MyObject", properties=[schema.RepeatedOptionalProperty("foo", "bar", is_child=is_child)]),
]
assert generate(opts, renderer) == {
import_file(): ql.ImportList([stub_import_prefix + "MyObject"]),
stub_path() / "MyObject.qll": ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"),
ql_output_path() / "MyObject.qll": ql.Class(name="MyObject", final=True, properties=[
ql.Property(singular="Foo", plural="Foos", type="bar", tablename="my_object_foos",
tableparams=["this", "index", "result"], is_optional=True),
tableparams=["this", "index", "result"], is_optional=True, is_child=is_child),
])
}
@@ -155,9 +158,10 @@ def test_predicate_property(opts, input, renderer):
}
def test_single_class_property(opts, input, renderer):
@pytest.mark.parametrize("is_child", [False, True])
def test_single_class_property(opts, input, renderer, is_child):
input.classes = [
schema.Class("MyObject", properties=[schema.SingleProperty("foo", "Bar")]),
schema.Class("MyObject", properties=[schema.SingleProperty("foo", "Bar", is_child=is_child)]),
schema.Class("Bar"),
]
assert generate(opts, renderer) == {
@@ -166,7 +170,8 @@ def test_single_class_property(opts, input, renderer):
stub_path() / "Bar.qll": ql.Stub(name="Bar", base_import=gen_import_prefix + "Bar"),
ql_output_path() / "MyObject.qll": ql.Class(
name="MyObject", final=True, imports=[stub_import_prefix + "Bar"], properties=[
ql.Property(singular="Foo", type="Bar", tablename="my_objects", tableparams=["this", "result"]),
ql.Property(singular="Foo", type="Bar", tablename="my_objects", tableparams=["this", "result"],
is_child=is_child),
],
),
ql_output_path() / "Bar.qll": ql.Class(name="Bar", final=True)

View File

@@ -1,5 +1,7 @@
import sys
import pytest
from swift.codegen.test.utils import *
root_name = schema.root_class_name
@@ -163,9 +165,43 @@ Element:
assert ret.classes == [
schema.Class(root_name, properties=[
schema.SingleProperty('x', 'string'),
]),
]),
]
def test_children(load):
ret = load("""
A:
a: string
b: B*
_children:
c: C
d: D*
e: E?
f: F?*
""")
assert ret.classes == [
schema.Class(root_name, derived={'A'}),
schema.Class('A', bases={root_name}, properties=[
schema.SingleProperty('a', 'string'),
schema.RepeatedProperty('b', 'B'),
schema.SingleProperty('c', 'C', is_child=True),
schema.RepeatedProperty('d', 'D', is_child=True),
schema.OptionalProperty('e', 'E', is_child=True),
schema.RepeatedOptionalProperty('f', 'F', is_child=True),
]),
]
@pytest.mark.parametrize("type", ["string", "int", "boolean", "predicate"])
def test_builtin_and_predicate_children_not_allowed(load, type):
with pytest.raises(AssertionError):
load(f"""
A:
_children:
x: {type}
""")
if __name__ == '__main__':
sys.exit(pytest.main([__file__] + sys.argv[1:]))

View File

@@ -313,7 +313,7 @@ class ExprVisitor : public AstVisitorBase<ExprVisitor> {
auto varLabel = dispatcher_.fetchLabel(expr->getVar());
auto bodyLabel = dispatcher_.fetchLabel(expr->getBody());
dispatcher_.emit(TapExprsTrap{label, varLabel, bodyLabel});
dispatcher_.emit(TapExprsTrap{label, bodyLabel, varLabel});
if (auto subExpr = expr->getSubExpr()) {
dispatcher_.emit(TapExprSubExprsTrap{label, dispatcher_.fetchLabel(subExpr)});
}

View File

@@ -1,4 +1,7 @@
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
private import codeql.swift.generated.AstNode
class AstNode extends AstNodeBase { }
class AstNode extends AstNodeBase {
AstNode getParent() {
result = unique(AstNode x | this = x.getAChild() and not exists(x.getResolveStep()) | x)
}
}

View File

@@ -1,15 +1,15 @@
private import codeql.swift.generated.Element
class Element extends ElementBase {
private predicate resolvesTo(Element e) { e.getResolveStep() = this }
private predicate resolvesFrom(Element e) { e.getResolveStep() = this }
override string toString() { result = getPrimaryQlClasses() }
Element getFullyUnresolved() {
not this.resolvesTo(_) and result = this
not this.resolvesFrom(_) and result = this
or
exists(Element e |
this.resolvesTo(e) and
this.resolvesFrom(e) and
result = e.getFullyUnresolved()
)
}

View File

@@ -1,4 +1,11 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.Locatable
class AstNodeBase extends @ast_node, Locatable { }
class AstNodeBase extends @ast_node, Locatable {
cached
override Element getAChild() {
none() or
result = Locatable.super.getAChild()
}
}

View File

@@ -14,5 +14,7 @@ class ElementBase extends @element {
result = getResolveStep().resolve()
}
ElementBase getAChild() { none() } // overridden by subclasses, internal use only
predicate isUnknown() { element_is_unknown(this) }
}

View File

@@ -1,8 +1,15 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.Element
class FileBase extends @file, Element {
override string getAPrimaryQlClass() { result = "File" }
cached
override Element getAChild() {
none() or
result = Element.super.getAChild()
}
string getName() { files(this, result) }
}

View File

@@ -1,8 +1,15 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.Element
import codeql.swift.elements.Location
class LocatableBase extends @locatable, Element {
cached
override Element getAChild() {
none() or
result = Element.super.getAChild()
}
Location getLocation() {
exists(Location x |
locatables(this, x) and

View File

@@ -1,10 +1,17 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.Element
import codeql.swift.elements.File
class LocationBase extends @location, Element {
override string getAPrimaryQlClass() { result = "Location" }
cached
override Element getAChild() {
none() or
result = Element.super.getAChild()
}
File getFile() {
exists(File x |
locations(this, x, _, _, _, _) and

View File

@@ -1,10 +1,20 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.stmt.BraceStmt
import codeql.swift.elements.decl.GenericContext
import codeql.swift.elements.decl.ParamDecl
import codeql.swift.elements.decl.ValueDecl
class AbstractFunctionDeclBase extends @abstract_function_decl, GenericContext, ValueDecl {
cached
override Element getAChild() {
none() or
result = GenericContext.super.getAChild() or
result = ValueDecl.super.getAChild() or
result = getBody() or
result = getParam(_)
}
string getName() { abstract_function_decls(this, result) }
BraceStmt getBody() {

View File

@@ -1,8 +1,16 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.AccessorDecl
import codeql.swift.elements.decl.ValueDecl
class AbstractStorageDeclBase extends @abstract_storage_decl, ValueDecl {
cached
override Element getAChild() {
none() or
result = ValueDecl.super.getAChild() or
result = getAccessorDecl(_)
}
AccessorDecl getAccessorDecl(int index) {
exists(AccessorDecl x |
abstract_storage_decl_accessor_decls(this, index, x) and

View File

@@ -1,4 +1,11 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.TypeDecl
class AbstractTypeParamDeclBase extends @abstract_type_param_decl, TypeDecl { }
class AbstractTypeParamDeclBase extends @abstract_type_param_decl, TypeDecl {
cached
override Element getAChild() {
none() or
result = TypeDecl.super.getAChild()
}
}

View File

@@ -1,9 +1,16 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.FuncDecl
class AccessorDeclBase extends @accessor_decl, FuncDecl {
override string getAPrimaryQlClass() { result = "AccessorDecl" }
cached
override Element getAChild() {
none() or
result = FuncDecl.super.getAChild()
}
predicate isGetter() { accessor_decl_is_getter(this) }
predicate isSetter() { accessor_decl_is_setter(this) }

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.AbstractTypeParamDecl
class AssociatedTypeDeclBase extends @associated_type_decl, AbstractTypeParamDecl {
override string getAPrimaryQlClass() { result = "AssociatedTypeDecl" }
cached
override Element getAChild() {
none() or
result = AbstractTypeParamDecl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.NominalTypeDecl
class ClassDeclBase extends @class_decl, NominalTypeDecl {
override string getAPrimaryQlClass() { result = "ClassDecl" }
cached
override Element getAChild() {
none() or
result = NominalTypeDecl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.FuncDecl
class ConcreteFuncDeclBase extends @concrete_func_decl, FuncDecl {
override string getAPrimaryQlClass() { result = "ConcreteFuncDecl" }
cached
override Element getAChild() {
none() or
result = FuncDecl.super.getAChild()
}
}

View File

@@ -1,8 +1,15 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.VarDecl
class ConcreteVarDeclBase extends @concrete_var_decl, VarDecl {
override string getAPrimaryQlClass() { result = "ConcreteVarDecl" }
cached
override Element getAChild() {
none() or
result = VarDecl.super.getAChild()
}
int getIntroducerInt() { concrete_var_decls(this, result) }
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.AbstractFunctionDecl
class ConstructorDeclBase extends @constructor_decl, AbstractFunctionDecl {
override string getAPrimaryQlClass() { result = "ConstructorDecl" }
cached
override Element getAChild() {
none() or
result = AbstractFunctionDecl.super.getAChild()
}
}

View File

@@ -1,4 +1,11 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.AstNode
class DeclBase extends @decl, AstNode { }
class DeclBase extends @decl, AstNode {
cached
override Element getAChild() {
none() or
result = AstNode.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.AbstractFunctionDecl
class DestructorDeclBase extends @destructor_decl, AbstractFunctionDecl {
override string getAPrimaryQlClass() { result = "DestructorDecl" }
cached
override Element getAChild() {
none() or
result = AbstractFunctionDecl.super.getAChild()
}
}

View File

@@ -1,10 +1,18 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
import codeql.swift.elements.decl.EnumElementDecl
class EnumCaseDeclBase extends @enum_case_decl, Decl {
override string getAPrimaryQlClass() { result = "EnumCaseDecl" }
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild() or
result = getElement(_)
}
EnumElementDecl getElement(int index) {
exists(EnumElementDecl x |
enum_case_decl_elements(this, index, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.NominalTypeDecl
class EnumDeclBase extends @enum_decl, NominalTypeDecl {
override string getAPrimaryQlClass() { result = "EnumDecl" }
cached
override Element getAChild() {
none() or
result = NominalTypeDecl.super.getAChild()
}
}

View File

@@ -1,10 +1,18 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.ParamDecl
import codeql.swift.elements.decl.ValueDecl
class EnumElementDeclBase extends @enum_element_decl, ValueDecl {
override string getAPrimaryQlClass() { result = "EnumElementDecl" }
cached
override Element getAChild() {
none() or
result = ValueDecl.super.getAChild() or
result = getParam(_)
}
string getName() { enum_element_decls(this, result) }
ParamDecl getParam(int index) {

View File

@@ -1,8 +1,17 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
import codeql.swift.elements.decl.GenericContext
import codeql.swift.elements.decl.IterableDeclContext
class ExtensionDeclBase extends @extension_decl, Decl, GenericContext, IterableDeclContext {
override string getAPrimaryQlClass() { result = "ExtensionDecl" }
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild() or
result = GenericContext.super.getAChild() or
result = IterableDeclContext.super.getAChild()
}
}

View File

@@ -1,4 +1,11 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.AbstractFunctionDecl
class FuncDeclBase extends @func_decl, AbstractFunctionDecl { }
class FuncDeclBase extends @func_decl, AbstractFunctionDecl {
cached
override Element getAChild() {
none() or
result = AbstractFunctionDecl.super.getAChild()
}
}

View File

@@ -1,8 +1,15 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.Element
import codeql.swift.elements.decl.GenericTypeParamDecl
class GenericContextBase extends @generic_context, Element {
cached
override Element getAChild() {
none() or
result = Element.super.getAChild()
}
GenericTypeParamDecl getGenericTypeParam(int index) {
exists(GenericTypeParamDecl x |
generic_context_generic_type_params(this, index, x) and

View File

@@ -1,5 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.GenericContext
import codeql.swift.elements.decl.TypeDecl
class GenericTypeDeclBase extends @generic_type_decl, GenericContext, TypeDecl { }
class GenericTypeDeclBase extends @generic_type_decl, GenericContext, TypeDecl {
cached
override Element getAChild() {
none() or
result = GenericContext.super.getAChild() or
result = TypeDecl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.AbstractTypeParamDecl
class GenericTypeParamDeclBase extends @generic_type_param_decl, AbstractTypeParamDecl {
override string getAPrimaryQlClass() { result = "GenericTypeParamDecl" }
cached
override Element getAChild() {
none() or
result = AbstractTypeParamDecl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
class IfConfigDeclBase extends @if_config_decl, Decl {
override string getAPrimaryQlClass() { result = "IfConfigDecl" }
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
class ImportDeclBase extends @import_decl, Decl {
override string getAPrimaryQlClass() { result = "ImportDecl" }
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild()
}
}

View File

@@ -1,10 +1,17 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.OperatorDecl
import codeql.swift.elements.decl.PrecedenceGroupDecl
class InfixOperatorDeclBase extends @infix_operator_decl, OperatorDecl {
override string getAPrimaryQlClass() { result = "InfixOperatorDecl" }
cached
override Element getAChild() {
none() or
result = OperatorDecl.super.getAChild()
}
PrecedenceGroupDecl getPrecedenceGroup() {
exists(PrecedenceGroupDecl x |
infix_operator_decl_precedence_groups(this, x) and

View File

@@ -1,8 +1,15 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
import codeql.swift.elements.Element
class IterableDeclContextBase extends @iterable_decl_context, Element {
cached
override Element getAChild() {
none() or
result = Element.super.getAChild()
}
Decl getMember(int index) {
exists(Decl x |
iterable_decl_context_members(this, index, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
class MissingMemberDeclBase extends @missing_member_decl, Decl {
override string getAPrimaryQlClass() { result = "MissingMemberDecl" }
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.TypeDecl
class ModuleDeclBase extends @module_decl, TypeDecl {
override string getAPrimaryQlClass() { result = "ModuleDecl" }
cached
override Element getAChild() {
none() or
result = TypeDecl.super.getAChild()
}
}

View File

@@ -1,9 +1,17 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.GenericTypeDecl
import codeql.swift.elements.decl.IterableDeclContext
import codeql.swift.elements.type.Type
class NominalTypeDeclBase extends @nominal_type_decl, GenericTypeDecl, IterableDeclContext {
cached
override Element getAChild() {
none() or
result = GenericTypeDecl.super.getAChild() or
result = IterableDeclContext.super.getAChild()
}
Type getType() {
exists(Type x |
nominal_type_decls(this, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.GenericTypeDecl
class OpaqueTypeDeclBase extends @opaque_type_decl, GenericTypeDecl {
override string getAPrimaryQlClass() { result = "OpaqueTypeDecl" }
cached
override Element getAChild() {
none() or
result = GenericTypeDecl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
class OperatorDeclBase extends @operator_decl, Decl {
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild()
}
string getName() { operator_decls(this, result) }
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.VarDecl
class ParamDeclBase extends @param_decl, VarDecl {
override string getAPrimaryQlClass() { result = "ParamDecl" }
cached
override Element getAChild() {
none() or
result = VarDecl.super.getAChild()
}
}

View File

@@ -1,4 +1,5 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
import codeql.swift.elements.expr.Expr
import codeql.swift.elements.pattern.Pattern
@@ -6,6 +7,14 @@ import codeql.swift.elements.pattern.Pattern
class PatternBindingDeclBase extends @pattern_binding_decl, Decl {
override string getAPrimaryQlClass() { result = "PatternBindingDecl" }
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild() or
result = getInit(_) or
result = getPattern(_)
}
Expr getInit(int index) {
exists(Expr x |
pattern_binding_decl_inits(this, index, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.OperatorDecl
class PostfixOperatorDeclBase extends @postfix_operator_decl, OperatorDecl {
override string getAPrimaryQlClass() { result = "PostfixOperatorDecl" }
cached
override Element getAChild() {
none() or
result = OperatorDecl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
class PoundDiagnosticDeclBase extends @pound_diagnostic_decl, Decl {
override string getAPrimaryQlClass() { result = "PoundDiagnosticDecl" }
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
class PrecedenceGroupDeclBase extends @precedence_group_decl, Decl {
override string getAPrimaryQlClass() { result = "PrecedenceGroupDecl" }
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.OperatorDecl
class PrefixOperatorDeclBase extends @prefix_operator_decl, OperatorDecl {
override string getAPrimaryQlClass() { result = "PrefixOperatorDecl" }
cached
override Element getAChild() {
none() or
result = OperatorDecl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.NominalTypeDecl
class ProtocolDeclBase extends @protocol_decl, NominalTypeDecl {
override string getAPrimaryQlClass() { result = "ProtocolDecl" }
cached
override Element getAChild() {
none() or
result = NominalTypeDecl.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.NominalTypeDecl
class StructDeclBase extends @struct_decl, NominalTypeDecl {
override string getAPrimaryQlClass() { result = "StructDecl" }
cached
override Element getAChild() {
none() or
result = NominalTypeDecl.super.getAChild()
}
}

View File

@@ -1,4 +1,5 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.AbstractStorageDecl
import codeql.swift.elements.decl.GenericContext
import codeql.swift.elements.decl.ParamDecl
@@ -7,6 +8,14 @@ import codeql.swift.elements.type.Type
class SubscriptDeclBase extends @subscript_decl, AbstractStorageDecl, GenericContext {
override string getAPrimaryQlClass() { result = "SubscriptDecl" }
cached
override Element getAChild() {
none() or
result = AbstractStorageDecl.super.getAChild() or
result = GenericContext.super.getAChild() or
result = getParam(_)
}
ParamDecl getParam(int index) {
exists(ParamDecl x |
subscript_decl_params(this, index, x) and

View File

@@ -1,10 +1,18 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.stmt.BraceStmt
import codeql.swift.elements.decl.Decl
class TopLevelCodeDeclBase extends @top_level_code_decl, Decl {
override string getAPrimaryQlClass() { result = "TopLevelCodeDecl" }
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild() or
result = getBody()
}
BraceStmt getBody() {
exists(BraceStmt x |
top_level_code_decls(this, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.GenericTypeDecl
class TypeAliasDeclBase extends @type_alias_decl, GenericTypeDecl {
override string getAPrimaryQlClass() { result = "TypeAliasDecl" }
cached
override Element getAChild() {
none() or
result = GenericTypeDecl.super.getAChild()
}
}

View File

@@ -1,8 +1,15 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.type.Type
import codeql.swift.elements.decl.ValueDecl
class TypeDeclBase extends @type_decl, ValueDecl {
cached
override Element getAChild() {
none() or
result = ValueDecl.super.getAChild()
}
string getName() { type_decls(this, result) }
Type getBaseType(int index) {

View File

@@ -1,8 +1,15 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
import codeql.swift.elements.type.Type
class ValueDeclBase extends @value_decl, Decl {
cached
override Element getAChild() {
none() or
result = Decl.super.getAChild()
}
Type getInterfaceType() {
exists(Type x |
value_decls(this, x) and

View File

@@ -1,10 +1,17 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.AbstractStorageDecl
import codeql.swift.elements.expr.Expr
import codeql.swift.elements.pattern.Pattern
import codeql.swift.elements.type.Type
class VarDeclBase extends @var_decl, AbstractStorageDecl {
cached
override Element getAChild() {
none() or
result = AbstractStorageDecl.super.getAChild()
}
string getName() { var_decls(this, result, _) }
Type getType() {

View File

@@ -1,4 +1,11 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
class AbstractClosureExprBase extends @abstract_closure_expr, Expr { }
class AbstractClosureExprBase extends @abstract_closure_expr, Expr {
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class AnyHashableErasureExprBase extends @any_hashable_erasure_expr, ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "AnyHashableErasureExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,7 +1,15 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
class AnyTryExprBase extends @any_try_expr, Expr {
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild() or
result = getSubExpr()
}
Expr getSubExpr() {
exists(Expr x |
any_try_exprs(this, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
class AppliedPropertyWrapperExprBase extends @applied_property_wrapper_expr, Expr {
override string getAPrimaryQlClass() { result = "AppliedPropertyWrapperExpr" }
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild()
}
}

View File

@@ -1,8 +1,17 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Argument
import codeql.swift.elements.expr.Expr
class ApplyExprBase extends @apply_expr, Expr {
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild() or
result = getFunction() or
result = getArgument(_)
}
Expr getFunction() {
exists(Expr x |
apply_exprs(this, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class ArchetypeToSuperExprBase extends @archetype_to_super_expr, ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "ArchetypeToSuperExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,10 +1,18 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
class ArgumentBase extends @argument, Element {
override string getAPrimaryQlClass() { result = "Argument" }
cached
override Element getAChild() {
none() or
result = Element.super.getAChild() or
result = getExpr()
}
string getLabel() { arguments(this, result, _) }
Expr getExpr() {

View File

@@ -1,10 +1,18 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.CollectionExpr
import codeql.swift.elements.expr.Expr
class ArrayExprBase extends @array_expr, CollectionExpr {
override string getAPrimaryQlClass() { result = "ArrayExpr" }
cached
override Element getAChild() {
none() or
result = CollectionExpr.super.getAChild() or
result = getElement(_)
}
Expr getElement(int index) {
exists(Expr x |
array_expr_elements(this, index, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class ArrayToPointerExprBase extends @array_to_pointer_expr, ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "ArrayToPointerExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
class ArrowExprBase extends @arrow_expr, Expr {
override string getAPrimaryQlClass() { result = "ArrowExpr" }
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild()
}
}

View File

@@ -1,9 +1,18 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
class AssignExprBase extends @assign_expr, Expr {
override string getAPrimaryQlClass() { result = "AssignExpr" }
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild() or
result = getDest() or
result = getSource()
}
Expr getDest() {
exists(Expr x |
assign_exprs(this, x, _) and

View File

@@ -1,10 +1,18 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.AbstractClosureExpr
import codeql.swift.elements.stmt.BraceStmt
class AutoClosureExprBase extends @auto_closure_expr, AbstractClosureExpr {
override string getAPrimaryQlClass() { result = "AutoClosureExpr" }
cached
override Element getAChild() {
none() or
result = AbstractClosureExpr.super.getAChild() or
result = getBody()
}
BraceStmt getBody() {
exists(BraceStmt x |
auto_closure_exprs(this, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.IdentityExpr
class AwaitExprBase extends @await_expr, IdentityExpr {
override string getAPrimaryQlClass() { result = "AwaitExpr" }
cached
override Element getAChild() {
none() or
result = IdentityExpr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ApplyExpr
class BinaryExprBase extends @binary_expr, ApplyExpr {
override string getAPrimaryQlClass() { result = "BinaryExpr" }
cached
override Element getAChild() {
none() or
result = ApplyExpr.super.getAChild()
}
}

View File

@@ -1,9 +1,17 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
class BindOptionalExprBase extends @bind_optional_expr, Expr {
override string getAPrimaryQlClass() { result = "BindOptionalExpr" }
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild() or
result = getSubExpr()
}
Expr getSubExpr() {
exists(Expr x |
bind_optional_exprs(this, x) and

View File

@@ -1,8 +1,15 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.BuiltinLiteralExpr
class BooleanLiteralExprBase extends @boolean_literal_expr, BuiltinLiteralExpr {
override string getAPrimaryQlClass() { result = "BooleanLiteralExpr" }
cached
override Element getAChild() {
none() or
result = BuiltinLiteralExpr.super.getAChild()
}
boolean getValue() { boolean_literal_exprs(this, result) }
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class BridgeFromObjCExprBase extends @bridge_from_obj_c_expr, ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "BridgeFromObjCExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class BridgeToObjCExprBase extends @bridge_to_obj_c_expr, ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "BridgeToObjCExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,4 +1,11 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.LiteralExpr
class BuiltinLiteralExprBase extends @builtin_literal_expr, LiteralExpr { }
class BuiltinLiteralExprBase extends @builtin_literal_expr, LiteralExpr {
cached
override Element getAChild() {
none() or
result = LiteralExpr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ApplyExpr
class CallExprBase extends @call_expr, ApplyExpr {
override string getAPrimaryQlClass() { result = "CallExpr" }
cached
override Element getAChild() {
none() or
result = ApplyExpr.super.getAChild()
}
}

View File

@@ -1,4 +1,5 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ClosureExpr
import codeql.swift.elements.expr.Expr
import codeql.swift.elements.decl.PatternBindingDecl
@@ -6,6 +7,14 @@ import codeql.swift.elements.decl.PatternBindingDecl
class CaptureListExprBase extends @capture_list_expr, Expr {
override string getAPrimaryQlClass() { result = "CaptureListExpr" }
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild() or
result = getBindingDecl(_) or
result = getClosureBody()
}
PatternBindingDecl getBindingDecl(int index) {
exists(PatternBindingDecl x |
capture_list_expr_binding_decls(this, index, x) and

View File

@@ -1,4 +1,11 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ExplicitCastExpr
class CheckedCastExprBase extends @checked_cast_expr, ExplicitCastExpr { }
class CheckedCastExprBase extends @checked_cast_expr, ExplicitCastExpr {
cached
override Element getAChild() {
none() or
result = ExplicitCastExpr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class ClassMetatypeToObjectExprBase extends @class_metatype_to_object_expr, ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "ClassMetatypeToObjectExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,10 +1,18 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.AbstractClosureExpr
import codeql.swift.elements.stmt.BraceStmt
class ClosureExprBase extends @closure_expr, AbstractClosureExpr {
override string getAPrimaryQlClass() { result = "ClosureExpr" }
cached
override Element getAChild() {
none() or
result = AbstractClosureExpr.super.getAChild() or
result = getBody()
}
BraceStmt getBody() {
exists(BraceStmt x |
closure_exprs(this, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
class CodeCompletionExprBase extends @code_completion_expr, Expr {
override string getAPrimaryQlClass() { result = "CodeCompletionExpr" }
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ExplicitCastExpr
class CoerceExprBase extends @coerce_expr, ExplicitCastExpr {
override string getAPrimaryQlClass() { result = "CoerceExpr" }
cached
override Element getAChild() {
none() or
result = ExplicitCastExpr.super.getAChild()
}
}

View File

@@ -1,4 +1,11 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
class CollectionExprBase extends @collection_expr, Expr { }
class CollectionExprBase extends @collection_expr, Expr {
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild()
}
}

View File

@@ -1,7 +1,14 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class CollectionUpcastConversionExprBase extends @collection_upcast_conversion_expr,
ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "CollectionUpcastConversionExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,7 +1,14 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class ConditionalBridgeFromObjCExprBase extends @conditional_bridge_from_obj_c_expr,
ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "ConditionalBridgeFromObjCExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.CheckedCastExpr
class ConditionalCheckedCastExprBase extends @conditional_checked_cast_expr, CheckedCastExpr {
override string getAPrimaryQlClass() { result = "ConditionalCheckedCastExpr" }
cached
override Element getAChild() {
none() or
result = CheckedCastExpr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.SelfApplyExpr
class ConstructorRefCallExprBase extends @constructor_ref_call_expr, SelfApplyExpr {
override string getAPrimaryQlClass() { result = "ConstructorRefCallExpr" }
cached
override Element getAChild() {
none() or
result = SelfApplyExpr.super.getAChild()
}
}

View File

@@ -1,7 +1,14 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class CovariantFunctionConversionExprBase extends @covariant_function_conversion_expr,
ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "CovariantFunctionConversionExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,7 +1,14 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class CovariantReturnConversionExprBase extends @covariant_return_conversion_expr,
ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "CovariantReturnConversionExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,4 +1,5 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.decl.Decl
import codeql.swift.elements.expr.Expr
import codeql.swift.elements.type.Type
@@ -6,6 +7,12 @@ import codeql.swift.elements.type.Type
class DeclRefExprBase extends @decl_ref_expr, Expr {
override string getAPrimaryQlClass() { result = "DeclRefExpr" }
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild()
}
Decl getDecl() {
exists(Decl x |
decl_ref_exprs(this, x) and

View File

@@ -1,10 +1,17 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
import codeql.swift.elements.decl.ParamDecl
class DefaultArgumentExprBase extends @default_argument_expr, Expr {
override string getAPrimaryQlClass() { result = "DefaultArgumentExpr" }
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild()
}
ParamDecl getParamDecl() {
exists(ParamDecl x |
default_argument_exprs(this, x, _) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class DerivedToBaseExprBase extends @derived_to_base_expr, ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "DerivedToBaseExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class DestructureTupleExprBase extends @destructure_tuple_expr, ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "DestructureTupleExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,10 +1,18 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.CollectionExpr
import codeql.swift.elements.expr.Expr
class DictionaryExprBase extends @dictionary_expr, CollectionExpr {
override string getAPrimaryQlClass() { result = "DictionaryExpr" }
cached
override Element getAChild() {
none() or
result = CollectionExpr.super.getAChild() or
result = getElement(_)
}
Expr getElement(int index) {
exists(Expr x |
dictionary_expr_elements(this, index, x) and

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class DifferentiableFunctionExprBase extends @differentiable_function_expr, ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "DifferentiableFunctionExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,7 +1,14 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.ImplicitConversionExpr
class DifferentiableFunctionExtractOriginalExprBase extends @differentiable_function_extract_original_expr,
ImplicitConversionExpr {
override string getAPrimaryQlClass() { result = "DifferentiableFunctionExtractOriginalExpr" }
cached
override Element getAChild() {
none() or
result = ImplicitConversionExpr.super.getAChild()
}
}

View File

@@ -1,6 +1,13 @@
// generated by codegen/codegen.py
import codeql.swift.elements.Element
import codeql.swift.elements.expr.Expr
class DiscardAssignmentExprBase extends @discard_assignment_expr, Expr {
override string getAPrimaryQlClass() { result = "DiscardAssignmentExpr" }
cached
override Element getAChild() {
none() or
result = Expr.super.getAChild()
}
}

Some files were not shown because too many files have changed in this diff Show More