logo

class

compiler::ClosureExpr

sys::Obj
  compiler::Node
    compiler::Expr
      compiler::ClosureExpr

ClosureExpr is an "inlined anonymous method" which closes over it's lexical scope. ClosureExpr is placed into the AST by the parser with the code field containing the method implementation. In InitClosures we remap a ClosureExpr to an anonymous class TypeDef which extends Func. The function implementation is moved to the anonymous class's doCall() method. However we leave ClosureExpr in the AST in it's original location with a substitute expression. The substitute expr just creates an instance of the anonymous class. But by leaving the ClosureExpr in the tree, we can keep track of the original lexical scope of the closure.

Slots

cls

TypeDef cls

Source

code

Block code

Source

doCall

MethodDef doCall

Source

enclosingClosure

ClosureExpr enclosingClosure

Source

enclosingLocals

Str:MethodVar enclosingLocals

Source

enclosingMethod

MethodDef enclosingMethod

Source

enclosingType

TypeDef enclosingType

Source

make

new make(Location location, TypeDef enclosingType, MethodDef enclosingMethod, ClosureExpr enclosingClosure, FuncType signature, Str name)

Source

name

Str name

Source

outerThisField

readonly CField outerThisField

Source

print

override Void print(AstWriter out)

Pretty print this node and it's descendants.

Source

signature

FuncType signature

Source

substitute

CallExpr substitute

Source

toStr

override Str toStr()

Return a string representation of this object.

Source

usesCvars

Bool usesCvars

Source