comparison libinterp/octave-value/cdef-property.cc @ 31607:aac27ad79be6 stable

maint: Re-indent code after switch to using namespace macros. * build-env.h, build-env.in.cc, Cell.h, __betainc__.cc, __eigs__.cc, __ftp__.cc, __ichol__.cc, __ilu__.cc, __isprimelarge__.cc, __magick_read__.cc, __pchip_deriv__.cc, amd.cc, base-text-renderer.cc, base-text-renderer.h, besselj.cc, bitfcns.cc, bsxfun.cc, c-file-ptr-stream.h, call-stack.cc, call-stack.h, ccolamd.cc, cellfun.cc, chol.cc, colamd.cc, dasrt.cc, data.cc, debug.cc, defaults.cc, defaults.h, det.cc, display.cc, display.h, dlmread.cc, dynamic-ld.cc, dynamic-ld.h, ellipj.cc, environment.cc, environment.h, error.cc, error.h, errwarn.h, event-manager.cc, event-manager.h, event-queue.cc, event-queue.h, fcn-info.cc, fcn-info.h, fft.cc, fft2.cc, file-io.cc, filter.cc, find.cc, ft-text-renderer.cc, ft-text-renderer.h, gcd.cc, gl-render.cc, gl-render.h, gl2ps-print.cc, gl2ps-print.h, graphics-toolkit.cc, graphics-toolkit.h, graphics.cc, gsvd.cc, gtk-manager.cc, gtk-manager.h, help.cc, help.h, hook-fcn.cc, hook-fcn.h, input.cc, input.h, interpreter-private.cc, interpreter-private.h, interpreter.cc, interpreter.h, inv.cc, jsondecode.cc, jsonencode.cc, latex-text-renderer.cc, latex-text-renderer.h, load-path.cc, load-path.h, load-save.cc, load-save.h, lookup.cc, ls-hdf5.cc, ls-mat4.cc, ls-mat5.cc, lsode.cc, lu.cc, mappers.cc, matrix_type.cc, max.cc, mex.cc, mexproto.h, mxarray.h, mxtypes.in.h, oct-errno.in.cc, oct-hdf5-types.cc, oct-hist.cc, oct-hist.h, oct-map.cc, oct-map.h, oct-opengl.h, oct-prcstrm.h, oct-process.cc, oct-process.h, oct-stdstrm.h, oct-stream.cc, oct-stream.h, oct-strstrm.h, octave-default-image.h, ordqz.cc, ordschur.cc, pager.cc, pager.h, pinv.cc, pow2.cc, pr-output.cc, psi.cc, qr.cc, quadcc.cc, rand.cc, regexp.cc, settings.cc, settings.h, sighandlers.cc, sighandlers.h, sparse-xpow.cc, sqrtm.cc, stack-frame.cc, stack-frame.h, stream-euler.cc, strfns.cc, svd.cc, syminfo.cc, syminfo.h, symrcm.cc, symrec.cc, symrec.h, symscope.cc, symscope.h, symtab.cc, symtab.h, sysdep.cc, sysdep.h, text-engine.cc, text-engine.h, text-renderer.cc, text-renderer.h, time.cc, toplev.cc, typecast.cc, url-handle-manager.cc, url-handle-manager.h, urlwrite.cc, utils.cc, utils.h, variables.cc, variables.h, xdiv.cc, __delaunayn__.cc, __init_fltk__.cc, __init_gnuplot__.cc, __ode15__.cc, __voronoi__.cc, audioread.cc, convhulln.cc, gzip.cc, cdef-class.cc, cdef-class.h, cdef-fwd.h, cdef-manager.cc, cdef-manager.h, cdef-method.cc, cdef-method.h, cdef-object.cc, cdef-object.h, cdef-package.cc, cdef-package.h, cdef-property.cc, cdef-property.h, cdef-utils.cc, cdef-utils.h, ov-base-diag.cc, ov-base-int.cc, ov-base-mat.cc, ov-base-mat.h, ov-base-scalar.cc, ov-base.cc, ov-base.h, ov-bool-mat.cc, ov-bool-mat.h, ov-bool-sparse.cc, ov-bool.cc, ov-builtin.h, ov-cell.cc, ov-ch-mat.cc, ov-class.cc, ov-class.h, ov-classdef.cc, ov-classdef.h, ov-complex.cc, ov-cx-diag.cc, ov-cx-mat.cc, ov-cx-sparse.cc, ov-dld-fcn.cc, ov-dld-fcn.h, ov-fcn-handle.cc, ov-fcn-handle.h, ov-fcn.h, ov-float.cc, ov-flt-complex.cc, ov-flt-cx-diag.cc, ov-flt-cx-mat.cc, ov-flt-re-diag.cc, ov-flt-re-mat.cc, ov-flt-re-mat.h, ov-intx.h, ov-java.cc, ov-lazy-idx.cc, ov-legacy-range.cc, ov-magic-int.cc, ov-mex-fcn.cc, ov-mex-fcn.h, ov-null-mat.cc, ov-perm.cc, ov-range.cc, ov-re-diag.cc, ov-re-mat.cc, ov-re-mat.h, ov-re-sparse.cc, ov-scalar.cc, ov-str-mat.cc, ov-struct.cc, ov-typeinfo.cc, ov-typeinfo.h, ov-usr-fcn.cc, ov-usr-fcn.h, ov.cc, ov.h, ovl.h, octave.cc, octave.h, op-b-sbm.cc, op-bm-sbm.cc, op-cs-scm.cc, op-fm-fcm.cc, op-fs-fcm.cc, op-s-scm.cc, op-scm-cs.cc, op-scm-s.cc, op-sm-cs.cc, ops.h, anon-fcn-validator.cc, anon-fcn-validator.h, bp-table.cc, bp-table.h, comment-list.cc, comment-list.h, filepos.h, lex.h, oct-lvalue.cc, oct-lvalue.h, parse.h, profiler.cc, profiler.h, pt-anon-scopes.cc, pt-anon-scopes.h, pt-arg-list.cc, pt-arg-list.h, pt-args-block.cc, pt-args-block.h, pt-array-list.cc, pt-array-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-cell.cc, pt-cell.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-eval.cc, pt-eval.h, pt-except.cc, pt-except.h, pt-exp.cc, pt-exp.h, pt-fcn-handle.cc, pt-fcn-handle.h, pt-id.cc, pt-id.h, pt-idx.cc, pt-idx.h, pt-jump.h, pt-loop.cc, pt-loop.h, pt-mat.cc, pt-mat.h, pt-misc.cc, pt-misc.h, pt-pr-code.cc, pt-pr-code.h, pt-select.cc, pt-select.h, pt-spmd.cc, pt-spmd.h, pt-stmt.cc, pt-stmt.h, pt-tm-const.cc, pt-tm-const.h, pt-unop.cc, pt-unop.h, pt-walk.cc, pt-walk.h, pt.cc, pt.h, token.cc, token.h, Range.cc, Range.h, idx-vector.cc, idx-vector.h, range-fwd.h, CollocWt.cc, CollocWt.h, aepbalance.cc, aepbalance.h, chol.cc, chol.h, gepbalance.cc, gepbalance.h, gsvd.cc, gsvd.h, hess.cc, hess.h, lo-mappers.cc, lo-mappers.h, lo-specfun.cc, lo-specfun.h, lu.cc, lu.h, oct-convn.cc, oct-convn.h, oct-fftw.cc, oct-fftw.h, oct-norm.cc, oct-norm.h, oct-rand.cc, oct-rand.h, oct-spparms.cc, oct-spparms.h, qr.cc, qr.h, qrp.cc, qrp.h, randgamma.cc, randgamma.h, randmtzig.cc, randmtzig.h, randpoisson.cc, randpoisson.h, schur.cc, schur.h, sparse-chol.cc, sparse-chol.h, sparse-lu.cc, sparse-lu.h, sparse-qr.cc, sparse-qr.h, svd.cc, svd.h, child-list.cc, child-list.h, dir-ops.cc, dir-ops.h, file-ops.cc, file-ops.h, file-stat.cc, file-stat.h, lo-sysdep.cc, lo-sysdep.h, lo-sysinfo.cc, lo-sysinfo.h, mach-info.cc, mach-info.h, oct-env.cc, oct-env.h, oct-group.cc, oct-group.h, oct-password.cc, oct-password.h, oct-syscalls.cc, oct-syscalls.h, oct-time.cc, oct-time.h, oct-uname.cc, oct-uname.h, action-container.cc, action-container.h, base-list.h, cmd-edit.cc, cmd-edit.h, cmd-hist.cc, cmd-hist.h, f77-fcn.h, file-info.cc, file-info.h, lo-array-errwarn.cc, lo-array-errwarn.h, lo-hash.cc, lo-hash.h, lo-ieee.h, lo-regexp.cc, lo-regexp.h, lo-utils.cc, lo-utils.h, oct-base64.cc, oct-base64.h, oct-glob.cc, oct-glob.h, oct-inttypes.h, oct-mutex.cc, oct-mutex.h, oct-refcount.h, oct-shlib.cc, oct-shlib.h, oct-sparse.cc, oct-sparse.h, oct-string.h, octave-preserve-stream-state.h, pathsearch.cc, pathsearch.h, quit.cc, quit.h, unwind-prot.cc, unwind-prot.h, url-transfer.cc, url-transfer.h: Re-indent code after switch to using namespace macros.
author Rik <rik@octave.org>
date Thu, 01 Dec 2022 18:02:15 -0800
parents e88a07dec498
children 597f3ee61a48
comparison
equal deleted inserted replaced
31605:e88a07dec498 31607:aac27ad79be6
50 #include "pt-stmt.h" 50 #include "pt-stmt.h"
51 #include "pt-walk.h" 51 #include "pt-walk.h"
52 52
53 OCTAVE_BEGIN_NAMESPACE(octave) 53 OCTAVE_BEGIN_NAMESPACE(octave)
54 54
55 static bool 55 static bool
56 is_method_executing (const octave_value& ov, const cdef_object& obj) 56 is_method_executing (const octave_value& ov, const cdef_object& obj)
57 { 57 {
58 tree_evaluator& tw = __get_evaluator__ (); 58 tree_evaluator& tw = __get_evaluator__ ();
59 59
60 octave_function *stack_fcn = tw.current_function (); 60 octave_function *stack_fcn = tw.current_function ();
61 61
62 octave_function *method_fcn = ov.function_value (true); 62 octave_function *method_fcn = ov.function_value (true);
63 63
64 // Does the top of the call stack match our target function? 64 // Does the top of the call stack match our target function?
65 65
66 if (stack_fcn && stack_fcn == method_fcn) 66 if (stack_fcn && stack_fcn == method_fcn)
67 { 67 {
68 octave_user_function *uf = method_fcn->user_function_value (true); 68 octave_user_function *uf = method_fcn->user_function_value (true);
69 69
70 // We can only check the context object for user-function (not builtin), 70 // We can only check the context object for user-function (not builtin),
71 // where we have access to the parameters (arguments and return values). 71 // where we have access to the parameters (arguments and return values).
72 // That's ok as there's no need to call this function for builtin 72 // That's ok as there's no need to call this function for builtin
73 // methods. 73 // methods.
74 74
75 if (uf) 75 if (uf)
76 { 76 {
77 // At this point, the method is executing, but we still need to 77 // At this point, the method is executing, but we still need to
78 // check the context object for which the method is executing. For 78 // check the context object for which the method is executing. For
79 // methods, it's the first argument of the function; for ctors, it 79 // methods, it's the first argument of the function; for ctors, it
80 // is the first return value. 80 // is the first return value.
81 81
82 tree_parameter_list *pl = uf->is_classdef_constructor () 82 tree_parameter_list *pl = uf->is_classdef_constructor ()
83 ? uf->return_list () 83 ? uf->return_list ()
84 : uf->parameter_list (); 84 : uf->parameter_list ();
85 85
86 if (pl && pl->size () > 0) 86 if (pl && pl->size () > 0)
87 { 87 {
88 tree_decl_elt *elt = pl->front (); 88 tree_decl_elt *elt = pl->front ();
89 89
90 octave_value arg0 = tw.evaluate (elt); 90 octave_value arg0 = tw.evaluate (elt);
91 91
92 if (arg0.is_defined () && arg0.type_name () == "object") 92 if (arg0.is_defined () && arg0.type_name () == "object")
93 { 93 {
94 cdef_object arg0_obj = to_cdef (arg0); 94 cdef_object arg0_obj = to_cdef (arg0);
95 95
96 return obj.is (arg0_obj); 96 return obj.is (arg0_obj);
97 } 97 }
98 } 98 }
99 } 99 }
100 } 100 }
101 101
102 return false; 102 return false;
103 } 103 }
104 104
105 octave_value 105 octave_value
106 cdef_property::cdef_property_rep::get_value (const cdef_object& obj, 106 cdef_property::cdef_property_rep::get_value (const cdef_object& obj,
107 bool do_check_access, 107 bool do_check_access,
108 const std::string& who) const 108 const std::string& who) const
109 { 109 {
110 octave_value retval; 110 octave_value retval;
111 111
112 if (do_check_access && ! check_get_access ()) 112 if (do_check_access && ! check_get_access ())
113 err_property_access (who, false); 113 err_property_access (who, false);
114 114
115 if (! obj.is_constructed ()) 115 if (! obj.is_constructed ())
116 { 116 {
117 cdef_class cls (to_cdef (get ("DefiningClass"))); 117 cdef_class cls (to_cdef (get ("DefiningClass")));
118 118
119 if (! obj.is_partially_constructed_for (cls)) 119 if (! obj.is_partially_constructed_for (cls))
120 error ("cannot reference properties of class '%s' for non-constructed object", 120 error ("cannot reference properties of class '%s' for non-constructed object",
121 cls.get_name ().c_str ()); 121 cls.get_name ().c_str ());
122 } 122 }
123 123
124 octave_value get_fcn = get ("GetMethod"); 124 octave_value get_fcn = get ("GetMethod");
125 125
126 // FIXME: should check whether we're already in get accessor method 126 // FIXME: should check whether we're already in get accessor method
127 127
128 if (get_fcn.isempty () || is_method_executing (get_fcn, obj)) 128 if (get_fcn.isempty () || is_method_executing (get_fcn, obj))
129 retval = obj.get (get ("Name").string_value ()); 129 retval = obj.get (get ("Name").string_value ());
130 else 130 else
131 { 131 {
132 octave_value_list args; 132 octave_value_list args;
133 133
134 args(0) = to_ov (obj); 134 args(0) = to_ov (obj);
135 135
136 args = feval (get_fcn, args, 1); 136 args = feval (get_fcn, args, 1);
137 137
138 retval = args(0); 138 retval = args(0);
139 } 139 }
140 140
141 return retval; 141 return retval;
142 } 142 }
143 143
144 octave_value 144 octave_value
145 cdef_property::cdef_property_rep::get_value (bool do_check_access, 145 cdef_property::cdef_property_rep::get_value (bool do_check_access,
146 const std::string& who) const 146 const std::string& who) const
147 { 147 {
148 if (do_check_access && ! check_get_access ()) 148 if (do_check_access && ! check_get_access ())
149 err_property_access (who, false); 149 err_property_access (who, false);
150 150
151 return get ("DefaultValue"); 151 return get ("DefaultValue");
152 } 152 }
153 153
154 bool 154 bool
155 cdef_property::cdef_property_rep::is_recursive_set (const cdef_object& /* obj */) const 155 cdef_property::cdef_property_rep::is_recursive_set (const cdef_object& /* obj */) const
156 { 156 {
157 // FIXME: implement 157 // FIXME: implement
158 return false; 158 return false;
159 } 159 }
160 160
161 OCTAVE_NORETURN void 161 OCTAVE_NORETURN void
162 cdef_property::cdef_property_rep::err_property_access 162 cdef_property::cdef_property_rep::err_property_access
163 (const std::string& from, bool is_set) const 163 (const std::string& from, bool is_set) const
164 { 164 {
165 octave_value acc = get (is_set ? "SetAccess" : "GetAccess"); 165 octave_value acc = get (is_set ? "SetAccess" : "GetAccess");
166 std::string acc_s; 166 std::string acc_s;
167 167
168 if (acc.is_string ()) 168 if (acc.is_string ())
169 acc_s = acc.string_value (); 169 acc_s = acc.string_value ();
170 else 170 else
171 acc_s = "class-restricted"; 171 acc_s = "class-restricted";
172 172
173 if (is_set) 173 if (is_set)
174 error ("%s: property '%s' has %s access and cannot be set in this context", 174 error ("%s: property '%s' has %s access and cannot be set in this context",
175 from.c_str (), get_name ().c_str (), acc_s.c_str ()); 175 from.c_str (), get_name ().c_str (), acc_s.c_str ());
176 else 176 else
177 error ("%s: property '%s' has %s access and cannot be obtained in this context", 177 error ("%s: property '%s' has %s access and cannot be obtained in this context",
178 from.c_str (), get_name ().c_str (), acc_s.c_str ()); 178 from.c_str (), get_name ().c_str (), acc_s.c_str ());
179 } 179 }
180 180
181 void 181 void
182 cdef_property::cdef_property_rep::set_value (cdef_object& obj, 182 cdef_property::cdef_property_rep::set_value (cdef_object& obj,
183 const octave_value& val, 183 const octave_value& val,
184 bool do_check_access, 184 bool do_check_access,
185 const std::string& who) 185 const std::string& who)
186 { 186 {
187 if (do_check_access && ! check_set_access ()) 187 if (do_check_access && ! check_set_access ())
188 err_property_access (who, true); 188 err_property_access (who, true);
189 189
190 if (! obj.is_constructed ()) 190 if (! obj.is_constructed ())
191 { 191 {
192 cdef_class cls (to_cdef (get ("DefiningClass"))); 192 cdef_class cls (to_cdef (get ("DefiningClass")));
193 193
194 if (! obj.is_partially_constructed_for (cls)) 194 if (! obj.is_partially_constructed_for (cls))
195 error ("cannot reference properties of class '%s' for non-constructed object", 195 error ("cannot reference properties of class '%s' for non-constructed object",
196 cls.get_name ().c_str ()); 196 cls.get_name ().c_str ());
197 } 197 }
198 198
199 octave_value set_fcn = get ("SetMethod"); 199 octave_value set_fcn = get ("SetMethod");
200 200
201 if (set_fcn.isempty () || is_method_executing (set_fcn, obj)) 201 if (set_fcn.isempty () || is_method_executing (set_fcn, obj))
202 obj.put (get ("Name").string_value (), val); 202 obj.put (get ("Name").string_value (), val);
203 else 203 else
204 { 204 {
205 octave_value_list args; 205 octave_value_list args;
206 206
207 args(0) = to_ov (obj); 207 args(0) = to_ov (obj);
208 args(1) = val; 208 args(1) = val;
209 209
210 if (obj.is_handle_object ()) 210 if (obj.is_handle_object ())
211 feval (set_fcn, args, 0); 211 feval (set_fcn, args, 0);
212 else 212 else
213 { 213 {
214 args = feval (set_fcn, args, 1); 214 args = feval (set_fcn, args, 1);
215 215
216 if (args.length () > 0 && args(0).is_defined ()) 216 if (args.length () > 0 && args(0).is_defined ())
217 { 217 {
218 if (args(0).is_classdef_object ()) 218 if (args(0).is_classdef_object ())
219 { 219 {
220 cdef_object new_obj = to_cdef (args(0)); 220 cdef_object new_obj = to_cdef (args(0));
221 221
222 obj = new_obj; 222 obj = new_obj;
223 } 223 }
224 else 224 else
225 ::warning ("set-method of property '%s' returned a non-classdef object", 225 ::warning ("set-method of property '%s' returned a non-classdef object",
226 get_name ().c_str ()); 226 get_name ().c_str ());
227 } 227 }
228 } 228 }
229 } 229 }
230 } 230 }
231 231
232 bool 232 bool
233 cdef_property::cdef_property_rep::check_get_access (void) const 233 cdef_property::cdef_property_rep::check_get_access (void) const
234 { 234 {
235 cdef_class cls (to_cdef (get ("DefiningClass"))); 235 cdef_class cls (to_cdef (get ("DefiningClass")));
236 236
237 return check_access (cls, get ("GetAccess"), "", get_name (), false); 237 return check_access (cls, get ("GetAccess"), "", get_name (), false);
238 238
239 return false; 239 return false;
240 } 240 }
241 241
242 bool 242 bool
243 cdef_property::cdef_property_rep::check_set_access (void) const 243 cdef_property::cdef_property_rep::check_set_access (void) const
244 { 244 {
245 cdef_class cls (to_cdef (get ("DefiningClass"))); 245 cdef_class cls (to_cdef (get ("DefiningClass")));
246 246
247 return check_access (cls, get ("SetAccess"), "", get_name (), true); 247 return check_access (cls, get ("SetAccess"), "", get_name (), true);
248 248
249 return false; 249 return false;
250 } 250 }
251 251
252 OCTAVE_END_NAMESPACE(octave) 252 OCTAVE_END_NAMESPACE(octave)