Mercurial > hg > octave-avbm
diff libinterp/parse-tree/oct-parse.yy @ 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 | ce8ad12ce8a0 |
children | 0259254a3ccc |
line wrap: on
line diff
--- a/libinterp/parse-tree/oct-parse.yy +++ b/libinterp/parse-tree/oct-parse.yy @@ -3169,7 +3169,8 @@ int l = expr->line (); int c = expr->column (); - expr->mark_postfix_indexed (); + if (! expr->is_postfix_indexed ()) + expr->set_postfix_index (type); if (expr->is_index_expression ()) { @@ -3195,6 +3196,9 @@ int l = expr->line (); int c = expr->column (); + if (! expr->is_postfix_indexed ()) + expr->set_postfix_index ('.'); + if (expr->is_index_expression ()) { tree_index_expression *tmp = static_cast<tree_index_expression *> (expr); @@ -3221,6 +3225,9 @@ int l = expr->line (); int c = expr->column (); + if (! expr->is_postfix_indexed ()) + expr->set_postfix_index ('.'); + if (expr->is_index_expression ()) { tree_index_expression *tmp = static_cast<tree_index_expression *> (expr);