Mercurial > hg > xemacs-beta
comparison src/lisp.h @ 400:a86b2b5e0111 r21-2-30
Import from CVS: tag r21-2-30
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:14:34 +0200 |
parents | 74fd4e045ea6 |
children | 2f8bb876ab1d |
comparison
equal
deleted
inserted
replaced
399:376370fb5946 | 400:a86b2b5e0111 |
---|---|
712 /* Optimized and safe macros for looping over external lists. */ | 712 /* Optimized and safe macros for looping over external lists. */ |
713 #define CIRCULAR_LIST_SUSPICION_LENGTH 1024 | 713 #define CIRCULAR_LIST_SUSPICION_LENGTH 1024 |
714 | 714 |
715 #define EXTERNAL_LIST_LOOP_1(list) \ | 715 #define EXTERNAL_LIST_LOOP_1(list) \ |
716 Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \ | 716 Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \ |
717 EMACS_INT ELL1_len; \ | 717 EMACS_INT ELL1_len; \ |
718 EXTERNAL_LIST_LOOP_6 (ELL1_elt, list, ELL1_len, ELL1_hare, \ | 718 EXTERNAL_LIST_LOOP_6 (ELL1_elt, list, ELL1_len, ELL1_hare, \ |
719 ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH) | 719 ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH) |
720 | 720 |
721 #define EXTERNAL_LIST_LOOP_2(elt, list) \ | 721 #define EXTERNAL_LIST_LOOP_2(elt, list) \ |
722 Lisp_Object hare_##elt, tortoise_##elt; \ | 722 Lisp_Object hare_##elt, tortoise_##elt; \ |
723 EMACS_INT len_##elt; \ | 723 EMACS_INT len_##elt; \ |
724 EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \ | 724 EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \ |
725 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) | 725 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) |
726 | 726 |
727 #define EXTERNAL_LIST_LOOP_3(elt, list, tail) \ | 727 #define EXTERNAL_LIST_LOOP_3(elt, list, tail) \ |
728 Lisp_Object tortoise_##elt; \ | 728 Lisp_Object tortoise_##elt; \ |
729 EMACS_INT len_##elt; \ | 729 EMACS_INT len_##elt; \ |
730 EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, tail, \ | 730 EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, tail, \ |
731 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) | 731 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) |
732 | 732 |
733 #define EXTERNAL_LIST_LOOP_4(elt, list, tail, len) \ | 733 #define EXTERNAL_LIST_LOOP_4(elt, list, tail, len) \ |
734 Lisp_Object tortoise_##elt; \ | 734 Lisp_Object tortoise_##elt; \ |
788 | 788 |
789 | 789 |
790 /* Optimized and safe macros for looping over external property lists. */ | 790 /* Optimized and safe macros for looping over external property lists. */ |
791 #define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \ | 791 #define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \ |
792 Lisp_Object key, value, hare_##key, tortoise_##key; \ | 792 Lisp_Object key, value, hare_##key, tortoise_##key; \ |
793 EMACS_INT len_##key; \ | 793 EMACS_INT len_##key; \ |
794 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, hare_##key, \ | 794 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, hare_##key, \ |
795 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH) | 795 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH) |
796 | 796 |
797 #define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \ | 797 #define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \ |
798 Lisp_Object key, value, tail, tortoise_##key; \ | 798 Lisp_Object key, value, tail, tortoise_##key; \ |
799 EMACS_INT len_##key; \ | 799 EMACS_INT len_##key; \ |
800 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, tail, \ | 800 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, tail, \ |
801 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH) | 801 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH) |
802 | 802 |
803 #define EXTERNAL_PROPERTY_LIST_LOOP_5(key, value, list, tail, len) \ | 803 #define EXTERNAL_PROPERTY_LIST_LOOP_5(key, value, list, tail, len) \ |
804 Lisp_Object key, value, tail, tortoise_##key; \ | 804 Lisp_Object key, value, tail, tortoise_##key; \ |
1102 typedef Lisp_Object (*lisp_fn_t) (void); | 1102 typedef Lisp_Object (*lisp_fn_t) (void); |
1103 | 1103 |
1104 struct Lisp_Subr | 1104 struct Lisp_Subr |
1105 { | 1105 { |
1106 struct lrecord_header lheader; | 1106 struct lrecord_header lheader; |
1107 short min_args, max_args; | 1107 short min_args; |
1108 short max_args; | |
1108 const char *prompt; | 1109 const char *prompt; |
1109 const char *doc; | 1110 const char *doc; |
1110 const char *name; | 1111 const char *name; |
1111 lisp_fn_t subr_fn; | 1112 lisp_fn_t subr_fn; |
1112 }; | 1113 }; |
1477 #define UNEVALLED -1 | 1478 #define UNEVALLED -1 |
1478 | 1479 |
1479 /* Can't be const, because then subr->doc is read-only and | 1480 /* Can't be const, because then subr->doc is read-only and |
1480 Snarf_documentation chokes */ | 1481 Snarf_documentation chokes */ |
1481 | 1482 |
1482 #define subr_lheader_initializer { 0, 0, 0, 0 } | |
1483 | |
1484 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \ | 1483 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \ |
1485 Lisp_Object Fname (EXFUN_##max_args); \ | 1484 Lisp_Object Fname (EXFUN_##max_args); \ |
1486 static struct Lisp_Subr S##Fname = { subr_lheader_initializer, \ | 1485 static struct Lisp_Subr S##Fname = \ |
1487 min_args, max_args, prompt, 0, lname, (lisp_fn_t) Fname }; \ | 1486 { \ |
1487 { /* struct lrecord_header */ \ | |
1488 lrecord_type_subr, /* lrecord_type_index */ \ | |
1489 1, /* mark bit */ \ | |
1490 1, /* c_readonly bit */ \ | |
1491 1 /* lisp_readonly bit */ \ | |
1492 }, \ | |
1493 min_args, \ | |
1494 max_args, \ | |
1495 prompt, \ | |
1496 0, /* doc string */ \ | |
1497 lname, \ | |
1498 (lisp_fn_t) Fname \ | |
1499 }; \ | |
1488 Lisp_Object Fname (DEFUN_##max_args arglist) | 1500 Lisp_Object Fname (DEFUN_##max_args arglist) |
1489 | 1501 |
1490 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a | 1502 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a |
1491 prototype that matches max_args, and add the obligatory | 1503 prototype that matches max_args, and add the obligatory |
1492 `Lisp_Object' type declaration to the formal C arguments. */ | 1504 `Lisp_Object' type declaration to the formal C arguments. */ |