mirror of
https://github.com/ChaiScript/ChaiScript.git
synced 2025-12-06 08:46:53 +08:00
I initially tried to use the existing .clang-format file, but it does not match the code style (at least with clang-format 11) and the formatting is not consistent across files. Therefore, I decided to rewrite the .clang-format with some personal preferences. Used command find . -iname "*.hpp" -o -iname "*.cpp" | xargs clang-format -i -style=file
38 lines
1.1 KiB
C++
38 lines
1.1 KiB
C++
// This file is distributed under the BSD License.
|
|
// See "license.txt" for details.
|
|
// Copyright 2009-2012, Jonathan Turner (jonathan@emptycrate.com)
|
|
// Copyright 2009-2018, Jason Turner (jason@emptycrate.com)
|
|
// http://www.chaiscript.com
|
|
|
|
#ifndef CHAISCRIPT_TRACER_HPP_
|
|
#define CHAISCRIPT_TRACER_HPP_
|
|
|
|
namespace chaiscript::eval {
|
|
struct Noop_Tracer_Detail {
|
|
template<typename T>
|
|
constexpr void trace(const chaiscript::detail::Dispatch_State &, const AST_Node_Impl<T> *) noexcept {
|
|
}
|
|
};
|
|
|
|
template<typename... T>
|
|
struct Tracer : T... {
|
|
Tracer() = default;
|
|
constexpr explicit Tracer(T... t)
|
|
: T(std::move(t))... {
|
|
}
|
|
|
|
void do_trace(const chaiscript::detail::Dispatch_State &ds, const AST_Node_Impl<Tracer<T...>> *node) {
|
|
(static_cast<T &>(*this).trace(ds, node), ...);
|
|
}
|
|
|
|
static void trace(const chaiscript::detail::Dispatch_State &ds, const AST_Node_Impl<Tracer<T...>> *node) {
|
|
ds->get_parser().get_tracer<Tracer<T...>>().do_trace(ds, node);
|
|
}
|
|
};
|
|
|
|
using Noop_Tracer = Tracer<Noop_Tracer_Detail>;
|
|
|
|
} // namespace chaiscript::eval
|
|
|
|
#endif
|