clojure.lang.CljCompiler.Ast.CaseExpr.GenTestExprForInts C# (CSharp) Метод

GenTestExprForInts() приватный Метод

private GenTestExprForInts ( ObjExpr objx, GenContext context, Type exprType, LabelTarget defaultLabel ) : Expression
objx ObjExpr
context GenContext
exprType System.Type
defaultLabel System.Linq.Expressions.LabelTarget
Результат Expression
        private Expression GenTestExprForInts(ObjExpr objx,GenContext context,Type exprType, LabelTarget defaultLabel)
        {
            if (exprType == null)
            {
                if (RT.booleanCast(RT.WarnOnReflectionVar.deref()))
                {
                    RT.errPrintWriter().WriteLine("Performance warning, {0}:{1} - case has int tests, but tested expression is not primitive.",
                        Compiler.SourcePathVar.deref(), RT.get(_sourceSpan, RT.StartLineKey));
                }

                ParameterExpression parm = Expression.Parameter(typeof(object),"p");
                Expression initParm = Expression.Assign(parm,_expr.GenCode(RHC.Expression, objx, context));
                Expression testType = Expression.Call(null,Compiler.Method_Util_IsNonCharNumeric,parm);          // matching JVM's handling of char as non-integer
                Expression expr = GenShiftMask(Expression.Call(null,Compiler.Method_Util_ConvertToInt,parm));
                return Expression.Block(
                    new ParameterExpression[] { parm },
                    initParm,
                    Expression.IfThen(Expression.Not(testType), Expression.Goto(defaultLabel)),
                    expr);
            }
            else if (exprType == typeof(long) || exprType == typeof(int) || exprType == typeof(short) || exprType == typeof(byte) || exprType == typeof(ulong) || exprType == typeof(uint) || exprType == typeof(ushort) || exprType == typeof(sbyte))
            {
                Expression expr = Expression.Convert(_expr.GenCodeUnboxed(RHC.Expression, objx, context),typeof(int));
                return GenShiftMask(expr);
            }
            else
            {
                return Expression.Goto(defaultLabel);
            }
        }