From 2ba1bb3ba7614da7d2527402e99fb59a4609f990 Mon Sep 17 00:00:00 2001 From: JosepSans Date: Tue, 21 Nov 2023 13:53:20 +0100 Subject: [PATCH] [slang-reflect] Fix more namespace issues and header prints We were still missing some namespace annotations in some parts of the generated code, and we were also missing a newline when printing the headers of the generated .h file --- tools/reflect/include/CppEmitter.h | 2 +- tools/reflect/src/SvStruct.cpp | 25 ++++++++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/tools/reflect/include/CppEmitter.h b/tools/reflect/include/CppEmitter.h index 9a14d2a76..1ee0dba1f 100644 --- a/tools/reflect/include/CppEmitter.h +++ b/tools/reflect/include/CppEmitter.h @@ -55,7 +55,7 @@ class HppFile { auto headersTransform = std::views::transform(headers, [](const auto& h) { return fmt::format("#include \"{}.h\"", h); }); - return fmt::format("// {}\n#pragma once\n\n{}{}\n\n{}", fileName, + return fmt::format("// {}\n#pragma once\n\n{}\n{}\n\n{}", fileName, fmt::join(includesTransform, "\n"), fmt::join(headersTransform, "\n"), hpp.str()); } diff --git a/tools/reflect/src/SvStruct.cpp b/tools/reflect/src/SvStruct.cpp index 864b6f25a..24264f6f2 100644 --- a/tools/reflect/src/SvStruct.cpp +++ b/tools/reflect/src/SvStruct.cpp @@ -104,8 +104,13 @@ void SvStruct::toCpp(HppFile& hppFile, std::string_view _namespace, const SvAlia const auto& value = values[i]; if (member.second.isStructOrEnum()) - hppFile.addWithIndent( - fmt::format("{} = {}({});\n", member.first, member.second.toString(), value)); + if (_namespace != member.second._namespace) + hppFile.addWithIndent(fmt::format("{} = {}::{}({});\n", member.first, + member.second._namespace, + member.second.toString(), value)); + else + hppFile.addWithIndent(fmt::format("{} = {}({});\n", member.first, + member.second.toString(), value)); else hppFile.addWithIndent(fmt::format("{} = {};\n", member.first, value)); } @@ -132,8 +137,13 @@ void SvStruct::toCpp(HppFile& hppFile, std::string_view _namespace, const SvAlia member.first); if (member.second.isStructOrEnum()) - hppFile.addWithIndent( - fmt::format("{} = {}({});\n", member.first, member.second.toString(), value)); + if (_namespace != member.second._namespace) + hppFile.addWithIndent(fmt::format("{} = {}::{}({});\n", member.first, + member.second._namespace, + member.second.toString(), value)); + else + hppFile.addWithIndent(fmt::format("{} = {}({});\n", member.first, + member.second.toString(), value)); else hppFile.addWithIndent(fmt::format("{} = {};\n", member.first, value)); } @@ -257,7 +267,12 @@ void SvStruct::toCpp(HppFile& hppFile, std::string_view _namespace, const SvAlia } if (member.second.isStructOrEnum()) - hppFile.addWithIndent(fmt::format("return {}({});\n", member.second.toString(), value)); + if (_namespace != member.second._namespace) + hppFile.addWithIndent(fmt::format("return {}::{}({});\n", member.second._namespace, + member.second.toString(), value)); + else + hppFile.addWithIndent( + fmt::format("return {}({});\n", member.second.toString(), value)); else hppFile.addWithIndent(fmt::format("return {};\n", value));