Mercurial > octave-dspies
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 |