commit 101bc47198243e7c91907426102eb4a141275ac8
parent 784ec09a55ec28a69b5f88e809b451d2b0c62804
Author: tomas <tomas@logand.com>
Date: Fri, 30 Oct 2009 20:11:26 +0100
bind, jeq, sys and println prinl fix
Diffstat:
M | java.wl | | | 12 | ++++++++---- |
M | wl.java | | | 32 | ++++++++++++++++++++++++++++++++ |
2 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/java.wl b/java.wl
@@ -261,12 +261,12 @@
(de last (L) (foldl1 '((X Y) Y) L))
(de println @
- (pass print)
- (prin "^J") )
+ (prog1 (pass print)
+ (prin "^J") ) )
(de prinl @
- (pass prin)
- (prin "^J") )
+ (prog1 (pass prin)
+ (prin "^J") ) )
(de * @ (when (args) (foldl1 '((X Y) (X 'multiply Y)) (rest))))
(de / @ (when (args) (foldl1 '((X Y) (X 'divide Y)) (rest))))
@@ -469,3 +469,7 @@
(if (num? X)
(1- X)
(set X (- (val X) (or (next) 1))) ) )
+
+(de sys (K . @) (`(jclass 'java.lang.System) 'getenv K))
+
+#(de exec () (`((jclass 'java.lang.Runtime) 'getRuntime) 'gc))
diff --git a/wl.java b/wl.java
@@ -973,6 +973,29 @@ class wl implements Runnable {
} else err(E, "Don't know how to job");
return Z;
}});
+ fn("bind", new Fn() {public Any fn(Any E) {
+ Any Z = NIL;
+ Any I = E.cdr();
+ Any L = eval(I.car());
+ if(L.isCons()) { // (let (K 'V ...) . P)
+ int n = 0;
+ while(L.isCons()) {
+ Any C = L.car();
+ L = L.cdr();
+ if(C.isCons()) bind(C.car(), C.cdr());
+ else if(C.isSym()) bind(C);
+ else err(E, "Don't know how to bind");
+ n++;
+ }
+ try {Z = xrun(I.cdr());}
+ finally {unbind(n);}
+ } else if(L.isIsym()) { // (bind L . P)
+ bind(L);
+ try {Z = xrun(I.cdr());}
+ finally {unbind();}
+ } else err(E, "Don't know how to bind");
+ return Z;
+ }});
fn("up", new Fn() {public Any fn(Any E) { // (up [cnt] sym ['val])
Any Z;
Any I = E.cdr();
@@ -1119,6 +1142,15 @@ class wl implements Runnable {
Z = mkObj(r);
return Z;
}});
+ fn("jeq", new Fn() {public Any fn(Any E) {
+ Any I = E.cdr();
+ if(I.isCons()) {
+ Any X = eval(I.car());
+ for(I = I.cdr(); I.isCons(); I = I.cdr())
+ if(X.obj() != eval(I.car()).obj()) return NIL;
+ }
+ return T;
+ }});
fn("wait", new Fn() {public Any fn(Any E) { // wait ['cnt] . prg
Any Z = NIL;
// TODO poll from Que with timeout cnt unless run(prg)