diff options
Diffstat (limited to 'src/comp.c')
| -rw-r--r-- | src/comp.c | 16 |
1 files changed, 13 insertions, 3 deletions
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 | ||