62 lines
1.2 KiB
C++
62 lines
1.2 KiB
C++
#include <chaiscript/chaiscript.hpp>
|
|
|
|
|
|
int myfun()
|
|
{
|
|
return 2;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
|
|
chaiscript::ChaiScript chai;
|
|
|
|
// save the initial state of globals and locals
|
|
chaiscript::ChaiScript::State firststate = chai.get_state();
|
|
std::map<std::string, chaiscript::Boxed_Value> locals = chai.get_locals();
|
|
|
|
// add some new globals and locals
|
|
chai.add(chaiscript::var(1), "i");
|
|
|
|
chai.add(chaiscript::fun(&myfun), "myfun");
|
|
|
|
|
|
bool didcall = chai.eval<int>("myfun()") == 2;
|
|
|
|
bool hadi = chai.eval<int>("i") == 1;
|
|
|
|
chai.set_state(firststate);
|
|
|
|
// set state should have reverted the state of the functions and dropped
|
|
// the 'myfun'
|
|
bool didnotcall = false;
|
|
|
|
try {
|
|
chai.eval<int>("myfun()");
|
|
} catch (const chaiscript::exception::eval_error &) {
|
|
didnotcall = true;
|
|
}
|
|
|
|
// set state should not affect the local variables
|
|
bool stillhasid = chai.eval<int>("i") == 1;
|
|
|
|
// After resetting the locals we expect the 'i' to be gone
|
|
chai.set_locals(locals);
|
|
|
|
|
|
bool nolongerhasid = false;
|
|
|
|
try {
|
|
chai.eval<int>("i");
|
|
} catch (const chaiscript::exception::eval_error &) {
|
|
nolongerhasid = true;
|
|
}
|
|
|
|
if (didcall && hadi && didnotcall && stillhasid && nolongerhasid)
|
|
{
|
|
return EXIT_SUCCESS;
|
|
} else {
|
|
return EXIT_FAILURE;
|
|
}
|
|
}
|