Mercurial > octave
annotate libinterp/corefcn/symrec.h @ 30091:7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Replace "static const" variables with an enum for clarity. Change
enum type to "unsigned short" to use only 1 byte rather than 4 bytes.
* symrec.h: Remove "static const unsigned int" class variables "local",
"formal", "added_static", and "variable". Declare enum "symrec_t" to
describe storage class of a particular symbol. Update all functions
to use new enum types.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 31 Aug 2021 11:48:20 -0700 |
parents | e2e493712818 |
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:
27923
diff
changeset
|
3 // Copyright (C) 1993-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 //////////////////////////////////////////////////////////////////////// |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
25 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
26 #if ! defined (octave_symrec_h) |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
27 #define octave_symrec_h 1 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
28 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
29 #include "octave-config.h" |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
30 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
31 #include <deque> |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
32 #include <list> |
24271
0dd6c909baa2
use shared_ptr and weak_ptr to manage symbol_record object
John W. Eaton <jwe@octave.org>
parents:
24269
diff
changeset
|
33 #include <memory> |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
34 #include <string> |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
35 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
36 class octave_user_function; |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
37 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
38 #include "ov.h" |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
39 #include "ovl.h" |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
40 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
41 namespace octave |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
42 { |
24361
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24356
diff
changeset
|
43 class symbol_scope_rep; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
44 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
45 class symbol_record |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
46 { |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
47 public: |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
48 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
49 typedef std::size_t context_id; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
50 |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
51 enum symrec_t : unsigned char |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
52 { |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
53 // generic variable |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
54 LOCAL = 1, |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
55 // formal parameter |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
56 FORMAL = 2, |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
57 // this symbol may NOT become a variable. |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
58 // (symbol added to a static workspace) |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
59 ADDED_STATIC = 4, |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
60 // this symbol was recognized as a variable from syntax |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
61 VARIABLE = 8 |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
62 }; |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
63 |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
64 private: |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
65 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
66 class symbol_record_rep |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
67 { |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
68 public: |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
69 |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
70 symbol_record_rep (const std::string& nm, symrec_t sc) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
71 : m_frame_offset (0), m_data_offset (0), m_storage_class (sc), |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
72 m_name (nm) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
73 { } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
74 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
75 symbol_record_rep (const symbol_record_rep&) = default; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
76 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
77 symbol_record_rep& operator = (const symbol_record_rep&) = default; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
78 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
79 ~symbol_record_rep (void) = default; |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
80 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
81 // FIXME: use special storage class instead? |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
82 bool is_valid (void) const { return ! m_name.empty (); } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
83 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
84 void set_frame_offset (std::size_t offset) { m_frame_offset = offset; } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
85 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
86 std::size_t frame_offset (void) const { return m_frame_offset; } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
87 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
88 void set_data_offset (std::size_t offset) { m_data_offset = offset; } |
24977
2b040946dc69
improve handling of clear for globals, forwarded symbols (bug #53027)
John W. Eaton <jwe@octave.org>
parents:
24969
diff
changeset
|
89 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
90 std::size_t data_offset (void) const { return m_data_offset; } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
91 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
92 bool is_local (void) const |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
93 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
94 return m_storage_class & LOCAL; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
95 } |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
96 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
97 bool is_formal (void) const |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
98 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
99 return m_storage_class & FORMAL; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
100 } |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
101 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
102 bool is_added_static (void) const |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
103 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
104 return m_storage_class & ADDED_STATIC; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
105 } |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
106 |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
107 bool is_variable (void) const |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
108 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
109 return m_storage_class & VARIABLE; |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
110 } |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
111 |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
112 void mark_local (void) |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
113 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
114 m_storage_class = static_cast<symrec_t> (m_storage_class | LOCAL); |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
115 } |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
116 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
117 void mark_formal (void) |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
118 { |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
119 // Formal parameters are also variables. |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
120 m_storage_class = static_cast<symrec_t> (m_storage_class |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
121 | FORMAL | VARIABLE); |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
122 } |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
123 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
124 void mark_added_static (void) |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
125 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
126 m_storage_class = static_cast<symrec_t> (m_storage_class |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
127 | ADDED_STATIC); |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
128 } |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
129 |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
130 void mark_as_variable (void) |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
131 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
132 m_storage_class = static_cast<symrec_t> (m_storage_class | VARIABLE); |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
133 } |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
134 |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
135 void unmark_local (void) |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
136 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
137 m_storage_class = static_cast<symrec_t> (m_storage_class & ~LOCAL); |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
138 } |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
139 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
140 void unmark_formal (void) |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
141 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
142 m_storage_class = static_cast<symrec_t> (m_storage_class & ~FORMAL); |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
143 } |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
144 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
145 void unmark_added_static (void) |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
146 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
147 m_storage_class = static_cast<symrec_t> (m_storage_class |
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
148 & ~ADDED_STATIC); |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
149 } |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
150 |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
151 void unmark_as_variable (void) |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
152 { |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
153 m_storage_class = static_cast<symrec_t> (m_storage_class & ~VARIABLE); |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
154 } |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
155 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
156 unsigned int storage_class (void) const { return m_storage_class; } |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
157 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
158 std::shared_ptr<symbol_record_rep> dup (void) const; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
159 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
160 octave_value dump (void) const; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
161 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
162 std::string name (void) const { return m_name; } |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
163 |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
164 void rename (const std::string& new_name) { m_name = new_name; } |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
165 |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
166 private: |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
167 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
168 std::size_t m_frame_offset; |
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
169 std::size_t m_data_offset; |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
170 |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
171 symrec_t m_storage_class; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
172 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
173 std::string m_name; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
174 }; |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
175 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
176 public: |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
177 |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
178 symbol_record (const std::string& nm = "", symrec_t sc = LOCAL) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
179 : m_rep (new symbol_record_rep (nm, sc)) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
180 { } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
181 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
182 symbol_record (const std::string& nm, const octave_value&, |
30091
7d2c9188d3f3
maint: Use enum in symrec.h for clarity.
Rik <rik@octave.org>
parents:
29864
diff
changeset
|
183 symrec_t sc = LOCAL) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
184 : m_rep (new symbol_record_rep (nm, sc)) |
24356
8b14ba8296af
refactor symbol_record object
John W. Eaton <jwe@octave.org>
parents:
24352
diff
changeset
|
185 { } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
186 |
24991
831389905438
omit argument name from default copy ctors and assignment operators
John W. Eaton <jwe@octave.org>
parents:
24982
diff
changeset
|
187 symbol_record (const symbol_record&) = default; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
188 |
24991
831389905438
omit argument name from default copy ctors and assignment operators
John W. Eaton <jwe@octave.org>
parents:
24982
diff
changeset
|
189 symbol_record& operator = (const symbol_record&) = default; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
190 |
24271
0dd6c909baa2
use shared_ptr and weak_ptr to manage symbol_record object
John W. Eaton <jwe@octave.org>
parents:
24269
diff
changeset
|
191 ~symbol_record (void) = default; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
192 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
193 bool is_valid (void) const { return m_rep->is_valid (); } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
194 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
195 explicit operator bool () const { return is_valid (); } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
196 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
197 void set_frame_offset (std::size_t offset) { m_rep->set_frame_offset (offset); } |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
198 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
199 std::size_t frame_offset (void) const { return m_rep->frame_offset (); } |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
200 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
201 void set_data_offset (std::size_t offset) { m_rep->set_data_offset (offset); } |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
202 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
203 std::size_t data_offset (void) const { return m_rep->data_offset (); } |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
204 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
205 symbol_record dup (void) const { return symbol_record (m_rep->dup ()); } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
206 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
207 std::string name (void) const { return m_rep->name (); } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
208 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
209 void rename (const std::string& new_name) { m_rep->rename (new_name); } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
210 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
211 bool is_local (void) const { return m_rep->is_local (); } |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
212 bool is_formal (void) const { return m_rep->is_formal (); } |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
213 bool is_added_static (void) const { return m_rep->is_added_static (); } |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
214 bool is_variable (void) const { return m_rep->is_variable (); } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
215 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
216 void mark_local (void) { m_rep->mark_local (); } |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
217 void mark_formal (void) { m_rep->mark_formal (); } |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
218 void mark_added_static (void) { m_rep->mark_added_static (); } |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
219 void mark_as_variable (void) { m_rep->mark_as_variable (); } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
220 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
221 void unmark_local (void) { m_rep->unmark_local (); } |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
222 void unmark_formal (void) { m_rep->unmark_formal (); } |
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
223 void unmark_added_static (void) { m_rep->unmark_added_static (); } |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
224 void unmark_as_variable (void) { m_rep->unmark_as_variable (); } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
225 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
226 unsigned int storage_class (void) const { return m_rep->storage_class (); } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
227 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
228 octave_value dump (void) const { return m_rep->dump (); } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
229 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
230 private: |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
231 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
232 std::shared_ptr<symbol_record_rep> m_rep; |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
233 |
24272
dd810f9d26e7
use m_ prefix for symbol_record class data members
John W. Eaton <jwe@octave.org>
parents:
24271
diff
changeset
|
234 // NEW_REP must be dynamically allocated or nullptr. |
24706
30e1d0bf7ade
use weak_ptr for symbol_scope_rep and symbol_record_rep pointers (bug #53092)
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
235 symbol_record (const std::shared_ptr<symbol_record_rep>& new_rep) |
30e1d0bf7ade
use weak_ptr for symbol_scope_rep and symbol_record_rep pointers (bug #53092)
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
236 : m_rep (new_rep) |
30e1d0bf7ade
use weak_ptr for symbol_scope_rep and symbol_record_rep pointers (bug #53092)
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
237 { } |
24263
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
238 }; |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
239 } |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
240 |
3b302b2890d7
disentangle symbol_record, scope, and fcn_info from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
241 #endif |