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,