Mercurial > octave
annotate libinterp/octave-value/ov-classdef.cc @ 28514:fab862fedf85 stable
allow help to find docstrings for classdef classes and methods (bug #43047)
* help.cc (help_system::raw_help_from_symbol_table): Also find
docstrings from classdef meta objects (both classes and methods).
* cdef-class.h, cdef-class.cc (cdef_class::cdef_class_rep,
cdef_class): Store docstring for class and provide access.
* ov-classdef.h, ov-classdef.cc (octave_classdef_meta::doc_string):
New function to provide access to doc strings for classdef objects
and methods.
* ov-fcn.h (octave_function::doc_string): Now virtual. New argument
for method name.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 29 May 2020 10:57:04 -0400 |
parents | 55f82d23fe5e |
children | 49f4d7814760 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 2012-2020 The Octave Project Developers |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21578
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
27 # include "config.h" |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
28 #endif |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
29 |
15896
57be060d7672
Implement full object construction and superclass references.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15870
diff
changeset
|
30 #include <algorithm> |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
31 #include <iomanip> |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
32 |
26772
d1419ac09564
split method, package, and property classes from cdef-class file
John W. Eaton <jwe@octave.org>
parents:
26769
diff
changeset
|
33 #include "cdef-class.h" |
d1419ac09564
split method, package, and property classes from cdef-class file
John W. Eaton <jwe@octave.org>
parents:
26769
diff
changeset
|
34 #include "cdef-method.h" |
d1419ac09564
split method, package, and property classes from cdef-class file
John W. Eaton <jwe@octave.org>
parents:
26769
diff
changeset
|
35 #include "cdef-package.h" |
d1419ac09564
split method, package, and property classes from cdef-class file
John W. Eaton <jwe@octave.org>
parents:
26769
diff
changeset
|
36 #include "cdef-property.h" |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
37 #include "cdef-utils.h" |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
38 #include "defun.h" |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
39 #include "errwarn.h" |
23438
d24d01273bd0
eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
23435
diff
changeset
|
40 #include "interpreter-private.h" |
16676
7368654f302f
Initial support for (classdef) packages.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16048
diff
changeset
|
41 #include "load-path.h" |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
42 #include "ov-classdef.h" |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
43 #include "ov-fcn-handle.h" |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
44 #include "ov-typeinfo.h" |
18263
b5be1a2aa5ab
Initial implementation for classdef methods in separate files.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18262
diff
changeset
|
45 #include "ov-usr-fcn.h" |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
46 #include "parse.h" |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
47 #include "pr-output.h" |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23345
diff
changeset
|
48 #include "pt-eval.h" |
15896
57be060d7672
Implement full object construction and superclass references.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15870
diff
changeset
|
49 #include "pt-misc.h" |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
50 |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
51 static bool |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
52 in_class_method (const octave::cdef_class& cls) |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
53 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
54 octave::cdef_class ctx = octave::get_class_context (); |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
55 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
56 return (ctx.ok () && octave::is_superclass (ctx, cls)); |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
57 } |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
58 |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
59 int octave_classdef::t_id (-1); |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
60 |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
61 const std::string octave_classdef::t_name ("object"); |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
62 |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
63 void |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24539
diff
changeset
|
64 octave_classdef::register_type (octave::type_info& ti) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
65 { |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24539
diff
changeset
|
66 t_id = ti.register_type (octave_classdef::t_name, "<unknown>", |
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24539
diff
changeset
|
67 octave_value (new octave_classdef ())); |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
68 } |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
69 |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
70 octave_value_list |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
71 octave_classdef::subsref (const std::string& type, |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
72 const std::list<octave_value_list>& idx, |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
73 int nargout) |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
74 { |
15896
57be060d7672
Implement full object construction and superclass references.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15870
diff
changeset
|
75 size_t skip = 0; |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
76 octave_value_list retval; |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
77 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
78 octave::cdef_class cls = object.get_class (); |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
79 |
26525
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26449
diff
changeset
|
80 if (! in_class_method (cls) && ! called_from_builtin ()) |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
81 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
82 octave::cdef_method meth = cls.find_method ("subsref"); |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
83 |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
84 if (meth.ok ()) |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
85 { |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
86 octave_value_list args; |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
87 |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
88 args(1) = make_idx_args (type, idx, "subsref"); |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
89 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
90 count++; |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
91 args(0) = octave_value (this); |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
92 |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
93 retval = meth.execute (args, nargout, true, "subsref"); |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
94 |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
95 return retval; |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
96 } |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
97 } |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
98 |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
99 // At this point, the default subsref mechanism must be used. |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
100 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
101 retval = object.subsref (type, idx, nargout, skip, octave::cdef_class ()); |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
102 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
103 if (type.length () > skip && idx.size () > skip) |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
104 retval = retval(0).next_subsref (nargout, type, idx, skip); |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
105 |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
106 return retval; |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
107 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
108 |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
109 octave_value |
16696
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
110 octave_classdef::subsref (const std::string& type, |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
111 const std::list<octave_value_list>& idx, |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
112 bool auto_add) |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
113 { |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
114 size_t skip = 0; |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
115 octave_value_list retval; |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
116 |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
117 // This variant of subsref is used to create temporary values when doing |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21724
diff
changeset
|
118 // assignment with multi-level indexing. AFAIK this is only used for internal |
26757
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
119 // purpose (not sure we should even implement this). |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
120 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
121 octave::cdef_class cls = object.get_class (); |
26757
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
122 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
123 if (! in_class_method (cls)) |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
124 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
125 octave::cdef_method meth = cls.find_method ("subsref"); |
26757
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
126 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
127 if (meth.ok ()) |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
128 { |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
129 octave_value_list args; |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
130 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
131 args(1) = make_idx_args (type, idx, "subsref"); |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
132 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
133 count++; |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
134 args(0) = octave_value (this); |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
135 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
136 retval = meth.execute (args, 1, true, "subsref"); |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
137 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
138 return retval.length () > 0 ? retval(0) : octave_value (); |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
139 } |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
140 } |
16696
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
141 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
142 retval = object.subsref (type, idx, 1, skip, octave::cdef_class (), auto_add); |
16696
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
143 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
144 if (type.length () > skip && idx.size () > skip) |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
145 retval = retval(0).next_subsref (1, type, idx, skip); |
16696
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
146 |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
147 return retval.length () > 0 ? retval(0) : octave_value (); |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
148 } |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
149 |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
150 octave_value |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
151 octave_classdef::subsasgn (const std::string& type, |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
152 const std::list<octave_value_list>& idx, |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
153 const octave_value& rhs) |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
154 { |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
155 octave_value retval; |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
156 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
157 octave::cdef_class cls = object.get_class (); |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
158 |
26525
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26449
diff
changeset
|
159 if (! in_class_method (cls) && ! called_from_builtin ()) |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
160 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
161 octave::cdef_method meth = cls.find_method ("subsasgn"); |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
162 |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
163 if (meth.ok ()) |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
164 { |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
165 octave_value_list args; |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
166 |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
167 args(1) = make_idx_args (type, idx, "subsasgn"); |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
168 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
169 count++; |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
170 args(0) = octave_value (this); |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
171 args(2) = rhs; |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
172 |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
173 octave_value_list retlist; |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
174 |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
175 retlist = meth.execute (args, 1, true, "subsasgn"); |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
176 |
21885
0806871e3e1e
maint: Prefer is_empty() rather than "length () == 0".
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
177 if (retlist.empty ()) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
178 error ("overloaded method 'subsasgn' did not return any value"); |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
179 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
180 retval = retlist(0); |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
181 } |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
182 } |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
183 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
184 if (! retval.is_defined ()) |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
185 retval = object.subsasgn (type, idx, rhs); |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
186 |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
187 return retval; |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
188 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
189 |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
190 octave_value |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
191 octave_classdef::undef_subsasgn (const std::string& type, |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
192 const std::list<octave_value_list>& idx, |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
193 const octave_value& rhs) |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
194 { |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
195 if (type.length () == 1 && type[0] == '(') |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
196 { |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
197 object = object.make_array (); |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
198 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
199 return subsasgn (type, idx, rhs); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
200 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
201 else |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
202 return octave_base_value::undef_subsasgn (type, idx, rhs); |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
203 |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
204 return octave_value (); |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
205 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
206 |
28072
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
207 Matrix |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
208 octave_classdef::size (void) |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
209 { |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
210 octave::cdef_class cls = object.get_class (); |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
211 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
212 if (! in_class_method (cls) && ! called_from_builtin ()) |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
213 { |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
214 octave::cdef_method meth = cls.find_method ("size"); |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
215 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
216 if (meth.ok ()) |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
217 { |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
218 count++; |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
219 octave_value_list args (1, octave_value (this)); |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
220 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
221 octave_value_list lv = meth.execute (args, 1, true, "size"); |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
222 if (lv.length () <= 0 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
223 || ! lv(0).is_matrix_type () || ! lv(0).dims ().isvector ()) |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
224 error ("%s.size: invalid return value", class_name ().c_str ()); |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
225 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
226 return lv(0).matrix_value (); |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
227 } |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
228 } |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
229 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
230 return octave_base_value::size (); |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
231 } |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
232 |
24802
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
233 octave_idx_type |
26922
072d0610cc56
avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents:
26778
diff
changeset
|
234 octave_classdef::xnumel (const octave_value_list& idx) |
24802
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
235 { |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
236 octave_idx_type retval = -1; |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
237 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
238 octave::cdef_class cls = object.get_class (); |
24802
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
239 |
26525
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26449
diff
changeset
|
240 if (! in_class_method (cls) && ! called_from_builtin ()) |
24802
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
241 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
242 octave::cdef_method meth = cls.find_method ("numel"); |
24802
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
243 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
244 if (meth.ok ()) |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
245 { |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
246 octave_value_list args (idx.length () + 1, octave_value ()); |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
247 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
248 count++; |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
249 args(0) = octave_value (this); |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
250 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
251 for (octave_idx_type i = 0; i < idx.length (); i++) |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
252 args(i+1) = idx(i); |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
253 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
254 octave_value_list lv = meth.execute (args, 1, true, "numel"); |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
255 if (lv.length () != 1 || ! lv(0).is_scalar_type ()) |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
256 error ("@%s/numel: invalid return value", cls.get_name ().c_str ()); |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
257 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
258 retval = lv(0).idx_type_value (true); |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
259 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
260 return retval; |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
261 } |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
262 } |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
263 |
26922
072d0610cc56
avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents:
26778
diff
changeset
|
264 retval = octave_base_value::xnumel (idx); |
24802
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
265 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
266 return retval; |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
267 } |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
268 |
18416
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
269 void |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
270 octave_classdef::print (std::ostream& os, bool) |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
271 { |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
272 print_raw (os); |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
273 } |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
274 |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
275 void |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
276 octave_classdef::print_raw (std::ostream& os, bool) const |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
277 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
278 octave::cdef_class cls = object.get_class (); |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
279 |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
280 if (cls.ok ()) |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
281 { |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
282 bool is_array = object.is_array (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
283 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
284 increment_indent_level (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
285 |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
286 indent (os); |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
287 os << class_name () << " object"; |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
288 if (is_array) |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
289 os << " array"; |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
290 os << " with properties:"; |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
291 newline (os); |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
292 if (! Vcompact_format) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
293 newline (os); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
294 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
295 increment_indent_level (); |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
296 |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
297 std::map<std::string, octave::cdef_property> property_map |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
298 = cls.get_property_map (); |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
299 |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
300 size_t max_len = 0; |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
301 for (const auto& pname_prop : property_map) |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
302 { |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
303 // FIXME: this loop duplicates a significant portion of the |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
304 // loop below and the loop in Fproperties. |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
305 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
306 const octave::cdef_property& prop = pname_prop.second; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
307 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
308 const std::string nm = prop.get_name (); |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
309 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
310 octave_value acc = prop.get ("GetAccess"); |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
311 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
312 if (! acc.is_string () || acc.string_value () != "public") |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
313 continue; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
314 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
315 octave_value hid = prop.get ("Hidden"); |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
316 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
317 if (hid.bool_value ()) |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
318 continue; |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
319 |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
320 size_t sz = nm.size (); |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
321 |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
322 if (sz > max_len) |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
323 max_len = sz; |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
324 } |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
325 |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
326 for (auto& pname_prop : property_map) |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
327 { |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
328 const octave::cdef_property& prop = pname_prop.second; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
329 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
330 const std::string nm = prop.get_name (); |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
331 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
332 octave_value acc = prop.get ("GetAccess"); |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
333 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
334 if (! acc.is_string () || acc.string_value () != "public") |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
335 continue; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
336 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
337 octave_value hid = prop.get ("Hidden"); |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
338 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
339 if (hid.bool_value ()) |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
340 continue; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
341 |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
342 indent (os); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
343 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
344 if (is_array) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
345 os << " " << nm; |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
346 else |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
347 { |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
348 octave_value val = prop.get_value (object, false); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
349 dim_vector dims = val.dims (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
350 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
351 os << std::setw (max_len+2) << nm << ": "; |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
352 if (val.is_string ()) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
353 os << val.string_value (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
354 else if (val.islogical ()) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
355 os << val.bool_value (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
356 else |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
357 os << "[" << dims.str () << " " << val.class_name () << "]"; |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
358 } |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
359 |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
360 newline (os); |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
361 } |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
362 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
363 decrement_indent_level (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
364 decrement_indent_level (); |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
365 } |
18416
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
366 } |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
367 |
19103
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
368 bool |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
369 octave_classdef::is_instance_of (const std::string& cls_name) const |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
370 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
371 octave::cdef_class cls = octave::lookup_class (cls_name, false, false); |
19103
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
372 |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
373 if (cls.ok ()) |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
374 return is_superclass (cls, object.get_class ()); |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
375 |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
376 return false; |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
377 } |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
378 |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
379 octave_value |
26718
9b0335f4bc74
revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
380 octave_classdef::superclass_ref (const std::string& meth, |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
381 const std::string& cls) |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
382 { |
26718
9b0335f4bc74
revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
383 return octave_value (new octave_classdef_superclass_ref (meth, cls)); |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
384 } |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
385 |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
386 octave_value |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
387 octave_classdef::metaclass_query (const std::string& cls) |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
388 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
389 return octave::to_ov (octave::lookup_class (cls)); |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
390 } |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
391 |
28438
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
392 bool octave_classdef_meta::is_classdef_method (const std::string& cname) const |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
393 { |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
394 bool retval = false; |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
395 |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
396 if (object.is_method ()) |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
397 { |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
398 if (cname.empty ()) |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
399 retval = true; |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
400 else |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
401 { |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
402 octave::cdef_method meth (object); |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
403 |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
404 return meth.is_defined_in_class (cname); |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
405 } |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
406 } |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
407 |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
408 return retval; |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
409 } |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
410 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
411 bool octave_classdef_meta::is_classdef_constructor (const std::string& cname) const |
25367
0548e32e6b27
call delete method correctly for handle class objects (bug #53844)
John W. Eaton <jwe@octave.org>
parents:
25319
diff
changeset
|
412 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
413 bool retval = false; |
25367
0548e32e6b27
call delete method correctly for handle class objects (bug #53844)
John W. Eaton <jwe@octave.org>
parents:
25319
diff
changeset
|
414 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
415 if (object.is_class ()) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
416 { |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
417 if (cname.empty ()) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
418 retval = true; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
419 else |
25367
0548e32e6b27
call delete method correctly for handle class objects (bug #53844)
John W. Eaton <jwe@octave.org>
parents:
25319
diff
changeset
|
420 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
421 octave::cdef_class cls (object); |
19184
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
422 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
423 if (cls.get_name () == cname) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
424 retval = true; |
19184
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
425 } |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
426 } |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
427 |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
428 return retval; |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
429 } |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
430 |
28514
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
431 std::string octave_classdef_meta::doc_string (const std::string& meth_name) const |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
432 { |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
433 if (object.is_class ()) |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
434 { |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
435 octave::cdef_class cls (object); |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
436 |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
437 if (meth_name.empty ()) |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
438 return cls.doc_string (); |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
439 |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
440 octave_value ov_meth = cls.get_method (meth_name); |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
441 |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
442 if (ov_meth.is_defined ()) |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
443 { |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
444 octave_function *fcn = ov_meth.function_value (); |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
445 |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
446 if (fcn) |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
447 return fcn->doc_string (); |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
448 } |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
449 } |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
450 |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
451 return ""; |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
452 } |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
453 |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
454 octave_value_list |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28072
diff
changeset
|
455 octave_classdef_superclass_ref::execute (octave::tree_evaluator& tw, |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28072
diff
changeset
|
456 int nargout, |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28072
diff
changeset
|
457 const octave_value_list& idx) |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
458 { |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
459 octave_value_list retval; |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
460 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
461 std::string meth_name; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
462 bool in_constructor; |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
463 octave::cdef_class ctx; |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
464 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
465 ctx = octave::get_class_context (meth_name, in_constructor); |
19861
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
466 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
467 if (! ctx.ok ()) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
468 error ("superclass calls can only occur in methods or constructors"); |
20125
274b52724931
Stop segfault when using empty indexing of a classdef object.
Rik <rik@octave.org>
parents:
20052
diff
changeset
|
469 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
470 std::string mname = m_method_name; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
471 std::string cname = m_class_name; |
20189
b2532deba721
Return copy of class object when using null indexing (bug #44940).
John W. Eaton <jwe@octave.org>
parents:
20125
diff
changeset
|
472 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
473 // CLS is the superclass. The lookup_class function handles |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
474 // pkg.class names. |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
475 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
476 octave::cdef_class cls = octave::lookup_class (cname); |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
477 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
478 if (in_constructor) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
479 { |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
480 if (! is_direct_superclass (cls, ctx)) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
481 error ("'%s' is not a direct superclass of '%s'", |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
482 cname.c_str (), ctx.get_name ().c_str ()); |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
483 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
484 if (! is_constructed_object (tw, mname)) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
485 error ("cannot call superclass constructor with variable '%s'", |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
486 mname.c_str ()); |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
487 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
488 octave_value sym = tw.varval (mname); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
489 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
490 cls.run_constructor (octave::to_cdef_ref (sym), idx); |
16692
b9833510355d
Add object array property indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16691
diff
changeset
|
491 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
492 retval(0) = sym; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
493 } |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
494 else |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
495 { |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
496 size_t pos = mname.find ('.'); |
16692
b9833510355d
Add object array property indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16691
diff
changeset
|
497 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
498 octave::cdef_object obj; |
16692
b9833510355d
Add object array property indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16691
diff
changeset
|
499 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
500 if (pos != std::string::npos) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
501 { |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
502 // We are looking at obj.meth. |
16692
b9833510355d
Add object array property indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16691
diff
changeset
|
503 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
504 std::string oname = m_method_name.substr (0, pos); |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
505 mname = mname.substr (pos + 1); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
506 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
507 octave_value tval = tw.varval (oname); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
508 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
509 // FIXME: Can we only call superclass methods on the current |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
510 // object? If so, and we are looking at something like |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
511 // |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
512 // function meth (obj, ...) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
513 // obj.meth@superclass (...) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
514 // |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
515 // Do we need to verify that the object that was passed to |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
516 // meth is the same as the object we find when looking up |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
517 // obj in the expression obj.meth? If so, what is the right |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
518 // way to perform that check? |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
519 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
520 if (tval.is_classdef_object ()) |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
521 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
522 octave_classdef *cdobj = tval.classdef_object_value (); |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
523 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
524 obj = cdobj->get_object (); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
525 } |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
526 } |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
527 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
528 if (mname != meth_name) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
529 error ("method name mismatch ('%s' != '%s')", |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
530 mname.c_str (), meth_name.c_str ()); |
16695
2823f8e3da77
Add multi-level index assignment for object array.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16694
diff
changeset
|
531 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
532 if (! is_strict_superclass (cls, ctx)) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
533 error ("'%s' is not a superclass of '%s'", |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
534 cname.c_str (), ctx.get_name ().c_str ()); |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
535 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
536 // I see 2 possible implementations here: |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
537 // 1) use cdef_object::subsref with a different class |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
538 // context; this avoids duplicating code, but |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
539 // assumes the object is always the first argument |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
540 // 2) lookup the method manually and call |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
541 // cdef_method::execute; this duplicates part of |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
542 // logic in cdef_object::subsref, but avoid the |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
543 // assumption of 1) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
544 // Not being sure about the assumption of 1), I |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
545 // go with option 2) for the time being. |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
546 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
547 octave::cdef_method meth = cls.find_method (meth_name, false); |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
548 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
549 if (! meth.ok ()) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
550 error ("no method '%s' found in superclass '%s'", |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
551 meth_name.c_str (), cname.c_str ()); |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
552 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
553 retval = (obj.ok () |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
554 ? meth.execute (obj, idx, nargout, true, meth_name) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
555 : meth.execute (idx, nargout, true, meth_name)); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
556 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
557 |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
558 return retval; |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
559 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
560 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
561 bool octave_classdef_superclass_ref::is_constructed_object (octave::tree_evaluator& tw, |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
562 const std::string& nm) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
563 { |
27208
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27188
diff
changeset
|
564 octave_function *of = tw.current_function (); |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
565 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
566 if (of->is_classdef_constructor ()) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
567 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
568 octave_user_function *uf = of->user_function_value (true); |
15896
57be060d7672
Implement full object construction and superclass references.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15870
diff
changeset
|
569 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
570 if (uf) |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
571 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
572 octave::tree_parameter_list *ret_list = uf->return_list (); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
573 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
574 if (ret_list && ret_list->length () == 1) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
575 return (ret_list->front ()->name () == nm); |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
576 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
577 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
578 |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
579 return false; |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
580 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
581 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
582 DEFUN (__meta_get_package__, args, , |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
583 doc: /* -*- texinfo -*- |
22299
9fc91bb2aec3
doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents:
22297
diff
changeset
|
584 @deftypefn {} {} __meta_get_package__ () |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
585 Undocumented internal function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
586 @end deftypefn */) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
587 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
588 if (args.length () != 1) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
589 print_usage (); |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
590 |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
591 std::string cname = args(0).xstring_value ("PACKAGE_NAME must be a string"); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
592 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
593 return octave::to_ov (octave::lookup_package (cname)); |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
594 } |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
595 |
20946 | 596 DEFUN (metaclass, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
597 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
598 @deftypefn {} {} metaclass (obj) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
599 Returns the meta.class object corresponding to the class of @var{obj}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
600 @end deftypefn */) |
15897
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
601 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
602 if (args.length () != 1) |
15897
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
603 print_usage (); |
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
604 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
605 octave::cdef_object obj = octave::to_cdef (args(0)); |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
606 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
607 return octave::to_ov (obj.get_class ()); |
15897
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
608 } |
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
609 |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
610 // FIXME: What about dynamic properties if obj is a scalar, or the |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
611 // properties of the class of obj if obj is an array? Probably there |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
612 // should be a function to do this job so that the DEFUN is just a |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
613 // simple wrapper. |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
614 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
615 DEFUN (properties, args, nargout, |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
616 doc: /* -*- texinfo -*- |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
617 @deftypefn {} {} properties (@var{class_name}) |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
618 @deftypefnx {} {} properties (@var{obj}) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
619 @deftypefnx {} {@var{plist} =} properties (@dots{}) |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
620 Return or display the public properties for the named class |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
621 @var{class_name} or classdef object @var{obj}. |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
622 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
623 If an output value is requested, return the list of property names in a |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
624 cell array. |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
625 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
626 Programming Note: Property names are returned if the @code{GetAccess} |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
627 attribute is public and if the @code{Hidden} attribute is false. |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
628 @seealso{methods} |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
629 @end deftypefn */) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
630 { |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
631 if (args.length () != 1) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
632 print_usage (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
633 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
634 octave_value arg = args(0); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
635 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
636 std::string class_name; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
637 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
638 if (arg.isobject ()) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
639 class_name = arg.class_name (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
640 else if (arg.is_string ()) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
641 class_name = arg.string_value (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
642 else |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
643 err_wrong_type_arg ("properties", arg); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
644 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
645 octave::cdef_class cls; |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
646 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
647 cls = octave::lookup_class (class_name, false, true); |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
648 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
649 if (! cls.ok ()) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
650 error ("invalid class: %s", class_name.c_str ()); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
651 |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
652 std::map<std::string, octave::cdef_property> property_map = |
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
653 cls.get_property_map (); |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
654 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
655 std::list<std::string> property_names; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
656 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
657 for (const auto& pname_prop : property_map) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
658 { |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
659 // FIXME: this loop duplicates a significant portion of the loops |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
660 // in octave_classdef::print_raw. |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
661 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
662 const octave::cdef_property& prop = pname_prop.second; |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
663 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
664 std::string nm = prop.get_name (); |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
665 |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
666 octave_value acc = prop.get ("GetAccess"); |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
667 |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
668 if (! acc.is_string () || acc.string_value () != "public") |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
669 continue; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
670 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
671 octave_value hid = prop.get ("Hidden"); |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
672 |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
673 if (hid.bool_value ()) |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
674 continue; |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
675 |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
676 property_names.push_back (nm); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
677 } |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
678 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
679 if (nargout > 0) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
680 return octave_value (Cell (string_vector (property_names))); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
681 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
682 octave_stdout << "properties for class " << class_name << ":\n\n"; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
683 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
684 for (const auto& nm : property_names) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
685 octave_stdout << " " << nm << "\n"; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
686 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
687 octave_stdout << std::endl; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
688 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
689 return octave_value (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
690 } |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
691 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
692 /* |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
693 %!assert (properties ("inputParser"), |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
694 %! {"CaseSensitive"; "FunctionName"; "KeepUnmatched"; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
695 %! "Parameters"; "PartialMatching"; "Results"; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
696 %! "StructExpand"; "Unmatched"; "UsingDefaults"}); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
697 */ |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
698 |
26724
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
699 // FIXME: Need to implement the -full option. |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
700 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
701 DEFMETHOD (__methods__, interp, args, , |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
702 doc: /* -*- texinfo -*- |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
703 @deftypefn {} {} __methods__ (@var{x}) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
704 @deftypefnx {} {} __methods__ ("classname") |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
705 Internal function. |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
706 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
707 Implements @code{methods} for Octave class objects and classnames. |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
708 @seealso{methods} |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
709 @end deftypefn */) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
710 { |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
711 // Input validation has already been done in methods.m. |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
712 octave_value arg = args(0); |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
713 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
714 std::string class_name; |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
715 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
716 if (arg.isobject ()) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
717 class_name = arg.class_name (); |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
718 else if (arg.is_string ()) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
719 class_name = arg.string_value (); |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
720 else |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
721 err_wrong_type_arg ("__methods__", arg); |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
722 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
723 string_vector sv; |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
724 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
725 octave::cdef_class cls = octave::lookup_class (class_name, false, true); |
26724
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
726 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
727 if (cls.ok ()) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
728 { |
26950
fbb318c371db
methods: return classdef constructors in list (bug #55858)
John W. Eaton <jwe@octave.org>
parents:
26922
diff
changeset
|
729 std::map<std::string, octave::cdef_method> method_map |
fbb318c371db
methods: return classdef constructors in list (bug #55858)
John W. Eaton <jwe@octave.org>
parents:
26922
diff
changeset
|
730 = cls.get_method_map (false, true); |
26724
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
731 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
732 std::list<std::string> method_names; |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
733 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
734 for (const auto& nm_mthd : method_map) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
735 { |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
736 std::string nm = nm_mthd.first; |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
737 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
738 method_names.push_back (nm); |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
739 } |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
740 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
741 sv = string_vector (method_names); |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
742 } |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
743 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
744 // The following will also find methods for legacy @CLASS objects. |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
745 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
746 octave::load_path& lp = interp.get_load_path (); |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
747 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
748 sv.append (lp.methods (class_name)); |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
749 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
750 return ovl (Cell (sv)); |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
751 } |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
752 |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
753 /* |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
754 ;;; Local Variables: *** |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
755 ;;; mode: C++ *** |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
756 ;;; End: *** |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
757 */ |