Mercurial > hg > octave-avbm
changeset 3929:cc8ae49d6e79
[project @ 2002-05-04 02:47:14 by jwe]
author | jwe |
---|---|
date | Sat, 04 May 2002 02:47:14 +0000 |
parents | e8627dc4bdf2 |
children | 61d4427c016e |
files | src/ChangeLog src/oct-lvalue.cc src/oct-lvalue.h src/parse.y src/pt-idx.cc src/pt-idx.h |
diffstat | 6 files changed, 63 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,14 @@ 2002-05-03 John W. Eaton <jwe@bevo.che.wisc.edu> + * parse.y (ABORT_PARSE): Maybe restore symbol table context too. + + * pt-idx.h (tree_index_expression::type): New enum. + (tree_index_expression::etype): New data member. + * pt-idx.h (tree_index_expression::tree_index_expression): + New arg, t, to set type of index. + * parse.y (make_index_expression): Likewise. + Change all callers. + * ov-base.cc (cell_conv): New conversion function. (install_base_type_conversions): Install it. Install conversion for indexed assignment of octave_cells to
--- a/src/oct-lvalue.cc +++ b/src/oct-lvalue.cc @@ -57,11 +57,13 @@ } void -octave_lvalue::set_index (const octave_value_list& i) +octave_lvalue::set_index (const octave_value_list& i, + tree_index_expression::type t) { if (! index_set) { idx = i; + itype = t; index_set = true; } else
--- a/src/oct-lvalue.h +++ b/src/oct-lvalue.h @@ -29,6 +29,7 @@ #include <string> #include "oct-obj.h" +#include "pt-idx.h" #include "symtab.h" // XXX FIXME XXX -- eliminate the following kluge? @@ -50,7 +51,7 @@ : val (v), idx (), chg_fcn (f), struct_elt_name (nm), index_set (false) { } octave_lvalue (const octave_lvalue& vr) - : val (vr.val), idx (vr.idx), chg_fcn (vr.chg_fcn), + : val (vr.val), idx (vr.idx), itype (vr.itype), chg_fcn (vr.chg_fcn), struct_elt_name (vr.struct_elt_name), index_set (vr.index_set) { } octave_lvalue& operator = (const octave_lvalue& vr) @@ -59,6 +60,7 @@ { val = vr.val; idx = vr.idx; + itype = vr.itype; chg_fcn = vr.chg_fcn; struct_elt_name = vr.struct_elt_name; index_set = vr.index_set; @@ -85,7 +87,9 @@ return val->struct_elt_ref (nm); } - void set_index (const octave_value_list& i); + void set_index (const octave_value_list& i, + tree_index_expression::type t + = tree_index_expression::unknown); void clear_index (void) { idx = octave_value_list (); } @@ -108,6 +112,8 @@ octave_value_list idx; + tree_index_expression::type itype; + symbol_record::change_function chg_fcn; std::string struct_elt_name;
--- a/src/parse.y +++ b/src/parse.y @@ -280,7 +280,8 @@ // Make an index expression. static tree_index_expression * -make_index_expression (tree_expression *expr, tree_argument_list *args); +make_index_expression (tree_expression *expr, tree_argument_list *args, + tree_index_expression::type); // Make an indirect reference expression. static tree_indirect_ref * @@ -311,6 +312,11 @@ { \ global_command = 0; \ yyerrok; \ + if (symtab_context) \ + { \ + curr_sym_tab = symtab_context; \ + symtab_context = 0; \ + } \ if (interactive || forced_interactive) \ YYACCEPT; \ else \ @@ -691,11 +697,25 @@ postfix_expr : primary_expr { $$ = $1; } | postfix_expr '(' ')' - { $$ = make_index_expression ($1, 0); } + { + $$ = make_index_expression ($1, 0, + tree_index_expression::paren); + } | postfix_expr '(' arg_list ')' - { $$ = make_index_expression ($1, $3); } + { + $$ = make_index_expression ($1, $3, + tree_index_expression::paren); + } + | postfix_expr '{' '}' + { + $$ = make_index_expression ($1, 0, + tree_index_expression::brace); + } | postfix_expr '{' arg_list '}' - { $$ = make_index_expression ($1, $3); } + { + $$ = make_index_expression ($1, $3, + tree_index_expression::brace); + } | postfix_expr PLUS_PLUS { $$ = make_postfix_op (PLUS_PLUS, $1, $2); } | postfix_expr MINUS_MINUS @@ -832,7 +852,10 @@ ; word_list_cmd : identifier word_list - { $$ = make_index_expression ($1, $2); } + { + $$ = make_index_expression ($1, $2, + tree_index_expression::paren); + } ; word_list : TEXT @@ -2567,7 +2590,8 @@ // Make an index expression. static tree_index_expression * -make_index_expression (tree_expression *expr, tree_argument_list *args) +make_index_expression (tree_expression *expr, tree_argument_list *args, + tree_index_expression::type t) { tree_index_expression *retval = 0; @@ -2576,7 +2600,7 @@ expr->mark_postfix_indexed (); - retval = new tree_index_expression (expr, args, l, c); + retval = new tree_index_expression (expr, args, l, c, t); return retval; }
--- a/src/pt-idx.cc +++ b/src/pt-idx.cc @@ -40,9 +40,9 @@ tree_index_expression::tree_index_expression (tree_expression *e, tree_argument_list *lst, - int l, int c) + int l, int c, type t) : tree_expression (l, c), expr (e), list (lst), - arg_nm (lst ? lst->get_arg_names () : string_vector ()) { } + itype (t), arg_nm (lst ? lst->get_arg_names () : string_vector ()) { } tree_index_expression::~tree_index_expression (void) {
--- a/src/pt-idx.h +++ b/src/pt-idx.h @@ -46,8 +46,15 @@ { public: + enum type + { + unknown, + paren, + brace + }; + tree_index_expression (tree_expression *e = 0, tree_argument_list *lst = 0, - int l = -1, int c = -1); + int l = -1, int c = -1, type t = paren); ~tree_index_expression (void); @@ -84,6 +91,8 @@ tree_argument_list *list; + type itype; + string_vector arg_nm; // No copying!