ADD: cast int/float/string functions.
ADD: rand module with randf and range functions.main
parent
64d17de693
commit
29facf1647
|
@ -0,0 +1,26 @@
|
|||
#include "commons.hpp"
|
||||
|
||||
extern "C" void lib_cast(grino::Loader& loader)
|
||||
{
|
||||
grino::Loc loc {"core/casts"};
|
||||
|
||||
loader.add_native("stoi", [loc](auto args){
|
||||
std::string value = args[0]->as_string();
|
||||
return grino::Value::make_int(loc, std::stoi(value));
|
||||
});
|
||||
|
||||
loader.add_native("itos", [loc](auto args){
|
||||
int value = args[0]->as_int();
|
||||
return grino::Value::make_string(loc, std::to_string(value));
|
||||
});
|
||||
|
||||
loader.add_native("stof", [loc](auto args){
|
||||
std::string value = args[0]->as_string();
|
||||
return grino::Value::make_int(loc, std::stof(value));
|
||||
});
|
||||
|
||||
loader.add_native("ftos", [loc](auto args){
|
||||
float value = args[0]->as_float();
|
||||
return grino::Value::make_string(loc, std::to_string(value));
|
||||
});
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
#include "../src/Loader.hpp"
|
||||
#include "src/Logger.hpp"
|
||||
#include "src/Value.hpp"
|
||||
#include "src/opcodes.hpp"
|
||||
#include "../src/Module.hpp"
|
|
@ -3,6 +3,7 @@
|
|||
#include "src/Value.hpp"
|
||||
#include "src/opcodes.hpp"
|
||||
#include "../src/Module.hpp"
|
||||
#include "cast.hpp"
|
||||
|
||||
GRINO_ERROR(assertion_error);
|
||||
|
||||
|
@ -671,6 +672,7 @@ extern "C" void lib(grino::Loader& loader)
|
|||
lib_collection(loader);
|
||||
lib_array(loader);
|
||||
lib_string(loader);
|
||||
lib_cast(loader);
|
||||
|
||||
loader.add_native("dump", [](auto args){
|
||||
std::string sep;
|
||||
|
|
|
@ -21,4 +21,11 @@ extern "C" void lib_io(grino::Loader& loader)
|
|||
std::cout << std::endl;
|
||||
return grino::Value::make_nil(grino::Loc {"io"});
|
||||
});
|
||||
|
||||
mod->loader()->add_native("read", [](auto args){
|
||||
std::string value;
|
||||
std::cin >> value;
|
||||
|
||||
return grino::Value::make_string(grino::Loc {"io"}, value);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
#include <random>
|
||||
#include <chrono>
|
||||
|
||||
#include "src/Loader.hpp"
|
||||
#include "src/Module.hpp"
|
||||
|
||||
extern "C" void lib_rand(grino::Loader& loader)
|
||||
{
|
||||
grino::Loc loc {"core/rand"};
|
||||
auto mod = loader.add_module("rand");
|
||||
|
||||
mod->loader()->add_native("randf", [loc](auto args){
|
||||
std::mt19937 r;
|
||||
|
||||
r.seed(std::chrono::steady_clock::now().time_since_epoch().count());
|
||||
|
||||
std::uniform_real_distribution<float> urd(0.0f, 1.0f);
|
||||
|
||||
return grino::Value::make_float(loc, urd(r));
|
||||
});
|
||||
|
||||
mod->loader()->add_native("range", [loc](auto args){
|
||||
std::mt19937 r;
|
||||
|
||||
r.seed(std::chrono::steady_clock::now().time_since_epoch().count());
|
||||
int from = args[0]->as_int();
|
||||
int to = args[1]->as_int();
|
||||
|
||||
std::uniform_int_distribution<int> dist(from, to);
|
||||
|
||||
return grino::Value::make_int(loc, dist(r));
|
||||
});
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#include "src/Loader.hpp"
|
||||
|
||||
#include "io.hpp"
|
||||
#include "rand.hpp"
|
||||
|
||||
extern "C" void lib(grino::Loader& loader)
|
||||
{
|
||||
lib_io(loader);
|
||||
lib_rand(loader);
|
||||
}
|
||||
|
|
|
@ -212,7 +212,6 @@ namespace grino
|
|||
{
|
||||
if (fun)
|
||||
{
|
||||
std::cout << "store INIT" << std::endl;
|
||||
fun->set_env(itr->first,
|
||||
Value::make_copy(itr->second->loc(),
|
||||
itr->second));
|
||||
|
|
Loading…
Reference in New Issue