Ejemplo n.º 1
0
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);
};
Ejemplo n.º 2
0
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;
}