I don't get varargs added by C-Keen on Tue May 24 14:36:55 2016
typedef struct cell
{
ltype type;
union {
uint64_t data;
struct cell* cell;
} car;
struct cell *cdr;
gc_flag flag; /* GC Flag */
} cell;
void barf(char* msg, ...)
{
va_list args;
cell *c;
va_start(args, msg);
printf("PANIC: ");
while (*msg){
if (*msg == '%'){
if (msg[1] == 'c'){
msg++;
c = va_arg(args, cell*);
display(c);
}
printf("%c", *msg);
msg++;
} else {
printf("%c", *msg);
}
msg++;
}
va_end(args);
printf("\n");
exit(1);
}
Leads to:
0x0000000000401ed2 in display (expr=0x2a) at l.c:578
578 switch (typeOf(expr))
(gdb) up
#1 0x0000000000400b85 in barf (msg=0x405308 "c") at l.c:90
90 display(c);
(gdb) p c
$10 = (cell *) 0x2a
(gdb) up
#2 0x0000000000402f1f in eval (expr=0x60e7b0, env=0x60e670) at l.c:1043
1043 barf("Unbound Symbol: %c", expr);
(gdb) p *expr
$11 = {type = SYMBOL, car = {data = 99, cell = 0x63}, cdr = 0x60e7e0, flag = CLEAR}