Skip to content

Commit 8d1277d

Browse files
committed
mpgen refactor: add AccessorType function
This doesn't change generated code at all, just noves functionality out of Generate method into a helper method so it can be reused in the next commit.
1 parent db716bb commit 8d1277d

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

src/mp/gen.cpp

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,28 @@ struct FieldList
206206
}
207207
};
208208

209+
std::string AccessorType(kj::StringPtr base_name, const Field& field)
210+
{
211+
const auto& f = field.param_is_set ? field.param : field.result;
212+
const auto field_name = f.getProto().getName();
213+
const auto field_type = f.getType();
214+
215+
std::ostringstream out;
216+
out << "Accessor<" << base_name << "_fields::" << Cap(field_name) << ", ";
217+
if (!field.param_is_set) {
218+
out << "FIELD_OUT";
219+
} else if (field.result_is_set) {
220+
out << "FIELD_IN | FIELD_OUT";
221+
} else {
222+
out << "FIELD_IN";
223+
}
224+
if (field.optional) out << " | FIELD_OPTIONAL";
225+
if (field.requested) out << " | FIELD_REQUESTED";
226+
if (BoxedType(field_type)) out << " | FIELD_BOXED";
227+
out << ">";
228+
return out.str();
229+
}
230+
209231
// src_file is path to .capnp file to generate stub code from.
210232
//
211233
// src_prefix can be used to generate outputs in a different directory than the
@@ -539,20 +561,6 @@ static void Generate(kj::StringPtr src_prefix,
539561

540562
const auto& f = field.param_is_set ? field.param : field.result;
541563
auto field_name = f.getProto().getName();
542-
auto field_type = f.getType();
543-
544-
std::ostringstream field_flags;
545-
if (!field.param_is_set) {
546-
field_flags << "FIELD_OUT";
547-
} else if (field.result_is_set) {
548-
field_flags << "FIELD_IN | FIELD_OUT";
549-
} else {
550-
field_flags << "FIELD_IN";
551-
}
552-
if (field.optional) field_flags << " | FIELD_OPTIONAL";
553-
if (field.requested) field_flags << " | FIELD_REQUESTED";
554-
if (BoxedType(field_type)) field_flags << " | FIELD_BOXED";
555-
556564
add_accessor(field_name);
557565

558566
std::ostringstream fwd_args;
@@ -579,8 +587,7 @@ static void Generate(kj::StringPtr src_prefix,
579587
client_invoke << "MakeClientParam<";
580588
}
581589

582-
client_invoke << "Accessor<" << base_name << "_fields::" << Cap(field_name) << ", "
583-
<< field_flags.str() << ">>(";
590+
client_invoke << AccessorType(base_name, field) << ">(";
584591

585592
if (field.retval) {
586593
client_invoke << field_name;
@@ -596,8 +603,7 @@ static void Generate(kj::StringPtr src_prefix,
596603
} else {
597604
server_invoke_start << "MakeServerField<" << field.args;
598605
}
599-
server_invoke_start << ", Accessor<" << base_name << "_fields::" << Cap(field_name) << ", "
600-
<< field_flags.str() << ">>(";
606+
server_invoke_start << ", " << AccessorType(base_name, field) << ">(";
601607
server_invoke_end << ")";
602608
}
603609

0 commit comments

Comments
 (0)