diff options
Diffstat (limited to 'src/bytecode.c')
| -rw-r--r-- | src/bytecode.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index ed6e2b34e77..def20b232c6 100644 --- a/src/bytecode.c +++ b/src/bytecode.c | |||
| @@ -792,22 +792,19 @@ exec_byte_code (Lisp_Object fun, ptrdiff_t args_template, | |||
| 792 | Lisp_Object original_fun = call_fun; | 792 | Lisp_Object original_fun = call_fun; |
| 793 | if (SYMBOLP (call_fun)) | 793 | if (SYMBOLP (call_fun)) |
| 794 | call_fun = XSYMBOL (call_fun)->u.s.function; | 794 | call_fun = XSYMBOL (call_fun)->u.s.function; |
| 795 | Lisp_Object template; | 795 | if (COMPILEDP (call_fun)) |
| 796 | Lisp_Object bytecode; | ||
| 797 | if (COMPILEDP (call_fun) | ||
| 798 | /* Lexical binding only. */ | ||
| 799 | && (template = AREF (call_fun, COMPILED_ARGLIST), | ||
| 800 | FIXNUMP (template)) | ||
| 801 | /* No autoloads. */ | ||
| 802 | && (bytecode = AREF (call_fun, COMPILED_BYTECODE), | ||
| 803 | !CONSP (bytecode))) | ||
| 804 | { | 796 | { |
| 805 | fun = call_fun; | 797 | Lisp_Object template = AREF (call_fun, COMPILED_ARGLIST); |
| 806 | bytestr = bytecode; | 798 | if (FIXNUMP (template)) |
| 807 | args_template = XFIXNUM (template); | 799 | { |
| 808 | nargs = call_nargs; | 800 | /* Fast path for lexbound functions. */ |
| 809 | args = call_args; | 801 | fun = call_fun; |
| 810 | goto setup_frame; | 802 | bytestr = AREF (call_fun, COMPILED_BYTECODE), |
| 803 | args_template = XFIXNUM (template); | ||
| 804 | nargs = call_nargs; | ||
| 805 | args = call_args; | ||
| 806 | goto setup_frame; | ||
| 807 | } | ||
| 811 | } | 808 | } |
| 812 | 809 | ||
| 813 | Lisp_Object val; | 810 | Lisp_Object val; |