From 1a0f90f7f9e3e86bb22df6fa0ecba7b3c04afd7f Mon Sep 17 00:00:00 2001 From: Karl Heuer Date: Wed, 12 Oct 1994 05:16:00 +0000 Subject: [PATCH] (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer): Use the new substructure. --- src/lread.c | 55 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/src/lread.c b/src/lread.c index e29d46dccd..72283bde8a 100644 --- a/src/lread.c +++ b/src/lread.c @@ -1770,57 +1770,61 @@ defalias (sname, string) #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 (namestring, address) +defvar_lisp_nopro (namestring, address) char *namestring; Lisp_Object *address; { - Lisp_Object sym; + Lisp_Object sym, val; sym = intern (namestring); - XSETOBJFWD (XSYMBOL (sym)->value, address); - staticpro (address); + val = allocate_misc (); + XMISC (val)->type = Lisp_Misc_Objfwd; + XMISC (val)->u_objfwd.objvar = address; + XSYMBOL (sym)->value = val; } -/* 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) +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); } #ifndef standalone @@ -1836,14 +1840,17 @@ defvar_per_buffer (namestring, address, type, doc) 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) -- 2.39.2