annotate libinterp/parse-tree/pt-tm-const.cc @ 24846:7620f1f5290d

use m_ prefix for member variables in parse tree classes * pt-arg-list.cc, pt-arg-list.h, pt-assign.cc, pt-assign.h, pt-binop.cc, pt-binop.h, pt-bp.cc, pt-bp.h, pt-cbinop.cc, pt-cbinop.h, pt-check.cc, pt-check.h, pt-classdef.cc, pt-classdef.h, pt-cmd.h, pt-colon.cc, pt-colon.h, pt-const.cc, pt-const.h, pt-decl.cc, pt-decl.h, pt-except.cc, pt-except.h, pt-fcn-handle.cc, pt-fcn-handle.h, pt-funcall.cc, pt-funcall.h, pt-id.cc, pt-id.h, pt-idx.cc, pt-idx.h, pt-jit.cc, pt-jit.h, pt-loop.cc, pt-loop.h, pt-misc.h, pt-pr-code.cc, pt-pr-code.h, pt-select.cc, pt-select.h, pt-stmt.cc, pt-stmt.h, pt-tm-const.cc, pt-tm-const.h, pt.cc, pt.h: Use m_ prefix for member variables in parse tree classes. Style fixes.
author John W. Eaton <jwe@octave.org>
date Wed, 07 Mar 2018 14:56:03 -0500
parents 194eb4bd202b
children 6652d3823428
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1 /*
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3 Copyright (C) 1996-2017 John W. Eaton
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5 This file is part of Octave.
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24339
diff changeset
7 Octave is free software: you can redistribute it and/or modify it
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24339
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
10 (at your option) any later version.
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
11
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
13 WITHOUT ANY WARRANTY; without even the implied warranty of
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
15 GNU General Public License for more details.
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
16
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24339
diff changeset
19 <https://www.gnu.org/licenses/>.
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
20
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
21 */
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
22
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
23 #if defined (HAVE_CONFIG_H)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
24 # include "config.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25 #endif
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27 #include <iostream>
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29 #include "oct-locbuf.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30 #include "quit.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
31
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 #include "data.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33 #include "defun.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34 #include "error.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 #include "errwarn.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 #include "oct-map.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37 #include "ovl.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 #include "pt-arg-list.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39 #include "pt-bp.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
40 #include "pt-eval.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
41 #include "pt-exp.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
42 #include "pt-mat.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
43 #include "pt-tm-const.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
44 #include "utils.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
45 #include "ov.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
46 #include "variables.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
47
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
48 #include "ov-cx-mat.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
49 #include "ov-flt-cx-mat.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
50 #include "ov-re-sparse.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51 #include "ov-cx-sparse.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
52
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
53 OCTAVE_NORETURN static
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
54 void
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
55 eval_error (const char *msg, const dim_vector& x, const dim_vector& y)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
56 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
57 error ("%s (%s vs %s)", msg, x.str ().c_str (), y.str ().c_str ());
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
58 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
59
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
60 namespace octave
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
61 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
62 void
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
63 tm_row_const::tm_row_const_rep::do_init_element (const octave_value& val,
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
64 bool& first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
65 {
23829
01899bdd2a3a Eliminate unnecessary std::string ("...") constructor calls when "..." suffices.
Rik <rik@octave.org>
parents: 23696
diff changeset
66 std::string this_elt_class_nm = val.isobject () ? "class"
01899bdd2a3a Eliminate unnecessary std::string ("...") constructor calls when "..." suffices.
Rik <rik@octave.org>
parents: 23696
diff changeset
67 : val.class_name ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
68
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
69 m_class_nm = get_concat_class (m_class_nm, this_elt_class_nm);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
70
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
71 dim_vector this_elt_dv = val.dims ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
72
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
73 if (! this_elt_dv.zero_by_zero ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
74 {
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
75 m_all_mt = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
76
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
77 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
78 {
23584
7ed6b258db91 maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents: 23583
diff changeset
79 if (val.isstruct ())
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
80 m_first_elem_is_struct = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
81
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
82 first_elem = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
83 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
84 }
23576
00e518162fda maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents: 23515
diff changeset
85 else if (val.iscell ())
23515
4d7928872999 Fix concatenation of a struct with an empty cell array (bug #39041)
Mike Miller <mtmiller@octave.org>
parents: 23435
diff changeset
86 first_elem = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
87
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
88 append (val);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
89
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
90 if (m_all_str && ! val.is_string ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
91 m_all_str = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
92
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
93 if (m_all_sq_str && ! val.is_sq_string ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
94 m_all_sq_str = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
95
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
96 if (m_all_dq_str && ! val.is_dq_string ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
97 m_all_dq_str = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
98
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
99 if (! m_some_str && val.is_string ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
100 m_some_str = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
101
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
102 if (m_all_real && ! val.isreal ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
103 m_all_real = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
104
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
105 if (m_all_cmplx && ! (val.iscomplex () || val.isreal ()))
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
106 m_all_cmplx = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
107
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
108 if (! m_any_cell && val.iscell ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
109 m_any_cell = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
110
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
111 if (! m_any_sparse && val.issparse ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
112 m_any_sparse = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
113
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
114 if (! m_any_class && val.isobject ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
115 m_any_class = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
116
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117 // Special treatment of sparse matrices to avoid out-of-memory error
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
118 m_all_1x1 = m_all_1x1 && ! val.issparse () && val.numel () == 1;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
119 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
120
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
121 void
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
122 tm_row_const::tm_row_const_rep::init (const tree_argument_list& row,
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
123 tree_evaluator *tw)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
124 {
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
125 m_all_str = true;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
126 m_all_sq_str = true;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
127 m_all_dq_str = true;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
128 m_all_real = true;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
129 m_all_cmplx = true;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
130 m_any_cell = false;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
131 m_any_sparse = false;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
132 m_any_class = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
133
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
134 bool first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
135
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
136 for (tree_expression* elt : row)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
137 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
138 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
139
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
140 octave_value tmp = tw->evaluate (elt);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
141
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
142 if (tmp.is_undefined ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
143 {
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
144 m_ok = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
145 return;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
146 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
147 else
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
148 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
149 if (tmp.is_cs_list ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
150 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
151 octave_value_list tlst = tmp.list_value ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
152
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
153 for (octave_idx_type i = 0; i < tlst.length (); i++)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
154 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
155 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
156
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
157 do_init_element (tlst(i), first_elem);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
158 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
159 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
160 else
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
161 do_init_element (tmp, first_elem);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
162 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
163 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
164
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
165 if (m_any_cell && ! m_any_class && ! m_first_elem_is_struct)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
166 cellify ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
167
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
168 first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
169
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
170 for (const octave_value& val : *this)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
171 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
172 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
173
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
174 dim_vector this_elt_dv = val.dims ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
175
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
176 if (! this_elt_dv.zero_by_zero ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
177 {
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
178 m_all_mt = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
179
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
180 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
181 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
182 first_elem = false;
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
183 m_dv = this_elt_dv;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
184 }
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
185 else if ((! m_any_class) && (! m_dv.hvcat (this_elt_dv, 1)))
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
186 eval_error ("horizontal dimensions mismatch", m_dv, this_elt_dv);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
187 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
188 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
189
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
190 m_ok = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
191 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
192
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
193 void
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
194 tm_row_const::tm_row_const_rep::cellify (void)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
195 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
196 bool elt_changed = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
197
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
198 for (auto& elt : *this)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
199 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
200 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
201
23576
00e518162fda maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents: 23515
diff changeset
202 if (! elt.iscell ())
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
203 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
204 elt_changed = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
205
23577
80c42f4cca13 maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents: 23576
diff changeset
206 if (elt.isempty ())
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
207 elt = Cell ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
208 else
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
209 elt = Cell (elt);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
210 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
211 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
212
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
213 if (elt_changed)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
214 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
215 bool first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
216
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
217 for (const octave_value& val : *this)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
218 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
219 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
220
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
221 dim_vector this_elt_dv = val.dims ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
222
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
223 if (! this_elt_dv.zero_by_zero ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
224 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
225 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
226 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
227 first_elem = false;
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
228 m_dv = this_elt_dv;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
229 }
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
230 else if (! m_dv.hvcat (this_elt_dv, 1))
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
231 eval_error ("horizontal dimensions mismatch", m_dv, this_elt_dv);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
232 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
233 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
234 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
235 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
236
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
237 void
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
238 tm_const::init (const tree_matrix& tm, tree_evaluator *tw)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
239 {
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
240 m_all_str = true;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
241 m_all_sq_str = true;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
242 m_all_dq_str = true;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
243 m_all_real = true;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
244 m_all_cmplx = true;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
245 m_any_cell = false;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
246 m_any_sparse = false;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
247 m_any_class = false;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
248 m_all_1x1 = ! tm.empty ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
249
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
250 bool first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
251 bool first_elem_is_struct = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
252
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
253 // Just eval and figure out if what we have is complex or all strings.
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
254 // We can't check columns until we know that this is a numeric matrix --
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
255 // collections of strings can have elements of different lengths.
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
256 for (const tree_argument_list* elt : tm)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
257 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
258 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
259
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
260 tm_row_const tmp (*elt, tw);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
261
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
262 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
263 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
264 first_elem_is_struct = tmp.first_elem_struct_p ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
265
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
266 first_elem = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
267 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
268
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
269 if (tmp && ! tmp.empty ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
270 {
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
271 if (m_all_str && ! tmp.all_strings_p ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
272 m_all_str = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
273
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
274 if (m_all_sq_str && ! tmp.all_sq_strings_p ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
275 m_all_sq_str = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
276
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
277 if (m_all_dq_str && ! tmp.all_dq_strings_p ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
278 m_all_dq_str = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
279
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
280 if (! m_some_str && tmp.some_strings_p ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
281 m_some_str = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
282
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
283 if (m_all_real && ! tmp.all_real_p ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
284 m_all_real = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
285
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
286 if (m_all_cmplx && ! tmp.all_complex_p ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
287 m_all_cmplx = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
288
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
289 if (m_all_mt && ! tmp.all_empty_p ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
290 m_all_mt = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
291
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
292 if (! m_any_cell && tmp.any_cell_p ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
293 m_any_cell = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
294
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
295 if (! m_any_sparse && tmp.any_sparse_p ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
296 m_any_sparse = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
297
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
298 if (! m_any_class && tmp.any_class_p ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
299 m_any_class = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
300
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
301 m_all_1x1 = m_all_1x1 && tmp.all_1x1_p ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
302
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
303 append (tmp);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
304 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
305 else
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
306 break;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
307 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
308
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
309 if (m_any_cell && ! m_any_class && ! first_elem_is_struct)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
310 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
311 for (auto& elt : *this)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
312 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
313 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
314
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
315 elt.cellify ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
316 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
317 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
318
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
319 first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
320
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
321 for (tm_row_const& elt : *this)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
322 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
323 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
324
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
325 octave_idx_type this_elt_nr = elt.rows ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
326 octave_idx_type this_elt_nc = elt.cols ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
327
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
328 std::string this_elt_class_nm = elt.class_name ();
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
329 m_class_nm = get_concat_class (m_class_nm, this_elt_class_nm);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
330
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
331 dim_vector this_elt_dv = elt.dims ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
332
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
333 m_all_mt = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
334
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
335 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
336 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
337 first_elem = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
338
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
339 m_dv = this_elt_dv;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
340 }
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
341 else if (m_all_str && m_dv.ndims () == 2
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
342 && this_elt_dv.ndims () == 2)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
343 {
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
344 // This is Octave's specialty.
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
345 // Character matrices support rows of unequal length.
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
346 if (m_dv.any_zero ())
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
347 {
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
348 // Empty existing element (bug #52542).
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
349 // Replace empty element with non-empty one.
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
350 m_dv = this_elt_dv;
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
351 }
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
352 else
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
353 {
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
354 if (this_elt_nc > cols ())
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
355 m_dv(1) = this_elt_nc;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
356 m_dv(0) += this_elt_nr;
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
357 }
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
358 }
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
359 else if ((! m_any_class) && (! m_dv.hvcat (this_elt_dv, 0)))
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
360 eval_error ("vertical dimensions mismatch", m_dv, this_elt_dv);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
361 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
362
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
363 m_ok = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
364 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
365
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
366 template <>
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
367 octave_value
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
368 do_single_type_concat<octave_map> (const dim_vector& dv,
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23587
diff changeset
369 tm_const& tmp)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
370 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
371 octave_map result;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
372
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
373 if (tmp.all_1x1_p ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
374 single_type_concat<octave_scalar_map> (result, dv, tmp);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
375 else
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
376 single_type_concat<octave_map> (result, dv, tmp);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
377
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
378 return result;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
379 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
380
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23587
diff changeset
381 octave_value do_class_concat (tm_const& tmc)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
382 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
383 octave_value retval;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
384
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
385 octave_value_list rows (tmc.length (), octave_value ());
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
386
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
387 octave_idx_type j = 0;
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23587
diff changeset
388 for (tm_row_const& tmrc : tmc)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
389 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
390 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
391
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
392 if (tmrc.length () == 1)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
393 rows(j++) = *(tmrc.begin ());
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
394 else
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
395 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
396 octave_value_list row (tmrc.length (), octave_value ());
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
397
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
398 octave_idx_type i = 0;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
399 for (auto& elt : tmrc)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
400 row(i++) = elt;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
401
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
402 rows(j++) = do_class_concat (row, "horzcat", 1);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
403 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
404 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
405
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
406 if (rows.length () == 1)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
407 retval = rows(0);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
408 else
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
409 retval = do_class_concat (rows, "vertcat", 0);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
410
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
411 return retval;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
412 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
413 }