From a53e41cd426ebd2181d036e83ab0f8e69de9a8bf Mon Sep 17 00:00:00 2001 From: Rich Hickey Date: Tue, 10 Oct 2006 19:41:48 +0000 Subject: changed box functions to box for clojure consumption --- src/cli/runtime/RT.cs | 58 ++++++++++++++++++++++---------------------- src/cli/runtime/Reflector.cs | 2 +- 2 files changed, 30 insertions(+), 30 deletions(-) (limited to 'src/cli/runtime') diff --git a/src/cli/runtime/RT.cs b/src/cli/runtime/RT.cs index 059bdad6..40626d62 100644 --- a/src/cli/runtime/RT.cs +++ b/src/cli/runtime/RT.cs @@ -302,41 +302,41 @@ static public Object assocN(int n, Object val, Object coll) { return x; } - static public Object box(bool x) - { - return x; - } - - static public Object box(byte x) - { - return x; - } + static public Object box(bool x) + { + return x ? T : null; + } - static public Object box(short x) - { - return x; - } + static public Num box(byte x) + { + return Num.from(x); + } - static public Object box(int x) - { - return x; - } + static public Num box(short x) + { + return Num.from(x); + } - static public Object box(long x) - { - return x; - } + static public Num box(int x) + { + return Num.from(x); + } - static public Object box(float x) - { - return x; - } + static public Num box(long x) + { + return Num.from(x); + } - static public Object box(double x) - { - return x; - } + static public Num box(float x) + { + return Num.from(x); + } + static public Num box(double x) + { + return Num.from(x); + } + static public char charCast(Object x) { return Convert.ToChar(x); } static public bool booleanCast(Object x) { if(x is Boolean) diff --git a/src/cli/runtime/Reflector.cs b/src/cli/runtime/Reflector.cs index e198661b..483c4029 100644 --- a/src/cli/runtime/Reflector.cs +++ b/src/cli/runtime/Reflector.cs @@ -154,7 +154,7 @@ public static Object invokeInstanceMember(String name, Object target) //throws E return methods; } -static Object boxArg(Type paramType, Object arg) { Type argType = arg.GetType(); if(paramType == argType) return arg; if(paramType == typeof(bool)) { return arg != null; } else if(paramType.IsPrimitive && arg is Num) { Num n = (Num) arg; if(paramType == typeof(int)) return RT.box(n.intValue()); else if(paramType == typeof(float)) return RT.box(n.floatValue()); else if(paramType == typeof(double)) return RT.box(n.doubleValue()); else if(paramType == typeof(long)) return RT.box(n.longValue()); else if(paramType == typeof(char)) return RT.box((char) n.intValue()); else if(paramType == typeof(short)) return RT.box(n.shortValue()); else if(paramType == typeof(byte)) return RT.box(n.byteValue()); else throw new ArgumentException("Cannot convert to primitive type: " + paramType.Name); } else return arg; } static Object[] boxArgs(ParameterInfo[] parms, Object[] args) { if(parms.Length == 0) return null; Object[] ret = new Object[parms.Length]; for(int i = 0; i < parms.Length; i++) { Object arg = args[i]; Type paramType = parms[i].ParameterType; ret[i] = boxArg(paramType, arg); } return ret; } +static Object boxArg(Type paramType, Object arg) { Type argType = arg.GetType(); if(paramType == argType) return arg; if(paramType == typeof(bool)) { return arg != null; } else if(paramType.IsPrimitive && arg is Num) { Num n = (Num) arg; if(paramType == typeof(int)) return n.intValue(); else if(paramType == typeof(float)) return n.floatValue(); else if(paramType == typeof(double)) return n.doubleValue(); else if(paramType == typeof(long)) return n.longValue(); else if(paramType == typeof(char)) return (char) n.intValue(); else if(paramType == typeof(short)) return n.shortValue(); else if(paramType == typeof(byte)) return n.byteValue(); else throw new ArgumentException("Cannot convert to primitive type: " + paramType.Name); } else return arg; } static Object[] boxArgs(ParameterInfo[] parms, Object[] args) { if(parms.Length == 0) return null; Object[] ret = new Object[parms.Length]; for(int i = 0; i < parms.Length; i++) { Object arg = args[i]; Type paramType = parms[i].ParameterType; ret[i] = boxArg(paramType, arg); } return ret; } static Object prepRet(Object x) { -- cgit v1.2.3-70-g09d2