mirror of
https://github.com/github/codeql.git
synced 2026-04-24 00:05:14 +02:00
Swift: move BindingPattern to the hidden AST
This commit is contained in:
@@ -222,7 +222,7 @@ predicate catchMatchingPattern(DoCatchStmt s, CaseStmt c, Pattern pattern) {
|
||||
|
||||
/** Holds if `sub` is a subpattern of `p`. */
|
||||
private predicate isSubPattern(Pattern p, Pattern sub) {
|
||||
sub = p.(BindingPattern).getSubPattern().getFullyUnresolved()
|
||||
sub = p.(BindingPattern).getResolveStep()
|
||||
or
|
||||
sub = p.(EnumElementPattern).getSubPattern().getFullyUnresolved()
|
||||
or
|
||||
@@ -260,8 +260,6 @@ private string getPatternValue(Pattern p) {
|
||||
private predicate isIrrefutableMatch(Pattern p) {
|
||||
(p instanceof NamedPattern or p instanceof AnyPattern)
|
||||
or
|
||||
isIrrefutableMatch(p.(BindingPattern).getSubPattern().getFullyUnresolved())
|
||||
or
|
||||
isIrrefutableMatch(p.(TypedPattern).getSubPattern().getFullyUnresolved())
|
||||
or
|
||||
// A pattern hidden underneath a conversion is also an irrefutable pattern.
|
||||
|
||||
@@ -897,21 +897,12 @@ module Patterns {
|
||||
}
|
||||
}
|
||||
|
||||
private class BindingTree extends AstPostOrderTree {
|
||||
private class BindingTree extends AstStandardPostOrderTree {
|
||||
override BindingPattern ast;
|
||||
|
||||
final override predicate propagatesAbnormal(ControlFlowElement n) {
|
||||
n.asAstNode() = ast.getSubPattern().getFullyUnresolved()
|
||||
}
|
||||
|
||||
final override predicate first(ControlFlowElement n) {
|
||||
astFirst(ast.getSubPattern().getFullyUnresolved(), n)
|
||||
}
|
||||
|
||||
override predicate succ(ControlFlowElement pred, ControlFlowElement succ, Completion c) {
|
||||
astLast(ast.getSubPattern().getFullyUnresolved(), pred, c) and
|
||||
c.(MatchingCompletion).isMatch() and
|
||||
succ.asAstNode() = ast
|
||||
final override ControlFlowElement getChildElement(int i) {
|
||||
i = 0 and
|
||||
result.asAstNode() = ast.getResolveStep()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
private import codeql.swift.generated.pattern.BindingPattern
|
||||
|
||||
class BindingPattern extends Generated::BindingPattern {
|
||||
final override Pattern getResolveStep() { result = getImmediateSubPattern() }
|
||||
|
||||
override string toString() { result = "let ..." }
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
| statements.swift:3:8:3:13 | ... .==(_:_:) ... | statements.swift:3:8:3:13 | ... .==(_:_:) ... |
|
||||
| statements.swift:10:17:10:24 | ... .<(_:_:) ... | statements.swift:10:18:10:22 | ... .<(_:_:) ... |
|
||||
| statements.swift:39:9:39:14 | ... .!=(_:_:) ... | statements.swift:39:9:39:14 | ... .!=(_:_:) ... |
|
||||
| statements.swift:65:4:65:19 | let ... = ... | statements.swift:65:9:65:15 | let ... |
|
||||
| statements.swift:65:4:65:19 | let ... = ... | statements.swift:65:19:65:19 | x |
|
||||
| statements.swift:65:4:65:19 | let ...? = ... | statements.swift:65:13:65:15 | let ...? |
|
||||
| statements.swift:65:4:65:19 | let ...? = ... | statements.swift:65:19:65:19 | x |
|
||||
| statements.swift:67:4:67:20 | .some(...) = ... | statements.swift:67:9:67:16 | .some(...) |
|
||||
| statements.swift:67:4:67:20 | .some(...) = ... | statements.swift:67:20:67:20 | x |
|
||||
|
||||
@@ -180,8 +180,8 @@ cfg.swift:
|
||||
# 35| getPattern(): [IsPattern] ... is ...
|
||||
# 35| getSubPattern(): [EnumElementPattern] .error3(...)
|
||||
# 35| getSubPattern(): [TuplePattern] (...)
|
||||
# 35| getElement(0): [BindingPattern] let ...
|
||||
# 35| getSubPattern(): [NamedPattern] withParam
|
||||
# 35| getElement(0): [NamedPattern] withParam
|
||||
# 35| getElement(0).getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 37| getCatch(2): [CaseStmt] case ...
|
||||
# 37| getBody(): [BraceStmt] { ... }
|
||||
# 38| getElement(0): [CallExpr] call to print(_:separator:terminator:)
|
||||
@@ -239,9 +239,9 @@ cfg.swift:
|
||||
# 40| getExpr(): [DefaultArgumentExpr] default separator
|
||||
# 40| getArgument(2): [Argument] terminator: default terminator
|
||||
# 40| getExpr(): [DefaultArgumentExpr] default terminator
|
||||
# 39| getLabel(0): [CaseLabelItem] let ...
|
||||
# 39| getPattern(): [BindingPattern] let ...
|
||||
# 39| getSubPattern(): [NamedPattern] error
|
||||
# 39| getLabel(0): [CaseLabelItem] error
|
||||
# 39| getPattern(): [NamedPattern] error
|
||||
# 39| getPattern().getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 42| getElement(1): [ReturnStmt] return ...
|
||||
# 42| getResult(): [IntegerLiteralExpr] 0
|
||||
# 35| [ConcreteVarDecl] withParam
|
||||
@@ -803,9 +803,9 @@ cfg.swift:
|
||||
# 156| getCondition(): [StmtCondition] StmtCondition
|
||||
# 156| getElement(0): [ConditionElement] .some(...) = ...
|
||||
# 156| getPattern(): [EnumElementPattern] .some(...)
|
||||
# 156| getSubPattern(): [BindingPattern] let ...
|
||||
# 156| getSubPattern(): [NamedPattern] x
|
||||
# 156| getSubPattern(): [NamedPattern] x
|
||||
# 156| getSubPattern().getFullyUnresolved(): [ParenPattern] (...)
|
||||
# 156| getImmediateSubPattern(): [BindingPattern] let ...
|
||||
# 156| getInitializer(): [DeclRefExpr] xOptional
|
||||
# 156| getThen(): [BraceStmt] { ... }
|
||||
# 157| getElement(0): [ReturnStmt] return ...
|
||||
@@ -5375,11 +5375,11 @@ patterns.swift:
|
||||
# 12| getCase(0): [CaseStmt] case ...
|
||||
# 12| getBody(): [BraceStmt] { ... }
|
||||
# 12| getElement(0): [StringLiteralExpr] binding
|
||||
# 12| getLabel(0): [CaseLabelItem] let ...
|
||||
# 12| getPattern(): [BindingPattern] let ...
|
||||
# 12| getSubPattern(): [TuplePattern] (...)
|
||||
# 12| getElement(0): [NamedPattern] xx
|
||||
# 12| getElement(1): [NamedPattern] yy
|
||||
# 12| getLabel(0): [CaseLabelItem] (...)
|
||||
# 12| getPattern(): [TuplePattern] (...)
|
||||
# 12| getElement(0): [NamedPattern] xx
|
||||
# 12| getElement(1): [NamedPattern] yy
|
||||
# 12| getPattern().getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 15| getElement(3): [SwitchStmt] switch 3 { ... }
|
||||
# 15| getExpr(): [IntegerLiteralExpr] 3
|
||||
# 16| getCase(0): [CaseStmt] case ...
|
||||
@@ -5424,12 +5424,12 @@ patterns.swift:
|
||||
# 28| getCase(1): [CaseStmt] case ...
|
||||
# 28| getBody(): [BraceStmt] { ... }
|
||||
# 28| getElement(0): [DeclRefExpr] i
|
||||
# 28| getLabel(0): [CaseLabelItem] let ...
|
||||
# 28| getPattern(): [BindingPattern] let ...
|
||||
# 28| getSubPattern(): [EnumElementPattern] .baz(...)
|
||||
# 28| getSubPattern(): [TuplePattern] (...)
|
||||
# 28| getElement(0): [NamedPattern] i
|
||||
# 28| getElement(1): [NamedPattern] s
|
||||
# 28| getLabel(0): [CaseLabelItem] .baz(...)
|
||||
# 28| getPattern(): [EnumElementPattern] .baz(...)
|
||||
# 28| getSubPattern(): [TuplePattern] (...)
|
||||
# 28| getElement(0): [NamedPattern] i
|
||||
# 28| getElement(1): [NamedPattern] s
|
||||
# 28| getPattern().getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 31| getElement(8): [PatternBindingDecl] var ... = ...
|
||||
# 31| getInit(0): [NilLiteralExpr] nil
|
||||
# 31| getPattern(0): [TypedPattern] ... as ...
|
||||
@@ -5442,10 +5442,10 @@ patterns.swift:
|
||||
# 34| getCase(0): [CaseStmt] case ...
|
||||
# 34| getBody(): [BraceStmt] { ... }
|
||||
# 34| getElement(0): [DeclRefExpr] n
|
||||
# 34| getLabel(0): [CaseLabelItem] let ...
|
||||
# 34| getPattern(): [BindingPattern] let ...
|
||||
# 34| getSubPattern(): [OptionalSomePattern] let ...?
|
||||
# 34| getSubPattern(): [NamedPattern] n
|
||||
# 34| getLabel(0): [CaseLabelItem] let ...?
|
||||
# 34| getPattern(): [OptionalSomePattern] let ...?
|
||||
# 34| getSubPattern(): [NamedPattern] n
|
||||
# 34| getPattern().getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 35| getCase(1): [CaseStmt] case ...
|
||||
# 35| getBody(): [BraceStmt] { ... }
|
||||
# 35| getElement(0): [StringLiteralExpr] none
|
||||
@@ -5470,11 +5470,11 @@ patterns.swift:
|
||||
# 42| getCase(1): [CaseStmt] case ...
|
||||
# 42| getBody(): [BraceStmt] { ... }
|
||||
# 42| getElement(0): [StringLiteralExpr] as pattern
|
||||
# 42| getLabel(0): [CaseLabelItem] let ...
|
||||
# 42| getPattern(): [BindingPattern] let ...
|
||||
# 42| getSubPattern(): [IsPattern] ... is ...
|
||||
# 42| getCastTypeRepr(): [TypeRepr] String
|
||||
# 42| getSubPattern(): [NamedPattern] x
|
||||
# 42| getLabel(0): [CaseLabelItem] ... is ...
|
||||
# 42| getPattern(): [IsPattern] ... is ...
|
||||
# 42| getCastTypeRepr(): [TypeRepr] String
|
||||
# 42| getSubPattern(): [NamedPattern] x
|
||||
# 42| getPattern().getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 43| getCase(2): [CaseStmt] case ...
|
||||
# 43| getBody(): [BraceStmt] { ... }
|
||||
# 43| getElement(0): [StringLiteralExpr] other
|
||||
@@ -5621,9 +5621,9 @@ statements.swift:
|
||||
# 22| getExpr(): [DefaultArgumentExpr] default separator
|
||||
# 22| getArgument(2): [Argument] terminator: default terminator
|
||||
# 22| getExpr(): [DefaultArgumentExpr] default terminator
|
||||
# 21| getLabel(0): [CaseLabelItem] let ...
|
||||
# 21| getPattern(): [BindingPattern] let ...
|
||||
# 21| getSubPattern(): [NamedPattern] error
|
||||
# 21| getLabel(0): [CaseLabelItem] error
|
||||
# 21| getPattern(): [NamedPattern] error
|
||||
# 21| getPattern().getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 25| getElement(7): [DoCatchStmt] do { ... } catch { ... }
|
||||
# 25| getBody(): [BraceStmt] { ... }
|
||||
# 26| getElement(0): [TryExpr] try ...
|
||||
@@ -5660,9 +5660,9 @@ statements.swift:
|
||||
# 30| getExpr(): [DefaultArgumentExpr] default separator
|
||||
# 30| getArgument(2): [Argument] terminator: default terminator
|
||||
# 30| getExpr(): [DefaultArgumentExpr] default terminator
|
||||
# 29| getLabel(0): [CaseLabelItem] let ...
|
||||
# 29| getPattern(): [BindingPattern] let ...
|
||||
# 29| getSubPattern(): [NamedPattern] error
|
||||
# 29| getLabel(0): [CaseLabelItem] error
|
||||
# 29| getPattern(): [NamedPattern] error
|
||||
# 29| getPattern().getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 2| [ConcreteVarDecl] i
|
||||
# 2| Type = Int
|
||||
# 21| [ConcreteVarDecl] error
|
||||
@@ -5884,10 +5884,10 @@ statements.swift:
|
||||
# 65| getBody(): [BraceStmt] { ... }
|
||||
# 65| getElement(0): [IfStmt] if ... then { ... }
|
||||
# 65| getCondition(): [StmtCondition] StmtCondition
|
||||
# 65| getElement(0): [ConditionElement] let ... = ...
|
||||
# 65| getPattern(): [BindingPattern] let ...
|
||||
# 65| getSubPattern(): [OptionalSomePattern] let ...?
|
||||
# 65| getSubPattern(): [NamedPattern] xx
|
||||
# 65| getElement(0): [ConditionElement] let ...? = ...
|
||||
# 65| getPattern(): [OptionalSomePattern] let ...?
|
||||
# 65| getSubPattern(): [NamedPattern] xx
|
||||
# 65| getPattern().getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 65| getInitializer(): [DeclRefExpr] x
|
||||
# 65| getThen(): [BraceStmt] { ... }
|
||||
# 67| [TopLevelCodeDecl] { ... }
|
||||
|
||||
@@ -334,7 +334,10 @@ cfg.swift:
|
||||
#-----| -> default separator
|
||||
|
||||
# 39| case ...
|
||||
#-----| -> let ...
|
||||
#-----| -> error
|
||||
|
||||
# 39| error
|
||||
#-----| -> error
|
||||
|
||||
# 39| error
|
||||
#-----| match -> let ...
|
||||
@@ -342,9 +345,6 @@ cfg.swift:
|
||||
# 39| let ...
|
||||
#-----| match -> print(_:separator:terminator:)
|
||||
|
||||
# 39| let ...
|
||||
#-----| -> error
|
||||
|
||||
# 40| print(_:separator:terminator:)
|
||||
|
||||
# 40| call to print(_:separator:terminator:)
|
||||
|
||||
Reference in New Issue
Block a user