]> git.eshelyaron.com Git - emacs.git/commitdiff
Remove arbitrary limit on bytecode maxdepth
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 9 Aug 2016 07:37:39 +0000 (00:37 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 9 Aug 2016 08:31:22 +0000 (01:31 -0700)
* src/bytecode.c (exec_byte_code): Remove MAX_ALLOCA-based limit
on bytecode maxdepth, by using SAFE_ALLOCA_LISP instead of alloca.

pipeline is fuller.

src/bytecode.c

index 52f827f282a265dc4bb81666673e2623713825fa..0c5b8494d0c6d94c93669f0d4082d0112d7d56bc 100644 (file)
@@ -413,7 +413,7 @@ Lisp_Object
 exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
                Lisp_Object args_template, ptrdiff_t nargs, Lisp_Object *args)
 {
-  ptrdiff_t count = SPECPDL_INDEX ();
+  USE_SAFE_ALLOCA;
 #ifdef BYTE_CODE_METER
   int volatile this_op = 0;
   int prev_op;
@@ -447,15 +447,15 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
 
   stack.byte_string = bytestr;
   stack.pc = stack.byte_string_start = SDATA (bytestr);
-  if (MAX_ALLOCA / word_size <= XFASTINT (maxdepth))
-    memory_full (SIZE_MAX);
   unsigned char quitcounter = 0;
-  int stack_items = XFASTINT (maxdepth) + 1;
-  Lisp_Object *stack_base = alloca (stack_items * sizeof *top);
+  EMACS_INT stack_items = XFASTINT (maxdepth) + 1;
+  Lisp_Object *stack_base;
+  SAFE_ALLOCA_LISP (stack_base, stack_items);
   Lisp_Object *stack_lim = stack_base + stack_items;
   top = stack_base;
   stack.next = byte_stack_list;
   byte_stack_list = &stack;
+  ptrdiff_t count = SPECPDL_INDEX ();
 
   if (!NILP (args_template))
     {
@@ -1699,6 +1699,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
       error ("binding stack not balanced (serious byte compiler bug)");
     }
 
+  SAFE_FREE ();
   return result;
 }