Skip to content

Commit 1087087

Browse files
authored
Merge pull request #14570 from rdmarsh2/rdmarsh2/swift/extract-pattern-types
Swift: extract types for patterns
2 parents 1bc6f88 + e9507b9 commit 1087087

File tree

16 files changed

+11388
-17
lines changed

16 files changed

+11388
-17
lines changed

swift/downgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/old.dbscheme

Lines changed: 2780 additions & 0 deletions
Large diffs are not rendered by default.

swift/downgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/swift.dbscheme

Lines changed: 2774 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
description: Remove types for patterns
2+
compatibility: partial
3+
4+
pattern_types.rel: delete

swift/extractor/translators/PatternTranslator.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,62 +3,63 @@
33
namespace codeql {
44

55
codeql::NamedPattern PatternTranslator::translateNamedPattern(const swift::NamedPattern& pattern) {
6-
auto entry = dispatcher.createEntry(pattern);
6+
7+
auto entry = createPatternEntry(pattern);
78
entry.var_decl = dispatcher.fetchLabel(pattern.getDecl());
89
return entry;
910
}
1011

1112
codeql::TypedPattern PatternTranslator::translateTypedPattern(const swift::TypedPattern& pattern) {
12-
auto entry = dispatcher.createEntry(pattern);
13+
auto entry = createPatternEntry(pattern);
1314
entry.sub_pattern = dispatcher.fetchLabel(pattern.getSubPattern());
1415
entry.type_repr = dispatcher.fetchOptionalLabel(pattern.getTypeRepr(), pattern.getType());
1516
return entry;
1617
}
1718

1819
codeql::TuplePattern PatternTranslator::translateTuplePattern(const swift::TuplePattern& pattern) {
19-
auto entry = dispatcher.createEntry(pattern);
20+
auto entry = createPatternEntry(pattern);
2021
for (const auto& p : pattern.getElements()) {
2122
entry.elements.push_back(dispatcher.fetchLabel(p.getPattern()));
2223
}
2324
return entry;
2425
}
2526
codeql::AnyPattern PatternTranslator::translateAnyPattern(const swift::AnyPattern& pattern) {
26-
auto entry = dispatcher.createEntry(pattern);
27+
auto entry = createPatternEntry(pattern);
2728
return entry;
2829
}
2930

3031
codeql::BindingPattern PatternTranslator::translateBindingPattern(
3132
const swift::BindingPattern& pattern) {
32-
auto entry = dispatcher.createEntry(pattern);
33+
auto entry = createPatternEntry(pattern);
3334
entry.sub_pattern = dispatcher.fetchLabel(pattern.getSubPattern());
3435
return entry;
3536
}
3637

3738
codeql::EnumElementPattern PatternTranslator::translateEnumElementPattern(
3839
const swift::EnumElementPattern& pattern) {
39-
auto entry = dispatcher.createEntry(pattern);
40+
auto entry = createPatternEntry(pattern);
4041
entry.element = dispatcher.fetchLabel(pattern.getElementDecl());
4142
entry.sub_pattern = dispatcher.fetchOptionalLabel(pattern.getSubPattern());
4243
return entry;
4344
}
4445

4546
codeql::OptionalSomePattern PatternTranslator::translateOptionalSomePattern(
4647
const swift::OptionalSomePattern& pattern) {
47-
auto entry = dispatcher.createEntry(pattern);
48+
auto entry = createPatternEntry(pattern);
4849
entry.sub_pattern = dispatcher.fetchLabel(pattern.getSubPattern());
4950
return entry;
5051
}
5152

5253
codeql::IsPattern PatternTranslator::translateIsPattern(const swift::IsPattern& pattern) {
53-
auto entry = dispatcher.createEntry(pattern);
54+
auto entry = createPatternEntry(pattern);
5455
entry.cast_type_repr =
5556
dispatcher.fetchOptionalLabel(pattern.getCastTypeRepr(), pattern.getCastType());
5657
entry.sub_pattern = dispatcher.fetchOptionalLabel(pattern.getSubPattern());
5758
return entry;
5859
}
5960

6061
codeql::ExprPattern PatternTranslator::translateExprPattern(const swift::ExprPattern& pattern) {
61-
auto entry = dispatcher.createEntry(pattern);
62+
auto entry = createPatternEntry(pattern);
6263
if (auto match = pattern.getMatchExpr()) {
6364
entry.sub_expr = dispatcher.fetchLabel(match);
6465
} else {
@@ -68,13 +69,13 @@ codeql::ExprPattern PatternTranslator::translateExprPattern(const swift::ExprPat
6869
}
6970

7071
codeql::ParenPattern PatternTranslator::translateParenPattern(const swift::ParenPattern& pattern) {
71-
auto entry = dispatcher.createEntry(pattern);
72+
auto entry = createPatternEntry(pattern);
7273
entry.sub_pattern = dispatcher.fetchLabel(pattern.getSubPattern());
7374
return entry;
7475
}
7576

7677
codeql::BoolPattern PatternTranslator::translateBoolPattern(const swift::BoolPattern& pattern) {
77-
auto entry = dispatcher.createEntry(pattern);
78+
auto entry = createPatternEntry(pattern);
7879
entry.value = pattern.getValue();
7980
return entry;
8081
}

swift/extractor/translators/PatternTranslator.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,13 @@ class PatternTranslator : public AstTranslatorBase<PatternTranslator> {
2323
codeql::ExprPattern translateExprPattern(const swift::ExprPattern& pattern);
2424
codeql::ParenPattern translateParenPattern(const swift::ParenPattern& pattern);
2525
codeql::BoolPattern translateBoolPattern(const swift::BoolPattern& pattern);
26+
27+
private:
28+
template <typename T>
29+
TrapClassOf<T> createPatternEntry(const T& pattern) {
30+
auto entry = dispatcher.createEntry(pattern);
31+
entry.type = dispatcher.fetchOptionalLabel(pattern.getType());
32+
return entry;
33+
}
2634
};
2735
} // namespace codeql

swift/ql/.generated.list

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
5+
* Tyes for patterns are now included in the database and made available through the `Pattern::getType()` method.

swift/ql/lib/codeql/swift/generated/Raw.qll

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

swift/ql/lib/codeql/swift/generated/pattern/Pattern.qll

Lines changed: 27 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

swift/ql/lib/swift.dbscheme

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)