mirror of https://github.com/YosysHQ/yosys.git
kernel/log: Add log_str helper for custom log_* functions/overloads
When implementing custom log_... functions or custom overloads for the core log functions like log_signal it is necessary to return `char *` that are valid long enough. The log_... functions implemented in log.cc use either `log_id_cache` or `string_buf` which both are cleared on log_pop. This commit adds a public `log_str` function which stores its argument in the `log_id_cache` and returns the stored copy, such that custom log functions outside of log.cc can also create strings that remain valid until the next `log_pop`.
This commit is contained in:
parent
0922142567
commit
c73c8a39cf
|
@ -662,6 +662,16 @@ const char *log_id(const RTLIL::IdString &str)
|
||||||
return p+1;
|
return p+1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *log_str(const char *str)
|
||||||
|
{
|
||||||
|
log_id_cache.push_back(strdup(str));
|
||||||
|
return log_id_cache.back();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *log_str(std::string const &str) {
|
||||||
|
return log_str(str.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
void log_module(RTLIL::Module *module, std::string indent)
|
void log_module(RTLIL::Module *module, std::string indent)
|
||||||
{
|
{
|
||||||
std::stringstream buf;
|
std::stringstream buf;
|
||||||
|
|
|
@ -206,6 +206,8 @@ void log_check_expected();
|
||||||
const char *log_signal(const RTLIL::SigSpec &sig, bool autoint = true);
|
const char *log_signal(const RTLIL::SigSpec &sig, bool autoint = true);
|
||||||
const char *log_const(const RTLIL::Const &value, bool autoint = true);
|
const char *log_const(const RTLIL::Const &value, bool autoint = true);
|
||||||
const char *log_id(const RTLIL::IdString &id);
|
const char *log_id(const RTLIL::IdString &id);
|
||||||
|
const char *log_str(const char *str);
|
||||||
|
const char *log_str(std::string const &str);
|
||||||
|
|
||||||
template<typename T> static inline const char *log_id(T *obj, const char *nullstr = nullptr) {
|
template<typename T> static inline const char *log_id(T *obj, const char *nullstr = nullptr) {
|
||||||
if (nullstr && obj == nullptr)
|
if (nullstr && obj == nullptr)
|
||||||
|
|
Loading…
Reference in New Issue