aboutsummaryrefslogtreecommitdiffstats
path: root/src/lread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lread.c')
-rw-r--r--src/lread.c94
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
3914init_obarray () 3913init_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"); */
3983void 3978void
3984defvar_int (const char *namestring, EMACS_INT *address) 3979defvar_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. */
3996void 3992void
3997defvar_bool (const char *namestring, int *address) 3993defvar_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. */
4013void 4010void
4014defvar_lisp_nopro (const char *namestring, Lisp_Object *address) 4011defvar_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
4024void 4022void
4025defvar_lisp (const char *namestring, Lisp_Object *address) 4023defvar_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
4034void 4033void
4035defvar_kboard (const char *namestring, int offset) 4034defvar_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