declare smobs in alloc.c
[bpt/emacs.git] / src / eval.c
index 3384c5e..8e60e8e 100644 (file)
@@ -73,6 +73,10 @@ ptrdiff_t specpdl_size;
 
 union specbinding *specpdl;
 
+/* Pointer to the dummy entry before the specpdl.  */
+
+union specbinding *specpdl_base;
+
 /* Pointer to first unused element in specpdl.  */
 
 union specbinding *specpdl_ptr;
@@ -172,6 +176,7 @@ init_eval_once (void)
 {
   enum { size = 50 };
   union specbinding *pdlvec = xmalloc ((size + 1) * sizeof *specpdl);
+  specpdl_base = pdlvec;
   specpdl_size = size;
   specpdl = specpdl_ptr = pdlvec + 1;
   /* Don't forget to update docs (lispref node "Local Variables").  */
@@ -269,10 +274,8 @@ call_debugger (Lisp_Object arg)
   return val;
 }
 \f
-DEFUN ("progn", Fprogn, Sprogn, 0, UNEVALLED, 0,
-       doc: /* Eval BODY forms sequentially and return value of last one.
-usage: (progn BODY...)  */)
-  (Lisp_Object body)
+static Lisp_Object
+Fprogn (Lisp_Object body)
 {
   Lisp_Object val = Qnil;
   struct gcpro gcpro1;
@@ -1462,6 +1465,7 @@ grow_specpdl (void)
                          Qnil);
        }
       pdlvec = xpalloc (pdlvec, &pdlvecsize, 1, max_size + 1, sizeof *specpdl);
+      specpdl_base = pdlvec;
       specpdl = pdlvec + 1;
       specpdl_size = pdlvecsize - 1;
       specpdl_ptr = specpdl + count;