diff libinterp/parse-tree/pt-colon.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 be7b884ac589
children 980f39c3ab90
line wrap: on
line diff
--- a/libinterp/parse-tree/pt-colon.h	Tue Jun 20 09:28:48 2017 -0400
+++ b/libinterp/parse-tree/pt-colon.h	Tue Jun 20 10:25:54 2017 -0400
@@ -46,8 +46,9 @@
       : tree_expression (l, c), op_base (0), op_limit (0),
         op_increment (0), save_base (false) { }
 
-    tree_colon_expression (tree_expression *e, int l = -1, int c = -1)
-      : tree_expression (l, c), op_base (e), op_limit (0),
+    tree_colon_expression (tree_expression *bas, tree_expression *lim,
+                           int l = -1, int c = -1)
+      : tree_expression (l, c), op_base (bas), op_limit (lim),
         op_increment (0), save_base (false) { }
 
     tree_colon_expression (tree_expression *bas, tree_expression *lim,
@@ -79,8 +80,6 @@
 
     void preserve_base (void) { save_base = true; }
 
-    tree_colon_expression * append (tree_expression *t);
-
     bool rvalue_ok (void) const { return true; }
 
     void eval_error (const std::string& s) const;
@@ -91,9 +90,6 @@
 
     tree_expression * increment (void) { return op_increment; }
 
-    int line (void) const;
-    int column (void) const;
-
     tree_expression * dup (symbol_table::scope& scope) const;
 
     void accept (tree_walker& tw)