comparison libinterp/interp-core/oct-lvalue.cc @ 15195:2fc554ffbc28

split libinterp from src * libinterp: New directory. Move all files from src directory here except Makefile.am, main.cc, main-cli.cc, mkoctfile.in.cc, mkoctfilr.in.sh, octave-config.in.cc, octave-config.in.sh. * libinterp/Makefile.am: New file, extracted from src/Makefile.am. * src/Makefile.am: Delete everything except targets and definitions needed to build and link main and utility programs. * Makefile.am (SUBDIRS): Include libinterp in the list. * autogen.sh: Run config-module.sh in libinterp/dldfcn directory, not src/dldfcn directory. * configure.ac (AC_CONFIG_SRCDIR): Use libinterp/octave.cc, not src/octave.cc. (DL_LDFLAGS, LIBOCTINTERP): Use libinterp, not src. (AC_CONFIG_FILES): Include libinterp/Makefile in the list. * find-docstring-files.sh: Look in libinterp, not src. * gui/src/Makefile.am (liboctgui_la_CPPFLAGS): Find header files in libinterp, not src.
author John W. Eaton <jwe@octave.org>
date Sat, 18 Aug 2012 16:23:39 -0400
parents src/interp-core/oct-lvalue.cc@909a2797935b
children 302157614308
comparison
equal deleted inserted replaced
15194:0f0b795044c3 15195:2fc554ffbc28
1 /*
2
3 Copyright (C) 1996-2012 John W. Eaton
4
5 This file is part of Octave.
6
7 Octave is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20
21 */
22
23 #ifdef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
26
27 #include "error.h"
28 #include "oct-obj.h"
29 #include "oct-lvalue.h"
30 #include "ov.h"
31
32 void
33 octave_lvalue::assign (octave_value::assign_op op, const octave_value& rhs)
34 {
35 if (val)
36 {
37 if (idx.empty ())
38 val->assign (op, rhs);
39 else
40 val->assign (op, type, idx, rhs);
41 }
42 }
43
44 void
45 octave_lvalue::set_index (const std::string& t,
46 const std::list<octave_value_list>& i)
47 {
48 if (idx.empty ())
49 {
50 type = t;
51 idx = i;
52 }
53 else
54 error ("invalid index expression in assignment");
55 }
56
57 void
58 octave_lvalue::do_unary_op (octave_value::unary_op op)
59 {
60 if (val)
61 {
62 if (idx.empty ())
63 val->do_non_const_unary_op (op);
64 else
65 val->do_non_const_unary_op (op, type, idx);
66 }
67 else
68 error ("internal: invalid operation on ~");
69 }
70
71 octave_value
72 octave_lvalue::value (void)
73 {
74 octave_value retval;
75
76 if (val)
77 {
78 if (idx.empty ())
79 retval = *val;
80 else
81 {
82 if (val->is_constant ())
83 retval = val->subsref (type, idx);
84 else
85 {
86 octave_value_list t = val->subsref (type, idx, 1);
87 if (t.length () > 0)
88 retval = t(0);
89 }
90 }
91 }
92
93 return retval;
94 }