diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2019-04-11 23:04:13 +0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2019-04-11 23:04:13 +0200 |
commit | bb6e6923f25841874b6a915d234d884ddd4c92dd (patch) | |
tree | db1483219b801816e0923d6c800fdac1d6db751e /src/libexpr | |
parent | 41ba5135e0a2d9940c4e8cbedff44eb1a47af782 (diff) |
Add environment variable NIX_SHOW_SYMBOLS for dumping the symbol table
Diffstat (limited to 'src/libexpr')
-rw-r--r-- | src/libexpr/eval.cc | 6 | ||||
-rw-r--r-- | src/libexpr/symbol-table.hh | 7 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index 211f7a55f..d8e10d9f2 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -1811,6 +1811,7 @@ void EvalState::printStats() gc.attr("totalBytes", totalBytes); } #endif + if (countCalls) { { auto obj = topObj.object("primops"); @@ -1846,6 +1847,11 @@ void EvalState::printStats() } } } + + if (getEnv("NIX_SHOW_SYMBOLS", "0") != "0") { + auto list = topObj.list("symbols"); + symbols.dump([&](const std::string & s) { list.elem(s); }); + } } } diff --git a/src/libexpr/symbol-table.hh b/src/libexpr/symbol-table.hh index 44929f7ee..91faea122 100644 --- a/src/libexpr/symbol-table.hh +++ b/src/libexpr/symbol-table.hh @@ -75,6 +75,13 @@ public: } size_t totalSize() const; + + template<typename T> + void dump(T callback) + { + for (auto & s : symbols) + callback(s); + } }; } |