void lval_print(lval* v) {
  switch (v->type) {
    case LVAL_FUN:
      if (v->builtin) {
        printf(">builtin>");
      } else {
        printf("(\\ "); lval_print(v->formals); putchar(' '); lval_print(v->body); putchar(')');
      }
    break;
    case LVAL_NUM:   printf("%li", v->num); break;
    case LVAL_ERR:   printf("Error: %s", v->err); break;
    case LVAL_SYM:   printf("%s", v->sym); break;
    case LVAL_SEXPR: lval_print_expr(v, '(', ')'); break;
    case LVAL_QEXPR: lval_print_expr(v, '{', '}'); break;
  }
}
Example #2
0
int lval_print(lval* v)
{
  switch (v->type)
  {
    case LVAL_NUM:
      printf("%li", v->num);
      break;

    case LVAL_ERR:
      printf("Error: %s", v->err);
      break;

    case LVAL_SYM:
      printf("%s", v->sym);
      break;

    case LVAL_STR:
      lval_print_str(v, "\"", "\"");
      break;

    case LVAL_FUN:
      if (v->builtin) {
        printf("<builtin '%s'>", v->sym);
      } else {
        printf("(\\ ");
        lval_print(v->formals);
        putchar(' ');
        lval_print(v->body);
        putchar(')');
      }
      break;

    case LVAL_SEXPR:
      return lval_print_expr(v, '(', ')');

    case LVAL_QEXPR:
      return lval_print_expr(v, '{', '}');

    default:
      return 0;
  }

  return 1;
}