bool HandleExtraInstructions(Instruction instruction,
                                     MetaMidRepresentationOperationFactory operationFactory, string opcodeStr, ClosureEntities closureEntities)
        {
            if (instruction.OpCode == OpCodes.Ret)
            {
                var isVoid = _method.GetReturnType().IsVoid();

                operationFactory.Return(isVoid);
                return(true);
            }
            if (opcodeStr == "constrained.")
            {
                operationFactory.ConstrainedClass = (Type)instruction.Operand;
                return(true);
            }

            if (opcodeStr.StartsWith("conv."))
            {
                if (ConversionOperations(instruction, operationFactory))
                {
                    return(true);
                }
                return(true);
            }

            if (instruction.OpCode == OpCodes.Dup)
            {
                operationFactory.Dup();
                return(true);
            }
            if (instruction.OpCode == OpCodes.Pop)
            {
                operationFactory.Pop();
                return(true);
            }
            if (HandleArrayOperations(instruction, operationFactory, opcodeStr))
            {
                return(true);
            }
            if (HandleLoadStoreInstructions(instruction, operationFactory, opcodeStr, closureEntities))
            {
                return(true);
            }

            if (opcodeStr.StartsWith("initobj"))
            {
                //TODO: load the address into evaluation stack
                operationFactory.InitObject();
                return(true);
            }
            if (opcodeStr == "volatile.") //TODO: handle this
            {
                operationFactory.PushDouble(0);
                return(true);
            }
            return(false);
        }
        private bool HandleExtraInstructions(Instruction instruction, MetaMidRepresentationOperationFactory operationFactory, string opcodeStr, ClosureEntities closureEntities)
        {
            if (opcodeStr == "constrained.")
            {
                operationFactory.ConstrainedClass = (Type)instruction.Operand;
                return(true);
            }

            if (instruction.OpCode == OpCodes.Ret)
            {
                var isVoid = _method.GetReturnType().IsVoid();

                operationFactory.Return(isVoid);
                return(true);
            }
            if (opcodeStr.StartsWith("conv."))
            {
                if (ConversionOperations(opcodeStr, operationFactory))
                {
                    return(true);
                }
                return(true);
            }
            if (instruction.OpCode == OpCodes.Dup)
            {
                operationFactory.Dup();
                return(true);
            }
            if (instruction.OpCode == OpCodes.Pop)
            {
                operationFactory.Pop();
                return(true);
            }
            if (HandleArrayOperations(instruction, operationFactory, opcodeStr))
            {
                return(true);
            }
            if (instruction.OpCode == OpCodes.Ldtoken)
            {
                operationFactory.SetToken((FieldInfo)instruction.Operand);
                return(true);
            }
            if (instruction.OpCode == OpCodes.Ldftn)
            {
                operationFactory.LoadFunction((MethodBase)instruction.Operand);
                return(true);
            }
            if (instruction.OpCode == OpCodes.Switch)
            {
                operationFactory.Switch((Instruction[])instruction.Operand);
                return(true);
            }
            if (instruction.OpCode == OpCodes.Sizeof)
            {
                operationFactory.SizeOf((Type)instruction.Operand);
                return(true);
            }
            if (instruction.OpCode == OpCodes.Ldsfld)
            {
                operationFactory.LoadStaticField((FieldInfo)instruction.Operand);
                return(true);
            }
            if (instruction.OpCode == OpCodes.Stsfld)
            {
                operationFactory.StoreStaticField((FieldInfo)instruction.Operand);
                return(true);
            }
            if (opcodeStr == "ldloca.s" || opcodeStr == "ldloca")
            {
                //TODO: load the address into evaluation stack
                var index = instruction.Operand;

                operationFactory.LoadAddressIntoEvaluationStack((LocalVariableInfo)index);
                return(true);
            }
            if (opcodeStr == "ldflda.s" || opcodeStr == "ldflda")
            {
                var fieldInfo = (FieldInfo)instruction.Operand;

                operationFactory.LoadFieldAddressIntoEvaluationStack(fieldInfo);
                return(true);
            }

            if (opcodeStr == "ldelema")
            {
                var ldElemTypeDefinition = (Type)instruction.Operand;
                operationFactory.LoadAddressOfArrayItemIntoStack(ldElemTypeDefinition);
                return(true);
            }

            if (opcodeStr.StartsWith("stind."))
            {
                //TODO: load the address into evaluation stack
                operationFactory.StoresValueFromAddress();
                return(true);
            }

            if (opcodeStr.StartsWith("ldind."))
            {
                //TODO: load the address into evaluation stack
                operationFactory.LoadValueFromAddress(closureEntities);
                return(true);
            }

            if (opcodeStr.StartsWith("initobj"))
            {
                //TODO: load the address into evaluation stack
                operationFactory.InitObject();
                return(true);
            }
            if (opcodeStr == "volatile.") //TODO: handle this
            {
                operationFactory.PushDouble(0);
                return(true);
            }
            return(false);
        }