internal override void Emit(ILGenerator ilg, bool preserve) { // Emit nested codeblock var source = Token.ToString(); var dlg = NestedBinder.Emit(Codeblock, source) as RuntimeCodeblockDelegate; var rtc = new RuntimeCodeblock(dlg, NestedBinder.ParamCount); CbList[CbIndex] = new _Codeblock(rtc, source, true, NestedBinder.CreatesAutoVars); // Emit code to retrieve codeblock var lidx = Constant.Create(CbIndex); Symbol.EmitGet(ilg); lidx.EmitGet(ilg); ilg.Emit(OpCodes.Ldelem, Datatype.Type); if (!preserve) { ilg.Emit(OpCodes.Pop); } }
internal override void Emit(ILGenerator ilg, bool preserve) { // Emit nested codeblock var source = Token.ToString(); if (usualMacro) { var dlg = NestedBinder.Emit(Codeblock, source) as UsualMacro.MacroCodeblockDelegate; if (NestedBinder.CreatesAutoVars) { CbList[CbIndex] = new UsualMacro.MacroMemVarCodeblock(dlg, NestedBinder.ParamCount, source, true); } else { CbList[CbIndex] = new UsualMacro.MacroCodeblock(dlg, NestedBinder.ParamCount, source, true); } } else { var dlg = NestedBinder.Emit(Codeblock, source) as ObjectMacro.MacroCodeblockDelegate; ICodeblock rtc = NestedBinder.CreatesAutoVars ? new ObjectMacro.MacroMemVarCodeblock(dlg, NestedBinder.ParamCount) : new ObjectMacro.MacroCodeblock(dlg, NestedBinder.ParamCount); CbList[CbIndex] = new _Codeblock(rtc, source, true, false); } // Emit code to retrieve codeblock var lidx = Constant.Create(CbIndex); Symbol.EmitGet(ilg); lidx.EmitGet(ilg); ilg.Emit(OpCodes.Ldelem, Datatype.Type); if (!preserve) { ilg.Emit(OpCodes.Pop); } }