From: <cli...@li...> - 2007-12-26 18:06:43
|
Send clisp-cvs mailing list submissions to cli...@li... To subscribe or unsubscribe via the World Wide Web, visit https://lists.sourceforge.net/lists/listinfo/clisp-cvs or, via email, send a message with subject or body 'help' to cli...@li... You can reach the person managing the list at cli...@li... When replying, please edit your Subject line so it is more specific than "Re: Contents of clisp-cvs digest..." CLISP CVS commits for today Today's Topics: 1. clisp/src weak.d,1.7,1.8 ChangeLog,1.5872,1.5873 (Sam Steingold) 2. clisp/src win32.d,1.68,1.69 ChangeLog,1.5873,1.5874 (Sam Steingold) 3. clisp/src symbol.d,1.41,1.42 ChangeLog,1.5874,1.5875 (Sam Steingold) 4. clisp/src time.d, 1.62, 1.63 spvw_gcstat.d, 1.7, 1.8 lispbibl.d, 1.750, 1.751 ChangeLog, 1.5875, 1.5876 (Sam Steingold) ---------------------------------------------------------------------- Message: 1 Date: Wed, 26 Dec 2007 18:00:23 +0000 From: Sam Steingold <sd...@us...> Subject: clisp/src weak.d,1.7,1.8 ChangeLog,1.5872,1.5873 To: cli...@li... Message-ID: <E1J...@ma...> Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv22366/src Modified Files: weak.d ChangeLog Log Message: rurban 33_trans2 Index: weak.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/weak.d,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- weak.d 5 Dec 2007 16:06:30 -0000 1.7 +++ weak.d 26 Dec 2007 18:00:19 -0000 1.8 @@ -64,7 +64,7 @@ /* (SETF (WEAK-POINTER-VALUE weak-pointer) value) */ LISPFUNN(set_weak_pointer_value,2) { - # Stack layout: value, weak-pointer. + /* Stack layout: value, weak-pointer. */ var object wp = check_weakpointer(STACK_0); var object value = STACK_1; skipSTACK(2); @@ -83,7 +83,7 @@ local void copy_list_into_weak_list (object l, uintL len, object wl, uintL maxlen) { var uintL i; for (i = 0; i < len; i++, l = Cdr(l)) { - if (atomp(l)) # Huh? The list became shorter meanwhile. + if (atomp(l)) /* Huh? The list became shorter meanwhile. */ break; TheWeakList(wl)->wl_elements[i] = Car(l); } @@ -148,19 +148,19 @@ var object mwl = STACK_0 = check_weaklist(STACK_0); var object wl = TheMutableWeakList(mwl)->mwl_list; var uintL len = posfixnum_to_V(TheWeakList(wl)->wl_count); - # Allocate result list. + /* Allocate result list. */ pushSTACK(NIL); var object result = make_list(len); skipSTACK(1); - # Fetch mwl, wl, len again. + /* Fetch mwl, wl, len again. */ mwl = popSTACK(); wl = TheMutableWeakList(mwl)->mwl_list; var uintL newlen = posfixnum_to_V(TheWeakList(wl)->wl_count); - # The weak list may have shrunk during the allocation of the result. + /* The weak list may have shrunk during the allocation of the result. */ ASSERT(newlen <= len); for (; len > newlen; len--) result = Cdr(result); - { # Fill the result list. + { /* Fill the result list. */ var uintL i = 0; var object l; for (l = result; newlen > 0; l = Cdr(l), newlen--) { @@ -177,13 +177,13 @@ /* (SETF (WEAK-LIST-LIST weak-list) list) replaces the list of objects stored by a weak-list. */ LISPFUNN(set_weak_list_list,2) { - # Stack layout: list, weak-list. + /* Stack layout: list, weak-list. */ STACK_0 = check_weaklist(STACK_0); STACK_1 = check_list(STACK_1); var uintL len = llength(STACK_1); var uintL maxlen = Lrecord_length(TheMutableWeakList(STACK_0)->mwl_list)-2; if (len <= maxlen) { - # Can reuse the WeakList object. + /* Can reuse the WeakList object. */ var object wl = TheMutableWeakList(STACK_0)->mwl_list; set_break_sem_1(); copy_list_into_weak_list(STACK_1,len,wl,maxlen); @@ -191,8 +191,8 @@ if (eq(TheWeakList(wl)->wp_cdr,unbound)) activate_weak(wl); /* add to O(all_weakpointers) if needed */ } else { - # Need to allocate a new WeakList object. - maxlen = maxlen + maxlen/4; # augment size proportionally + /* Need to allocate a new WeakList object. */ + maxlen = maxlen + maxlen/4; /* augment size proportionally */ if (maxlen < len) maxlen = len; var object wl = allocate_lrecord(Rectype_WeakList,2+maxlen,lrecord_type); @@ -410,7 +410,7 @@ replaces the value stored in a weak-mapping. It has no effect when the key has already been garbage-collected. */ LISPFUNN(set_weak_mapping_value,2) { - # Stack layout: value, weak-mapping. + /* Stack layout: value, weak-mapping. */ var object wm = check_weakmapping(STACK_0); var object value = STACK_1; skipSTACK(2); @@ -512,7 +512,7 @@ replaces the value stored in a weak-and-mapping. It has no effect when some key has already been garbage-collected. */ LISPFUNN(set_weak_and_mapping_value,2) { - # Stack layout: value, weak-and-mapping. + /* Stack layout: value, weak-and-mapping. */ var object wam = check_weakandmapping(STACK_0); var object value = STACK_1; skipSTACK(2); @@ -614,7 +614,7 @@ replaces the value stored in a weak-or-mapping. It has no effect when the keys have already been garbage-collected. */ LISPFUNN(set_weak_or_mapping_value,2) { - # Stack layout: value, weak-or-mapping. + /* Stack layout: value, weak-or-mapping. */ var object wom = check_weakormapping(STACK_0); var object value = STACK_1; skipSTACK(2); @@ -626,19 +626,19 @@ VALUES1(value); } -/* ======================== Weak Association Lists ======================== */ +/* ======================== Weak Association Lists ======================== -# Note that the GC is not allowed to compact the pairs in a WeakAlist, -# because that would lead to undefined behaviour in WEAK-ALIST-ASSOC and -# WEAK-ALIST-RASSOC. But (SETF WEAK-ALIST-VALUE) is allowed to compact a -# WeakAlist. + Note that the GC is not allowed to compact the pairs in a WeakAlist, + because that would lead to undefined behaviour in WEAK-ALIST-ASSOC and + WEAK-ALIST-RASSOC. But (SETF WEAK-ALIST-VALUE) is allowed to compact a + WeakAlist. -/* Copy an alist of length len into a weak-alist of size maxlen >= len. */ + Copy an alist of length len into a weak-alist of size maxlen >= len. */ local void copy_alist_into_weak_alist (object list, uintL len, object wal, uintL maxlen) { var uintL i; var object l; for (i = 0, l = list; i < len; i++, l = Cdr(l)) { - if (atomp(l)) # Huh? The list became shorter meanwhile. + if (atomp(l)) /* Huh? The list became shorter meanwhile. */ break; var object pair = Car(l); if (!consp(pair)) { @@ -664,17 +664,17 @@ an alist. */ LISPFUN(make_weak_alist,seclass_read,0,0,norest,key,2, (kw(type),kw(initial_contents)) ) -{ # Stack layout: type, initial-contents. - # Check the type. +{ /* Stack layout: type, initial-contents. */ + /* Check the type. */ var object type = STACK_1; var sintB rectype; - if (eq(type,unbound) || eq(type,S(Kkey))) # :KEY + if (eq(type,unbound) || eq(type,S(Kkey))) /* :KEY */ rectype = Rectype_WeakAlist_Key; - else if (eq(type,S(Kvalue))) # :VALUE + else if (eq(type,S(Kvalue))) /* :VALUE */ rectype = Rectype_WeakAlist_Value; - else if (eq(type,S(Kkey_and_value))) # :KEY-AND-VALUE + else if (eq(type,S(Kkey_and_value))) /* :KEY-AND-VALUE */ rectype = Rectype_WeakAlist_Either; - else if (eq(type,S(Kkey_or_value))) # :KEY-OR-VALUE + else if (eq(type,S(Kkey_or_value))) /* :KEY-OR-VALUE */ rectype = Rectype_WeakAlist_Both; else { pushSTACK(type); /* TYPE-ERROR slot DATUM */ @@ -683,7 +683,7 @@ pushSTACK(type); pushSTACK(TheSubr(subr_self)->name); error(type_error,GETTEXT("~S: argument ~S should be ~S, ~S, ~S or ~S.")); } - # Check the initial-contents. + /* Check the initial-contents. */ if (eq(STACK_0,unbound)) STACK_0 = NIL; else @@ -759,19 +759,19 @@ var object mwal = STACK_0 = check_weakalist(STACK_0); var object wal = TheMutableWeakAlist(mwal)->mwal_list; var uintL len = posfixnum_to_V(TheWeakAlist(wal)->wal_count); - # Allocate result list. + /* Allocate result list. */ pushSTACK(NIL); var object result = make_list(2*len); skipSTACK(1); - # Fetch mwal, wal, len again. + /* Fetch mwal, wal, len again. */ mwal = popSTACK(); wal = TheMutableWeakAlist(mwal)->mwal_list; var uintL newlen = posfixnum_to_V(TheWeakAlist(wal)->wal_count); - # The weak alist may have shrunk during the allocation of the result. + /* The weak alist may have shrunk during the allocation of the result. */ ASSERT(newlen <= len); for (; len > newlen; len--) result = Cdr(Cdr(result)); - { # Fill the result list. + { /* Fill the result list. */ var uintL i = 0; var object l; for (l = result; newlen > 0; l = Cdr(l), newlen--) { @@ -798,13 +798,13 @@ replaces the contents of a weak-alist. The contents argument must be an alist. */ LISPFUNN(set_weak_alist_contents,2) { - # Stack layout: contents, weak-alist. + /* Stack layout: contents, weak-alist. */ STACK_0 = check_weakalist(STACK_0); STACK_1 = check_list(STACK_1); var uintL len = llength(STACK_1); var uintL maxlen = (Lrecord_length(TheMutableWeakAlist(STACK_0)->mwal_list)-2)/2; if (len <= maxlen) { - # Can reuse the WeakAlist object. + /* Can reuse the WeakAlist object. */ var object wal = TheMutableWeakAlist(STACK_0)->mwal_list; set_break_sem_1(); copy_alist_into_weak_alist(STACK_1,len,wal,maxlen); @@ -814,8 +814,8 @@ activate_weak(wal); /* add to O(all_weakpointers) if needed */ #endif } else { - # Need to allocate a new WeakAlist object. - maxlen = maxlen + maxlen/4; # augment size proportionally + /* Need to allocate a new WeakAlist object. */ + maxlen = maxlen + maxlen/4; /* augment size proportionally */ if (maxlen < len) maxlen = len; var sintB rectype = Record_type(TheMutableWeakAlist(STACK_0)->mwal_list); @@ -829,45 +829,44 @@ skipSTACK(2); } -# UP: Ãberprüft das :KEY-Argument -# test_key_arg() -# > STACK_0: optionales Argument -# < STACK_0: korrekte KEY-Funktion +/* UP: Checks the :KEY argument + test_key_arg() + > STACK_0: optional argument + < STACK_0: correct KEY function */ local void test_key_arg (void) { var object key_arg = STACK_0; if (missingp(key_arg)) - STACK_0 = L(identity); # #'IDENTITY als Default für :KEY + STACK_0 = L(identity); /* #'IDENTITY as default for :KEY */ } -# Applies a :KEY argument. -# funcall_key(key,item); -# > key: value of the :KEY argument -# > item: object being considered -# < value1: (FUNCALL key item) -#define funcall_key(key,item) \ - { \ - var object _key = (key); \ - var object _item = (item); \ - # shortcut for :KEY #'IDENTITY, very frequent \ - if (!eq(_key,L(identity))) { \ - pushSTACK(_item); funcall(_key,1); \ - } else { \ - value1 = _item; \ - } \ - } +/* Applies a :KEY argument. + funcall_key(key,item); + > key: value of the :KEY argument + > item: object being considered + < value1: (FUNCALL key item) */ +#define funcall_key(key,item) do { \ + var object _key = (key); \ + var object _item = (item); \ + /* shortcut for :KEY #'IDENTITY, very frequent */ \ + if (!eq(_key,L(identity))) { \ + pushSTACK(_item); funcall(_key,1); \ + } else { \ + value1 = _item; \ + } \ + } while(0) -# Unterprogramm zum Ausführen des Tests :TEST -# up_test(stackptr,x) -# > *(stackptr+1): die Testfunktion -# > *(stackptr+3): das zu vergleichende Item -# > x: Argument -# < result: true falls der Test erfüllt ist, false sonst -# can trigger GC +/* Subroutine to compute the test :TEST + up_test(stackptr,x) + > *(stackptr+1): the test function + > *(stackptr+3): the item to compare with + > x: the argument + < result: true if the test is okay, otherwise false. + can trigger GC */ local maygc bool up_test (const gcv_object_t* stackptr, object x) { - # nach CLTL S. 247 ein (funcall testfun item x) ausführen: + /* Per CLTL p.247 do a (funcall testfun item x): */ var object item = *(stackptr STACKop 3); var object fun = *(stackptr STACKop 1); - # Special case the most frequent cases, + /* Special case the most frequent cases, */ if (eq(fun,L(eq))) return eq(item,x); if (eq(fun,L(eql))) @@ -875,62 +874,56 @@ if (eq(fun,L(equal))) return equal(item,x); pushSTACK(item); - pushSTACK(x); # x + pushSTACK(x); /* x */ funcall(fun,2); - if (nullp(value1)) - return false; - else - return true; + return !nullp(value1); } -# Unterprogramm zum Ausführen des Tests :TEST-NOT -# up_test_not(stackptr,x) -# > *(stackptr+0): die Testfunktion -# > *(stackptr+3): das zu vergleichende Item -# > x: Argument -# < result: true falls der Test erfüllt ist, false sonst -# can trigger GC +/* Subroutine to compute the test :TEST-NOT + up_test_not(stackptr,x) + > *(stackptr+1): the test function + > *(stackptr+3): the item to compare with + > x: the argument + < result: true if the test is okay, otherwise false. + can trigger GC */ local maygc bool up_test_not (const gcv_object_t* stackptr, object x) { - # nach CLTL S. 247 ein (not (funcall testfun item x)) ausführen: - pushSTACK(*(stackptr STACKop 3)); # item - pushSTACK(x); # x + /* Per CLTL p.247 do a (not (funcall testfun item x)): */ + pushSTACK(*(stackptr STACKop 3)); /* item */ + pushSTACK(x); /* x */ funcall(*(stackptr STACKop 0),2); - if (nullp(value1)) - return true; - else - return false; + return nullp(value1); } -# UP: Ãberprüft die :TEST, :TEST-NOT - Argumente -# test_test_args() -# > stackptr: Pointer in den STACK -# > *(stackptr+1): :TEST-Argument -# > *(stackptr+0): :TEST-NOT-Argument -# < *(stackptr+1): verarbeitetes :TEST-Argument -# < *(stackptr+0): verarbeitetes :TEST-NOT-Argument -# < up_fun: Adresse einer Testfunktion, die wie folgt spezifiziert ist: -# > stackptr: derselbe Pointer in den Stack, *(stackptr+3) = item, -# *(stackptr+1) = :test-Argument, *(stackptr+0) = :test-not-Argument, -# > x: Argument -# < true, falls der Test erfüllt ist, false sonst. - # up_function_t sei der Typ der Adresse einer solchen Testfunktion: +/* UP: Check the :TEST, :TEST-NOT - arguments + test_test_args() + > stackptr: Pointer to the STACK + > *(stackptr+1): :TEST argument + > *(stackptr+0): :TEST-NOT argument + < *(stackptr+1): computed :TEST argument + < *(stackptr+0): computed :TEST-NOT argument + < up_fun: Adress of a test function, specified like this: + > stackptr: same Pointer to the Stack, *(stackptr+3) = item, + *(stackptr+1) = :test argument, *(stackptr+0) = :test-not argument, + > x: the argument + < true, if the test returns true, otherwise false. + Let up_function_t be the type of such a test function address: */ typedef maygc bool (*up_function_t) (const gcv_object_t* stackptr, object x); local up_function_t test_test_args (gcv_object_t* stackptr) { var object test_arg = *(stackptr STACKop 1); if (!boundp(test_arg)) test_arg = NIL; - # test_arg ist das :TEST-Argument + /* test_arg is the :TEST argument */ var object test_not_arg = *(stackptr STACKop 0); if (!boundp(test_not_arg)) test_not_arg = NIL; - # test_not_arg ist das :TEST-NOT-Argument + /* test_not_arg is the :TEST-NOT argument */ if (nullp(test_not_arg)) { - # :TEST-NOT wurde nicht angegeben + /* :TEST-NOT was not specified */ if (nullp(test_arg)) - *(stackptr STACKop 1) = L(eql); # #'EQL als Default für :TEST + *(stackptr STACKop 1) = L(eql); /* #'EQL as default for :TEST */ return &up_test; } else { - # :TEST-NOT wurde angegeben + /* :TEST-NOT was not specified */ if (nullp(test_arg)) return &up_test_not; else @@ -943,23 +936,23 @@ (ASSOC item (WEAK-ALIST-CONTENTS weak-alist) [:test] [:test-not] [:key]). */ LISPFUN(weak_alist_assoc,seclass_default,2,0,norest,key,3, (kw(test),kw(test_not),kw(key)) ) -{ # Stack layout: item, weak-alist, test, test-not, key. - # Check weak-alist argument: +{ /* Stack layout: item, weak-alist, test, test-not, key. */ + /* Check weak-alist argument: */ STACK_3 = check_weakalist(STACK_3); - # Check :TEST/:TEST-NOT arguments in STACK_2,STACK_1: + /* Check :TEST/:TEST-NOT arguments in STACK_2,STACK_1: */ var up_function_t up_fun = test_test_args(&STACK_1); - # Check :KEY argument in STACK_0: + /* Check :KEY argument in STACK_0: */ test_key_arg(); - # Search: + /* Search: */ var object wal = TheMutableWeakAlist(STACK_3)->mwal_list; - # We cannot use TheWeakAlist(wal)->wal_count here, because it can be - # decremented by a GC happening during the loop. + /* We cannot use TheWeakAlist(wal)->wal_count here, because it can be */ + /* decremented by a GC happening during the loop. */ var uintL maxlen = (Lrecord_length(wal)-2)/2; pushSTACK(wal); pushSTACK(NIL); pushSTACK(NIL); - # Stack layout: item, weak-alist, test, test-not, key, - # wal, -, -. + /* Stack layout: item, weak-alist, test, test-not, key, + wal, -, -. */ var uintL i; for (i = 0; i < maxlen; i++) { var object key = TheWeakAlist(wal)->wal_data[2*i+0]; @@ -986,23 +979,23 @@ (RASSOC item (WEAK-ALIST-CONTENTS weak-alist) [:test] [:test-not] [:key]). */ LISPFUN(weak_alist_rassoc,seclass_default,2,0,norest,key,3, (kw(test),kw(test_not),kw(key)) ) -{ # Stack layout: item, weak-alist, test, test-not, key. - # Check weak-alist argument: +{ /* Stack layout: item, weak-alist, test, test-not, key. */ + /* Check weak-alist argument: */ STACK_3 = check_weakalist(STACK_3); - # Check :TEST/:TEST-NOT arguments in STACK_2,STACK_1: + /* Check :TEST/:TEST-NOT arguments in STACK_2,STACK_1: */ var up_function_t up_fun = test_test_args(&STACK_1); - # Check :KEY argument in STACK_0: + /* Check :KEY argument in STACK_0: */ test_key_arg(); - # Search: + /* Search: */ var object wal = TheMutableWeakAlist(STACK_3)->mwal_list; - # We cannot use TheWeakAlist(wal)->wal_count here, because it can be - # decremented by a GC happening during the loop. + /* We cannot use TheWeakAlist(wal)->wal_count here, because it can be + decremented by a GC happening during the loop. */ var uintL maxlen = (Lrecord_length(wal)-2)/2; pushSTACK(wal); pushSTACK(NIL); pushSTACK(NIL); - # Stack layout: item, weak-alist, test, test-not, key, - # wal, -, -. + /* Stack layout: item, weak-alist, test, test-not, key, + wal, -, -. */ var uintL i; for (i = 0; i < maxlen; i++) { var object value = TheWeakAlist(wal)->wal_data[2*i+1]; @@ -1029,20 +1022,20 @@ (CDR (WEAK-ALIST-ASSOC item weak-alist [:test] [:test-not]). */ LISPFUN(weak_alist_value,seclass_default,2,0,norest,key,2, (kw(test),kw(test_not)) ) -{ # Stack layout: item, weak-alist, test, test-not. - # Check weak-alist argument: +{ /* Stack layout: item, weak-alist, test, test-not. */ + /* Check weak-alist argument: */ STACK_2 = check_weakalist(STACK_2); - # Check :TEST/:TEST-NOT arguments in STACK_1,STACK_0: + /* Check :TEST/:TEST-NOT arguments in STACK_1,STACK_0: */ var up_function_t up_fun = test_test_args(&STACK_0); - # Search: + /* Search: */ var object wal = TheMutableWeakAlist(STACK_2)->mwal_list; - # We cannot use TheWeakAlist(wal)->wal_count here, because it can be - # decremented by a GC happening during the loop. + /* We cannot use TheWeakAlist(wal)->wal_count here, because it can be + decremented by a GC happening during the loop. */ var uintL maxlen = (Lrecord_length(wal)-2)/2; pushSTACK(wal); pushSTACK(NIL); - # Stack layout: item, weak-alist, test, test-not, - # wal, -. + /* Stack layout: item, weak-alist, test, test-not, + wal, -. */ var uintL i; for (i = 0; i < maxlen; i++) { var object key = TheWeakAlist(wal)->wal_data[2*i+0]; @@ -1066,31 +1059,31 @@ is added to the alist. */ LISPFUN(set_weak_alist_value,seclass_default,3,0,norest,key,2, (kw(test),kw(test_not)) ) -{ # Stack layout: value, item, weak-alist, test, test-not. - # Check weak-alist argument: +{ /* Stack layout: value, item, weak-alist, test, test-not. */ + /* Check weak-alist argument: */ STACK_2 = check_weakalist(STACK_2); - # Check :TEST/:TEST-NOT arguments in STACK_1,STACK_0: + /* Check :TEST/:TEST-NOT arguments in STACK_1,STACK_0: */ var up_function_t up_fun = test_test_args(&STACK_0); - # Search: + /* Search: */ var object wal = TheMutableWeakAlist(STACK_2)->mwal_list; - # We cannot use TheWeakAlist(wal)->wal_count here, because it can be - # decremented by a GC happening during the loop. + /* We cannot use TheWeakAlist(wal)->wal_count here, because it can be + decremented by a GC happening during the loop. */ var uintL maxlen = (Lrecord_length(wal)-2)/2; pushSTACK(wal); pushSTACK(NIL); pushSTACK(NIL); - # Stack layout: value, item, weak-alist, test, test-not, - # wal, -, -. + /* Stack layout: value, item, weak-alist, test, test-not, + wal, -, -. */ var uintL i; for (i = 0; i < maxlen; i++) { var object key = TheWeakAlist(wal)->wal_data[2*i+0]; if (!eq(key,unbound)) { - # Store the key and old value in the STACK, to keep the entry alive - # while we call the :TEST/:TEST-NOT function. + /* Store the key and old value in the STACK, to keep the entry alive + while we call the :TEST/:TEST-NOT function. */ STACK_1 = key; STACK_0 = TheWeakAlist(wal)->wal_data[2*i+1]; if (up_fun(&STACK_(0+3),key)) { - # Replace the pair's value. + /* Replace the pair's value. */ wal = STACK_2; TheWeakAlist(wal)->wal_data[2*i+1] = STACK_(4+3); VALUES1(STACK_(4+3)); @@ -1100,9 +1093,9 @@ wal = STACK_2; } } - # Append a new pair (item . value) to the weak alist. + /* Append a new pair (item . value) to the weak alist. */ if (i < maxlen) { - # There is room at the end of wal, from index i to maxlen-1. + /* There is room at the end of wal, from index i to maxlen-1. */ TheWeakAlist(wal)->wal_data[2*i+0] = STACK_(3+3); TheWeakAlist(wal)->wal_data[2*i+1] = STACK_(4+3); TheWeakAlist(wal)->wal_count = fixnum_inc(TheWeakAlist(wal)->wal_count,1); @@ -1113,15 +1106,17 @@ } else { var uintL count = posfixnum_to_V(TheWeakAlist(wal)->wal_count); if (count < maxlen) { - # There is room in wal, but not at the end. We have to compact it first, - # before we can append a new pair. + /* There is room in wal, but not at the end. We have to compact it first, + before we can append a new pair. */ var uintL j; for (i = 0, j = 0; j < maxlen; j++) if (!eq(TheWeakAlist(wal)->wal_data[2*j+0],unbound)) { - # Copy entry j to entry i (0 <= i <= j): + /* Copy entry j to entry i (0 <= i <= j): */ if (i < j) { - TheWeakAlist(wal)->wal_data[2*i+0] = TheWeakAlist(wal)->wal_data[2*j+0]; - TheWeakAlist(wal)->wal_data[2*i+1] = TheWeakAlist(wal)->wal_data[2*j+1]; + TheWeakAlist(wal)->wal_data[2*i+0] = + TheWeakAlist(wal)->wal_data[2*j+0]; + TheWeakAlist(wal)->wal_data[2*i+1] = + TheWeakAlist(wal)->wal_data[2*j+1]; } i++; } @@ -1134,27 +1129,29 @@ activate_weak(wal); /* add to O(all_weakpointers) if needed */ #endif } else { - # No more room in wal. Need to allocate a new WeakAlist object. + /* No more room in wal. Need to allocate a new WeakAlist object. */ var uintL old_maxlen = maxlen; - maxlen = maxlen + maxlen/4; # augment size proportionally + maxlen = maxlen + maxlen/4; /* augment size proportionally */ if (maxlen < count+1) maxlen = count+1; - # Allocate a new wal. + /* Allocate a new wal. */ var sintB rectype = Record_type(wal); wal = allocate_lrecord(rectype,2+2*maxlen,lrecord_type); TheWeakAlist(wal)->wp_cdr = unbound; /* a GC-invariant dummy */ var object old_wal = STACK_2; - # Copy the old contents into it. + /* Copy the old contents into it. */ var uintL j; for (i = 0, j = 0; j < old_maxlen; j++) if (!eq(TheWeakAlist(old_wal)->wal_data[2*j+0],unbound)) { - # Copy entry j of old_wal to entry i of wal (0 <= i <= j): - TheWeakAlist(wal)->wal_data[2*i+0] = TheWeakAlist(old_wal)->wal_data[2*j+0]; - TheWeakAlist(wal)->wal_data[2*i+1] = TheWeakAlist(old_wal)->wal_data[2*j+1]; + /* Copy entry j of old_wal to entry i of wal (0 <= i <= j): */ + TheWeakAlist(wal)->wal_data[2*i+0] = + TheWeakAlist(old_wal)->wal_data[2*j+0]; + TheWeakAlist(wal)->wal_data[2*i+1] = + TheWeakAlist(old_wal)->wal_data[2*j+1]; i++; } ASSERT(i == count); - # Add the new pair. + /* Add the new pair. */ TheWeakAlist(wal)->wal_data[2*i+0] = STACK_(3+3); TheWeakAlist(wal)->wal_data[2*i+1] = STACK_(4+3); i++; Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.5872 retrieving revision 1.5873 diff -u -d -r1.5872 -r1.5873 --- ChangeLog 26 Dec 2007 17:11:05 -0000 1.5872 +++ ChangeLog 26 Dec 2007 18:00:19 -0000 1.5873 @@ -1,7 +1,7 @@ 2007-12-26 Reini Urban <ru...@x-...> <33_trans2> - * misc.d, sort.d, symbol.d, time.d: + * misc.d, sort.d, symbol.d, time.d, weak.d: translate comments and convert them from "# " to "/**/" 2007-12-20 Sam Steingold <sd...@gn...> ------------------------------ Message: 2 Date: Wed, 26 Dec 2007 18:03:25 +0000 From: Sam Steingold <sd...@us...> Subject: clisp/src win32.d,1.68,1.69 ChangeLog,1.5873,1.5874 To: cli...@li... Message-ID: <E1J...@ma...> Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv23617/src Modified Files: win32.d ChangeLog Log Message: rurban 33_trans2 Index: win32.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/win32.d,v retrieving revision 1.68 retrieving revision 1.69 diff -u -d -r1.68 -r1.69 --- win32.d 17 Dec 2007 15:29:31 -0000 1.68 +++ win32.d 26 Dec 2007 18:03:19 -0000 1.69 @@ -449,8 +449,9 @@ //extern LPVOID MapViewOfFileEx (HANDLE FileMappingObject, DWORD DesiredAccess, DWORD FileOffsetHigh, DWORD FileOffsetLow, DWORD NumberOfBytesToMap, LPVOID BaseAddress); //extern BOOL UnmapViewOfFile (LPCVOID BaseAddress); */ #define HAVE_WIN32_VM -/* Damit kann man munmap() und mprotect() selber schreiben. mmap() wird - emuliert, weil MapViewOfFileEx() zu viele Nachteile hat. Siehe spvw.d. */ +/* So you can write munmap() and mprotect() write by your own. mmap() is + emulated, because MapViewOfFileEx() has too many disadvantages. + See spvw.d. */ /* #define HAVE_MMAP */ #define HAVE_MUNMAP #define HAVE_WORKING_MPROTECT Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.5873 retrieving revision 1.5874 diff -u -d -r1.5873 -r1.5874 --- ChangeLog 26 Dec 2007 18:00:19 -0000 1.5873 +++ ChangeLog 26 Dec 2007 18:03:19 -0000 1.5874 @@ -1,7 +1,7 @@ 2007-12-26 Reini Urban <ru...@x-...> <33_trans2> - * misc.d, sort.d, symbol.d, time.d, weak.d: + * misc.d, sort.d, symbol.d, time.d, weak.d, win32.d: translate comments and convert them from "# " to "/**/" 2007-12-20 Sam Steingold <sd...@gn...> ------------------------------ Message: 3 Date: Wed, 26 Dec 2007 18:04:48 +0000 From: Sam Steingold <sd...@us...> Subject: clisp/src symbol.d,1.41,1.42 ChangeLog,1.5874,1.5875 To: cli...@li... Message-ID: <E1J...@ma...> Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv24080/src Modified Files: symbol.d ChangeLog Log Message: (GENSYM): use check_pos_integer & error_string_integer Index: symbol.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/symbol.d,v retrieving revision 1.41 retrieving revision 1.42 diff -u -d -r1.41 -r1.42 --- symbol.d 26 Dec 2007 17:00:34 -0000 1.41 +++ symbol.d 26 Dec 2007 18:04:46 -0000 1.42 @@ -1,7 +1,7 @@ /* * CLISP Symbol functions * Bruno Haible 1990-2005 - * Sam Steingold 2001-2006 + * Sam Steingold 2001-2007 * German comments and names translated into English: Reini Urban 2007-11 */ @@ -311,8 +311,8 @@ LISPFUN(gensym,seclass_read,0,1,norest,nokey,0,NIL) { /* (GENSYM x), CLTL S. 169, CLtL2 S. 245-246 (defun gensym (&optional (x nil s)) - (let ((prefix "G") ; ein String - (counter *gensym-counter*)) ; ein Integer >=0 + (let ((prefix "G") ; a String + (counter *gensym-counter*)) ; an integer >=0 (when s (cond ((stringp x) (setq prefix x)) ((integerp x) @@ -340,25 +340,12 @@ if (stringp(x)) { prefix = x; /* set prefix */ } else if (integerp(x)) { - if (R_minusp(x)) { - pushSTACK(x); /* TYPE-ERROR slot DATUM */ - pushSTACK(O(type_posinteger)); /* TYPE-ERROR slot EXPECTED-TYPE */ - pushSTACK(x); - pushSTACK(S(gensym)); - error(type_error,GETTEXT("~S: index ~S is negative")); - } - /* x is a integer >=0 */ - counter = x; /* set counter */ - } else { - pushSTACK(x); /* TYPE-ERROR slot DATUM */ - pushSTACK(O(type_string_integer)); /* TYPE-ERROR slot EXPECTED-TYPE */ - pushSTACK(x); - pushSTACK(S(gensym)); - error(type_error,GETTEXT("~S: invalid argument ~S")); - } + counter = x = check_pos_integer(x); /* set counter to an integer >=0 */ + prefix = O(gensym_prefix); /* reset: invalidated by GC */ + } else error_string_integer(x); } /* construct string: */ - pushSTACK(prefix); /* 1. part of string */ + pushSTACK(prefix); /* 1st part of string */ pushSTACK(counter); /* counter */ if (!integerp(x)) { if (!(integerp(counter) && !R_minusp(counter))) { /* integer >= 0 */ @@ -371,6 +358,6 @@ Symbol_value(S(gensym_counter)) = I_1_plus_I(counter); /* (incf *GENSYM-COUNTER*) */ } funcall(L(decimal_string),1); /* (sys::decimal-string counter) */ - pushSTACK(value1); /* 2. part of string */ + pushSTACK(value1); /* 2nd part of string */ VALUES1(make_symbol(coerce_imm_ss(string_concat(2)))); } Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.5874 retrieving revision 1.5875 diff -u -d -r1.5874 -r1.5875 --- ChangeLog 26 Dec 2007 18:03:19 -0000 1.5874 +++ ChangeLog 26 Dec 2007 18:04:46 -0000 1.5875 @@ -1,3 +1,7 @@ +2007-12-26 Sam Steingold <sd...@gn...> + + * symbol.d (GENSYM): use check_pos_integer & error_string_integer + 2007-12-26 Reini Urban <ru...@x-...> <33_trans2> ------------------------------ Message: 4 Date: Wed, 26 Dec 2007 18:06:34 +0000 From: Sam Steingold <sd...@us...> Subject: clisp/src time.d, 1.62, 1.63 spvw_gcstat.d, 1.7, 1.8 lispbibl.d, 1.750, 1.751 ChangeLog, 1.5875, 1.5876 To: cli...@li... Message-ID: <E1J...@ma...> Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv24861/src Modified Files: time.d spvw_gcstat.d lispbibl.d ChangeLog Log Message: (TIME_1, TIME_2): replace with TIME_METHOD which takes values 1 or 2 which ensures that one and only one code path is always taken Index: spvw_gcstat.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/spvw_gcstat.d,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- spvw_gcstat.d 13 Dec 2007 18:13:23 -0000 1.7 +++ spvw_gcstat.d 26 Dec 2007 18:06:30 -0000 1.8 @@ -45,11 +45,12 @@ #endif global internal_time_t gc_time = - #ifdef TIME_1 + #if TIME_METHOD == 1 0 - #endif - #ifdef TIME_2 + #elif TIME_METHOD == 2 {0,0} + #else + #error bad TIME_METHOD #endif ; Index: time.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/time.d,v retrieving revision 1.62 retrieving revision 1.63 diff -u -d -r1.62 -r1.63 --- time.d 26 Dec 2007 17:11:05 -0000 1.62 +++ time.d 26 Dec 2007 18:06:30 -0000 1.63 @@ -282,7 +282,7 @@ tm->gcfreed = gc_space; } -#ifdef TIME_2 +#if TIME_METHOD == 2 /* Converts an internal_time_t to a Lisp integer. internal_time_to_I(&it) */ local object internal_time_to_I (const internal_time_t* tp) @@ -307,10 +307,9 @@ LISPFUNNR(get_internal_real_time,0) { /* (GET-INTERNAL-REAL-TIME), CLTL p. 446 */ - #ifdef TIME_1 + #if TIME_METHOD == 1 VALUES1(UL_to_I(get_real_time())); /* get real time since start of session */ - #endif - #ifdef TIME_2 + #elif TIME_METHOD == 2 var internal_time_t tp; /* absolute real time */ get_real_time(&tp); VALUES1(internal_time_to_I(&tp)); /* convert to integer */ @@ -321,10 +320,9 @@ { /* (GET-INTERNAL-RUN-TIME), CLTL p. 446 */ var timescore_t tm; get_running_times(&tm); /* get run time since start of session */ - #ifdef TIME_1 + #if TIME_METHOD == 1 VALUES1(UL_to_I(tm.runtime)); /* convert to integer */ - #endif - #ifdef TIME_2 + #elif TIME_METHOD == 2 VALUES1(internal_time_to_I(&tm.runtime)); /* convert to integer */ #endif } @@ -464,7 +462,7 @@ Returns the wall clock time in seconds (since session start or 1900-01-01).*/ local uintL real_time_sec (void) { - #ifdef TIME_1 + #if TIME_METHOD == 1 var uintL real_time = get_real_time(); /* real_time := floor(real_time,ticks_per_second) : */ #if (ticks_per_second == 1000000UL) @@ -474,8 +472,7 @@ #else divu_3232_3232(real_time,ticks_per_second,real_time=,); #endif - #endif - #ifdef TIME_2 + #elif TIME_METHOD == 2 #ifdef TIME_UNIX var uintL real_time; /* seconds */ var internal_time_t it; @@ -790,12 +787,11 @@ GC-Count (number of garbage collections in this session so far). */ var timescore_t tm; get_running_times(&tm); /* get run-time */ - #ifdef TIME_1 + #if TIME_METHOD == 1 #define as_2_values(time) \ pushSTACK(fixnum(high16(time))); \ pushSTACK(fixnum(low16(time))); - #endif - #ifdef TIME_2 + #elif TIME_METHOD == 2 #ifdef TIME_UNIX #define as_2_values(time) \ pushSTACK(fixnum(time.tv_sec)); \ @@ -810,7 +806,7 @@ pushSTACK(fixnum(tv_usec)); \ } #endif - #endif + #endif /* TIME_METHOD */ as_2_values(tm.realtime); /* first two values: Real-Time */ as_2_values(tm.runtime); /* next two values: Run-Time */ as_2_values(tm.gctime); /* next two values: GC-Time */ Index: lispbibl.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/lispbibl.d,v retrieving revision 1.750 retrieving revision 1.751 diff -u -d -r1.750 -r1.751 --- lispbibl.d 17 Dec 2007 15:51:33 -0000 1.750 +++ lispbibl.d 26 Dec 2007 18:06:30 -0000 1.751 @@ -2188,7 +2188,7 @@ #endif # When changed: do nothing -# How time is measured: +/* How time is measured: */ #ifdef UNIX #if defined(HAVE_GETTIMEOFDAY) || defined(HAVE_FTIME) #define TIME_UNIX @@ -2200,21 +2200,22 @@ #define TIME_WIN32 #endif #if defined(TIME_UNIX_TIMES) - # There's only a medium time resolution, so you can use 32-bit numbers - # to store the time-differences without any problems. - #define TIME_1 - # We fetch the time once on system sart. All further times are taken - # relatively to that one. + /* There's only a medium time resolution, so you can use 32-bit numbers + to store the time-differences without any problems. */ + #define TIME_METHOD 1 + /* We fetch the time once on system sart. All further times are taken + relatively to that one. */ #define TIME_RELATIVE -#endif -#if defined(TIME_UNIX) || defined(TIME_WIN32) - # The time resolution is so high that you need two 32-bit numbers to - # measure time differences: seconds and and fractions of seconds. - #define TIME_2 - # In this case we can use absolute and relative times for measurements. +#elif defined(TIME_UNIX) || defined(TIME_WIN32) + /* The time resolution is so high that you need two 32-bit numbers to + measure time differences: seconds and and fractions of seconds. */ + #define TIME_METHOD 2 + /* In this case we can use absolute and relative times for measurements. */ #define TIME_ABSOLUTE +#else + #error TIME_METHOD is not defined #endif -# When changed: extend time.d +/* When changed: extend time.d */ # Whether the operating system can give us the run-time, or whether we'll have # to accumulate it ourselves: @@ -8599,35 +8600,34 @@ # ####################### TIMEBIBL in TIME.D ############################## # -# (* 25567 24 60 60) => 2208988800 -# the number of seconds from 1900-01-01 to 1970-01-01 +/* (* 25567 24 60 60) => 2208988800 + the number of seconds from 1900-01-01 to 1970-01-01 */ #define UNIX_LISP_TIME_DIFF 2208988800UL %% export_def(UNIX_LISP_TIME_DIFF); -# Type which is used for 'Internal Time': -#ifdef TIME_1 - typedef uintL internal_time_t; # measured value of the ticking counter +/* Type which is used for 'Internal Time': */ +#if TIME_METHOD == 1 +typedef uintL internal_time_t; /* measured value of the ticking counter */ #if defined(TIME_UNIX_TIMES) #define ticks_per_second CLK_TCK #endif #define sub_internal_time(x,y, z) z = (x) - (y) #define add_internal_time(x,y, z) z = (x) + (y) -#endif -#ifdef TIME_2 +#elif TIME_METHOD == 2 #ifdef TIME_UNIX - typedef struct { - uintL tv_sec; # number of seconds since 1.1.1970 00:00 GMT, - # 'uintL' for tv_sec is good for 136 years. - uintL tv_usec; # additional microseconds - } internal_time_t; - #define ticks_per_second 1000000UL # 1 Tick = 1 mu-sec - #define sub_internal_time(x,y, z) # z:=x-y \ +typedef struct { + uintL tv_sec; /* number of seconds since 1.1.1970 00:00 GMT, + 'uintL' for tv_sec is good for 136 years. */ + uintL tv_usec; /* additional microseconds */ +} internal_time_t; + #define ticks_per_second 1000000UL /* 1 Tick = 1 mu-sec */ + #define sub_internal_time(x,y, z) /* z:=x-y */ \ do { (z).tv_sec = (x).tv_sec - (y).tv_sec; \ if ((x).tv_usec < (y).tv_usec) \ { (x).tv_usec += ticks_per_second; (z).tv_sec -= 1; } \ (z).tv_usec = (x).tv_usec - (y).tv_usec; \ } while(0) - #define add_internal_time(x,y, z) # z:=x+y \ + #define add_internal_time(x,y, z) /* z:=x+y */ \ do { (z).tv_sec = (x).tv_sec + (y).tv_sec; \ (z).tv_usec = (x).tv_usec + (y).tv_usec; \ if ((z).tv_usec >= ticks_per_second) \ @@ -8635,16 +8635,16 @@ } while(0) #endif #ifdef TIME_WIN32 - typedef # struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } - FILETIME # number of 0.1 mu-sec since 1.1.1601 00:00 GMT. - internal_time_t; - #define ticks_per_second 10000000UL # 1 Tick = 0.1 mu-sec - #define sub_internal_time(x,y, z) # z:=x-y \ +typedef /* struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } */ + FILETIME /* number of 0.1 mu-sec since 1.1.1601 00:00 GMT. */ + internal_time_t; + #define ticks_per_second 10000000UL /* 1 Tick = 0.1 mu-sec */ + #define sub_internal_time(x,y, z) /* z:=x-y */ \ do { (z).dwHighDateTime = (x).dwHighDateTime - (y).dwHighDateTime; \ if ((x).dwLowDateTime < (y).dwLowDateTime) { (z).dwHighDateTime -= 1;}\ (z).dwLowDateTime = (x).dwLowDateTime - (y).dwLowDateTime; \ } while(0) - #define add_internal_time(x,y, z) # z:=x+y \ + #define add_internal_time(x,y, z) /* z:=x+y */ \ do { (z).dwHighDateTime = (x).dwHighDateTime + (y).dwHighDateTime; \ (z).dwLowDateTime = (x).dwLowDateTime + (y).dwLowDateTime; \ if ((z).dwLowDateTime < (x).dwLowDateTime) { (z).dwHighDateTime += 1;}\ @@ -8653,61 +8653,59 @@ #endif #ifndef HAVE_RUN_TIME -# UP: Stops the run-time timer - # run_time_stop(); +/* UP: Stops the run-time timer + run_time_stop(); */ extern void run_time_stop (void); - # is used by STREAM + /* is used by STREAM */ - # UP: restarts the run-time timer - # run_time_restart(); + /* UP: restarts the run-time timer + run_time_restart(); */ extern void run_time_restart (void); - # is used by STREAM + /* is used by STREAM */ #else - # You don't need a run-time timer + /* You don't need a run-time timer */ #define run_time_stop() #define run_time_restart() #endif -#ifdef TIME_1 +#if TIME_METHOD == 1 -# UP: Yields the real-time -# get_real_time() -# < uintL result: time since LISP-system-start (in 1/200 sec resp. in 1/50 sec resp. in 1/100 sec resp. in 1/CLK_TCK sec) +/* UP: Yields the real-time + get_real_time() + < uintL result: time since LISP-system-start (in 1/200 sec resp. in 1/50 sec resp. in 1/100 sec resp. in 1/CLK_TCK sec) */ extern uintL get_real_time (void); -# is used by STREAM, LISPARIT - -#endif +/* is used by STREAM, LISPARIT */ -#ifdef TIME_2 +#elif TIME_METHOD == 2 -# UP: yields the real-time -# get_real_time() -# < internal_time_t* result: absolute time +/* UP: yields the real-time + get_real_time() + < internal_time_t* result: absolute time */ extern void get_real_time (internal_time_t*); -# is used by LISPARIT +/* is used by LISPARIT */ #endif -# UP: Yields the run-time -# get_running_times(×core); -# < timescore.runtime: Run-time since LISP-system-start (in Ticks) -# < timescore.realtime: Real-time since LISP-system-start (in Ticks) -# < timescore.gctime: GC-Time since LISP-system-start (in Ticks) -# < timescore.gccount: Number of GC's since LISP-system-start -# < timescore.gcfreed: Size of the space reclaimed by the GC's so far - typedef struct { - internal_time_t runtime; - internal_time_t realtime; - internal_time_t gctime; - uintL gccount; - uintL2 gcfreed; - } timescore_t; - extern void get_running_times (timescore_t*); -# is used by +/* UP: Yields the run-time + get_running_times(×core); + < timescore.runtime: Run-time since LISP-system-start (in Ticks) + < timescore.realtime: Real-time since LISP-system-start (in Ticks) + < timescore.gctime: GC-Time since LISP-system-start (in Ticks) + < timescore.gccount: Number of GC's since LISP-system-start + < timescore.gcfreed: Size of the space reclaimed by the GC's so far */ +typedef struct { + internal_time_t runtime; + internal_time_t realtime; + internal_time_t gctime; + uintL gccount; + uintL2 gcfreed; +} timescore_t; +extern void get_running_times (timescore_t*); +/* is used by TIME */ -# UP: yields the run-time -# get_running_time(runtime); -# < runtime: Run-time (in Ticks) +/* UP: yields the run-time + get_running_time(runtime); + < runtime: Run-time (in Ticks) */ #ifndef HAVE_RUN_TIME #define get_running_time(runtime) runtime = get_time() extern uintL get_time (void); @@ -8721,7 +8719,7 @@ extern uintL get_run_time (internal_time_t* runtime); #endif #endif -# is used by SPVW +/* is used by SPVW */ /* Time in decoded-time: */ typedef struct { Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.5875 retrieving revision 1.5876 diff -u -d -r1.5875 -r1.5876 --- ChangeLog 26 Dec 2007 18:04:46 -0000 1.5875 +++ ChangeLog 26 Dec 2007 18:06:30 -0000 1.5876 @@ -1,5 +1,11 @@ 2007-12-26 Sam Steingold <sd...@gn...> + * lispbibl.d, spvw_gcstat.d, time.d (TIME_1, TIME_2): replace with + TIME_METHOD which takes values 1 or 2 which ensures that one and + only one code path is always taken + +2007-12-26 Sam Steingold <sd...@gn...> + * symbol.d (GENSYM): use check_pos_integer & error_string_integer 2007-12-26 Reini Urban <ru...@x-...> ------------------------------ ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ ------------------------------ _______________________________________________ clisp-cvs mailing list cli...@li... https://lists.sourceforge.net/lists/listinfo/clisp-cvs End of clisp-cvs Digest, Vol 20, Issue 45 ***************************************** |