grino/lib/std/io.hpp

42 lines
1.4 KiB
C++

#include "src/Loader.hpp"
#include "src/Module.hpp"
extern "C" void lib_io(grino::Loader& loader)
{
auto mod = loader.add_module("io");
mod->loader()->add_native("print", [](auto args){
for (auto arg: args)
{
std::cout << arg->string();
}
return grino::Value::make_nil(grino::Loc {"io"});
}, std::make_shared<grino::Prototype>(std::vector<grino::TypeSlot>{
grino::TypeSlot {grino::HINT_CAT_VARIADIC_PARAM, grino::TYPE_NIL,
grino::HINT_ANY},
grino::TypeSlot {grino::HINT_CAT_RETURN, grino::TYPE_NIL, grino::HINT_ANY},
}));
mod->loader()->add_native("println", [](auto args){
for (auto arg: args)
{
std::cout << arg->string();
}
std::cout << std::endl;
return grino::Value::make_nil(grino::Loc {"io"});
}, std::make_shared<grino::Prototype>(std::vector<grino::TypeSlot>{
grino::TypeSlot {grino::HINT_CAT_VARIADIC_PARAM, grino::TYPE_NIL,
grino::HINT_ANY},
grino::TypeSlot {grino::HINT_CAT_RETURN, grino::TYPE_NIL, grino::HINT_ANY},
}));
mod->loader()->add_native("read", [](auto args){
std::string value;
std::cin >> value;
return grino::Value::make_string(grino::Loc {"io"}, value);
}, std::make_shared<grino::Prototype>(std::vector<grino::TypeSlot>{
grino::TypeSlot {grino::HINT_CAT_RETURN, grino::TYPE_STRING},
}));
}