}
void CProxyBodyGen::GenInterfaceDef(std::ofstream& stream,
- const Interface& iface) {
- for (const auto& d : iface.GetDeclarations()) {
- if (d->GetMethodType() != Declaration::MethodType::DELEGATE)
- continue;
+ const Interface& iface) {
+ for (const auto& d : iface.GetDeclarations()) {
+ if (d->GetMethodType() != Declaration::MethodType::DELEGATE) continue;
GenInterfaceDelegateDef(stream, iface, *d);
}
- GenInterfaceBaseDef(stream, iface);
+ GenInterfaceBaseDef(stream, iface);
}
// @see #CB_INTERFACE_DELEGATE_DEF
if (d->GetMethodType() != Declaration::MethodType::DELEGATE)
continue;
- enums += GetHandlePrefix() + "_" + iface.GetID() + "_DELEGATE_" + d->GetID();
+ enums +=
+ GetHandlePrefix() + "_" + iface.GetID() + "_DELEGATE_" + d->GetID();
enums += " = " + std::to_string(num++) + ",";
enums += NLine(1);
}
std::string code;
for (const auto& p : decl.GetParameters()) {
auto& param_type = p->GetParameterType();
- if (param_type.GetDirection() != ParameterType::Direction::IN)
+ if (param_type.GetDirection() == ParameterType::Direction::OUT)
continue;
+ std::string param_name =
+ param_type.GetDirection() == ParameterType::Direction::REF
+ ? "*" + p->GetID() : p->GetID();
std::string parcel_write_code;
auto& type = param_type.GetBaseType();
if (IsDelegateType(iface, type) ||
p->GetID());
std::string name = GetFullNameFromType(type, iface);
parcel_write_code += GetPrivateSharingString(type, iface, "h->port",
- p->GetID());
+ param_name);
} else if (type.ToString() == "bundle") {
parcel_write_code = ReplaceAll(CB_INTERFACE_METHOD_BUNDLE_PARCEL_WRITE,
- "<ARG>", p->GetID());
+ "<ARG>", param_name);
} else if (type.ToString() == "string") {
parcel_write_code = ReplaceAll(CB_INTERFACE_METHOD_STRING_PARCEL_WRITE,
- "<ARG>", p->GetID());
+ "<ARG>", "STRING_GET(" + param_name + ")");
} else if (type.ToString() == "file") {
parcel_write_code = ReplaceAll(CB_INTERFACE_METHOD_STRING_PARCEL_WRITE,
- "<ARG>", p->GetID());
+ "<ARG>", param_name);
parcel_write_code += GetPrivateSharingString(type, iface, "h->port",
- p->GetID());
+ param_name);
} else {
parcel_write_code = ReplaceAll(CB_INTERFACE_METHOD_BASE_PARCEL_WRITE,
"<PARCEL_TYPE>", GetParcelType(type));
parcel_write_code = ReplaceAll(parcel_write_code, "<ARG>",
- p->GetID());
+ param_name);
}
code += parcel_write_code;
std::string args_code;
for (const auto& p : decl.GetParameters()) {
auto& param_type = p->GetParameterType();
- if (param_type.GetDirection() != ParameterType::Direction::OUT)
+ if (param_type.GetDirection() == ParameterType::Direction::IN)
continue;
auto& type = param_type.GetBaseType();
std::string parcel_read_code;
for (const auto& p : decl.GetParameters()) {
auto& param_type = p->GetParameterType();
- if (param_type.GetDirection() != ParameterType::Direction::OUT)
+ if (param_type.GetDirection() == ParameterType::Direction::IN)
continue;
auto& type = param_type.GetBaseType();