comparison src/alloc.c @ 9942:c189487b08dd

(free_float): Don't assume XFASTINT accesses the raw bits. (make_float, free_cons, Fcons, Fmake_symbol, gc_sweep): Likewise.
author Karl Heuer <kwzh@gnu.org>
date Tue, 15 Nov 1994 21:44:10 +0000
parents 2a9f99682f82
children e0672d4cf470
comparison
equal deleted inserted replaced
9941:6d82f17895cf 9942:c189487b08dd
433 433
434 /* Explicitly free a float cell. */ 434 /* Explicitly free a float cell. */
435 free_float (ptr) 435 free_float (ptr)
436 struct Lisp_Float *ptr; 436 struct Lisp_Float *ptr;
437 { 437 {
438 XSETFASTINT (ptr->type, (EMACS_INT) float_free_list); 438 *(struct Lisp_Float **)&ptr->type = float_free_list;
439 float_free_list = ptr; 439 float_free_list = ptr;
440 } 440 }
441 441
442 Lisp_Object 442 Lisp_Object
443 make_float (float_value) 443 make_float (float_value)
446 register Lisp_Object val; 446 register Lisp_Object val;
447 447
448 if (float_free_list) 448 if (float_free_list)
449 { 449 {
450 XSETFLOAT (val, float_free_list); 450 XSETFLOAT (val, float_free_list);
451 float_free_list = (struct Lisp_Float *) XFASTINT (float_free_list->type); 451 float_free_list = *(struct Lisp_Float **)&float_free_list->type;
452 } 452 }
453 else 453 else
454 { 454 {
455 if (float_block_index == FLOAT_BLOCK_SIZE) 455 if (float_block_index == FLOAT_BLOCK_SIZE)
456 { 456 {
506 506
507 /* Explicitly free a cons cell. */ 507 /* Explicitly free a cons cell. */
508 free_cons (ptr) 508 free_cons (ptr)
509 struct Lisp_Cons *ptr; 509 struct Lisp_Cons *ptr;
510 { 510 {
511 XSETFASTINT (ptr->car, (EMACS_INT) cons_free_list); 511 *(struct Lisp_Cons **)&ptr->car = cons_free_list;
512 cons_free_list = ptr; 512 cons_free_list = ptr;
513 } 513 }
514 514
515 DEFUN ("cons", Fcons, Scons, 2, 2, 0, 515 DEFUN ("cons", Fcons, Scons, 2, 2, 0,
516 "Create a new cons, give it CAR and CDR as components, and return it.") 516 "Create a new cons, give it CAR and CDR as components, and return it.")
520 register Lisp_Object val; 520 register Lisp_Object val;
521 521
522 if (cons_free_list) 522 if (cons_free_list)
523 { 523 {
524 XSETCONS (val, cons_free_list); 524 XSETCONS (val, cons_free_list);
525 cons_free_list = (struct Lisp_Cons *) XFASTINT (cons_free_list->car); 525 cons_free_list = *(struct Lisp_Cons **)&cons_free_list->car;
526 } 526 }
527 else 527 else
528 { 528 {
529 if (cons_block_index == CONS_BLOCK_SIZE) 529 if (cons_block_index == CONS_BLOCK_SIZE)
530 { 530 {
706 CHECK_STRING (str, 0); 706 CHECK_STRING (str, 0);
707 707
708 if (symbol_free_list) 708 if (symbol_free_list)
709 { 709 {
710 XSETSYMBOL (val, symbol_free_list); 710 XSETSYMBOL (val, symbol_free_list);
711 symbol_free_list 711 symbol_free_list = *(struct Lisp_Symbol **)&symbol_free_list->value;
712 = (struct Lisp_Symbol *) XFASTINT (symbol_free_list->value);
713 } 712 }
714 else 713 else
715 { 714 {
716 if (symbol_block_index == SYMBOL_BLOCK_SIZE) 715 if (symbol_block_index == SYMBOL_BLOCK_SIZE)
717 { 716 {
1786 { 1785 {
1787 register int i; 1786 register int i;
1788 for (i = 0; i < lim; i++) 1787 for (i = 0; i < lim; i++)
1789 if (!XMARKBIT (cblk->conses[i].car)) 1788 if (!XMARKBIT (cblk->conses[i].car))
1790 { 1789 {
1791 XSETFASTINT (cblk->conses[i].car, (EMACS_INT) cons_free_list);
1792 num_free++; 1790 num_free++;
1791 *(struct Lisp_Cons **)&cblk->conses[i].car = cons_free_list;
1793 cons_free_list = &cblk->conses[i]; 1792 cons_free_list = &cblk->conses[i];
1794 } 1793 }
1795 else 1794 else
1796 { 1795 {
1797 num_used++; 1796 num_used++;
1816 { 1815 {
1817 register int i; 1816 register int i;
1818 for (i = 0; i < lim; i++) 1817 for (i = 0; i < lim; i++)
1819 if (!XMARKBIT (fblk->floats[i].type)) 1818 if (!XMARKBIT (fblk->floats[i].type))
1820 { 1819 {
1821 XSETFASTINT (fblk->floats[i].type, (EMACS_INT) float_free_list);
1822 num_free++; 1820 num_free++;
1821 *(struct Lisp_Float **)&fblk->floats[i].type = float_free_list;
1823 float_free_list = &fblk->floats[i]; 1822 float_free_list = &fblk->floats[i];
1824 } 1823 }
1825 else 1824 else
1826 { 1825 {
1827 num_used++; 1826 num_used++;
1880 { 1879 {
1881 register int i; 1880 register int i;
1882 for (i = 0; i < lim; i++) 1881 for (i = 0; i < lim; i++)
1883 if (!XMARKBIT (sblk->symbols[i].plist)) 1882 if (!XMARKBIT (sblk->symbols[i].plist))
1884 { 1883 {
1885 XSETFASTINT (sblk->symbols[i].value, (EMACS_INT) symbol_free_list); 1884 *(struct Lisp_Symbol **)&sblk->symbols[i].value = symbol_free_list;
1886 symbol_free_list = &sblk->symbols[i]; 1885 symbol_free_list = &sblk->symbols[i];
1887 num_free++; 1886 num_free++;
1888 } 1887 }
1889 else 1888 else
1890 { 1889 {