Mercurial > emacs
diff src/lread.c @ 105872:89183b6f6e9d
* process.c (socket_options): Make it const.
(set_socket_option, init_process): Use a const pointer.
* lread.c (intern_c_string): New function.
(defvar_kboard, defvar_lisp, defvar_lisp_nopro, defvar_bool)
(defvar_int): Uset it. Make the name const char*.
* lisp.h (defvar_kboard, defvar_lisp, defvar_lisp_nopro, defvar_bool)
(defvar_int): Update prototypes.
(DEFUN, EXFUN): Support for prototypes is now required.
(intern_c_string): New prototype.
(struct Lisp_Subr): Make symbol_name constant.
* font.c (struct table_entry): Remove unused member. Make NAMES
constant.
(weight_table, slant_table, width_table): Make constant.
* emacs.c (struct standard_args): Make name and longname constant.
* character.h (DEFSYM): Use intern_c_string.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Fri, 06 Nov 2009 06:07:46 +0000 |
parents | 0ad1fc06bfc8 |
children | 21bdda3ded62 |
line wrap: on
line diff
--- a/src/lread.c Fri Nov 06 05:24:28 2009 +0000 +++ b/src/lread.c Fri Nov 06 06:07:46 2009 +0000 @@ -3622,6 +3622,29 @@ return Fintern (make_string (str, len), obarray); } +Lisp_Object +intern_c_string (const char *str) +{ + Lisp_Object tem; + int len = strlen (str); + Lisp_Object obarray; + + obarray = Vobarray; + if (!VECTORP (obarray) || XVECTOR (obarray)->size == 0) + obarray = check_obarray (obarray); + tem = oblookup (obarray, str, len, len); + if (SYMBOLP (tem)) + return tem; + + if (NILP (Vpurify_flag)) + /* Creating a non-pure string from a string literal not + implemented yet. We could just use make_string here and live + with the extra copy. */ + abort (); + + return Fintern (make_pure_c_string (str), obarray); +} + /* Create an uninterned symbol with name STR. */ Lisp_Object @@ -3956,12 +3979,10 @@ to a C variable of type int. Sample call: DEFVAR_INT ("emacs-priority", &emacs_priority, "Documentation"); */ void -defvar_int (namestring, address) - char *namestring; - EMACS_INT *address; +defvar_int (const char *namestring, EMACS_INT *address) { Lisp_Object sym, val; - sym = intern (namestring); + sym = intern_c_string (namestring); val = allocate_misc (); XMISCTYPE (val) = Lisp_Misc_Intfwd; XINTFWD (val)->intvar = address; @@ -3971,12 +3992,10 @@ /* Similar but define a variable whose value is t if address contains 1, nil if address contains 0. */ void -defvar_bool (namestring, address) - char *namestring; - int *address; +defvar_bool (const char *namestring, int *address) { Lisp_Object sym, val; - sym = intern (namestring); + sym = intern_c_string (namestring); val = allocate_misc (); XMISCTYPE (val) = Lisp_Misc_Boolfwd; XBOOLFWD (val)->boolvar = address; @@ -3990,12 +4009,10 @@ 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; +defvar_lisp_nopro (const char *namestring, Lisp_Object *address) { Lisp_Object sym, val; - sym = intern (namestring); + sym = intern_c_string (namestring); val = allocate_misc (); XMISCTYPE (val) = Lisp_Misc_Objfwd; XOBJFWD (val)->objvar = address; @@ -4003,9 +4020,7 @@ } void -defvar_lisp (namestring, address) - char *namestring; - Lisp_Object *address; +defvar_lisp (const char *namestring, Lisp_Object *address) { defvar_lisp_nopro (namestring, address); staticpro (address); @@ -4015,12 +4030,10 @@ at a particular offset in the current kboard object. */ void -defvar_kboard (namestring, offset) - char *namestring; - int offset; +defvar_kboard (const char *namestring, int offset) { Lisp_Object sym, val; - sym = intern (namestring); + sym = intern_c_string (namestring); val = allocate_misc (); XMISCTYPE (val) = Lisp_Misc_Kboard_Objfwd; XKBOARD_OBJFWD (val)->offset = offset;