Skip to content

Commit e9957aa

Browse files
committed
Swift: make result a child in ThenStmt
1 parent 0243d9f commit e9957aa

File tree

5 files changed

+82
-5
lines changed

5 files changed

+82
-5
lines changed

Diff for: swift/ql/.generated.list

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: swift/ql/lib/codeql/swift/generated/ParentChild.qll

+4-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: swift/ql/test/library-tests/ast/PrintAst.expected

+69-2
Original file line numberDiff line numberDiff line change
@@ -3476,8 +3476,75 @@ cfg.swift:
34763476
# 577| getBase(): [CallExpr] call to getMyProtocolImpl()
34773477
# 577| getFunction(): [DeclRefExpr] getMyProtocolImpl()
34783478
# 577| getMethodRef(): [DeclRefExpr] source()
3479-
# 580| [Comment] // ---
3480-
# 580|
3479+
# 580| [NamedFunction] singleStmtExpr(_:)
3480+
# 580| InterfaceType = (Int) -> ()
3481+
# 580| getParam(0): [ParamDecl] x
3482+
# 580| Type = Int
3483+
# 580| getBody(): [BraceStmt] { ... }
3484+
# 581| getVariable(0): [ConcreteVarDecl] a
3485+
# 581| Type = Int
3486+
# 585| getVariable(1): [ConcreteVarDecl] b
3487+
# 585| Type = Int
3488+
# 581| getElement(0): [PatternBindingDecl] var ... = ...
3489+
# 581| getInit(0): [SingleValueStmtExpr] SingleValueStmtExpr
3490+
# 581| getStmt(): [SwitchStmt] switch x { ... }
3491+
# 581| getExpr(): [DeclRefExpr] x
3492+
# 582| getCase(0): [CaseStmt] case ...
3493+
# 582| getLabel(0): [CaseLabelItem] =~ ...
3494+
# 582| getPattern(): [ExprPattern] =~ ...
3495+
# 582| getSubExpr(): [BinaryExpr] ... .~=(_:_:) ...
3496+
# 582| getFunction(): [MethodLookupExpr] .~=(_:_:)
3497+
# 582| getBase(): [TypeExpr] Range<Int>.Type
3498+
# 582| getTypeRepr(): [TypeRepr] Range<Int>
3499+
# 582| getMethodRef(): [DeclRefExpr] ~=(_:_:)
3500+
# 582| getArgument(0): [Argument] : ... ...<(_:_:) ...
3501+
# 582| getExpr(): [BinaryExpr] ... ...<(_:_:) ...
3502+
# 582| getFunction(): [MethodLookupExpr] ...<(_:_:)
3503+
# 582| getBase(): [TypeExpr] Int.Type
3504+
# 582| getTypeRepr(): [TypeRepr] Int
3505+
# 582| getMethodRef(): [DeclRefExpr] ..<(_:_:)
3506+
# 582| getArgument(0): [Argument] : 0
3507+
# 582| getExpr(): [IntegerLiteralExpr] 0
3508+
# 582| getArgument(1): [Argument] : 5
3509+
# 582| getExpr(): [IntegerLiteralExpr] 5
3510+
# 582| getArgument(1): [Argument] : $match
3511+
# 582| getExpr(): [DeclRefExpr] $match
3512+
# 582| getBody(): [BraceStmt] { ... }
3513+
# 582| getElement(0): [ThenStmt] ThenStmt
3514+
# 582| getResult(): [IntegerLiteralExpr] 1
3515+
# 583| getCase(1): [CaseStmt] case ...
3516+
# 583| getLabel(0): [CaseLabelItem] _
3517+
# 583| getPattern(): [AnyPattern] _
3518+
# 583| getBody(): [BraceStmt] { ... }
3519+
# 583| getElement(0): [ThenStmt] ThenStmt
3520+
# 583| getResult(): [IntegerLiteralExpr] 2
3521+
# 581| getPattern(0): [NamedPattern] a
3522+
# 585| getElement(1): [PatternBindingDecl] var ... = ...
3523+
# 585| getInit(0): [SingleValueStmtExpr] SingleValueStmtExpr
3524+
# 585| getStmt(): [IfStmt] if ... then { ... } else { ... }
3525+
# 585| getCondition(): [StmtCondition] StmtCondition
3526+
# 585| getElement(0): [ConditionElement] ... .<(_:_:) ...
3527+
# 585| getBoolean(): [BinaryExpr] ... .<(_:_:) ...
3528+
# 585| getFunction(): [MethodLookupExpr] .<(_:_:)
3529+
# 585| getBase(): [TypeExpr] Int.Type
3530+
# 585| getTypeRepr(): [TypeRepr] Int
3531+
# 585| getMethodRef(): [DeclRefExpr] <(_:_:)
3532+
# 585| getArgument(0): [Argument] : x
3533+
# 585| getExpr(): [DeclRefExpr] x
3534+
# 585| getArgument(1): [Argument] : 42
3535+
# 585| getExpr(): [IntegerLiteralExpr] 42
3536+
# 585| getBoolean().getFullyConverted(): [ParenExpr] (...)
3537+
# 585| getThen(): [BraceStmt] { ... }
3538+
# 585| getElement(0): [ThenStmt] ThenStmt
3539+
# 585| getResult(): [IntegerLiteralExpr] 1
3540+
# 585| getElse(): [BraceStmt] { ... }
3541+
# 585| getElement(0): [ThenStmt] ThenStmt
3542+
# 585| getResult(): [IntegerLiteralExpr] 2
3543+
# 585| getPattern(0): [NamedPattern] b
3544+
# 582| [ConcreteVarDecl] $match
3545+
# 582| Type = Int
3546+
# 587| [Comment] // ---
3547+
# 587|
34813548
declarations.swift:
34823549
# 1| [StructDecl] Foo
34833550
# 2| getMember(0): [PatternBindingDecl] var ... = ...

Diff for: swift/ql/test/library-tests/ast/cfg.swift

+7
Original file line numberDiff line numberDiff line change
@@ -577,4 +577,11 @@ func testOpenExistentialExpr(x: MyProtocol, y: MyProcotolImpl) {
577577
sink(arg: getMyProtocolImpl().source())
578578
}
579579

580+
func singleStmtExpr(_ x: Int) {
581+
let a = switch x {
582+
case 0..<5: 1
583+
default: 2
584+
}
585+
let b = if (x < 42) { 1 } else { 2 }
586+
}
580587
// ---

Diff for: swift/schema.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1006,7 +1006,7 @@ class ThenStmt(Stmt):
10061006
```
10071007
the literal expressions `1`, `2` and `3` are wrapped in `ThenStmt`.
10081008
"""
1009-
result: Expr
1009+
result: Expr | child
10101010

10111011
class DoCatchStmt(LabeledStmt):
10121012
body: Stmt | child

0 commit comments

Comments
 (0)