Esempio n. 1
0
        public static ExpressionType ExprType(this AnyInstruction instr, uint bcv)
        {
            if (bcv > 0xE)
            {
                switch (instr.OpCode.VersionF)
                {
                case FOpCode.PushCst:
                case FOpCode.PushGlb:
                case FOpCode.PushVar:
                case FOpCode.PushI16:
                case FOpCode.PushLoc:
                    return(instr.Push.Type == DataType.Variable ? ExpressionType.Variable : ExpressionType.Literal);

                case FOpCode.Set:
                    return(ExpressionType.Set);

                case FOpCode.Call:
                    return(ExpressionType.Call);
                }
            }
            else
            {
                switch (instr.OpCode.VersionE)
                {
                case EOpCode.Push:
                    return(instr.Push.Type == DataType.Variable ? ExpressionType.Variable : ExpressionType.Literal);

                case EOpCode.Set:
                    return(ExpressionType.Set);

                case EOpCode.Call:
                    return(ExpressionType.Call);
                }
            }

            if (instr.UnaryOp(bcv) != 0)
            {
                return(ExpressionType.UnaryOp);
            }
            if (instr.BinaryOp(bcv) != 0)
            {
                return(ExpressionType.BinaryOp);
            }

            return(0);
        }