From 77b458bee513e4d5816df6b0bf96ed75774d6a12 Mon Sep 17 00:00:00 2001 From: smillius <37065579+smillius@users.noreply.github.com> Date: Mon, 5 Mar 2018 17:44:14 +0100 Subject: [PATCH] Make nested flatbuffer lookup consistent. (#4656) Lookup type of nested flatbuffer field with either raw name or fully qualified name as already done in the parser. LookupCreateStruct tries both the raw name and the fully qualified one. Without this, we cannot reference types outside of the current namespace, e.g. in a different module. --- src/idl_gen_cpp.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 30bec096b..de19219ea 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -1687,9 +1687,13 @@ class CppGenerator : public BaseGenerator { auto nested = field.attributes.Lookup("nested_flatbuffer"); if (nested) { - std::string qualified_name = - parser_.current_namespace_->GetFullyQualifiedName(nested->constant); - auto nested_root = parser_.LookupStruct(qualified_name); + std::string qualified_name = nested->constant; + auto nested_root = parser_.LookupStruct(nested->constant); + if (nested_root == nullptr) { + qualified_name = parser_.current_namespace_->GetFullyQualifiedName( + nested->constant); + nested_root = parser_.LookupStruct(qualified_name); + } assert(nested_root); // Guaranteed to exist by parser. (void)nested_root; code_.SetValue("CPP_NAME", TranslateNameSpace(qualified_name));