diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2017-07-08 11:01:34 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2017-07-08 11:01:34 +0100 |
commit | 57569d23ebb0ba8bf54a5e646b6757c1941cfce2 (patch) | |
tree | 949852aa83c55137ddff4d6d0a341a83a2ded64a | |
parent | 52d0418b0a71c9c9a0d16140e59f43193331208a (diff) | |
download | lace-dsilvers/deep-errors.tar.gz |
Support reporting deep error messages more cleanlydsilvers/deep-errors
-rw-r--r-- | lib/lace/builtin.lua | 3 | ||||
-rw-r--r-- | test/test-lace.compile-deeperror1.rules | 3 | ||||
-rw-r--r-- | test/test-lace.compile-deeperror2.rules | 3 | ||||
-rw-r--r-- | test/test-lace.compile-deeperror3.rules | 4 | ||||
-rw-r--r-- | test/test-lace.compiler.lua | 19 |
5 files changed, 31 insertions, 1 deletions
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) |