| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- // This file is distributed under the BSD License.
- // See "license.txt" for details.
- // Copyright 2009-2012, Jonathan Turner ([email protected])
- // Copyright 2009-2017, Jason Turner ([email protected])
- // http://www.chaiscript.com
- #ifndef CHAISCRIPT_TRACER_HPP_
- #define CHAISCRIPT_TRACER_HPP_
- namespace chaiscript {
- namespace eval {
- struct Noop_Tracer_Detail
- {
- template<typename T>
- void trace(const chaiscript::detail::Dispatch_State &, const AST_Node_Impl<T> *)
- {
- }
- };
- template<typename ... T>
- struct Tracer : T...
- {
- Tracer() = default;
- explicit Tracer(T ... t)
- : T(std::move(t))...
- {
- }
- void do_trace(const chaiscript::detail::Dispatch_State &ds, const AST_Node_Impl<Tracer<T...>> *node) {
- (void)std::initializer_list<int>{ (static_cast<T&>(*this).trace(ds, node), 0)... };
- }
- 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);
- }
- };
- typedef Tracer<Noop_Tracer_Detail> Noop_Tracer;
- }
- }
- #endif
|