internal override void Compile(IBuildContext ctx, int expressionId) { var data = new LoopData(ctx.DefineLabel(), ctx.DefineLabel()); ctx.SetLoopData(data); data.ContinueLabel.Mark(); ctx.Compile(_loop); data.ContinueLabel.EmitGoto(OpCodes.Br); data.BreakLabel.Mark(); ctx.ResetLoopData(data); }
internal override void Compile(IBuildContext ctx, int expressionId) { var trueLabel = ctx.DefineLabel(); var endLabel = ctx.DefineLabel(); ctx.Compile(_predicate); trueLabel.EmitGoto(OpCodes.Brtrue); //TODO: use Brtrue_s if possible ctx.Compile(_elseExpression); endLabel.EmitGoto(OpCodes.Br); //TODO: use Br_s if possible trueLabel.Mark(); ctx.Compile(_thenExpression); endLabel.Mark(); }
internal override void Compile(IBuildContext ctx, int expressionId) { ctx.Compile(_predicate); var label = ctx.DefineLabel(); label.EmitGoto(OpCodes.Brfalse); //TODO: use Brfalse_s if possible ctx.Compile(_thenExpression); label.Mark(); }