Flesh out parser and tracer usage cases
This commit is contained in:
parent
ffcd7e3a76
commit
359897a442
@ -307,6 +307,10 @@ namespace chaiscript
|
||||
}
|
||||
}
|
||||
|
||||
parser::ChaiScript_Parser_Base &get_parser()
|
||||
{
|
||||
return *m_parser;
|
||||
}
|
||||
|
||||
const Boxed_Value eval(const AST_NodePtr &t_ast)
|
||||
{
|
||||
|
@ -355,6 +355,16 @@ namespace chaiscript
|
||||
m_match_stack.reserve(2);
|
||||
}
|
||||
|
||||
Tracer &get_tracer()
|
||||
{
|
||||
return m_tracer;
|
||||
}
|
||||
|
||||
Optimizer &get_optimizer()
|
||||
{
|
||||
return m_optimizer;
|
||||
}
|
||||
|
||||
ChaiScript_Parser(const ChaiScript_Parser &) = default;
|
||||
ChaiScript_Parser &operator=(const ChaiScript_Parser &) = delete;
|
||||
ChaiScript_Parser(ChaiScript_Parser &&) = default;
|
||||
|
@ -10,10 +10,11 @@
|
||||
namespace chaiscript {
|
||||
namespace eval {
|
||||
|
||||
struct Noop_Tracer
|
||||
|
||||
struct Noop_Tracer_Detail
|
||||
{
|
||||
template<typename T>
|
||||
static void trace(const chaiscript::detail::Dispatch_State &, const AST_Node_Impl<T> *)
|
||||
void trace(const chaiscript::detail::Dispatch_State &, const AST_Node_Impl<T> *)
|
||||
{
|
||||
}
|
||||
};
|
||||
@ -28,7 +29,7 @@ namespace chaiscript {
|
||||
}
|
||||
|
||||
void do_trace(const chaiscript::detail::Dispatch_State &ds, const AST_Node_Impl<Tracer<T...>> *node) {
|
||||
(void)std::initializer_list<int>{ (T::trace(ds, node), 0)... };
|
||||
(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) {
|
||||
@ -36,6 +37,8 @@ namespace chaiscript {
|
||||
}
|
||||
};
|
||||
|
||||
typedef Tracer<Noop_Tracer_Detail> Noop_Tracer;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -988,6 +988,34 @@ TEST_CASE("Make sure ChaiScript object still compiles / executes")
|
||||
chaiscript::ChaiScript chai;
|
||||
}
|
||||
|
||||
struct Count_Tracer
|
||||
{
|
||||
int count = 0;
|
||||
template<typename T>
|
||||
void trace(const chaiscript::detail::Dispatch_State &, const chaiscript::eval::AST_Node_Impl<T> *)
|
||||
{
|
||||
++count;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
TEST_CASE("Test count tracer")
|
||||
{
|
||||
typedef chaiscript::parser::ChaiScript_Parser< chaiscript::eval::Tracer<Count_Tracer>, chaiscript::optimizer::Optimizer_Default > Parser_Type;
|
||||
|
||||
chaiscript::ChaiScript_Basic chai(chaiscript::Std_Lib::library(),
|
||||
std::make_unique<Parser_Type>());
|
||||
|
||||
Parser_Type &parser = dynamic_cast<Parser_Type &>(chai.get_parser());
|
||||
|
||||
const auto count = parser.get_tracer().count;
|
||||
|
||||
chai.eval("");
|
||||
|
||||
CHECK(parser.get_tracer().count > count);
|
||||
}
|
||||
|
||||
|
||||
TEST_CASE("Test stdlib options")
|
||||
{
|
||||
const auto test_has_external_scripts = [](chaiscript::ChaiScript_Basic &chai) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user