2023-09-10 10:46:42 +00:00
|
|
|
#include <cmath>
|
2023-09-09 22:03:28 +00:00
|
|
|
#include "lib/Function.hpp"
|
|
|
|
#include "lib/Loader.hpp"
|
2023-09-10 10:46:42 +00:00
|
|
|
#include "lib/Value.hpp"
|
|
|
|
|
|
|
|
extern "C" void num_arith(jk::Loader& loader)
|
|
|
|
{
|
|
|
|
loader.declare("+", [](auto args){
|
|
|
|
int res = 0;
|
|
|
|
|
|
|
|
for (auto arg: args)
|
|
|
|
{
|
|
|
|
res += arg->as_int();
|
|
|
|
}
|
|
|
|
|
|
|
|
return jk::Value::make_int(res);
|
|
|
|
});
|
|
|
|
|
|
|
|
loader.declare("-", [](auto args){
|
|
|
|
int res = args[0]->as_int();
|
|
|
|
|
|
|
|
for (size_t i=1; i<args.size(); i++)
|
|
|
|
{
|
|
|
|
res -= args[i]->as_int();
|
|
|
|
}
|
|
|
|
|
|
|
|
return jk::Value::make_int(res);
|
|
|
|
});
|
|
|
|
|
|
|
|
loader.declare("*", [](auto args){
|
|
|
|
int res = 1;
|
|
|
|
|
|
|
|
for (auto arg: args)
|
|
|
|
{
|
|
|
|
res *= arg->as_int();
|
|
|
|
}
|
|
|
|
|
|
|
|
return jk::Value::make_int(res);
|
|
|
|
});
|
|
|
|
|
|
|
|
loader.declare("/", [](auto args){
|
|
|
|
int res = args[0]->as_int();
|
|
|
|
|
|
|
|
for (size_t i=1; i<args.size(); i++)
|
|
|
|
{
|
|
|
|
res /= args[i]->as_int();
|
|
|
|
}
|
|
|
|
|
|
|
|
return jk::Value::make_int(res);
|
|
|
|
});
|
|
|
|
|
|
|
|
loader.declare("^", [](auto args){
|
|
|
|
int res = args[0]->as_int();
|
|
|
|
|
|
|
|
for (size_t i=1; i<args.size(); i++)
|
|
|
|
{
|
|
|
|
res = std::pow(res, args[i]->as_int());
|
|
|
|
}
|
|
|
|
|
|
|
|
return jk::Value::make_int(res);
|
|
|
|
});
|
|
|
|
|
|
|
|
loader.declare("%", [](auto args){
|
|
|
|
int res = args[0]->as_int();
|
|
|
|
|
|
|
|
for (size_t i=1; i<args.size(); i++)
|
|
|
|
{
|
|
|
|
res %= args[i]->as_int();
|
|
|
|
}
|
|
|
|
|
|
|
|
return jk::Value::make_int(res);
|
|
|
|
});
|
|
|
|
}
|
2023-09-09 22:03:28 +00:00
|
|
|
|
|
|
|
extern "C" void lib(jk::Loader& loader)
|
|
|
|
{
|
2023-09-10 10:46:42 +00:00
|
|
|
num_arith(loader);
|
2023-09-10 06:06:34 +00:00
|
|
|
loader.declare("dump", [](auto args){
|
|
|
|
std::string sep;
|
|
|
|
|
|
|
|
for (auto arg: args)
|
|
|
|
{
|
|
|
|
std::cout << sep << arg->string();
|
|
|
|
sep = " ";
|
|
|
|
}
|
|
|
|
|
|
|
|
if (args.empty() == false)
|
|
|
|
{
|
|
|
|
std::cout << std::endl;
|
|
|
|
}
|
|
|
|
|
|
|
|
return jk::Value::make_nil();
|
|
|
|
});
|
2023-09-09 22:03:28 +00:00
|
|
|
}
|