diff options
| author | Dmitry Antipov | 2015-01-13 06:39:45 +0300 |
|---|---|---|
| committer | Dmitry Antipov | 2015-01-13 06:39:45 +0300 |
| commit | ad9c4a4091df19064a7f7f53bfdb687931e141f6 (patch) | |
| tree | 203ded274a9f90bff594e91c1c261ff843807e8e | |
| parent | 329b902141c68190a2d8a5d6fd9312b6a816471c (diff) | |
| download | emacs-ad9c4a4091df19064a7f7f53bfdb687931e141f6.tar.gz emacs-ad9c4a4091df19064a7f7f53bfdb687931e141f6.zip | |
Support const and noreturn DEFUN attributes.
* lib-src/make-docfile.c (struct global): New field 'flags'.
(DEFUN_noreturn, DEFUN_const): New enum bitfields.
(add_global): Now return pointer to global.
(write_globals): Add _Noreturn and ATTRIBUTE_CONST attributes
if requested by global's flags.
(stream_match): New function.
(scan_c_stream): Recognize 'attributes:' of DEFUN.
* src/callint.c (Finteractive):
* src/character.c (Fcharacterp, Fmax_char):
* src.data.c (Feq, Fnull, Fconsp, Fatom, Flistp, Fnlistp, Fsymbolp)
(Fstringp, Fchar_or_string_p, Fintegerp, Fnatnump, Fnumberp)
(Ffloatp, Fbyteorder):
* src/decompress.c (Fzlib_available_p):
* src/fns.c (Fidentity):
* src/frame.c (Fframe_windows_min_size):
* src/gnutls.c (Fgnutls_error_p, Fgnutls_available_p):
* src/window.c (Fwindow__sanitize_window_sizes):
* src/xdisp.c (Ftool_bar_height):
* src/xfaces.c (Fface_attribute_relative_p): Add const attribute.
* src/emacs.c (Fkill_emacs):
* src/eval.c (Fthrow):
* src/keyboard.c (Ftop_level, Fexit_recursive_edit)
(Fabor_recursive_edit): Add noreturn attribute.
| -rw-r--r-- | lib-src/ChangeLog | 11 | ||||
| -rw-r--r-- | lib-src/make-docfile.c | 123 | ||||
| -rw-r--r-- | src/ChangeLog | 20 | ||||
| -rw-r--r-- | src/callint.c | 3 | ||||
| -rw-r--r-- | src/character.c | 6 | ||||
| -rw-r--r-- | src/data.c | 42 | ||||
| -rw-r--r-- | src/decompress.c | 3 | ||||
| -rw-r--r-- | src/emacs.c | 3 | ||||
| -rw-r--r-- | src/eval.c | 3 | ||||
| -rw-r--r-- | src/fns.c | 3 | ||||
| -rw-r--r-- | src/frame.c | 3 | ||||
| -rw-r--r-- | src/gnutls.c | 6 | ||||
| -rw-r--r-- | src/keyboard.c | 9 | ||||
| -rw-r--r-- | src/window.c | 3 | ||||
| -rw-r--r-- | src/xdisp.c | 3 | ||||
| -rw-r--r-- | src/xfaces.c | 3 |
16 files changed, 175 insertions, 69 deletions
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 740359605fd..969aac80124 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog | |||
| @@ -1,3 +1,14 @@ | |||
| 1 | 2015-01-13 Dmitry Antipov <dmantipov@yandex.ru> | ||
| 2 | |||
| 3 | Support DEFUN attributes. | ||
| 4 | * make-docfile.c (struct global): New field 'flags'. | ||
| 5 | (DEFUN_noreturn, DEFUN_const): New enum bitfields. | ||
| 6 | (add_global): Now return pointer to global. | ||
| 7 | (write_globals): Add _Noreturn and ATTRIBUTE_CONST attributes | ||
| 8 | if requested by global's flags. | ||
| 9 | (stream_match): New function. | ||
| 10 | (scan_c_stream): Recognize 'attributes:' of DEFUN. | ||
| 11 | |||
| 1 | 2015-01-10 Paul Eggert <eggert@cs.ucla.edu> | 12 | 2015-01-10 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 13 | ||
| 3 | Port to 32-bit --with-wide-int | 14 | Port to 32-bit --with-wide-int |
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index bc5420ea939..79d421a0a8e 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c | |||
| @@ -562,6 +562,7 @@ struct global | |||
| 562 | { | 562 | { |
| 563 | enum global_type type; | 563 | enum global_type type; |
| 564 | char *name; | 564 | char *name; |
| 565 | int flags; | ||
| 565 | union | 566 | union |
| 566 | { | 567 | { |
| 567 | int value; | 568 | int value; |
| @@ -569,13 +570,16 @@ struct global | |||
| 569 | } v; | 570 | } v; |
| 570 | }; | 571 | }; |
| 571 | 572 | ||
| 573 | /* Bit values for FLAGS field from the above. Applied for DEFUNs only. */ | ||
| 574 | enum { DEFUN_noreturn = 1, DEFUN_const = 2 }; | ||
| 575 | |||
| 572 | /* All the variable names we saw while scanning C sources in `-g' | 576 | /* All the variable names we saw while scanning C sources in `-g' |
| 573 | mode. */ | 577 | mode. */ |
| 574 | int num_globals; | 578 | int num_globals; |
| 575 | int num_globals_allocated; | 579 | int num_globals_allocated; |
| 576 | struct global *globals; | 580 | struct global *globals; |
| 577 | 581 | ||
| 578 | static void | 582 | static struct global * |
| 579 | add_global (enum global_type type, char *name, int value, char const *svalue) | 583 | add_global (enum global_type type, char *name, int value, char const *svalue) |
| 580 | { | 584 | { |
| 581 | /* Ignore the one non-symbol that can occur. */ | 585 | /* Ignore the one non-symbol that can occur. */ |
| @@ -601,7 +605,10 @@ add_global (enum global_type type, char *name, int value, char const *svalue) | |||
| 601 | globals[num_globals - 1].v.svalue = svalue; | 605 | globals[num_globals - 1].v.svalue = svalue; |
| 602 | else | 606 | else |
| 603 | globals[num_globals - 1].v.value = value; | 607 | globals[num_globals - 1].v.value = value; |
| 608 | globals[num_globals - 1].flags = 0; | ||
| 609 | return globals + num_globals - 1; | ||
| 604 | } | 610 | } |
| 611 | return NULL; | ||
| 605 | } | 612 | } |
| 606 | 613 | ||
| 607 | static int | 614 | static int |
| @@ -708,13 +715,7 @@ write_globals (void) | |||
| 708 | globals[i].name, globals[i].name, globals[i].name); | 715 | globals[i].name, globals[i].name, globals[i].name); |
| 709 | else | 716 | else |
| 710 | { | 717 | { |
| 711 | /* It would be nice to have a cleaner way to deal with these | 718 | if (globals[i].flags & DEFUN_noreturn) |
| 712 | special hacks. */ | ||
| 713 | if (strcmp (globals[i].name, "Fthrow") == 0 | ||
| 714 | || strcmp (globals[i].name, "Ftop_level") == 0 | ||
| 715 | || strcmp (globals[i].name, "Fkill_emacs") == 0 | ||
| 716 | || strcmp (globals[i].name, "Fexit_recursive_edit") == 0 | ||
| 717 | || strcmp (globals[i].name, "Fabort_recursive_edit") == 0) | ||
| 718 | fputs ("_Noreturn ", stdout); | 719 | fputs ("_Noreturn ", stdout); |
| 719 | 720 | ||
| 720 | printf ("EXFUN (%s, ", globals[i].name); | 721 | printf ("EXFUN (%s, ", globals[i].name); |
| @@ -726,36 +727,7 @@ write_globals (void) | |||
| 726 | printf ("%d", globals[i].v.value); | 727 | printf ("%d", globals[i].v.value); |
| 727 | putchar (')'); | 728 | putchar (')'); |
| 728 | 729 | ||
| 729 | /* It would be nice to have a cleaner way to deal with these | 730 | if (globals[i].flags & DEFUN_const) |
| 730 | special hacks, too. */ | ||
| 731 | if (strcmp (globals[i].name, "Fatom") == 0 | ||
| 732 | || strcmp (globals[i].name, "Fbyteorder") == 0 | ||
| 733 | || strcmp (globals[i].name, "Fcharacterp") == 0 | ||
| 734 | || strcmp (globals[i].name, "Fchar_or_string_p") == 0 | ||
| 735 | || strcmp (globals[i].name, "Fconsp") == 0 | ||
| 736 | || strcmp (globals[i].name, "Feq") == 0 | ||
| 737 | || strcmp (globals[i].name, "Fface_attribute_relative_p") == 0 | ||
| 738 | || strcmp (globals[i].name, "Fframe_windows_min_size") == 0 | ||
| 739 | || strcmp (globals[i].name, "Fgnutls_errorp") == 0 | ||
| 740 | || strcmp (globals[i].name, "Fidentity") == 0 | ||
| 741 | || strcmp (globals[i].name, "Fintegerp") == 0 | ||
| 742 | || strcmp (globals[i].name, "Finteractive") == 0 | ||
| 743 | || strcmp (globals[i].name, "Ffloatp") == 0 | ||
| 744 | || strcmp (globals[i].name, "Flistp") == 0 | ||
| 745 | || strcmp (globals[i].name, "Fmax_char") == 0 | ||
| 746 | || strcmp (globals[i].name, "Fnatnump") == 0 | ||
| 747 | || strcmp (globals[i].name, "Fnlistp") == 0 | ||
| 748 | || strcmp (globals[i].name, "Fnull") == 0 | ||
| 749 | || strcmp (globals[i].name, "Fnumberp") == 0 | ||
| 750 | || strcmp (globals[i].name, "Fstringp") == 0 | ||
| 751 | || strcmp (globals[i].name, "Fsymbolp") == 0 | ||
| 752 | || strcmp (globals[i].name, "Ftool_bar_height") == 0 | ||
| 753 | || strcmp (globals[i].name, "Fwindow__sanitize_window_sizes") == 0 | ||
| 754 | #ifndef WINDOWSNT | ||
| 755 | || strcmp (globals[i].name, "Fgnutls_available_p") == 0 | ||
| 756 | || strcmp (globals[i].name, "Fzlib_available_p") == 0 | ||
| 757 | #endif | ||
| 758 | || 0) | ||
| 759 | fputs (" ATTRIBUTE_CONST", stdout); | 731 | fputs (" ATTRIBUTE_CONST", stdout); |
| 760 | 732 | ||
| 761 | puts (";"); | 733 | puts (";"); |
| @@ -817,6 +789,23 @@ scan_c_file (char *filename, const char *mode) | |||
| 817 | return scan_c_stream (infile); | 789 | return scan_c_stream (infile); |
| 818 | } | 790 | } |
| 819 | 791 | ||
| 792 | /* Return 1 if next input from INFILE is equal to P, -1 if EOF, | ||
| 793 | 0 if input doesn't match. */ | ||
| 794 | |||
| 795 | static int | ||
| 796 | stream_match (FILE *infile, const char *p) | ||
| 797 | { | ||
| 798 | for (; *p; p++) | ||
| 799 | { | ||
| 800 | int c = getc (infile); | ||
| 801 | if (c == EOF) | ||
| 802 | return -1; | ||
| 803 | if (c != *p) | ||
| 804 | return 0; | ||
| 805 | } | ||
| 806 | return 1; | ||
| 807 | } | ||
| 808 | |||
| 820 | static int | 809 | static int |
| 821 | scan_c_stream (FILE *infile) | 810 | scan_c_stream (FILE *infile) |
| 822 | { | 811 | { |
| @@ -1033,7 +1022,63 @@ scan_c_stream (FILE *infile) | |||
| 1033 | 1022 | ||
| 1034 | if (generate_globals) | 1023 | if (generate_globals) |
| 1035 | { | 1024 | { |
| 1036 | add_global (FUNCTION, name, maxargs, 0); | 1025 | struct global *g = add_global (FUNCTION, name, maxargs, 0); |
| 1026 | |||
| 1027 | /* The following code tries to recognize function attributes | ||
| 1028 | specified after the docstring, e.g.: | ||
| 1029 | |||
| 1030 | DEFUN ("foo", Ffoo, Sfoo, X, Y, Z, | ||
| 1031 | doc: /\* doc *\/ | ||
| 1032 | attributes: attribute1 attribute2 ...) | ||
| 1033 | (Lisp_Object arg...) | ||
| 1034 | |||
| 1035 | Now only 'noreturn' and 'const' attributes are used. */ | ||
| 1036 | |||
| 1037 | /* Advance to the end of docstring. */ | ||
| 1038 | c = getc (infile); | ||
| 1039 | if (c == EOF) | ||
| 1040 | goto eof; | ||
| 1041 | int d = getc (infile); | ||
| 1042 | if (d == EOF) | ||
| 1043 | goto eof; | ||
| 1044 | while (1) | ||
| 1045 | { | ||
| 1046 | if (c == '*' && d == '/') | ||
| 1047 | break; | ||
| 1048 | c = d, d = getc (infile); | ||
| 1049 | if (d == EOF) | ||
| 1050 | goto eof; | ||
| 1051 | } | ||
| 1052 | /* Skip spaces, if any. */ | ||
| 1053 | do | ||
| 1054 | { | ||
| 1055 | c = getc (infile); | ||
| 1056 | if (c == EOF) | ||
| 1057 | goto eof; | ||
| 1058 | } | ||
| 1059 | while (c == ' ' || c == '\n' || c == '\r' || c == '\t'); | ||
| 1060 | /* Check for 'attributes:' token. */ | ||
| 1061 | if (c == 'a' && stream_match (infile, "ttributes:")) | ||
| 1062 | { | ||
| 1063 | char *p = input_buffer; | ||
| 1064 | /* Collect attributes up to ')'. */ | ||
| 1065 | while (1) | ||
| 1066 | { | ||
| 1067 | c = getc (infile); | ||
| 1068 | if (c == EOF) | ||
| 1069 | goto eof; | ||
| 1070 | if (c == ')') | ||
| 1071 | break; | ||
| 1072 | if (p - input_buffer > sizeof (input_buffer)) | ||
| 1073 | abort (); | ||
| 1074 | *p++ = c; | ||
| 1075 | } | ||
| 1076 | *p = 0; | ||
| 1077 | if (strstr (input_buffer, "noreturn")) | ||
| 1078 | g->flags |= DEFUN_noreturn; | ||
| 1079 | if (strstr (input_buffer, "const")) | ||
| 1080 | g->flags |= DEFUN_const; | ||
| 1081 | } | ||
| 1037 | continue; | 1082 | continue; |
| 1038 | } | 1083 | } |
| 1039 | 1084 | ||
diff --git a/src/ChangeLog b/src/ChangeLog index 252dfd33620..792407e15e6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,23 @@ | |||
| 1 | 2015-01-13 Dmitry Antipov <dmantipov@yandex.ru> | ||
| 2 | |||
| 3 | Add DEFUN attributes. | ||
| 4 | * callint.c (Finteractive): | ||
| 5 | * character.c (Fcharacterp, Fmax_char): | ||
| 6 | * data.c (Feq, Fnull, Fconsp, Fatom, Flistp, Fnlistp, Fsymbolp) | ||
| 7 | (Fstringp, Fchar_or_string_p, Fintegerp, Fnatnump, Fnumberp) | ||
| 8 | (Ffloatp, Fbyteorder): | ||
| 9 | * decompress.c (Fzlib_available_p): | ||
| 10 | * fns.c (Fidentity): | ||
| 11 | * frame.c (Fframe_windows_min_size): | ||
| 12 | * gnutls.c (Fgnutls_error_p, Fgnutls_available_p): | ||
| 13 | * window.c (Fwindow__sanitize_window_sizes): | ||
| 14 | * xdisp.c (Ftool_bar_height): | ||
| 15 | * xfaces.c (Fface_attribute_relative_p): Add const attribute. | ||
| 16 | * emacs.c (Fkill_emacs): | ||
| 17 | * eval.c (Fthrow): | ||
| 18 | * keyboard.c (Ftop_level, Fexit_recursive_edit) | ||
| 19 | (Fabor_recursive_edit): Add noreturn attribute. | ||
| 20 | |||
| 1 | 2015-01-12 Paul Eggert <eggert@cs.ucla.edu> | 21 | 2015-01-12 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 22 | ||
| 3 | Port to 32-bit MingGW --with-wide-int | 23 | Port to 32-bit MingGW --with-wide-int |
diff --git a/src/callint.c b/src/callint.c index 25955039ac7..dd238b976aa 100644 --- a/src/callint.c +++ b/src/callint.c | |||
| @@ -101,7 +101,8 @@ If the string begins with `^' and `shift-select-mode' is non-nil, | |||
| 101 | Emacs first calls the function `handle-shift-selection'. | 101 | Emacs first calls the function `handle-shift-selection'. |
| 102 | You may use `@', `*', and `^' together. They are processed in the | 102 | You may use `@', `*', and `^' together. They are processed in the |
| 103 | order that they appear, before reading any arguments. | 103 | order that they appear, before reading any arguments. |
| 104 | usage: (interactive &optional ARGS) */) | 104 | usage: (interactive &optional ARGS) */ |
| 105 | attributes: const) | ||
| 105 | (Lisp_Object args) | 106 | (Lisp_Object args) |
| 106 | { | 107 | { |
| 107 | return Qnil; | 108 | return Qnil; |
diff --git a/src/character.c b/src/character.c index 4a5c7ec3156..39d32c9d41a 100644 --- a/src/character.c +++ b/src/character.c | |||
| @@ -232,14 +232,16 @@ DEFUN ("characterp", Fcharacterp, Scharacterp, 1, 2, 0, | |||
| 232 | In Emacs Lisp, characters are represented by character codes, which | 232 | In Emacs Lisp, characters are represented by character codes, which |
| 233 | are non-negative integers. The function `max-char' returns the | 233 | are non-negative integers. The function `max-char' returns the |
| 234 | maximum character code. | 234 | maximum character code. |
| 235 | usage: (characterp OBJECT) */) | 235 | usage: (characterp OBJECT) */ |
| 236 | attributes: const) | ||
| 236 | (Lisp_Object object, Lisp_Object ignore) | 237 | (Lisp_Object object, Lisp_Object ignore) |
| 237 | { | 238 | { |
| 238 | return (CHARACTERP (object) ? Qt : Qnil); | 239 | return (CHARACTERP (object) ? Qt : Qnil); |
| 239 | } | 240 | } |
| 240 | 241 | ||
| 241 | DEFUN ("max-char", Fmax_char, Smax_char, 0, 0, 0, | 242 | DEFUN ("max-char", Fmax_char, Smax_char, 0, 0, 0, |
| 242 | doc: /* Return the character of the maximum code. */) | 243 | doc: /* Return the character of the maximum code. */ |
| 244 | attributes: const) | ||
| 243 | (void) | 245 | (void) |
| 244 | { | 246 | { |
| 245 | return make_number (MAX_CHAR); | 247 | return make_number (MAX_CHAR); |
diff --git a/src/data.c b/src/data.c index 820c3ce8407..0389eb49b06 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -176,7 +176,8 @@ args_out_of_range_3 (Lisp_Object a1, Lisp_Object a2, Lisp_Object a3) | |||
| 176 | /* Data type predicates. */ | 176 | /* Data type predicates. */ |
| 177 | 177 | ||
| 178 | DEFUN ("eq", Feq, Seq, 2, 2, 0, | 178 | DEFUN ("eq", Feq, Seq, 2, 2, 0, |
| 179 | doc: /* Return t if the two args are the same Lisp object. */) | 179 | doc: /* Return t if the two args are the same Lisp object. */ |
| 180 | attributes: const) | ||
| 180 | (Lisp_Object obj1, Lisp_Object obj2) | 181 | (Lisp_Object obj1, Lisp_Object obj2) |
| 181 | { | 182 | { |
| 182 | if (EQ (obj1, obj2)) | 183 | if (EQ (obj1, obj2)) |
| @@ -185,7 +186,8 @@ DEFUN ("eq", Feq, Seq, 2, 2, 0, | |||
| 185 | } | 186 | } |
| 186 | 187 | ||
| 187 | DEFUN ("null", Fnull, Snull, 1, 1, 0, | 188 | DEFUN ("null", Fnull, Snull, 1, 1, 0, |
| 188 | doc: /* Return t if OBJECT is nil. */) | 189 | doc: /* Return t if OBJECT is nil. */ |
| 190 | attributes: const) | ||
| 189 | (Lisp_Object object) | 191 | (Lisp_Object object) |
| 190 | { | 192 | { |
| 191 | if (NILP (object)) | 193 | if (NILP (object)) |
| @@ -263,7 +265,8 @@ for example, (type-of 1) returns `integer'. */) | |||
| 263 | } | 265 | } |
| 264 | 266 | ||
| 265 | DEFUN ("consp", Fconsp, Sconsp, 1, 1, 0, | 267 | DEFUN ("consp", Fconsp, Sconsp, 1, 1, 0, |
| 266 | doc: /* Return t if OBJECT is a cons cell. */) | 268 | doc: /* Return t if OBJECT is a cons cell. */ |
| 269 | attributes: const) | ||
| 267 | (Lisp_Object object) | 270 | (Lisp_Object object) |
| 268 | { | 271 | { |
| 269 | if (CONSP (object)) | 272 | if (CONSP (object)) |
| @@ -272,7 +275,8 @@ DEFUN ("consp", Fconsp, Sconsp, 1, 1, 0, | |||
| 272 | } | 275 | } |
| 273 | 276 | ||
| 274 | DEFUN ("atom", Fatom, Satom, 1, 1, 0, | 277 | DEFUN ("atom", Fatom, Satom, 1, 1, 0, |
| 275 | doc: /* Return t if OBJECT is not a cons cell. This includes nil. */) | 278 | doc: /* Return t if OBJECT is not a cons cell. This includes nil. */ |
| 279 | attributes: const) | ||
| 276 | (Lisp_Object object) | 280 | (Lisp_Object object) |
| 277 | { | 281 | { |
| 278 | if (CONSP (object)) | 282 | if (CONSP (object)) |
| @@ -282,7 +286,8 @@ DEFUN ("atom", Fatom, Satom, 1, 1, 0, | |||
| 282 | 286 | ||
| 283 | DEFUN ("listp", Flistp, Slistp, 1, 1, 0, | 287 | DEFUN ("listp", Flistp, Slistp, 1, 1, 0, |
| 284 | doc: /* Return t if OBJECT is a list, that is, a cons cell or nil. | 288 | doc: /* Return t if OBJECT is a list, that is, a cons cell or nil. |
| 285 | Otherwise, return nil. */) | 289 | Otherwise, return nil. */ |
| 290 | attributes: const) | ||
| 286 | (Lisp_Object object) | 291 | (Lisp_Object object) |
| 287 | { | 292 | { |
| 288 | if (CONSP (object) || NILP (object)) | 293 | if (CONSP (object) || NILP (object)) |
| @@ -291,7 +296,8 @@ Otherwise, return nil. */) | |||
| 291 | } | 296 | } |
| 292 | 297 | ||
| 293 | DEFUN ("nlistp", Fnlistp, Snlistp, 1, 1, 0, | 298 | DEFUN ("nlistp", Fnlistp, Snlistp, 1, 1, 0, |
| 294 | doc: /* Return t if OBJECT is not a list. Lists include nil. */) | 299 | doc: /* Return t if OBJECT is not a list. Lists include nil. */ |
| 300 | attributes: const) | ||
| 295 | (Lisp_Object object) | 301 | (Lisp_Object object) |
| 296 | { | 302 | { |
| 297 | if (CONSP (object) || NILP (object)) | 303 | if (CONSP (object) || NILP (object)) |
| @@ -300,7 +306,8 @@ DEFUN ("nlistp", Fnlistp, Snlistp, 1, 1, 0, | |||
| 300 | } | 306 | } |
| 301 | 307 | ||
| 302 | DEFUN ("symbolp", Fsymbolp, Ssymbolp, 1, 1, 0, | 308 | DEFUN ("symbolp", Fsymbolp, Ssymbolp, 1, 1, 0, |
| 303 | doc: /* Return t if OBJECT is a symbol. */) | 309 | doc: /* Return t if OBJECT is a symbol. */ |
| 310 | attributes: const) | ||
| 304 | (Lisp_Object object) | 311 | (Lisp_Object object) |
| 305 | { | 312 | { |
| 306 | if (SYMBOLP (object)) | 313 | if (SYMBOLP (object)) |
| @@ -333,7 +340,8 @@ DEFUN ("vectorp", Fvectorp, Svectorp, 1, 1, 0, | |||
| 333 | } | 340 | } |
| 334 | 341 | ||
| 335 | DEFUN ("stringp", Fstringp, Sstringp, 1, 1, 0, | 342 | DEFUN ("stringp", Fstringp, Sstringp, 1, 1, 0, |
| 336 | doc: /* Return t if OBJECT is a string. */) | 343 | doc: /* Return t if OBJECT is a string. */ |
| 344 | attributes: const) | ||
| 337 | (Lisp_Object object) | 345 | (Lisp_Object object) |
| 338 | { | 346 | { |
| 339 | if (STRINGP (object)) | 347 | if (STRINGP (object)) |
| @@ -436,7 +444,8 @@ DEFUN ("byte-code-function-p", Fbyte_code_function_p, Sbyte_code_function_p, | |||
| 436 | } | 444 | } |
| 437 | 445 | ||
| 438 | DEFUN ("char-or-string-p", Fchar_or_string_p, Schar_or_string_p, 1, 1, 0, | 446 | DEFUN ("char-or-string-p", Fchar_or_string_p, Schar_or_string_p, 1, 1, 0, |
| 439 | doc: /* Return t if OBJECT is a character or a string. */) | 447 | doc: /* Return t if OBJECT is a character or a string. */ |
| 448 | attributes: const) | ||
| 440 | (register Lisp_Object object) | 449 | (register Lisp_Object object) |
| 441 | { | 450 | { |
| 442 | if (CHARACTERP (object) || STRINGP (object)) | 451 | if (CHARACTERP (object) || STRINGP (object)) |
| @@ -445,7 +454,8 @@ DEFUN ("char-or-string-p", Fchar_or_string_p, Schar_or_string_p, 1, 1, 0, | |||
| 445 | } | 454 | } |
| 446 | 455 | ||
| 447 | DEFUN ("integerp", Fintegerp, Sintegerp, 1, 1, 0, | 456 | DEFUN ("integerp", Fintegerp, Sintegerp, 1, 1, 0, |
| 448 | doc: /* Return t if OBJECT is an integer. */) | 457 | doc: /* Return t if OBJECT is an integer. */ |
| 458 | attributes: const) | ||
| 449 | (Lisp_Object object) | 459 | (Lisp_Object object) |
| 450 | { | 460 | { |
| 451 | if (INTEGERP (object)) | 461 | if (INTEGERP (object)) |
| @@ -463,7 +473,8 @@ DEFUN ("integer-or-marker-p", Finteger_or_marker_p, Sinteger_or_marker_p, 1, 1, | |||
| 463 | } | 473 | } |
| 464 | 474 | ||
| 465 | DEFUN ("natnump", Fnatnump, Snatnump, 1, 1, 0, | 475 | DEFUN ("natnump", Fnatnump, Snatnump, 1, 1, 0, |
| 466 | doc: /* Return t if OBJECT is a nonnegative integer. */) | 476 | doc: /* Return t if OBJECT is a nonnegative integer. */ |
| 477 | attributes: const) | ||
| 467 | (Lisp_Object object) | 478 | (Lisp_Object object) |
| 468 | { | 479 | { |
| 469 | if (NATNUMP (object)) | 480 | if (NATNUMP (object)) |
| @@ -472,7 +483,8 @@ DEFUN ("natnump", Fnatnump, Snatnump, 1, 1, 0, | |||
| 472 | } | 483 | } |
| 473 | 484 | ||
| 474 | DEFUN ("numberp", Fnumberp, Snumberp, 1, 1, 0, | 485 | DEFUN ("numberp", Fnumberp, Snumberp, 1, 1, 0, |
| 475 | doc: /* Return t if OBJECT is a number (floating point or integer). */) | 486 | doc: /* Return t if OBJECT is a number (floating point or integer). */ |
| 487 | attributes: const) | ||
| 476 | (Lisp_Object object) | 488 | (Lisp_Object object) |
| 477 | { | 489 | { |
| 478 | if (NUMBERP (object)) | 490 | if (NUMBERP (object)) |
| @@ -492,7 +504,8 @@ DEFUN ("number-or-marker-p", Fnumber_or_marker_p, | |||
| 492 | } | 504 | } |
| 493 | 505 | ||
| 494 | DEFUN ("floatp", Ffloatp, Sfloatp, 1, 1, 0, | 506 | DEFUN ("floatp", Ffloatp, Sfloatp, 1, 1, 0, |
| 495 | doc: /* Return t if OBJECT is a floating point number. */) | 507 | doc: /* Return t if OBJECT is a floating point number. */ |
| 508 | attributes: const) | ||
| 496 | (Lisp_Object object) | 509 | (Lisp_Object object) |
| 497 | { | 510 | { |
| 498 | if (FLOATP (object)) | 511 | if (FLOATP (object)) |
| @@ -2954,7 +2967,8 @@ DEFUN ("lognot", Flognot, Slognot, 1, 1, 0, | |||
| 2954 | DEFUN ("byteorder", Fbyteorder, Sbyteorder, 0, 0, 0, | 2967 | DEFUN ("byteorder", Fbyteorder, Sbyteorder, 0, 0, 0, |
| 2955 | doc: /* Return the byteorder for the machine. | 2968 | doc: /* Return the byteorder for the machine. |
| 2956 | Returns 66 (ASCII uppercase B) for big endian machines or 108 (ASCII | 2969 | Returns 66 (ASCII uppercase B) for big endian machines or 108 (ASCII |
| 2957 | lowercase l) for small endian machines. */) | 2970 | lowercase l) for small endian machines. */ |
| 2971 | attributes: const) | ||
| 2958 | (void) | 2972 | (void) |
| 2959 | { | 2973 | { |
| 2960 | unsigned i = 0x04030201; | 2974 | unsigned i = 0x04030201; |
diff --git a/src/decompress.c b/src/decompress.c index b14f0a2cd79..b78dacee207 100644 --- a/src/decompress.c +++ b/src/decompress.c | |||
| @@ -88,7 +88,8 @@ unwind_decompress (void *ddata) | |||
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | DEFUN ("zlib-available-p", Fzlib_available_p, Szlib_available_p, 0, 0, 0, | 90 | DEFUN ("zlib-available-p", Fzlib_available_p, Szlib_available_p, 0, 0, 0, |
| 91 | doc: /* Return t if zlib decompression is available in this instance of Emacs. */) | 91 | doc: /* Return t if zlib decompression is available in this instance of Emacs. */ |
| 92 | attributes: const) | ||
| 92 | (void) | 93 | (void) |
| 93 | { | 94 | { |
| 94 | #ifdef WINDOWSNT | 95 | #ifdef WINDOWSNT |
diff --git a/src/emacs.c b/src/emacs.c index d09c3c36c8a..ca1a8b26d81 100644 --- a/src/emacs.c +++ b/src/emacs.c | |||
| @@ -1892,7 +1892,8 @@ or SIGHUP, and upon SIGINT in batch mode. | |||
| 1892 | 1892 | ||
| 1893 | The value of `kill-emacs-hook', if not void, | 1893 | The value of `kill-emacs-hook', if not void, |
| 1894 | is a list of functions (of no args), | 1894 | is a list of functions (of no args), |
| 1895 | all of which are called before Emacs is actually killed. */) | 1895 | all of which are called before Emacs is actually killed. */ |
| 1896 | attributes: noreturn) | ||
| 1896 | (Lisp_Object arg) | 1897 | (Lisp_Object arg) |
| 1897 | { | 1898 | { |
| 1898 | struct gcpro gcpro1; | 1899 | struct gcpro gcpro1; |
diff --git a/src/eval.c b/src/eval.c index 7e4b016b236..5cadb1bc2de 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -1162,7 +1162,8 @@ unwind_to_catch (struct handler *catch, Lisp_Object value) | |||
| 1162 | 1162 | ||
| 1163 | DEFUN ("throw", Fthrow, Sthrow, 2, 2, 0, | 1163 | DEFUN ("throw", Fthrow, Sthrow, 2, 2, 0, |
| 1164 | doc: /* Throw to the catch for TAG and return VALUE from it. | 1164 | doc: /* Throw to the catch for TAG and return VALUE from it. |
| 1165 | Both TAG and VALUE are evalled. */) | 1165 | Both TAG and VALUE are evalled. */ |
| 1166 | attributes: noreturn) | ||
| 1166 | (register Lisp_Object tag, Lisp_Object value) | 1167 | (register Lisp_Object tag, Lisp_Object value) |
| 1167 | { | 1168 | { |
| 1168 | struct handler *c; | 1169 | struct handler *c; |
| @@ -46,7 +46,8 @@ static void sort_vector_copy (Lisp_Object, ptrdiff_t, | |||
| 46 | static bool internal_equal (Lisp_Object, Lisp_Object, int, bool, Lisp_Object); | 46 | static bool internal_equal (Lisp_Object, Lisp_Object, int, bool, Lisp_Object); |
| 47 | 47 | ||
| 48 | DEFUN ("identity", Fidentity, Sidentity, 1, 1, 0, | 48 | DEFUN ("identity", Fidentity, Sidentity, 1, 1, 0, |
| 49 | doc: /* Return the argument unchanged. */) | 49 | doc: /* Return the argument unchanged. */ |
| 50 | attributes: const) | ||
| 50 | (Lisp_Object arg) | 51 | (Lisp_Object arg) |
| 51 | { | 52 | { |
| 52 | return arg; | 53 | return arg; |
diff --git a/src/frame.c b/src/frame.c index 0eb51bd786c..f138db9cecc 100644 --- a/src/frame.c +++ b/src/frame.c | |||
| @@ -270,7 +270,8 @@ predicates which report frame's specific UI-related capabilities. */) | |||
| 270 | /* Placeholder used by temacs -nw before window.el is loaded. */ | 270 | /* Placeholder used by temacs -nw before window.el is loaded. */ |
| 271 | DEFUN ("frame-windows-min-size", Fframe_windows_min_size, | 271 | DEFUN ("frame-windows-min-size", Fframe_windows_min_size, |
| 272 | Sframe_windows_min_size, 4, 4, 0, | 272 | Sframe_windows_min_size, 4, 4, 0, |
| 273 | doc: /* */) | 273 | doc: /* */ |
| 274 | attributes: const) | ||
| 274 | (Lisp_Object frame, Lisp_Object horizontal, | 275 | (Lisp_Object frame, Lisp_Object horizontal, |
| 275 | Lisp_Object ignore, Lisp_Object pixelwise) | 276 | Lisp_Object ignore, Lisp_Object pixelwise) |
| 276 | { | 277 | { |
diff --git a/src/gnutls.c b/src/gnutls.c index 75fe6149a55..5e6c6353b45 100644 --- a/src/gnutls.c +++ b/src/gnutls.c | |||
| @@ -695,7 +695,8 @@ See also `gnutls-boot'. */) | |||
| 695 | DEFUN ("gnutls-errorp", Fgnutls_errorp, Sgnutls_errorp, 1, 1, 0, | 695 | DEFUN ("gnutls-errorp", Fgnutls_errorp, Sgnutls_errorp, 1, 1, 0, |
| 696 | doc: /* Return t if ERROR indicates a GnuTLS problem. | 696 | doc: /* Return t if ERROR indicates a GnuTLS problem. |
| 697 | ERROR is an integer or a symbol with an integer `gnutls-code' property. | 697 | ERROR is an integer or a symbol with an integer `gnutls-code' property. |
| 698 | usage: (gnutls-errorp ERROR) */) | 698 | usage: (gnutls-errorp ERROR) */ |
| 699 | attributes: const) | ||
| 699 | (Lisp_Object err) | 700 | (Lisp_Object err) |
| 700 | { | 701 | { |
| 701 | if (EQ (err, Qt)) return Qnil; | 702 | if (EQ (err, Qt)) return Qnil; |
| @@ -1603,7 +1604,8 @@ This function may also return `gnutls-e-again', or | |||
| 1603 | #endif /* HAVE_GNUTLS */ | 1604 | #endif /* HAVE_GNUTLS */ |
| 1604 | 1605 | ||
| 1605 | DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0, | 1606 | DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0, |
| 1606 | doc: /* Return t if GnuTLS is available in this instance of Emacs. */) | 1607 | doc: /* Return t if GnuTLS is available in this instance of Emacs. */ |
| 1608 | attributes: const) | ||
| 1607 | (void) | 1609 | (void) |
| 1608 | { | 1610 | { |
| 1609 | #ifdef HAVE_GNUTLS | 1611 | #ifdef HAVE_GNUTLS |
diff --git a/src/keyboard.c b/src/keyboard.c index 9d6eb07a181..0fe2ffc53f3 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -1163,7 +1163,8 @@ top_level_1 (Lisp_Object ignore) | |||
| 1163 | 1163 | ||
| 1164 | DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, "", | 1164 | DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, "", |
| 1165 | doc: /* Exit all recursive editing levels. | 1165 | doc: /* Exit all recursive editing levels. |
| 1166 | This also exits all active minibuffers. */) | 1166 | This also exits all active minibuffers. */ |
| 1167 | attributes: noreturn) | ||
| 1167 | (void) | 1168 | (void) |
| 1168 | { | 1169 | { |
| 1169 | #ifdef HAVE_WINDOW_SYSTEM | 1170 | #ifdef HAVE_WINDOW_SYSTEM |
| @@ -1186,7 +1187,8 @@ user_error (const char *msg) | |||
| 1186 | 1187 | ||
| 1187 | /* _Noreturn will be added to prototype by make-docfile. */ | 1188 | /* _Noreturn will be added to prototype by make-docfile. */ |
| 1188 | DEFUN ("exit-recursive-edit", Fexit_recursive_edit, Sexit_recursive_edit, 0, 0, "", | 1189 | DEFUN ("exit-recursive-edit", Fexit_recursive_edit, Sexit_recursive_edit, 0, 0, "", |
| 1189 | doc: /* Exit from the innermost recursive edit or minibuffer. */) | 1190 | doc: /* Exit from the innermost recursive edit or minibuffer. */ |
| 1191 | attributes: noreturn) | ||
| 1190 | (void) | 1192 | (void) |
| 1191 | { | 1193 | { |
| 1192 | if (command_loop_level > 0 || minibuf_level > 0) | 1194 | if (command_loop_level > 0 || minibuf_level > 0) |
| @@ -1197,7 +1199,8 @@ DEFUN ("exit-recursive-edit", Fexit_recursive_edit, Sexit_recursive_edit, 0, 0, | |||
| 1197 | 1199 | ||
| 1198 | /* _Noreturn will be added to prototype by make-docfile. */ | 1200 | /* _Noreturn will be added to prototype by make-docfile. */ |
| 1199 | DEFUN ("abort-recursive-edit", Fabort_recursive_edit, Sabort_recursive_edit, 0, 0, "", | 1201 | DEFUN ("abort-recursive-edit", Fabort_recursive_edit, Sabort_recursive_edit, 0, 0, "", |
| 1200 | doc: /* Abort the command that requested this recursive edit or minibuffer input. */) | 1202 | doc: /* Abort the command that requested this recursive edit or minibuffer input. */ |
| 1203 | attributes: noreturn) | ||
| 1201 | (void) | 1204 | (void) |
| 1202 | { | 1205 | { |
| 1203 | if (command_loop_level > 0 || minibuf_level > 0) | 1206 | if (command_loop_level > 0 || minibuf_level > 0) |
diff --git a/src/window.c b/src/window.c index 5ae95f27d64..e5ddef5fa40 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -3000,7 +3000,8 @@ resize_root_window (Lisp_Object window, Lisp_Object delta, Lisp_Object horizonta | |||
| 3000 | /* Placeholder used by temacs -nw before window.el is loaded. */ | 3000 | /* Placeholder used by temacs -nw before window.el is loaded. */ |
| 3001 | DEFUN ("window--sanitize-window-sizes", Fwindow__sanitize_window_sizes, | 3001 | DEFUN ("window--sanitize-window-sizes", Fwindow__sanitize_window_sizes, |
| 3002 | Swindow__sanitize_window_sizes, 2, 2, 0, | 3002 | Swindow__sanitize_window_sizes, 2, 2, 0, |
| 3003 | doc: /* */) | 3003 | doc: /* */ |
| 3004 | attributes: const) | ||
| 3004 | (Lisp_Object frame, Lisp_Object horizontal) | 3005 | (Lisp_Object frame, Lisp_Object horizontal) |
| 3005 | { | 3006 | { |
| 3006 | return Qnil; | 3007 | return Qnil; |
diff --git a/src/xdisp.c b/src/xdisp.c index f006f8e0b94..041a022a370 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -12276,7 +12276,8 @@ DEFUN ("tool-bar-height", Ftool_bar_height, Stool_bar_height, | |||
| 12276 | 0, 2, 0, | 12276 | 0, 2, 0, |
| 12277 | doc: /* Return the number of lines occupied by the tool bar of FRAME. | 12277 | doc: /* Return the number of lines occupied by the tool bar of FRAME. |
| 12278 | If FRAME is nil or omitted, use the selected frame. Optional argument | 12278 | If FRAME is nil or omitted, use the selected frame. Optional argument |
| 12279 | PIXELWISE non-nil means return the height of the tool bar in pixels. */) | 12279 | PIXELWISE non-nil means return the height of the tool bar in pixels. */ |
| 12280 | attributes: const) | ||
| 12280 | (Lisp_Object frame, Lisp_Object pixelwise) | 12281 | (Lisp_Object frame, Lisp_Object pixelwise) |
| 12281 | { | 12282 | { |
| 12282 | int height = 0; | 12283 | int height = 0; |
diff --git a/src/xfaces.c b/src/xfaces.c index 6ecd857d685..85af770c6a2 100644 --- a/src/xfaces.c +++ b/src/xfaces.c | |||
| @@ -3546,7 +3546,8 @@ with the value VALUE is relative. | |||
| 3546 | A relative value is one that doesn't entirely override whatever is | 3546 | A relative value is one that doesn't entirely override whatever is |
| 3547 | inherited from another face. For most possible attributes, | 3547 | inherited from another face. For most possible attributes, |
| 3548 | the only relative value that users see is `unspecified'. | 3548 | the only relative value that users see is `unspecified'. |
| 3549 | However, for :height, floating point values are also relative. */) | 3549 | However, for :height, floating point values are also relative. */ |
| 3550 | attributes: const) | ||
| 3550 | (Lisp_Object attribute, Lisp_Object value) | 3551 | (Lisp_Object attribute, Lisp_Object value) |
| 3551 | { | 3552 | { |
| 3552 | if (EQ (value, Qunspecified) || (EQ (value, QCignore_defface))) | 3553 | if (EQ (value, Qunspecified) || (EQ (value, QCignore_defface))) |