Exemplo n.º 1
0
        protected static Expression GetCons(object args, CodeBlock cb)
        {
            if (args is Annotation)
            {
                args = ((Annotation)args).stripped;
            }
            Cons c = args as Cons;

            if (c != null)
            {
                if (inconstant)
                {
                    return(GetConsList(c, cb));
                }
                else
                {
                    return(Ast.Constant(new IronSchemeConstant(c, cb)));
                }
            }
            object[] v = args as object[];
            if (v != null)
            {
                return(GetConsVector(v, cb));
            }
            else if (args is byte[])
            {
                return(Ast.Constant(new ArrayConstant <byte>((byte[])args)));
            }
            else if (args is int[])
            {
                return(Ast.Constant(new ArrayConstant <int>((int[])args)));
            }
            else if (args is double[])
            {
                return(Ast.Constant(new ArrayConstant <double>((double[])args)));
            }
            else if (args is Fraction)
            {
                Fraction f = (Fraction)args;
                return(Ast.Constant(new FractionConstant(f)));
            }
            else if (args is ComplexFraction)
            {
                ComplexFraction cf = (ComplexFraction)args;
                return(Ast.Constant(new ComplexFractionConstant(cf)));
            }
            else if (args is SchemeChar)
            {
                SchemeChar f = (SchemeChar)args;
                return(Ast.Constant(new SchemeCharConstant(f)));
            }
            else if (args is StringBuilder)
            {
                StringBuilder f = (StringBuilder)args;
                return(Ast.Constant(f.ToString()));
            }
            else
            {
                if (args is long)
                {
                    args = (BigInteger)(long)args;
                }
                if (args != null && args.GetType().Namespace.StartsWith("record."))
                {
                    args = new SerializedConstant(args);
                }
                return(Ast.Constant(args));
            }
        }
Exemplo n.º 2
0
 public SchemeCharConstant(SchemeChar f)
 {
     value = f;
 }
Exemplo n.º 3
0
        protected static Expression GetCons(object args, CodeBlock cb)
        {
            if (args is Annotation)
            {
                args = ((Annotation)args).stripped;
            }
            Cons c = args as Cons;

            if (c != null)
            {
                if (inconstant)
                {
                    return(GetConsList(c, cb));
                }
                else
                {
                    return(Ast.Constant(new IronSchemeConstant(c, cb)));
                }
            }
            object[] v = args as object[];
            if (v != null)
            {
                return(GetConsVector(v, cb));
            }
            else if (args is byte[])
            {
                return(Ast.Constant(new ArrayConstant <byte>((byte[])args)));
            }
            else if (args is int[])
            {
                return(Ast.Constant(new ArrayConstant <int>((int[])args)));
            }
            else if (args is double[])
            {
                return(Ast.Constant(new ArrayConstant <double>((double[])args)));
            }
            else if (args is Fraction)
            {
                Fraction f = (Fraction)args;
                return(Ast.Constant(new FractionConstant(f)));
            }
            else if (args is ComplexFraction)
            {
                ComplexFraction cf = (ComplexFraction)args;
                return(Ast.Constant(new ComplexFractionConstant(cf)));
            }
            else if (args is SchemeChar)
            {
                SchemeChar f = (SchemeChar)args;
                return(Ast.Constant(new SchemeCharConstant(f)));
            }
            else if (args is StringBuilder)
            {
                StringBuilder f = (StringBuilder)args;
                return(Ast.Constant(f.ToString()));
            }
            else if (args is RecordTypeDescriptor || args is RecordConstructorDescriptor || args is Callable)
            {
                //TODO: this is probably very bad, but using it now as it is the best I can do
                var name = Builtins.GenSym();
                Builtins.SetSymbolValueFast(name, args);
                return(Ast.SimpleCallHelper(typeof(Builtins).GetMethod("SymbolValue"), Ast.Constant(name)));
            }
            else
            {
                if (args is long)
                {
                    args = (BigInteger)(long)args;
                }
                if (args != null && args.GetType().Namespace.StartsWith("record."))
                {
                    args = new SerializedConstant(args);
                }
                return(Ast.Constant(args));
            }
        }