示例#1
0
文件: AccCIL.cs 项目: PlumpMath/ac3il
        private static int NumberOfElementsPushed(Mono.Cecil.Cil.StackBehaviour s, object operand = null)
        {
            switch (s)
            {
            case Mono.Cecil.Cil.StackBehaviour.Push0:
                return(0);

            case Mono.Cecil.Cil.StackBehaviour.Push1_push1:
                return(2);

            case Mono.Cecil.Cil.StackBehaviour.Push1:
            case Mono.Cecil.Cil.StackBehaviour.Pushi:
            case Mono.Cecil.Cil.StackBehaviour.Pushi8:
            case Mono.Cecil.Cil.StackBehaviour.Pushr4:
            case Mono.Cecil.Cil.StackBehaviour.Pushr8:
            case Mono.Cecil.Cil.StackBehaviour.Pushref:
                return(1);

            case Mono.Cecil.Cil.StackBehaviour.Varpush:
                if (operand is Mono.Cecil.MethodReference)
                {
                    return(((Mono.Cecil.MethodReference)(operand)).ReturnType.ReturnType.FullName == "System.Void" ? 0 : 1);
                }
                else
                {
                    throw new Exception("This is an unexpected exception");
                }

            default:
                throw new InvalidProgramException();
            }
        }
示例#2
0
文件: AccCIL.cs 项目: PlumpMath/ac3il
        private static int NumberOfElementsPoped(Mono.Cecil.Cil.StackBehaviour s, object operand = null)
        {
            switch (s)
            {
            case Mono.Cecil.Cil.StackBehaviour.Pop0:
                return(0);

            case Mono.Cecil.Cil.StackBehaviour.Pop1:
            case Mono.Cecil.Cil.StackBehaviour.Popi:
            case Mono.Cecil.Cil.StackBehaviour.Popref:
                return(1);

            case Mono.Cecil.Cil.StackBehaviour.Pop1_pop1:
            case Mono.Cecil.Cil.StackBehaviour.Popi_pop1:
            case Mono.Cecil.Cil.StackBehaviour.Popi_popi:
            case Mono.Cecil.Cil.StackBehaviour.Popi_popi8:
            case Mono.Cecil.Cil.StackBehaviour.Popi_popr4:
            case Mono.Cecil.Cil.StackBehaviour.Popi_popr8:
            case Mono.Cecil.Cil.StackBehaviour.Popref_pop1:
            case Mono.Cecil.Cil.StackBehaviour.Popref_popi:
                return(2);

            //case Mono.Cecil.Cil.StackBehaviour.Popref_popi_pop1: Hvorfor mangler denne?
            case Mono.Cecil.Cil.StackBehaviour.Popref_popi_popi:
            case Mono.Cecil.Cil.StackBehaviour.Popref_popi_popi8:
            case Mono.Cecil.Cil.StackBehaviour.Popref_popi_popr4:
            case Mono.Cecil.Cil.StackBehaviour.Popref_popi_popr8:
            case Mono.Cecil.Cil.StackBehaviour.Popref_popi_popref:
                return(3);

            case Mono.Cecil.Cil.StackBehaviour.Varpop:
                if (operand == null)
                {
                    throw new Exception("This is an unexpected exception");
                }
                return(((Mono.Cecil.MethodReference)(operand)).Parameters.Count);

            default:
                throw new InvalidProgramException();
            }
        }