#define NEWLINE_OR_RETURN if (continue_p(1)) newline(NULL); else return;
+/* FIXME: This should be auto-generated by whatever generates
+ constants.h so we don't have to maintain this twice! */
+#ifdef LISP_FEATURE_X86_64
+char *lowtag_Names[] = {
+ "even fixnum",
+ "instance pointer",
+ "other immediate [0]",
+ "unknown [3]",
+ "unknown [4]",
+ "unknown [5]",
+ "other immediate [1]",
+ "list pointer",
+ "odd fixnum",
+ "function pointer",
+ "other immediate [2]",
+ "unknown [11]",
+ "unknown [12]",
+ "unknown [13]",
+ "other immediate [3]",
+ "other pointer"
+};
+#else
char *lowtag_Names[] = {
"even fixnum",
"instance pointer",
"other immediate [1]",
"other pointer"
};
+#endif
/* FIXME: Yikes! This table implicitly depends on the values in sbcl.h,
* but doesn't actually depend on them, so if they change, it gets
static void brief_otherimm(lispobj obj)
{
- int type, c, idx;
+ int type, c;
+ unsigned int idx;
char buffer[10];
type = widetag_of(obj);
static void print_otherimm(lispobj obj)
{
- int type, idx;
+ int type;
+
+ unsigned int idx;
type = widetag_of(obj);
idx = type >> 2;
obj = NIL;
break;
}
- print_obj(NULL, cons->car);
+ print_obj("", cons->car);
obj = cons->cdr;
space = 1;
if (obj == NIL)
}
if (obj != NIL) {
printf(" . ");
- print_obj(NULL, obj);
+ print_obj("", obj);
}
putchar(')');
}
}
+#ifdef LISP_FEATURE_X86_64
+static void print_unknown(lispobj obj)
+{
+ printf("unknown object: %p", (void *)obj);
+}
+#endif
+
static void print_list(lispobj obj)
{
if (!is_valid_lisp_addr((os_vm_address_t)native_pointer(obj))) {
static void print_struct(lispobj obj)
{
struct instance *instance = (struct instance *)native_pointer(obj);
- int i;
+ unsigned int i;
char buffer[16];
print_obj("type: ", ((struct instance *)native_pointer(obj))->slots[0]);
for (i = 1; i < HeaderValue(instance->header); i++) {
/* FIXME: Yikes again! This, like subtype_Names[], needs to depend
* on the values in sbcl.h (or perhaps be generated automatically
* by GENESIS as part of sbcl.h). */
-static char *symbol_slots[] = {"value: ", "unused: ",
+static char *symbol_slots[] = {"value: ", "hash: ",
"plist: ", "name: ", "package: ",
#ifdef LISP_FEATURE_SB_THREAD
"tls-index: " ,
static void print_obj(char *prefix, lispobj obj)
{
+#ifdef LISP_FEATURE_X86_64
+ static void (*verbose_fns[])(lispobj obj)
+ = {print_fixnum, print_struct, print_otherimm, print_unknown,
+ print_unknown, print_unknown, print_otherimm, print_list,
+ print_fixnum, print_otherptr, print_otherimm, print_unknown,
+ print_unknown, print_unknown, print_otherimm, print_otherptr};
+ static void (*brief_fns[])(lispobj obj)
+ = {brief_fixnum, brief_struct, brief_otherimm, print_unknown,
+ print_unknown, print_unknown, brief_otherimm, brief_list,
+ brief_fixnum, brief_otherptr, brief_otherimm, print_unknown,
+ print_unknown, print_unknown,brief_otherimm, brief_otherptr};
+#else
static void (*verbose_fns[])(lispobj obj)
= {print_fixnum, print_struct, print_otherimm, print_list,
print_fixnum, print_otherptr, print_otherimm, print_otherptr};
static void (*brief_fns[])(lispobj obj)
= {brief_fixnum, brief_struct, brief_otherimm, brief_list,
brief_fixnum, brief_otherptr, brief_otherimm, brief_otherptr};
+#endif
int type = lowtag_of(obj);
struct var *var = lookup_by_obj(obj);
char buffer[256];
dont_descend = 1;
if (var == NULL &&
- /* FIXME: What does this "x & y & z & .." expression mean? */
- (obj & FUN_POINTER_LOWTAG & LIST_POINTER_LOWTAG & INSTANCE_POINTER_LOWTAG & OTHER_POINTER_LOWTAG) != 0)
+ ((obj & LOWTAG_MASK) == FUN_POINTER_LOWTAG ||
+ (obj & LOWTAG_MASK) == LIST_POINTER_LOWTAG ||
+ (obj & LOWTAG_MASK) == INSTANCE_POINTER_LOWTAG ||
+ (obj & LOWTAG_MASK) == OTHER_POINTER_LOWTAG))
var = define_var(NULL, obj, 0);
if (var != NULL)