Skip to content

Commit cdb081e

Browse files
committed
Swift: Update schema and update generated files.
1 parent 8248f60 commit cdb081e

File tree

9 files changed

+194
-29
lines changed

9 files changed

+194
-29
lines changed

swift/codegen/schema.yml

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,9 @@ DeclRefExpr:
327327
_extends: Expr
328328
decl: Decl
329329
replacement_types: Type*
330+
has_direct_to_storage_semantics: predicate
331+
has_direct_to_implementation_semantics: predicate
332+
has_ordinary_semantics: predicate
330333

331334
DefaultArgumentExpr:
332335
_extends: Expr
@@ -404,6 +407,8 @@ LiteralExpr:
404407

405408
LookupExpr:
406409
_extends: Expr
410+
base_expr: Expr
411+
member: Decl
407412

408413
MakeTemporarilyEscapableExpr:
409414
_extends: Expr
@@ -653,6 +658,7 @@ AbstractFunctionDecl:
653658

654659
AbstractStorageDecl:
655660
_extends: ValueDecl
661+
accessor_decls: AccessorDecl*
656662

657663
EnumElementDecl:
658664
_extends: ValueDecl
@@ -840,14 +846,17 @@ DynamicLookupExpr:
840846

841847
MemberRefExpr:
842848
_extends: LookupExpr
843-
base_expr: Expr
849+
has_direct_to_storage_semantics: predicate
850+
has_direct_to_implementation_semantics: predicate
851+
has_ordinary_semantics: predicate
844852

845853
SubscriptExpr:
846854
_extends:
847-
- GenericContext
848855
- LookupExpr
849-
base_expr: Expr
850856
arguments: Argument*
857+
has_direct_to_storage_semantics: predicate
858+
has_direct_to_implementation_semantics: predicate
859+
has_ordinary_semantics: predicate
851860

852861
OverloadedDeclRefExpr:
853862
_extends: OverloadSetRefExpr
@@ -927,7 +936,11 @@ FuncDecl:
927936
_extends: AbstractFunctionDecl
928937

929938
SubscriptDecl:
930-
_extends: AbstractStorageDecl
939+
_extends:
940+
- AbstractStorageDecl
941+
- GenericContext
942+
params: ParamDecl*
943+
element_type: Type
931944

932945
VarDecl:
933946
_extends: AbstractStorageDecl
@@ -1002,6 +1015,10 @@ WhileStmt:
10021015

10031016
AccessorDecl:
10041017
_extends: FuncDecl
1018+
is_getter: predicate
1019+
is_setter: predicate
1020+
is_will_set: predicate
1021+
is_did_set: predicate
10051022

10061023
ConcreteFuncDecl:
10071024
_extends: FuncDecl
Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
// generated by codegen/codegen.py
2+
import codeql.swift.elements.decl.AccessorDecl
23
import codeql.swift.elements.decl.ValueDecl
34

4-
class AbstractStorageDeclBase extends @abstract_storage_decl, ValueDecl { }
5+
class AbstractStorageDeclBase extends @abstract_storage_decl, ValueDecl {
6+
AccessorDecl getAccessorDecl(int index) {
7+
exists(AccessorDecl x |
8+
abstract_storage_decl_accessor_decls(this, index, x) and
9+
result = x.resolve()
10+
)
11+
}
12+
13+
AccessorDecl getAnAccessorDecl() { result = getAccessorDecl(_) }
14+
15+
int getNumberOfAccessorDecls() { result = count(getAnAccessorDecl()) }
16+
}

swift/ql/lib/codeql/swift/generated/decl/AccessorDecl.qll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,12 @@ import codeql.swift.elements.decl.FuncDecl
33

44
class AccessorDeclBase extends @accessor_decl, FuncDecl {
55
override string getAPrimaryQlClass() { result = "AccessorDecl" }
6+
7+
predicate isGetter() { accessor_decl_is_getter(this) }
8+
9+
predicate isSetter() { accessor_decl_is_setter(this) }
10+
11+
predicate isWillSet() { accessor_decl_is_will_set(this) }
12+
13+
predicate isDidSet() { accessor_decl_is_did_set(this) }
614
}
Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,27 @@
11
// generated by codegen/codegen.py
22
import codeql.swift.elements.decl.AbstractStorageDecl
3+
import codeql.swift.elements.decl.GenericContext
4+
import codeql.swift.elements.decl.ParamDecl
5+
import codeql.swift.elements.type.Type
36

4-
class SubscriptDeclBase extends @subscript_decl, AbstractStorageDecl {
7+
class SubscriptDeclBase extends @subscript_decl, AbstractStorageDecl, GenericContext {
58
override string getAPrimaryQlClass() { result = "SubscriptDecl" }
9+
10+
ParamDecl getParam(int index) {
11+
exists(ParamDecl x |
12+
subscript_decl_params(this, index, x) and
13+
result = x.resolve()
14+
)
15+
}
16+
17+
ParamDecl getAParam() { result = getParam(_) }
18+
19+
int getNumberOfParams() { result = count(getAParam()) }
20+
21+
Type getElementType() {
22+
exists(Type x |
23+
subscript_decls(this, x) and
24+
result = x.resolve()
25+
)
26+
}
627
}

swift/ql/lib/codeql/swift/generated/expr/DeclRefExpr.qll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,12 @@ class DeclRefExprBase extends @decl_ref_expr, Expr {
2323
Type getAReplacementType() { result = getReplacementType(_) }
2424

2525
int getNumberOfReplacementTypes() { result = count(getAReplacementType()) }
26+
27+
predicate hasDirectToStorageSemantics() { decl_ref_expr_has_direct_to_storage_semantics(this) }
28+
29+
predicate hasDirectToImplementationSemantics() {
30+
decl_ref_expr_has_direct_to_implementation_semantics(this)
31+
}
32+
33+
predicate hasOrdinarySemantics() { decl_ref_expr_has_ordinary_semantics(this) }
2634
}
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
11
// generated by codegen/codegen.py
2+
import codeql.swift.elements.decl.Decl
23
import codeql.swift.elements.expr.Expr
34

4-
class LookupExprBase extends @lookup_expr, Expr { }
5+
class LookupExprBase extends @lookup_expr, Expr {
6+
Expr getBaseExpr() {
7+
exists(Expr x |
8+
lookup_exprs(this, x, _) and
9+
result = x.resolve()
10+
)
11+
}
12+
13+
Decl getMember() {
14+
exists(Decl x |
15+
lookup_exprs(this, _, x) and
16+
result = x.resolve()
17+
)
18+
}
19+
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// generated by codegen/codegen.py
2-
import codeql.swift.elements.expr.Expr
32
import codeql.swift.elements.expr.LookupExpr
43

54
class MemberRefExprBase extends @member_ref_expr, LookupExpr {
65
override string getAPrimaryQlClass() { result = "MemberRefExpr" }
76

8-
Expr getBaseExpr() {
9-
exists(Expr x |
10-
member_ref_exprs(this, x) and
11-
result = x.resolve()
12-
)
7+
predicate hasDirectToStorageSemantics() { member_ref_expr_has_direct_to_storage_semantics(this) }
8+
9+
predicate hasDirectToImplementationSemantics() {
10+
member_ref_expr_has_direct_to_implementation_semantics(this)
1311
}
12+
13+
predicate hasOrdinarySemantics() { member_ref_expr_has_ordinary_semantics(this) }
1414
}
Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,10 @@
11
// generated by codegen/codegen.py
22
import codeql.swift.elements.expr.Argument
3-
import codeql.swift.elements.expr.Expr
4-
import codeql.swift.elements.decl.GenericContext
53
import codeql.swift.elements.expr.LookupExpr
64

7-
class SubscriptExprBase extends @subscript_expr, GenericContext, LookupExpr {
5+
class SubscriptExprBase extends @subscript_expr, LookupExpr {
86
override string getAPrimaryQlClass() { result = "SubscriptExpr" }
97

10-
Expr getBaseExpr() {
11-
exists(Expr x |
12-
subscript_exprs(this, x) and
13-
result = x.resolve()
14-
)
15-
}
16-
178
Argument getArgument(int index) {
189
exists(Argument x |
1910
subscript_expr_arguments(this, index, x) and
@@ -24,4 +15,12 @@ class SubscriptExprBase extends @subscript_expr, GenericContext, LookupExpr {
2415
Argument getAnArgument() { result = getArgument(_) }
2516

2617
int getNumberOfArguments() { result = count(getAnArgument()) }
18+
19+
predicate hasDirectToStorageSemantics() { subscript_expr_has_direct_to_storage_semantics(this) }
20+
21+
predicate hasDirectToImplementationSemantics() {
22+
subscript_expr_has_direct_to_implementation_semantics(this)
23+
}
24+
25+
predicate hasOrdinarySemantics() { subscript_expr_has_ordinary_semantics(this) }
2726
}

swift/ql/lib/swift.dbscheme

Lines changed: 91 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -744,6 +744,21 @@ decl_ref_expr_replacement_types(
744744
int replacement_type: @type ref
745745
);
746746

747+
#keyset[id]
748+
decl_ref_expr_has_direct_to_storage_semantics(
749+
int id: @decl_ref_expr ref
750+
);
751+
752+
#keyset[id]
753+
decl_ref_expr_has_direct_to_implementation_semantics(
754+
int id: @decl_ref_expr ref
755+
);
756+
757+
#keyset[id]
758+
decl_ref_expr_has_ordinary_semantics(
759+
int id: @decl_ref_expr ref
760+
);
761+
747762
default_argument_exprs(
748763
unique int id: @default_argument_expr,
749764
int param_decl: @param_decl ref,
@@ -910,6 +925,13 @@ lazy_initializer_exprs(
910925
| @subscript_expr
911926
;
912927

928+
#keyset[id]
929+
lookup_exprs(
930+
int id: @lookup_expr ref,
931+
int base_expr: @expr ref,
932+
int member: @decl ref
933+
);
934+
913935
make_temporarily_escapable_exprs(
914936
unique int id: @make_temporarily_escapable_expr,
915937
int escaping_closure: @opaque_value_expr ref,
@@ -1365,6 +1387,13 @@ abstract_function_decl_params(
13651387
| @var_decl
13661388
;
13671389

1390+
#keyset[id, index]
1391+
abstract_storage_decl_accessor_decls(
1392+
int id: @abstract_storage_decl ref,
1393+
int index: int ref,
1394+
int accessor_decl: @accessor_decl ref
1395+
);
1396+
13681397
enum_element_decls(
13691398
unique int id: @enum_element_decl,
13701399
string name: string ref
@@ -1670,13 +1699,26 @@ object_literal_exprs(
16701699
;
16711700

16721701
member_ref_exprs(
1673-
unique int id: @member_ref_expr,
1674-
int base_expr: @expr ref
1702+
unique int id: @member_ref_expr
1703+
);
1704+
1705+
#keyset[id]
1706+
member_ref_expr_has_direct_to_storage_semantics(
1707+
int id: @member_ref_expr ref
1708+
);
1709+
1710+
#keyset[id]
1711+
member_ref_expr_has_direct_to_implementation_semantics(
1712+
int id: @member_ref_expr ref
1713+
);
1714+
1715+
#keyset[id]
1716+
member_ref_expr_has_ordinary_semantics(
1717+
int id: @member_ref_expr ref
16751718
);
16761719

16771720
subscript_exprs(
1678-
unique int id: @subscript_expr,
1679-
int base_expr: @expr ref
1721+
unique int id: @subscript_expr
16801722
);
16811723

16821724
#keyset[id, index]
@@ -1686,6 +1728,21 @@ subscript_expr_arguments(
16861728
int argument: @argument ref
16871729
);
16881730

1731+
#keyset[id]
1732+
subscript_expr_has_direct_to_storage_semantics(
1733+
int id: @subscript_expr ref
1734+
);
1735+
1736+
#keyset[id]
1737+
subscript_expr_has_direct_to_implementation_semantics(
1738+
int id: @subscript_expr ref
1739+
);
1740+
1741+
#keyset[id]
1742+
subscript_expr_has_ordinary_semantics(
1743+
int id: @subscript_expr ref
1744+
);
1745+
16891746
overloaded_decl_ref_exprs(
16901747
unique int id: @overloaded_decl_ref_expr
16911748
);
@@ -1815,7 +1872,15 @@ destructor_decls(
18151872
;
18161873

18171874
subscript_decls(
1818-
unique int id: @subscript_decl
1875+
unique int id: @subscript_decl,
1876+
int element_type: @type ref
1877+
);
1878+
1879+
#keyset[id, index]
1880+
subscript_decl_params(
1881+
int id: @subscript_decl ref,
1882+
int index: int ref,
1883+
int param: @param_decl ref
18191884
);
18201885

18211886
@var_decl =
@@ -1857,7 +1922,7 @@ var_decl_parent_initializers(
18571922
@abstract_function_decl
18581923
| @extension_decl
18591924
| @generic_type_decl
1860-
| @subscript_expr
1925+
| @subscript_decl
18611926
;
18621927

18631928
#keyset[id, index]
@@ -1950,6 +2015,26 @@ accessor_decls(
19502015
unique int id: @accessor_decl
19512016
);
19522017

2018+
#keyset[id]
2019+
accessor_decl_is_getter(
2020+
int id: @accessor_decl ref
2021+
);
2022+
2023+
#keyset[id]
2024+
accessor_decl_is_setter(
2025+
int id: @accessor_decl ref
2026+
);
2027+
2028+
#keyset[id]
2029+
accessor_decl_is_will_set(
2030+
int id: @accessor_decl ref
2031+
);
2032+
2033+
#keyset[id]
2034+
accessor_decl_is_did_set(
2035+
int id: @accessor_decl ref
2036+
);
2037+
19532038
concrete_func_decls(
19542039
unique int id: @concrete_func_decl
19552040
);

0 commit comments

Comments
 (0)