aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2022-03-19 17:19:19 +0200
committerEli Zaretskii2022-03-19 17:19:19 +0200
commit6887bf555f12e2059f237862159e19deddf596e1 (patch)
tree465582b2ac45db1de297a6a80fa13b7bc2f9ea16 /src
parent9c68894399e928220192fd44efbd71a1ca116028 (diff)
parent71b8f1fc635d9bbe00ca89457065e0c83456ac43 (diff)
downloademacs-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.c1
-rw-r--r--src/comp.c16
-rw-r--r--src/data.c6
-rw-r--r--src/lisp.h1
-rw-r--r--src/pdumper.c4
-rw-r--r--src/xterm.c8
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)
5411static Lisp_Object 5411static Lisp_Object
5412make_subr (Lisp_Object symbol_name, Lisp_Object minarg, Lisp_Object maxarg, 5412make_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)
2854static dump_off 2854static dump_off
2855dump_subr (struct dump_context *ctx, const struct Lisp_Subr *subr) 2855dump_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
1041static void 1043static 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
1081static void 1085static 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
1100static void 1106static 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
1123void 1131void