#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(std::vector{ 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(std::vector{ 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(std::vector{ grino::TypeSlot {grino::HINT_CAT_RETURN, grino::TYPE_STRING}, })); }