Skip to content

Commit e677b78

Browse files
committed
Swift: attach NominalTypeDecl to the ExtensionDecl
1 parent cf0fc58 commit e677b78

File tree

4 files changed

+13
-2
lines changed

4 files changed

+13
-2
lines changed

swift/codegen/schema.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ IterableDeclContext:
3636
members: Decl*
3737

3838
ExtensionDecl:
39+
extended_type_decl: NominalTypeDecl
3940
_extends:
4041
- GenericContext
4142
- IterableDeclContext

swift/extractor/visitors/DeclVisitor.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,8 @@ class DeclVisitor : public AstVisitorBase<DeclVisitor> {
195195

196196
void visitExtensionDecl(swift::ExtensionDecl* decl) {
197197
auto label = dispatcher_.assignNewLabel(decl);
198-
dispatcher_.emit(ExtensionDeclsTrap{label});
198+
auto typeLabel = dispatcher_.fetchLabel(decl->getExtendedNominal());
199+
dispatcher_.emit(ExtensionDeclsTrap{label, typeLabel});
199200
emitGenericContext(decl, label);
200201
emitIterableDeclContext(decl, label);
201202
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,15 @@
22
import codeql.swift.elements.decl.Decl
33
import codeql.swift.elements.decl.GenericContext
44
import codeql.swift.elements.decl.IterableDeclContext
5+
import codeql.swift.elements.decl.NominalTypeDecl
56

67
class ExtensionDeclBase extends @extension_decl, Decl, GenericContext, IterableDeclContext {
78
override string getAPrimaryQlClass() { result = "ExtensionDecl" }
9+
10+
NominalTypeDecl getExtendedTypeDecl() {
11+
exists(NominalTypeDecl x |
12+
extension_decls(this, x) and
13+
result = x.resolve()
14+
)
15+
}
816
}

swift/ql/lib/swift.dbscheme

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ iterable_decl_context_members(
9898
);
9999

100100
extension_decls(
101-
unique int id: @extension_decl
101+
unique int id: @extension_decl,
102+
int extended_type_decl: @nominal_type_decl ref
102103
);
103104

104105
@nominal_type_decl =

0 commit comments

Comments
 (0)