public void EmitDeferredInstructions()

in Iris/IrisCompiler/BackEnd/MethodGenerator.cs [227:317]


        public void EmitDeferredInstructions()
        {
            if (!_outputEnabled)
                return;

            foreach (MethodInstruction instruction in _deferredInstructions)
            {
                switch (instruction.OpCode)
                {
                    case MethodOpCode.Assign:
                        _emitter.Store((IrisType)instruction.Operand);
                        break;
                    case MethodOpCode.BranchCond:
                        _emitter.BranchCondition(instruction.Condition, (int)instruction.Operand);
                        break;
                    case MethodOpCode.BranchFalse:
                        _emitter.BranchFalse((int)instruction.Operand);
                        break;
                    case MethodOpCode.BranchTrue:
                        _emitter.BranchTrue((int)instruction.Operand);
                        break;
                    case MethodOpCode.Call:
                        _emitter.Call((Symbol)instruction.Operand);
                        break;
                    case MethodOpCode.Goto:
                        _emitter.Goto((int)instruction.Operand);
                        break;
                    case MethodOpCode.Label:
                        _emitter.Label((int)instruction.Operand);
                        break;
                    case MethodOpCode.Load:
                        _emitter.Load((IrisType)instruction.Operand);
                        break;
                    case MethodOpCode.LoadElem:
                        _emitter.LoadElement((IrisType)instruction.Operand);
                        break;
                    case MethodOpCode.LoadElemA:
                        _emitter.LoadElementAddress((IrisType)instruction.Operand);
                        break;
                    case MethodOpCode.Operator:
                        _emitter.Operator((Operator)instruction.Operand);
                        break;
                    case MethodOpCode.Dup:
                        _emitter.Dup();
                        break;
                    case MethodOpCode.Pop:
                        _emitter.Pop();
                        break;
                    case MethodOpCode.PushArg:
                        _emitter.PushArgument((int)instruction.Operand);
                        break;
                    case MethodOpCode.PushArgA:
                        _emitter.PushArgumentAddress((int)instruction.Operand);
                        break;
                    case MethodOpCode.PushInt:
                        _emitter.PushIntConst((int)instruction.Operand);
                        break;
                    case MethodOpCode.PushGbl:
                        _emitter.PushGlobal((Symbol)instruction.Operand);
                        break;
                    case MethodOpCode.PushGblA:
                        _emitter.PushGlobalAddress((Symbol)instruction.Operand);
                        break;
                    case MethodOpCode.PushLoc:
                        _emitter.PushLocal((int)instruction.Operand);
                        break;
                    case MethodOpCode.PushLocA:
                        _emitter.PushLocalAddress((int)instruction.Operand);
                        break;
                    case MethodOpCode.PushString:
                        _emitter.PushString((string)instruction.Operand);
                        break;
                    case MethodOpCode.StoreArg:
                        _emitter.StoreArgument((int)instruction.Operand);
                        break;
                    case MethodOpCode.StoreElem:
                        _emitter.StoreElement((IrisType)instruction.Operand);
                        break;
                    case MethodOpCode.StoreGbl:
                        _emitter.StoreGlobal((Symbol)instruction.Operand);
                        break;
                    case MethodOpCode.StoreLoc:
                        _emitter.StoreLocal((int)instruction.Operand);
                        break;
                    default:
                        throw new InvalidOperationException("Unknown opcode.  Missing case?");
                }
            }

            _deferredInstructions.Clear();
        }