Mercurial > octave
diff libinterp/parse-tree/parse.h @ 23655:bbcc1e08aaed
improve colon expression construction and avoid possible memory leak
Don't allow errors to be thrown during colon expression construction.
* pt-colon.h, pt-colon.cc (tree_colon_expression::tree_colon_expression):
Construct either two- or three-element expressions.
(tree_colon_expression::append): Delete.
(tree_colon_expression::line, tree_colon_expression::colum): Delete.
* parse.h, oct-parse.in.yy (base_parser::make_colon_expression):
New function.
(base_parser::finish_colon_expression): Delete.
(colon_expr1): Delete non-terminal
(tree_colon_expression_type): Delete.
(colon_expr): Construct two- or three-element expressions only.
(simple_expr): Handle single oper_expr separately here.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 20 Jun 2017 10:25:54 -0400 |
parents | da89ce0d49eb |
children | 1d1ce4df5255 |
line wrap: on
line diff
--- a/libinterp/parse-tree/parse.h Tue Jun 20 09:28:48 2017 -0400 +++ b/libinterp/parse-tree/parse.h Tue Jun 20 10:25:54 2017 -0400 @@ -169,9 +169,6 @@ // Maybe print a warning about switch labels that aren't constants. void maybe_warn_variable_switch_label (tree_expression *expr); - // Finish building a range. - tree_expression * finish_colon_expression (tree_colon_expression *e); - // Build a constant. tree_constant * make_constant (int op, token *tok_val); @@ -183,6 +180,11 @@ make_anon_fcn_handle (tree_parameter_list *param_list, tree_expression * expr); + // Build a colon expression. + tree_expression * + make_colon_expression (tree_expression *base, tree_expression *limit, + tree_expression *incr = nullptr); + // Build a binary expression. tree_expression * make_binary_op (int op, tree_expression *op1, token *tok_val,