public EmitLabel DefineLabel() { var label = new EmitLabel(); labels.Add(label); return(label); }
public EmitInstruction Emit(IEmitOpCodeLabel opCode, EmitLabel label) { var instruction = new EmitInstruction(opCode, label); AddInstruction(instruction); return(instruction); }
public override void Compile(EmitCompilerContext context, EmitIl il) { Condition.Compile(context, il); var ifNotTrue = il.DefineLabel(); il.Emit(EmitOpCodes.Brfalse, ifNotTrue); Statement.Compile(context, il); var statementReturned = il.Instructions.Last().OpCode == EmitOpCodes.Ret; if (Else != null) { EmitLabel end = null; if (!statementReturned) { end = il.DefineLabel(); il.Emit(EmitOpCodes.Br, end); } il.MarkLabel(ifNotTrue); Else.Compile(context, il); if (!statementReturned) { il.MarkLabel(end); il.Emit(EmitOpCodes.Nop); } } else { il.MarkLabel(ifNotTrue); } }
internal void AddLabel(EmitLabel label) { if (labels == null) { labels = new List <EmitLabel>(); } labels.Add(label); }
public EmitLabel DefineLabel() { var label = new EmitLabel(); labels.Add(label); return label; }
public void MarkLabel(EmitLabel label) { pendingLabels.Add(label); }
public EmitInstruction Emit(IEmitOpCodeLabelArray opCode, EmitLabel[] labels) { var instruction = new EmitInstruction(opCode, labels); AddInstruction(instruction); return instruction; }
public EmitInstruction Emit(IEmitOpCodeLabel opCode, EmitLabel label) { var instruction = new EmitInstruction(opCode, label); AddInstruction(instruction); return instruction; }
internal void AddLabel(EmitLabel label) { if (labels == null) labels = new List<EmitLabel>(); labels.Add(label); }