Mercurial > hg > xemacs-beta
comparison src/lrecord.h @ 444:576fb035e263 r21-2-37
Import from CVS: tag r21-2-37
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:36:19 +0200 |
parents | abe6d1db359e |
children | 1ccc32a20af4 |
comparison
equal
deleted
inserted
replaced
443:a8296e22da4e | 444:576fb035e263 |
---|---|
475 #define DEFINE_EXTERNAL_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \ | 475 #define DEFINE_EXTERNAL_LRECORD_SEQUENCE_IMPLEMENTATION_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \ |
476 MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) | 476 MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) |
477 | 477 |
478 #define MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,basic_p,structtype) \ | 478 #define MAKE_EXTERNAL_LRECORD_IMPLEMENTATION(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,basic_p,structtype) \ |
479 DECLARE_ERROR_CHECK_TYPECHECK(c_name, structtype) \ | 479 DECLARE_ERROR_CHECK_TYPECHECK(c_name, structtype) \ |
480 unsigned int lrecord_type_##c_name = lrecord_type_count++; \ | 480 unsigned int lrecord_type_##c_name; \ |
481 const struct lrecord_implementation lrecord_##c_name = \ | 481 struct lrecord_implementation lrecord_##c_name = \ |
482 { name, marker, printer, nuker, equal, hash, desc, \ | 482 { name, marker, printer, nuker, equal, hash, desc, \ |
483 getprop, putprop, remprop, plist, size, sizer, \ | 483 getprop, putprop, remprop, plist, size, sizer, \ |
484 (enum lrecord_type)lrecord_type_##c_name, basic_p } | 484 lrecord_type_last_built_in_type, basic_p } |
485 | 485 |
486 | 486 |
487 extern Lisp_Object (*lrecord_markers[]) (Lisp_Object); | 487 extern Lisp_Object (*lrecord_markers[]) (Lisp_Object); |
488 | 488 |
489 #define INIT_LRECORD_IMPLEMENTATION(type) do { \ | 489 #define INIT_LRECORD_IMPLEMENTATION(type) do { \ |
490 lrecord_implementations_table[lrecord_type_##type] = &lrecord_##type; \ | 490 lrecord_implementations_table[lrecord_type_##type] = &lrecord_##type; \ |
491 lrecord_markers[lrecord_type_##type] = \ | 491 lrecord_markers[lrecord_type_##type] = \ |
492 lrecord_implementations_table[lrecord_type_##type]->marker; \ | 492 lrecord_implementations_table[lrecord_type_##type]->marker; \ |
493 } while (0) | |
494 | |
495 #define INIT_EXTERNAL_LRECORD_IMPLEMENTATION(type) do { \ | |
496 lrecord_type_##type = lrecord_type_count++; \ | |
497 lrecord_##type.lrecord_type_index = lrecord_type_##type; \ | |
498 INIT_LRECORD_IMPLEMENTATION(type); \ | |
493 } while (0) | 499 } while (0) |
494 | 500 |
495 #define LRECORDP(a) (XTYPE (a) == Lisp_Type_Record) | 501 #define LRECORDP(a) (XTYPE (a) == Lisp_Type_Record) |
496 #define XRECORD_LHEADER(a) ((struct lrecord_header *) XPNTR (a)) | 502 #define XRECORD_LHEADER(a) ((struct lrecord_header *) XPNTR (a)) |
497 | 503 |
644 } \ | 650 } \ |
645 extern Lisp_Object Q##c_name##p | 651 extern Lisp_Object Q##c_name##p |
646 | 652 |
647 # define DECLARE_EXTERNAL_LRECORD(c_name, structtype) \ | 653 # define DECLARE_EXTERNAL_LRECORD(c_name, structtype) \ |
648 extern unsigned int lrecord_type_##c_name; \ | 654 extern unsigned int lrecord_type_##c_name; \ |
649 DECLARE_LRECORD(c_name, structtype) | 655 extern struct lrecord_implementation lrecord_##c_name; \ |
656 INLINE_HEADER structtype * \ | |
657 error_check_##c_name (Lisp_Object obj); \ | |
658 INLINE_HEADER structtype * \ | |
659 error_check_##c_name (Lisp_Object obj) \ | |
660 { \ | |
661 assert (RECORD_TYPEP (obj, lrecord_type_##c_name)); \ | |
662 return (structtype *) XPNTR (obj); \ | |
663 } \ | |
664 extern Lisp_Object Q##c_name##p | |
650 | 665 |
651 # define DECLARE_NONRECORD(c_name, type_enum, structtype) \ | 666 # define DECLARE_NONRECORD(c_name, type_enum, structtype) \ |
652 INLINE_HEADER structtype * \ | 667 INLINE_HEADER structtype * \ |
653 error_check_##c_name (Lisp_Object obj); \ | 668 error_check_##c_name (Lisp_Object obj); \ |
654 INLINE_HEADER structtype * \ | 669 INLINE_HEADER structtype * \ |
674 extern Lisp_Object Q##c_name##p; \ | 689 extern Lisp_Object Q##c_name##p; \ |
675 extern const struct lrecord_implementation lrecord_##c_name | 690 extern const struct lrecord_implementation lrecord_##c_name |
676 # define DECLARE_EXTERNAL_LRECORD(c_name, structtype) \ | 691 # define DECLARE_EXTERNAL_LRECORD(c_name, structtype) \ |
677 extern Lisp_Object Q##c_name##p; \ | 692 extern Lisp_Object Q##c_name##p; \ |
678 extern unsigned int lrecord_type_##c_name; \ | 693 extern unsigned int lrecord_type_##c_name; \ |
679 extern const struct lrecord_implementation lrecord_##c_name | 694 extern struct lrecord_implementation lrecord_##c_name |
680 # define DECLARE_NONRECORD(c_name, type_enum, structtype) \ | 695 # define DECLARE_NONRECORD(c_name, type_enum, structtype) \ |
681 extern Lisp_Object Q##c_name##p | 696 extern Lisp_Object Q##c_name##p |
682 # define XRECORD(x, c_name, structtype) ((structtype *) XPNTR (x)) | 697 # define XRECORD(x, c_name, structtype) ((structtype *) XPNTR (x)) |
683 # define XNONRECORD(x, c_name, type_enum, structtype) \ | 698 # define XNONRECORD(x, c_name, type_enum, structtype) \ |
684 ((structtype *) XPNTR (x)) | 699 ((structtype *) XPNTR (x)) |