make_lisp_proc bug
[bpt/emacs.git] / src / lisp.h
index 9a9b31e..7d9951b 100644 (file)
@@ -706,18 +706,13 @@ XBOOL_VECTOR (Lisp_Object a)
   return SMOB_PTR (a);
 }
 
-INLINE Lisp_Object
-make_lisp_proc (struct Lisp_Process *p)
-{
-  return scm_new_smob (lisp_vectorlike_tag, (scm_t_bits) p);
-}
-
 #define XSETINT(a, b) ((a) = make_number (b))
 #define XSETFASTINT(a, b) ((a) = make_natnum (b))
 #define XSETVECTOR(a, b) ((a) = (b)->header.self)
 #define XSETSTRING(a, b) ((a) = (b)->self)
 #define XSETSYMBOL(a, b) ((a) = scm_c_vector_ref (b, 0))
 #define XSETMISC(a, b) (a) = ((union Lisp_Misc *) (b))->u_any.self
+#define make_lisp_proc(p) ((p)->header.self)
 
 /* Pseudovector types.  */
 
@@ -1353,10 +1348,16 @@ SYMBOL_INTERNED_P (Lisp_Object sym)
   return scm_is_true (scm_symbol_interned_p (sym));
 }
 
+extern Lisp_Object Ffboundp (Lisp_Object);
+extern Lisp_Object Fmakunbound (Lisp_Object);
+extern Lisp_Object Ffmakunbound (Lisp_Object);
+extern Lisp_Object Ffset (Lisp_Object, Lisp_Object);
+extern Lisp_Object Fsymbol_function (Lisp_Object);
+
 INLINE Lisp_Object
 SYMBOL_FUNCTION (Lisp_Object sym)
 {
-  return scm_call_1 (scm_c_public_ref ("elisp-functions", "symbol-function"), sym);
+  return Fsymbol_function (sym);
 }
 
 /* Value is non-zero if symbol is considered a constant, i.e. its
@@ -2389,7 +2390,11 @@ CHECK_NUMBER_CDR (Lisp_Object x)
 #define DEFUN_ARGS_8   (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
                         Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
 
-#define WRAP1(cfn, lfn) Lisp_Object cfn (Lisp_Object a) { return call1 (intern (lfn), a); }
+#define WRAP1(cfn, lfn) \
+  SCM_SNARF_INIT (DEFSYM (cfn ## _sym, lfn)) \
+  static Lisp_Object cfn ## _sym; \
+  Lisp_Object cfn (Lisp_Object a) \
+  { return call1 (cfn ## _sym, a); }
 #define WRAP2(cfn, lfn) Lisp_Object cfn (Lisp_Object a, Lisp_Object b) { return call2 (intern (lfn), a, b); }
 
 /* True if OBJ is a Lisp function.  */
@@ -2507,7 +2512,6 @@ typedef jmp_buf sys_jmp_buf;
    union specbinding.  But only eval.c should access it.  */
 
 enum specbind_tag {
-  SPECPDL_BACKTRACE,           /* An element of the backtrace.  */
   SPECPDL_LET,                 /* A plain and simple dynamic let-binding.  */
   /* Tags greater than SPECPDL_LET must be "subkinds" of LET.  */
   SPECPDL_LET_LOCAL,           /* A buffer-local let-binding.  */
@@ -3396,11 +3400,7 @@ extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object);
 extern void init_eval (void);
 extern void syms_of_eval (void);
 extern void unwind_body (Lisp_Object);
-extern void record_in_backtrace (Lisp_Object function,
-                                Lisp_Object *args, ptrdiff_t nargs);
 extern void mark_specpdl (void);
-extern void get_backtrace (Lisp_Object array);
-Lisp_Object backtrace_top_function (void);
 extern bool let_shadows_buffer_binding_p (sym_t symbol);
 extern bool let_shadows_global_binding_p (Lisp_Object symbol);
 extern _Noreturn SCM abort_to_prompt (SCM, SCM);
@@ -4004,13 +4004,16 @@ functionp (Lisp_Object object)
       Lisp_Object car = XCAR (object);
       return EQ (car, Qlambda) || EQ (car, Qclosure);
     }
+  else
+    return false;
 }
 
+extern Lisp_Object xsymbol_fn;
+
 INLINE sym_t
 XSYMBOL (Lisp_Object a)
 {
-  return scm_call_1 (scm_c_public_ref ("language elisp runtime", "symbol-desc"),
-                     a);
+  return scm_call_1 (xsymbol_fn, a);
 }
 
 INLINE_HEADER_END