logo
class

compiler::InitClosures

sys::Obj
  compiler::CompilerSupport
    compiler::CompilerStep
      compiler::InitClosures

During the Parse step we created a list of all the closures. In InitClosures we map each ClosureExpr into a TypeDef as an anonymous class, then we map ClosureExpr.substitute to call the constructor anonymous class.

Slots

closure

ClosureExpr closure

cls

TypeDef cls

ctor

MethodDef ctor

doCall

MethodDef doCall

enclosingMethod

MethodDef enclosingMethod

enclosingType

TypeDef enclosingType

genMethodCall

static const MethodDef genMethodCall(Compiler compiler, Location loc, TypeDef parent, FuncType signature, CallExpr c, Bool firstAsTarget)

This method overrides either call(List) or callx(A...) to push the args onto the stack, then redirect to the specified CallExpr c. We share this code for both closures and curries.

loc

Location loc

make

new make(Compiler compiler)

run

virtual Void run()

signature

FuncType signature