diff options
| author | Eli Zaretskii | 2022-03-19 17:19:19 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2022-03-19 17:19:19 +0200 |
| commit | 6887bf555f12e2059f237862159e19deddf596e1 (patch) | |
| tree | 465582b2ac45db1de297a6a80fa13b7bc2f9ea16 /src | |
| parent | 9c68894399e928220192fd44efbd71a1ca116028 (diff) | |
| parent | 71b8f1fc635d9bbe00ca89457065e0c83456ac43 (diff) | |
| download | emacs-6887bf555f12e2059f237862159e19deddf596e1.tar.gz emacs-6887bf555f12e2059f237862159e19deddf596e1.zip | |
Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs
Diffstat (limited to 'src')
| -rw-r--r-- | src/alloc.c | 1 | ||||
| -rw-r--r-- | src/comp.c | 16 | ||||
| -rw-r--r-- | src/data.c | 6 | ||||
| -rw-r--r-- | src/lisp.h | 1 | ||||
| -rw-r--r-- | src/pdumper.c | 4 | ||||
| -rw-r--r-- | src/xterm.c | 8 |
6 files changed, 31 insertions, 5 deletions
diff --git a/src/alloc.c b/src/alloc.c index c19e3dabb6e..b0fbc91fe50 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -6844,6 +6844,7 @@ mark_object (Lisp_Object arg) | |||
| 6844 | set_vector_marked (ptr); | 6844 | set_vector_marked (ptr); |
| 6845 | struct Lisp_Subr *subr = XSUBR (obj); | 6845 | struct Lisp_Subr *subr = XSUBR (obj); |
| 6846 | mark_object (subr->native_intspec); | 6846 | mark_object (subr->native_intspec); |
| 6847 | mark_object (subr->command_modes); | ||
| 6847 | mark_object (subr->native_comp_u); | 6848 | mark_object (subr->native_comp_u); |
| 6848 | mark_object (subr->lambda_list); | 6849 | mark_object (subr->lambda_list); |
| 6849 | mark_object (subr->type); | 6850 | mark_object (subr->type); |
diff --git a/src/comp.c b/src/comp.c index 6449eedb278..499eee7e709 100644 --- a/src/comp.c +++ b/src/comp.c | |||
| @@ -5411,7 +5411,7 @@ native_function_doc (Lisp_Object function) | |||
| 5411 | static Lisp_Object | 5411 | static Lisp_Object |
| 5412 | make_subr (Lisp_Object symbol_name, Lisp_Object minarg, Lisp_Object maxarg, | 5412 | make_subr (Lisp_Object symbol_name, Lisp_Object minarg, Lisp_Object maxarg, |
| 5413 | Lisp_Object c_name, Lisp_Object type, Lisp_Object doc_idx, | 5413 | Lisp_Object c_name, Lisp_Object type, Lisp_Object doc_idx, |
| 5414 | Lisp_Object intspec, Lisp_Object comp_u) | 5414 | Lisp_Object intspec, Lisp_Object command_modes, Lisp_Object comp_u) |
| 5415 | { | 5415 | { |
| 5416 | struct Lisp_Native_Comp_Unit *cu = XNATIVE_COMP_UNIT (comp_u); | 5416 | struct Lisp_Native_Comp_Unit *cu = XNATIVE_COMP_UNIT (comp_u); |
| 5417 | dynlib_handle_ptr handle = cu->handle; | 5417 | dynlib_handle_ptr handle = cu->handle; |
| @@ -5445,6 +5445,7 @@ make_subr (Lisp_Object symbol_name, Lisp_Object minarg, Lisp_Object maxarg, | |||
| 5445 | x->s.max_args = FIXNUMP (maxarg) ? XFIXNUM (maxarg) : MANY; | 5445 | x->s.max_args = FIXNUMP (maxarg) ? XFIXNUM (maxarg) : MANY; |
| 5446 | x->s.symbol_name = xstrdup (SSDATA (symbol_name)); | 5446 | x->s.symbol_name = xstrdup (SSDATA (symbol_name)); |
| 5447 | x->s.native_intspec = intspec; | 5447 | x->s.native_intspec = intspec; |
| 5448 | x->s.command_modes = command_modes; | ||
| 5448 | x->s.doc = XFIXNUM (doc_idx); | 5449 | x->s.doc = XFIXNUM (doc_idx); |
| 5449 | #ifdef HAVE_NATIVE_COMP | 5450 | #ifdef HAVE_NATIVE_COMP |
| 5450 | x->s.native_comp_u = comp_u; | 5451 | x->s.native_comp_u = comp_u; |
| @@ -5467,12 +5468,17 @@ This gets called by top_level_run during the load phase. */) | |||
| 5467 | { | 5468 | { |
| 5468 | Lisp_Object doc_idx = FIRST (rest); | 5469 | Lisp_Object doc_idx = FIRST (rest); |
| 5469 | Lisp_Object intspec = SECOND (rest); | 5470 | Lisp_Object intspec = SECOND (rest); |
| 5471 | Lisp_Object command_modes = Qnil; | ||
| 5472 | if (!NILP (XCDR (XCDR (rest)))) | ||
| 5473 | command_modes = THIRD (rest); | ||
| 5474 | |||
| 5470 | struct Lisp_Native_Comp_Unit *cu = XNATIVE_COMP_UNIT (comp_u); | 5475 | struct Lisp_Native_Comp_Unit *cu = XNATIVE_COMP_UNIT (comp_u); |
| 5471 | if (cu->loaded_once) | 5476 | if (cu->loaded_once) |
| 5472 | return Qnil; | 5477 | return Qnil; |
| 5473 | 5478 | ||
| 5474 | Lisp_Object tem = | 5479 | Lisp_Object tem = |
| 5475 | make_subr (c_name, minarg, maxarg, c_name, type, doc_idx, intspec, comp_u); | 5480 | make_subr (c_name, minarg, maxarg, c_name, type, doc_idx, intspec, |
| 5481 | command_modes, comp_u); | ||
| 5476 | 5482 | ||
| 5477 | /* We must protect it against GC because the function is not | 5483 | /* We must protect it against GC because the function is not |
| 5478 | reachable through symbols. */ | 5484 | reachable through symbols. */ |
| @@ -5497,9 +5503,13 @@ This gets called by top_level_run during the load phase. */) | |||
| 5497 | { | 5503 | { |
| 5498 | Lisp_Object doc_idx = FIRST (rest); | 5504 | Lisp_Object doc_idx = FIRST (rest); |
| 5499 | Lisp_Object intspec = SECOND (rest); | 5505 | Lisp_Object intspec = SECOND (rest); |
| 5506 | Lisp_Object command_modes = Qnil; | ||
| 5507 | if (!NILP (XCDR (XCDR (rest)))) | ||
| 5508 | command_modes = THIRD (rest); | ||
| 5509 | |||
| 5500 | Lisp_Object tem = | 5510 | Lisp_Object tem = |
| 5501 | make_subr (SYMBOL_NAME (name), minarg, maxarg, c_name, type, doc_idx, | 5511 | make_subr (SYMBOL_NAME (name), minarg, maxarg, c_name, type, doc_idx, |
| 5502 | intspec, comp_u); | 5512 | intspec, command_modes, comp_u); |
| 5503 | 5513 | ||
| 5504 | defalias (name, tem); | 5514 | defalias (name, tem); |
| 5505 | 5515 | ||
diff --git a/src/data.c b/src/data.c index 23b0e7c29d9..5894340aba3 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -1167,7 +1167,11 @@ The value, if non-nil, is a list of mode name symbols. */) | |||
| 1167 | fun = Fsymbol_function (fun); | 1167 | fun = Fsymbol_function (fun); |
| 1168 | } | 1168 | } |
| 1169 | 1169 | ||
| 1170 | if (COMPILEDP (fun)) | 1170 | if (SUBRP (fun)) |
| 1171 | { | ||
| 1172 | return XSUBR (fun)->command_modes; | ||
| 1173 | } | ||
| 1174 | else if (COMPILEDP (fun)) | ||
| 1171 | { | 1175 | { |
| 1172 | if (PVSIZE (fun) <= COMPILED_INTERACTIVE) | 1176 | if (PVSIZE (fun) <= COMPILED_INTERACTIVE) |
| 1173 | return Qnil; | 1177 | return Qnil; |
diff --git a/src/lisp.h b/src/lisp.h index e4d156c0f45..b558d311a80 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -2154,6 +2154,7 @@ struct Lisp_Subr | |||
| 2154 | const char *intspec; | 2154 | const char *intspec; |
| 2155 | Lisp_Object native_intspec; | 2155 | Lisp_Object native_intspec; |
| 2156 | }; | 2156 | }; |
| 2157 | Lisp_Object command_modes; | ||
| 2157 | EMACS_INT doc; | 2158 | EMACS_INT doc; |
| 2158 | #ifdef HAVE_NATIVE_COMP | 2159 | #ifdef HAVE_NATIVE_COMP |
| 2159 | Lisp_Object native_comp_u; | 2160 | Lisp_Object native_comp_u; |
diff --git a/src/pdumper.c b/src/pdumper.c index f14239f863a..11831023622 100644 --- a/src/pdumper.c +++ b/src/pdumper.c | |||
| @@ -2854,7 +2854,7 @@ dump_bool_vector (struct dump_context *ctx, const struct Lisp_Vector *v) | |||
| 2854 | static dump_off | 2854 | static dump_off |
| 2855 | dump_subr (struct dump_context *ctx, const struct Lisp_Subr *subr) | 2855 | dump_subr (struct dump_context *ctx, const struct Lisp_Subr *subr) |
| 2856 | { | 2856 | { |
| 2857 | #if CHECK_STRUCTS && !defined (HASH_Lisp_Subr_F09D8E8E19) | 2857 | #if CHECK_STRUCTS && !defined (HASH_Lisp_Subr_A212A8F82A) |
| 2858 | # error "Lisp_Subr changed. See CHECK_STRUCTS comment in config.h." | 2858 | # error "Lisp_Subr changed. See CHECK_STRUCTS comment in config.h." |
| 2859 | #endif | 2859 | #endif |
| 2860 | struct Lisp_Subr out; | 2860 | struct Lisp_Subr out; |
| @@ -2878,11 +2878,13 @@ dump_subr (struct dump_context *ctx, const struct Lisp_Subr *subr) | |||
| 2878 | COLD_OP_NATIVE_SUBR, | 2878 | COLD_OP_NATIVE_SUBR, |
| 2879 | make_lisp_ptr ((void *) subr, Lisp_Vectorlike)); | 2879 | make_lisp_ptr ((void *) subr, Lisp_Vectorlike)); |
| 2880 | dump_field_lv (ctx, &out, subr, &subr->native_intspec, WEIGHT_NORMAL); | 2880 | dump_field_lv (ctx, &out, subr, &subr->native_intspec, WEIGHT_NORMAL); |
| 2881 | dump_field_lv (ctx, &out, subr, &subr->command_modes, WEIGHT_NORMAL); | ||
| 2881 | } | 2882 | } |
| 2882 | else | 2883 | else |
| 2883 | { | 2884 | { |
| 2884 | dump_field_emacs_ptr (ctx, &out, subr, &subr->symbol_name); | 2885 | dump_field_emacs_ptr (ctx, &out, subr, &subr->symbol_name); |
| 2885 | dump_field_emacs_ptr (ctx, &out, subr, &subr->intspec); | 2886 | dump_field_emacs_ptr (ctx, &out, subr, &subr->intspec); |
| 2887 | dump_field_emacs_ptr (ctx, &out, subr, &subr->command_modes); | ||
| 2886 | } | 2888 | } |
| 2887 | DUMP_FIELD_COPY (&out, subr, doc); | 2889 | DUMP_FIELD_COPY (&out, subr, doc); |
| 2888 | #ifdef HAVE_NATIVE_COMP | 2890 | #ifdef HAVE_NATIVE_COMP |
diff --git a/src/xterm.c b/src/xterm.c index b820c102f1b..fb0fc66ae59 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -1035,7 +1035,9 @@ x_dnd_send_enter (struct frame *f, Window target, int supported) | |||
| 1035 | PropModeReplace, (unsigned char *) x_dnd_targets, | 1035 | PropModeReplace, (unsigned char *) x_dnd_targets, |
| 1036 | x_dnd_n_targets); | 1036 | x_dnd_n_targets); |
| 1037 | 1037 | ||
| 1038 | x_catch_errors (dpyinfo->display); | ||
| 1038 | XSendEvent (FRAME_X_DISPLAY (f), target, False, 0, &msg); | 1039 | XSendEvent (FRAME_X_DISPLAY (f), target, False, 0, &msg); |
| 1040 | x_uncatch_errors (); | ||
| 1039 | } | 1041 | } |
| 1040 | 1042 | ||
| 1041 | static void | 1043 | static void |
| @@ -1075,7 +1077,9 @@ x_dnd_send_position (struct frame *f, Window target, int supported, | |||
| 1075 | if (supported >= 4) | 1077 | if (supported >= 4) |
| 1076 | msg.xclient.data.l[4] = action; | 1078 | msg.xclient.data.l[4] = action; |
| 1077 | 1079 | ||
| 1080 | x_catch_errors (dpyinfo->display); | ||
| 1078 | XSendEvent (FRAME_X_DISPLAY (f), target, False, 0, &msg); | 1081 | XSendEvent (FRAME_X_DISPLAY (f), target, False, 0, &msg); |
| 1082 | x_uncatch_errors (); | ||
| 1079 | } | 1083 | } |
| 1080 | 1084 | ||
| 1081 | static void | 1085 | static void |
| @@ -1094,7 +1098,9 @@ x_dnd_send_leave (struct frame *f, Window target) | |||
| 1094 | msg.xclient.data.l[3] = 0; | 1098 | msg.xclient.data.l[3] = 0; |
| 1095 | msg.xclient.data.l[4] = 0; | 1099 | msg.xclient.data.l[4] = 0; |
| 1096 | 1100 | ||
| 1101 | x_catch_errors (dpyinfo->display); | ||
| 1097 | XSendEvent (FRAME_X_DISPLAY (f), target, False, 0, &msg); | 1102 | XSendEvent (FRAME_X_DISPLAY (f), target, False, 0, &msg); |
| 1103 | x_uncatch_errors (); | ||
| 1098 | } | 1104 | } |
| 1099 | 1105 | ||
| 1100 | static void | 1106 | static void |
| @@ -1117,7 +1123,9 @@ x_dnd_send_drop (struct frame *f, Window target, Time timestamp, | |||
| 1117 | if (supported >= 1) | 1123 | if (supported >= 1) |
| 1118 | msg.xclient.data.l[2] = timestamp; | 1124 | msg.xclient.data.l[2] = timestamp; |
| 1119 | 1125 | ||
| 1126 | x_catch_errors (dpyinfo->display); | ||
| 1120 | XSendEvent (FRAME_X_DISPLAY (f), target, False, 0, &msg); | 1127 | XSendEvent (FRAME_X_DISPLAY (f), target, False, 0, &msg); |
| 1128 | x_uncatch_errors (); | ||
| 1121 | } | 1129 | } |
| 1122 | 1130 | ||
| 1123 | void | 1131 | void |