internal override void TranslateToIL(ILGenerator il, Type rtype){
//This is executed every time the function expression is executed and constructs a new closure for every execution.
if (rtype == Typeob.Void)
return;
il.Emit(OpCodes.Ldloc, this.func_local);
il.Emit(OpCodes.Newobj, CompilerGlobals.closureConstructor);
Convert.Emit(this, il, Typeob.Closure, rtype);
if (this.field != null){
il.Emit(OpCodes.Dup);
Object tok = this.field.GetMetaData();
if (tok is LocalBuilder)
il.Emit(OpCodes.Stloc, (LocalBuilder)tok);
else
il.Emit(OpCodes.Stsfld, (FieldInfo)tok);
}
}