mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Merge pull request #10386 from github/redsun82/swift-do-not-extract-inactive-ifconfig-clauses
Swift: do not extract unresolved things from `IfConfigDecl`
This commit is contained in:
@@ -17,6 +17,9 @@ Element:
|
||||
_pragma: cpp_skip # this is emitted using trap entries directly
|
||||
_pragma: qltest_skip
|
||||
|
||||
UnresolvedElement:
|
||||
_pragma: [ qltest_collapse_hierarchy, qltest_skip ]
|
||||
|
||||
File:
|
||||
name: string
|
||||
_pragma: qltest_collapse_hierarchy
|
||||
@@ -27,7 +30,7 @@ DbFile:
|
||||
UnknownFile:
|
||||
_extends: File
|
||||
_synth:
|
||||
on: {}
|
||||
on: { }
|
||||
|
||||
Locatable:
|
||||
location:
|
||||
@@ -41,7 +44,7 @@ Location:
|
||||
start_column: int
|
||||
end_line: int
|
||||
end_column: int
|
||||
_pragma: [qltest_skip, qltest_collapse_hierarchy]
|
||||
_pragma: [ qltest_skip, qltest_collapse_hierarchy ]
|
||||
|
||||
DbLocation:
|
||||
_extends: Location
|
||||
@@ -49,7 +52,7 @@ DbLocation:
|
||||
UnknownLocation:
|
||||
_extends: Location
|
||||
_synth:
|
||||
on: {}
|
||||
on: { }
|
||||
|
||||
Comment:
|
||||
_extends: Locatable
|
||||
@@ -179,7 +182,9 @@ TypeVariableType:
|
||||
_extends: Type
|
||||
|
||||
UnresolvedType:
|
||||
_extends: Type
|
||||
_extends:
|
||||
- Type
|
||||
- UnresolvedElement
|
||||
|
||||
ClassDecl:
|
||||
_extends: NominalTypeDecl
|
||||
@@ -209,7 +214,7 @@ Stmt:
|
||||
|
||||
TypeRepr:
|
||||
_extends: AstNode
|
||||
type: Type? # type can be absent on unresolved entities
|
||||
type: Type
|
||||
|
||||
FunctionType:
|
||||
_extends: AnyFunctionType
|
||||
@@ -299,15 +304,7 @@ EnumCaseDecl:
|
||||
IfConfigDecl:
|
||||
_extends: Decl
|
||||
_children:
|
||||
clauses: IfConfigClause*
|
||||
|
||||
IfConfigClause:
|
||||
_extends: Locatable
|
||||
_children:
|
||||
condition: Expr?
|
||||
elements: AstNode*
|
||||
is_active: predicate
|
||||
_dir: decl
|
||||
active_elements: AstNode*
|
||||
|
||||
ImportDecl:
|
||||
_extends: Decl
|
||||
@@ -581,28 +578,36 @@ TypeExpr:
|
||||
type_repr: TypeRepr?
|
||||
|
||||
UnresolvedDeclRefExpr:
|
||||
_extends: Expr
|
||||
_extends:
|
||||
- Expr
|
||||
- UnresolvedElement
|
||||
name: string?
|
||||
|
||||
UnresolvedDotExpr:
|
||||
_extends: Expr
|
||||
_extends:
|
||||
- Expr
|
||||
- UnresolvedElement
|
||||
_children:
|
||||
base: Expr
|
||||
name: string
|
||||
|
||||
UnresolvedMemberExpr:
|
||||
_extends: Expr
|
||||
_extends:
|
||||
- Expr
|
||||
- UnresolvedElement
|
||||
name: string
|
||||
_pragma: qltest_skip # we should really never extract these
|
||||
|
||||
UnresolvedPatternExpr:
|
||||
_extends: Expr
|
||||
_extends:
|
||||
- Expr
|
||||
- UnresolvedElement
|
||||
_children:
|
||||
sub_pattern: Pattern
|
||||
|
||||
UnresolvedSpecializeExpr:
|
||||
_extends: Expr
|
||||
_pragma: qltest_skip # we should really never extract these
|
||||
_extends:
|
||||
- Expr
|
||||
- UnresolvedElement
|
||||
|
||||
VarargExpansionExpr:
|
||||
_extends: Expr
|
||||
@@ -864,7 +869,9 @@ ParenExpr:
|
||||
_extends: IdentityExpr
|
||||
|
||||
UnresolvedMemberChainResultExpr:
|
||||
_extends: IdentityExpr
|
||||
_extends:
|
||||
- IdentityExpr
|
||||
- UnresolvedElement
|
||||
|
||||
AnyHashableErasureExpr:
|
||||
_extends: ImplicitConversionExpr
|
||||
@@ -960,7 +967,9 @@ UnevaluatedInstanceExpr:
|
||||
_extends: ImplicitConversionExpr
|
||||
|
||||
UnresolvedTypeConversionExpr:
|
||||
_extends: ImplicitConversionExpr
|
||||
_extends:
|
||||
- ImplicitConversionExpr
|
||||
- UnresolvedElement
|
||||
|
||||
BuiltinLiteralExpr:
|
||||
_extends: LiteralExpr
|
||||
|
||||
@@ -29,7 +29,6 @@ class SwiftDispatcher {
|
||||
const swift::Pattern*,
|
||||
const swift::TypeRepr*,
|
||||
const swift::TypeBase*,
|
||||
const swift::IfConfigClause*,
|
||||
FilePath>;
|
||||
|
||||
template <typename E>
|
||||
@@ -323,7 +322,6 @@ class SwiftDispatcher {
|
||||
// as we don't expect `nullptr` here. However `swift::ASTVisitor` and `swift::TypeVisitor` do not
|
||||
// accept const pointers
|
||||
virtual void visit(swift::Decl* decl) = 0;
|
||||
virtual void visit(const swift::IfConfigClause* clause) = 0;
|
||||
virtual void visit(swift::Stmt* stmt) = 0;
|
||||
virtual void visit(const swift::StmtCondition* cond) = 0;
|
||||
virtual void visit(const swift::StmtConditionElement* cond) = 0;
|
||||
|
||||
@@ -49,7 +49,6 @@ MAP_TAG(Argument);
|
||||
#include <swift/AST/ExprNodes.def>
|
||||
|
||||
MAP_TAG(Decl);
|
||||
MAP_TAG(IfConfigClause);
|
||||
#define ABSTRACT_DECL(CLASS, PARENT) MAP_SUBTAG(CLASS##Decl, PARENT)
|
||||
#define DECL(CLASS, PARENT) ABSTRACT_DECL(CLASS, PARENT)
|
||||
#include <swift/AST/DeclNodes.def>
|
||||
|
||||
@@ -380,15 +380,9 @@ void DeclVisitor::fillAbstractStorageDecl(const swift::AbstractStorageDecl& decl
|
||||
|
||||
codeql::IfConfigDecl DeclVisitor::translateIfConfigDecl(const swift::IfConfigDecl& decl) {
|
||||
auto entry = createEntry(decl);
|
||||
entry.clauses = dispatcher_.fetchRepeatedLabels(decl.getClauses());
|
||||
return entry;
|
||||
}
|
||||
|
||||
codeql::IfConfigClause DeclVisitor::translateIfConfigClause(const swift::IfConfigClause& clause) {
|
||||
auto entry = dispatcher_.createEntry(clause);
|
||||
entry.condition = dispatcher_.fetchOptionalLabel(clause.Cond);
|
||||
entry.elements = dispatcher_.fetchRepeatedLabels(clause.Elements);
|
||||
entry.is_active = clause.isActive;
|
||||
if (auto activeClause = decl.getActiveClause()) {
|
||||
entry.active_elements = dispatcher_.fetchRepeatedLabels(activeClause->Elements);
|
||||
}
|
||||
return entry;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,10 +16,6 @@ class DeclVisitor : public AstVisitorBase<DeclVisitor> {
|
||||
using AstVisitorBase<DeclVisitor>::AstVisitorBase;
|
||||
using AstVisitorBase<DeclVisitor>::visit;
|
||||
|
||||
void visit(const swift::IfConfigClause* clause) {
|
||||
dispatcher_.emit(translateIfConfigClause(*clause));
|
||||
}
|
||||
|
||||
std::optional<codeql::ConcreteFuncDecl> translateFuncDecl(const swift::FuncDecl& decl);
|
||||
std::optional<codeql::ConstructorDecl> translateConstructorDecl(
|
||||
const swift::ConstructorDecl& decl);
|
||||
@@ -50,7 +46,6 @@ class DeclVisitor : public AstVisitorBase<DeclVisitor> {
|
||||
codeql::ImportDecl translateImportDecl(const swift::ImportDecl& decl);
|
||||
std::optional<codeql::ModuleDecl> translateModuleDecl(const swift::ModuleDecl& decl);
|
||||
codeql::IfConfigDecl translateIfConfigDecl(const swift::IfConfigDecl& decl);
|
||||
codeql::IfConfigClause translateIfConfigClause(const swift::IfConfigClause& clause);
|
||||
|
||||
private:
|
||||
std::string mangledName(const swift::ValueDecl& decl);
|
||||
|
||||
@@ -22,7 +22,6 @@ class SwiftVisitor : private SwiftDispatcher {
|
||||
|
||||
private:
|
||||
void visit(swift::Decl* decl) override { declVisitor.visit(decl); }
|
||||
void visit(const swift::IfConfigClause* clause) override { declVisitor.visit(clause); }
|
||||
void visit(swift::Stmt* stmt) override { stmtVisitor.visit(stmt); }
|
||||
void visit(const swift::StmtCondition* cond) override {
|
||||
emit(stmtVisitor.translateStmtCondition(*cond));
|
||||
|
||||
@@ -11,7 +11,7 @@ void TypeVisitor::visit(swift::TypeBase* type) {
|
||||
|
||||
codeql::TypeRepr TypeVisitor::translateTypeRepr(const swift::TypeRepr& typeRepr, swift::Type type) {
|
||||
auto entry = dispatcher_.createEntry(typeRepr);
|
||||
entry.type = dispatcher_.fetchOptionalLabel(type);
|
||||
entry.type = dispatcher_.fetchLabel(type);
|
||||
return entry;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import codeql.swift.elements.Locatable
|
||||
import codeql.swift.elements.Location
|
||||
import codeql.swift.elements.UnknownFile
|
||||
import codeql.swift.elements.UnknownLocation
|
||||
import codeql.swift.elements.UnresolvedElement
|
||||
import codeql.swift.elements.decl.AbstractFunctionDecl
|
||||
import codeql.swift.elements.decl.AbstractStorageDecl
|
||||
import codeql.swift.elements.decl.AbstractTypeParamDecl
|
||||
@@ -29,7 +30,6 @@ import codeql.swift.elements.decl.FuncDecl
|
||||
import codeql.swift.elements.decl.GenericContext
|
||||
import codeql.swift.elements.decl.GenericTypeDecl
|
||||
import codeql.swift.elements.decl.GenericTypeParamDecl
|
||||
import codeql.swift.elements.decl.IfConfigClause
|
||||
import codeql.swift.elements.decl.IfConfigDecl
|
||||
import codeql.swift.elements.decl.ImportDecl
|
||||
import codeql.swift.elements.decl.InfixOperatorDecl
|
||||
|
||||
4
swift/ql/lib/codeql/swift/elements/UnresolvedElement.qll
Normal file
4
swift/ql/lib/codeql/swift/elements/UnresolvedElement.qll
Normal file
@@ -0,0 +1,4 @@
|
||||
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
|
||||
private import codeql.swift.generated.UnresolvedElement
|
||||
|
||||
class UnresolvedElement extends UnresolvedElementBase { }
|
||||
@@ -1,4 +0,0 @@
|
||||
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
|
||||
private import codeql.swift.generated.decl.IfConfigClause
|
||||
|
||||
class IfConfigClause extends IfConfigClauseBase { }
|
||||
@@ -1,4 +0,0 @@
|
||||
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
|
||||
private import codeql.swift.generated.Raw
|
||||
|
||||
predicate constructIfConfigClause(Raw::IfConfigClause id) { any() }
|
||||
@@ -120,6 +120,21 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfUnresolvedElement(
|
||||
UnresolvedElement e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bElement, int n |
|
||||
b = 0 and
|
||||
bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and
|
||||
n = bElement and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfElement(e, index - b, partialPredicateCall)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfAnyFunctionType(
|
||||
AnyFunctionType e, int index, string partialPredicateCall
|
||||
) {
|
||||
@@ -332,28 +347,6 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfIfConfigClause(
|
||||
IfConfigClause e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bLocatable, int n, int nCondition, int nElement |
|
||||
b = 0 and
|
||||
bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and
|
||||
n = bLocatable and
|
||||
nCondition = n + 1 and
|
||||
nElement = nCondition + 1 + max(int i | i = -1 or exists(e.getImmediateElement(i)) | i) and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall)
|
||||
or
|
||||
index = n and result = e.getImmediateCondition() and partialPredicateCall = "Condition()"
|
||||
or
|
||||
result = e.getImmediateElement(index - nCondition) and
|
||||
partialPredicateCall = "Element(" + (index - nCondition).toString() + ")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfInOutType(InOutType e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bType, int n |
|
||||
b = 0 and
|
||||
@@ -585,14 +578,18 @@ private module Impl {
|
||||
private Element getImmediateChildOfUnresolvedType(
|
||||
UnresolvedType e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bType, int n |
|
||||
exists(int b, int bType, int bUnresolvedElement, int n |
|
||||
b = 0 and
|
||||
bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and
|
||||
n = bType and
|
||||
bUnresolvedElement =
|
||||
bType + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
|
||||
n = bUnresolvedElement and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfType(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result = getImmediateChildOfUnresolvedElement(e, index - bType, partialPredicateCall)
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -1763,18 +1760,18 @@ private module Impl {
|
||||
private Element getImmediateChildOfIfConfigDecl(
|
||||
IfConfigDecl e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bDecl, int n, int nClause |
|
||||
exists(int b, int bDecl, int n, int nActiveElement |
|
||||
b = 0 and
|
||||
bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and
|
||||
n = bDecl and
|
||||
nClause = n + 1 + max(int i | i = -1 or exists(e.getImmediateClause(i)) | i) and
|
||||
nActiveElement = n + 1 + max(int i | i = -1 or exists(e.getImmediateActiveElement(i)) | i) and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfDecl(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result = e.getImmediateClause(index - n) and
|
||||
partialPredicateCall = "Clause(" + (index - n).toString() + ")"
|
||||
result = e.getImmediateActiveElement(index - n) and
|
||||
partialPredicateCall = "ActiveElement(" + (index - n).toString() + ")"
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -2652,14 +2649,18 @@ private module Impl {
|
||||
private Element getImmediateChildOfUnresolvedDeclRefExpr(
|
||||
UnresolvedDeclRefExpr e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bExpr, int n |
|
||||
exists(int b, int bExpr, int bUnresolvedElement, int n |
|
||||
b = 0 and
|
||||
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
|
||||
n = bExpr and
|
||||
bUnresolvedElement =
|
||||
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
|
||||
n = bUnresolvedElement and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result = getImmediateChildOfUnresolvedElement(e, index - bExpr, partialPredicateCall)
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -2667,16 +2668,20 @@ private module Impl {
|
||||
private Element getImmediateChildOfUnresolvedDotExpr(
|
||||
UnresolvedDotExpr e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bExpr, int n, int nBase |
|
||||
exists(int b, int bExpr, int bUnresolvedElement, int n, int nBase |
|
||||
b = 0 and
|
||||
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
|
||||
n = bExpr and
|
||||
bUnresolvedElement =
|
||||
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
|
||||
n = bUnresolvedElement and
|
||||
nBase = n + 1 and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result = getImmediateChildOfUnresolvedElement(e, index - bExpr, partialPredicateCall)
|
||||
or
|
||||
index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()"
|
||||
)
|
||||
)
|
||||
@@ -2685,14 +2690,18 @@ private module Impl {
|
||||
private Element getImmediateChildOfUnresolvedMemberExpr(
|
||||
UnresolvedMemberExpr e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bExpr, int n |
|
||||
exists(int b, int bExpr, int bUnresolvedElement, int n |
|
||||
b = 0 and
|
||||
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
|
||||
n = bExpr and
|
||||
bUnresolvedElement =
|
||||
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
|
||||
n = bUnresolvedElement and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result = getImmediateChildOfUnresolvedElement(e, index - bExpr, partialPredicateCall)
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -2700,16 +2709,20 @@ private module Impl {
|
||||
private Element getImmediateChildOfUnresolvedPatternExpr(
|
||||
UnresolvedPatternExpr e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bExpr, int n, int nSubPattern |
|
||||
exists(int b, int bExpr, int bUnresolvedElement, int n, int nSubPattern |
|
||||
b = 0 and
|
||||
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
|
||||
n = bExpr and
|
||||
bUnresolvedElement =
|
||||
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
|
||||
n = bUnresolvedElement and
|
||||
nSubPattern = n + 1 and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result = getImmediateChildOfUnresolvedElement(e, index - bExpr, partialPredicateCall)
|
||||
or
|
||||
index = n and result = e.getImmediateSubPattern() and partialPredicateCall = "SubPattern()"
|
||||
)
|
||||
)
|
||||
@@ -2718,14 +2731,18 @@ private module Impl {
|
||||
private Element getImmediateChildOfUnresolvedSpecializeExpr(
|
||||
UnresolvedSpecializeExpr e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bExpr, int n |
|
||||
exists(int b, int bExpr, int bUnresolvedElement, int n |
|
||||
b = 0 and
|
||||
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
|
||||
n = bExpr and
|
||||
bUnresolvedElement =
|
||||
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
|
||||
n = bUnresolvedElement and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result = getImmediateChildOfUnresolvedElement(e, index - bExpr, partialPredicateCall)
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -4126,15 +4143,21 @@ private module Impl {
|
||||
private Element getImmediateChildOfUnresolvedMemberChainResultExpr(
|
||||
UnresolvedMemberChainResultExpr e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bIdentityExpr, int n |
|
||||
exists(int b, int bIdentityExpr, int bUnresolvedElement, int n |
|
||||
b = 0 and
|
||||
bIdentityExpr =
|
||||
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfIdentityExpr(e, i, _)) | i) and
|
||||
n = bIdentityExpr and
|
||||
bUnresolvedElement =
|
||||
bIdentityExpr + 1 +
|
||||
max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
|
||||
n = bUnresolvedElement and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfIdentityExpr(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result =
|
||||
getImmediateChildOfUnresolvedElement(e, index - bIdentityExpr, partialPredicateCall)
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -4142,16 +4165,23 @@ private module Impl {
|
||||
private Element getImmediateChildOfUnresolvedTypeConversionExpr(
|
||||
UnresolvedTypeConversionExpr e, int index, string partialPredicateCall
|
||||
) {
|
||||
exists(int b, int bImplicitConversionExpr, int n |
|
||||
exists(int b, int bImplicitConversionExpr, int bUnresolvedElement, int n |
|
||||
b = 0 and
|
||||
bImplicitConversionExpr =
|
||||
b + 1 +
|
||||
max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and
|
||||
n = bImplicitConversionExpr and
|
||||
bUnresolvedElement =
|
||||
bImplicitConversionExpr + 1 +
|
||||
max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
|
||||
n = bUnresolvedElement and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result =
|
||||
getImmediateChildOfUnresolvedElement(e, index - bImplicitConversionExpr,
|
||||
partialPredicateCall)
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -4796,8 +4826,6 @@ private module Impl {
|
||||
or
|
||||
result = getImmediateChildOfExistentialType(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfIfConfigClause(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfInOutType(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfLValueType(e, index, partialAccessor)
|
||||
|
||||
@@ -49,6 +49,8 @@ module Raw {
|
||||
Type getCanonicalType() { types(this, _, result) }
|
||||
}
|
||||
|
||||
class UnresolvedElement extends @unresolved_element, Element { }
|
||||
|
||||
class AnyFunctionType extends @any_function_type, Type {
|
||||
Type getResult() { any_function_types(this, result) }
|
||||
|
||||
@@ -129,16 +131,6 @@ module Raw {
|
||||
Type getConstraint() { existential_types(this, result) }
|
||||
}
|
||||
|
||||
class IfConfigClause extends @if_config_clause, Locatable {
|
||||
override string toString() { result = "IfConfigClause" }
|
||||
|
||||
Expr getCondition() { if_config_clause_conditions(this, result) }
|
||||
|
||||
AstNode getElement(int index) { if_config_clause_elements(this, index, result) }
|
||||
|
||||
predicate isActive() { if_config_clause_is_active(this) }
|
||||
}
|
||||
|
||||
class InOutType extends @in_out_type, Type {
|
||||
override string toString() { result = "InOutType" }
|
||||
|
||||
@@ -203,7 +195,7 @@ module Raw {
|
||||
override string toString() { result = "TypeVariableType" }
|
||||
}
|
||||
|
||||
class UnresolvedType extends @unresolved_type, Type {
|
||||
class UnresolvedType extends @unresolved_type, Type, UnresolvedElement {
|
||||
override string toString() { result = "UnresolvedType" }
|
||||
}
|
||||
|
||||
@@ -327,7 +319,7 @@ module Raw {
|
||||
class TypeRepr extends @type_repr, AstNode {
|
||||
override string toString() { result = "TypeRepr" }
|
||||
|
||||
Type getType() { type_repr_types(this, result) }
|
||||
Type getType() { type_reprs(this, result) }
|
||||
}
|
||||
|
||||
class UnboundGenericType extends @unbound_generic_type, AnyGenericType {
|
||||
@@ -587,7 +579,7 @@ module Raw {
|
||||
class IfConfigDecl extends @if_config_decl, Decl {
|
||||
override string toString() { result = "IfConfigDecl" }
|
||||
|
||||
IfConfigClause getClause(int index) { if_config_decl_clauses(this, index, result) }
|
||||
AstNode getActiveElement(int index) { if_config_decl_active_elements(this, index, result) }
|
||||
}
|
||||
|
||||
class IfExpr extends @if_expr, Expr {
|
||||
@@ -880,13 +872,13 @@ module Raw {
|
||||
Type getBaseType() { unary_syntax_sugar_types(this, result) }
|
||||
}
|
||||
|
||||
class UnresolvedDeclRefExpr extends @unresolved_decl_ref_expr, Expr {
|
||||
class UnresolvedDeclRefExpr extends @unresolved_decl_ref_expr, Expr, UnresolvedElement {
|
||||
override string toString() { result = "UnresolvedDeclRefExpr" }
|
||||
|
||||
string getName() { unresolved_decl_ref_expr_names(this, result) }
|
||||
}
|
||||
|
||||
class UnresolvedDotExpr extends @unresolved_dot_expr, Expr {
|
||||
class UnresolvedDotExpr extends @unresolved_dot_expr, Expr, UnresolvedElement {
|
||||
override string toString() { result = "UnresolvedDotExpr" }
|
||||
|
||||
Expr getBase() { unresolved_dot_exprs(this, result, _) }
|
||||
@@ -894,19 +886,19 @@ module Raw {
|
||||
string getName() { unresolved_dot_exprs(this, _, result) }
|
||||
}
|
||||
|
||||
class UnresolvedMemberExpr extends @unresolved_member_expr, Expr {
|
||||
class UnresolvedMemberExpr extends @unresolved_member_expr, Expr, UnresolvedElement {
|
||||
override string toString() { result = "UnresolvedMemberExpr" }
|
||||
|
||||
string getName() { unresolved_member_exprs(this, result) }
|
||||
}
|
||||
|
||||
class UnresolvedPatternExpr extends @unresolved_pattern_expr, Expr {
|
||||
class UnresolvedPatternExpr extends @unresolved_pattern_expr, Expr, UnresolvedElement {
|
||||
override string toString() { result = "UnresolvedPatternExpr" }
|
||||
|
||||
Pattern getSubPattern() { unresolved_pattern_exprs(this, result) }
|
||||
}
|
||||
|
||||
class UnresolvedSpecializeExpr extends @unresolved_specialize_expr, Expr {
|
||||
class UnresolvedSpecializeExpr extends @unresolved_specialize_expr, Expr, UnresolvedElement {
|
||||
override string toString() { result = "UnresolvedSpecializeExpr" }
|
||||
}
|
||||
|
||||
@@ -1311,12 +1303,13 @@ module Raw {
|
||||
override string toString() { result = "UnevaluatedInstanceExpr" }
|
||||
}
|
||||
|
||||
class UnresolvedMemberChainResultExpr extends @unresolved_member_chain_result_expr, IdentityExpr {
|
||||
class UnresolvedMemberChainResultExpr extends @unresolved_member_chain_result_expr, IdentityExpr,
|
||||
UnresolvedElement {
|
||||
override string toString() { result = "UnresolvedMemberChainResultExpr" }
|
||||
}
|
||||
|
||||
class UnresolvedTypeConversionExpr extends @unresolved_type_conversion_expr,
|
||||
ImplicitConversionExpr {
|
||||
ImplicitConversionExpr, UnresolvedElement {
|
||||
override string toString() { result = "UnresolvedTypeConversionExpr" }
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ module Synth {
|
||||
TEnumElementDecl(Raw::EnumElementDecl id) { constructEnumElementDecl(id) } or
|
||||
TExtensionDecl(Raw::ExtensionDecl id) { constructExtensionDecl(id) } or
|
||||
TGenericTypeParamDecl(Raw::GenericTypeParamDecl id) { constructGenericTypeParamDecl(id) } or
|
||||
TIfConfigClause(Raw::IfConfigClause id) { constructIfConfigClause(id) } or
|
||||
TIfConfigDecl(Raw::IfConfigDecl id) { constructIfConfigDecl(id) } or
|
||||
TImportDecl(Raw::ImportDecl id) { constructImportDecl(id) } or
|
||||
TInfixOperatorDecl(Raw::InfixOperatorDecl id) { constructInfixOperatorDecl(id) } or
|
||||
@@ -315,10 +314,15 @@ module Synth {
|
||||
|
||||
class TFile = TDbFile or TUnknownFile;
|
||||
|
||||
class TLocatable = TArgument or TAstNode or TComment or TConditionElement or TIfConfigClause;
|
||||
class TLocatable = TArgument or TAstNode or TComment or TConditionElement;
|
||||
|
||||
class TLocation = TDbLocation or TUnknownLocation;
|
||||
|
||||
class TUnresolvedElement =
|
||||
TUnresolvedDeclRefExpr or TUnresolvedDotExpr or TUnresolvedMemberChainResultExpr or
|
||||
TUnresolvedMemberExpr or TUnresolvedPatternExpr or TUnresolvedSpecializeExpr or
|
||||
TUnresolvedType or TUnresolvedTypeConversionExpr;
|
||||
|
||||
class TAbstractFunctionDecl = TConstructorDecl or TDestructorDecl or TFuncDecl;
|
||||
|
||||
class TAbstractStorageDecl = TSubscriptDecl or TVarDecl;
|
||||
@@ -526,9 +530,6 @@ module Synth {
|
||||
result = TGenericTypeParamDecl(e)
|
||||
}
|
||||
|
||||
cached
|
||||
TIfConfigClause convertIfConfigClauseFromRaw(Raw::Element e) { result = TIfConfigClause(e) }
|
||||
|
||||
cached
|
||||
TIfConfigDecl convertIfConfigDeclFromRaw(Raw::Element e) { result = TIfConfigDecl(e) }
|
||||
|
||||
@@ -1420,6 +1421,8 @@ module Synth {
|
||||
result = convertLocationFromRaw(e)
|
||||
or
|
||||
result = convertTypeFromRaw(e)
|
||||
or
|
||||
result = convertUnresolvedElementFromRaw(e)
|
||||
}
|
||||
|
||||
cached
|
||||
@@ -1438,8 +1441,6 @@ module Synth {
|
||||
result = convertCommentFromRaw(e)
|
||||
or
|
||||
result = convertConditionElementFromRaw(e)
|
||||
or
|
||||
result = convertIfConfigClauseFromRaw(e)
|
||||
}
|
||||
|
||||
cached
|
||||
@@ -1449,6 +1450,25 @@ module Synth {
|
||||
result = convertUnknownLocationFromRaw(e)
|
||||
}
|
||||
|
||||
cached
|
||||
TUnresolvedElement convertUnresolvedElementFromRaw(Raw::Element e) {
|
||||
result = convertUnresolvedDeclRefExprFromRaw(e)
|
||||
or
|
||||
result = convertUnresolvedDotExprFromRaw(e)
|
||||
or
|
||||
result = convertUnresolvedMemberChainResultExprFromRaw(e)
|
||||
or
|
||||
result = convertUnresolvedMemberExprFromRaw(e)
|
||||
or
|
||||
result = convertUnresolvedPatternExprFromRaw(e)
|
||||
or
|
||||
result = convertUnresolvedSpecializeExprFromRaw(e)
|
||||
or
|
||||
result = convertUnresolvedTypeFromRaw(e)
|
||||
or
|
||||
result = convertUnresolvedTypeConversionExprFromRaw(e)
|
||||
}
|
||||
|
||||
cached
|
||||
TAbstractFunctionDecl convertAbstractFunctionDeclFromRaw(Raw::Element e) {
|
||||
result = convertConstructorDeclFromRaw(e)
|
||||
@@ -2188,9 +2208,6 @@ module Synth {
|
||||
e = TGenericTypeParamDecl(result)
|
||||
}
|
||||
|
||||
cached
|
||||
Raw::Element convertIfConfigClauseToRaw(TIfConfigClause e) { e = TIfConfigClause(result) }
|
||||
|
||||
cached
|
||||
Raw::Element convertIfConfigDeclToRaw(TIfConfigDecl e) { e = TIfConfigDecl(result) }
|
||||
|
||||
@@ -3080,6 +3097,8 @@ module Synth {
|
||||
result = convertLocationToRaw(e)
|
||||
or
|
||||
result = convertTypeToRaw(e)
|
||||
or
|
||||
result = convertUnresolvedElementToRaw(e)
|
||||
}
|
||||
|
||||
cached
|
||||
@@ -3098,8 +3117,6 @@ module Synth {
|
||||
result = convertCommentToRaw(e)
|
||||
or
|
||||
result = convertConditionElementToRaw(e)
|
||||
or
|
||||
result = convertIfConfigClauseToRaw(e)
|
||||
}
|
||||
|
||||
cached
|
||||
@@ -3109,6 +3126,25 @@ module Synth {
|
||||
result = convertUnknownLocationToRaw(e)
|
||||
}
|
||||
|
||||
cached
|
||||
Raw::Element convertUnresolvedElementToRaw(TUnresolvedElement e) {
|
||||
result = convertUnresolvedDeclRefExprToRaw(e)
|
||||
or
|
||||
result = convertUnresolvedDotExprToRaw(e)
|
||||
or
|
||||
result = convertUnresolvedMemberChainResultExprToRaw(e)
|
||||
or
|
||||
result = convertUnresolvedMemberExprToRaw(e)
|
||||
or
|
||||
result = convertUnresolvedPatternExprToRaw(e)
|
||||
or
|
||||
result = convertUnresolvedSpecializeExprToRaw(e)
|
||||
or
|
||||
result = convertUnresolvedTypeToRaw(e)
|
||||
or
|
||||
result = convertUnresolvedTypeConversionExprToRaw(e)
|
||||
}
|
||||
|
||||
cached
|
||||
Raw::Element convertAbstractFunctionDeclToRaw(TAbstractFunctionDecl e) {
|
||||
result = convertConstructorDeclToRaw(e)
|
||||
|
||||
@@ -14,7 +14,6 @@ import codeql.swift.elements.decl.EnumDeclConstructor
|
||||
import codeql.swift.elements.decl.EnumElementDeclConstructor
|
||||
import codeql.swift.elements.decl.ExtensionDeclConstructor
|
||||
import codeql.swift.elements.decl.GenericTypeParamDeclConstructor
|
||||
import codeql.swift.elements.decl.IfConfigClauseConstructor
|
||||
import codeql.swift.elements.decl.IfConfigDeclConstructor
|
||||
import codeql.swift.elements.decl.ImportDeclConstructor
|
||||
import codeql.swift.elements.decl.InfixOperatorDeclConstructor
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
// generated by codegen/codegen.py
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.Element
|
||||
|
||||
class UnresolvedElementBase extends Synth::TUnresolvedElement, Element { }
|
||||
@@ -1,36 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.AstNode
|
||||
import codeql.swift.elements.expr.Expr
|
||||
import codeql.swift.elements.Locatable
|
||||
|
||||
class IfConfigClauseBase extends Synth::TIfConfigClause, Locatable {
|
||||
override string getAPrimaryQlClass() { result = "IfConfigClause" }
|
||||
|
||||
Expr getImmediateCondition() {
|
||||
result =
|
||||
Synth::convertExprFromRaw(Synth::convertIfConfigClauseToRaw(this)
|
||||
.(Raw::IfConfigClause)
|
||||
.getCondition())
|
||||
}
|
||||
|
||||
final Expr getCondition() { result = getImmediateCondition().resolve() }
|
||||
|
||||
final predicate hasCondition() { exists(getCondition()) }
|
||||
|
||||
AstNode getImmediateElement(int index) {
|
||||
result =
|
||||
Synth::convertAstNodeFromRaw(Synth::convertIfConfigClauseToRaw(this)
|
||||
.(Raw::IfConfigClause)
|
||||
.getElement(index))
|
||||
}
|
||||
|
||||
final AstNode getElement(int index) { result = getImmediateElement(index).resolve() }
|
||||
|
||||
final AstNode getAnElement() { result = getElement(_) }
|
||||
|
||||
final int getNumberOfElements() { result = count(getAnElement()) }
|
||||
|
||||
predicate isActive() { Synth::convertIfConfigClauseToRaw(this).(Raw::IfConfigClause).isActive() }
|
||||
}
|
||||
@@ -1,22 +1,22 @@
|
||||
// generated by codegen/codegen.py
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.AstNode
|
||||
import codeql.swift.elements.decl.Decl
|
||||
import codeql.swift.elements.decl.IfConfigClause
|
||||
|
||||
class IfConfigDeclBase extends Synth::TIfConfigDecl, Decl {
|
||||
override string getAPrimaryQlClass() { result = "IfConfigDecl" }
|
||||
|
||||
IfConfigClause getImmediateClause(int index) {
|
||||
AstNode getImmediateActiveElement(int index) {
|
||||
result =
|
||||
Synth::convertIfConfigClauseFromRaw(Synth::convertIfConfigDeclToRaw(this)
|
||||
Synth::convertAstNodeFromRaw(Synth::convertIfConfigDeclToRaw(this)
|
||||
.(Raw::IfConfigDecl)
|
||||
.getClause(index))
|
||||
.getActiveElement(index))
|
||||
}
|
||||
|
||||
final IfConfigClause getClause(int index) { result = getImmediateClause(index).resolve() }
|
||||
final AstNode getActiveElement(int index) { result = getImmediateActiveElement(index).resolve() }
|
||||
|
||||
final IfConfigClause getAClause() { result = getClause(_) }
|
||||
final AstNode getAnActiveElement() { result = getActiveElement(_) }
|
||||
|
||||
final int getNumberOfClauses() { result = count(getAClause()) }
|
||||
final int getNumberOfActiveElements() { result = count(getAnActiveElement()) }
|
||||
}
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.expr.Expr
|
||||
import codeql.swift.elements.UnresolvedElement
|
||||
|
||||
class UnresolvedDeclRefExprBase extends Synth::TUnresolvedDeclRefExpr, Expr {
|
||||
class UnresolvedDeclRefExprBase extends Synth::TUnresolvedDeclRefExpr, Expr, UnresolvedElement {
|
||||
override string getAPrimaryQlClass() { result = "UnresolvedDeclRefExpr" }
|
||||
|
||||
string getName() {
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.expr.Expr
|
||||
import codeql.swift.elements.UnresolvedElement
|
||||
|
||||
class UnresolvedDotExprBase extends Synth::TUnresolvedDotExpr, Expr {
|
||||
class UnresolvedDotExprBase extends Synth::TUnresolvedDotExpr, Expr, UnresolvedElement {
|
||||
override string getAPrimaryQlClass() { result = "UnresolvedDotExpr" }
|
||||
|
||||
Expr getImmediateBase() {
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.expr.IdentityExpr
|
||||
import codeql.swift.elements.UnresolvedElement
|
||||
|
||||
class UnresolvedMemberChainResultExprBase extends Synth::TUnresolvedMemberChainResultExpr,
|
||||
IdentityExpr {
|
||||
IdentityExpr, UnresolvedElement {
|
||||
override string getAPrimaryQlClass() { result = "UnresolvedMemberChainResultExpr" }
|
||||
}
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.expr.Expr
|
||||
import codeql.swift.elements.UnresolvedElement
|
||||
|
||||
class UnresolvedMemberExprBase extends Synth::TUnresolvedMemberExpr, Expr {
|
||||
class UnresolvedMemberExprBase extends Synth::TUnresolvedMemberExpr, Expr, UnresolvedElement {
|
||||
override string getAPrimaryQlClass() { result = "UnresolvedMemberExpr" }
|
||||
|
||||
string getName() {
|
||||
|
||||
@@ -3,8 +3,9 @@ private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.expr.Expr
|
||||
import codeql.swift.elements.pattern.Pattern
|
||||
import codeql.swift.elements.UnresolvedElement
|
||||
|
||||
class UnresolvedPatternExprBase extends Synth::TUnresolvedPatternExpr, Expr {
|
||||
class UnresolvedPatternExprBase extends Synth::TUnresolvedPatternExpr, Expr, UnresolvedElement {
|
||||
override string getAPrimaryQlClass() { result = "UnresolvedPatternExpr" }
|
||||
|
||||
Pattern getImmediateSubPattern() {
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.expr.Expr
|
||||
import codeql.swift.elements.UnresolvedElement
|
||||
|
||||
class UnresolvedSpecializeExprBase extends Synth::TUnresolvedSpecializeExpr, Expr {
|
||||
class UnresolvedSpecializeExprBase extends Synth::TUnresolvedSpecializeExpr, Expr, UnresolvedElement {
|
||||
override string getAPrimaryQlClass() { result = "UnresolvedSpecializeExpr" }
|
||||
}
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.expr.ImplicitConversionExpr
|
||||
import codeql.swift.elements.UnresolvedElement
|
||||
|
||||
class UnresolvedTypeConversionExprBase extends Synth::TUnresolvedTypeConversionExpr,
|
||||
ImplicitConversionExpr {
|
||||
ImplicitConversionExpr, UnresolvedElement {
|
||||
override string getAPrimaryQlClass() { result = "UnresolvedTypeConversionExpr" }
|
||||
}
|
||||
|
||||
@@ -12,6 +12,4 @@ class TypeReprBase extends Synth::TTypeRepr, AstNode {
|
||||
}
|
||||
|
||||
final Type getType() { result = getImmediateType().resolve() }
|
||||
|
||||
final predicate hasType() { exists(getType()) }
|
||||
}
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.type.Type
|
||||
import codeql.swift.elements.UnresolvedElement
|
||||
|
||||
class UnresolvedTypeBase extends Synth::TUnresolvedType, Type {
|
||||
class UnresolvedTypeBase extends Synth::TUnresolvedType, Type, UnresolvedElement {
|
||||
override string getAPrimaryQlClass() { result = "UnresolvedType" }
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ sourceLocationPrefix(
|
||||
| @locatable
|
||||
| @location
|
||||
| @type
|
||||
| @unresolved_element
|
||||
;
|
||||
|
||||
#keyset[id]
|
||||
@@ -27,6 +28,17 @@ element_is_unknown(
|
||||
int id: @element ref
|
||||
);
|
||||
|
||||
@unresolved_element =
|
||||
@unresolved_decl_ref_expr
|
||||
| @unresolved_dot_expr
|
||||
| @unresolved_member_chain_result_expr
|
||||
| @unresolved_member_expr
|
||||
| @unresolved_pattern_expr
|
||||
| @unresolved_specialize_expr
|
||||
| @unresolved_type
|
||||
| @unresolved_type_conversion_expr
|
||||
;
|
||||
|
||||
@file =
|
||||
@db_file
|
||||
| @unknown_file
|
||||
@@ -51,7 +63,6 @@ unknown_files(
|
||||
| @ast_node
|
||||
| @comment
|
||||
| @condition_element
|
||||
| @if_config_clause
|
||||
;
|
||||
|
||||
#keyset[id]
|
||||
@@ -520,12 +531,7 @@ expr_types( //dir=expr
|
||||
;
|
||||
|
||||
type_reprs( //dir=type
|
||||
unique int id: @type_repr
|
||||
);
|
||||
|
||||
#keyset[id]
|
||||
type_repr_types( //dir=type
|
||||
int id: @type_repr ref,
|
||||
unique int id: @type_repr,
|
||||
int type_: @type ref
|
||||
);
|
||||
|
||||
@@ -680,32 +686,10 @@ if_config_decls( //dir=decl
|
||||
);
|
||||
|
||||
#keyset[id, index]
|
||||
if_config_decl_clauses( //dir=decl
|
||||
if_config_decl_active_elements( //dir=decl
|
||||
int id: @if_config_decl ref,
|
||||
int index: int ref,
|
||||
int clause: @if_config_clause ref
|
||||
);
|
||||
|
||||
if_config_clauses( //dir=decl
|
||||
unique int id: @if_config_clause
|
||||
);
|
||||
|
||||
#keyset[id]
|
||||
if_config_clause_conditions( //dir=decl
|
||||
int id: @if_config_clause ref,
|
||||
int condition: @expr ref
|
||||
);
|
||||
|
||||
#keyset[id, index]
|
||||
if_config_clause_elements( //dir=decl
|
||||
int id: @if_config_clause ref,
|
||||
int index: int ref,
|
||||
int element: @ast_node ref
|
||||
);
|
||||
|
||||
#keyset[id]
|
||||
if_config_clause_is_active( //dir=decl
|
||||
int id: @if_config_clause ref
|
||||
int active_element: @ast_node ref
|
||||
);
|
||||
|
||||
import_decls( //dir=decl
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
| if_config.swift:1:1:1:1 | IfConfigClause | isActive: | no |
|
||||
| if_config.swift:4:1:4:1 | IfConfigClause | isActive: | no |
|
||||
| if_config.swift:7:1:7:1 | IfConfigClause | isActive: | yes |
|
||||
| if_config_active.swift:3:1:3:1 | IfConfigClause | isActive: | yes |
|
||||
| if_config_active.swift:6:1:6:1 | IfConfigClause | isActive: | no |
|
||||
| if_config_active.swift:9:1:9:1 | IfConfigClause | isActive: | no |
|
||||
@@ -1,10 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from IfConfigClause x, string isActive
|
||||
where
|
||||
toBeTested(x) and
|
||||
not x.isUnknown() and
|
||||
if x.isActive() then isActive = "yes" else isActive = "no"
|
||||
select x, "isActive:", isActive
|
||||
@@ -1,4 +0,0 @@
|
||||
| if_config.swift:1:1:1:1 | IfConfigClause | if_config.swift:1:5:1:5 | FOO (unresolved) |
|
||||
| if_config.swift:4:1:4:1 | IfConfigClause | if_config.swift:4:9:4:19 | call to ... |
|
||||
| if_config_active.swift:3:1:3:1 | IfConfigClause | if_config_active.swift:3:5:3:5 | FOO (unresolved) |
|
||||
| if_config_active.swift:6:1:6:1 | IfConfigClause | if_config_active.swift:6:9:6:17 | call to ... |
|
||||
@@ -1,7 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from IfConfigClause x
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, x.getCondition()
|
||||
@@ -1,18 +0,0 @@
|
||||
| if_config.swift:1:1:1:1 | IfConfigClause | 0 | if_config.swift:2:1:2:16 | { ... } |
|
||||
| if_config.swift:1:1:1:1 | IfConfigClause | 1 | if_config.swift:2:5:2:5 | foo |
|
||||
| if_config.swift:1:1:1:1 | IfConfigClause | 2 | if_config.swift:3:1:3:12 | { ... } |
|
||||
| if_config.swift:4:1:4:1 | IfConfigClause | 0 | if_config.swift:5:1:5:16 | { ... } |
|
||||
| if_config.swift:4:1:4:1 | IfConfigClause | 1 | if_config.swift:5:5:5:5 | bar |
|
||||
| if_config.swift:4:1:4:1 | IfConfigClause | 2 | if_config.swift:6:1:6:12 | { ... } |
|
||||
| if_config.swift:7:1:7:1 | IfConfigClause | 0 | if_config.swift:8:1:8:16 | { ... } |
|
||||
| if_config.swift:7:1:7:1 | IfConfigClause | 1 | if_config.swift:8:5:8:5 | baz |
|
||||
| if_config.swift:7:1:7:1 | IfConfigClause | 2 | if_config.swift:9:1:9:12 | { ... } |
|
||||
| if_config_active.swift:3:1:3:1 | IfConfigClause | 0 | if_config_active.swift:4:1:4:16 | { ... } |
|
||||
| if_config_active.swift:3:1:3:1 | IfConfigClause | 1 | if_config_active.swift:4:5:4:5 | foo |
|
||||
| if_config_active.swift:3:1:3:1 | IfConfigClause | 2 | if_config_active.swift:5:1:5:12 | { ... } |
|
||||
| if_config_active.swift:6:1:6:1 | IfConfigClause | 0 | if_config_active.swift:7:1:7:16 | { ... } |
|
||||
| if_config_active.swift:6:1:6:1 | IfConfigClause | 1 | if_config_active.swift:7:5:7:5 | bar |
|
||||
| if_config_active.swift:6:1:6:1 | IfConfigClause | 2 | if_config_active.swift:8:1:8:12 | { ... } |
|
||||
| if_config_active.swift:9:1:9:1 | IfConfigClause | 0 | if_config_active.swift:10:1:10:16 | { ... } |
|
||||
| if_config_active.swift:9:1:9:1 | IfConfigClause | 1 | if_config_active.swift:10:5:10:5 | baz |
|
||||
| if_config_active.swift:9:1:9:1 | IfConfigClause | 2 | if_config_active.swift:11:1:11:12 | { ... } |
|
||||
@@ -1,7 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from IfConfigClause x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getElement(index)
|
||||
@@ -1,10 +0,0 @@
|
||||
#if FOO
|
||||
var foo: Int = 1
|
||||
print("foo")
|
||||
#elseif os(watchOS)
|
||||
var bar: Int = 2
|
||||
print("bar")
|
||||
#else
|
||||
var baz: Int = 3
|
||||
print("baz")
|
||||
#endif
|
||||
@@ -1,12 +0,0 @@
|
||||
//codeql-extractor-options: -D FOO
|
||||
|
||||
#if FOO
|
||||
var foo: Int = 1
|
||||
print("foo")
|
||||
#elseif os(macOS)
|
||||
var bar: Int = 2
|
||||
print("bar")
|
||||
#else
|
||||
var baz: Int = 3
|
||||
print("baz")
|
||||
#endif
|
||||
@@ -0,0 +1,3 @@
|
||||
| if_config.swift:1:1:10:1 | #if ... | 0 | if_config.swift:8:1:8:16 | { ... } |
|
||||
| if_config.swift:1:1:10:1 | #if ... | 1 | if_config.swift:8:5:8:5 | baz |
|
||||
| if_config.swift:1:1:10:1 | #if ... | 2 | if_config.swift:9:1:9:12 | { ... } |
|
||||
@@ -4,4 +4,4 @@ import TestUtils
|
||||
|
||||
from IfConfigDecl x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getClause(index)
|
||||
select x, index, x.getActiveElement(index)
|
||||
@@ -3,4 +3,3 @@
|
||||
| import.swift:3:12:3:32 | import ... | getModule: | file://:0:0:0:0 | import | isExported: | yes |
|
||||
| import.swift:4:1:4:19 | import ... | getModule: | file://:0:0:0:0 | import | isExported: | no |
|
||||
| import.swift:5:1:5:23 | import ... | getModule: | file://:0:0:0:0 | import | isExported: | no |
|
||||
| import.swift:7:1:7:8 | import ... | getModule: | file://:0:0:0:0 | import | isExported: | no |
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
| unresolved_decl_ref.swift:4:5:4:5 | FOO (unresolved) |
|
||||
| unresolved_decl_ref.swift:4:9:4:9 | && (unresolved) |
|
||||
| unresolved_decl_ref.swift:4:12:4:12 | os (unresolved) |
|
||||
| unresolved_decl_ref.swift:4:15:4:15 | Windows (unresolved) |
|
||||
| unresolved_decl_ref.swift:5:1:5:1 | print (unresolved) |
|
||||
| unresolved_decl_ref.swift:6:9:6:9 | BAR (unresolved) |
|
||||
| unresolved_decl_ref.swift:6:13:6:13 | \|\| (unresolved) |
|
||||
| unresolved_decl_ref.swift:6:16:6:16 | arch (unresolved) |
|
||||
| unresolved_decl_ref.swift:6:21:6:21 | i386 (unresolved) |
|
||||
| unresolved_decl_ref.swift:9:1:9:1 | print (unresolved) |
|
||||
@@ -1,7 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from UnresolvedDeclRefExpr x
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x
|
||||
@@ -1,10 +0,0 @@
|
||||
| unresolved_decl_ref.swift:4:5:4:5 | FOO (unresolved) | FOO |
|
||||
| unresolved_decl_ref.swift:4:9:4:9 | && (unresolved) | && |
|
||||
| unresolved_decl_ref.swift:4:12:4:12 | os (unresolved) | os |
|
||||
| unresolved_decl_ref.swift:4:15:4:15 | Windows (unresolved) | Windows |
|
||||
| unresolved_decl_ref.swift:5:1:5:1 | print (unresolved) | print |
|
||||
| unresolved_decl_ref.swift:6:9:6:9 | BAR (unresolved) | BAR |
|
||||
| unresolved_decl_ref.swift:6:13:6:13 | \|\| (unresolved) | \|\| |
|
||||
| unresolved_decl_ref.swift:6:16:6:16 | arch (unresolved) | arch |
|
||||
| unresolved_decl_ref.swift:6:21:6:21 | i386 (unresolved) | i386 |
|
||||
| unresolved_decl_ref.swift:9:1:9:1 | print (unresolved) | print |
|
||||
@@ -1,7 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from UnresolvedDeclRefExpr x
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, x.getName()
|
||||
@@ -1,7 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from UnresolvedDeclRefExpr x
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, x.getType()
|
||||
@@ -1,10 +0,0 @@
|
||||
//codeql-extractor-options: -D BAR
|
||||
|
||||
// conditions and inactive branches in conditional compilation blocks are not resolved
|
||||
#if FOO && os(Windows)
|
||||
print(1)
|
||||
#elseif BAR || arch(i386)
|
||||
print(2)
|
||||
#else
|
||||
print(3)
|
||||
#endif
|
||||
@@ -1,4 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
|
||||
After a swift source file is added in this directory and codegen/codegen.py is run again, test queries
|
||||
will appear and this file will be deleted
|
||||
@@ -1,4 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
|
||||
After a swift source file is added in this directory and codegen/codegen.py is run again, test queries
|
||||
will appear and this file will be deleted
|
||||
@@ -1 +0,0 @@
|
||||
| unresolved_pattern_expr.swift:2:19:2:19 | UnresolvedPatternExpr | getSubPattern: | unresolved_pattern_expr.swift:2:19:2:19 | x |
|
||||
@@ -1,10 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from UnresolvedPatternExpr x, Pattern getSubPattern
|
||||
where
|
||||
toBeTested(x) and
|
||||
not x.isUnknown() and
|
||||
getSubPattern = x.getSubPattern()
|
||||
select x, "getSubPattern:", getSubPattern
|
||||
@@ -1,7 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from UnresolvedPatternExpr x
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, x.getType()
|
||||
@@ -1,5 +0,0 @@
|
||||
#if FOO
|
||||
if case let .some(x) = 42 {
|
||||
print(x)
|
||||
}
|
||||
#endif
|
||||
@@ -1,4 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
|
||||
After a swift source file is added in this directory and codegen/codegen.py is run again, test queries
|
||||
will appear and this file will be deleted
|
||||
@@ -1,4 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
|
||||
After a swift source file is added in this directory and codegen/codegen.py is run again, test queries
|
||||
will appear and this file will be deleted
|
||||
Reference in New Issue
Block a user