/// <summary> /// Conditionally branches to the given label, popping one operand from the stack. /// </summary> /// <param name="label"> The label to branch to. </param> /// <param name="opCode"> The one-byte operation identifier. </param> /// <param name="operandType"> The type of operand to pop from the stack. </param> private void BranchCore(ILLabel label, byte opCode, VESType operandType) { // Emit the branch opcode. Emit1ByteOpCode(opCode, 1, 0); // The instruction pops one value from the stack and pushes none. PopStackOperands(operandType); // Emit the label. EmitLabel(label, this.offset + 4); }
private void PushStackOperand(VESType type) { this.operands.Push(type); if (this.operands.Count != this.stackSize) throw new InvalidOperationException("Inconsistant internal stack sizes."); }