diff options
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/data.c b/src/data.c index 4973d577c1c..2360033bb6b 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -912,10 +912,24 @@ signal a `cyclic-function-indirection' error. */) | |||
| 912 | register Lisp_Object function = XSYMBOL (symbol)->u.s.function; | 912 | register Lisp_Object function = XSYMBOL (symbol)->u.s.function; |
| 913 | 913 | ||
| 914 | if (!NILP (Vnative_comp_enable_subr_trampolines) | 914 | if (!NILP (Vnative_comp_enable_subr_trampolines) |
| 915 | && SUBRP (function) | ||
| 916 | && !NATIVE_COMP_FUNCTIONP (function) | ||
| 917 | && !EQ (definition, Fsymbol_function (symbol))) | 915 | && !EQ (definition, Fsymbol_function (symbol))) |
| 918 | calln (Qcomp_subr_trampoline_install, symbol); | 916 | { |
| 917 | if (SUBRP (function) && !NATIVE_COMP_FUNCTIONP (function)) | ||
| 918 | calln (Qcomp_subr_trampoline_install, symbol); | ||
| 919 | else if (NATIVE_COMP_FUNCTIONP (function)) | ||
| 920 | { | ||
| 921 | if (!EQ (symbol, intern_c_string ("--anonymous-lambda")) | ||
| 922 | && native_comp_local_function_p (function) | ||
| 923 | && !(NATIVE_COMP_FUNCTIONP (definition) | ||
| 924 | && EQ (Fsubr_native_comp_unit (function), | ||
| 925 | Fsubr_native_comp_unit (definition)))) | ||
| 926 | { | ||
| 927 | calln (intern_c_string ("require"), intern_c_string ("comp-run")); | ||
| 928 | calln (intern_c_string ("comp-local-function-trampoline-install"), | ||
| 929 | symbol, function); | ||
| 930 | } | ||
| 931 | } | ||
| 932 | } | ||
| 919 | #endif | 933 | #endif |
| 920 | 934 | ||
| 921 | set_symbol_function (symbol, definition); | 935 | set_symbol_function (symbol, definition); |