closures.swift: # 1| [NamedFunction] hello() # 1| InterfaceType = () -> String # 1| getBody(): [BraceStmt] { ... } # 2| getElement(0): [ReturnStmt] return ... # 2| getResult(): [StringLiteralExpr] Hello world! # 5| [NamedFunction] captureList() # 5| InterfaceType = () -> () # 5| getBody(): [BraceStmt] { ... } # 6| getVariable(0): [ConcreteVarDecl] y # 6| Type = Int # 6| getElement(0): [PatternBindingDecl] var ... = ... # 6| getInit(0): [IntegerLiteralExpr] 123 # 6| getPattern(0): [NamedPattern] y # 7| getElement(1): [CallExpr] call to ... # 7| getFunction(): [CaptureListExpr] { ... } # 7| getBindingDecl(0): [PatternBindingDecl] var ... = ... # 7| getInit(0): [CallExpr] call to hello() # 7| getFunction(): [DeclRefExpr] hello() # 7| getPattern(0): [NamedPattern] x # 7| getVariable(0): [ConcreteVarDecl] x # 7| Type = String # 7| getClosureBody(): [ExplicitClosureExpr] { ... } # 7| getBody(): [BraceStmt] { ... } # 8| getElement(0): [CallExpr] call to print(_:separator:terminator:) # 8| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 8| getArgument(0): [Argument] : [...] # 8| getExpr(): [VarargExpansionExpr] [...] # 8| getSubExpr(): [ArrayExpr] [...] # 8| getElement(0): [DeclRefExpr] x # 8| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 8| getArgument(1): [Argument] separator: default separator # 8| getExpr(): [DefaultArgumentExpr] default separator # 8| getArgument(2): [Argument] terminator: default terminator # 8| getExpr(): [DefaultArgumentExpr] default terminator # 9| getElement(1): [CallExpr] call to print(_:separator:terminator:) # 9| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 9| getArgument(0): [Argument] : [...] # 9| getExpr(): [VarargExpansionExpr] [...] # 9| getSubExpr(): [ArrayExpr] [...] # 9| getElement(0): [DeclRefExpr] y # 9| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 9| getArgument(1): [Argument] separator: default separator # 9| getExpr(): [DefaultArgumentExpr] default separator # 9| getArgument(2): [Argument] terminator: default terminator # 9| getExpr(): [DefaultArgumentExpr] default terminator # 8| getCapture(0): [CapturedDecl] x # 9| getCapture(1): [CapturedDecl] y # 12| [TopLevelCodeDecl] { ... } # 12| getBody(): [BraceStmt] { ... } # 12| getElement(0): [PatternBindingDecl] var ... = ... # 12| getInit(0): [NilLiteralExpr] nil # 12| getPattern(0): [TypedPattern] ... as ... # 12| getSubPattern(): [NamedPattern] escape # 12| getTypeRepr(): [TypeRepr] (() -> ())? # 12| [ConcreteVarDecl] escape # 12| Type = (() -> ())? # 14| [NamedFunction] setEscape() # 14| InterfaceType = () -> () # 14| getBody(): [BraceStmt] { ... } # 15| getVariable(0): [ConcreteVarDecl] x # 15| Type = Int # 15| getElement(0): [PatternBindingDecl] var ... = ... # 15| getInit(0): [IntegerLiteralExpr] 0 # 15| getPattern(0): [NamedPattern] x # 16| getElement(1): [AssignExpr] ... = ... # 16| getDest(): [DeclRefExpr] escape # 16| getSource(): [ExplicitClosureExpr] { ... } # 16| getBody(): [BraceStmt] { ... } # 17| getElement(0): [BinaryExpr] ... .+=(_:_:) ... # 17| getFunction(): [MethodLookupExpr] .+=(_:_:) # 17| getBase(): [TypeExpr] Int.Type # 17| getTypeRepr(): [TypeRepr] Int # 17| getMethodRef(): [DeclRefExpr] +=(_:_:) # 17| getArgument(0): [Argument] : x # 17| getExpr(): [DeclRefExpr] x # 17| getExpr().getFullyConverted(): [InOutExpr] &... # 17| getArgument(1): [Argument] : 1 # 17| getExpr(): [IntegerLiteralExpr] 1 # 18| getElement(1): [CallExpr] call to print(_:separator:terminator:) # 18| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 18| getArgument(0): [Argument] : [...] # 18| getExpr(): [VarargExpansionExpr] [...] # 18| getSubExpr(): [ArrayExpr] [...] # 18| getElement(0): [DeclRefExpr] x # 18| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 18| getSubExpr(): [LoadExpr] (Int) ... # 18| getArgument(1): [Argument] separator: default separator # 18| getExpr(): [DefaultArgumentExpr] default separator # 18| getArgument(2): [Argument] terminator: default terminator # 18| getExpr(): [DefaultArgumentExpr] default terminator # 17| getCapture(0): [CapturedDecl] x # 16| getSource().getFullyConverted(): [InjectIntoOptionalExpr] ((() -> ())?) ... # 16| getCapture(0): [CapturedDecl] escape # 22| [NamedFunction] callEscape() # 22| InterfaceType = () -> () # 22| getBody(): [BraceStmt] { ... } # 23| getElement(0): [CallExpr] call to setEscape() # 23| getFunction(): [DeclRefExpr] setEscape() # 24| getElement(1): [OptionalEvaluationExpr] OptionalEvaluationExpr # 24| getSubExpr(): [CallExpr] call to ... # 24| getFunction(): [BindOptionalExpr] ...? # 24| getSubExpr(): [DeclRefExpr] escape # 24| getFunction().getFullyConverted(): [LoadExpr] (() -> ()) ... # 24| getSubExpr().getFullyConverted(): [InjectIntoOptionalExpr] (()?) ... # 24| getCapture(0): [CapturedDecl] escape # 27| [NamedFunction] logical() # 27| InterfaceType = () -> Bool # 27| getBody(): [BraceStmt] { ... } # 28| getVariable(0): [ConcreteVarDecl] f # 28| Type = ((Int) -> Int)? # 29| getVariable(1): [ConcreteVarDecl] x # 29| Type = Int? # 28| getElement(0): [PatternBindingDecl] var ... = ... # 28| getInit(0): [ExplicitClosureExpr] { ... } # 28| getParam(0): [ParamDecl] x # 28| Type = Int # 28| getBody(): [BraceStmt] { ... } # 28| getElement(0): [ReturnStmt] return ... # 28| getResult(): [BinaryExpr] ... .+(_:_:) ... # 28| getFunction(): [MethodLookupExpr] .+(_:_:) # 28| getBase(): [TypeExpr] Int.Type # 28| getTypeRepr(): [TypeRepr] Int # 28| getMethodRef(): [DeclRefExpr] +(_:_:) # 28| getArgument(0): [Argument] : x # 28| getExpr(): [DeclRefExpr] x # 28| getArgument(1): [Argument] : 1 # 28| getExpr(): [IntegerLiteralExpr] 1 # 28| getInit(0).getFullyConverted(): [InjectIntoOptionalExpr] (((Int) -> Int)?) ... # 28| getPattern(0): [TypedPattern] ... as ... # 28| getSubPattern(): [NamedPattern] f # 28| getTypeRepr(): [TypeRepr] ((Int) -> Int)? # 29| getElement(1): [PatternBindingDecl] var ... = ... # 29| getInit(0): [IntegerLiteralExpr] 42 # 29| getInit(0).getFullyConverted(): [InjectIntoOptionalExpr] (Int?) ... # 29| getPattern(0): [TypedPattern] ... as ... # 29| getSubPattern(): [NamedPattern] x # 29| getTypeRepr(): [TypeRepr] Int? # 30| getElement(2): [ReturnStmt] return ... # 30| getResult(): [BinaryExpr] ... .&&(_:_:) ... # 31| getFunction(): [MethodLookupExpr] .&&(_:_:) # 31| getBase(): [TypeExpr] Bool.Type # 31| getTypeRepr(): [TypeRepr] Bool # 31| getMethodRef(): [DeclRefExpr] &&(_:_:) # 30| getArgument(0): [Argument] : ... .!=(_:_:) ... # 30| getExpr(): [BinaryExpr] ... .!=(_:_:) ... # 30| getFunction(): [MethodLookupExpr] .!=(_:_:) # 30| getBase(): [TypeExpr] Optional<(Int) -> Int>.Type # 30| getTypeRepr(): [TypeRepr] Optional<(Int) -> Int> # 30| getMethodRef(): [DeclRefExpr] !=(_:_:) # 30| getArgument(0): [Argument] : f # 30| getExpr(): [DeclRefExpr] f # 30| getArgument(1): [Argument] : nil # 30| getExpr(): [NilLiteralExpr] nil # 31| getArgument(1): [Argument] : { ... } # 31| getExpr(): [AutoClosureExpr] { ... } # 31| getBody(): [BraceStmt] { ... } # 31| getElement(0): [ReturnStmt] return ... # 31| getResult(): [BinaryExpr] ... .&&(_:_:) ... # 32| getFunction(): [MethodLookupExpr] .&&(_:_:) # 32| getBase(): [TypeExpr] Bool.Type # 32| getTypeRepr(): [TypeRepr] Bool # 32| getMethodRef(): [DeclRefExpr] &&(_:_:) # 31| getArgument(0): [Argument] : ... .!=(_:_:) ... # 31| getExpr(): [BinaryExpr] ... .!=(_:_:) ... # 31| getFunction(): [MethodLookupExpr] .!=(_:_:) # 31| getBase(): [TypeExpr] Int?.Type # 31| getTypeRepr(): [TypeRepr] Int? # 31| getMethodRef(): [DeclRefExpr] !=(_:_:) # 31| getArgument(0): [Argument] : x # 31| getExpr(): [DeclRefExpr] x # 31| getArgument(1): [Argument] : nil # 31| getExpr(): [NilLiteralExpr] nil # 32| getArgument(1): [Argument] : { ... } # 32| getExpr(): [AutoClosureExpr] { ... } # 32| getBody(): [BraceStmt] { ... } # 32| getElement(0): [ReturnStmt] return ... # 32| getResult(): [BinaryExpr] ... .==(_:_:) ... # 32| getFunction(): [MethodLookupExpr] .==(_:_:) # 32| getBase(): [TypeExpr] Int.Type # 32| getTypeRepr(): [TypeRepr] Int # 32| getMethodRef(): [DeclRefExpr] ==(_:_:) # 32| getArgument(0): [Argument] : call to ... # 32| getExpr(): [CallExpr] call to ... # 32| getFunction(): [ForceValueExpr] ...! # 32| getSubExpr(): [DeclRefExpr] f # 32| getArgument(0): [Argument] : ...! # 32| getExpr(): [ForceValueExpr] ...! # 32| getSubExpr(): [DeclRefExpr] x # 32| getArgument(1): [Argument] : 43 # 32| getExpr(): [IntegerLiteralExpr] 43 # 32| getCapture(0): [CapturedDecl] f # 32| getCapture(1): [CapturedDecl] x # 31| getResult().getFullyConverted(): [ParenExpr] (...) # 31| getCapture(0): [CapturedDecl] x # 32| getCapture(1): [CapturedDecl] f # 35| [NamedFunction] asyncTest() # 35| InterfaceType = () -> () # 35| getBody(): [BraceStmt] { ... } # 36| getElement(0): [NamedFunction] withCallback(_:) # 36| InterfaceType = (@escaping (Int) async -> Int) -> () # 36| getParam(0): [ParamDecl] callback # 36| Type = (Int) async -> Int # 36| getBody(): [BraceStmt] { ... } # 38| getElement(0): [NamedFunction] wrapper(_:) # 38| InterfaceType = @Sendable (Int) async -> Int # 38| getParam(0): [ParamDecl] x # 38| Type = Int # 38| getBody(): [BraceStmt] { ... } # 39| getElement(0): [ReturnStmt] return ... # 39| getResult(): [CallExpr] call to ... # 39| getFunction(): [DeclRefExpr] callback # 39| getArgument(0): [Argument] : ... .+(_:_:) ... # 39| getExpr(): [BinaryExpr] ... .+(_:_:) ... # 39| getFunction(): [MethodLookupExpr] .+(_:_:) # 39| getBase(): [TypeExpr] Int.Type # 39| getTypeRepr(): [TypeRepr] Int # 39| getMethodRef(): [DeclRefExpr] +(_:_:) # 39| getArgument(0): [Argument] : x # 39| getExpr(): [DeclRefExpr] x # 39| getArgument(1): [Argument] : 1 # 39| getExpr(): [IntegerLiteralExpr] 1 # 39| getResult().getFullyConverted(): [AwaitExpr] await ... # 39| getCapture(0): [CapturedDecl] callback # 41| getElement(1): [CallExpr] call to Task.init(name:priority:operation:) # 41| getFunction(): [MethodLookupExpr] Task.init(name:priority:operation:) # 41| getBase(): [TypeExpr] Task<(), Never>.Type # 41| getTypeRepr(): [TypeRepr] Task<(), Never> # 41| getMethodRef(): [DeclRefExpr] Task.init(name:priority:operation:) # 41| getArgument(0): [Argument] name: default name # 41| getExpr(): [DefaultArgumentExpr] default name # 41| getArgument(1): [Argument] priority: default priority # 41| getExpr(): [DefaultArgumentExpr] default priority # 41| getArgument(2): [Argument] operation: { ... } # 41| getExpr(): [ExplicitClosureExpr] { ... } # 41| getBody(): [BraceStmt] { ... } # 42| getElement(0): [ReturnStmt] return ... # 42| getResult(): [CallExpr] call to print(_:separator:terminator:) # 42| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 42| getArgument(0): [Argument] : [...] # 42| getExpr(): [VarargExpansionExpr] [...] # 42| getSubExpr(): [ArrayExpr] [...] # 42| getElement(0): [StringLiteralExpr] asyncTest(): # 42| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 42| getElement(1): [CallExpr] call to wrapper(_:) # 42| getFunction(): [DeclRefExpr] wrapper(_:) # 42| getArgument(0): [Argument] : 40 # 42| getExpr(): [IntegerLiteralExpr] 40 # 42| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 42| getSubExpr(): [AwaitExpr] await ... # 42| getArgument(1): [Argument] separator: default separator # 42| getExpr(): [DefaultArgumentExpr] default separator # 42| getArgument(2): [Argument] terminator: default terminator # 42| getExpr(): [DefaultArgumentExpr] default terminator # 42| getCapture(0): [CapturedDecl] wrapper(_:) # 41| getExpr().getFullyConverted(): [FunctionConversionExpr] (@isolated(any) () async -> ()) ... # 45| getElement(1): [CallExpr] call to withCallback(_:) # 45| getFunction(): [DeclRefExpr] withCallback(_:) # 45| getArgument(0): [Argument] : { ... } # 45| getExpr(): [ExplicitClosureExpr] { ... } # 45| getParam(0): [ParamDecl] x # 45| Type = Int # 45| getBody(): [BraceStmt] { ... } # 46| getElement(0): [ReturnStmt] return ... # 46| getResult(): [BinaryExpr] ... .+(_:_:) ... # 46| getFunction(): [MethodLookupExpr] .+(_:_:) # 46| getBase(): [TypeExpr] Int.Type # 46| getTypeRepr(): [TypeRepr] Int # 46| getMethodRef(): [DeclRefExpr] +(_:_:) # 46| getArgument(0): [Argument] : x # 46| getExpr(): [DeclRefExpr] x # 46| getArgument(1): [Argument] : 1 # 46| getExpr(): [IntegerLiteralExpr] 1 # 41| [NilLiteralExpr] nil # 41| [NilLiteralExpr] nil # 50| [NamedFunction] foo() # 50| InterfaceType = () -> Int # 50| getBody(): [BraceStmt] { ... } # 51| getVariable(0): [ConcreteVarDecl] x # 51| Type = Int # 52| getVariable(1): [ConcreteVarDecl] f # 52| Type = (Int) -> () # 54| getVariable(2): [ConcreteVarDecl] r # 54| Type = () -> Int # 51| getElement(0): [PatternBindingDecl] var ... = ... # 51| getInit(0): [IntegerLiteralExpr] 1 # 51| getPattern(0): [NamedPattern] x # 52| getElement(1): [PatternBindingDecl] var ... = ... # 52| getInit(0): [ExplicitClosureExpr] { ... } # 52| getParam(0): [ParamDecl] y # 52| Type = Int # 52| getBody(): [BraceStmt] { ... } # 52| getElement(0): [ReturnStmt] return ... # 52| getResult(): [BinaryExpr] ... .+=(_:_:) ... # 52| getFunction(): [MethodLookupExpr] .+=(_:_:) # 52| getBase(): [TypeExpr] Int.Type # 52| getTypeRepr(): [TypeRepr] Int # 52| getMethodRef(): [DeclRefExpr] +=(_:_:) # 52| getArgument(0): [Argument] : x # 52| getExpr(): [DeclRefExpr] x # 52| getExpr().getFullyConverted(): [InOutExpr] &... # 52| getArgument(1): [Argument] : y # 52| getExpr(): [DeclRefExpr] y # 52| getCapture(0): [CapturedDecl] x # 52| getPattern(0): [NamedPattern] f # 53| getElement(2): [BinaryExpr] ... .+=(_:_:) ... # 53| getFunction(): [MethodLookupExpr] .+=(_:_:) # 53| getBase(): [TypeExpr] Int.Type # 53| getTypeRepr(): [TypeRepr] Int # 53| getMethodRef(): [DeclRefExpr] +=(_:_:) # 53| getArgument(0): [Argument] : x # 53| getExpr(): [DeclRefExpr] x # 53| getExpr().getFullyConverted(): [InOutExpr] &... # 53| getArgument(1): [Argument] : 40 # 53| getExpr(): [IntegerLiteralExpr] 40 # 54| getElement(3): [PatternBindingDecl] var ... = ... # 54| getInit(0): [ExplicitClosureExpr] { ... } # 54| getBody(): [BraceStmt] { ... } # 54| getElement(0): [ReturnStmt] return ... # 54| getResult(): [DeclRefExpr] x # 54| getResult().getFullyConverted(): [LoadExpr] (Int) ... # 54| getCapture(0): [CapturedDecl] x # 54| getPattern(0): [NamedPattern] r # 55| getElement(4): [CallExpr] call to ... # 55| getFunction(): [DeclRefExpr] f # 55| getArgument(0): [Argument] : 1 # 55| getExpr(): [IntegerLiteralExpr] 1 # 56| getElement(5): [ReturnStmt] return ... # 56| getResult(): [CallExpr] call to ... # 56| getFunction(): [DeclRefExpr] r # 51| [Comment] // x is a non-escaping capture of f and r # 51| # 56| [Comment] // 42 # 56| # 59| [NamedFunction] bar() # 59| InterfaceType = () -> () -> Int # 59| getBody(): [BraceStmt] { ... } # 60| getVariable(0): [ConcreteVarDecl] x # 60| Type = Int # 61| getVariable(1): [ConcreteVarDecl] f # 61| Type = (Int) -> () # 63| getVariable(2): [ConcreteVarDecl] r # 63| Type = () -> Int # 60| getElement(0): [PatternBindingDecl] var ... = ... # 60| getInit(0): [IntegerLiteralExpr] 1 # 60| getPattern(0): [NamedPattern] x # 61| getElement(1): [PatternBindingDecl] var ... = ... # 61| getInit(0): [ExplicitClosureExpr] { ... } # 61| getParam(0): [ParamDecl] y # 61| Type = Int # 61| getBody(): [BraceStmt] { ... } # 61| getElement(0): [ReturnStmt] return ... # 61| getResult(): [BinaryExpr] ... .+=(_:_:) ... # 61| getFunction(): [MethodLookupExpr] .+=(_:_:) # 61| getBase(): [TypeExpr] Int.Type # 61| getTypeRepr(): [TypeRepr] Int # 61| getMethodRef(): [DeclRefExpr] +=(_:_:) # 61| getArgument(0): [Argument] : x # 61| getExpr(): [DeclRefExpr] x # 61| getExpr().getFullyConverted(): [InOutExpr] &... # 61| getArgument(1): [Argument] : y # 61| getExpr(): [DeclRefExpr] y # 61| getCapture(0): [CapturedDecl] x # 61| getPattern(0): [NamedPattern] f # 62| getElement(2): [BinaryExpr] ... .+=(_:_:) ... # 62| getFunction(): [MethodLookupExpr] .+=(_:_:) # 62| getBase(): [TypeExpr] Int.Type # 62| getTypeRepr(): [TypeRepr] Int # 62| getMethodRef(): [DeclRefExpr] +=(_:_:) # 62| getArgument(0): [Argument] : x # 62| getExpr(): [DeclRefExpr] x # 62| getExpr().getFullyConverted(): [InOutExpr] &... # 62| getArgument(1): [Argument] : 40 # 62| getExpr(): [IntegerLiteralExpr] 40 # 63| getElement(3): [PatternBindingDecl] var ... = ... # 63| getInit(0): [ExplicitClosureExpr] { ... } # 63| getBody(): [BraceStmt] { ... } # 63| getElement(0): [ReturnStmt] return ... # 63| getResult(): [DeclRefExpr] x # 63| getResult().getFullyConverted(): [LoadExpr] (Int) ... # 63| getCapture(0): [CapturedDecl] x # 63| getPattern(0): [NamedPattern] r # 64| getElement(4): [CallExpr] call to ... # 64| getFunction(): [DeclRefExpr] f # 64| getArgument(0): [Argument] : 1 # 64| getExpr(): [IntegerLiteralExpr] 1 # 65| getElement(5): [ReturnStmt] return ... # 65| getResult(): [DeclRefExpr] r # 60| [Comment] // x is a non-escaping capture of f, escaping capture of r # 60| # 65| [Comment] // constantly 42 # 65| # 68| [TopLevelCodeDecl] { ... } # 68| getBody(): [BraceStmt] { ... } # 68| getElement(0): [PatternBindingDecl] var ... = ... # 68| getInit(0): [NilLiteralExpr] nil # 68| getPattern(0): [TypedPattern] ... as ... # 68| getSubPattern(): [NamedPattern] g # 68| getTypeRepr(): [TypeRepr] ((Int) -> Void)? # 68| [ConcreteVarDecl] g # 68| Type = ((Int) -> Void)? # 69| [NamedFunction] baz() # 69| InterfaceType = () -> () -> Int # 69| getBody(): [BraceStmt] { ... } # 70| getVariable(0): [ConcreteVarDecl] x # 70| Type = Int # 73| getVariable(1): [ConcreteVarDecl] r # 73| Type = () -> Int # 70| getElement(0): [PatternBindingDecl] var ... = ... # 70| getInit(0): [IntegerLiteralExpr] 1 # 70| getPattern(0): [NamedPattern] x # 71| getElement(1): [AssignExpr] ... = ... # 71| getDest(): [DeclRefExpr] g # 71| getSource(): [ExplicitClosureExpr] { ... } # 71| getParam(0): [ParamDecl] y # 71| Type = Int # 71| getBody(): [BraceStmt] { ... } # 71| getElement(0): [ReturnStmt] return ... # 71| getResult(): [BinaryExpr] ... .+=(_:_:) ... # 71| getFunction(): [MethodLookupExpr] .+=(_:_:) # 71| getBase(): [TypeExpr] Int.Type # 71| getTypeRepr(): [TypeRepr] Int # 71| getMethodRef(): [DeclRefExpr] +=(_:_:) # 71| getArgument(0): [Argument] : x # 71| getExpr(): [DeclRefExpr] x # 71| getExpr().getFullyConverted(): [InOutExpr] &... # 71| getArgument(1): [Argument] : y # 71| getExpr(): [DeclRefExpr] y # 71| getCapture(0): [CapturedDecl] x # 71| getSource().getFullyConverted(): [InjectIntoOptionalExpr] (((Int) -> Void)?) ... # 72| getElement(2): [BinaryExpr] ... .+=(_:_:) ... # 72| getFunction(): [MethodLookupExpr] .+=(_:_:) # 72| getBase(): [TypeExpr] Int.Type # 72| getTypeRepr(): [TypeRepr] Int # 72| getMethodRef(): [DeclRefExpr] +=(_:_:) # 72| getArgument(0): [Argument] : x # 72| getExpr(): [DeclRefExpr] x # 72| getExpr().getFullyConverted(): [InOutExpr] &... # 72| getArgument(1): [Argument] : 40 # 72| getExpr(): [IntegerLiteralExpr] 40 # 73| getElement(3): [PatternBindingDecl] var ... = ... # 73| getInit(0): [ExplicitClosureExpr] { ... } # 73| getBody(): [BraceStmt] { ... } # 73| getElement(0): [ReturnStmt] return ... # 73| getResult(): [DeclRefExpr] x # 73| getResult().getFullyConverted(): [LoadExpr] (Int) ... # 73| getCapture(0): [CapturedDecl] x # 73| getPattern(0): [NamedPattern] r # 74| getElement(4): [CallExpr] call to ... # 74| getFunction(): [ForceValueExpr] ...! # 74| getSubExpr(): [DeclRefExpr] g # 74| getSubExpr().getFullyConverted(): [LoadExpr] (((Int) -> Void)?) ... # 74| getArgument(0): [Argument] : 1 # 74| getExpr(): [IntegerLiteralExpr] 1 # 75| getElement(5): [ReturnStmt] return ... # 75| getResult(): [DeclRefExpr] r # 71| getCapture(0): [CapturedDecl] g # 70| [Comment] // x is an escaping capture of g and r # 70| # 71| [Comment] // closure escapes! # 71| # 78| [NamedFunction] quux() # 78| InterfaceType = () -> Int # 78| getBody(): [BraceStmt] { ... } # 79| getVariable(0): [ConcreteVarDecl] y # 79| Type = Int # 103| getVariable(1): [ConcreteVarDecl] a # 103| Type = () -> Void # 79| getElement(0): [PatternBindingDecl] var ... = ... # 79| getInit(0): [IntegerLiteralExpr] 0 # 79| getPattern(0): [NamedPattern] y # 81| getElement(1): [NamedFunction] f() # 81| InterfaceType = () -> () -> Void # 81| getBody(): [BraceStmt] { ... } # 82| getVariable(0): [ConcreteVarDecl] x # 82| Type = Int # 82| getElement(0): [PatternBindingDecl] var ... = ... # 82| getInit(0): [IntegerLiteralExpr] 5 # 82| getPattern(0): [NamedPattern] x # 84| getElement(1): [NamedFunction] a() # 84| InterfaceType = () -> () # 84| getBody(): [BraceStmt] { ... } # 85| getElement(0): [AssignExpr] ... = ... # 85| getDest(): [DeclRefExpr] y # 85| getSource(): [BinaryExpr] ... .+(_:_:) ... # 85| getFunction(): [MethodLookupExpr] .+(_:_:) # 85| getBase(): [TypeExpr] Int.Type # 85| getTypeRepr(): [TypeRepr] Int # 85| getMethodRef(): [DeclRefExpr] +(_:_:) # 85| getArgument(0): [Argument] : ... .*(_:_:) ... # 85| getExpr(): [BinaryExpr] ... .*(_:_:) ... # 85| getFunction(): [MethodLookupExpr] .*(_:_:) # 85| getBase(): [TypeExpr] Int.Type # 85| getTypeRepr(): [TypeRepr] Int # 85| getMethodRef(): [DeclRefExpr] *(_:_:) # 85| getArgument(0): [Argument] : 10 # 85| getExpr(): [IntegerLiteralExpr] 10 # 85| getArgument(1): [Argument] : y # 85| getExpr(): [DeclRefExpr] y # 85| getExpr().getFullyConverted(): [LoadExpr] (Int) ... # 85| getArgument(1): [Argument] : x # 85| getExpr(): [DeclRefExpr] x # 85| getExpr().getFullyConverted(): [LoadExpr] (Int) ... # 86| getElement(1): [BinaryExpr] ... .-=(_:_:) ... # 86| getFunction(): [MethodLookupExpr] .-=(_:_:) # 86| getBase(): [TypeExpr] Int.Type # 86| getTypeRepr(): [TypeRepr] Int # 86| getMethodRef(): [DeclRefExpr] -=(_:_:) # 86| getArgument(0): [Argument] : x # 86| getExpr(): [DeclRefExpr] x # 86| getExpr().getFullyConverted(): [InOutExpr] &... # 86| getArgument(1): [Argument] : 1 # 86| getExpr(): [IntegerLiteralExpr] 1 # 87| getElement(2): [IfStmt] if ... then { ... } # 87| getCondition(): [StmtCondition] StmtCondition # 87| getElement(0): [ConditionElement] ... .>(_:_:) ... # 87| getBoolean(): [BinaryExpr] ... .>(_:_:) ... # 87| getFunction(): [MethodLookupExpr] .>(_:_:) # 87| getBase(): [TypeExpr] Int.Type # 87| getTypeRepr(): [TypeRepr] Int # 87| getMethodRef(): [DeclRefExpr] >(_:_:) # 87| getArgument(0): [Argument] : x # 87| getExpr(): [DeclRefExpr] x # 87| getExpr().getFullyConverted(): [LoadExpr] (Int) ... # 87| getArgument(1): [Argument] : 0 # 87| getExpr(): [IntegerLiteralExpr] 0 # 87| getThen(): [BraceStmt] { ... } # 88| getElement(0): [CallExpr] call to b() # 88| getFunction(): [DeclRefExpr] b() # 85| getCapture(0): [CapturedDecl] y # 85| getCapture(1): [CapturedDecl] x # 88| getCapture(2): [CapturedDecl] b() # 92| getElement(2): [NamedFunction] b() # 92| InterfaceType = () -> () # 92| getBody(): [BraceStmt] { ... } # 93| getElement(0): [AssignExpr] ... = ... # 93| getDest(): [DeclRefExpr] y # 93| getSource(): [BinaryExpr] ... .+(_:_:) ... # 93| getFunction(): [MethodLookupExpr] .+(_:_:) # 93| getBase(): [TypeExpr] Int.Type # 93| getTypeRepr(): [TypeRepr] Int # 93| getMethodRef(): [DeclRefExpr] +(_:_:) # 93| getArgument(0): [Argument] : ... .*(_:_:) ... # 93| getExpr(): [BinaryExpr] ... .*(_:_:) ... # 93| getFunction(): [MethodLookupExpr] .*(_:_:) # 93| getBase(): [TypeExpr] Int.Type # 93| getTypeRepr(): [TypeRepr] Int # 93| getMethodRef(): [DeclRefExpr] *(_:_:) # 93| getArgument(0): [Argument] : 10 # 93| getExpr(): [IntegerLiteralExpr] 10 # 93| getArgument(1): [Argument] : y # 93| getExpr(): [DeclRefExpr] y # 93| getExpr().getFullyConverted(): [LoadExpr] (Int) ... # 93| getArgument(1): [Argument] : ... .*(_:_:) ... # 93| getExpr(): [BinaryExpr] ... .*(_:_:) ... # 93| getFunction(): [MethodLookupExpr] .*(_:_:) # 93| getBase(): [TypeExpr] Int.Type # 93| getTypeRepr(): [TypeRepr] Int # 93| getMethodRef(): [DeclRefExpr] *(_:_:) # 93| getArgument(0): [Argument] : 2 # 93| getExpr(): [IntegerLiteralExpr] 2 # 93| getArgument(1): [Argument] : x # 93| getExpr(): [DeclRefExpr] x # 93| getExpr().getFullyConverted(): [LoadExpr] (Int) ... # 94| getElement(1): [BinaryExpr] ... .-=(_:_:) ... # 94| getFunction(): [MethodLookupExpr] .-=(_:_:) # 94| getBase(): [TypeExpr] Int.Type # 94| getTypeRepr(): [TypeRepr] Int # 94| getMethodRef(): [DeclRefExpr] -=(_:_:) # 94| getArgument(0): [Argument] : x # 94| getExpr(): [DeclRefExpr] x # 94| getExpr().getFullyConverted(): [InOutExpr] &... # 94| getArgument(1): [Argument] : 1 # 94| getExpr(): [IntegerLiteralExpr] 1 # 95| getElement(2): [IfStmt] if ... then { ... } # 95| getCondition(): [StmtCondition] StmtCondition # 95| getElement(0): [ConditionElement] ... .>(_:_:) ... # 95| getBoolean(): [BinaryExpr] ... .>(_:_:) ... # 95| getFunction(): [MethodLookupExpr] .>(_:_:) # 95| getBase(): [TypeExpr] Int.Type # 95| getTypeRepr(): [TypeRepr] Int # 95| getMethodRef(): [DeclRefExpr] >(_:_:) # 95| getArgument(0): [Argument] : x # 95| getExpr(): [DeclRefExpr] x # 95| getExpr().getFullyConverted(): [LoadExpr] (Int) ... # 95| getArgument(1): [Argument] : 0 # 95| getExpr(): [IntegerLiteralExpr] 0 # 95| getThen(): [BraceStmt] { ... } # 96| getElement(0): [CallExpr] call to a() # 96| getFunction(): [DeclRefExpr] a() # 93| getCapture(0): [CapturedDecl] y # 93| getCapture(1): [CapturedDecl] x # 96| getCapture(2): [CapturedDecl] a() # 100| getElement(3): [ReturnStmt] return ... # 100| getResult(): [DeclRefExpr] a() # 85| getCapture(0): [CapturedDecl] y # 103| getElement(2): [PatternBindingDecl] var ... = ... # 103| getInit(0): [CallExpr] call to f() # 103| getFunction(): [DeclRefExpr] f() # 103| getPattern(0): [NamedPattern] a # 104| getElement(3): [CallExpr] call to ... # 104| getFunction(): [DeclRefExpr] a # 105| getElement(4): [ReturnStmt] return ... # 105| getResult(): [DeclRefExpr] y # 105| getResult().getFullyConverted(): [LoadExpr] (Int) ... # 105| [Comment] // 58341 # 105| # 108| [NamedFunction] sharedCapture() # 108| InterfaceType = () -> Int # 108| getBody(): [BraceStmt] { ... } # 109| getVariable(0): [ConcreteVarDecl] incrX # 109| Type = () -> () # 109| getVariable(1): [ConcreteVarDecl] getX # 109| Type = () -> Int # 114| getVariable(2): [ConcreteVarDecl] doubleIncrX # 114| Type = () -> () # 109| getElement(0): [PatternBindingDecl] var ... = ... # 109| getInit(0): [CallExpr] call to ... # 109| getFunction(): [ExplicitClosureExpr] { ... } # 109| getBody(): [BraceStmt] { ... } # 110| getVariable(0): [ConcreteVarDecl] x # 110| Type = Int # 110| getElement(0): [PatternBindingDecl] var ... = ... # 110| getInit(0): [IntegerLiteralExpr] 0 # 110| getPattern(0): [NamedPattern] x # 111| getElement(1): [ReturnStmt] return ... # 111| getResult(): [TupleExpr] (...) # 111| getElement(0): [ExplicitClosureExpr] { ... } # 111| getBody(): [BraceStmt] { ... } # 111| getElement(0): [ReturnStmt] return ... # 111| getResult(): [BinaryExpr] ... .+=(_:_:) ... # 111| getFunction(): [MethodLookupExpr] .+=(_:_:) # 111| getBase(): [TypeExpr] Int.Type # 111| getTypeRepr(): [TypeRepr] Int # 111| getMethodRef(): [DeclRefExpr] +=(_:_:) # 111| getArgument(0): [Argument] : x # 111| getExpr(): [DeclRefExpr] x # 111| getExpr().getFullyConverted(): [InOutExpr] &... # 111| getArgument(1): [Argument] : 1 # 111| getExpr(): [IntegerLiteralExpr] 1 # 111| getCapture(0): [CapturedDecl] x # 111| getElement(1): [ExplicitClosureExpr] { ... } # 111| getBody(): [BraceStmt] { ... } # 111| getElement(0): [ReturnStmt] return ... # 111| getResult(): [DeclRefExpr] x # 111| getResult().getFullyConverted(): [LoadExpr] (Int) ... # 111| getCapture(0): [CapturedDecl] x # 109| getPattern(0): [TuplePattern] (...) # 109| getElement(0): [NamedPattern] incrX # 109| getElement(1): [NamedPattern] getX # 114| getElement(1): [PatternBindingDecl] var ... = ... # 114| getInit(0): [ExplicitClosureExpr] { ... } # 114| getBody(): [BraceStmt] { ... } # 115| getElement(0): [CallExpr] call to ... # 115| getFunction(): [DeclRefExpr] incrX # 116| getElement(1): [CallExpr] call to ... # 116| getFunction(): [DeclRefExpr] incrX # 115| getCapture(0): [CapturedDecl] incrX # 114| getPattern(0): [NamedPattern] doubleIncrX # 119| getElement(2): [CallExpr] call to ... # 119| getFunction(): [DeclRefExpr] doubleIncrX # 120| getElement(3): [CallExpr] call to ... # 120| getFunction(): [DeclRefExpr] doubleIncrX # 121| getElement(4): [ReturnStmt] return ... # 121| getResult(): [CallExpr] call to ... # 121| getFunction(): [DeclRefExpr] getX # 121| [Comment] // 4 # 121| # 124| [NamedFunction] sink(_:) # 124| InterfaceType = (Int) -> () # 124| getParam(0): [ParamDecl] x # 124| Type = Int # 124| getBody(): [BraceStmt] { ... } # 124| getElement(0): [CallExpr] call to print(_:separator:terminator:) # 124| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 124| getArgument(0): [Argument] : [...] # 124| getExpr(): [VarargExpansionExpr] [...] # 124| getSubExpr(): [ArrayExpr] [...] # 124| getElement(0): [StringLiteralExpr] sink: # 124| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 124| getElement(1): [DeclRefExpr] x # 124| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 124| getArgument(1): [Argument] separator: default separator # 124| getExpr(): [DefaultArgumentExpr] default separator # 124| getArgument(2): [Argument] terminator: default terminator # 124| getExpr(): [DefaultArgumentExpr] default terminator # 125| [NamedFunction] source() # 125| InterfaceType = () -> Int # 125| getBody(): [BraceStmt] { ... } # 125| getElement(0): [ReturnStmt] return ... # 125| getResult(): [IntegerLiteralExpr] -1 # 127| [NamedFunction] sharedCaptureMultipleWriters() # 127| InterfaceType = () -> () # 127| getBody(): [BraceStmt] { ... } # 128| getVariable(0): [ConcreteVarDecl] x # 128| Type = Int # 130| getVariable(1): [ConcreteVarDecl] callSink # 130| Type = () -> () # 132| getVariable(2): [ConcreteVarDecl] makeSetter # 132| Type = (Int) -> () -> () # 137| getVariable(3): [ConcreteVarDecl] goodSetter # 137| Type = () -> () # 138| getVariable(4): [ConcreteVarDecl] badSetter # 138| Type = () -> () # 128| getElement(0): [PatternBindingDecl] var ... = ... # 128| getInit(0): [IntegerLiteralExpr] 123 # 128| getPattern(0): [NamedPattern] x # 130| getElement(1): [PatternBindingDecl] var ... = ... # 130| getInit(0): [ExplicitClosureExpr] { ... } # 130| getBody(): [BraceStmt] { ... } # 130| getElement(0): [ReturnStmt] return ... # 130| getResult(): [CallExpr] call to sink(_:) # 130| getFunction(): [DeclRefExpr] sink(_:) # 130| getArgument(0): [Argument] : x # 130| getExpr(): [DeclRefExpr] x # 130| getExpr().getFullyConverted(): [LoadExpr] (Int) ... # 130| getCapture(0): [CapturedDecl] x # 130| getPattern(0): [NamedPattern] callSink # 132| getElement(2): [PatternBindingDecl] var ... = ... # 132| getInit(0): [ExplicitClosureExpr] { ... } # 132| getParam(0): [ParamDecl] y # 132| Type = Int # 132| getBody(): [BraceStmt] { ... } # 133| getVariable(0): [ConcreteVarDecl] setter # 133| Type = () -> () # 133| getElement(0): [PatternBindingDecl] var ... = ... # 133| getInit(0): [ExplicitClosureExpr] { ... } # 133| getBody(): [BraceStmt] { ... } # 133| getElement(0): [ReturnStmt] return ... # 133| getResult(): [AssignExpr] ... = ... # 133| getDest(): [DeclRefExpr] x # 133| getSource(): [DeclRefExpr] y # 133| getCapture(0): [CapturedDecl] x # 133| getCapture(1): [CapturedDecl] y # 133| getPattern(0): [NamedPattern] setter # 134| getElement(1): [ReturnStmt] return ... # 134| getResult(): [DeclRefExpr] setter # 133| getCapture(0): [CapturedDecl] x # 132| getPattern(0): [NamedPattern] makeSetter # 137| getElement(3): [PatternBindingDecl] var ... = ... # 137| getInit(0): [CallExpr] call to ... # 137| getFunction(): [DeclRefExpr] makeSetter # 137| getArgument(0): [Argument] : 42 # 137| getExpr(): [IntegerLiteralExpr] 42 # 137| getPattern(0): [NamedPattern] goodSetter # 138| getElement(4): [PatternBindingDecl] var ... = ... # 138| getInit(0): [CallExpr] call to ... # 138| getFunction(): [DeclRefExpr] makeSetter # 138| getArgument(0): [Argument] : call to source() # 138| getExpr(): [CallExpr] call to source() # 138| getFunction(): [DeclRefExpr] source() # 138| getPattern(0): [NamedPattern] badSetter # 140| getElement(5): [CallExpr] call to ... # 140| getFunction(): [DeclRefExpr] goodSetter # 141| getElement(6): [CallExpr] call to ... # 141| getFunction(): [DeclRefExpr] callSink # 143| getElement(7): [CallExpr] call to ... # 143| getFunction(): [DeclRefExpr] badSetter # 144| getElement(8): [CallExpr] call to ... # 144| getFunction(): [DeclRefExpr] callSink # 147| [NamedFunction] reentrant() # 147| InterfaceType = () -> Int # 147| getBody(): [BraceStmt] { ... } # 167| getVariable(0): [ConcreteVarDecl] h # 167| Type = (Int) -> Int # 169| getVariable(1): [ConcreteVarDecl] y # 169| Type = Int # 149| getElement(0): [NamedFunction] f(_:) # 149| InterfaceType = (Int) -> (Int) -> Int # 149| getParam(0): [ParamDecl] x # 149| Type = Int # 149| getBody(): [BraceStmt] { ... } # 154| getVariable(0): [ConcreteVarDecl] next # 154| Type = (Int) -> Int # 150| getElement(0): [IfStmt] if ... then { ... } # 150| getCondition(): [StmtCondition] StmtCondition # 150| getElement(0): [ConditionElement] ... .==(_:_:) ... # 150| getBoolean(): [BinaryExpr] ... .==(_:_:) ... # 150| getFunction(): [MethodLookupExpr] .==(_:_:) # 150| getBase(): [TypeExpr] Int.Type # 150| getTypeRepr(): [TypeRepr] Int # 150| getMethodRef(): [DeclRefExpr] ==(_:_:) # 150| getArgument(0): [Argument] : x # 150| getExpr(): [DeclRefExpr] x # 150| getArgument(1): [Argument] : 0 # 150| getExpr(): [IntegerLiteralExpr] 0 # 150| getThen(): [BraceStmt] { ... } # 151| getElement(0): [ReturnStmt] return ... # 151| getResult(): [ExplicitClosureExpr] { ... } # 151| getParam(0): [ParamDecl] _ # 151| Type = Int # 151| getBody(): [BraceStmt] { ... } # 151| getElement(0): [ReturnStmt] return ... # 151| getResult(): [DeclRefExpr] x # 151| getCapture(0): [CapturedDecl] x # 154| getElement(1): [PatternBindingDecl] var ... = ... # 154| getInit(0): [CallExpr] call to g(_:) # 154| getFunction(): [DeclRefExpr] g(_:) # 154| getArgument(0): [Argument] : ... .-(_:_:) ... # 154| getExpr(): [BinaryExpr] ... .-(_:_:) ... # 154| getFunction(): [MethodLookupExpr] .-(_:_:) # 154| getBase(): [TypeExpr] Int.Type # 154| getTypeRepr(): [TypeRepr] Int # 154| getMethodRef(): [DeclRefExpr] -(_:_:) # 154| getArgument(0): [Argument] : x # 154| getExpr(): [DeclRefExpr] x # 154| getArgument(1): [Argument] : 1 # 154| getExpr(): [IntegerLiteralExpr] 1 # 154| getPattern(0): [NamedPattern] next # 155| getElement(2): [ReturnStmt] return ... # 155| getResult(): [ExplicitClosureExpr] { ... } # 155| getParam(0): [ParamDecl] k # 155| Type = Int # 155| getBody(): [BraceStmt] { ... } # 155| getElement(0): [ReturnStmt] return ... # 155| getResult(): [BinaryExpr] ... .+(_:_:) ... # 155| getFunction(): [MethodLookupExpr] .+(_:_:) # 155| getBase(): [TypeExpr] Int.Type # 155| getTypeRepr(): [TypeRepr] Int # 155| getMethodRef(): [DeclRefExpr] +(_:_:) # 155| getArgument(0): [Argument] : ... .*(_:_:) ... # 155| getExpr(): [BinaryExpr] ... .*(_:_:) ... # 155| getFunction(): [MethodLookupExpr] .*(_:_:) # 155| getBase(): [TypeExpr] Int.Type # 155| getTypeRepr(): [TypeRepr] Int # 155| getMethodRef(): [DeclRefExpr] *(_:_:) # 155| getArgument(0): [Argument] : k # 155| getExpr(): [DeclRefExpr] k # 155| getArgument(1): [Argument] : call to ... # 155| getExpr(): [CallExpr] call to ... # 155| getFunction(): [DeclRefExpr] next # 155| getArgument(0): [Argument] : ... .*(_:_:) ... # 155| getExpr(): [BinaryExpr] ... .*(_:_:) ... # 155| getFunction(): [MethodLookupExpr] .*(_:_:) # 155| getBase(): [TypeExpr] Int.Type # 155| getTypeRepr(): [TypeRepr] Int # 155| getMethodRef(): [DeclRefExpr] *(_:_:) # 155| getArgument(0): [Argument] : 10 # 155| getExpr(): [IntegerLiteralExpr] 10 # 155| getArgument(1): [Argument] : k # 155| getExpr(): [DeclRefExpr] k # 155| getArgument(1): [Argument] : x # 155| getExpr(): [DeclRefExpr] x # 155| getCapture(0): [CapturedDecl] next # 155| getCapture(1): [CapturedDecl] x # 154| getCapture(0): [CapturedDecl] g(_:) # 158| getElement(1): [NamedFunction] g(_:) # 158| InterfaceType = (Int) -> (Int) -> Int # 158| getParam(0): [ParamDecl] x # 158| Type = Int # 158| getBody(): [BraceStmt] { ... } # 163| getVariable(0): [ConcreteVarDecl] next # 163| Type = (Int) -> Int # 159| getElement(0): [IfStmt] if ... then { ... } # 159| getCondition(): [StmtCondition] StmtCondition # 159| getElement(0): [ConditionElement] ... .==(_:_:) ... # 159| getBoolean(): [BinaryExpr] ... .==(_:_:) ... # 159| getFunction(): [MethodLookupExpr] .==(_:_:) # 159| getBase(): [TypeExpr] Int.Type # 159| getTypeRepr(): [TypeRepr] Int # 159| getMethodRef(): [DeclRefExpr] ==(_:_:) # 159| getArgument(0): [Argument] : x # 159| getExpr(): [DeclRefExpr] x # 159| getArgument(1): [Argument] : 0 # 159| getExpr(): [IntegerLiteralExpr] 0 # 159| getThen(): [BraceStmt] { ... } # 160| getElement(0): [ReturnStmt] return ... # 160| getResult(): [ExplicitClosureExpr] { ... } # 160| getParam(0): [ParamDecl] _ # 160| Type = Int # 160| getBody(): [BraceStmt] { ... } # 160| getElement(0): [ReturnStmt] return ... # 160| getResult(): [DeclRefExpr] x # 160| getCapture(0): [CapturedDecl] x # 163| getElement(1): [PatternBindingDecl] var ... = ... # 163| getInit(0): [CallExpr] call to f(_:) # 163| getFunction(): [DeclRefExpr] f(_:) # 163| getArgument(0): [Argument] : ... .-(_:_:) ... # 163| getExpr(): [BinaryExpr] ... .-(_:_:) ... # 163| getFunction(): [MethodLookupExpr] .-(_:_:) # 163| getBase(): [TypeExpr] Int.Type # 163| getTypeRepr(): [TypeRepr] Int # 163| getMethodRef(): [DeclRefExpr] -(_:_:) # 163| getArgument(0): [Argument] : x # 163| getExpr(): [DeclRefExpr] x # 163| getArgument(1): [Argument] : 1 # 163| getExpr(): [IntegerLiteralExpr] 1 # 163| getPattern(0): [NamedPattern] next # 164| getElement(2): [ReturnStmt] return ... # 164| getResult(): [ExplicitClosureExpr] { ... } # 164| getParam(0): [ParamDecl] k # 164| Type = Int # 164| getBody(): [BraceStmt] { ... } # 164| getElement(0): [ReturnStmt] return ... # 164| getResult(): [BinaryExpr] ... .+(_:_:) ... # 164| getFunction(): [MethodLookupExpr] .+(_:_:) # 164| getBase(): [TypeExpr] Int.Type # 164| getTypeRepr(): [TypeRepr] Int # 164| getMethodRef(): [DeclRefExpr] +(_:_:) # 164| getArgument(0): [Argument] : ... .*(_:_:) ... # 164| getExpr(): [BinaryExpr] ... .*(_:_:) ... # 164| getFunction(): [MethodLookupExpr] .*(_:_:) # 164| getBase(): [TypeExpr] Int.Type # 164| getTypeRepr(): [TypeRepr] Int # 164| getMethodRef(): [DeclRefExpr] *(_:_:) # 164| getArgument(0): [Argument] : k # 164| getExpr(): [DeclRefExpr] k # 164| getArgument(1): [Argument] : call to ... # 164| getExpr(): [CallExpr] call to ... # 164| getFunction(): [DeclRefExpr] next # 164| getArgument(0): [Argument] : ... .*(_:_:) ... # 164| getExpr(): [BinaryExpr] ... .*(_:_:) ... # 164| getFunction(): [MethodLookupExpr] .*(_:_:) # 164| getBase(): [TypeExpr] Int.Type # 164| getTypeRepr(): [TypeRepr] Int # 164| getMethodRef(): [DeclRefExpr] *(_:_:) # 164| getArgument(0): [Argument] : 10 # 164| getExpr(): [IntegerLiteralExpr] 10 # 164| getArgument(1): [Argument] : k # 164| getExpr(): [DeclRefExpr] k # 164| getArgument(1): [Argument] : ... .*(_:_:) ... # 164| getExpr(): [BinaryExpr] ... .*(_:_:) ... # 164| getFunction(): [MethodLookupExpr] .*(_:_:) # 164| getBase(): [TypeExpr] Int.Type # 164| getTypeRepr(): [TypeRepr] Int # 164| getMethodRef(): [DeclRefExpr] *(_:_:) # 164| getArgument(0): [Argument] : 2 # 164| getExpr(): [IntegerLiteralExpr] 2 # 164| getArgument(1): [Argument] : x # 164| getExpr(): [DeclRefExpr] x # 164| getCapture(0): [CapturedDecl] next # 164| getCapture(1): [CapturedDecl] x # 163| getCapture(0): [CapturedDecl] f(_:) # 167| getElement(2): [PatternBindingDecl] var ... = ... # 167| getInit(0): [CallExpr] call to f(_:) # 167| getFunction(): [DeclRefExpr] f(_:) # 167| getArgument(0): [Argument] : 5 # 167| getExpr(): [IntegerLiteralExpr] 5 # 167| getPattern(0): [NamedPattern] h # 169| getElement(3): [PatternBindingDecl] var ... = ... # 169| getInit(0): [CallExpr] call to ... # 169| getFunction(): [DeclRefExpr] h # 169| getArgument(0): [Argument] : 10 # 169| getExpr(): [IntegerLiteralExpr] 10 # 169| getPattern(0): [NamedPattern] y # 171| getElement(4): [ReturnStmt] return ... # 171| getResult(): [DeclRefExpr] y # 171| [Comment] // 10004003085 # 171| # 174| [NamedFunction] main() # 174| InterfaceType = () -> () # 174| getBody(): [BraceStmt] { ... } # 188| getVariable(0): [ConcreteVarDecl] a # 188| Type = () -> Int # 189| getVariable(1): [ConcreteVarDecl] b # 189| Type = () -> Int # 175| getElement(0): [CallExpr] call to print(_:separator:terminator:) # 175| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 175| getArgument(0): [Argument] : [...] # 175| getExpr(): [VarargExpansionExpr] [...] # 175| getSubExpr(): [ArrayExpr] [...] # 175| getElement(0): [StringLiteralExpr] captureList(): # 175| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 175| getArgument(1): [Argument] separator: default separator # 175| getExpr(): [DefaultArgumentExpr] default separator # 175| getArgument(2): [Argument] terminator: default terminator # 175| getExpr(): [DefaultArgumentExpr] default terminator # 176| getElement(1): [CallExpr] call to captureList() # 176| getFunction(): [DeclRefExpr] captureList() # 178| getElement(2): [CallExpr] call to print(_:separator:terminator:) # 178| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 178| getArgument(0): [Argument] : [...] # 178| getExpr(): [VarargExpansionExpr] [...] # 178| getSubExpr(): [ArrayExpr] [...] # 178| getElement(0): [StringLiteralExpr] callEscape(): # 178| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 178| getArgument(1): [Argument] separator: default separator # 178| getExpr(): [DefaultArgumentExpr] default separator # 178| getArgument(2): [Argument] terminator: default terminator # 178| getExpr(): [DefaultArgumentExpr] default terminator # 179| getElement(3): [CallExpr] call to callEscape() # 179| getFunction(): [DeclRefExpr] callEscape() # 181| getElement(4): [CallExpr] call to print(_:separator:terminator:) # 181| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 181| getArgument(0): [Argument] : [...] # 181| getExpr(): [VarargExpansionExpr] [...] # 181| getSubExpr(): [ArrayExpr] [...] # 181| getElement(0): [StringLiteralExpr] logical(): # 181| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 181| getElement(1): [CallExpr] call to logical() # 181| getFunction(): [DeclRefExpr] logical() # 181| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 181| getArgument(1): [Argument] separator: default separator # 181| getExpr(): [DefaultArgumentExpr] default separator # 181| getArgument(2): [Argument] terminator: default terminator # 181| getExpr(): [DefaultArgumentExpr] default terminator # 183| getElement(5): [CallExpr] call to print(_:separator:terminator:) # 183| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 183| getArgument(0): [Argument] : [...] # 183| getExpr(): [VarargExpansionExpr] [...] # 183| getSubExpr(): [ArrayExpr] [...] # 183| getElement(0): [StringLiteralExpr] asyncTest(): # 183| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 183| getArgument(1): [Argument] separator: default separator # 183| getExpr(): [DefaultArgumentExpr] default separator # 183| getArgument(2): [Argument] terminator: default terminator # 183| getExpr(): [DefaultArgumentExpr] default terminator # 184| getElement(6): [CallExpr] call to asyncTest() # 184| getFunction(): [DeclRefExpr] asyncTest() # 186| getElement(7): [CallExpr] call to print(_:separator:terminator:) # 186| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 186| getArgument(0): [Argument] : [...] # 186| getExpr(): [VarargExpansionExpr] [...] # 186| getSubExpr(): [ArrayExpr] [...] # 186| getElement(0): [StringLiteralExpr] foo(): # 186| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 186| getElement(1): [CallExpr] call to foo() # 186| getFunction(): [DeclRefExpr] foo() # 186| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 186| getArgument(1): [Argument] separator: default separator # 186| getExpr(): [DefaultArgumentExpr] default separator # 186| getArgument(2): [Argument] terminator: default terminator # 186| getExpr(): [DefaultArgumentExpr] default terminator # 188| getElement(8): [PatternBindingDecl] var ... = ... # 188| getInit(0): [CallExpr] call to bar() # 188| getFunction(): [DeclRefExpr] bar() # 188| getPattern(0): [NamedPattern] a # 189| getElement(9): [PatternBindingDecl] var ... = ... # 189| getInit(0): [CallExpr] call to baz() # 189| getFunction(): [DeclRefExpr] baz() # 189| getPattern(0): [NamedPattern] b # 191| getElement(10): [CallExpr] call to print(_:separator:terminator:) # 191| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 191| getArgument(0): [Argument] : [...] # 191| getExpr(): [VarargExpansionExpr] [...] # 191| getSubExpr(): [ArrayExpr] [...] # 191| getElement(0): [StringLiteralExpr] bar(): # 191| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 191| getElement(1): [CallExpr] call to ... # 191| getFunction(): [DeclRefExpr] a # 191| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 191| getElement(2): [CallExpr] call to ... # 191| getFunction(): [DeclRefExpr] a # 191| getElement(2).getFullyConverted(): [ErasureExpr] (Any) ... # 191| getArgument(1): [Argument] separator: default separator # 191| getExpr(): [DefaultArgumentExpr] default separator # 191| getArgument(2): [Argument] terminator: default terminator # 191| getExpr(): [DefaultArgumentExpr] default terminator # 193| getElement(11): [CallExpr] call to print(_:separator:terminator:) # 193| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 193| getArgument(0): [Argument] : [...] # 193| getExpr(): [VarargExpansionExpr] [...] # 193| getSubExpr(): [ArrayExpr] [...] # 193| getElement(0): [StringLiteralExpr] baz(): # 193| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 193| getElement(1): [CallExpr] call to ... # 193| getFunction(): [DeclRefExpr] b # 193| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 193| getElement(2): [CallExpr] call to ... # 193| getFunction(): [DeclRefExpr] b # 193| getElement(2).getFullyConverted(): [ErasureExpr] (Any) ... # 193| getArgument(1): [Argument] separator: default separator # 193| getExpr(): [DefaultArgumentExpr] default separator # 193| getArgument(2): [Argument] terminator: default terminator # 193| getExpr(): [DefaultArgumentExpr] default terminator # 195| getElement(12): [CallExpr] call to ... # 195| getFunction(): [ForceValueExpr] ...! # 195| getSubExpr(): [DeclRefExpr] g # 195| getSubExpr().getFullyConverted(): [LoadExpr] (((Int) -> Void)?) ... # 195| getArgument(0): [Argument] : 1 # 195| getExpr(): [IntegerLiteralExpr] 1 # 196| getElement(13): [CallExpr] call to print(_:separator:terminator:) # 196| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 196| getArgument(0): [Argument] : [...] # 196| getExpr(): [VarargExpansionExpr] [...] # 196| getSubExpr(): [ArrayExpr] [...] # 196| getElement(0): [StringLiteralExpr] g!(1): # 196| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 196| getElement(1): [CallExpr] call to ... # 196| getFunction(): [DeclRefExpr] b # 196| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 196| getElement(2): [CallExpr] call to ... # 196| getFunction(): [DeclRefExpr] b # 196| getElement(2).getFullyConverted(): [ErasureExpr] (Any) ... # 196| getArgument(1): [Argument] separator: default separator # 196| getExpr(): [DefaultArgumentExpr] default separator # 196| getArgument(2): [Argument] terminator: default terminator # 196| getExpr(): [DefaultArgumentExpr] default terminator # 198| getElement(14): [CallExpr] call to ... # 198| getFunction(): [ForceValueExpr] ...! # 198| getSubExpr(): [DeclRefExpr] g # 198| getSubExpr().getFullyConverted(): [LoadExpr] (((Int) -> Void)?) ... # 198| getArgument(0): [Argument] : 1 # 198| getExpr(): [IntegerLiteralExpr] 1 # 199| getElement(15): [CallExpr] call to print(_:separator:terminator:) # 199| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 199| getArgument(0): [Argument] : [...] # 199| getExpr(): [VarargExpansionExpr] [...] # 199| getSubExpr(): [ArrayExpr] [...] # 199| getElement(0): [StringLiteralExpr] g!(1): # 199| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 199| getElement(1): [CallExpr] call to ... # 199| getFunction(): [DeclRefExpr] b # 199| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 199| getElement(2): [CallExpr] call to ... # 199| getFunction(): [DeclRefExpr] b # 199| getElement(2).getFullyConverted(): [ErasureExpr] (Any) ... # 199| getArgument(1): [Argument] separator: default separator # 199| getExpr(): [DefaultArgumentExpr] default separator # 199| getArgument(2): [Argument] terminator: default terminator # 199| getExpr(): [DefaultArgumentExpr] default terminator # 201| getElement(16): [CallExpr] call to print(_:separator:terminator:) # 201| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 201| getArgument(0): [Argument] : [...] # 201| getExpr(): [VarargExpansionExpr] [...] # 201| getSubExpr(): [ArrayExpr] [...] # 201| getElement(0): [StringLiteralExpr] quux(): # 201| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 201| getElement(1): [CallExpr] call to quux() # 201| getFunction(): [DeclRefExpr] quux() # 201| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 201| getArgument(1): [Argument] separator: default separator # 201| getExpr(): [DefaultArgumentExpr] default separator # 201| getArgument(2): [Argument] terminator: default terminator # 201| getExpr(): [DefaultArgumentExpr] default terminator # 203| getElement(17): [CallExpr] call to print(_:separator:terminator:) # 203| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 203| getArgument(0): [Argument] : [...] # 203| getExpr(): [VarargExpansionExpr] [...] # 203| getSubExpr(): [ArrayExpr] [...] # 203| getElement(0): [StringLiteralExpr] sharedCapture(): # 203| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 203| getElement(1): [CallExpr] call to sharedCapture() # 203| getFunction(): [DeclRefExpr] sharedCapture() # 203| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 203| getArgument(1): [Argument] separator: default separator # 203| getExpr(): [DefaultArgumentExpr] default separator # 203| getArgument(2): [Argument] terminator: default terminator # 203| getExpr(): [DefaultArgumentExpr] default terminator # 205| getElement(18): [CallExpr] call to print(_:separator:terminator:) # 205| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 205| getArgument(0): [Argument] : [...] # 205| getExpr(): [VarargExpansionExpr] [...] # 205| getSubExpr(): [ArrayExpr] [...] # 205| getElement(0): [StringLiteralExpr] sharedCaptureMultipleWriters(): # 205| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 205| getArgument(1): [Argument] separator: default separator # 205| getExpr(): [DefaultArgumentExpr] default separator # 205| getArgument(2): [Argument] terminator: default terminator # 205| getExpr(): [DefaultArgumentExpr] default terminator # 206| getElement(19): [CallExpr] call to sharedCaptureMultipleWriters() # 206| getFunction(): [DeclRefExpr] sharedCaptureMultipleWriters() # 208| getElement(20): [CallExpr] call to print(_:separator:terminator:) # 208| getFunction(): [DeclRefExpr] print(_:separator:terminator:) # 208| getArgument(0): [Argument] : [...] # 208| getExpr(): [VarargExpansionExpr] [...] # 208| getSubExpr(): [ArrayExpr] [...] # 208| getElement(0): [StringLiteralExpr] reentrant(): # 208| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ... # 208| getElement(1): [CallExpr] call to reentrant() # 208| getFunction(): [DeclRefExpr] reentrant() # 208| getElement(1).getFullyConverted(): [ErasureExpr] (Any) ... # 208| getArgument(1): [Argument] separator: default separator # 208| getExpr(): [DefaultArgumentExpr] default separator # 208| getArgument(2): [Argument] terminator: default terminator # 208| getExpr(): [DefaultArgumentExpr] default terminator # 195| getCapture(0): [CapturedDecl] g # 176| [Comment] // Hello world! 123 # 176| # 179| [Comment] // 1 # 179| # 181| [Comment] // true # 181| # 184| [Comment] // 42 # 184| # 186| [Comment] // 42 # 186| # 191| [Comment] // 42 42 # 191| # 193| [Comment] // 42 42 # 193| # 196| [Comment] // 43 43 # 196| # 199| [Comment] // 44 44 # 199| # 201| [Comment] // 58341 # 201| # 203| [Comment] // 4 # 203| # 206| [Comment] // 42, -1 # 206| # 208| [Comment] // 10004003085 # 208| # 211| [TopLevelCodeDecl] { ... } # 211| getBody(): [BraceStmt] { ... } # 211| getElement(0): [CallExpr] call to main() # 211| getFunction(): [DeclRefExpr] main()