chaiscript_tracer.hpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // This file is distributed under the BSD License.
  2. // See "license.txt" for details.
  3. // Copyright 2009-2012, Jonathan Turner ([email protected])
  4. // Copyright 2009-2017, Jason Turner ([email protected])
  5. // http://www.chaiscript.com
  6. #ifndef CHAISCRIPT_TRACER_HPP_
  7. #define CHAISCRIPT_TRACER_HPP_
  8. namespace chaiscript {
  9. namespace eval {
  10. struct Noop_Tracer_Detail
  11. {
  12. template<typename T>
  13. void trace(const chaiscript::detail::Dispatch_State &, const AST_Node_Impl<T> *)
  14. {
  15. }
  16. };
  17. template<typename ... T>
  18. struct Tracer : T...
  19. {
  20. Tracer() = default;
  21. explicit Tracer(T ... t)
  22. : T(std::move(t))...
  23. {
  24. }
  25. void do_trace(const chaiscript::detail::Dispatch_State &ds, const AST_Node_Impl<Tracer<T...>> *node) {
  26. (void)std::initializer_list<int>{ (static_cast<T&>(*this).trace(ds, node), 0)... };
  27. }
  28. static void trace(const chaiscript::detail::Dispatch_State &ds, const AST_Node_Impl<Tracer<T...>> *node) {
  29. ds->get_parser().get_tracer<Tracer<T...>>().do_trace(ds, node);
  30. }
  31. };
  32. typedef Tracer<Noop_Tracer_Detail> Noop_Tracer;
  33. }
  34. }
  35. #endif