comparison src/pt-arg-list.cc @ 4671:7a80bb43ea63

[project @ 2003-11-28 02:50:12 by jwe]
author jwe
date Fri, 28 Nov 2003 02:50:12 +0000
parents ff7187bd3075
children ff29117ce225
comparison
equal deleted inserted replaced
4670:4ad69c3588a9 4671:7a80bb43ea63
121 { 121 {
122 octave_value retval; 122 octave_value retval;
123 123
124 if (indexed_object) 124 if (indexed_object)
125 { 125 {
126 dim_vector dv = indexed_object->dims ();
127
126 switch (index_position) 128 switch (index_position)
127 { 129 {
128 case -1: 130 case -1:
129 // XXX FIXME XXX -- we really want "numel" here.
130 { 131 {
131 int nr = indexed_object->rows (); 132 int numel = indexed_object->numel ();
132 int nc = indexed_object->columns (); 133
133 134 if (numel < 0)
134 if (nr < 0 || nc < 0) 135 {
135 ::error ("invalid use of end: (nr=%d, nc=%d)", nr, nc); 136 std::string dv_str = dv.str ();
137 ::error ("invalid use of end: (index 1, dims %s)",
138 dv_str.c_str ());
139 }
136 else 140 else
137 retval = nr * nc; 141 retval = numel;
138 } 142 }
139 break; 143 break;
140 144
141 case 0: 145 default:
142 { 146 {
143 int nr = indexed_object->rows (); 147
144 148 if (index_position < dv.length ())
145 if (nr < 0) 149 retval = dv(index_position);
146 ::error ("invalid use of end: (nr=%d)", nr);
147 else 150 else
148 retval = nr; 151 {
152 std::string dv_str = dv.str ();
153 ::error ("invalid use of end: (index %d, dims %s)",
154 index_position+1, dv_str.c_str ());
155 }
149 } 156 }
150 break;
151
152 case 1:
153 {
154 int nc = indexed_object->columns ();
155
156 if (nc < 0)
157 ::error ("invalid use of end: (nc=%d)", nc);
158 else
159 retval = nc;
160 }
161 break;
162
163 default:
164 ::error ("__end__: internal error");
165 break; 157 break;
166 } 158 }
167 } 159 }
168 else 160 else
169 ::error ("invalid use of end"); 161 ::error ("invalid use of end");