예제 #1
0
        Instruction ConditionalBranch(ProcessorState state, Func<Expression, BinaryExpression> condition)
        {
            var val1 = state.Stack.Pop();
            var test = condition(val1);

            var left = (Instruction) state.Instruction.Operand;
            var right = state.Instruction.Next;

            Instruction common = GetJoinPoint(left, right);

            var rightState = state.Clone(right, common);
            var leftState = state.Clone(left, common);
            states.Push(rightState);
            states.Push(leftState);

            // Run this once the conditional branches have been processed
            state.RunNext = () => state.Merge(test, leftState, rightState);

            return common;
        }