comparison 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
comparison
equal deleted inserted replaced
15953:0bf55f5f5d10 15954:46ca8488de92
3167 } 3167 }
3168 3168
3169 int l = expr->line (); 3169 int l = expr->line ();
3170 int c = expr->column (); 3170 int c = expr->column ();
3171 3171
3172 expr->mark_postfix_indexed (); 3172 if (! expr->is_postfix_indexed ())
3173 expr->set_postfix_index (type);
3173 3174
3174 if (expr->is_index_expression ()) 3175 if (expr->is_index_expression ())
3175 { 3176 {
3176 tree_index_expression *tmp = static_cast<tree_index_expression *> (expr); 3177 tree_index_expression *tmp = static_cast<tree_index_expression *> (expr);
3177 3178
3193 tree_index_expression *retval = 0; 3194 tree_index_expression *retval = 0;
3194 3195
3195 int l = expr->line (); 3196 int l = expr->line ();
3196 int c = expr->column (); 3197 int c = expr->column ();
3197 3198
3199 if (! expr->is_postfix_indexed ())
3200 expr->set_postfix_index ('.');
3201
3198 if (expr->is_index_expression ()) 3202 if (expr->is_index_expression ())
3199 { 3203 {
3200 tree_index_expression *tmp = static_cast<tree_index_expression *> (expr); 3204 tree_index_expression *tmp = static_cast<tree_index_expression *> (expr);
3201 3205
3202 tmp->append (elt); 3206 tmp->append (elt);
3218 { 3222 {
3219 tree_index_expression *retval = 0; 3223 tree_index_expression *retval = 0;
3220 3224
3221 int l = expr->line (); 3225 int l = expr->line ();
3222 int c = expr->column (); 3226 int c = expr->column ();
3227
3228 if (! expr->is_postfix_indexed ())
3229 expr->set_postfix_index ('.');
3223 3230
3224 if (expr->is_index_expression ()) 3231 if (expr->is_index_expression ())
3225 { 3232 {
3226 tree_index_expression *tmp = static_cast<tree_index_expression *> (expr); 3233 tree_index_expression *tmp = static_cast<tree_index_expression *> (expr);
3227 3234