# HG changeset patch # User Stefan Monnier # Date 1144505704 0 # Node ID 89bc86c44d7c3e7aae87945c101c3c9214937767 # Parent 5ae8bd3108d43f42a4755882fe56ea9dd3c4d2ea (OFFSETOF, PSEUDOVECSIZE): New macros. diff -r 5ae8bd3108d4 -r 89bc86c44d7c src/lisp.h --- a/src/lisp.h Sat Apr 08 12:27:13 2006 +0000 +++ b/src/lisp.h Sat Apr 08 14:15:04 2006 +0000 @@ -702,6 +702,13 @@ unsigned char *data; }; +#ifdef offsetof +#define OFFSETOF(type,field) offsetof(type,field) +#else +#define OFFSETOF(type,field) \ + ((int)((char*)&((type*)0)->field - (char*)0)) +#endif + /* If a struct is made to look like a vector, this macro returns the length of the shortest vector that would hold that struct. */ #define VECSIZE(type) ((sizeof (type) - (sizeof (struct Lisp_Vector) \ @@ -709,6 +716,13 @@ + sizeof(Lisp_Object) - 1) /* round up */ \ / sizeof (Lisp_Object)) +/* Like VECSIZE, but used when the pseudo-vector has non-Lisp_Object fields + at the end and we need to compute the number of Lisp_Object fields (the + ones that the GC needs to trace). */ +#define PSEUDOVECSIZE(type, nonlispfield) \ + ((offsetof(type, nonlispfield) - offsetof(struct Lisp_Vector, contents[0])) \ + / sizeof (Lisp_Object)) + struct Lisp_Vector { EMACS_INT size;