diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2016-02-28 00:44:20 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2016-02-28 00:44:20 -0800 |
commit | 3633c51ad8aee79add7727457c998c42a1638f72 (patch) | |
tree | 79f762b29062e13f95648ffb0a7833949da64af1 /src/parse_util.cpp | |
parent | e3970f9cbbd00289c551f947db0f4644654bd8d9 (diff) |
Re-use the parse tree generated during error detection for execution
Prior to this fix, read_ni would use parse_util_detect_errors
to lint the script to run, and then parser_t::eval() to execute it.
Both functions would parse the script into a parse tree. This allows
us to re-use the parse tree, improving perfomance.
Diffstat (limited to 'src/parse_util.cpp')
-rw-r--r-- | src/parse_util.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/parse_util.cpp b/src/parse_util.cpp index a528c898..628e86c5 100644 --- a/src/parse_util.cpp +++ b/src/parse_util.cpp @@ -1287,7 +1287,7 @@ parser_test_error_bits_t parse_util_detect_errors_in_argument(const parse_node_t return err; } -parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, parse_error_list_t *out_errors, bool allow_incomplete) +parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, parse_error_list_t *out_errors, bool allow_incomplete, parse_node_tree_t *out_tree) { parse_node_tree_t node_tree; parse_error_list_t parse_errors; @@ -1546,10 +1546,15 @@ parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, pars if (has_unclosed_block || has_unclosed_quote) res |= PARSER_TEST_INCOMPLETE; - if (out_errors) + if (out_errors != NULL) { out_errors->swap(parse_errors); } + + if (out_tree != NULL) + { + out_tree->swap(node_tree); + } return res; |