diff options
Diffstat (limited to 'src/lread.c')
| -rw-r--r-- | src/lread.c | 94 |
1 files changed, 47 insertions, 47 deletions
diff --git a/src/lread.c b/src/lread.c index 83ebc8b3b10..a04b9679d83 100644 --- a/src/lread.c +++ b/src/lread.c | |||
| @@ -3687,7 +3687,8 @@ it defaults to the value of `obarray'. */) | |||
| 3687 | && EQ (obarray, initial_obarray)) | 3687 | && EQ (obarray, initial_obarray)) |
| 3688 | { | 3688 | { |
| 3689 | XSYMBOL (sym)->constant = 1; | 3689 | XSYMBOL (sym)->constant = 1; |
| 3690 | XSYMBOL (sym)->value = sym; | 3690 | XSYMBOL (sym)->redirect = SYMBOL_PLAINVAL; |
| 3691 | SET_SYMBOL_VAL (XSYMBOL (sym), sym); | ||
| 3691 | } | 3692 | } |
| 3692 | 3693 | ||
| 3693 | ptr = &XVECTOR (obarray)->contents[XINT (tem)]; | 3694 | ptr = &XVECTOR (obarray)->contents[XINT (tem)]; |
| @@ -3768,8 +3769,6 @@ OBARRAY defaults to the value of the variable `obarray'. */) | |||
| 3768 | error ("Attempt to unintern t or nil"); */ | 3769 | error ("Attempt to unintern t or nil"); */ |
| 3769 | 3770 | ||
| 3770 | XSYMBOL (tem)->interned = SYMBOL_UNINTERNED; | 3771 | XSYMBOL (tem)->interned = SYMBOL_UNINTERNED; |
| 3771 | XSYMBOL (tem)->constant = 0; | ||
| 3772 | XSYMBOL (tem)->indirect_variable = 0; | ||
| 3773 | 3772 | ||
| 3774 | hash = oblookup_last_bucket_number; | 3773 | hash = oblookup_last_bucket_number; |
| 3775 | 3774 | ||
| @@ -3914,35 +3913,31 @@ void | |||
| 3914 | init_obarray () | 3913 | init_obarray () |
| 3915 | { | 3914 | { |
| 3916 | Lisp_Object oblength; | 3915 | Lisp_Object oblength; |
| 3917 | int hash; | ||
| 3918 | Lisp_Object *tem; | ||
| 3919 | 3916 | ||
| 3920 | XSETFASTINT (oblength, OBARRAY_SIZE); | 3917 | XSETFASTINT (oblength, OBARRAY_SIZE); |
| 3921 | 3918 | ||
| 3922 | Qnil = Fmake_symbol (make_pure_c_string ("nil")); | ||
| 3923 | Vobarray = Fmake_vector (oblength, make_number (0)); | 3919 | Vobarray = Fmake_vector (oblength, make_number (0)); |
| 3924 | initial_obarray = Vobarray; | 3920 | initial_obarray = Vobarray; |
| 3925 | staticpro (&initial_obarray); | 3921 | staticpro (&initial_obarray); |
| 3926 | /* Intern nil in the obarray */ | ||
| 3927 | XSYMBOL (Qnil)->interned = SYMBOL_INTERNED_IN_INITIAL_OBARRAY; | ||
| 3928 | XSYMBOL (Qnil)->constant = 1; | ||
| 3929 | |||
| 3930 | /* These locals are to kludge around a pyramid compiler bug. */ | ||
| 3931 | hash = hash_string ("nil", 3); | ||
| 3932 | /* Separate statement here to avoid VAXC bug. */ | ||
| 3933 | hash %= OBARRAY_SIZE; | ||
| 3934 | tem = &XVECTOR (Vobarray)->contents[hash]; | ||
| 3935 | *tem = Qnil; | ||
| 3936 | 3922 | ||
| 3937 | Qunbound = Fmake_symbol (make_pure_c_string ("unbound")); | 3923 | Qunbound = Fmake_symbol (make_pure_c_string ("unbound")); |
| 3938 | XSYMBOL (Qnil)->function = Qunbound; | 3924 | /* Set temporary dummy values to Qnil and Vpurify_flag to satisfy the |
| 3939 | XSYMBOL (Qunbound)->value = Qunbound; | 3925 | NILP (Vpurify_flag) check in intern_c_string. */ |
| 3926 | Qnil = make_number (-1); Vpurify_flag = make_number (1); | ||
| 3927 | Qnil = intern_c_string ("nil"); | ||
| 3928 | |||
| 3929 | /* Fmake_symbol inits fields of new symbols with Qunbound and Qnil, | ||
| 3930 | so those two need to be fixed manally. */ | ||
| 3931 | SET_SYMBOL_VAL (XSYMBOL (Qunbound), Qunbound); | ||
| 3940 | XSYMBOL (Qunbound)->function = Qunbound; | 3932 | XSYMBOL (Qunbound)->function = Qunbound; |
| 3933 | XSYMBOL (Qunbound)->plist = Qnil; | ||
| 3934 | /* XSYMBOL (Qnil)->function = Qunbound; */ | ||
| 3935 | SET_SYMBOL_VAL (XSYMBOL (Qnil), Qnil); | ||
| 3936 | XSYMBOL (Qnil)->constant = 1; | ||
| 3937 | XSYMBOL (Qnil)->plist = Qnil; | ||
| 3941 | 3938 | ||
| 3942 | Qt = intern_c_string ("t"); | 3939 | Qt = intern_c_string ("t"); |
| 3943 | XSYMBOL (Qnil)->value = Qnil; | 3940 | SET_SYMBOL_VAL (XSYMBOL (Qt), Qt); |
| 3944 | XSYMBOL (Qnil)->plist = Qnil; | ||
| 3945 | XSYMBOL (Qt)->value = Qt; | ||
| 3946 | XSYMBOL (Qt)->constant = 1; | 3941 | XSYMBOL (Qt)->constant = 1; |
| 3947 | 3942 | ||
| 3948 | /* Qt is correct even if CANNOT_DUMP. loadup.el will set to nil at end. */ | 3943 | /* Qt is correct even if CANNOT_DUMP. loadup.el will set to nil at end. */ |
| @@ -3981,27 +3976,29 @@ defalias (sname, string) | |||
| 3981 | to a C variable of type int. Sample call: | 3976 | to a C variable of type int. Sample call: |
| 3982 | DEFVAR_INT ("emacs-priority", &emacs_priority, "Documentation"); */ | 3977 | DEFVAR_INT ("emacs-priority", &emacs_priority, "Documentation"); */ |
| 3983 | void | 3978 | void |
| 3984 | defvar_int (const char *namestring, EMACS_INT *address) | 3979 | defvar_int (struct Lisp_Intfwd *i_fwd, |
| 3980 | const char *namestring, EMACS_INT *address) | ||
| 3985 | { | 3981 | { |
| 3986 | Lisp_Object sym, val; | 3982 | Lisp_Object sym; |
| 3987 | sym = intern_c_string (namestring); | 3983 | sym = intern_c_string (namestring); |
| 3988 | val = allocate_misc (); | 3984 | i_fwd->type = Lisp_Fwd_Int; |
| 3989 | XMISCTYPE (val) = Lisp_Misc_Intfwd; | 3985 | i_fwd->intvar = address; |
| 3990 | XINTFWD (val)->intvar = address; | 3986 | XSYMBOL (sym)->redirect = SYMBOL_FORWARDED; |
| 3991 | SET_SYMBOL_VALUE (sym, val); | 3987 | SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)i_fwd); |
| 3992 | } | 3988 | } |
| 3993 | 3989 | ||
| 3994 | /* Similar but define a variable whose value is t if address contains 1, | 3990 | /* Similar but define a variable whose value is t if address contains 1, |
| 3995 | nil if address contains 0. */ | 3991 | nil if address contains 0. */ |
| 3996 | void | 3992 | void |
| 3997 | defvar_bool (const char *namestring, int *address) | 3993 | defvar_bool (struct Lisp_Boolfwd *b_fwd, |
| 3994 | const char *namestring, int *address) | ||
| 3998 | { | 3995 | { |
| 3999 | Lisp_Object sym, val; | 3996 | Lisp_Object sym; |
| 4000 | sym = intern_c_string (namestring); | 3997 | sym = intern_c_string (namestring); |
| 4001 | val = allocate_misc (); | 3998 | b_fwd->type = Lisp_Fwd_Bool; |
| 4002 | XMISCTYPE (val) = Lisp_Misc_Boolfwd; | 3999 | b_fwd->boolvar = address; |
| 4003 | XBOOLFWD (val)->boolvar = address; | 4000 | XSYMBOL (sym)->redirect = SYMBOL_FORWARDED; |
| 4004 | SET_SYMBOL_VALUE (sym, val); | 4001 | SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)b_fwd); |
| 4005 | Vbyte_boolean_vars = Fcons (sym, Vbyte_boolean_vars); | 4002 | Vbyte_boolean_vars = Fcons (sym, Vbyte_boolean_vars); |
| 4006 | } | 4003 | } |
| 4007 | 4004 | ||
| @@ -4011,20 +4008,22 @@ defvar_bool (const char *namestring, int *address) | |||
| 4011 | gc-marked for some other reason, since marking the same slot twice | 4008 | gc-marked for some other reason, since marking the same slot twice |
| 4012 | can cause trouble with strings. */ | 4009 | can cause trouble with strings. */ |
| 4013 | void | 4010 | void |
| 4014 | defvar_lisp_nopro (const char *namestring, Lisp_Object *address) | 4011 | defvar_lisp_nopro (struct Lisp_Objfwd *o_fwd, |
| 4012 | const char *namestring, Lisp_Object *address) | ||
| 4015 | { | 4013 | { |
| 4016 | Lisp_Object sym, val; | 4014 | Lisp_Object sym; |
| 4017 | sym = intern_c_string (namestring); | 4015 | sym = intern_c_string (namestring); |
| 4018 | val = allocate_misc (); | 4016 | o_fwd->type = Lisp_Fwd_Obj; |
| 4019 | XMISCTYPE (val) = Lisp_Misc_Objfwd; | 4017 | o_fwd->objvar = address; |
| 4020 | XOBJFWD (val)->objvar = address; | 4018 | XSYMBOL (sym)->redirect = SYMBOL_FORWARDED; |
| 4021 | SET_SYMBOL_VALUE (sym, val); | 4019 | SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)o_fwd); |
| 4022 | } | 4020 | } |
| 4023 | 4021 | ||
| 4024 | void | 4022 | void |
| 4025 | defvar_lisp (const char *namestring, Lisp_Object *address) | 4023 | defvar_lisp (struct Lisp_Objfwd *o_fwd, |
| 4024 | const char *namestring, Lisp_Object *address) | ||
| 4026 | { | 4025 | { |
| 4027 | defvar_lisp_nopro (namestring, address); | 4026 | defvar_lisp_nopro (o_fwd, namestring, address); |
| 4028 | staticpro (address); | 4027 | staticpro (address); |
| 4029 | } | 4028 | } |
| 4030 | 4029 | ||
| @@ -4032,14 +4031,15 @@ defvar_lisp (const char *namestring, Lisp_Object *address) | |||
| 4032 | at a particular offset in the current kboard object. */ | 4031 | at a particular offset in the current kboard object. */ |
| 4033 | 4032 | ||
| 4034 | void | 4033 | void |
| 4035 | defvar_kboard (const char *namestring, int offset) | 4034 | defvar_kboard (struct Lisp_Kboard_Objfwd *ko_fwd, |
| 4035 | const char *namestring, int offset) | ||
| 4036 | { | 4036 | { |
| 4037 | Lisp_Object sym, val; | 4037 | Lisp_Object sym; |
| 4038 | sym = intern_c_string (namestring); | 4038 | sym = intern_c_string (namestring); |
| 4039 | val = allocate_misc (); | 4039 | ko_fwd->type = Lisp_Fwd_Kboard_Obj; |
| 4040 | XMISCTYPE (val) = Lisp_Misc_Kboard_Objfwd; | 4040 | ko_fwd->offset = offset; |
| 4041 | XKBOARD_OBJFWD (val)->offset = offset; | 4041 | XSYMBOL (sym)->redirect = SYMBOL_FORWARDED; |
| 4042 | SET_SYMBOL_VALUE (sym, val); | 4042 | SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)ko_fwd); |
| 4043 | } | 4043 | } |
| 4044 | 4044 | ||
| 4045 | /* Record the value of load-path used at the start of dumping | 4045 | /* Record the value of load-path used at the start of dumping |