Exemple #1
0
// print an lval
void 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_FUN:
      if (v->builtin)
      {
        printf("<builtin>");
      }
      else
      {
        printf("(\\ ");
        lval_print(v->formals);
        putchar(' ');
        lval_print(v->body);
        putchar(')');
      }
      break;
    case LVAL_SEXPR:
      lval_expr_print(v, '(', ')');
      break;
    case LVAL_QEXPR:
      lval_expr_print(v, '{', '}');
      break;
  }
}
Exemple #2
0
// Print an "lval"
void 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_SEXPR: lval_expr_print(v, '(', ')'); break;
        case LVAL_QEXPR: lval_expr_print(v, '{', '}'); break;
    }
}
Exemple #3
0
void lval_print(lval* val) {
    switch(val->type) {
        case LVAL_NUM: printf("%g", val->data.num); break;
        case LVAL_SYM: printf("%s", val->data.sym); break;
        case LVAL_STR: lval_print_str(val); break;
        case LVAL_S_EXPR: lval_expr_print(val, "(", ")"); break;
        case LVAL_Q_EXPR: lval_expr_print(val, "{", "}"); break;
        case LVAL_EXIT: printf("exit"); break;
        case LVAL_OK: printf("ok"); break;
        case LVAL_FUNC: ;
            lval_func* func = val->data.func;
            if (func->builtin != NULL) {
                printf("<%s>", func->name);
            } else {
                printf("(<lambda> ");
                lval_print(func->formals);
                putchar(' ');
                lval_print(func->body);
                putchar(')');
            }
            break;
        case LVAL_ERR:
            switch(val->data.err.num) {
                case LERR_DIV_ZERO: fprintf(stderr, "Divide By Zero"); break;
                case LERR_BAD_NUM: fprintf(stderr,"Bad Number"); break;
                case LERR_BAD_OP: fprintf(stderr,"Invalid Operator"); break;
                case LERR_BAD_SYM: fprintf(stderr,"Unknown/Invalid Symbol"); break;
                case LERR_OTHER: fprintf(stderr,"Unknown/Other Error"); break;
                case LERR_SYNTAX: fprintf(stderr,"Syntax Error"); break;
                case LERR_USER: fprintf(stderr,"Runtime Error"); break;
                default: fprintf(stderr,"Unknown Error"); break;
            }
            if (val->data.err.detail != NULL) {
                fprintf(stderr,": %s", val->data.err.detail);
            }
            break;
    }
}