1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
// SPDX-License-Identifier: GPL-3.0-only
// (c) Hare authors <https://harelang.org>
use encoding::utf8;
use fmt;
use fs;
use hare::ast;
use hare::lex;
use hare::module;
use hare::parse;
use io;
use os::exec;
export type haredoc_colors_error = !str;
export type error = !(lex::error | parse::error | io::error |
module::error | exec::error | fs::error | haredoc_colors_error |
utf8::invalid);
export fn strerror(err: error) str = {
match (err) {
case let err: lex::error =>
return lex::strerror(err);
case let err: parse::error =>
return parse::strerror(err);
case let err: io::error =>
return io::strerror(err);
case let err: module::error =>
return module::strerror(err);
case let err: exec::error =>
return exec::strerror(err);
case let err: fs::error =>
return fs::strerror(err);
case let err: utf8::invalid =>
return utf8::strerror(err);
case let err: haredoc_colors_error =>
def ERRMSG = "Error parsing HAREDOC_COLORS: invalid key";
if (len(err) == 0) {
return ERRMSG;
};
static let buf: [len(ERRMSG) + 64 + 3]u8 = [0...];
return fmt::bsprintf(buf, "{} '{}'", ERRMSG, err)!;
};
};
export type context = struct {
mctx: *module::context,
ident: ast::ident,
tags: []str,
ambiguous: bool,
parse_errs: []lex::syntax,
srcs: module::srcset,
submods: []submodule,
summary: summary,
template: bool,
show_lineno: bool,
show_undocumented: bool,
readme: (io::file | void),
out: io::handle,
pager: (exec::process | void),
};
export type summary = struct {
constants: []ast::decl,
errors: []ast::decl,
types: []ast::decl,
globals: []ast::decl,
funcs: []ast::decl,
};
export fn finish_summary(s: summary) void = {
free(s.constants);
free(s.errors);
free(s.types);
free(s.globals);
free(s.funcs);
};
|