diff libinterp/octave-value/ov-fcn.h @ 15954:46ca8488de92 classdef

Re-engineer tree_expression postfix handling to make it more flexible. * libinterp/octave-value/ov-fcn.h (octave_function::is_postfix_index_handled): New method. * libinterp/parse-tree/oct-parse.yy (make_index_expression, make_indirect_ref): Set expression postfix index type. * libinterp/parse-tree/pt-exp.h (tree_expression::postfix_index): Remove field. (tree_expression::postfix_index_type): New field. (tree_expression::tree_expression): Initialize it. (tree_expression::copy_base): Copy it. (tree_expression::set_postfix_index, tree_expression::postfix_index): New methods. (tree_expression::mark_postfix_indexed): Remove method. (tree_expression::is_postfix_indexed): Use postfix_index_type field. * libinterp/parse-tree/pt-id.cc (tree_identifier::rvalue): Let the function object determine whether it can handle the first postfix index and call do_multi_index_op if it can't.
author Michael Goffioul <michael.goffioul@gmail.com>
date Tue, 15 Jan 2013 17:01:10 -0500
parents 5e5705b3e505
children 856cb7cba231
line wrap: on
line diff
--- a/libinterp/octave-value/ov-fcn.h	Tue Jan 15 14:50:43 2013 -0500
+++ b/libinterp/octave-value/ov-fcn.h	Tue Jan 15 17:01:10 2013 -0500
@@ -152,6 +152,9 @@
 
   virtual void accept (tree_walker&) { }
 
+  virtual bool is_postfix_index_handled (char type) const
+    { return (type == '(' || type == '{'); }
+
 protected:
 
   octave_function (const std::string& nm,