comparison src/data.c @ 424:11054d720c21 r21-2-20

Import from CVS: tag r21-2-20
author cvs
date Mon, 13 Aug 2007 11:26:11 +0200
parents 41dbb7a9d5f2
children
comparison
equal deleted inserted replaced
423:28d9c139be4c 424:11054d720c21
48 Lisp_Object Qinvalid_function, Qwrong_number_of_arguments, Qno_catch; 48 Lisp_Object Qinvalid_function, Qwrong_number_of_arguments, Qno_catch;
49 Lisp_Object Qio_error, Qend_of_file; 49 Lisp_Object Qio_error, Qend_of_file;
50 Lisp_Object Qarith_error, Qrange_error, Qdomain_error; 50 Lisp_Object Qarith_error, Qrange_error, Qdomain_error;
51 Lisp_Object Qsingularity_error, Qoverflow_error, Qunderflow_error; 51 Lisp_Object Qsingularity_error, Qoverflow_error, Qunderflow_error;
52 Lisp_Object Qbeginning_of_buffer, Qend_of_buffer, Qbuffer_read_only; 52 Lisp_Object Qbeginning_of_buffer, Qend_of_buffer, Qbuffer_read_only;
53 Lisp_Object Qintegerp, Qnatnump, Qsymbolp, Qkeywordp; 53 Lisp_Object Qintegerp, Qnatnump, Qsymbolp;
54 Lisp_Object Qlistp, Qtrue_list_p, Qweak_listp; 54 Lisp_Object Qlistp, Qtrue_list_p, Qweak_listp;
55 Lisp_Object Qconsp, Qsubrp; 55 Lisp_Object Qconsp, Qsubrp;
56 Lisp_Object Qcharacterp, Qstringp, Qarrayp, Qsequencep, Qvectorp; 56 Lisp_Object Qcharacterp, Qstringp, Qarrayp, Qsequencep, Qvectorp;
57 Lisp_Object Qchar_or_string_p, Qmarkerp, Qinteger_or_marker_p, Qbufferp; 57 Lisp_Object Qchar_or_string_p, Qmarkerp, Qinteger_or_marker_p, Qbufferp;
58 Lisp_Object Qinteger_or_char_p, Qinteger_char_or_marker_p; 58 Lisp_Object Qinteger_or_char_p, Qinteger_char_or_marker_p;
59 Lisp_Object Qnumberp, Qnumber_or_marker_p, Qnumber_char_or_marker_p; 59 Lisp_Object Qnumberp, Qnumber_char_or_marker_p;
60 Lisp_Object Qbit_vectorp, Qbitp, Qcons, Qkeyword, Qcdr, Qignore; 60 Lisp_Object Qbit_vectorp, Qbitp, Qcdr;
61 61
62 Lisp_Object Qfloatp; 62 Lisp_Object Qfloatp;
63 63
64 #ifdef DEBUG_XEMACS 64 #ifdef DEBUG_XEMACS
65 65
145 { 145 {
146 signal_error (Qargs_out_of_range, list3 (a1, a2, a3)); 146 signal_error (Qargs_out_of_range, list3 (a1, a2, a3));
147 } 147 }
148 148
149 void 149 void
150 check_int_range (int val, int min, int max) 150 check_int_range (EMACS_INT val, EMACS_INT min, EMACS_INT max)
151 { 151 {
152 if (val < min || val > max) 152 if (val < min || val > max)
153 args_out_of_range_3 (make_int (val), make_int (min), make_int (max)); 153 args_out_of_range_3 (make_int (val), make_int (min), make_int (max));
154 } 154 }
155 155
158 158
159 EMACS_INT sign_extend_temp; 159 EMACS_INT sign_extend_temp;
160 160
161 /* On a few machines, XINT can only be done by calling this. */ 161 /* On a few machines, XINT can only be done by calling this. */
162 /* XEmacs: only used by m/convex.h */ 162 /* XEmacs: only used by m/convex.h */
163 int sign_extend_lisp_int (EMACS_INT num); 163 EMACS_INT sign_extend_lisp_int (EMACS_INT num);
164 int 164 EMACS_INT
165 sign_extend_lisp_int (EMACS_INT num) 165 sign_extend_lisp_int (EMACS_INT num)
166 { 166 {
167 if (num & (1L << (VALBITS - 1))) 167 if (num & (1L << (VALBITS - 1)))
168 return num | ((-1L) << VALBITS); 168 return num | ((-1L) << VALBITS);
169 else 169 else
613 (conscell, newcar)) 613 (conscell, newcar))
614 { 614 {
615 if (!CONSP (conscell)) 615 if (!CONSP (conscell))
616 conscell = wrong_type_argument (Qconsp, conscell); 616 conscell = wrong_type_argument (Qconsp, conscell);
617 617
618 CHECK_LISP_WRITEABLE (conscell);
619 XCAR (conscell) = newcar; 618 XCAR (conscell) = newcar;
620 return newcar; 619 return newcar;
621 } 620 }
622 621
623 DEFUN ("setcdr", Fsetcdr, 2, 2, 0, /* 622 DEFUN ("setcdr", Fsetcdr, 2, 2, 0, /*
626 (conscell, newcdr)) 625 (conscell, newcdr))
627 { 626 {
628 if (!CONSP (conscell)) 627 if (!CONSP (conscell))
629 conscell = wrong_type_argument (Qconsp, conscell); 628 conscell = wrong_type_argument (Qconsp, conscell);
630 629
631 CHECK_LISP_WRITEABLE (conscell);
632 XCDR (conscell) = newcdr; 630 XCDR (conscell) = newcdr;
633 return newcdr; 631 return newcdr;
634 } 632 }
635 633
636 /* Find the function at the end of a chain of symbol function indirections. 634 /* Find the function at the end of a chain of symbol function indirections.
687 Return the element of ARRAY at index INDEX. 685 Return the element of ARRAY at index INDEX.
688 ARRAY may be a vector, bit vector, or string. INDEX starts at 0. 686 ARRAY may be a vector, bit vector, or string. INDEX starts at 0.
689 */ 687 */
690 (array, index_)) 688 (array, index_))
691 { 689 {
692 int idx; 690 EMACS_INT idx;
693 691
694 retry: 692 retry:
695 693
696 if (INTP (index_)) idx = XINT (index_); 694 if (INTP (index_)) idx = XINT (index_);
697 else if (CHARP (index_)) idx = XCHAR (index_); /* yuck! */ 695 else if (CHARP (index_)) idx = XCHAR (index_); /* yuck! */
741 Store into the element of ARRAY at index INDEX the value NEWVAL. 739 Store into the element of ARRAY at index INDEX the value NEWVAL.
742 ARRAY may be a vector, bit vector, or string. INDEX starts at 0. 740 ARRAY may be a vector, bit vector, or string. INDEX starts at 0.
743 */ 741 */
744 (array, index_, newval)) 742 (array, index_, newval))
745 { 743 {
746 int idx; 744 EMACS_INT idx;
747 745
748 retry: 746 retry:
749 747
750 if (INTP (index_)) idx = XINT (index_); 748 if (INTP (index_)) idx = XINT (index_);
751 else if (CHARP (index_)) idx = XCHAR (index_); /* yuck! */ 749 else if (CHARP (index_)) idx = XCHAR (index_); /* yuck! */
754 index_ = wrong_type_argument (Qinteger_or_char_p, index_); 752 index_ = wrong_type_argument (Qinteger_or_char_p, index_);
755 goto retry; 753 goto retry;
756 } 754 }
757 755
758 if (idx < 0) goto range_error; 756 if (idx < 0) goto range_error;
759
760 CHECK_LISP_WRITEABLE (array);
761 757
762 if (VECTORP (array)) 758 if (VECTORP (array))
763 { 759 {
764 if (idx >= XVECTOR_LENGTH (array)) goto range_error; 760 if (idx >= XVECTOR_LENGTH (array)) goto range_error;
765 XVECTOR_DATA (array)[idx] = newval; 761 XVECTOR_DATA (array)[idx] = newval;
837 obj = wrong_type_argument (Qnumber_char_or_marker_p, obj); 833 obj = wrong_type_argument (Qnumber_char_or_marker_p, obj);
838 goto retry; 834 goto retry;
839 } 835 }
840 } 836 }
841 837
842 static int 838 static EMACS_INT
843 integer_char_or_marker_to_int (Lisp_Object obj) 839 integer_char_or_marker_to_int (Lisp_Object obj)
844 { 840 {
845 retry: 841 retry:
846 if (INTP (obj)) return XINT (obj); 842 if (INTP (obj)) return XINT (obj);
847 else if (CHARP (obj)) return XCHAR (obj); 843 else if (CHARP (obj)) return XCHAR (obj);
1414 Return remainder of first arg divided by second. 1410 Return remainder of first arg divided by second.
1415 Both must be integers, characters or markers. 1411 Both must be integers, characters or markers.
1416 */ 1412 */
1417 (num1, num2)) 1413 (num1, num2))
1418 { 1414 {
1419 int ival1 = integer_char_or_marker_to_int (num1); 1415 EMACS_INT ival1 = integer_char_or_marker_to_int (num1);
1420 int ival2 = integer_char_or_marker_to_int (num2); 1416 EMACS_INT ival2 = integer_char_or_marker_to_int (num2);
1421 1417
1422 if (ival2 == 0) 1418 if (ival2 == 0)
1423 Fsignal (Qarith_error, Qnil); 1419 Fsignal (Qarith_error, Qnil);
1424 1420
1425 return make_int (ival1 % ival2); 1421 return make_int (ival1 % ival2);
1466 1462
1467 return make_float (dval1); 1463 return make_float (dval1);
1468 } 1464 }
1469 #endif /* LISP_FLOAT_TYPE */ 1465 #endif /* LISP_FLOAT_TYPE */
1470 { 1466 {
1471 int ival; 1467 EMACS_INT ival;
1472 if (iod2.c.ival == 0) goto divide_by_zero; 1468 if (iod2.c.ival == 0) goto divide_by_zero;
1473 1469
1474 ival = iod1.c.ival % iod2.c.ival; 1470 ival = iod1.c.ival % iod2.c.ival;
1475 1471
1476 /* If the "remainder" comes out with the wrong sign, fix it. */ 1472 /* If the "remainder" comes out with the wrong sign, fix it. */
1568 static Lisp_Object Vall_weak_lists; /* Gemarke es nicht!!! */ 1564 static Lisp_Object Vall_weak_lists; /* Gemarke es nicht!!! */
1569 1565
1570 static Lisp_Object encode_weak_list_type (enum weak_list_type type); 1566 static Lisp_Object encode_weak_list_type (enum weak_list_type type);
1571 1567
1572 static Lisp_Object 1568 static Lisp_Object
1573 mark_weak_list (Lisp_Object obj, void (*markobj) (Lisp_Object)) 1569 mark_weak_list (Lisp_Object obj)
1574 { 1570 {
1575 return Qnil; /* nichts ist gemarkt */ 1571 return Qnil; /* nichts ist gemarkt */
1576 } 1572 }
1577 1573
1578 static void 1574 static void
1623 return result; 1619 return result;
1624 } 1620 }
1625 1621
1626 static const struct lrecord_description weak_list_description[] = { 1622 static const struct lrecord_description weak_list_description[] = {
1627 { XD_LISP_OBJECT, offsetof(struct weak_list, list), 1 }, 1623 { XD_LISP_OBJECT, offsetof(struct weak_list, list), 1 },
1628 { XD_LISP_OBJECT, offsetof(struct weak_list, next_weak), 1 }, 1624 { XD_LO_LINK, offsetof(struct weak_list, next_weak) },
1629 { XD_END } 1625 { XD_END }
1630 }; 1626 };
1631 1627
1632 DEFINE_LRECORD_IMPLEMENTATION ("weak-list", weak_list, 1628 DEFINE_LRECORD_IMPLEMENTATION ("weak-list", weak_list,
1633 mark_weak_list, print_weak_list, 1629 mark_weak_list, print_weak_list,
1650 1646
1651 Linked lists just majorly suck, d'ya know? 1647 Linked lists just majorly suck, d'ya know?
1652 */ 1648 */
1653 1649
1654 int 1650 int
1655 finish_marking_weak_lists (int (*obj_marked_p) (Lisp_Object), 1651 finish_marking_weak_lists (void)
1656 void (*markobj) (Lisp_Object))
1657 { 1652 {
1658 Lisp_Object rest; 1653 Lisp_Object rest;
1659 int did_mark = 0; 1654 int did_mark = 0;
1660 1655
1661 for (rest = Vall_weak_lists; 1656 for (rest = Vall_weak_lists;
1662 !GC_NILP (rest); 1657 !NILP (rest);
1663 rest = XWEAK_LIST (rest)->next_weak) 1658 rest = XWEAK_LIST (rest)->next_weak)
1664 { 1659 {
1665 Lisp_Object rest2; 1660 Lisp_Object rest2;
1666 enum weak_list_type type = XWEAK_LIST (rest)->type; 1661 enum weak_list_type type = XWEAK_LIST (rest)->type;
1667 1662
1668 if (! obj_marked_p (rest)) 1663 if (! marked_p (rest))
1669 /* The weak list is probably garbage. Ignore it. */ 1664 /* The weak list is probably garbage. Ignore it. */
1670 continue; 1665 continue;
1671 1666
1672 for (rest2 = XWEAK_LIST (rest)->list; 1667 for (rest2 = XWEAK_LIST (rest)->list;
1673 /* We need to be trickier since we're inside of GC; 1668 /* We need to be trickier since we're inside of GC;
1674 use CONSP instead of !NILP in case of user-visible 1669 use CONSP instead of !NILP in case of user-visible
1675 imperfect lists */ 1670 imperfect lists */
1676 GC_CONSP (rest2); 1671 CONSP (rest2);
1677 rest2 = XCDR (rest2)) 1672 rest2 = XCDR (rest2))
1678 { 1673 {
1679 Lisp_Object elem; 1674 Lisp_Object elem;
1680 /* If the element is "marked" (meaning depends on the type 1675 /* If the element is "marked" (meaning depends on the type
1681 of weak list), we need to mark the cons containing the 1676 of weak list), we need to mark the cons containing the
1686 1681
1687 /* If a cons is already marked, then its car is already marked 1682 /* If a cons is already marked, then its car is already marked
1688 (either because of an external pointer or because of 1683 (either because of an external pointer or because of
1689 a previous call to this function), and likewise for all 1684 a previous call to this function), and likewise for all
1690 the rest of the elements in the list, so we can stop now. */ 1685 the rest of the elements in the list, so we can stop now. */
1691 if (obj_marked_p (rest2)) 1686 if (marked_p (rest2))
1692 break; 1687 break;
1693 1688
1694 elem = XCAR (rest2); 1689 elem = XCAR (rest2);
1695 1690
1696 switch (type) 1691 switch (type)
1697 { 1692 {
1698 case WEAK_LIST_SIMPLE: 1693 case WEAK_LIST_SIMPLE:
1699 if (obj_marked_p (elem)) 1694 if (marked_p (elem))
1700 need_to_mark_cons = 1; 1695 need_to_mark_cons = 1;
1701 break; 1696 break;
1702 1697
1703 case WEAK_LIST_ASSOC: 1698 case WEAK_LIST_ASSOC:
1704 if (!GC_CONSP (elem)) 1699 if (!CONSP (elem))
1705 { 1700 {
1706 /* just leave bogus elements there */ 1701 /* just leave bogus elements there */
1707 need_to_mark_cons = 1; 1702 need_to_mark_cons = 1;
1708 need_to_mark_elem = 1; 1703 need_to_mark_elem = 1;
1709 } 1704 }
1710 else if (obj_marked_p (XCAR (elem)) && 1705 else if (marked_p (XCAR (elem)) &&
1711 obj_marked_p (XCDR (elem))) 1706 marked_p (XCDR (elem)))
1712 { 1707 {
1713 need_to_mark_cons = 1; 1708 need_to_mark_cons = 1;
1714 /* We still need to mark elem, because it's 1709 /* We still need to mark elem, because it's
1715 probably not marked. */ 1710 probably not marked. */
1716 need_to_mark_elem = 1; 1711 need_to_mark_elem = 1;
1717 } 1712 }
1718 break; 1713 break;
1719 1714
1720 case WEAK_LIST_KEY_ASSOC: 1715 case WEAK_LIST_KEY_ASSOC:
1721 if (!GC_CONSP (elem)) 1716 if (!CONSP (elem))
1722 { 1717 {
1723 /* just leave bogus elements there */ 1718 /* just leave bogus elements there */
1724 need_to_mark_cons = 1; 1719 need_to_mark_cons = 1;
1725 need_to_mark_elem = 1; 1720 need_to_mark_elem = 1;
1726 } 1721 }
1727 else if (obj_marked_p (XCAR (elem))) 1722 else if (marked_p (XCAR (elem)))
1728 { 1723 {
1729 need_to_mark_cons = 1; 1724 need_to_mark_cons = 1;
1730 /* We still need to mark elem and XCDR (elem); 1725 /* We still need to mark elem and XCDR (elem);
1731 marking elem does both */ 1726 marking elem does both */
1732 need_to_mark_elem = 1; 1727 need_to_mark_elem = 1;
1733 } 1728 }
1734 break; 1729 break;
1735 1730
1736 case WEAK_LIST_VALUE_ASSOC: 1731 case WEAK_LIST_VALUE_ASSOC:
1737 if (!GC_CONSP (elem)) 1732 if (!CONSP (elem))
1738 { 1733 {
1739 /* just leave bogus elements there */ 1734 /* just leave bogus elements there */
1740 need_to_mark_cons = 1; 1735 need_to_mark_cons = 1;
1741 need_to_mark_elem = 1; 1736 need_to_mark_elem = 1;
1742 } 1737 }
1743 else if (obj_marked_p (XCDR (elem))) 1738 else if (marked_p (XCDR (elem)))
1744 { 1739 {
1745 need_to_mark_cons = 1; 1740 need_to_mark_cons = 1;
1746 /* We still need to mark elem and XCAR (elem); 1741 /* We still need to mark elem and XCAR (elem);
1747 marking elem does both */ 1742 marking elem does both */
1748 need_to_mark_elem = 1; 1743 need_to_mark_elem = 1;
1751 1746
1752 default: 1747 default:
1753 abort (); 1748 abort ();
1754 } 1749 }
1755 1750
1756 if (need_to_mark_elem && ! obj_marked_p (elem)) 1751 if (need_to_mark_elem && ! marked_p (elem))
1757 { 1752 {
1758 markobj (elem); 1753 mark_object (elem);
1759 did_mark = 1; 1754 did_mark = 1;
1760 } 1755 }
1761 1756
1762 /* We also need to mark the cons that holds the elem or 1757 /* We also need to mark the cons that holds the elem or
1763 assoc-pair. We do *not* want to call (markobj) here 1758 assoc-pair. We do *not* want to call (mark_object) here
1764 because that will mark the entire list; we just want to 1759 because that will mark the entire list; we just want to
1765 mark the cons itself. 1760 mark the cons itself.
1766 */ 1761 */
1767 if (need_to_mark_cons) 1762 if (need_to_mark_cons)
1768 { 1763 {
1769 struct Lisp_Cons *ptr = XCONS (rest2); 1764 Lisp_Cons *c = XCONS (rest2);
1770 if (!CONS_MARKED_P (ptr)) 1765 if (!CONS_MARKED_P (c))
1771 { 1766 {
1772 MARK_CONS (ptr); 1767 MARK_CONS (c);
1773 did_mark = 1; 1768 did_mark = 1;
1774 } 1769 }
1775 } 1770 }
1776 } 1771 }
1777 1772
1778 /* In case of imperfect list, need to mark the final cons 1773 /* In case of imperfect list, need to mark the final cons
1779 because we're not removing it */ 1774 because we're not removing it */
1780 if (!GC_NILP (rest2) && ! obj_marked_p (rest2)) 1775 if (!NILP (rest2) && ! marked_p (rest2))
1781 { 1776 {
1782 markobj (rest2); 1777 mark_object (rest2);
1783 did_mark = 1; 1778 did_mark = 1;
1784 } 1779 }
1785 } 1780 }
1786 1781
1787 return did_mark; 1782 return did_mark;
1788 } 1783 }
1789 1784
1790 void 1785 void
1791 prune_weak_lists (int (*obj_marked_p) (Lisp_Object)) 1786 prune_weak_lists (void)
1792 { 1787 {
1793 Lisp_Object rest, prev = Qnil; 1788 Lisp_Object rest, prev = Qnil;
1794 1789
1795 for (rest = Vall_weak_lists; 1790 for (rest = Vall_weak_lists;
1796 !GC_NILP (rest); 1791 !NILP (rest);
1797 rest = XWEAK_LIST (rest)->next_weak) 1792 rest = XWEAK_LIST (rest)->next_weak)
1798 { 1793 {
1799 if (! (obj_marked_p (rest))) 1794 if (! (marked_p (rest)))
1800 { 1795 {
1801 /* This weak list itself is garbage. Remove it from the list. */ 1796 /* This weak list itself is garbage. Remove it from the list. */
1802 if (GC_NILP (prev)) 1797 if (NILP (prev))
1803 Vall_weak_lists = XWEAK_LIST (rest)->next_weak; 1798 Vall_weak_lists = XWEAK_LIST (rest)->next_weak;
1804 else 1799 else
1805 XWEAK_LIST (prev)->next_weak = 1800 XWEAK_LIST (prev)->next_weak =
1806 XWEAK_LIST (rest)->next_weak; 1801 XWEAK_LIST (rest)->next_weak;
1807 } 1802 }
1813 1808
1814 for (rest2 = XWEAK_LIST (rest)->list, tortoise = rest2; 1809 for (rest2 = XWEAK_LIST (rest)->list, tortoise = rest2;
1815 /* We need to be trickier since we're inside of GC; 1810 /* We need to be trickier since we're inside of GC;
1816 use CONSP instead of !NILP in case of user-visible 1811 use CONSP instead of !NILP in case of user-visible
1817 imperfect lists */ 1812 imperfect lists */
1818 GC_CONSP (rest2);) 1813 CONSP (rest2);)
1819 { 1814 {
1820 /* It suffices to check the cons for marking, 1815 /* It suffices to check the cons for marking,
1821 regardless of the type of weak list: 1816 regardless of the type of weak list:
1822 1817
1823 -- if the cons is pointed to somewhere else, 1818 -- if the cons is pointed to somewhere else,
1824 then it should stay around and will be marked. 1819 then it should stay around and will be marked.
1825 -- otherwise, if it should stay around, it will 1820 -- otherwise, if it should stay around, it will
1826 have been marked in finish_marking_weak_lists(). 1821 have been marked in finish_marking_weak_lists().
1827 -- otherwise, it's not marked and should disappear. 1822 -- otherwise, it's not marked and should disappear.
1828 */ 1823 */
1829 if (! obj_marked_p (rest2)) 1824 if (! marked_p (rest2))
1830 { 1825 {
1831 /* bye bye :-( */ 1826 /* bye bye :-( */
1832 if (GC_NILP (prev2)) 1827 if (NILP (prev2))
1833 XWEAK_LIST (rest)->list = XCDR (rest2); 1828 XWEAK_LIST (rest)->list = XCDR (rest2);
1834 else 1829 else
1835 XCDR (prev2) = XCDR (rest2); 1830 XCDR (prev2) = XCDR (rest2);
1836 rest2 = XCDR (rest2); 1831 rest2 = XCDR (rest2);
1837 /* Ouch. Circularity checking is even trickier 1832 /* Ouch. Circularity checking is even trickier
1868 1863
1869 rest2 = XCDR (rest2); 1864 rest2 = XCDR (rest2);
1870 if (go_tortoise) 1865 if (go_tortoise)
1871 tortoise = XCDR (tortoise); 1866 tortoise = XCDR (tortoise);
1872 go_tortoise = !go_tortoise; 1867 go_tortoise = !go_tortoise;
1873 if (GC_EQ (rest2, tortoise)) 1868 if (EQ (rest2, tortoise))
1874 break; 1869 break;
1875 } 1870 }
1876 } 1871 }
1877 1872
1878 prev = rest; 1873 prev = rest;
2079 } 2074 }
2080 2075
2081 void 2076 void
2082 syms_of_data (void) 2077 syms_of_data (void)
2083 { 2078 {
2084 defsymbol (&Qcons, "cons");
2085 defsymbol (&Qkeyword, "keyword");
2086 defsymbol (&Qquote, "quote"); 2079 defsymbol (&Qquote, "quote");
2087 defsymbol (&Qlambda, "lambda"); 2080 defsymbol (&Qlambda, "lambda");
2088 defsymbol (&Qignore, "ignore");
2089 defsymbol (&Qlistp, "listp"); 2081 defsymbol (&Qlistp, "listp");
2090 defsymbol (&Qtrue_list_p, "true-list-p"); 2082 defsymbol (&Qtrue_list_p, "true-list-p");
2091 defsymbol (&Qconsp, "consp"); 2083 defsymbol (&Qconsp, "consp");
2092 defsymbol (&Qsubrp, "subrp"); 2084 defsymbol (&Qsubrp, "subrp");
2093 defsymbol (&Qsymbolp, "symbolp"); 2085 defsymbol (&Qsymbolp, "symbolp");
2094 defsymbol (&Qkeywordp, "keywordp");
2095 defsymbol (&Qintegerp, "integerp"); 2086 defsymbol (&Qintegerp, "integerp");
2096 defsymbol (&Qcharacterp, "characterp"); 2087 defsymbol (&Qcharacterp, "characterp");
2097 defsymbol (&Qnatnump, "natnump"); 2088 defsymbol (&Qnatnump, "natnump");
2098 defsymbol (&Qstringp, "stringp"); 2089 defsymbol (&Qstringp, "stringp");
2099 defsymbol (&Qarrayp, "arrayp"); 2090 defsymbol (&Qarrayp, "arrayp");
2106 defsymbol (&Qmarkerp, "markerp"); 2097 defsymbol (&Qmarkerp, "markerp");
2107 defsymbol (&Qinteger_or_marker_p, "integer-or-marker-p"); 2098 defsymbol (&Qinteger_or_marker_p, "integer-or-marker-p");
2108 defsymbol (&Qinteger_or_char_p, "integer-or-char-p"); 2099 defsymbol (&Qinteger_or_char_p, "integer-or-char-p");
2109 defsymbol (&Qinteger_char_or_marker_p, "integer-char-or-marker-p"); 2100 defsymbol (&Qinteger_char_or_marker_p, "integer-char-or-marker-p");
2110 defsymbol (&Qnumberp, "numberp"); 2101 defsymbol (&Qnumberp, "numberp");
2111 defsymbol (&Qnumber_or_marker_p, "number-or-marker-p");
2112 defsymbol (&Qnumber_char_or_marker_p, "number-char-or-marker-p"); 2102 defsymbol (&Qnumber_char_or_marker_p, "number-char-or-marker-p");
2113 defsymbol (&Qcdr, "cdr"); 2103 defsymbol (&Qcdr, "cdr");
2114 defsymbol (&Qweak_listp, "weak-list-p"); 2104 defsymbol (&Qweak_listp, "weak-list-p");
2115 2105
2116 #ifdef LISP_FLOAT_TYPE 2106 #ifdef LISP_FLOAT_TYPE
2205 void 2195 void
2206 vars_of_data (void) 2196 vars_of_data (void)
2207 { 2197 {
2208 /* This must not be staticpro'd */ 2198 /* This must not be staticpro'd */
2209 Vall_weak_lists = Qnil; 2199 Vall_weak_lists = Qnil;
2200 pdump_wire_list (&Vall_weak_lists);
2210 2201
2211 #ifdef DEBUG_XEMACS 2202 #ifdef DEBUG_XEMACS
2212 DEFVAR_BOOL ("debug-issue-ebola-notices", &debug_issue_ebola_notices /* 2203 DEFVAR_BOOL ("debug-issue-ebola-notices", &debug_issue_ebola_notices /*
2213 If non-zero, note when your code may be suffering from char-int confoundance. 2204 If non-zero, note when your code may be suffering from char-int confoundance.
2214 That is to say, if XEmacs encounters a usage of `eq', `memq', `equal', 2205 That is to say, if XEmacs encounters a usage of `eq', `memq', `equal',