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
-
private Void genCall()
-
private Void genClass()
-
private Void genCtor()
-
private Void genDoCall()
-
private Void genIsImmutable()
-
static const internal Void genIsImmutableMethod(Compiler compiler, Location loc, TypeDef parent, Bool literalVal)
- 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)
-
private Void process(ClosureExpr c)
- run
-
virtual Void run()
-
private Void setup(ClosureExpr c)
- signature
-
FuncType signature
-
private Void substitute()