From c39d369dbc54bd7d6ae81db3407b88f76b2c9b12 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 20 Jul 2025 00:31:16 -0500 Subject: [PATCH] xo-reader: ++ typename error reporting --- .../include/xo/reader/expect_type_xs.hpp | 2 ++ xo-reader/src/reader/expect_type_xs.cpp | 21 +++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/xo-reader/include/xo/reader/expect_type_xs.hpp b/xo-reader/include/xo/reader/expect_type_xs.hpp index 1a388f54..28fea322 100644 --- a/xo-reader/include/xo/reader/expect_type_xs.hpp +++ b/xo-reader/include/xo/reader/expect_type_xs.hpp @@ -18,6 +18,8 @@ namespace xo { static void start(parserstatemachine * p_stack); + virtual const char * get_expect_str() const override; + virtual void on_symbol_token(const token_type & tk, parserstatemachine * p_psm) override; diff --git a/xo-reader/src/reader/expect_type_xs.cpp b/xo-reader/src/reader/expect_type_xs.cpp index d994257e..430a7004 100644 --- a/xo-reader/src/reader/expect_type_xs.cpp +++ b/xo-reader/src/reader/expect_type_xs.cpp @@ -27,6 +27,12 @@ namespace xo { : exprstate(exprstatetype::expect_type) {} + const char * + expect_type_xs::get_expect_str() const + { + return "typename"; + } + void expect_type_xs::on_symbol_token(const token_type & tk, parserstatemachine * p_psm) @@ -49,11 +55,15 @@ namespace xo { td = Reflect::require(); if (!td) { - throw std::runtime_error - (tostr(c_self_name, - ": unknown type name", - " (expecting f64|f32|i16|i32|i64)", - xtag("typename", tk.text()))); + const char * exp = get_expect_str(); + + std::string errmsg = tostr("unexpected token for parsing state", + xtag("expecting", exp), + xtag("token", tk.tk_type()), + xtag("text", tk.text()), + xtag("state", this->exs_type())); + + p_psm->on_error(c_self_name, std::move(errmsg)); } std::unique_ptr self = p_psm->pop_exprstate(); @@ -62,5 +72,4 @@ namespace xo { } /*namespace scm*/ } /*namespace xo*/ - /* end expect_type_xs.cpp */