Skip to content

Commit e2bdef2

Browse files
committed
Swift: extract DynamicMemberRefExpr
1 parent 4770ad3 commit e2bdef2

10 files changed

+47
-4
lines changed

swift/extractor/translators/ExprTranslator.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,5 +543,11 @@ codeql::OverloadedDeclRefExpr ExprTranslator::translateOverloadedDeclRefExpr(
543543
entry.possible_declarations = dispatcher.fetchRepeatedLabels(expr.getDecls());
544544
return entry;
545545
}
546+
codeql::DynamicMemberRefExpr ExprTranslator::translateDynamicMemberRefExpr(
547+
const swift::DynamicMemberRefExpr& expr) {
548+
auto entry = createExprEntry(expr);
549+
fillLookupExpr(expr, entry);
550+
return entry;
551+
}
546552

547553
} // namespace codeql

swift/extractor/translators/ExprTranslator.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ class ExprTranslator : public AstTranslatorBase<ExprTranslator> {
105105
codeql::ObjectLiteralExpr translateObjectLiteralExpr(const swift::ObjectLiteralExpr& expr);
106106
codeql::OverloadedDeclRefExpr translateOverloadedDeclRefExpr(
107107
const swift::OverloadedDeclRefExpr& expr);
108+
codeql::DynamicMemberRefExpr translateDynamicMemberRefExpr(
109+
const swift::DynamicMemberRefExpr& expr);
108110

109111
private:
110112
void fillAbstractClosureExpr(const swift::AbstractClosureExpr& expr,
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| dynamic_member_ref.swift:12:1:12:3 | .foo(_:) | getBase: | dynamic_member_ref.swift:12:1:12:1 | OpaqueValueExpr |
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// generated by codegen/codegen.py
2+
import codeql.swift.elements
3+
import TestUtils
4+
5+
from DynamicMemberRefExpr x, Expr getBase
6+
where
7+
toBeTested(x) and
8+
not x.isUnknown() and
9+
getBase = x.getBase()
10+
select x, "getBase:", getBase
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| dynamic_member_ref.swift:12:1:12:3 | .foo(_:) | dynamic_member_ref.swift:6:9:6:28 | foo(_:) |
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// generated by codegen/codegen.py
2+
import codeql.swift.elements
3+
import TestUtils
4+
5+
from DynamicMemberRefExpr x
6+
where toBeTested(x) and not x.isUnknown()
7+
select x, x.getMember()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| dynamic_member_ref.swift:12:1:12:3 | .foo(_:) | ((Int) -> ())? |
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// generated by codegen/codegen.py
2+
import codeql.swift.elements
3+
import TestUtils
4+
5+
from DynamicMemberRefExpr x
6+
where toBeTested(x) and not x.isUnknown()
7+
select x, x.getType()

swift/ql/test/extractor-tests/generated/expr/DynamicMemberRefExpr/MISSING_SOURCE.txt

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//codeql-extractor-options: -enable-objc-interop
2+
//codeql-extractor-expected-status: 1
3+
4+
// Successful compilation would require importing Foundation for `@objc`
5+
class A {
6+
@objc func foo(_ : Int) {}
7+
};
8+
9+
class B {}
10+
11+
var x : AnyObject = B()
12+
x.foo!(17)

0 commit comments

Comments
 (0)