aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/parse_util.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2016-02-28 00:44:20 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2016-02-28 00:44:20 -0800
commit3633c51ad8aee79add7727457c998c42a1638f72 (patch)
tree79f762b29062e13f95648ffb0a7833949da64af1 /src/parse_util.cpp
parente3970f9cbbd00289c551f947db0f4644654bd8d9 (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.cpp9
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;