Skip to content

Commit 1a06282

Browse files
committed
Swift: extract DynamicLookupExpr
1 parent e2bdef2 commit 1a06282

14 files changed

+25
-11
lines changed

swift/extractor/translators/ExprTranslator.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,11 +543,19 @@ codeql::OverloadedDeclRefExpr ExprTranslator::translateOverloadedDeclRefExpr(
543543
entry.possible_declarations = dispatcher.fetchRepeatedLabels(expr.getDecls());
544544
return entry;
545545
}
546+
546547
codeql::DynamicMemberRefExpr ExprTranslator::translateDynamicMemberRefExpr(
547548
const swift::DynamicMemberRefExpr& expr) {
548549
auto entry = createExprEntry(expr);
549550
fillLookupExpr(expr, entry);
550551
return entry;
551552
}
552553

554+
codeql::DynamicSubscriptExpr ExprTranslator::translateDynamicSubscriptExpr(
555+
const swift::DynamicSubscriptExpr& expr) {
556+
auto entry = createExprEntry(expr);
557+
fillLookupExpr(expr, entry);
558+
return entry;
559+
}
560+
553561
} // namespace codeql

swift/extractor/translators/ExprTranslator.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ class ExprTranslator : public AstTranslatorBase<ExprTranslator> {
107107
const swift::OverloadedDeclRefExpr& expr);
108108
codeql::DynamicMemberRefExpr translateDynamicMemberRefExpr(
109109
const swift::DynamicMemberRefExpr& expr);
110+
codeql::DynamicSubscriptExpr translateDynamicSubscriptExpr(
111+
const swift::DynamicSubscriptExpr& expr);
110112

111113
private:
112114
void fillAbstractClosureExpr(const swift::AbstractClosureExpr& expr,
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
| dynamic_lookup.swift:15:1:15:3 | .foo(_:) | DynamicMemberRefExpr | getBase: | dynamic_lookup.swift:15:1:15:1 | OpaqueValueExpr |
2+
| dynamic_lookup.swift:16:5:16:9 | subscript ...[...] | DynamicSubscriptExpr | getBase: | dynamic_lookup.swift:16:5:16:5 | OpaqueValueExpr |

swift/ql/test/extractor-tests/generated/expr/DynamicMemberRefExpr/DynamicMemberRefExpr.ql renamed to swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.ql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
import codeql.swift.elements
33
import TestUtils
44

5-
from DynamicMemberRefExpr x, Expr getBase
5+
from DynamicLookupExpr x, Expr getBase
66
where
77
toBeTested(x) and
88
not x.isUnknown() and
99
getBase = x.getBase()
10-
select x, "getBase:", getBase
10+
select x, x.getPrimaryQlClasses(), "getBase:", getBase
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
| dynamic_lookup.swift:15:1:15:3 | .foo(_:) | dynamic_lookup.swift:6:9:6:28 | foo(_:) |
2+
| dynamic_lookup.swift:16:5:16:9 | subscript ...[...] | dynamic_lookup.swift:7:9:9:3 | subscript ... |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
import codeql.swift.elements
33
import TestUtils
44

5-
from DynamicMemberRefExpr x
5+
from DynamicLookupExpr x
66
where toBeTested(x) and not x.isUnknown()
77
select x, x.getMember()
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
| dynamic_lookup.swift:15:1:15:3 | .foo(_:) | ((Int) -> ())? |
2+
| dynamic_lookup.swift:16:5:16:9 | subscript ...[...] | Int? |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
import codeql.swift.elements
33
import TestUtils
44

5-
from DynamicMemberRefExpr x
5+
from DynamicLookupExpr x
66
where toBeTested(x) and not x.isUnknown()
77
select x, x.getType()

swift/ql/test/extractor-tests/generated/expr/DynamicMemberRefExpr/dynamic_member_ref.swift renamed to swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/dynamic_lookup.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@
44
// Successful compilation would require importing Foundation for `@objc`
55
class A {
66
@objc func foo(_ : Int) {}
7+
@objc subscript(i : Int) -> Int {
8+
get { return 0 }
9+
}
710
};
811

912
class B {}
1013

1114
var x : AnyObject = B()
1215
x.foo!(17)
16+
_ = x[17]!

swift/ql/test/extractor-tests/generated/expr/DynamicMemberRefExpr/DynamicMemberRefExpr.expected

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)