# HG changeset patch # User Karl Heuer # Date 781938960 0 # Node ID 9052bf69f7de590c478dbc20bec85b85bc6ff4b8 # Parent ea2ee8bd3c63443242307a2f6e2b3cdf05ffc2b9 (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer): Use the new substructure. diff -r ea2ee8bd3c63 -r 9052bf69f7de src/lread.c --- a/src/lread.c Wed Oct 12 05:15:21 1994 +0000 +++ b/src/lread.c Wed Oct 12 05:16:00 1994 +0000 @@ -1770,59 +1770,63 @@ #endif /* NOTDEF */ /* Define an "integer variable"; a symbol whose value is forwarded - to a C variable of type int. Sample call: */ + to a C variable of type int. Sample call: */ /* DEFVARINT ("indent-tabs-mode", &indent_tabs_mode, "Documentation"); */ - void defvar_int (namestring, address) char *namestring; int *address; { - Lisp_Object sym; + Lisp_Object sym, val; sym = intern (namestring); - XSETINTFWD (XSYMBOL (sym)->value, address); + val = allocate_misc (); + XMISC (val)->type = Lisp_Misc_Intfwd; + XMISC (val)->u_intfwd.intvar = address; + XSYMBOL (sym)->value = val; } /* Similar but define a variable whose value is T if address contains 1, - NIL if address contains 0 */ - + NIL if address contains 0 */ void defvar_bool (namestring, address) char *namestring; int *address; { - Lisp_Object sym; + Lisp_Object sym, val; sym = intern (namestring); - XSETBOOLFWD (XSYMBOL (sym)->value, address); + val = allocate_misc (); + XMISC (val)->type = Lisp_Misc_Boolfwd; + XMISC (val)->u_boolfwd.boolvar = address; + XSYMBOL (sym)->value = val; } -/* Similar but define a variable whose value is the Lisp Object stored at address. */ +/* Similar but define a variable whose value is the Lisp Object stored + at address. Two versions: with and without gc-marking of the C + variable. The nopro version is used when that variable will be + gc-marked for some other reason, since marking the same slot twice + can cause trouble with strings. */ +void +defvar_lisp_nopro (namestring, address) + char *namestring; + Lisp_Object *address; +{ + Lisp_Object sym, val; + sym = intern (namestring); + val = allocate_misc (); + XMISC (val)->type = Lisp_Misc_Objfwd; + XMISC (val)->u_objfwd.objvar = address; + XSYMBOL (sym)->value = val; +} void defvar_lisp (namestring, address) char *namestring; Lisp_Object *address; { - Lisp_Object sym; - sym = intern (namestring); - XSETOBJFWD (XSYMBOL (sym)->value, address); + defvar_lisp_nopro (namestring, address); staticpro (address); } -/* Similar but don't request gc-marking of the C variable. - Used when that variable will be gc-marked for some other reason, - since marking the same slot twice can cause trouble with strings. */ - -void -defvar_lisp_nopro (namestring, address) - char *namestring; - Lisp_Object *address; -{ - Lisp_Object sym; - sym = intern (namestring); - XSETOBJFWD (XSYMBOL (sym)->value, address); -} - #ifndef standalone /* Similar but define a variable whose value is the Lisp Object stored in @@ -1836,14 +1840,17 @@ Lisp_Object type; char *doc; { - Lisp_Object sym; + Lisp_Object sym, val; int offset; extern struct buffer buffer_local_symbols; sym = intern (namestring); + val = allocate_misc (); offset = (char *)address - (char *)current_buffer; - XSETBUFFER_OBJFWD (XSYMBOL (sym)->value, offset); + XMISC (val)->type = Lisp_Misc_Buffer_Objfwd; + XMISC (val)->u_buffer_objfwd.offset = offset; + XSYMBOL (sym)->value = val; *(Lisp_Object *)(offset + (char *)&buffer_local_symbols) = sym; *(Lisp_Object *)(offset + (char *)&buffer_local_types) = type; if (XINT (*(Lisp_Object *)(offset + (char *)&buffer_local_flags)) == 0)