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:
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