Skip to content

Commit c4e4f46

Browse files
committed
Rewrite function properties functions to operate on the properties_t
This makes function_properties_ref_t not const, in order to work around cxx - I'm assuming google/autocxx#799 / dtolnay/cxx#850
1 parent ef34ef5 commit c4e4f46

File tree

2 files changed

+21
-31
lines changed

2 files changed

+21
-31
lines changed

src/function.cpp

+12-24
Original file line numberDiff line numberDiff line change
@@ -165,37 +165,25 @@ function_properties_ref_t function_get_props(const wcstring &name) {
165165
return function_set.acquire()->get_props(name);
166166
}
167167

168-
wcstring function_get_definition_file(const wcstring &name, parser_t &parser) {
169-
auto props = function_get_props_autoload(name, parser);
170-
if (!props || !props->definition_file) return L"";
171-
return *props->definition_file;
168+
wcstring function_get_definition_file(const function_properties_t &props) {
169+
return props.definition_file ? *props.definition_file : L"";
172170
}
173171

174-
wcstring function_get_copy_definition_file(const wcstring &name, parser_t &parser) {
175-
auto props = function_get_props_autoload(name, parser);
176-
if (!props || !props->copy_definition_file) return L"";
177-
return *props->copy_definition_file;
172+
wcstring function_get_copy_definition_file(const function_properties_t &props) {
173+
return props.copy_definition_file ? *props.copy_definition_file : L"";
178174
}
179-
bool function_is_copy(const wcstring &name, parser_t &parser) {
180-
auto props = function_get_props_autoload(name, parser);
181-
if (!props) return false;
182-
return props->is_copy;
175+
bool function_is_copy(const function_properties_t &props) {
176+
return props.is_copy;
183177
}
184-
int function_get_definition_lineno(const wcstring &name, parser_t &parser) {
185-
auto props = function_get_props_autoload(name, parser);
186-
if (!props) return 0;
187-
return props->definition_lineno();
178+
int function_get_definition_lineno(const function_properties_t &props) {
179+
return props.definition_lineno();
188180
}
189-
int function_get_copy_definition_lineno(const wcstring &name, parser_t &parser) {
190-
auto props = function_get_props_autoload(name, parser);
191-
if (!props) return 0;
192-
return props->copy_definition_lineno;
181+
int function_get_copy_definition_lineno(const function_properties_t &props) {
182+
return props.copy_definition_lineno;
193183
}
194184

195-
wcstring function_get_annotated_definition(const wcstring &name, parser_t &parser) {
196-
auto props = function_get_props_autoload(name, parser);
197-
if (!props) return L"";
198-
return props->annotated_definition(name);
185+
wcstring function_get_annotated_definition(const function_properties_t &props, const wcstring &name) {
186+
return props.annotated_definition(name);
199187
}
200188

201189
function_properties_ref_t function_get_props_autoload(const wcstring &name, parser_t &parser) {

src/function.h

+9-7
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ struct function_properties_t {
6767
wcstring annotated_definition(const wcstring &name) const;
6868
};
6969

70-
using function_properties_ref_t = std::shared_ptr<const function_properties_t>;
70+
// FIXME: Morally, this is const, but cxx doesn't get it
71+
using function_properties_ref_t = std::shared_ptr<function_properties_t>;
7172

7273
/// Add a function. This may mutate \p props to set is_autoload.
7374
void function_add(wcstring name, std::shared_ptr<function_properties_t> props);
@@ -78,12 +79,13 @@ void function_remove(const wcstring &name);
7879
/// \return the properties for a function, or nullptr if none. This does not trigger autoloading.
7980
function_properties_ref_t function_get_props(const wcstring &name);
8081

81-
wcstring function_get_definition_file(const wcstring &name, parser_t &parser);
82-
wcstring function_get_copy_definition_file(const wcstring &name, parser_t &parser);
83-
bool function_is_copy(const wcstring &name, parser_t &parser);
84-
int function_get_definition_lineno(const wcstring &name, parser_t &parser);
85-
int function_get_copy_definition_lineno(const wcstring &name, parser_t &parser);
86-
wcstring function_get_annotated_definition(const wcstring &name, parser_t &parser);
82+
/// Guff to work around cxx not getting function_properties_t.
83+
wcstring function_get_definition_file(const function_properties_t &props);
84+
wcstring function_get_copy_definition_file(const function_properties_t &props);
85+
bool function_is_copy(const function_properties_t &props);
86+
int function_get_definition_lineno(const function_properties_t &props);
87+
int function_get_copy_definition_lineno(const function_properties_t &props);
88+
wcstring function_get_annotated_definition(const function_properties_t &props, const wcstring &name);
8789

8890
/// \return the properties for a function, or nullptr if none, perhaps triggering autoloading.
8991
function_properties_ref_t function_get_props_autoload(const wcstring &name, parser_t &parser);

0 commit comments

Comments
 (0)