diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2013-06-15 15:21:35 -0700 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2013-06-15 15:21:35 -0700 |
commit | 4ca46b7883291fd78469369ce87dce451b73838b (patch) | |
tree | a547415973a0e765ae7c7257c2c690bdf3f0c3ea /builtin.cpp | |
parent | 827a9d640c97b95931280e55b8567f69985c2ff1 (diff) |
Beginning support for new parser error messages
Diffstat (limited to 'builtin.cpp')
-rw-r--r-- | builtin.cpp | 25 |
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; } |