Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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();
        }