comparison src/lisp.h @ 452:3d3049ae1304 r21-2-41

Import from CVS: tag r21-2-41
author cvs
date Mon, 13 Aug 2007 11:40:21 +0200
parents 1ccc32a20af4
children d7a9135ec789
comparison
equal deleted inserted replaced
451:8ad70c5cd5d7 452:3d3049ae1304
68 #define Dynarr_new(type) ((type##_dynarr *) Dynarr_newf (sizeof (type))) 68 #define Dynarr_new(type) ((type##_dynarr *) Dynarr_newf (sizeof (type)))
69 #define Dynarr_new2(dynarr_type, type) \ 69 #define Dynarr_new2(dynarr_type, type) \
70 ((dynarr_type *) Dynarr_newf (sizeof (type))) 70 ((dynarr_type *) Dynarr_newf (sizeof (type)))
71 #define Dynarr_at(d, pos) ((d)->base[pos]) 71 #define Dynarr_at(d, pos) ((d)->base[pos])
72 #define Dynarr_atp(d, pos) (&Dynarr_at (d, pos)) 72 #define Dynarr_atp(d, pos) (&Dynarr_at (d, pos))
73 #define Dynarr_begin(d) Dynarr_atp (d, 0)
74 #define Dynarr_end(d) Dynarr_atp (d, Dynarr_length (d))
75 #define Dynarr_sizeof(d) ((d)->cur * (d)->elsize)
73 #define Dynarr_length(d) ((d)->cur) 76 #define Dynarr_length(d) ((d)->cur)
74 #define Dynarr_largest(d) ((d)->largest) 77 #define Dynarr_largest(d) ((d)->largest)
75 #define Dynarr_reset(d) ((d)->cur = 0) 78 #define Dynarr_reset(d) ((d)->cur = 0)
76 #define Dynarr_add_many(d, el, len) Dynarr_insert_many (d, el, len, (d)->cur) 79 #define Dynarr_add_many(d, el, len) Dynarr_insert_many (d, el, len, (d)->cur)
77 #define Dynarr_insert_many_at_start(d, el, len) \ 80 #define Dynarr_insert_many_at_start(d, el, len) \
568 typedef struct 571 typedef struct
569 { 572 {
570 Dynarr_declare (Lisp_Object); 573 Dynarr_declare (Lisp_Object);
571 } Lisp_Object_dynarr; 574 } Lisp_Object_dynarr;
572 575
576 typedef struct
577 {
578 Dynarr_declare (Lisp_Object *);
579 } Lisp_Object_ptr_dynarr;
580
573 /* Close your eyes now lest you vomit or spontaneously combust ... */ 581 /* Close your eyes now lest you vomit or spontaneously combust ... */
574 582
575 #define HACKEQ_UNSAFE(obj1, obj2) \ 583 #define HACKEQ_UNSAFE(obj1, obj2) \
576 (EQ (obj1, obj2) || (!POINTER_TYPE_P (XTYPE (obj1)) \ 584 (EQ (obj1, obj2) || (!POINTER_TYPE_P (XTYPE (obj1)) \
577 && !POINTER_TYPE_P (XTYPE (obj2)) \ 585 && !POINTER_TYPE_P (XTYPE (obj2)) \
2095 Lisp_Object ret_nunb_val = (expr); \ 2103 Lisp_Object ret_nunb_val = (expr); \
2096 if (!UNBOUNDP (ret_nunb_val)) \ 2104 if (!UNBOUNDP (ret_nunb_val)) \
2097 RETURN_SANS_WARNINGS ret_nunb_val; \ 2105 RETURN_SANS_WARNINGS ret_nunb_val; \
2098 } while (0) 2106 } while (0)
2099 2107
2108 extern Lisp_Object_ptr_dynarr *staticpros;
2109
2100 /* Call staticpro (&var) to protect static variable `var'. */ 2110 /* Call staticpro (&var) to protect static variable `var'. */
2101 void staticpro (Lisp_Object *); 2111 void staticpro (Lisp_Object *);
2102 2112
2103 /* Call staticpro_nodump (&var) to protect static variable `var'. */ 2113 /* Call staticpro_nodump (&var) to protect static variable `var'. */
2104 /* var will not be saved at dump time */ 2114 /* var will not be saved at dump time */
2105 void staticpro_nodump (Lisp_Object *); 2115 void staticpro_nodump (Lisp_Object *);
2106 2116
2107 /* Call dumpstruct(&var, &desc) to dump the structure pointed to by `var'. */ 2117 /* Call dump_add_root_struct_ptr (&var, &desc) to dump the structure pointed to by `var'. */
2108 void dumpstruct (void *, const struct struct_description *); 2118 #ifdef PDUMP
2109 2119 void dump_add_root_struct_ptr (void *, const struct struct_description *);
2110 /* Call dumpopaque(&var, size) to dump the opaque static structure `var'. */ 2120 #else
2111 void dumpopaque (void *, size_t); 2121 #define dump_add_root_struct_ptr(varaddr,descaddr) DO_NOTHING
2112 2122 #endif
2113 /* Call pdump_wire(&var) to ensure that var is properly updated after pdump. */ 2123
2114 void pdump_wire (Lisp_Object *); 2124 /* Call dump_add_opaque (&var, size) to dump the opaque static structure `var'. */
2115 2125 #ifdef PDUMP
2116 /* Call pdump_wire(&var) to ensure that var is properly updated after 2126 void dump_add_opaque (void *, size_t);
2117 pdump. var must point to a linked list of objects out of which 2127 #else
2128 #define dump_add_opaque(varaddr,size) DO_NOTHING
2129 #endif
2130
2131 /* Call dump_add_root_object (&var) to ensure that var is properly updated after pdump. */
2132 #ifdef PDUMP
2133 void dump_add_root_object (Lisp_Object *);
2134 #else
2135 #define dump_add_root_object(varaddr) DO_NOTHING
2136 #endif
2137
2138 /* Call dump_add_root_object (&var) to ensure that var is properly updated after
2139 pdump. var must point to a linked list of objects out of which
2118 some may not be dumped */ 2140 some may not be dumped */
2119 void pdump_wire_list (Lisp_Object *); 2141 #ifdef PDUMP
2142 void dump_add_weak_object_chain (Lisp_Object *);
2143 #else
2144 #define dump_add_weak_object_chain(varaddr) DO_NOTHING
2145 #endif
2120 2146
2121 /* Nonzero means Emacs has already been initialized. 2147 /* Nonzero means Emacs has already been initialized.
2122 Used during startup to detect startup of dumped Emacs. */ 2148 Used during startup to detect startup of dumped Emacs. */
2123 extern int initialized; 2149 extern int initialized;
2124 2150