From: <cli...@li...> - 2004-12-13 19:45:02
|
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 foreign.d,1.122,1.123 (Bruno Haible) 2. clisp/src lispbibl.d,1.585,1.586 foreign.d,1.123,1.124 ChangeLog,1.3927,1.3928 (Bruno Haible) 3. clisp/src lispbibl.d,1.586,1.587 constsym.d,1.283,1.284 ChangeLog,1.3928,1.3929 (Bruno Haible) 4. clisp/src control.d,1.112,1.113 ChangeLog,1.3929,1.3930 (Bruno Haible) 5. clisp/doc impbody.xml,1.324,1.325 (Bruno Haible) 6. clisp/src spvw.d,1.329,1.330 ChangeLog,1.3930,1.3931 (Bruno Haible) 7. clisp/doc impext.xml,1.298,1.299 (Bruno Haible) 8. clisp/src array.d,1.99,1.100 (Bruno Haible) 9. clisp/doc impbody.xml,1.325,1.326 cl-ent.xml,1.76,1.77 (Sam Steingold) 10. clisp/doc impext.xml,1.299,1.300 impent.xml,1.184,1.185 (Sam Steingold) 11. clisp/src eval.d,1.178,1.179 ChangeLog,1.3931,1.3932 (Sam Steingold) 12. clisp/doc impbody.xml,1.326,1.327 (Sam Steingold) 13. clisp/doc impext.xml,1.300,1.301 (Sam Steingold) --__--__-- Message: 1 From: Bruno Haible <ha...@us...> To: cli...@li... Subject: clisp/src foreign.d,1.122,1.123 Date: Mon, 13 Dec 2004 12:08:15 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27367/src Modified Files: foreign.d Log Message: Reminder for Sam and Joerg to add better comments before each function. Index: foreign.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/foreign.d,v retrieving revision 1.122 retrieving revision 1.123 diff -u -d -r1.122 -r1.123 --- foreign.d 13 Dec 2004 12:02:40 -0000 1.122 +++ foreign.d 13 Dec 2004 12:08:12 -0000 1.123 @@ -58,8 +58,9 @@ fehler_foreign_object(obj); } +/* return the foreign pointer of the foreign object */ local object foreign_pointer (object obj) -{ /* return the foreign pointer of the foreign object */ +{ if (orecordp(obj)) { switch (Record_type(obj)) { case Rectype_Fpointer: @@ -75,6 +76,8 @@ } return nullobj; /* non-foreign object */ } + +/* FIXME: COMMENT! */ local object foreign_pointer_strict (object obj) { var object fp = foreign_pointer(obj); @@ -3754,16 +3757,19 @@ with all fa_offsets being 0. */ #if defined(HAVE_DLERROR) +/* return the string object for dlerror() value */ local object dlerror_string (void) -{ /* return the string object for dlerror() value */ +{ var char* error; begin_system_call(); error = dlerror(); end_system_call(); return error == NULL ? NIL : asciz_to_string(error,O(misc_encoding)); } #endif +/* FIXME: COMMENT! */ +/* open the library == dlopen() */ local inline void * libopen (char* libname, uintL version) -{ /* open the library == dlopen() */ +{ #if defined(WIN32_NATIVE) return (void*)LoadLibrary(libname); #else @@ -3772,6 +3778,7 @@ #endif } +/* FIXME: COMMENT! */ /* Open a library. can trigger GC */ local maygc void * open_library (gcv_object_t* name, uintL version) @@ -3839,8 +3846,10 @@ static EnumProcessModules_t fEnumProcessModules = (EnumProcessModules_t)1; #endif +/* FIXME: BETTER COMMENT! */ +/* find the name in the library handle == dlsym()*/ local inline void* find_name (void *handle, char *name) -{ /* find the name in the library handle == dlsym()*/ +{ var void *ret = NULL; begin_system_call(); #if defined(UNIX_FREEBSD) && !defined(RTLD_DEFAULT) @@ -3887,6 +3896,7 @@ return ret; } +/* FIXME: BETTER COMMENT! */ /* return the handle of the object (string) in the library (name fpointer ...) can trigger GC */ local maygc void* object_handle (object library, gcv_object_t *name, bool retry_p) @@ -3910,6 +3920,7 @@ return address; } +/* FIXME: BETTER COMMENT! */ /* update the DLL pointer and all related objects acons = (library fpointer object1 object2 ...) can trigger GC */ @@ -3999,6 +4010,7 @@ check_fpointer(obj,false); } +/* FIXME: BETTER COMMENT! */ /* Check for a library argument. Return (lib addr obj ...). can trigger GC */ @@ -4020,7 +4032,9 @@ goto restart; } -/* can trigger GC */ +/* FIXME: BETTER COMMENT! */ +/* return the foreign address of the foreign object named 'name' + can trigger GC */ local maygc object object_address (object library, gcv_object_t *name, object offset) { /* return the foreign address of the foreign object named `name' */ var object lib_addr = Car(Cdr(library)); --__--__-- Message: 2 From: Bruno Haible <ha...@us...> To: cli...@li... Subject: clisp/src lispbibl.d,1.585,1.586 foreign.d,1.123,1.124 ChangeLog,1.3927,1.3928 Date: Mon, 13 Dec 2004 12:09:33 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27505/src Modified Files: lispbibl.d foreign.d ChangeLog Log Message: init_ffi can trigger GC. Index: foreign.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/foreign.d,v retrieving revision 1.123 retrieving revision 1.124 diff -u -d -r1.123 -r1.124 --- foreign.d 13 Dec 2004 12:08:12 -0000 1.123 +++ foreign.d 13 Dec 2004 12:09:30 -0000 1.124 @@ -4139,7 +4139,7 @@ global void* ffi_user_pointer = NULL; /* Initialize the FFI. */ -global void init_ffi (void) { +global maygc void init_ffi (void) { /* Allocate a fresh zero foreign pointer: */ O(fp_zero) = allocate_fpointer((void*)0); ffi_user_pointer = NULL; Index: lispbibl.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/lispbibl.d,v retrieving revision 1.585 retrieving revision 1.586 diff -u -d -r1.585 -r1.586 --- lispbibl.d 13 Dec 2004 12:02:30 -0000 1.585 +++ lispbibl.d 13 Dec 2004 12:09:29 -0000 1.586 @@ -14503,7 +14503,7 @@ extern void convert_to_foreign_nomalloc (object fvd, object obj, void* data); # Initialize the FFI. - extern void init_ffi (void); + extern maygc void init_ffi (void); # used by SPVW # De-Initialize the FFI. Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.3927 retrieving revision 1.3928 diff -u -d -r1.3927 -r1.3928 --- ChangeLog 13 Dec 2004 12:07:17 -0000 1.3927 +++ ChangeLog 13 Dec 2004 12:09:30 -0000 1.3928 @@ -1,5 +1,10 @@ 2004-12-08 Bruno Haible <br...@cl...> + * lispbibl.d (init_ffi): Mark as "can trigger GC". + * foreign.d (init_ffi): Likewise. + +2004-12-08 Bruno Haible <br...@cl...> + * stream.d (FILE-POSITION): Avoid a false GC-safety bug alert: Call SET-FILL-POINTER directly, without going through funcall. --__--__-- Message: 3 From: Bruno Haible <ha...@us...> To: cli...@li... Subject: clisp/src lispbibl.d,1.586,1.587 constsym.d,1.283,1.284 ChangeLog,1.3928,1.3929 Date: Mon, 13 Dec 2004 12:11:41 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27760/src Modified Files: lispbibl.d constsym.d ChangeLog Log Message: Fix bug introduced on 2004-05-15. It's astonishing that wrong metainformation in symbol_tab didn't lead to any malfunction at all! Index: constsym.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/constsym.d,v retrieving revision 1.283 retrieving revision 1.284 diff -u -d -r1.283 -r1.284 --- constsym.d 10 Dec 2004 16:09:21 -0000 1.283 +++ constsym.d 13 Dec 2004 12:11:39 -0000 1.284 @@ -24,11 +24,11 @@ #else #if defined(LINUX_NOEXEC_HEAPCODES) && 0 #define LISPSYM_B(name,printname,package) \ - { S(name), xrecord_tfl(Rectype_Symbol,0,5,0), \ + { S(name), xrecord_tfl(Rectype_Symbol,0,symbol_length,0), \ unbound, unbound, unbound, NIL, NIL, NIL, unbound, }, #else #define LISPSYM_B(name,printname,package) \ - { S(name), xrecord_tfl(Rectype_Symbol,0,5,0), \ + { S(name), xrecord_tfl(Rectype_Symbol,0,symbol_length,0), \ unbound, unbound, unbound, NIL, NIL, NIL, }, #endif #endif Index: lispbibl.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/lispbibl.d,v retrieving revision 1.586 retrieving revision 1.587 diff -u -d -r1.586 -r1.587 --- lispbibl.d 13 Dec 2004 12:09:29 -0000 1.586 +++ lispbibl.d 13 Dec 2004 12:11:38 -0000 1.587 @@ -4320,6 +4320,7 @@ typedef int symbol_size_check[1 - 2 * (int)(sizeof(symbol_) % varobject_alignment)]; #endif #define symbol_objects_offset offsetof(symbol_,symvalue) +#define symbol_length 6 # Every keyword is a constant. Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.3928 retrieving revision 1.3929 diff -u -d -r1.3928 -r1.3929 --- ChangeLog 13 Dec 2004 12:09:30 -0000 1.3928 +++ ChangeLog 13 Dec 2004 12:11:39 -0000 1.3929 @@ -1,5 +1,10 @@ 2004-12-08 Bruno Haible <br...@cl...> + * lispbibl.d (symbol_length): New macro. + * constsym.d (LISPSYM_B): Use it. Fixes bug introduced on 2004-05-15. + +2004-12-08 Bruno Haible <br...@cl...> + * lispbibl.d (init_ffi): Mark as "can trigger GC". * foreign.d (init_ffi): Likewise. --__--__-- Message: 4 From: Bruno Haible <ha...@us...> To: cli...@li... Subject: clisp/src control.d,1.112,1.113 ChangeLog,1.3929,1.3930 Date: Mon, 13 Dec 2004 12:13:19 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28186/src Modified Files: control.d ChangeLog Log Message: Fix GC-safety bug introduced on 2004-05-27. Index: control.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/control.d,v retrieving revision 1.112 retrieving revision 1.113 diff -u -d -r1.112 -r1.113 --- control.d 13 Dec 2004 11:55:55 -0000 1.112 +++ control.d 13 Dec 2004 12:13:14 -0000 1.113 @@ -370,14 +370,16 @@ > body: whole Body can trigger GC */ local maygc bool parse_doc_decl (object body, bool permit_doc_string) { + pushSTACK(body); var bool to_compile = parse_dd(body); if (!permit_doc_string && !nullp(value3)) { pushSTACK(value1); pushSTACK(value2); pushSTACK(value3); /* save */ - pushSTACK(NIL); pushSTACK(body); + pushSTACK(NIL); pushSTACK(STACK_(0+3+1)); STACK_1 = CLSTEXT("doc-string is not allowed here and will be ignored: ~S"); funcall(S(warn),2); value3 = popSTACK(); value2 = popSTACK(); value1 = popSTACK(); } + skipSTACK(1); return to_compile; } Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.3929 retrieving revision 1.3930 diff -u -d -r1.3929 -r1.3930 --- ChangeLog 13 Dec 2004 12:11:39 -0000 1.3929 +++ ChangeLog 13 Dec 2004 12:13:14 -0000 1.3930 @@ -1,3 +1,8 @@ +2004-12-11 Bruno Haible <br...@cl...> + + * control.d (parse_doc_decl): Fix GC-safety bug introduced on + 2004-05-27. + 2004-12-08 Bruno Haible <br...@cl...> * lispbibl.d (symbol_length): New macro. --__--__-- Message: 5 From: Bruno Haible <ha...@us...> To: cli...@li... Subject: clisp/doc impbody.xml,1.324,1.325 Date: Mon, 13 Dec 2004 12:14:05 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28348/doc Modified Files: impbody.xml Log Message: Put the :WARN-IF-NEEDS-REHASH-AFTER-GC explanation back to where it belongs, and add some words about how to use this facility. Index: impbody.xml =================================================================== RCS file: /cvsroot/clisp/clisp/doc/impbody.xml,v retrieving revision 1.324 retrieving revision 1.325 diff -u -d -r1.324 -r1.325 --- impbody.xml 10 Dec 2004 16:09:25 -0000 1.324 +++ impbody.xml 13 Dec 2004 12:14:02 -0000 1.325 @@ -2442,6 +2442,15 @@ must be one of <constant>EXT:FASTHASH-EQUAL</constant>, <constant>EXT:STABLEHASH-EQUAL</constant>.</para> +<para>The <constant>:WARN-IF-NEEDS-REHASH-AFTER-GC</constant> argument, +if true, causes a &warning-t; to be &signal;led when an object is stored +into the table which will force table reorganizations at the first +access of the table after each &gc;ion. +This keyword argument can be used to check whether &stablehash-eq; +should be preferred over &fasthash-eq; for a particular table. +Use <function>HASH-TABLE-WARN-IF-NEEDS-REHASH-AFTER-GC</function> +to check and &setf; this parameter after the table has been created.</para> + <para>The <constant>:INITIAL-CONTENTS</constant> argument is an &alist; that is used to initialize the new hash table.</para> @@ -2472,19 +2481,17 @@ <para>See also <olink targetdoc="impnotes" targetptr="weak-ht"/>.</para> -<section id="hashtable-gc-rehash"><title>Interaction between - &hash-table-t;s and &gc;ion.</title> - -<para>--- Bruno! ---</para> +<section id="hashtable-gc-rehash"> + <title>Interaction between &hash-table-t;s and &gc;ion.</title> -<para>The <constant>:WARN-IF-NEEDS-REHASH-AFTER-GC</constant> argument, -if true, causes a &warning-t; to be &signal;led when an object is stored -into the table which will force table reorganizations at the first -access of the table after each &gc;ion. -This keyword argument can be used to check whether &stablehash-eq; -should be preferred over &fasthash-eq; for a particular table. -Use <function>HASH-TABLE-WARN-IF-NEEDS-REHASH-AFTER-GC</function> -to check and &setf; this parameter after the table has been created.</para> +<para>When a hash table contains keys to be compared by identity - such + as numbers in hash tables with test &eq;, or conses in hash tables with + test &eq;, &eql;, or vectors in hash tables with test &eq;, &eql;, &equal;, + or &standard-object-t; or &structure-object-t; instances in hash tables with + test &eq;, &eql;, &equal;, &equalp; - the hash code will in general depend + on the object's address in memory. Therefore it will in general be invalidated + after a &gc;ion, and the hash table's internal structure must be recomputed + at the next hash table access.</para> <para>While <constant>:WARN-IF-NEEDS-REHASH-AFTER-GC</constant> can help checking the efficiency of a particular &hash-table-t;, the variable @@ -2498,6 +2505,17 @@ &hash-table-t; needs to be rehashed after a &gc;ion, a warning is issued that shows the inefficient &hash-table-t;.</para> +<para>What can be done to avoid the inefficiencies detected by these warnings? + 1. In many cases you can solve the problem by using the STABLEHASH variant + of the hash test. 2. In other cases, namely &standard-object-t; or + &structure-object-t; instances, you can solve the problem by making the + key object classes inherit from &standard-stablehash; or + &structure-stablehash;, respectively. 3. In the remaining cases, you should + store a hash key inside the object, of which you can guarantee uniqueness + through your application (for example the ID of an object in a database, or + the serial number of an object), and use this key as hash key instead of the + original object.</para> + </section> </section> --__--__-- Message: 6 From: Bruno Haible <ha...@us...> To: cli...@li... Subject: clisp/src spvw.d,1.329,1.330 ChangeLog,1.3930,1.3931 Date: Mon, 13 Dec 2004 12:15:27 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28511/src Modified Files: spvw.d ChangeLog Log Message: Fix GC-safety bug. Index: spvw.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/spvw.d,v retrieving revision 1.329 retrieving revision 1.330 diff -u -d -r1.329 -r1.330 --- spvw.d 12 Dec 2004 19:38:00 -0000 1.329 +++ spvw.d 13 Dec 2004 12:15:22 -0000 1.330 @@ -2995,8 +2995,10 @@ if (!p->argv_repl) return; } - if (p->argv_package != NULL) { # (IN-PACKAGE packagename) + if (p->argv_package != NULL) { + # (IN-PACKAGE packagename) var object packname = asciz_to_string(p->argv_package,O(misc_encoding)); + pushSTACK(packname); var object package = find_package(packname); if (!nullp(package)) { Symbol_value(S(packagestern)) = package; @@ -3004,10 +3006,11 @@ pushSTACK(var_stream(S(standard_output),strmflags_wr_ch_B)); terpri(&STACK_0); write_sstring(&STACK_0,CLSTEXT("WARNING: no such package: ")); - write_sstring(&STACK_0,packname); + write_sstring(&STACK_0,STACK_1); terpri(&STACK_0); skipSTACK(1); } + skipSTACK(1); } if (p->argv_execute_file != NULL) { # execute: Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.3930 retrieving revision 1.3931 diff -u -d -r1.3930 -r1.3931 --- ChangeLog 13 Dec 2004 12:13:14 -0000 1.3930 +++ ChangeLog 13 Dec 2004 12:15:23 -0000 1.3931 @@ -1,3 +1,7 @@ +2004-12-12 Bruno Haible <br...@cl...> + + * spvw.d (main_actions): Fix GC-safety bug in argv_package handling. + 2004-12-11 Bruno Haible <br...@cl...> * control.d (parse_doc_decl): Fix GC-safety bug introduced on --__--__-- Message: 7 From: Bruno Haible <ha...@us...> To: cli...@li... Subject: clisp/doc impext.xml,1.298,1.299 Date: Mon, 13 Dec 2004 12:15:59 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28676/doc Modified Files: impext.xml Log Message: The real motivation for *ANSI* off is convenience, not backwards compatibility. Index: impext.xml =================================================================== RCS file: /cvsroot/clisp/clisp/doc/impext.xml,v retrieving revision 1.298 retrieving revision 1.299 diff -u -d -r1.298 -r1.299 --- impext.xml 11 Dec 2004 22:39:09 -0000 1.298 +++ impext.xml 13 Dec 2004 12:15:56 -0000 1.299 @@ -1413,8 +1413,8 @@ <section id="ansi"><title>Maximum ANSI CL compliance</title> -<para>Some &ansi-cl; features are turned off by default for backwards - compatibility. +<para>Some &ansi-cl; features are turned off by default for convenience and + for backwards compatibility. They can be switched on, all at once, by setting the &symbol-macro; &ansi; to &t;, or they can be switched on individually. Setting &ansi; to &t; implies the following:</para> --__--__-- Message: 8 From: Bruno Haible <ha...@us...> To: cli...@li... Subject: clisp/src array.d,1.99,1.100 Date: Mon, 13 Dec 2004 13:17:53 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9183 Modified Files: array.d Log Message: Oops, fix bug in last patch. Index: array.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/array.d,v retrieving revision 1.99 retrieving revision 1.100 diff -u -d -r1.99 -r1.100 --- array.d 13 Dec 2004 11:57:13 -0000 1.99 +++ array.d 13 Dec 2004 13:17:47 -0000 1.100 @@ -2164,8 +2164,8 @@ for (;;) { var object value = TheSvector(dv1)->data[index1++]; if (!charp(value)) fehler_store(dv2,value); - if (char_code(value) < cint8_limit) { - TheS8string(dv2)->data[index2++] = char_code(value); + if (as_cint(char_code(value)) < cint8_limit) { + TheS8string(dv2)->data[index2++] = as_cint(char_code(value)); if (--count == 0) break; } else { @@ -2182,8 +2182,8 @@ for (;;) { var object value = TheSvector(dv1)->data[index1++]; if (!charp(value)) fehler_store(dv2,value); - if (char_code(value) < cint16_limit) { - TheS16string(dv2)->data[index2++] = char_code(value); + if (as_cint(char_code(value)) < cint16_limit) { + TheS16string(dv2)->data[index2++] = as_cint(char_code(value)); if (--count == 0) break; } else { --__--__-- Message: 9 From: Sam Steingold <sd...@us...> To: cli...@li... Subject: clisp/doc impbody.xml,1.325,1.326 cl-ent.xml,1.76,1.77 Date: Mon, 13 Dec 2004 18:08:25 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13943/doc Modified Files: impbody.xml cl-ent.xml Log Message: (top-level-form): new entity Index: impbody.xml =================================================================== RCS file: /cvsroot/clisp/clisp/doc/impbody.xml,v retrieving revision 1.325 retrieving revision 1.326 diff -u -d -r1.325 -r1.326 --- impbody.xml 13 Dec 2004 12:14:02 -0000 1.325 +++ impbody.xml 13 Dec 2004 18:08:22 -0000 1.326 @@ -280,7 +280,7 @@ standard situations <constant>:EXECUTE</constant>, <constant>:LOAD-TOPLEVEL</constant> and <constant>:COMPILE-TOPLEVEL</constant> in that they ignore the - top-level versus non-top-level distinction.</para></warning> + &top-level-form; versus non-&top-level-form; distinction.</para></warning> </section> Index: cl-ent.xml =================================================================== RCS file: /cvsroot/clisp/clisp/doc/cl-ent.xml,v retrieving revision 1.76 retrieving revision 1.77 diff -u -d -r1.76 -r1.77 --- cl-ent.xml 7 Dec 2004 21:44:49 -0000 1.76 +++ cl-ent.xml 13 Dec 2004 18:08:23 -0000 1.77 @@ -191,6 +191,7 @@ <!ENTITY proper-name-glo "<ulink url='&clhs;/Body/glo_p.html#proper_name'>proper name</ulink>"> <!ENTITY exec-time "<ulink url='&clhs;/Body/glo_e.html#execution_time'>execution time</ulink>"> <!ENTITY compile-time "<ulink url='&clhs;/Body/glo_c.html#compile_time'>compile time</ulink>"> +<!ENTITY top-level-form "<ulink url='&clhs;/Body/sec_3-2-3-1.html'>top-level form</ulink>"> <!-- *** variables, bindings etc *** --> <!ENTITY environment "<ulink url='&clhs;/Body/sec_3-1-1.html'>environment</ulink>"> --__--__-- Message: 10 From: Sam Steingold <sd...@us...> To: cli...@li... Subject: clisp/doc impext.xml,1.299,1.300 impent.xml,1.184,1.185 Date: Mon, 13 Dec 2004 18:39:12 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21850/doc Modified Files: impext.xml impent.xml Log Message: (expand-form): new entity mention that EXPAND-FORM assumes EVAL-WHEN :EXECUTE Index: impext.xml =================================================================== RCS file: /cvsroot/clisp/clisp/doc/impext.xml,v retrieving revision 1.299 retrieving revision 1.300 diff -u -d -r1.299 -r1.300 --- impext.xml 13 Dec 2004 12:15:56 -0000 1.299 +++ impext.xml 13 Dec 2004 18:39:08 -0000 1.300 @@ -1664,20 +1664,32 @@ <section id="code-walk"><title>Code Walker</title> -<para>You can use <function>EXT:EXPAND-FORM</function> to expand all - the macros, &symbol-macro;s, etc, in a single form: +<para>You can use function &expand-form; to expand all the macros, + &symbol-macro;s, etc, in a single form: <programlisting language="lisp"> - (expand-form '(macrolet ((bar (x) `(print ,x))) - (macrolet ((baz (x) `(bar ,x))) - (symbol-macrolet ((z 3)) - (baz z))))) -</programlisting> -returns two values: <code>(locally (print 3))</code> (the expansion) and -&t; (an indicator that some expansion has actually been done).</para> +(&expand-form; '(macrolet ((bar (x) `(print ,x))) + (macrolet ((baz (x) `(bar ,x))) + (symbol-macrolet ((z 3)) + (baz z))))) +<computeroutput>(locally (print 3))</computeroutput> ; the expansion +<computeroutput>&t;</computeroutput> ; indicator: some expansion has actually been done +</programlisting></para> <para>This is sometimes called a <quote>code walker</quote>, except that the code walker would probably leave the ¯olet; and &symbol-macrolet; forms intact and just do the expansion.</para> + +<warning><para>Function &expand-form; expands forms by assuming the + &eval-when; situation <constant>:EXECUTE</constant> and is therefore + unsuitable for forms that may later be passed to the compiler: +<programlisting language="lisp"> +(&expand-form; '(&eval-when; (:COMPILE-TOPLEVEL) (foo))) +<computeroutput>&nil;</computeroutput> ; +<computeroutput>&t;</computeroutput> +(&expand-form; '(&eval-when; (:LOAD-TOPLEVEL) (foo))) +<computeroutput>&nil;</computeroutput> ; +<computeroutput>&t;</computeroutput> +</programlisting></para></warning> </section> </chapter> Index: impent.xml =================================================================== RCS file: /cvsroot/clisp/clisp/doc/impent.xml,v retrieving revision 1.184 retrieving revision 1.185 diff -u -d -r1.184 -r1.185 --- impent.xml 10 Dec 2004 16:55:20 -0000 1.184 +++ impent.xml 13 Dec 2004 18:39:09 -0000 1.185 @@ -212,6 +212,7 @@ <!ENTITY ethe "<link linkend='ethe'><function>EXT:ETHE</function></link>"> <!ENTITY exec "<link linkend='exec'><function>EXT:EXECUTE</function></link>"> <!ENTITY exit-on-error "<link linkend='exit-on-error'><function>EXT:EXIT-ON-ERROR</function></link>"> +<!ENTITY expand-form "<link linkend='code-walk'><function>EXT:EXPAND-FORM</function></link>"> <!ENTITY extfmt "<link linkend='extfmt'><constant>:EXTERNAL-FORMAT</constant></link>"> <!ENTITY file-pipe-socket-s "<link linkend='open'>file</link>/<link linkend='pipe'>pipe</link>/<link linkend='socket'>socket</link> &stream-t;"> <!ENTITY finalize "<link linkend='final'><function>EXT:FINALIZE</function></link>"> --__--__-- Message: 11 From: Sam Steingold <sd...@us...> To: cli...@li... Subject: clisp/src eval.d,1.178,1.179 ChangeLog,1.3931,1.3932 Date: Mon, 13 Dec 2004 18:58:01 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26425/src Modified Files: eval.d ChangeLog Log Message: (progv): fixed a GC-safety bug Index: eval.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/eval.d,v retrieving revision 1.178 retrieving revision 1.179 diff -u -d -r1.178 -r1.179 --- eval.d 11 Dec 2004 14:16:08 -0000 1.178 +++ eval.d 13 Dec 2004 18:57:51 -0000 1.179 @@ -544,10 +544,12 @@ var object sym = check_symbol_non_constant(Car(STACK_0),S(progv)); if (!eq(sym,Car(STACK_0))) { /* changed symbol ==> must copy symlist */ if (need_new_symlist) { /* have not copied symlist yet */ - STACK_0 = STACK_2 = copy_list(STACK_2); /* copy symlist */ + pushSTACK(sym); /* save sym */ + STACK_1 = STACK_3 = copy_list(STACK_3); /* copy symlist */ var uintL pos = llen; /* skip copy ... */ - while (pos--) STACK_0 = Cdr(STACK_0); /* ... to the right position */ + while (pos--) STACK_1 = Cdr(STACK_1); /* ... to the right position */ need_new_symlist = false; /* do not copy symlist twice */ + sym = popSTACK(); /* restore sym */ } Car(STACK_0) = sym; } Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.3931 retrieving revision 1.3932 diff -u -d -r1.3931 -r1.3932 --- ChangeLog 13 Dec 2004 12:15:23 -0000 1.3931 +++ ChangeLog 13 Dec 2004 18:57:54 -0000 1.3932 @@ -1,3 +1,7 @@ +2004-12-13 Sam Steingold <sd...@gn...> + + * eval.d (progv): fixed a GC-safety bug + 2004-12-12 Bruno Haible <br...@cl...> * spvw.d (main_actions): Fix GC-safety bug in argv_package handling. --__--__-- Message: 12 From: Sam Steingold <sd...@us...> To: cli...@li... Subject: clisp/doc impbody.xml,1.326,1.327 Date: Mon, 13 Dec 2004 19:42:02 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5261/doc Modified Files: impbody.xml Log Message: formatting Index: impbody.xml =================================================================== RCS file: /cvsroot/clisp/clisp/doc/impbody.xml,v retrieving revision 1.326 retrieving revision 1.327 diff -u -d -r1.326 -r1.327 --- impbody.xml 13 Dec 2004 18:08:22 -0000 1.326 +++ impbody.xml 13 Dec 2004 19:42:00 -0000 1.327 @@ -2387,7 +2387,7 @@ <programlisting language="lisp"> (&make-hash-table; &key-amp; :TEST :INITIAL-CONTENTS :SIZE :REHASH-SIZE :REHASH-THRESHOLD - :warn-if-needs-rehash-after-gc :weak) + :WARN-IF-NEEDS-REHASH-AFTER-GC :WEAK) </programlisting> <para>The &test-k; argument can be, other than one of the symbols &eq;, @@ -2485,13 +2485,15 @@ <title>Interaction between &hash-table-t;s and &gc;ion.</title> <para>When a hash table contains keys to be compared by identity - such - as numbers in hash tables with test &eq;, or conses in hash tables with - test &eq;, &eql;, or vectors in hash tables with test &eq;, &eql;, &equal;, - or &standard-object-t; or &structure-object-t; instances in hash tables with - test &eq;, &eql;, &equal;, &equalp; - the hash code will in general depend - on the object's address in memory. Therefore it will in general be invalidated - after a &gc;ion, and the hash table's internal structure must be recomputed - at the next hash table access.</para> + as &number-t;s in &hash-table-t;s with the &hash-table-test; &eq;; + or &cons-t;es in tables which test with &eq; or &eql;; + or &vector-t;s in tables which test with &eq;, &eql; or &equal;; + or &standard-object-t; or &structure-object-t; instances in tables which + test with &eq;, &eql;, &equal; or &equalp;; + - the hash code will in general depend on the object's address in + memory. Therefore it will in general be invalidated after a &gc;ion, + and the hash table's internal structure must be recomputed at the next + table access.</para> <para>While <constant>:WARN-IF-NEEDS-REHASH-AFTER-GC</constant> can help checking the efficiency of a particular &hash-table-t;, the variable @@ -2506,16 +2508,18 @@ issued that shows the inefficient &hash-table-t;.</para> <para>What can be done to avoid the inefficiencies detected by these warnings? - 1. In many cases you can solve the problem by using the STABLEHASH variant - of the hash test. 2. In other cases, namely &standard-object-t; or - &structure-object-t; instances, you can solve the problem by making the - key object classes inherit from &standard-stablehash; or - &structure-stablehash;, respectively. 3. In the remaining cases, you should - store a hash key inside the object, of which you can guarantee uniqueness - through your application (for example the ID of an object in a database, or - the serial number of an object), and use this key as hash key instead of the - original object.</para> - + <orderedlist><listitem><simpara>In many cases you can solve the problem + by using the <function>STABLEHASH</function> variant of the hash + test.</simpara></listitem> + <listitem><simpara>In other cases, namely &standard-object-t; or + &structure-object-t; instances, you can solve the problem by making + the key object classes inherit from &standard-stablehash; or + &structure-stablehash;, respectively.</simpara></listitem> + <listitem><simpara>In the remaining cases, you should store a hash key + inside the object, of which you can guarantee uniqueness through + your application (for example the ID of an object in a database, or + the serial number of an object), and use this key as hash key + instead of the original object.</simpara></listitem></orderedlist></para> </section> </section> --__--__-- Message: 13 From: Sam Steingold <sd...@us...> To: cli...@li... Subject: clisp/doc impext.xml,1.300,1.301 Date: Mon, 13 Dec 2004 19:42:58 +0000 Reply-To: cli...@li... Update of /cvsroot/clisp/clisp/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5515/doc Modified Files: impext.xml Log Message: "cradle-grave" is now a subsection of "custom-init-fini" Index: impext.xml =================================================================== RCS file: /cvsroot/clisp/clisp/doc/impext.xml,v retrieving revision 1.300 retrieving revision 1.301 diff -u -d -r1.300 -r1.301 --- impext.xml 13 Dec 2004 18:39:08 -0000 1.300 +++ impext.xml 13 Dec 2004 19:42:56 -0000 1.301 @@ -2,6 +2,9 @@ <chapter id="ext-p-indep"><title>Platform Independent Extensions</title> +<section id="custom-init-fini"><title>Customizing &clisp; Process + Initialization and Termination.</title> + <section id="cradle-grave"><title>Cradle to Grave</title> <subtitle>What is done when.</subtitle> <procedure><step><title>Initialization</title> @@ -15,11 +18,9 @@ <step><simpara>Initialize &ffi-pac;.</simpara></step> <step><simpara><link linkend="modinit">Initialize modules</link>.</simpara></step> - <step id="init-hooks"><simpara>Run all functions in &init-hooks; - like this: <code>(&mapc; #'&funcall; &init-hooks;)</code>. - </simpara></step> + <step><simpara>Run all functions in &init-hooks;.</simpara></step> <step><simpara>Say <quote>hi</quote> unless suppressed by &opt-v;. -</simpara></step></substeps></step> + </simpara></step></substeps></step> <step><title>The actual work</title><para>Handle command line options: file <olink targetdoc="man" targetptr="opt-init">loading</olink> and/or <olink targetdoc="man" targetptr="opt-compile">compilation</olink>, @@ -27,9 +28,7 @@ <olink targetdoc="man" targetptr="opt-exec-file">script execution</olink>, &repl;.</para></step> <step><title>Finalization</title> - <substeps><step id="fini-hooks"><simpara>Run all functions in - &fini-hooks; like this: <code>(&mapc; #'&funcall; &fini-hooks;)</code>. - </simpara></step> + <substeps><step><simpara>Run all functions in &fini-hooks;.</simpara></step> <step><simpara>Call &fresh-line; on the standard streams.</simpara></step> <step><simpara>Say <quote>bye</quote> unless suppressed by &opt-v;. </simpara></step> @@ -40,7 +39,26 @@ <step><simpara><link linkend="modfini">Finalize modules</link>.</simpara></step> <step><simpara>Close opened DLLs.</simpara></step> -</substeps></step></procedure> +</substeps></step></procedure></section> + +<section id="init-hooks"><title>Customizing Initialization</title> +<para>&init-hooks; is run like this:<programlisting language="lisp"> +(&mapc; #'&funcall; &init-hooks;) +</programlisting></para> +<note><title>The difference between &init-hooks; and +<link linkend="image"><constant>:INIT-FUNCTION</constant></link></title> +<para>&init-hooks; are <emphasis>always</emphasis> run regardless of the + command line options before even the banner is printed. + The <constant>:INIT-FUNCTION</constant> is run <emphasis>only</emphasis> + if the &repl; is ever entered and just before the first + <link linkend="prompt">prompt</link> is printed.</para></note> +</section> + +<section id="fini-hooks"><title>Customizing Termination</title> +<para>&fini-hooks; is run like this:<programlisting language="lisp"> +(&mapc; #'&funcall; &fini-hooks;) +</programlisting></para></section> + </section> <section id="image"><title>Saving an Image</title> @@ -61,7 +79,8 @@ executed at startup of the saved image, before entering the standard &repl;; thus, if you want to avoid the &repl;, you have to call <link linkend="quit"><function>EXT:EXIT</function></link> at the end - of the init function yourself.</simpara> + of the init function yourself + (this does not prevent &fini-hooks; from being run).</simpara> <simpara>See <olink targetdoc="man" targetptr="opt-exec-file">the manual</olink> for passing command line arguments to this function. </simpara><simpara>See also &init-hooks; and &fini-hooks;.</simpara> --__--__-- _______________________________________________ clisp-cvs mailing list cli...@li... https://lists.sourceforge.net/lists/listinfo/clisp-cvs End of clisp-cvs Digest |