commit 4b72bd743fd8110d1d39e1b2db958264e872d255
parent 3ea3291922ce19b3376893be2422bda85d2eba02
Author: Lou Woell <lou.woell@posteo.de>
Date: Sat, 13 Sep 2025 02:13:37 +0200
[list-symbols] handle some errors
Diffstat:
2 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/cmd/harehelper/list_symbols.ha b/cmd/harehelper/list_symbols.ha
@@ -13,6 +13,7 @@
// this program. If not, see <https://www.gnu.org/licenses/>.
use fs;
+use fmt;
use getopt;
use hare::ast;
use hare::module;
@@ -20,7 +21,12 @@ use hare::parse;
fn list (cmd: getopt::command, ctx: *module::context) void = {
- let id = parse::identstr(cmd.args[0])!;
+ let id = match (parse::identstr(cmd.args[0])) {
+ case let e: parse::error =>
+ fmt::fatal(parse::strerror(e));
+ case let id: ast::ident =>
+ yield id;
+ };
defer ast::ident_free(id);
let list = list_symbols(ctx, id);
@@ -33,12 +39,22 @@ fn list (cmd: getopt::command, ctx: *module::context) void = {
fn list_symbols (ctx: *module::context, id: ast::ident) []ast::ident = {
- let (path, src) = module::find(ctx, id)!;
+ let (path, src) = match(module::find(ctx, id)){
+ case let e: module::error =>
+ fmt::fatal(module::strerror(e));
+ case let res: (str, module::srcset) =>
+ yield res;
+ };
let res: []ast::ident = [];
for (let s .. src.ha) {
- let decls = scan(s)!;
+ let decls = match (scan(s)) {
+ case let e: parse::error =>
+ fmt::fatal(parse::strerror(e));
+ case let d: []ast::decl =>
+ yield d;
+ };
defer decls_finish(decls);
for (let d .. decls) {
diff --git a/cmd/harehelper/locate.ha b/cmd/harehelper/locate.ha
@@ -82,7 +82,12 @@ fn locate_symbol (
id = ident_last(id);
for (let s .. src.ha) {
- let decls = scan(s)!;
+ let decls = match (scan(s)) {
+ case let e: parse::error =>
+ fmt::fatal(parse::strerror(e));
+ case let d: []ast::decl =>
+ yield d;
+ };
defer decls_finish(decls);
for (let decl .. decls) {