Skip to content

Commit 8fabd88

Browse files
committed
Move generateSetter and generateGetter methods to Struct class
1 parent 699f4d5 commit 8fabd88

File tree

2 files changed

+40
-38
lines changed

2 files changed

+40
-38
lines changed

bindgen/ir/Struct.cpp

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,6 @@
77
Field::Field(std::string name, std::shared_ptr<Type> type)
88
: TypeAndName(std::move(name), std::move(type)) {}
99

10-
std::string Field::generateSetter(int fieldIndex) {
11-
std::string setter = handleReservedWords(getName(), "_=");
12-
std::string parameterType = type->str();
13-
std::string value = "value";
14-
if (isAliasForType<ArrayType>(type.get()) ||
15-
isAliasForType<Struct>(type.get())) {
16-
parameterType = "native.Ptr[" + parameterType + "]";
17-
value = "!" + value;
18-
}
19-
std::stringstream s;
20-
s << " def " << setter << "(value: " + parameterType + "): Unit = !p._"
21-
<< std::to_string(fieldIndex + 1) << " = " << value;
22-
return s.str();
23-
}
24-
25-
std::string Field::generateGetter(int fieldIndex) {
26-
std::string getter = handleReservedWords(getName());
27-
std::string returnType = type->str();
28-
std::string methodBody;
29-
if (isAliasForType<ArrayType>(type.get()) ||
30-
isAliasForType<Struct>(type.get())) {
31-
returnType = "native.Ptr[" + returnType + "]";
32-
methodBody = "p._" + std::to_string(fieldIndex + 1);
33-
} else {
34-
methodBody = "!p._" + std::to_string(fieldIndex + 1);
35-
}
36-
std::stringstream s;
37-
s << " def " << getter << ": " << returnType << " = " << methodBody;
38-
return s.str();
39-
}
40-
4110
StructOrUnion::StructOrUnion(std::string name,
4211
std::vector<std::shared_ptr<Field>> fields,
4312
std::shared_ptr<Location> location)
@@ -101,11 +70,11 @@ std::string Struct::generateHelperClass() const {
10170
s << " implicit class " << type << "_ops(val p: native.Ptr[" << type
10271
<< "])"
10372
<< " extends AnyVal {\n";
104-
int fieldIndex = 0;
73+
unsigned fieldIndex = 0;
10574
for (const auto &field : fields) {
10675
if (!field->getName().empty()) {
107-
s << field->generateGetter(fieldIndex) << "\n";
108-
s << field->generateSetter(fieldIndex) << "\n";
76+
s << generateGetter(fieldIndex) << "\n";
77+
s << generateSetter(fieldIndex) << "\n";
10978
}
11079
fieldIndex++;
11180
}
@@ -158,6 +127,39 @@ bool Struct::operator==(const Type &other) const {
158127
return false;
159128
}
160129

130+
std::string Struct::generateSetter(unsigned fieldIndex) const {
131+
std::shared_ptr<Field> field = fields[fieldIndex];
132+
std::string setter = handleReservedWords(field->getName(), "_=");
133+
std::string parameterType = field->getType()->str();
134+
std::string value = "value";
135+
if (isAliasForType<ArrayType>(field->getType().get()) ||
136+
isAliasForType<Struct>(field->getType().get())) {
137+
parameterType = "native.Ptr[" + parameterType + "]";
138+
value = "!" + value;
139+
}
140+
std::stringstream s;
141+
s << " def " << setter << "(value: " + parameterType + "): Unit = !p._"
142+
<< std::to_string(fieldIndex + 1) << " = " << value;
143+
return s.str();
144+
}
145+
146+
std::string Struct::generateGetter(unsigned fieldIndex) const {
147+
std::shared_ptr<Field> field = fields[fieldIndex];
148+
std::string getter = handleReservedWords(field->getName());
149+
std::string returnType = field->getType()->str();
150+
std::string methodBody;
151+
if (isAliasForType<ArrayType>(field->getType().get()) ||
152+
isAliasForType<Struct>(field->getType().get())) {
153+
returnType = "native.Ptr[" + returnType + "]";
154+
methodBody = "p._" + std::to_string(fieldIndex + 1);
155+
} else {
156+
methodBody = "!p._" + std::to_string(fieldIndex + 1);
157+
}
158+
std::stringstream s;
159+
s << " def " << getter << ": " << returnType << " = " << methodBody;
160+
return s.str();
161+
}
162+
161163
Union::Union(std::string name, std::vector<std::shared_ptr<Field>> fields,
162164
uint64_t maxSize, std::shared_ptr<Location> location)
163165
: StructOrUnion(std::move(name), std::move(fields), std::move(location)),

bindgen/ir/Struct.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@
1212
class Field : public TypeAndName {
1313
public:
1414
Field(std::string name, std::shared_ptr<Type> type);
15-
16-
std::string generateSetter(int fieldIndex);
17-
18-
std::string generateGetter(int fieldIndex);
1915
};
2016

2117
class StructOrUnion {
@@ -66,6 +62,10 @@ class Struct : public StructOrUnion,
6662

6763
bool operator==(const Type &other) const override;
6864

65+
std::string generateSetter(unsigned fieldIndex) const;
66+
67+
std::string generateGetter(unsigned fieldIndex) const;
68+
6969
private:
7070
/* type size is needed if number of fields is bigger than 22 */
7171
uint64_t typeSize;

0 commit comments

Comments
 (0)