summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2017-07-08 11:01:34 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2017-07-08 11:01:34 +0100
commit57569d23ebb0ba8bf54a5e646b6757c1941cfce2 (patch)
tree949852aa83c55137ddff4d6d0a341a83a2ded64a
parent52d0418b0a71c9c9a0d16140e59f43193331208a (diff)
downloadlace-dsilvers/deep-errors.tar.gz
Support reporting deep error messages more cleanlydsilvers/deep-errors
-rw-r--r--lib/lace/builtin.lua3
-rw-r--r--test/test-lace.compile-deeperror1.rules3
-rw-r--r--test/test-lace.compile-deeperror2.rules3
-rw-r--r--test/test-lace.compile-deeperror3.rules4
-rw-r--r--test/test-lace.compiler.lua19
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)