Mercurial > octave
annotate libinterp/octave-value/ov-vm.h @ 32151:72dcb1cef2c9
maint: Strip trailing whitespace from source files.
Modified files: NEWS.8.md, file-editor-tab.cc, call-stack.cc,
compile.cc, perms.cc, stack-frame.cc, ov-base.cc, ov-fcn-handle.cc,
ov-fcn-handle.h, ov-fcn.cc, ov-oncleanup.h, ov-range.cc, ov-range.h,
ov-ref.cc, ov-ref.h, ov-scalar.h, ov-struct.cc, ov-vm.h,
pt-bytecode-vm-internal.h, pt-bytecode-vm.cc, pt-bytecode-vm.h,
pt-bytecode-walk.cc, pt-eval.cc, isuniform.m, inputParser.m, xlim.m,
ylim.m, zlim.m, movfun.m, std.m, var.m, isstrprop.m, bench.m,
bench.py, bytecode.tst, bytecode_anon_handles.m, bytecode_cell.m,
bytecode_dountil.m, bytecode_end.m, bytecode_errors.m,
bytecode_eval_1.m, bytecode_for.m, bytecode_global_1.m, bytecode_if.m,
bytecode_leaks.m, bytecode_matrix.m, bytecode_multi_assign.m,
bytecode_persistant.m, bytecode_range.m, bytecode_trycatch.m,
bytecode_unwind.m, bytecode_while.m, bytecode_disp.m,
bytecode_disp.tst, parser.tst.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 19 Jun 2023 23:21:41 -0400 |
parents | 994b527e0ffe |
children | 4d6615bca5b4 |
rev | line source |
---|---|
32144
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
2 // |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
3 // Copyright (C) 1996-2023 The Octave Project Developers |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
4 // |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
7 // |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
8 // This file is part of Octave. |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
9 // |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
13 // (at your option) any later version. |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
14 // |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
18 // GNU General Public License for more details. |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
19 // |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
23 // |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
25 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
26 #if ! defined (octave_ov_vm_h) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
27 #define octave_ov_vm_h 1 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
28 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
29 #include "octave-config.h" |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
30 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
31 #include "ov.h" |
32150
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
32 #include "load-path.h" |
32144
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
33 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
34 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
35 // octave_value_vm is to be used only by the VM |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
36 // and need to have the same bit representation as |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
37 // an octave_value. |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
38 // |
32151
72dcb1cef2c9
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
32150
diff
changeset
|
39 // A octave_value_vm object might not be assigned |
32144
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
40 // to itself or have a nullptr m_rep when being |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
41 // assigned to. |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
42 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
43 class octave_value_vm |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
44 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
45 public: |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
46 octave_value_vm () |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
47 : m_rep (octave_value::nil_rep ()) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
48 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
49 m_rep->m_count++; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
50 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
51 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
52 octave_value_vm (octave_base_value *rep, bool count_add1 = true) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
53 : m_rep (rep) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
54 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
55 if (count_add1) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
56 m_rep->m_count++; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
57 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
58 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
59 octave_value_vm (const octave_value_vm& a) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
60 : m_rep (a.m_rep) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
61 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
62 m_rep->m_count++; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
63 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
64 octave_value_vm (const octave_value& a) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
65 : m_rep (a.m_rep) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
66 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
67 m_rep->m_count++; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
68 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
69 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
70 octave_value_vm (octave_value_vm&& a) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
71 : m_rep (a.m_rep) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
72 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
73 a.m_rep = nullptr; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
74 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
75 octave_value_vm (octave_value&& a) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
76 : m_rep (a.m_rep) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
77 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
78 a.m_rep = nullptr; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
79 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
80 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
81 ~octave_value_vm () __attribute__ ((always_inline)) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
82 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
83 // Because we define a move constructor and a move assignment |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
84 // operator, rep may be a nullptr here. We should only need to |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
85 // protect the move assignment operator in a similar way. |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
86 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
87 if (m_rep && --m_rep->m_count == 0) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
88 delete m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
89 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
90 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
91 octave_value_vm& operator = (const octave_value_vm& a) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
92 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
93 if (--m_rep->m_count == 0) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
94 delete m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
95 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
96 m_rep = a.m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
97 m_rep->m_count++; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
98 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
99 return *this; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
100 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
101 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
102 octave_value_vm& operator = (octave_value_vm&& a) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
103 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
104 if (--m_rep->m_count == 0) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
105 delete m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
106 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
107 m_rep = a.m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
108 a.m_rep = nullptr; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
109 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
110 return *this; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
111 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
112 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
113 octave_value_vm& operator = (octave_value&& a) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
114 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
115 if (--m_rep->m_count == 0) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
116 delete m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
117 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
118 m_rep = a.m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
119 a.m_rep = nullptr; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
120 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
121 return *this; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
122 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
123 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
124 static void release_rep (octave_base_value *rep) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
125 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
126 if (--rep->m_count == 0) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
127 delete rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
128 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
129 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
130 void steal_ov_rep (octave_value &&ov) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
131 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
132 if (m_rep && --m_rep->m_count == 0) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
133 delete m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
134 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
135 m_rep = ov.m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
136 ov.m_rep = nullptr; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
137 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
138 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
139 octave_base_value & get_rep () { return *m_rep; } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
140 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
141 octave_value_vm& operator = (octave_base_value *rep) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
142 { |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
143 if (--m_rep->m_count == 0) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
144 delete m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
145 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
146 m_rep = rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
147 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
148 return *this; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
149 } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
150 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
151 bool vm_need_dispatch_push () __attribute__ ((pure, always_inline, nothrow)) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
152 { return m_rep->vm_need_dispatch_push (); } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
153 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
154 bool vm_need_dispatch_assign_rhs () __attribute__ ((pure, always_inline, nothrow)) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
155 { return m_rep->vm_need_dispatch_assign_rhs (); } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
156 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
157 bool vm_need_dispatch_assign_lhs () __attribute__ ((pure, always_inline, nothrow)) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
158 { return m_rep->vm_need_dispatch_assign_lhs (); } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
159 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
160 int type_id() const __attribute__ ((pure, always_inline, nothrow)) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
161 { return m_rep->type_id (); } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
162 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
163 bool is_matrix_type () const __attribute__ ((pure, always_inline, nothrow)) |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
164 { return m_rep->is_matrix_type (); } |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
165 |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
166 octave_base_value *m_rep; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
167 }; |
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
168 |
32150
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
169 class |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
170 octave_cached_value : public octave_base_value |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
171 { |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
172 public: |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
173 |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
174 octave_cached_value () |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
175 { |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
176 m_n_updated = octave::load_path::get_weak_n_updated (); |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
177 } |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
178 |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
179 void set_cached_obj (octave_value cache_obj) |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
180 { |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
181 m_cached_object = cache_obj; |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
182 } |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
183 |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
184 octave_value get_cached_value () |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
185 { |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
186 return m_cached_object; |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
187 } |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
188 |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
189 bool cache_is_valid () |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
190 { |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
191 return m_n_updated == octave::load_path::get_weak_n_updated () && m_cached_object.is_defined (); |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
192 } |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
193 |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
194 bool is_defined () const { return true; } |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
195 |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
196 |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
197 private: |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
198 |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
199 octave_value m_cached_object; |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
200 octave_idx_type m_n_updated = 0; |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
201 }; |
994b527e0ffe
update to VM patch from June 7 2023
Petter T. <petter.vilhelm@gmail.com>
parents:
32144
diff
changeset
|
202 |
32144
a36ba266f4eb
new octave_value class that disallows self-assignment
Petter T. <petter.vilhelm@gmail.com>
parents:
diff
changeset
|
203 #endif |