Commit 1cd5fe6a authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(free_float, free_cons): Don't use the same field for chaining as for marking.

(make_float, Fcons, gc_sweep): Corresponding changes.
parent 35ce8cd7
...@@ -588,7 +588,7 @@ init_float () ...@@ -588,7 +588,7 @@ init_float ()
free_float (ptr) free_float (ptr)
struct Lisp_Float *ptr; struct Lisp_Float *ptr;
{ {
*(struct Lisp_Float **)&ptr->type = float_free_list; *(struct Lisp_Float **)&ptr->data = float_free_list;
float_free_list = ptr; float_free_list = ptr;
} }
...@@ -600,8 +600,10 @@ make_float (float_value) ...@@ -600,8 +600,10 @@ make_float (float_value)
if (float_free_list) if (float_free_list)
{ {
/* We use the data field for chaining the free list
so that we won't use the same field that has the mark bit. */
XSETFLOAT (val, float_free_list); XSETFLOAT (val, float_free_list);
float_free_list = *(struct Lisp_Float **)&float_free_list->type; float_free_list = *(struct Lisp_Float **)&float_free_list->data;
} }
else else
{ {
...@@ -668,7 +670,7 @@ init_cons () ...@@ -668,7 +670,7 @@ init_cons ()
free_cons (ptr) free_cons (ptr)
struct Lisp_Cons *ptr; struct Lisp_Cons *ptr;
{ {
*(struct Lisp_Cons **)&ptr->car = cons_free_list; *(struct Lisp_Cons **)&ptr->cdr = cons_free_list;
cons_free_list = ptr; cons_free_list = ptr;
} }
...@@ -681,8 +683,10 @@ DEFUN ("cons", Fcons, Scons, 2, 2, 0, ...@@ -681,8 +683,10 @@ DEFUN ("cons", Fcons, Scons, 2, 2, 0,
if (cons_free_list) if (cons_free_list)
{ {
/* We use the cdr for chaining the free list
so that we won't use the same field that has the mark bit. */
XSETCONS (val, cons_free_list); XSETCONS (val, cons_free_list);
cons_free_list = *(struct Lisp_Cons **)&cons_free_list->car; cons_free_list = *(struct Lisp_Cons **)&cons_free_list->cdr;
} }
else else
{ {
...@@ -2134,7 +2138,7 @@ gc_sweep () ...@@ -2134,7 +2138,7 @@ gc_sweep ()
if (!XMARKBIT (cblk->conses[i].car)) if (!XMARKBIT (cblk->conses[i].car))
{ {
num_free++; num_free++;
*(struct Lisp_Cons **)&cblk->conses[i].car = cons_free_list; *(struct Lisp_Cons **)&cblk->conses[i].cdr = cons_free_list;
cons_free_list = &cblk->conses[i]; cons_free_list = &cblk->conses[i];
} }
else else
...@@ -2164,7 +2168,7 @@ gc_sweep () ...@@ -2164,7 +2168,7 @@ gc_sweep ()
if (!XMARKBIT (fblk->floats[i].type)) if (!XMARKBIT (fblk->floats[i].type))
{ {
num_free++; num_free++;
*(struct Lisp_Float **)&fblk->floats[i].type = float_free_list; *(struct Lisp_Float **)&fblk->floats[i].data = float_free_list;
float_free_list = &fblk->floats[i]; float_free_list = &fblk->floats[i];
} }
else else
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment