|
|
@ -27,7 +27,7 @@ void SingularMessage::InMsgImpl(Context<FieldDescriptor> field) const { |
|
|
|
{"prefix", prefix}, |
|
|
|
{"prefix", prefix}, |
|
|
|
{"field", field.desc().name()}, |
|
|
|
{"field", field.desc().name()}, |
|
|
|
{"getter_thunk", Thunk(field, "get")}, |
|
|
|
{"getter_thunk", Thunk(field, "get")}, |
|
|
|
{"getter_mut_thunk", Thunk(field, "get_mut")}, |
|
|
|
{"getter_mut_thunk", Thunk(field, "mutable")}, |
|
|
|
{"clearer_thunk", Thunk(field, "clear")}, |
|
|
|
{"clearer_thunk", Thunk(field, "clear")}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
"view_body", |
|
|
|
"view_body", |
|
|
@ -59,17 +59,10 @@ void SingularMessage::InMsgImpl(Context<FieldDescriptor> field) const { |
|
|
|
[&] { |
|
|
|
[&] { |
|
|
|
if (field.is_upb()) { |
|
|
|
if (field.is_upb()) { |
|
|
|
field.Emit({}, R"rs( |
|
|
|
field.Emit({}, R"rs( |
|
|
|
let submsg_opt = unsafe { $getter_thunk$(self.inner.msg) }; |
|
|
|
let submsg = unsafe { |
|
|
|
match submsg_opt { |
|
|
|
$getter_mut_thunk$(self.inner.msg, self.inner.arena.raw()) |
|
|
|
None => { |
|
|
|
}; |
|
|
|
$prefix$Mut::new($pbi$::Private, |
|
|
|
|
|
|
|
&mut self.inner, |
|
|
|
|
|
|
|
$pbr$::ScratchSpace::zeroed_block($pbi$::Private)) |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
Some(submsg) => { |
|
|
|
|
|
|
|
$prefix$Mut::new($pbi$::Private, &mut self.inner, submsg) |
|
|
|
$prefix$Mut::new($pbi$::Private, &mut self.inner, submsg) |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
)rs"); |
|
|
|
)rs"); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
field.Emit({}, R"rs( |
|
|
|
field.Emit({}, R"rs( |
|
|
@ -98,8 +91,22 @@ void SingularMessage::InExternC(Context<FieldDescriptor> field) const { |
|
|
|
field.Emit( |
|
|
|
field.Emit( |
|
|
|
{ |
|
|
|
{ |
|
|
|
{"getter_thunk", Thunk(field, "get")}, |
|
|
|
{"getter_thunk", Thunk(field, "get")}, |
|
|
|
{"getter_mut_thunk", Thunk(field, "get_mut")}, |
|
|
|
{"getter_mut_thunk", Thunk(field, "mutable")}, |
|
|
|
{"clearer_thunk", Thunk(field, "clear")}, |
|
|
|
{"clearer_thunk", Thunk(field, "clear")}, |
|
|
|
|
|
|
|
{"getter_mut", |
|
|
|
|
|
|
|
[&] { |
|
|
|
|
|
|
|
if (field.is_cpp()) { |
|
|
|
|
|
|
|
field.Emit( |
|
|
|
|
|
|
|
R"rs( |
|
|
|
|
|
|
|
fn $getter_mut_thunk$(raw_msg: $pbi$::RawMessage) |
|
|
|
|
|
|
|
-> $pbi$::RawMessage;)rs"); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
field.Emit( |
|
|
|
|
|
|
|
R"rs(fn $getter_mut_thunk$(raw_msg: $pbi$::RawMessage, |
|
|
|
|
|
|
|
arena: $pbi$::RawArena) |
|
|
|
|
|
|
|
-> $pbi$::RawMessage;)rs"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}}, |
|
|
|
{"ReturnType", |
|
|
|
{"ReturnType", |
|
|
|
[&] { |
|
|
|
[&] { |
|
|
|
if (field.is_cpp()) { |
|
|
|
if (field.is_cpp()) { |
|
|
@ -114,7 +121,7 @@ void SingularMessage::InExternC(Context<FieldDescriptor> field) const { |
|
|
|
}, |
|
|
|
}, |
|
|
|
R"rs( |
|
|
|
R"rs( |
|
|
|
fn $getter_thunk$(raw_msg: $pbi$::RawMessage) -> $ReturnType$; |
|
|
|
fn $getter_thunk$(raw_msg: $pbi$::RawMessage) -> $ReturnType$; |
|
|
|
fn $getter_mut_thunk$(raw_msg: $pbi$::RawMessage) -> $ReturnType$; |
|
|
|
$getter_mut$ |
|
|
|
fn $clearer_thunk$(raw_msg: $pbi$::RawMessage); |
|
|
|
fn $clearer_thunk$(raw_msg: $pbi$::RawMessage); |
|
|
|
)rs"); |
|
|
|
)rs"); |
|
|
|
} |
|
|
|
} |
|
|
@ -123,7 +130,7 @@ void SingularMessage::InThunkCc(Context<FieldDescriptor> field) const { |
|
|
|
field.Emit({{"QualifiedMsg", |
|
|
|
field.Emit({{"QualifiedMsg", |
|
|
|
cpp::QualifiedClassName(field.desc().containing_type())}, |
|
|
|
cpp::QualifiedClassName(field.desc().containing_type())}, |
|
|
|
{"getter_thunk", Thunk(field, "get")}, |
|
|
|
{"getter_thunk", Thunk(field, "get")}, |
|
|
|
{"getter_mut_thunk", Thunk(field, "get_mut")}, |
|
|
|
{"getter_mut_thunk", Thunk(field, "mutable")}, |
|
|
|
{"clearer_thunk", Thunk(field, "clear")}, |
|
|
|
{"clearer_thunk", Thunk(field, "clear")}, |
|
|
|
{"field", cpp::FieldName(&field.desc())}}, |
|
|
|
{"field", cpp::FieldName(&field.desc())}}, |
|
|
|
R"cc( |
|
|
|
R"cc( |
|
|
|