From b014ad68e1a782b02ed3ce71ad67cb498ebcb70a Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Mon, 5 Mar 2018 13:28:39 +0900 Subject: [PATCH] Fix bugs of c generator - Fixes a wrong indentation - Fixes wrong parameters - Fixes header generator base Change-Id: I63d7c4572e99aa78582218e3ff8bb5b713bb0251 Signed-off-by: Hwankyu Jhun --- idlc/c_gen/c_gen_base.cc | 4 ++-- idlc/c_gen/c_header_gen_base.cc | 24 ++++++++++++++++-------- idlc/c_gen/c_stub_body_gen.cc | 4 ++-- idlc/c_gen/c_stub_header_gen.cc | 2 +- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/idlc/c_gen/c_gen_base.cc b/idlc/c_gen/c_gen_base.cc index 055519b..a0f9f15 100644 --- a/idlc/c_gen/c_gen_base.cc +++ b/idlc/c_gen/c_gen_base.cc @@ -302,9 +302,9 @@ std::string CGeneratorBase::GetParamTypeString( type.ToString() == "list" || type.ToString() == "array") { if (direction == ParameterType::Direction::IN) - return "rpc_port_" + type.ToString() + "_h "; + return "rpc_port_" + GetFullNameFromType(type) + "_h "; else - return "rpc_port_" + type.ToString() + "_h *"; + return "rpc_port_" + GetFullNameFromType(type) + "_h *"; } if (type.ToString() == "string") { diff --git a/idlc/c_gen/c_header_gen_base.cc b/idlc/c_gen/c_header_gen_base.cc index 78920cd..47b6c26 100644 --- a/idlc/c_gen/c_header_gen_base.cc +++ b/idlc/c_gen/c_header_gen_base.cc @@ -52,14 +52,22 @@ void CHeaderGeneratorBase::GenExplicitLinkageClose(std::ofstream& stream) { void CHeaderGeneratorBase::GenStructures(std::ofstream& stream) { for (auto& i : GetDocument().GetBlocks()) { - if (i->GetType() != Block::TYPE_STRUCTURE) - continue; - - const Structure &st = static_cast(*i); - GenStructure(stream, st); - for (auto& j : st.GetElements().GetElms()) { - auto& t = j->GetType(); - AddStructureFromType(t); + if (i->GetType() == Block::TYPE_STRUCTURE) { + const Structure &st = static_cast(*i); + GenStructure(stream, st); + for (auto& j : st.GetElements().GetElms()) { + auto& t = j->GetType(); + AddStructureFromType(t); + } + } else { + const Interface &inf = static_cast(*i); + for (auto& d : inf.GetDeclarations().GetDecls()) { + for (auto& p : d->GetParameters().GetParams()) { + if (TypeIsDelegator(inf, p->GetParameterType().GetBaseType())) + continue; + AddStructureFromType(p->GetParameterType().GetBaseType()); + } + } } } diff --git a/idlc/c_gen/c_stub_body_gen.cc b/idlc/c_gen/c_stub_body_gen.cc index 8550724..d178f98 100644 --- a/idlc/c_gen/c_stub_body_gen.cc +++ b/idlc/c_gen/c_stub_body_gen.cc @@ -390,7 +390,7 @@ std::string CStubBodyGen::GetMethodString(const Interface& inf, if (decl.GetMethodType() == Declaration::MethodType::SYNC && decl.GetType().ToString() != "void") { - str += GetReturnTypeString(decl.GetType()) + " ret = "; + str += GetReturnTypeString(decl.GetType()) + "ret = "; } str += "context->callback." + decl.GetID() + "(context"; @@ -695,7 +695,7 @@ void CStubBodyGen::GenInterfaceDelegatorInvoker(std::ofstream& stream, str += "rpc_port_" + decl.GetID() + "_h h"; for (auto& i : decl.GetParameters().GetParams()) { str += ", "; - str += ConvertTypeToString(i->GetParameterType().GetDirection(), + str += GetParamTypeString(i->GetParameterType().GetDirection(), i->GetParameterType().GetBaseType()) + i->GetID(); } return str; diff --git a/idlc/c_gen/c_stub_header_gen.cc b/idlc/c_gen/c_stub_header_gen.cc index fe60036..d13b8f1 100644 --- a/idlc/c_gen/c_stub_header_gen.cc +++ b/idlc/c_gen/c_stub_header_gen.cc @@ -192,7 +192,7 @@ void CStubHeaderGen::GenInterfaceDelegatorInvoker( for (auto& i : decl.GetParameters().GetParams()) { str += ", "; str += GetParamTypeString(i->GetParameterType().GetDirection(), - i->GetParameterType().GetBaseType()) + " " + i->GetID(); + i->GetParameterType().GetBaseType()) + i->GetID(); } return str; } -- 2.7.4