exception::exception(fatal_type type, const char* info, ...) { _print_type(type); char buffer[1024]; va_list args; va_start(args, info); vsprintf(buffer, info, args); fprintf(stdout, "%s\n", buffer); };
no_ignore ubik_error _print_ast(struct ubik_ast *ast, int indent) { size_t i; ubik_error err; struct ubik_ast_binding *b; struct ubik_ast_import_list *imports; _indent(indent); printf("package %s\n", ast->package_name); imports = ast->imports; while (imports != NULL) { _indent(indent); printf("import %s as %s\n", imports->canonical, imports->name); imports = imports->next; } if (ast->types.n > 0) { _indent(indent); printf("%lu types:\n", ast->types.n); for (i = 0; i < ast->types.n; i++) { err = _print_type(ast->types.elems[i], indent + 4); if (err != OK) return err; } } if (ast->interfaces.n > 0) { _indent(indent); printf("%lu interfaces:\n", ast->interfaces.n); for (i = 0; i < ast->interfaces.n; i++) { err = _print_interface( ast->interfaces.elems[i], indent + 4); if (err != OK) return err; } } if (ast->implementations.n > 0) { _indent(indent); printf("%lu implementations:\n", ast->implementations.n); for (i = 0; i < ast->implementations.n; i++) { err = _print_implementation( ast->implementations.elems[i], indent + 4); if (err != OK) return err; } } _indent(indent); if (ast->bindings.n > 0) printf("%lu bindings:\n", ast->bindings.n); else printf("bindings: none\n"); for (i = 0; i < ast->bindings.n; i++) { b = ast->bindings.elems[i]; _indent(indent + 4); printf("bind %s", b->name); if (b->type_expr != NULL) { printf(" ^ "); err = ubik_type_expr_print(b->type_expr); if (err != OK) return err; } printf(" = "); err = _print_expr(b->expr, indent); if (err != OK) return err; printf("\n"); } if (ast->tests.n > 0) { _indent(indent); printf("%lu tests:\n", ast->tests.n); for (i = 0; i < ast->tests.n; i++) { err = _print_test(ast->tests.elems[i], indent + 4); if (err != OK) return err; } } if (ast->immediate != NULL) { _indent(indent); printf("immediate = "); err = _print_expr(ast->immediate, indent); if (err != OK) return err; printf("\n"); } return OK; }