void print_tree(VALUE tree) { if(NIL_P(tree)) printf("()"); else if(FALSE_P(tree)) printf("#f"); else if(TRUE_P(tree)) printf("#t"); else if(FIXNUM_P(tree)) printf("%ld", FIX2INT(tree)); else if(SYMBOL_P(tree)) printf("%s", SYMBOL_NAME(tree)); else if(CLOSURE_P(tree)) printf("#<closure>"); else if(MACRO_P(tree)) printf("#<macro>"); else if(NATIVE_PROCEDURE_P(tree)) printf("#<subr>"); else if (PAIR_P(tree)) { printf("("); while(1) { print_tree(CAR(tree)); tree = CDR(tree); if(NIL_P(tree)) break; if(DIRECTVAL_P(tree) || SYMBOL_P(tree) || CLOSURE_P(tree) || MACRO_P(tree) || NATIVE_PROCEDURE_P(tree)) { printf(" . "); print_tree(tree); break; } printf(" "); } printf(")"); } else { fprintf(stderr, "print error"); exit(1); } }
static void primop_procedure_p(long argc) { object p = *sp; if (!(OPCODE_P(p) || PRIMOP_P(p) || PROCEDURE_P(p) || CLOSURE_P(p) || CONTINUATION_P(p))) *sp = false_object; }