#include "opaque.h"
#include "syntax.h"
-#include <stddef.h>
#include <limits.h>
EXFUN (Ffetch_bytecode, 1);
extern Lisp_Object Qand_rest, Qand_optional;
-/* Define ERROR_CHECK_BYTE_CODE to enable some minor sanity checking.
- Useful for debugging the byte compiler. */
-#ifdef DEBUG_XEMACS
-#define ERROR_CHECK_BYTE_CODE
-#endif
-
/* Define BYTE_CODE_METER to enable generation of a byte-op usage histogram.
This isn't defined in FSF Emacs and isn't defined in XEmacs v19. */
/* #define BYTE_CODE_METER */
f->stack_depth,
XVECTOR_DATA (f->constants));
- UNBIND_TO_GCPRO_VARIABLES_ONLY (speccount, value);
+ /* The attempt to optimize this by only unbinding variables failed
+ because using buffer-local variables as function parameters
+ leads to specpdl_ptr->func != 0 */
+ /* UNBIND_TO_GCPRO_VARIABLES_ONLY (speccount, value); */
+ UNBIND_TO_GCPRO (speccount, value);
return value;
}
internal_hash (f->constants, depth + 1));
}
+static const struct lrecord_description compiled_function_description[] = {
+ { XD_LISP_OBJECT, offsetof(struct Lisp_Compiled_Function, instructions), 4 },
+#ifdef COMPILED_FUNCTION_ANNOTATION_HACK
+ { XD_LISP_OBJECT, offsetof(struct Lisp_Compiled_Function, annotated), 1 },
+#endif
+ { XD_END }
+};
+
DEFINE_BASIC_LRECORD_IMPLEMENTATION ("compiled-function", compiled_function,
mark_compiled_function,
print_compiled_function, 0,
compiled_function_equal,
compiled_function_hash,
+ compiled_function_description,
Lisp_Compiled_Function);
\f
DEFUN ("compiled-function-p", Fcompiled_function_p, 1, 1, 0, /*
if (OPAQUEP (f->instructions) || STRINGP (f->instructions))
return function;
- if (CONSP (XCOMPILED_FUNCTION (function)->instructions))
+ if (CONSP (f->instructions))
{
Lisp_Object tem = read_doc_string (f->instructions);
if (!CONSP (tem))
ebolify_bytecode_constants (XCDR (tem));
/* VERY IMPORTANT to purecopy here!!!!!
See load_force_doc_string_unwind. */
- /* f->instructions = Fpurecopy (XCAR (tem)); */
- f->constants = Fpurecopy (XCDR (tem));
+ f->instructions = Fpurecopy (XCAR (tem));
+ f->constants = Fpurecopy (XCDR (tem));
return function;
}
abort ();