aboutsummaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/eval.c b/src/eval.c
index ac98ca11bd4..d460048e04b 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2792,6 +2792,9 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs,
2792 } 2792 }
2793 else if (COMPILEDP (fun)) 2793 else if (COMPILEDP (fun))
2794 { 2794 {
2795 ptrdiff_t size = ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK;
2796 if (size <= COMPILED_STACK_DEPTH)
2797 xsignal1 (Qinvalid_function, fun);
2795 syms_left = AREF (fun, COMPILED_ARGLIST); 2798 syms_left = AREF (fun, COMPILED_ARGLIST);
2796 if (INTEGERP (syms_left)) 2799 if (INTEGERP (syms_left))
2797 /* A byte-code object with a non-nil `push args' slot means we 2800 /* A byte-code object with a non-nil `push args' slot means we
@@ -2889,19 +2892,25 @@ DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
2889{ 2892{
2890 Lisp_Object tem; 2893 Lisp_Object tem;
2891 2894
2892 if (COMPILEDP (object) && CONSP (AREF (object, COMPILED_BYTECODE))) 2895 if (COMPILEDP (object))
2893 { 2896 {
2894 tem = read_doc_string (AREF (object, COMPILED_BYTECODE)); 2897 ptrdiff_t size = ASIZE (object) & PSEUDOVECTOR_SIZE_MASK;
2895 if (!CONSP (tem)) 2898 if (size <= COMPILED_STACK_DEPTH)
2899 xsignal1 (Qinvalid_function, object);
2900 if (CONSP (AREF (object, COMPILED_BYTECODE)))
2896 { 2901 {
2897 tem = AREF (object, COMPILED_BYTECODE); 2902 tem = read_doc_string (AREF (object, COMPILED_BYTECODE));
2898 if (CONSP (tem) && STRINGP (XCAR (tem))) 2903 if (!CONSP (tem))
2899 error ("Invalid byte code in %s", SDATA (XCAR (tem))); 2904 {
2900 else 2905 tem = AREF (object, COMPILED_BYTECODE);
2901 error ("Invalid byte code"); 2906 if (CONSP (tem) && STRINGP (XCAR (tem)))
2907 error ("Invalid byte code in %s", SDATA (XCAR (tem)));
2908 else
2909 error ("Invalid byte code");
2910 }
2911 ASET (object, COMPILED_BYTECODE, XCAR (tem));
2912 ASET (object, COMPILED_CONSTANTS, XCDR (tem));
2902 } 2913 }
2903 ASET (object, COMPILED_BYTECODE, XCAR (tem));
2904 ASET (object, COMPILED_CONSTANTS, XCDR (tem));
2905 } 2914 }
2906 return object; 2915 return object;
2907} 2916}