From 57569d23ebb0ba8bf54a5e646b6757c1941cfce2 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 8 Jul 2017 11:01:34 +0100 Subject: Support reporting deep error messages more cleanly --- lib/lace/builtin.lua | 3 ++- test/test-lace.compile-deeperror1.rules | 3 +++ test/test-lace.compile-deeperror2.rules | 3 +++ test/test-lace.compile-deeperror3.rules | 4 ++++ test/test-lace.compiler.lua | 19 +++++++++++++++++++ 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 test/test-lace.compile-deeperror1.rules create mode 100644 test/test-lace.compile-deeperror2.rules create mode 100644 test/test-lace.compile-deeperror3.rules diff --git a/lib/lace/builtin.lua b/lib/lace/builtin.lua index dfa4c04..f68fcd7 100644 --- a/lib/lace/builtin.lua +++ b/lib/lace/builtin.lua @@ -440,7 +440,8 @@ function builtin.include(comp_context, cmd, file, ...) -- Okay, the file is present, let's parse it. local ruleset, msg = compiler().internal_compile(comp_context, real, content, true) if type(ruleset) ~= "table" then - return false, msg + -- Propagation of the error means rendering and taking ownership... + return err.error(err.render(msg) .. "\nwhile including " .. file, {2}) end -- Okay, we parsed, so build the runtime diff --git a/test/test-lace.compile-deeperror1.rules b/test/test-lace.compile-deeperror1.rules new file mode 100644 index 0000000..9db09a1 --- /dev/null +++ b/test/test-lace.compile-deeperror1.rules @@ -0,0 +1,3 @@ +# Deep Error testing, rules file 1 + +include deeperror2 diff --git a/test/test-lace.compile-deeperror2.rules b/test/test-lace.compile-deeperror2.rules new file mode 100644 index 0000000..31024d0 --- /dev/null +++ b/test/test-lace.compile-deeperror2.rules @@ -0,0 +1,3 @@ +# Deep Error testing, rules file 2 + +include deeperror3 diff --git a/test/test-lace.compile-deeperror3.rules b/test/test-lace.compile-deeperror3.rules new file mode 100644 index 0000000..f47a365 --- /dev/null +++ b/test/test-lace.compile-deeperror3.rules @@ -0,0 +1,4 @@ +# Deep Error testing, rules file 3 + +define something broken + diff --git a/test/test-lace.compiler.lua b/test/test-lace.compiler.lua index cca4fb8..b660c77 100644 --- a/test/test-lace.compiler.lua +++ b/test/test-lace.compiler.lua @@ -427,6 +427,25 @@ function suite.okay_negated_subdefine() assert(result, msg) end +function suite.deep_errors_report_well() + local result, msg = compiler.compile(comp_context, "deeperror1") + local expected_err = [[ +define's second parameter (broken) must be a control type such as anyof +real-deeperror3 :: 3 +define something broken + ^^^^^^ +while including deeperror3 +real-deeperror2 :: 3 +include deeperror3 + ^^^^^^^^^^ +while including deeperror2 +real-deeperror1 :: 3 +include deeperror2 + ^^^^^^^^^^]] + assert(not result, "Err, didn't want the compilation to succeed") + assert(msg == expected_err, "Error message did not match") +end + local count_ok = 0 for _, testname in ipairs(testnames) do -- print("Run: " .. testname) -- cgit v1.2.1