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)); } }
public SchemeCharConstant(SchemeChar f) { value = f; }
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)); } }