Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,780 changes: 2,780 additions & 0 deletions swift/downgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/old.dbscheme

Large diffs are not rendered by default.

2,774 changes: 2,774 additions & 0 deletions swift/downgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/swift.dbscheme

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
description: Remove types for patterns
compatibility: partial

pattern_types.rel: delete
23 changes: 12 additions & 11 deletions swift/extractor/translators/PatternTranslator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,62 +3,63 @@
namespace codeql {

codeql::NamedPattern PatternTranslator::translateNamedPattern(const swift::NamedPattern& pattern) {
auto entry = dispatcher.createEntry(pattern);

auto entry = createPatternEntry(pattern);
entry.var_decl = dispatcher.fetchLabel(pattern.getDecl());
return entry;
}

codeql::TypedPattern PatternTranslator::translateTypedPattern(const swift::TypedPattern& pattern) {
auto entry = dispatcher.createEntry(pattern);
auto entry = createPatternEntry(pattern);
entry.sub_pattern = dispatcher.fetchLabel(pattern.getSubPattern());
entry.type_repr = dispatcher.fetchOptionalLabel(pattern.getTypeRepr(), pattern.getType());
return entry;
}

codeql::TuplePattern PatternTranslator::translateTuplePattern(const swift::TuplePattern& pattern) {
auto entry = dispatcher.createEntry(pattern);
auto entry = createPatternEntry(pattern);
for (const auto& p : pattern.getElements()) {
entry.elements.push_back(dispatcher.fetchLabel(p.getPattern()));
}
return entry;
}
codeql::AnyPattern PatternTranslator::translateAnyPattern(const swift::AnyPattern& pattern) {
auto entry = dispatcher.createEntry(pattern);
auto entry = createPatternEntry(pattern);
return entry;
}

codeql::BindingPattern PatternTranslator::translateBindingPattern(
const swift::BindingPattern& pattern) {
auto entry = dispatcher.createEntry(pattern);
auto entry = createPatternEntry(pattern);
entry.sub_pattern = dispatcher.fetchLabel(pattern.getSubPattern());
return entry;
}

codeql::EnumElementPattern PatternTranslator::translateEnumElementPattern(
const swift::EnumElementPattern& pattern) {
auto entry = dispatcher.createEntry(pattern);
auto entry = createPatternEntry(pattern);
entry.element = dispatcher.fetchLabel(pattern.getElementDecl());
entry.sub_pattern = dispatcher.fetchOptionalLabel(pattern.getSubPattern());
return entry;
}

codeql::OptionalSomePattern PatternTranslator::translateOptionalSomePattern(
const swift::OptionalSomePattern& pattern) {
auto entry = dispatcher.createEntry(pattern);
auto entry = createPatternEntry(pattern);
entry.sub_pattern = dispatcher.fetchLabel(pattern.getSubPattern());
return entry;
}

codeql::IsPattern PatternTranslator::translateIsPattern(const swift::IsPattern& pattern) {
auto entry = dispatcher.createEntry(pattern);
auto entry = createPatternEntry(pattern);
entry.cast_type_repr =
dispatcher.fetchOptionalLabel(pattern.getCastTypeRepr(), pattern.getCastType());
entry.sub_pattern = dispatcher.fetchOptionalLabel(pattern.getSubPattern());
return entry;
}

codeql::ExprPattern PatternTranslator::translateExprPattern(const swift::ExprPattern& pattern) {
auto entry = dispatcher.createEntry(pattern);
auto entry = createPatternEntry(pattern);
if (auto match = pattern.getMatchExpr()) {
entry.sub_expr = dispatcher.fetchLabel(match);
} else {
Expand All @@ -68,13 +69,13 @@ codeql::ExprPattern PatternTranslator::translateExprPattern(const swift::ExprPat
}

codeql::ParenPattern PatternTranslator::translateParenPattern(const swift::ParenPattern& pattern) {
auto entry = dispatcher.createEntry(pattern);
auto entry = createPatternEntry(pattern);
entry.sub_pattern = dispatcher.fetchLabel(pattern.getSubPattern());
return entry;
}

codeql::BoolPattern PatternTranslator::translateBoolPattern(const swift::BoolPattern& pattern) {
auto entry = dispatcher.createEntry(pattern);
auto entry = createPatternEntry(pattern);
entry.value = pattern.getValue();
return entry;
}
Expand Down
8 changes: 8 additions & 0 deletions swift/extractor/translators/PatternTranslator.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,13 @@ class PatternTranslator : public AstTranslatorBase<PatternTranslator> {
codeql::ExprPattern translateExprPattern(const swift::ExprPattern& pattern);
codeql::ParenPattern translateParenPattern(const swift::ParenPattern& pattern);
codeql::BoolPattern translateBoolPattern(const swift::BoolPattern& pattern);

private:
template <typename T>
TrapClassOf<T> createPatternEntry(const T& pattern) {
auto entry = dispatcher.createEntry(pattern);
entry.type = dispatcher.fetchOptionalLabel(pattern.getType());
return entry;
}
};
} // namespace codeql
6 changes: 3 additions & 3 deletions swift/ql/.generated.list

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions swift/ql/lib/change-notes/2023-10-24-pattern-types.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
category: minorAnalysis
---

* Tyes for patterns are now included in the database and made available through the `Pattern::getType()` method.
7 changes: 6 additions & 1 deletion swift/ql/lib/codeql/swift/generated/Raw.qll

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 27 additions & 1 deletion swift/ql/lib/codeql/swift/generated/pattern/Pattern.qll

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions swift/ql/lib/swift.dbscheme

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading