// This file is distributed under the BSD License. // See "license.txt" for details. // Copyright 2009-2012, Jonathan Turner (jonathan@emptycrate.com) // and Jason Turner (jason@emptycrate.com) // http://www.chaiscript.com #ifndef CHAISCRIPT_STDLIB_HPP_ #define CHAISCRIPT_STDLIB_HPP_ #include #include #include #include #include #include "chaiscript_defines.hpp" #include "language/chaiscript_common.hpp" #include "dispatchkit/function_call.hpp" // #include "dispatchkit/dispatchkit.hpp" #include "dispatchkit/bootstrap.hpp" #include "dispatchkit/bootstrap_stl.hpp" #include "dispatchkit/operators.hpp" // #include "dispatchkit/boxed_value.hpp" #include "dispatchkit/register_function.hpp" #include "language/chaiscript_prelude.hpp" #include "utility/json_wrap.hpp" #ifndef CHAISCRIPT_NO_THREADS #include #endif /// @file /// /// This file generates the standard library that normal ChaiScript usage requires. namespace chaiscript { class Std_Lib { public: [[nodiscard]] static ModulePtr library(const std::vector &t_opts = {}) { if (std::find(t_opts.begin(), t_opts.end(), Library_Options::No_Stdlib) != t_opts.end()) { return std::make_shared(); } auto lib = std::make_shared(); const bool no_prelude = std::find(t_opts.begin(), t_opts.end(), Library_Options::No_Prelude) != t_opts.end(); const bool no_json = std::find(t_opts.begin(), t_opts.end(), Library_Options::No_JSON) != t_opts.end(); bootstrap::Bootstrap::bootstrap(*lib); bootstrap::standard_library::vector_type>("Vector", *lib); bootstrap::standard_library::string_type("string", *lib); bootstrap::standard_library::map_type>("Map", *lib); bootstrap::standard_library::pair_type>("Pair", *lib); #ifndef CHAISCRIPT_NO_THREADS bootstrap::standard_library::future_type>("future", *lib); // Note: async() is registered in ChaiScript_Basic::build_eval_system() // with thread tracking to prevent heap-use-after-free on engine destruction. #endif if (!no_json) { json_wrap::library(*lib); } if (!no_prelude) { lib->eval(ChaiScript_Prelude::chaiscript_prelude() /*, "standard prelude"*/); } return lib; } }; } // namespace chaiscript #endif