Mercurial > octave
annotate libinterp/octave-value/ov-classdef.cc @ 31225:3eab70385569
sparse-xpow.cc: Use faster multiplication technique, this time for complex
author | Arun Giridhar <arungiridhar@gmail.com> |
---|---|
date | Sun, 11 Sep 2022 13:53:38 -0400 |
parents | bf6376a754a4 |
children | a3d8915b9f87 |
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 // |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
30259
diff
changeset
|
3 // Copyright (C) 2012-2022 The Octave Project Developers |
27923
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" |
29314
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
50 #include "oct-lvalue.h" |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
51 |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
52 static bool |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
53 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
|
54 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
55 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
|
56 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
57 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
|
58 } |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
59 |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
60 int octave_classdef::t_id (-1); |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
61 |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
62 const std::string octave_classdef::t_name ("object"); |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
63 |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
64 void |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24539
diff
changeset
|
65 octave_classdef::register_type (octave::type_info& ti) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
66 { |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24539
diff
changeset
|
67 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
|
68 octave_value (new octave_classdef ())); |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
69 } |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
70 |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
71 octave_value_list |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
72 octave_classdef::subsref (const std::string& type, |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
73 const std::list<octave_value_list>& idx, |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
74 int nargout) |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
75 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
76 std::size_t skip = 0; |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
77 octave_value_list retval; |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
78 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
79 octave::cdef_class cls = m_object.get_class (); |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
80 |
26525
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26449
diff
changeset
|
81 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
|
82 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
83 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
|
84 |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
85 if (meth.ok ()) |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
86 { |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
87 octave_value_list args; |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
88 |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
89 args(1) = make_idx_args (type, idx, "subsref"); |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
90 |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
91 count++; |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
92 args(0) = octave_value (this); |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
93 |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
94 retval = meth.execute (args, nargout, true, "subsref"); |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
95 |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
96 return retval; |
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 |
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
100 // 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
|
101 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
102 retval = m_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
|
103 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
104 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
|
105 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
|
106 |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
107 return retval; |
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 |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
110 octave_value |
16696
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
111 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
|
112 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
|
113 bool auto_add) |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
114 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
115 std::size_t skip = 0; |
16696
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
116 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
|
117 |
18314
06eb893b9db6
Implement subsref overloading in classdef.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18305
diff
changeset
|
118 // 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
|
119 // 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
|
120 // 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
|
121 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
122 octave::cdef_class cls = m_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
|
123 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
124 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
|
125 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
126 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
|
127 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
128 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
|
129 { |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
130 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
|
131 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
132 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
|
133 |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
134 count++; |
26757
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
135 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
|
136 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
137 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
|
138 |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
139 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
|
140 } |
17d806c3f7cd
fix overloaded classdef subsasgn with curly braces (bug #55223, bug #54783)
S?bastien Villemot <sebastien@debian.org>
parents:
26525
diff
changeset
|
141 } |
16696
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
142 |
30346
91c6288781ba
maint: Shorten some long lines in libinterp to <= 80 characters (bug #57599)
Rik <rik@octave.org>
parents:
30259
diff
changeset
|
143 retval = m_object.subsref (type, idx, 1, skip, |
91c6288781ba
maint: Shorten some long lines in libinterp to <= 80 characters (bug #57599)
Rik <rik@octave.org>
parents:
30259
diff
changeset
|
144 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
|
145 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
146 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
|
147 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
|
148 |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
149 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
|
150 } |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
151 |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
152 octave_value |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
153 octave_classdef::subsasgn (const std::string& type, |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
154 const std::list<octave_value_list>& idx, |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
155 const octave_value& rhs) |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
156 { |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
157 octave_value retval; |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
158 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
159 octave::cdef_class cls = m_object.get_class (); |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
160 |
26525
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26449
diff
changeset
|
161 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
|
162 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
163 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
|
164 |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
165 if (meth.ok ()) |
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 octave_value_list args; |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
168 |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
169 args(1) = make_idx_args (type, idx, "subsasgn"); |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
170 |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
171 count++; |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
172 args(0) = octave_value (this); |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
173 args(2) = rhs; |
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 octave_value_list retlist; |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
176 |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
177 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
|
178 |
21885
0806871e3e1e
maint: Prefer is_empty() rather than "length () == 0".
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
179 if (retlist.empty ()) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
180 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
|
181 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
182 retval = retlist(0); |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
183 } |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
184 } |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
185 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
186 if (! retval.is_defined ()) |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
187 retval = m_object.subsasgn (type, idx, rhs); |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
188 |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
189 return retval; |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
190 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
191 |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
192 octave_value |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
193 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
|
194 const std::list<octave_value_list>& idx, |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
195 const octave_value& rhs) |
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 if (type.length () == 1 && type[0] == '(') |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
198 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
199 m_object = m_object.make_array (); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
200 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
201 return subsasgn (type, idx, rhs); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
202 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
203 else |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
204 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
|
205 |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
206 return octave_value (); |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
207 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
208 |
28072
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
209 Matrix |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
210 octave_classdef::size (void) |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
211 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
212 octave::cdef_class cls = m_object.get_class (); |
28072
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 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
|
215 { |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
216 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
|
217 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
218 if (meth.ok ()) |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
219 { |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
220 count++; |
28072
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
221 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
|
222 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
223 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
|
224 if (lv.length () <= 0 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
225 || ! 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
|
226 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
|
227 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
228 return lv(0).matrix_value (); |
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 } |
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 return octave_base_value::size (); |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
233 } |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
234 |
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 octave_idx_type |
26922
072d0610cc56
avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents:
26778
diff
changeset
|
236 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
|
237 { |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
238 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
|
239 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
240 octave::cdef_class cls = m_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
|
241 |
26525
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26449
diff
changeset
|
242 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
|
243 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
244 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
|
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 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
|
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 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
|
249 |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
250 count++; |
24802
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
251 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
|
252 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
253 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
|
254 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
|
255 |
29314
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
256 // Temporarily set lvalue list of current statement to NULL, to avoid |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
257 // using that list for the execution of the method "numel" |
31105
670a0d878af1
eliminate WHO arguments from interpreter-private functions
John W. Eaton <jwe@octave.org>
parents:
30888
diff
changeset
|
258 octave::interpreter& interp = octave::__get_interpreter__ (); |
29314
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
259 octave::tree_evaluator& tw = interp.get_evaluator(); |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
260 |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
261 octave::unwind_action act ([&tw] (const std::list<octave::octave_lvalue> *lvl) |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
262 { |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
263 tw.set_lvalue_list (lvl); |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
264 }, tw.lvalue_list ()); |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
265 tw.set_lvalue_list (nullptr); |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
266 |
24802
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
267 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
|
268 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
|
269 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
|
270 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
271 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
|
272 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
273 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
|
274 } |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
275 } |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
276 |
26922
072d0610cc56
avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents:
26778
diff
changeset
|
277 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
|
278 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
279 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
|
280 } |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
281 |
18416
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
282 void |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
283 octave_classdef::print (std::ostream& os, bool) |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
284 { |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
285 print_raw (os); |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
286 } |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
287 |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
288 void |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
289 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
|
290 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
291 octave::cdef_class cls = m_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
|
292 |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
293 if (cls.ok ()) |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
294 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
295 bool is_array = m_object.is_array (); |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
296 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
297 increment_indent_level (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
298 |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
299 indent (os); |
29893
421e4913d8a4
print "object" not "m_object" for default classdef object display (bug #60938)
John W. Eaton <jwe@octave.org>
parents:
29655
diff
changeset
|
300 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
|
301 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
|
302 os << " array"; |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
303 os << " with properties:"; |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
304 newline (os); |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
305 if (! Vcompact_format) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
306 newline (os); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
307 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
308 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
|
309 |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
310 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
|
311 = 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
|
312 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
313 std::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
|
314 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
|
315 { |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
316 // 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
|
317 // 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
|
318 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
319 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
|
320 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
321 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
|
322 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
323 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
|
324 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
325 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
|
326 continue; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
327 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
328 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
|
329 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
330 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
|
331 continue; |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
332 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
333 std::size_t sz = nm.size (); |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
334 |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
335 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
|
336 max_len = sz; |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
337 } |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
338 |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
339 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
|
340 { |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
341 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
|
342 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
343 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
|
344 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
345 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
|
346 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
347 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
|
348 continue; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
349 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
350 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
|
351 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
352 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
|
353 continue; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
354 |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
355 indent (os); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
356 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
357 if (is_array) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
358 os << " " << nm; |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
359 else |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
360 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
361 octave_value val = prop.get_value (m_object, false); |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
362 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
|
363 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
364 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
|
365 if (val.is_string ()) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
366 os << val.string_value (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
367 else if (val.islogical ()) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
368 os << val.bool_value (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
369 else |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
370 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
|
371 } |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
372 |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
373 newline (os); |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
374 } |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
375 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
376 decrement_indent_level (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
377 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
|
378 } |
18416
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
379 } |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
380 |
19103
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
381 bool |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
382 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
|
383 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
384 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
|
385 |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
386 if (cls.ok ()) |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
387 return is_superclass (cls, m_object.get_class ()); |
19103
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
388 |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
389 return false; |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
390 } |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
391 |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
392 octave_value |
26718
9b0335f4bc74
revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
393 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
|
394 const std::string& cls) |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
395 { |
26718
9b0335f4bc74
revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
396 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
|
397 } |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
398 |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
399 octave_value |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
400 octave_classdef::metaclass_query (const std::string& cls) |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
401 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
402 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
|
403 } |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
404 |
28438
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
405 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
|
406 { |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
407 bool retval = false; |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
408 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
409 if (m_object.is_method ()) |
28438
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
410 { |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
411 if (cname.empty ()) |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
412 retval = true; |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
413 else |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
414 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
415 octave::cdef_method meth (m_object); |
28438
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
416 |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
417 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
|
418 } |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
419 } |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
420 |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
421 return retval; |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
422 } |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
423 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
424 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
|
425 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
426 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
|
427 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
428 if (m_object.is_class ()) |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
429 { |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
430 if (cname.empty ()) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
431 retval = true; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
432 else |
25367
0548e32e6b27
call delete method correctly for handle class objects (bug #53844)
John W. Eaton <jwe@octave.org>
parents:
25319
diff
changeset
|
433 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
434 octave::cdef_class cls (m_object); |
19184
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
435 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
436 if (cls.get_name () == cname) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
437 retval = true; |
19184
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
438 } |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
439 } |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
440 |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
441 return retval; |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
442 } |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
443 |
28514
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
444 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
|
445 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
446 if (m_object.is_class ()) |
28514
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
447 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
448 octave::cdef_class cls (m_object); |
28514
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 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
|
451 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
|
452 |
28515
49f4d7814760
find help for not-yet-loaded classdef methods defined in @DIR files.
John W. Eaton <jwe@octave.org>
parents:
28514
diff
changeset
|
453 octave::cdef_method cdef_meth = cls.find_method (meth_name); |
28514
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
454 |
28515
49f4d7814760
find help for not-yet-loaded classdef methods defined in @DIR files.
John W. Eaton <jwe@octave.org>
parents:
28514
diff
changeset
|
455 if (cdef_meth.ok ()) |
49f4d7814760
find help for not-yet-loaded classdef methods defined in @DIR files.
John W. Eaton <jwe@octave.org>
parents:
28514
diff
changeset
|
456 return cdef_meth.get_doc_string (); |
28514
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
457 } |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
458 |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
459 return ""; |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
460 } |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
461 |
30259
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
462 std::string octave_classdef_meta::file_name (void) const |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
463 { |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
464 if (m_object.is_class ()) |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
465 { |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
466 octave::cdef_class cls (m_object); |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
467 |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
468 return cls.file_name (); |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
469 } |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
470 |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
471 return ""; |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
472 } |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
473 |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
474 octave_value_list |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28072
diff
changeset
|
475 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
|
476 int nargout, |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28072
diff
changeset
|
477 const octave_value_list& idx) |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
478 { |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
479 octave_value_list retval; |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
480 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
481 std::string meth_name; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
482 bool in_constructor; |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
483 octave::cdef_class ctx; |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
484 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
485 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
|
486 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
487 if (! ctx.ok ()) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
488 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
|
489 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
490 std::string mname = m_method_name; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
491 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
|
492 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
493 // 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
|
494 // pkg.class names. |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
495 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
496 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
|
497 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
498 if (in_constructor) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
499 { |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
500 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
|
501 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
|
502 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
|
503 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
504 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
|
505 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
|
506 mname.c_str ()); |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
507 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
508 octave_value sym = tw.varval (mname); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
509 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
510 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
|
511 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
512 retval(0) = sym; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
513 } |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
514 else |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
515 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
516 std::size_t pos = mname.find ('.'); |
16692
b9833510355d
Add object array property indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16691
diff
changeset
|
517 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
518 octave::cdef_object obj; |
16692
b9833510355d
Add object array property indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16691
diff
changeset
|
519 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
520 if (pos != std::string::npos) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
521 { |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
522 // We are looking at obj.meth. |
16692
b9833510355d
Add object array property indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16691
diff
changeset
|
523 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
524 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
|
525 mname = mname.substr (pos + 1); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
526 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
527 octave_value tval = tw.varval (oname); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
528 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
529 // 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
|
530 // 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
|
531 // |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
532 // function meth (obj, ...) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
533 // obj.meth@superclass (...) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
534 // |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
535 // 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
|
536 // 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
|
537 // 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
|
538 // way to perform that check? |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
539 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
540 if (tval.is_classdef_object ()) |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
541 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
542 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
|
543 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
544 obj = cdobj->get_object (); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
545 } |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
546 } |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
547 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
548 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
|
549 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
|
550 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
|
551 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
552 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
|
553 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
|
554 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
|
555 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
556 // I see 2 possible implementations here: |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
557 // 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
|
558 // context; this avoids duplicating code, but |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
559 // 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
|
560 // 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
|
561 // 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
|
562 // 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
|
563 // assumption of 1) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
564 // 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
|
565 // 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
|
566 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
567 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
|
568 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
569 if (! meth.ok ()) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
570 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
|
571 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
|
572 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
573 retval = (obj.ok () |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
574 ? 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
|
575 : 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
|
576 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
577 |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
578 return retval; |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
579 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
580 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
581 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
|
582 const std::string& nm) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
583 { |
27208
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27188
diff
changeset
|
584 octave_function *of = tw.current_function (); |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
585 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
586 if (of->is_classdef_constructor ()) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
587 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
588 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
|
589 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
590 if (uf) |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
591 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
592 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
|
593 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
594 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
|
595 return (ret_list->front ()->name () == nm); |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
596 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
597 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
598 |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
599 return false; |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
600 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
601 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29893
diff
changeset
|
602 OCTAVE_NAMESPACE_BEGIN |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29893
diff
changeset
|
603 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
604 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
|
605 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
606 @deftypefn {} {@var{pkg} =} __meta_get_package__ (@var{pkg_name}) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
607 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
|
608 @end deftypefn */) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
609 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
610 if (args.length () != 1) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
611 print_usage (); |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
612 |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
613 std::string cname = args(0).xstring_value ("PKG_NAME must be a string"); |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
614 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
615 return to_ov (lookup_package (cname)); |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
616 } |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
617 |
20946 | 618 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
|
619 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
620 @deftypefn {} {@var{metaclass_obj} =} metaclass (obj) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
621 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
|
622 @end deftypefn */) |
15897
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
623 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
624 if (args.length () != 1) |
15897
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
625 print_usage (); |
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
626 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
627 cdef_object obj = to_cdef (args(0)); |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
628 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
629 return to_ov (obj.get_class ()); |
15897
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
630 } |
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
631 |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
632 // 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
|
633 // 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
|
634 // 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
|
635 // simple wrapper. |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
636 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
637 DEFUN (properties, args, nargout, |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
638 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
639 @deftypefn {} {} properties (@var{obj}) |
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
640 @deftypefnx {} {} properties (@var{class_name}) |
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
641 @deftypefnx {} {@var{proplist} =} properties (@dots{}) |
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
642 Display or return the public properties for the classdef object @var{obj} or |
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
643 the named class @var{class_name}. |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
644 |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
645 If an output value is requested, return the list of property names in a cell |
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
646 array. |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
647 |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
648 Programming Note: Property names are returned if the @code{GetAccess} attribute |
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
649 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
|
650 @seealso{methods} |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
651 @end deftypefn */) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
652 { |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
653 if (args.length () != 1) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
654 print_usage (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
655 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
656 octave_value arg = args(0); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
657 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
658 std::string class_name; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
659 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
660 if (arg.isobject ()) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
661 class_name = arg.class_name (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
662 else if (arg.is_string ()) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
663 class_name = arg.string_value (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
664 else |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
665 err_wrong_type_arg ("properties", arg); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
666 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
667 cdef_class cls; |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
668 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
669 cls = lookup_class (class_name, false, true); |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
670 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
671 if (! cls.ok ()) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
672 error ("invalid class: %s", class_name.c_str ()); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
673 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
674 std::map<std::string, cdef_property> property_map = |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
675 cls.get_property_map (); |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
676 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
677 std::list<std::string> property_names; |
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 for (const auto& pname_prop : property_map) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
680 { |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
681 // 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
|
682 // 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
|
683 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
684 const cdef_property& prop = pname_prop.second; |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
685 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
686 std::string nm = prop.get_name (); |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
687 |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
688 octave_value acc = prop.get ("GetAccess"); |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
689 |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
690 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
|
691 continue; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
692 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
693 octave_value hid = prop.get ("Hidden"); |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
694 |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
695 if (hid.bool_value ()) |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
696 continue; |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
697 |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
698 property_names.push_back (nm); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
699 } |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
700 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
701 if (nargout > 0) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
702 return octave_value (Cell (string_vector (property_names))); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
703 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
704 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
|
705 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
706 for (const auto& nm : property_names) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
707 octave_stdout << " " << nm << "\n"; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
708 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
709 octave_stdout << std::endl; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
710 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
711 return octave_value (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
712 } |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
713 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
714 /* |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
715 %!assert (properties ("inputParser"), |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
716 %! {"CaseSensitive"; "FunctionName"; "KeepUnmatched"; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
717 %! "Parameters"; "PartialMatching"; "Results"; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
718 %! "StructExpand"; "Unmatched"; "UsingDefaults"}); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
719 */ |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
720 |
26724
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
721 // 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
|
722 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
723 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
|
724 doc: /* -*- texinfo -*- |
30888
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
725 @deftypefn {} {@var{mtds} =} __methods__ (@var{obj}) |
32d2b6604a9f
doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents:
30565
diff
changeset
|
726 @deftypefnx {} {@var{mtds} =} __methods__ ("classname") |
26724
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
727 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
|
728 @seealso{methods} |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
729 @end deftypefn */) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
730 { |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
731 // 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
|
732 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
|
733 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
734 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
|
735 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
736 if (arg.isobject ()) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
737 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
|
738 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
|
739 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
|
740 else |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
741 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
|
742 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
743 string_vector sv; |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
744 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
745 cdef_class cls = 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
|
746 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
747 if (cls.ok ()) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
748 { |
31174
fb1c7c8a030b
Fix duplicate names displayed with mixed @class/classdef classes (Bug #62802)
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
749 // Find methods for classdef objects. |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
750 std::map<std::string, cdef_method> method_map |
26950
fbb318c371db
methods: return classdef constructors in list (bug #55858)
John W. Eaton <jwe@octave.org>
parents:
26922
diff
changeset
|
751 = 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
|
752 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
753 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
|
754 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
755 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
|
756 { |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
757 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
|
758 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
759 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
|
760 } |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
761 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
762 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
|
763 } |
31174
fb1c7c8a030b
Fix duplicate names displayed with mixed @class/classdef classes (Bug #62802)
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
764 else |
fb1c7c8a030b
Fix duplicate names displayed with mixed @class/classdef classes (Bug #62802)
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
765 { |
fb1c7c8a030b
Fix duplicate names displayed with mixed @class/classdef classes (Bug #62802)
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
766 // Find methods for legacy @CLASS objects. |
fb1c7c8a030b
Fix duplicate names displayed with mixed @class/classdef classes (Bug #62802)
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
767 load_path& lp = interp.get_load_path (); |
26724
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
768 |
31174
fb1c7c8a030b
Fix duplicate names displayed with mixed @class/classdef classes (Bug #62802)
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
769 sv = string_vector (lp.methods (class_name)); |
fb1c7c8a030b
Fix duplicate names displayed with mixed @class/classdef classes (Bug #62802)
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
770 } |
26724
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
771 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
772 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
|
773 } |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
774 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29893
diff
changeset
|
775 OCTAVE_NAMESPACE_END |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29893
diff
changeset
|
776 |