public override void Emit() { //MarkSequencePoint(context); IL.BeginCatchBlock(exType.SharpType); EmitHelper.StormVar(IL, exSymbol.VarBuilder); StmtBody.Emit(); IL.EndExceptionBlock(); }
public override void Emit() { //EmitHelper.LoadInt(IL, 1); //IL.Emit(OpCodes.Ceq); //IL.Emit(OpCodes.Brfalse, EndLabel); StmtBody.Emit(); //IL.Emit(OpCodes.Br, EndLabel); }
public override void Emit() { IL.MarkLabel(CurrentLabel); ConditionExp.Emit(); EmitHelper.LoadInt(IL, 1); IL.Emit(OpCodes.Ceq); IL.Emit(OpCodes.Brfalse, NextLabel); StmtBody.Emit(); IL.Emit(OpCodes.Br, EndLabel); }
//public override CodePosition Position //{ // get { return DangToken.Position; } //} public override void Emit() { var True_Label = IL.DefineLabel(); var False_Label = IL.DefineLabel(); IL.MarkLabel(True_Label); ConditionExp.Emit(); EmitHelper.LoadInt(IL, 1); IL.Emit(OpCodes.Ceq); IL.Emit(OpCodes.Brfalse, False_Label); StmtBody.Emit(); IL.Emit(OpCodes.Br, True_Label); IL.MarkLabel(False_Label); }
public void EmitBody() { var symbols = this.ProcContext.Symbols; var IL = this.ProcContext.EmitContext.ILout; this.ProcContext.LoacalVarList.Reverse(); for (int i = 0; i < this.ProcContext.LoacalVarList.Count; i++) { string ident = this.ProcContext.LoacalVarList[i]; SymbolLocalVar varSymbol = symbols.Get(ident) as SymbolLocalVar; varSymbol.VarBuilder = IL.DeclareLocal(varSymbol.SymbolZType.SharpType); varSymbol.VarBuilder.SetLocalSymInfo(varSymbol.SymbolName); } Body.Emit(); ProcContext.EmitContext.ILout.Emit(OpCodes.Ret); }
public override void Emit() { TimesExp.Emit(); EmitHelper.StormVar(IL, CountSymbol.VarBuilder); EmitHelper.LoadInt(IL, START_INDEX); EmitHelper.StormVar(IL, IndexSymbol.VarBuilder); var True_Label = IL.DefineLabel(); var False_Label = IL.DefineLabel(); EmitCondition(); IL.Emit(OpCodes.Brfalse, False_Label); //定义一个标签,表示从下面开始进入循环体 IL.MarkLabel(True_Label); RepeatBody.Emit(); EmitHelper.Inc(IL, IndexSymbol.VarBuilder); EmitCondition(); IL.Emit(OpCodes.Brtrue, True_Label); IL.MarkLabel(False_Label); }
//int START_INDEX = 0; public override void Emit() { var True_Label = IL.DefineLabel(); var False_Label = IL.DefineLabel(); ForeachListExp.Emit(); EmitHelper.StormVar(IL, listSymbol.VarBuilder); generateCount(); genInitIndex(); EmitCondition(); IL.Emit(OpCodes.Brfalse, False_Label); //定义一个标签,表示从下面开始进入循环体 IL.MarkLabel(True_Label); emitItem(); StmtBody.Emit(); EmitHelper.Inc(IL, indexSymbol.VarBuilder); EmitCondition(); IL.Emit(OpCodes.Brtrue, True_Label); IL.MarkLabel(False_Label); }
public void EmitBody() { Body.Emit(); ProcContext.EmitContext.ILout.Emit(OpCodes.Ret); }