Mercurial > octave
annotate libinterp/octave-value/ov-classdef.cc @ 30259:03ff3f1020cf
store file name in classdef class object
* ov-classdef.h, ov-classdef.cc (octave_classdef_meta::file_name):
New function.
* pt-classdef.h, pt-classdef.cc (tree_classdef::m_file_name):
New data member.
(tree_classdef::tree_classdef): Also accept file name in constructor
argument list.
(tree_classdef::file_name): New function.
* oct-parse.yy (base_parser::make_classdef): Store full file name in
created tree_classdef object.
* cdef-class.h, cdef-class.cc (cdef_class_rep::file_name,
cdef_class::file_name): New functions.
(cdef_class:make_meta_class): Store file name in returned class object.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 30 Oct 2021 09:45:23 -0400 |
parents | c789e728d57a |
children | 91c6288781ba 796f54d4ddbf |
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 // |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
29314
diff
changeset
|
3 // Copyright (C) 2012-2021 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 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
143 retval = m_object.subsref (type, idx, 1, skip, octave::cdef_class (), auto_add); |
16696
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
144 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
145 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
|
146 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
|
147 |
665fa0f621cc
Support combination of object array extension and multi-level indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16695
diff
changeset
|
148 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
|
149 } |
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 octave_value |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
152 octave_classdef::subsasgn (const std::string& type, |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
153 const std::list<octave_value_list>& idx, |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
154 const octave_value& rhs) |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
155 { |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
156 octave_value retval; |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
157 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
158 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
|
159 |
26525
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26449
diff
changeset
|
160 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
|
161 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
162 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
|
163 |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
164 if (meth.ok ()) |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
165 { |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
166 octave_value_list args; |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
167 |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
168 args(1) = make_idx_args (type, idx, "subsasgn"); |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
169 |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
170 count++; |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
171 args(0) = octave_value (this); |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
172 args(2) = rhs; |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
173 |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
174 octave_value_list retlist; |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
175 |
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
176 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
|
177 |
21885
0806871e3e1e
maint: Prefer is_empty() rather than "length () == 0".
Rik <rik@octave.org>
parents:
21751
diff
changeset
|
178 if (retlist.empty ()) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
179 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
|
180 |
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
181 retval = retlist(0); |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
182 } |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
183 } |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
184 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
185 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
|
186 retval = m_object.subsasgn (type, idx, rhs); |
18382
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
187 |
6e3344111522
Implement subsasgn overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18355
diff
changeset
|
188 return retval; |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
189 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
190 |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
191 octave_value |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
192 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
|
193 const std::list<octave_value_list>& idx, |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
194 const octave_value& rhs) |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
195 { |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
196 if (type.length () == 1 && type[0] == '(') |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
197 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
198 m_object = m_object.make_array (); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
199 |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
200 return subsasgn (type, idx, rhs); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
201 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
202 else |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
203 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
|
204 |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
205 return octave_value (); |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
206 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
207 |
28072
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
208 Matrix |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
209 octave_classdef::size (void) |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
210 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
211 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
|
212 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
213 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
|
214 { |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
215 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
|
216 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
217 if (meth.ok ()) |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
218 { |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
219 count++; |
28072
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
220 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
|
221 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
222 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
|
223 if (lv.length () <= 0 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
224 || ! 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
|
225 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
|
226 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
227 return lv(0).matrix_value (); |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
228 } |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
229 } |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
230 |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
231 return octave_base_value::size (); |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
232 } |
47238792de58
provide default size method for classdef objects
John W. Eaton <jwe@octave.org>
parents:
27932
diff
changeset
|
233 |
24802
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
234 octave_idx_type |
26922
072d0610cc56
avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents:
26778
diff
changeset
|
235 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
|
236 { |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
237 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
|
238 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
239 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
|
240 |
26525
0d3eca5955dc
Backed out changeset 920a4ad8043b (bug #54995)
John W. Eaton <jwe@octave.org>
parents:
26449
diff
changeset
|
241 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
|
242 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
243 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
|
244 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
245 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
|
246 { |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
247 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
|
248 |
30139
c789e728d57a
Backed out changeset 938794bc82b7
John W. Eaton <jwe@octave.org>
parents:
30133
diff
changeset
|
249 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
|
250 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
|
251 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
252 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
|
253 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
|
254 |
29314
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
255 // 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
|
256 // using that list for the execution of the method "numel" |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
257 octave::interpreter& interp = octave::__get_interpreter__ ("octave_classdef::xnumel"); |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
258 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
|
259 |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
260 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
|
261 { |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
262 tw.set_lvalue_list (lvl); |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
263 }, tw.lvalue_list ()); |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
264 tw.set_lvalue_list (nullptr); |
67857e94604a
Temporarily set lvalue list to null (bug #59704).
Fernando Alvarruiz <feralber@upvnet.upv.es>
parents:
28515
diff
changeset
|
265 |
24802
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
266 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
|
267 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
|
268 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
|
269 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
270 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
|
271 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
272 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
|
273 } |
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 |
26922
072d0610cc56
avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents:
26778
diff
changeset
|
276 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
|
277 |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
278 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
|
279 } |
7605e06a50d5
tie octave_classdef::numel method to "numel" user override method (bug #46571)
Sébastien Villemot <sebastien@debian.org>
parents:
23219
diff
changeset
|
280 |
18416
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
281 void |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
282 octave_classdef::print (std::ostream& os, bool) |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
283 { |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
284 print_raw (os); |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
285 } |
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 void |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
288 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
|
289 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
290 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
|
291 |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
292 if (cls.ok ()) |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
293 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
294 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
|
295 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
296 increment_indent_level (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
297 |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
298 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
|
299 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
|
300 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
|
301 os << " array"; |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
302 os << " with properties:"; |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
303 newline (os); |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
304 if (! Vcompact_format) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
305 newline (os); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
306 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
307 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
|
308 |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
309 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
|
310 = 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
|
311 |
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
|
312 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
|
313 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
|
314 { |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
315 // 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
|
316 // 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
|
317 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
318 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
|
319 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
320 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
|
321 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
322 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
|
323 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
324 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
|
325 continue; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
326 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
327 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
|
328 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
329 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
|
330 continue; |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
331 |
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
|
332 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
|
333 |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
334 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
|
335 max_len = sz; |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
336 } |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
337 |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
338 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
|
339 { |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
340 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
|
341 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
342 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
|
343 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
344 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
|
345 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
346 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
|
347 continue; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
348 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
349 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
|
350 |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
351 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
|
352 continue; |
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
353 |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
354 indent (os); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
355 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
356 if (is_array) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
357 os << " " << nm; |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
358 else |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
359 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
360 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
|
361 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
|
362 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
363 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
|
364 if (val.is_string ()) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
365 os << val.string_value (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
366 else if (val.islogical ()) |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
367 os << val.bool_value (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
368 else |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
369 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
|
370 } |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
371 |
26749
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
372 newline (os); |
2c4ad1958cab
display property names and info by default for classdef objects
John W. Eaton <jwe@octave.org>
parents:
26745
diff
changeset
|
373 } |
27072
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
374 |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
375 decrement_indent_level (); |
1ccb40372115
fix printing of object arrays broken by changeset 2c4ad1958cab
John W. Eaton <jwe@octave.org>
parents:
27000
diff
changeset
|
376 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
|
377 } |
18416
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
378 } |
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18397
diff
changeset
|
379 |
19103
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
380 bool |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
381 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
|
382 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
383 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
|
384 |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
385 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
|
386 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
|
387 |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
388 return false; |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
389 } |
56bc1464ec59
Implement "isa" for classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19031
diff
changeset
|
390 |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
391 octave_value |
26718
9b0335f4bc74
revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
392 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
|
393 const std::string& cls) |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
394 { |
26718
9b0335f4bc74
revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
395 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
|
396 } |
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 octave_value |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
399 octave_classdef::metaclass_query (const std::string& cls) |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
400 { |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
401 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
|
402 } |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
403 |
28438
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
404 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
|
405 { |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
406 bool retval = false; |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
407 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
408 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
|
409 { |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
410 if (cname.empty ()) |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
411 retval = true; |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
412 else |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
413 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
414 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
|
415 |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
416 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
|
417 } |
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 return retval; |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
421 } |
55f82d23fe5e
new octave_classdef_meta::is_classdef_method function
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
422 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
423 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
|
424 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
425 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
|
426 |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
427 if (m_object.is_class ()) |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
428 { |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
429 if (cname.empty ()) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
430 retval = true; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
431 else |
25367
0548e32e6b27
call delete method correctly for handle class objects (bug #53844)
John W. Eaton <jwe@octave.org>
parents:
25319
diff
changeset
|
432 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
433 octave::cdef_class cls (m_object); |
19184
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
434 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
435 if (cls.get_name () == cname) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
436 retval = true; |
19184
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
437 } |
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 return retval; |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
441 } |
e0a7718ac085
Implement calling "struct" on classdef objects.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
19103
diff
changeset
|
442 |
28514
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
443 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
|
444 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
445 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
|
446 { |
29466
7c8a70e4daad
use "m_" prefix for class members in a few more classes
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
447 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
|
448 |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
449 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
|
450 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
|
451 |
28515
49f4d7814760
find help for not-yet-loaded classdef methods defined in @DIR files.
John W. Eaton <jwe@octave.org>
parents:
28514
diff
changeset
|
452 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
|
453 |
28515
49f4d7814760
find help for not-yet-loaded classdef methods defined in @DIR files.
John W. Eaton <jwe@octave.org>
parents:
28514
diff
changeset
|
454 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
|
455 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
|
456 } |
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 return ""; |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
459 } |
fab862fedf85
allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents:
28438
diff
changeset
|
460 |
30259
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
461 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
|
462 { |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
463 if (m_object.is_class ()) |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
464 { |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
465 octave::cdef_class cls (m_object); |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
466 |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
467 return cls.file_name (); |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
468 } |
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 return ""; |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
471 } |
03ff3f1020cf
store file name in classdef class object
John W. Eaton <jwe@octave.org>
parents:
30139
diff
changeset
|
472 |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
473 octave_value_list |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28072
diff
changeset
|
474 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
|
475 int nargout, |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28072
diff
changeset
|
476 const octave_value_list& idx) |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
477 { |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
478 octave_value_list retval; |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
479 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
480 std::string meth_name; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
481 bool in_constructor; |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
482 octave::cdef_class ctx; |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
483 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
484 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
|
485 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
486 if (! ctx.ok ()) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
487 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
|
488 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
489 std::string mname = m_method_name; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
490 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
|
491 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
492 // 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
|
493 // pkg.class names. |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
494 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
495 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
|
496 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
497 if (in_constructor) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
498 { |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
499 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
|
500 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
|
501 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
|
502 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
503 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
|
504 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
|
505 mname.c_str ()); |
20563
c1a6c31ac29a
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20542
diff
changeset
|
506 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
507 octave_value sym = tw.varval (mname); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
508 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
509 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
|
510 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
511 retval(0) = sym; |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
512 } |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
513 else |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
514 { |
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
|
515 std::size_t pos = mname.find ('.'); |
16692
b9833510355d
Add object array property indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16691
diff
changeset
|
516 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
517 octave::cdef_object obj; |
16692
b9833510355d
Add object array property indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16691
diff
changeset
|
518 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
519 if (pos != std::string::npos) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
520 { |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
521 // We are looking at obj.meth. |
16692
b9833510355d
Add object array property indexing.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
16691
diff
changeset
|
522 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
523 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
|
524 mname = mname.substr (pos + 1); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
525 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
526 octave_value tval = tw.varval (oname); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
527 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
528 // 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
|
529 // 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
|
530 // |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
531 // function meth (obj, ...) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
532 // obj.meth@superclass (...) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
533 // |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
534 // 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
|
535 // 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
|
536 // 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
|
537 // way to perform that check? |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
538 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
539 if (tval.is_classdef_object ()) |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
540 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
541 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
|
542 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
543 obj = cdobj->get_object (); |
15913
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
544 } |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
545 } |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
546 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
547 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
|
548 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
|
549 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
|
550 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
551 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
|
552 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
|
553 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
|
554 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
555 // I see 2 possible implementations here: |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
556 // 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
|
557 // context; this avoids duplicating code, but |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
558 // 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
|
559 // 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
|
560 // 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
|
561 // 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
|
562 // assumption of 1) |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
563 // 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
|
564 // 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
|
565 |
26774
568c2ab2782d
move classdef classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
26772
diff
changeset
|
566 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
|
567 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
568 if (! meth.ok ()) |
27216
823b4bcf79fc
unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
569 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
|
570 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
|
571 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
572 retval = (obj.ok () |
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
573 ? 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
|
574 : 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
|
575 } |
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 return retval; |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
578 } |
8521321604df
Initial support for object array semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15911
diff
changeset
|
579 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
580 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
|
581 const std::string& nm) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
582 { |
27208
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27188
diff
changeset
|
583 octave_function *of = tw.current_function (); |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
584 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
585 if (of->is_classdef_constructor ()) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
586 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
587 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
|
588 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
589 if (uf) |
20979
0963ed389012
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
590 { |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
591 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
|
592 |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26758
diff
changeset
|
593 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
|
594 return (ret_list->front ()->name () == nm); |
15869
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
595 } |
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 return false; |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
599 } |
5e5705b3e505
Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15841
diff
changeset
|
600 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29893
diff
changeset
|
601 OCTAVE_NAMESPACE_BEGIN |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29893
diff
changeset
|
602 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
603 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
|
604 doc: /* -*- texinfo -*- |
22299
9fc91bb2aec3
doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents:
22297
diff
changeset
|
605 @deftypefn {} {} __meta_get_package__ () |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
606 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
|
607 @end deftypefn */) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
608 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
609 if (args.length () != 1) |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
610 print_usage (); |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
611 |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
612 std::string cname = args(0).xstring_value ("PACKAGE_NAME must be a string"); |
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
613 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
614 return to_ov (lookup_package (cname)); |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
615 } |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
616 |
20946 | 617 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
|
618 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
619 @deftypefn {} {} metaclass (obj) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
620 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
|
621 @end deftypefn */) |
15897
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
622 { |
20797
492738d32c60
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20743
diff
changeset
|
623 if (args.length () != 1) |
15897
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
624 print_usage (); |
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
625 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
626 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
|
627 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
628 return to_ov (obj.get_class ()); |
15897
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
629 } |
a413c6fe1726
Add metaclass function.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
15896
diff
changeset
|
630 |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
631 // 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
|
632 // 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
|
633 // 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
|
634 // simple wrapper. |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
635 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
636 DEFUN (properties, args, nargout, |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
637 doc: /* -*- texinfo -*- |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
638 @deftypefn {} {} properties (@var{class_name}) |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
639 @deftypefnx {} {} properties (@var{obj}) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
640 @deftypefnx {} {@var{plist} =} properties (@dots{}) |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
641 Return or display the public properties for the named class |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
642 @var{class_name} or classdef object @var{obj}. |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
643 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
644 If an output value is requested, return the list of property names in a |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
645 cell array. |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
646 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
647 Programming Note: Property names are returned if the @code{GetAccess} |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
648 attribute is public and if the @code{Hidden} attribute is false. |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
649 @seealso{methods} |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
650 @end deftypefn */) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
651 { |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
652 if (args.length () != 1) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
653 print_usage (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
654 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
655 octave_value arg = args(0); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
656 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
657 std::string class_name; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
658 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
659 if (arg.isobject ()) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
660 class_name = arg.class_name (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
661 else if (arg.is_string ()) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
662 class_name = arg.string_value (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
663 else |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
664 err_wrong_type_arg ("properties", arg); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
665 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
666 cdef_class cls; |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
667 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
668 cls = lookup_class (class_name, false, true); |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
669 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
670 if (! cls.ok ()) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
671 error ("invalid class: %s", class_name.c_str ()); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
672 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
673 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
|
674 cls.get_property_map (); |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
675 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
676 std::list<std::string> property_names; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
677 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
678 for (const auto& pname_prop : property_map) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
679 { |
27188
792fe198c105
don't print hidden or protected/private classdef properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27186
diff
changeset
|
680 // 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
|
681 // 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
|
682 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
683 const cdef_property& prop = pname_prop.second; |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
684 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
685 std::string nm = prop.get_name (); |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
686 |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
687 octave_value acc = prop.get ("GetAccess"); |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
688 |
26778
8cad08868ffd
Return help text for properties() function (bug #55764).
Rik <rik@octave.org>
parents:
26774
diff
changeset
|
689 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
|
690 continue; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
691 |
27186
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
692 octave_value hid = prop.get ("Hidden"); |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
693 |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
694 if (hid.bool_value ()) |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
695 continue; |
b15b71bcd679
properties function: omit hidden properties (bug #55766)
John W. Eaton <jwe@octave.org>
parents:
27072
diff
changeset
|
696 |
26723
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
697 property_names.push_back (nm); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
698 } |
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 if (nargout > 0) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
701 return octave_value (Cell (string_vector (property_names))); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
702 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
703 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
|
704 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
705 for (const auto& nm : property_names) |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
706 octave_stdout << " " << nm << "\n"; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
707 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
708 octave_stdout << std::endl; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
709 |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
710 return octave_value (); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
711 } |
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 %!assert (properties ("inputParser"), |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
715 %! {"CaseSensitive"; "FunctionName"; "KeepUnmatched"; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
716 %! "Parameters"; "PartialMatching"; "Results"; |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
717 %! "StructExpand"; "Unmatched"; "UsingDefaults"}); |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
718 */ |
259953dac9b8
implement properties function (bug #53614)
John W. Eaton <jwe@octave.org>
parents:
26719
diff
changeset
|
719 |
26724
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
720 // 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
|
721 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
722 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
|
723 doc: /* -*- texinfo -*- |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
724 @deftypefn {} {} __methods__ (@var{x}) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
725 @deftypefnx {} {} __methods__ ("classname") |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
726 Internal function. |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
727 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
728 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
|
729 @seealso{methods} |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
730 @end deftypefn */) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
731 { |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
732 // 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
|
733 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
|
734 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
735 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
|
736 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
737 if (arg.isobject ()) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
738 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
|
739 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
|
740 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
|
741 else |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
742 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
|
743 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
744 string_vector sv; |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
745 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
746 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
|
747 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
748 if (cls.ok ()) |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
749 { |
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 } |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
764 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
765 // The following will also find methods for legacy @CLASS objects. |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
766 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
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 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
769 sv.append (lp.methods (class_name)); |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
770 |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
771 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
|
772 } |
84355b7b9521
allow methods function to work for classdef objects (bug #42510)
John W. Eaton <jwe@octave.org>
parents:
26723
diff
changeset
|
773 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29893
diff
changeset
|
774 OCTAVE_NAMESPACE_END |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29893
diff
changeset
|
775 |
15036
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
776 /* |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
777 ;;; Local Variables: *** |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
778 ;;; mode: C++ *** |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
779 ;;; End: *** |
aa1f9e479c6e
octave_value classdef objects
Michael Goffioul <michael.goffioul@gmail.com>
parents:
diff
changeset
|
780 */ |