Mercurial > hg > octave-lyh
diff src/pt-assign.h @ 2980:cd5ad3fd8049
[project @ 1997-05-16 01:12:13 by jwe]
author | jwe |
---|---|
date | Fri, 16 May 1997 01:13:19 +0000 |
parents | |
children | daa1ed1f5462 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/src/pt-assign.h @@ -0,0 +1,153 @@ +/* + +Copyright (C) 1996, 1997 John W. Eaton + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#if !defined (octave_tree_assign_h) +#define octave_tree_assign_h 1 + +#if defined (__GNUG__) +#pragma interface +#endif + +#include <string> + +class ostream; + +class tree_argument_list; +class tree_walker; + +class octave_value; +class octave_value_list; +class octave_lvalue; + +#include "ov.h" +#include "pt-exp.h" + +// Simple assignment expressions. + +class +tree_simple_assignment : public tree_expression +{ +public: + + tree_simple_assignment (bool plhs = false, int l = -1, int c = -1, + octave_value::assign_op t = octave_value::asn_eq) + : tree_expression (l, c), lhs (0), rhs (0), preserve (plhs), etype (t) { } + + tree_simple_assignment (tree_expression *le, tree_expression *re, + bool plhs = false, int l = -1, int c = -1, + octave_value::assign_op t = octave_value::asn_eq) + : tree_expression (l, c), lhs (le), rhs (re), preserve (plhs), + etype (t) { } + + ~tree_simple_assignment (void); + + bool rvalue_ok (void) const + { return true; } + + octave_value rvalue (void); + + octave_value_list rvalue (int nargout); + + bool is_assignment_expression (void) const + { return true; } + + void eval_error (void); + + string oper (void) const; + + tree_expression *left_hand_side (void) { return lhs; } + + tree_expression *right_hand_side (void) { return rhs; } + + void accept (tree_walker& tw); + +private: + + void do_assign (octave_lvalue& ult, const octave_value_list& args, + const octave_value& rhs_val); + + void do_assign (octave_lvalue& ult, const octave_value& rhs_val); + + // The left hand side of the assignment. + tree_expression *lhs; + + // The right hand side of the assignment. + tree_expression *rhs; + + // True if we should not delete the lhs. + bool preserve; + + // True if this is an assignment to the built-in variable ans. + bool ans_ass; + + // The type of the expression. + octave_value::assign_op etype; +}; + +// Multi-valued assignment expressions. + +class +tree_multi_assignment : public tree_expression +{ +public: + + tree_multi_assignment (bool plhs = false, int l = -1, int c = -1) + : tree_expression (l, c), preserve (plhs), lhs (0), rhs (0) { } + + tree_multi_assignment (tree_argument_list *lst, tree_expression *r, + bool plhs = false, int l = -1, int c = -1) + : tree_expression (l, c), preserve (plhs), lhs (lst), rhs (r) { } + + ~tree_multi_assignment (void); + + bool is_assignment_expression (void) const + { return true; } + + bool rvalue_ok (void) const + { return true; } + + octave_value rvalue (void); + + octave_value_list rvalue (int nargout); + + void eval_error (void); + + tree_argument_list *left_hand_side (void) { return lhs; } + + tree_expression *right_hand_side (void) { return rhs; } + + void accept (tree_walker& tw); + +private: + + bool preserve; + tree_argument_list *lhs; + tree_expression *rhs; +}; + +#endif + +/* +;;; Local Variables: *** +;;; mode: C++ *** +;;; End: *** +*/