picolisp

Unnamed repository; edit this file to name it for gitweb.
git clone https://logand.com/git/picolisp.git/
Log | Files | Refs | README | LICENSE

commit 77fec385c1e860698f96b1233a722fb77510093f
parent 358385dba885a3a5b39e8a78ff7bd88bf150fa62
Author: Alexander Burger <abu@software-lab.de>
Date:   Sun, 10 Feb 2013 09:48:16 +0100

Extended float and double support in ErsatzLisp (as suggested by Samuel Dennis Borlongan)
Diffstat:
Mersatz/fun.src | 25++++++++++++++++++++++++-
Mersatz/picolisp.jar | 0
Msrc/vers.h | 2+-
Msrc64/tags | 126+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
Msrc64/version.l | 4++--
5 files changed, 147 insertions(+), 10 deletions(-)

diff --git a/ersatz/fun.src b/ersatz/fun.src @@ -1,4 +1,4 @@ -# 04jan13abu +# 10feb13abu # (c) Software Lab. Alexander Burger # Ersatz PicoLisp Functions @@ -90,6 +90,8 @@ java (num i j k x y z s v o) return new Number(((Integer)s.Obj).intValue()); if (s.Obj instanceof Long) return new Number(((Long)s.Obj).longValue()); + if (s.Obj instanceof Float) + return strToNum(Float.toString(((Float)s.Obj).floatValue()), xInt(z)); if (s.Obj instanceof Double) return strToNum(Double.toString(((Double)s.Obj).doubleValue()), xInt(z)); if (s.Obj instanceof BigInteger) @@ -117,6 +119,12 @@ java (num i j k x y z s v o) for (i = a.length; --i >= 0;) x = new Cell(new Number(a[i]), x); } + else if (s.Obj instanceof float[]) { + float[] a = (float[])s.Obj; + j = xInt(z); + for (i = a.length; --i >= 0;) + x = new Cell(strToNum(Float.toString(a[i]), i), x); + } else if (s.Obj instanceof double[]) { double[] a = (double[])s.Obj; j = xInt(z); @@ -163,6 +171,10 @@ java (num i j k x y z s v o) arg[i] = Array.newInstance(Integer.TYPE, k); else if (s.Obj instanceof Long) arg[i] = Array.newInstance(Long.TYPE, k); + else if (s.Obj instanceof Float) + arg[i] = Array.newInstance(Float.TYPE, k); + else if (s.Obj instanceof Double) + arg[i] = Array.newInstance(Double.TYPE, k); else arg[i] = Array.newInstance(s.Obj.getClass(), k); for (j = 0; j < k; ++j, v[i] = v[i].Cdr) @@ -182,6 +194,10 @@ java (num i j k x y z s v o) par[i] = Integer.TYPE; else if (s.Obj instanceof Long) par[i] = Long.TYPE; + else if (s.Obj instanceof Float) + par[i] = Float.TYPE; + else if (s.Obj instanceof Double) + par[i] = Double.TYPE; else par[i] = s.Obj.getClass(); } @@ -268,6 +284,13 @@ int: () long: () return new Symbol(new Long(evLong(ex.Cdr))); +# (float: 'str 'cnt) -> obj +# (float: 'num 'cnt) -> obj +float: (x) + if ((x = (ex = ex.Cdr).Car.eval()) instanceof Number) + return new Symbol(new Float(((Number)x).toString(evInt(ex.Cdr), '.', '\0'))); + return new Symbol(new Float(x.name())); + # (double: 'str 'cnt) -> obj # (double: 'num 'cnt) -> obj double: (x) diff --git a/ersatz/picolisp.jar b/ersatz/picolisp.jar Binary files differ. diff --git a/src/vers.h b/src/vers.h @@ -1 +1 @@ -static byte Version[4] = {3,1,1,11}; +static byte Version[4] = {3,1,1,12}; diff --git a/src64/tags b/src64/tags @@ -48,6 +48,120 @@ CHAR_LETTER63,1499 CHAR_DIGIT64,1520 +sys/x86-64.linux.defs.l,1959 +ENOENT5,59 +EINTR6,108 +EBADF7,155 +EAGAIN8,194 +EACCES9,227 +EPIPE10,268 +ECONNRESET11,303 +O_RDONLY14,365 +O_WRONLY15,382 +O_RDWR16,399 +O_CREAT17,414 +O_EXCL18,431 +O_TRUNC19,448 +O_APPEND20,466 +F_GETFD21,486 +F_SETFD22,502 +FD_CLOEXEC23,518 +BUFSIZ26,546 +PIPE_BUF27,564 +MAXPATHLEN29,585 +RTLD_LAZY32,613 +RTLD_GLOBAL33,631 +FLOCK36,662 +L_TYPE37,702 +L_WHENCE38,722 +L_START39,744 +L_LEN40,760 +L_PID41,775 +SEEK_SET42,790 +SEEK_CUR43,807 +F_RDLCK44,824 +F_WRLCK45,840 +F_UNLCK46,856 +F_GETFL47,872 +F_SETFL48,888 +F_GETLK49,904 +F_SETLK50,920 +F_SETLKW51,936 +F_SETOWN52,953 +O_NONBLOCK53,970 +O_ASYNC54,992 +STAT57,1019 +ST_MODE58,1061 +ST_SIZE59,1083 +ST_MTIME60,1100 +S_IFMT61,1118 +S_IFDIR62,1144 +TMS65,1180 +TMS_UTIME66,1214 +TMS_STIME67,1232 +TERMIOS70,1261 +C_IFLAG71,1304 +C_LFLAG72,1320 +C_CC73,1337 +ISIG74,1351 +VMIN75,1364 +VTIME76,1377 +TCSADRAIN77,1391 +SIGACTION80,1419 +SIGSET_T81,1462 +SA_HANDLER82,1481 +SA_MASK83,1500 +SA_FLAGS84,1516 +SIG_DFL86,1536 +SIG_IGN87,1552 +SIG_UNBLOCK88,1568 +SIGHUP90,1589 +SIGINT91,1615 +SIGUSR192,1630 +SIGUSR293,1647 +SIGPIPE94,1664 +SIGALRM95,1681 +SIGTERM96,1698 +SIGCHLD97,1715 +SIGCONT98,1732 +SIGSTOP99,1749 +SIGTSTP100,1766 +SIGTTIN101,1783 +SIGTTOU102,1800 +SIGIO103,1817 +SIGNALS104,1832 +WNOHANG107,1894 +WUNTRACED108,1910 +FD_SET111,1938 +TM_SEC114,1975 +TM_MIN115,1990 +TM_HOUR116,2005 +TM_MDAY117,2021 +TM_MON118,2038 +TM_YEAR119,2054 +D_NAME122,2078 +SOCK_STREAM125,2105 +SOCK_DGRAM126,2125 +AF_UNSPEC127,2144 +AF_INET6128,2162 +SOL_SOCKET129,2180 +SO_REUSEADDR130,2199 +IPPROTO_IPV6131,2220 +IPV6_V6ONLY132,2242 +INET6_ADDRSTRLEN133,2263 +NI_MAXHOST135,2290 +NI_NAMEREQD136,2312 +SOCKADDR_IN6138,2333 +SIN6_FAMILY139,2355 +SIN6_PORT140,2375 +SIN6_ADDR141,2393 +ADDRINFO143,2412 +AI_FAMILY144,2430 +AI_SOCKTYPE145,2448 +AI_ADDRLEN146,2468 +AI_ADDR147,2488 +AI_NEXT148,2505 + ./glob.l,4310 Data4,51 AV7,77 @@ -1138,9 +1252,9 @@ getUdpZ_FB373,9872 putUdpBZ380,10017 -sys/emu.code.l,95 -errno_A8,134 -errnoC16,260 -wifstoppedS_F24,409 -wifsignaledS_F32,570 -wtermsigS_A40,725 +sys/x86-64.linux.code.l,94 +errno_A5,67 +errnoC10,169 +wifstoppedS_F16,287 +wifsignaledS_F21,413 +wtermsigS_A28,568 diff --git a/src64/version.l b/src64/version.l @@ -1,6 +1,6 @@ -# 06feb13abu +# 10feb13abu # (c) Software Lab. Alexander Burger -(de *Version 3 1 1 11) +(de *Version 3 1 1 12) # vi:et:ts=3:sw=3