aboutsummaryrefslogtreecommitdiffhomepage
path: root/builtin.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-06-15 15:21:35 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-06-15 15:21:35 -0700
commit4ca46b7883291fd78469369ce87dce451b73838b (patch)
treea547415973a0e765ae7c7257c2c690bdf3f0c3ea /builtin.cpp
parent827a9d640c97b95931280e55b8567f69985c2ff1 (diff)
Beginning support for new parser error messages
Diffstat (limited to 'builtin.cpp')
-rw-r--r--builtin.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/builtin.cpp b/builtin.cpp
index 12b331b8..fe09f4f6 100644
--- a/builtin.cpp
+++ b/builtin.cpp
@@ -3954,13 +3954,26 @@ int builtin_parse(parser_t &parser, wchar_t **argv)
{
const wcstring src = str2wcstring(&txt.at(0), txt.size());
parse_node_tree_t parse_tree;
+ parse_error_list_t errors;
parse_t parser;
- parser.parse(src, &parse_tree);
- parse_execution_context_t ctx(parse_tree, src);
- stdout_buffer.append(L"Simulating execution:");
- wcstring simulation = ctx.simulate();
- stdout_buffer.append(simulation);
- stdout_buffer.push_back(L'\n');
+ bool success = parser.parse(src, &parse_tree, &errors);
+ if (! success)
+ {
+ stdout_buffer.append(L"Parsing failed:\n");
+ for (size_t i=0; i < errors.size(); i++)
+ {
+ stdout_buffer.append(errors.at(i).describe(src));
+ stdout_buffer.push_back(L'\n');
+ }
+ }
+ else
+ {
+ parse_execution_context_t ctx(parse_tree, src);
+ stdout_buffer.append(L"Simulating execution:\n");
+ wcstring simulation = ctx.simulate();
+ stdout_buffer.append(simulation);
+ stdout_buffer.push_back(L'\n');
+ }
}
return STATUS_BUILTIN_OK;
}