ADD: eq? and assert-eq? core functions.
parent
20b5e60557
commit
0795eb5d9f
60
lib/core.cpp
60
lib/core.cpp
|
@ -3,8 +3,54 @@
|
|||
|
||||
GRINO_ERROR(assertion_error);
|
||||
|
||||
extern "C" void lib_assert(grino::Loader& loader)
|
||||
{
|
||||
loader.add_native("assert", [](auto args){
|
||||
|
||||
for (auto value: args)
|
||||
{
|
||||
if (!value->as_bool())
|
||||
{
|
||||
grino::Logger logger;
|
||||
logger.log<assertion_error>(grino::LOG_ASSERT,
|
||||
value->loc(),
|
||||
"assertion failed");
|
||||
}
|
||||
}
|
||||
|
||||
return grino::Value::make_bool(args.front()->loc(), true);
|
||||
});
|
||||
|
||||
loader.add_native("assert-eq?", [](auto args){
|
||||
auto lhs = args.front();
|
||||
|
||||
for (size_t i=1; i<args.size(); i++)
|
||||
{
|
||||
auto rhs = args[i];
|
||||
|
||||
if (!lhs->equals(*rhs))
|
||||
{
|
||||
grino::Logger logger;
|
||||
std::stringstream ss;
|
||||
|
||||
ss << "'" << lhs->string() << "' is not equals to '"
|
||||
<< rhs->string() << "'";
|
||||
|
||||
logger.log<assertion_error>(grino::LOG_ASSERT,
|
||||
lhs->loc(),
|
||||
ss.str());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return grino::Value::make_bool(args.front()->loc(), true);
|
||||
});
|
||||
}
|
||||
|
||||
extern "C" void lib(grino::Loader& loader)
|
||||
{
|
||||
lib_assert(loader);
|
||||
|
||||
loader.add_native("dump", [](auto args){
|
||||
std::string sep;
|
||||
std::stringstream ss;
|
||||
|
@ -20,16 +66,16 @@ extern "C" void lib(grino::Loader& loader)
|
|||
return grino::Value::make_nil(args.back()->loc());
|
||||
});
|
||||
|
||||
loader.add_native("assert", [](auto args){
|
||||
loader.add_native("eq?", [](auto args){
|
||||
auto lhs = args.front();
|
||||
|
||||
for (auto value: args)
|
||||
for (size_t i=1; i<args.size(); i++)
|
||||
{
|
||||
if (!value->as_bool())
|
||||
auto rhs = args[i];
|
||||
|
||||
if (!lhs->equals(*rhs))
|
||||
{
|
||||
grino::Logger logger;
|
||||
logger.log<assertion_error>(grino::LOG_ASSERT,
|
||||
value->loc(),
|
||||
"assertion failed");
|
||||
return grino::Value::make_bool(rhs->loc(), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue