42 lines
1.4 KiB
C++
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},
|
|
}));
|
|
}
|