commit 204feba4ab5e7c78f5b67c490ba25930cdee9759
parent 705745a59e9e838193c1c0a35feb97b6f121d0f1
Author: tomas <tomas@logand.com>
Date:   Sun, 11 Oct 2009 14:51:58 +0200
let? jnum heap impl
Diffstat:
2 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/java.wl b/java.wl
@@ -150,11 +150,11 @@
       (and (not Y) T)
       (and Y T) ) )
 
-(de let? L
-   (let (K (pop 'L) V (eval (pop 'L) 1))
-      (when V
-         (def 'K V)
-         (run L 1 '(K)) ) ) ) # TODO
+# (de let? L
+#    (let (K (pop 'L) V (eval (pop 'L) 1))
+#       (when V
+#          (def 'K V)
+#          (run L 1 '(K)) ) ) ) # TODO
 
 (de println @
    (pass print)
@@ -211,3 +211,15 @@
          (setq Z (Z 'reminder Y)) ) ) )
 
 (de + @ (- (pass - 0)))
+
+(de jnum (X)
+   (jnew `(jclass 'java.math.BigInteger) (X ' toString)) )
+
+(de heap @
+   (let R `((jclass 'java.lang.Runtime) 'getRuntime)
+      (/ (if (args)
+            (if (=T (next))
+               (jnum (R 'freeMemory))
+               (jnum (R 'maxMemory)) )
+            (- (jnum (R 'totalMemory)) (jnum (R 'freeMemory))) )
+         `(* 1024 1024) ) ) )
diff --git a/wl.java b/wl.java
@@ -712,6 +712,19 @@ class wl implements Runnable {
             } else err(E, "Don't know how to let");
             return Z;
         }});
+        fn("let?", new Fn() {public Any fn(Any E) {
+            Any Z = NIL;
+            Any I = E.cdr();
+            Any L = I.car();
+            I = I.cdr();
+            Any V = eval(I.car());
+            if(NIL != V) {
+                bind(L, V);
+                Z = xrun(I.cdr());
+                unbind();
+            }
+            return Z;
+        }});
         fn("use", new Fn() {public Any fn(Any E) {
             Any Z = NIL;
             Any I = E.cdr();