diff --git a/include/cppast/code_generator.hpp b/include/cppast/code_generator.hpp index f98d095..9e74350 100644 --- a/include/cppast/code_generator.hpp +++ b/include/cppast/code_generator.hpp @@ -379,6 +379,12 @@ namespace cppast return cur_output_.value(); } + /// \returns The entity whose code is being generated with [cppast::generate_code()](). + const cpp_entity& main_entity() const noexcept + { + return main_entity_.value(); + } + private: /// \returns The formatting options that should be used. /// The base class version has no flags set. @@ -498,7 +504,10 @@ namespace cppast do_write_token_seq(" "); } - type_safe::optional_ref cur_output_; + type_safe::optional_ref cur_output_; + type_safe::optional_ref main_entity_; + + friend bool generate_code(code_generator& generator, const cpp_entity& e); }; /// Generates code for the given entity. diff --git a/src/code_generator.cpp b/src/code_generator.cpp index 06c495a..8f54149 100644 --- a/src/code_generator.cpp +++ b/src/code_generator.cpp @@ -1099,7 +1099,10 @@ namespace bool cppast::generate_code(code_generator& generator, const cpp_entity& e) { - return generate_code_impl(generator, e, cpp_public); + generator.main_entity_ = type_safe::ref(e); + auto result = generate_code_impl(generator, e, cpp_public); + generator.main_entity_ = nullptr; + return result; } void detail::write_template_arguments(