11#ifndef CHAISCRIPT_COMMON_HPP_
12#define CHAISCRIPT_COMMON_HPP_
36 static const std::set<std::string> m_reserved_words
37 = {
"def",
"fun",
"while",
"for",
"if",
"else",
"&&",
"||",
",",
"auto",
38 "return",
"break",
"true",
"false",
"class",
"attr",
"var",
"global",
"GLOBAL",
"_",
39 "__LINE__",
"__FILE__",
"__FUNC__",
"__CLASS__"};
40 return m_reserved_words.count(
name) > 0;
54 if (
name.find(
"::") != std::string::npos) {
67 Lambda,
Block,
Scopeless_Block,
Def,
While,
If,
For,
Ranged_For,
Inline_Array,
Inline_Map,
Return,
File,
Prefix,
Break,
Continue,
Map_Pair,
Value_Range,
69 Logical_And,
Logical_Or,
Reference,
Switch,
Case,
Default,
Noop,
Class,
Binary,
Arg,
Global_Decl,
Constant,
Compiled
79 inline const char *ast_node_type_to_string(
AST_Node_Type ast_node_type) {
80 static const char *
const ast_node_types[] = {
"Id",
"Fun_Call",
"Unused_Return_Fun_Call",
"Arg_List",
"Equation",
"Var_Decl",
"Assign_Decl",
81 "Array_Call",
"Dot_Access",
82 "Lambda",
"Block",
"Scopeless_Block",
"Def",
"While",
"If",
"For",
"Ranged_For",
"Inline_Array",
"Inline_Map",
"Return",
"File",
"Prefix",
"Break",
"Continue",
"Map_Pair",
"Value_Range",
83 "Inline_Range",
"Try",
"Catch",
"Finally",
"Method",
"Attr_Decl",
84 "Logical_And",
"Logical_Or",
"Reference",
"Switch",
"Case",
"Default",
"Noop",
"Class",
"Binary",
"Arg",
"Global_Decl",
"Constant",
"Compiled"};
86 return ast_node_types[
static_cast<int>(ast_node_type)];
102 Parse_Location(std::string t_fname=
"",
const int t_start_line=0,
const int t_start_col=0,
103 const int t_end_line=0,
const int t_end_col=0)
104 :
start(t_start_line, t_start_col),
105 end(t_end_line, t_end_col),
110 Parse_Location(std::shared_ptr<std::string> t_fname,
const int t_start_line=0,
const int t_start_col=0,
111 const int t_end_line=0,
const int t_end_col=0)
112 :
start(t_start_line, t_start_col),
113 end(t_end_line, t_end_col),
140 : std::runtime_error(t_reason)
154 std::stringstream ss;
155 ss <<
"Error loading module '" << t_name <<
"'\n"
156 <<
" The following locations were searched:\n";
158 for (
const auto &err : t_errors) {
159 ss <<
" " << err.what() <<
"\n";
176 const std::vector<Boxed_Value> &t_parameters,
const std::vector<chaiscript::Const_Proxy_Function> &t_functions,
179 std::runtime_error(
format(t_why, t_where, t_fname, t_parameters, t_dot_notation, t_ss)),
184 const std::vector<Boxed_Value> &t_parameters,
const std::vector<chaiscript::Const_Proxy_Function> &t_functions,
187 std::runtime_error(
format(t_why, t_parameters, t_dot_notation, t_ss)),
188 reason(t_why),
detail(format_detail(t_functions, t_dot_notation, t_ss))
193 std::runtime_error(
format(t_why, t_where, t_fname)),
198 : std::runtime_error(
"Error: \"" + t_why +
"\" "),
206 std::ostringstream ss;
210 ss <<
"during evaluation at (" << fname(
call_stack[0]) <<
" " << startpos(
call_stack[0]) <<
")\n";
211 ss <<
'\n' <<
detail <<
'\n';
213 for (
size_t j = 1; j <
call_stack.size(); ++j) {
237 static std::string
pretty(
const T& t)
239 return t.pretty_print();
243 static const std::string &fname(
const T& t)
249 static std::string startpos(
const T& t)
251 std::ostringstream oss;
252 oss << t.start().line <<
", " << t.start().column;
256 static std::string format_why(
const std::string &t_why)
258 return "Error: \"" + t_why +
"\"";
263 const chaiscript::detail::Dispatch_Engine &t_ss)
266 int arity = t_func->get_arity();
267 std::vector<Type_Info> types = t_func->get_param_types();
275 retval =
"(Object)." + retval;
277 }
else if (types.size() <= 1) {
280 std::stringstream ss;
283 std::string paramstr;
285 for (
size_t index = 1;
286 index != types.size();
289 paramstr += (types[index].is_const()?
"const ":
"");
292 if (index == 1 && t_dot_notation)
295 if (types.size() == 2)
304 ss << paramstr.substr(0, paramstr.size() - 2);
311 std::shared_ptr<const dispatch::Dynamic_Proxy_Function> dynfun
312 = std::dynamic_pointer_cast<const dispatch::Dynamic_Proxy_Function>(t_func);
314 if (dynfun && dynfun->has_parse_tree())
320 auto dynfunguard = std::dynamic_pointer_cast<const dispatch::Dynamic_Proxy_Function>(
f);
321 if (dynfunguard && dynfunguard->has_parse_tree())
323 retval +=
" : " + format_guard(dynfunguard->get_parse_tree());
327 retval +=
"\n Defined at " + format_location(dynfun->get_parse_tree());
334 static std::string format_guard(
const T &t)
336 return t.pretty_print();
340 static std::string format_location(
const T &t)
342 std::ostringstream oss;
343 oss <<
"(" << t.filename() <<
" " << t.start().line <<
", " << t.start().column <<
")";
347 static std::string format_detail(
const std::vector<chaiscript::Const_Proxy_Function> &t_functions,
349 const chaiscript::detail::Dispatch_Engine &t_ss)
351 std::stringstream ss;
352 if (t_functions.size() == 1)
354 assert(t_functions[0]);
355 ss <<
" Expected: " << format_types(t_functions[0], t_dot_notation, t_ss) <<
'\n';
357 ss <<
" " << t_functions.size() <<
" overloads available:\n";
359 for (
const auto & t_function : t_functions)
361 ss <<
" " << format_types((t_function), t_dot_notation, t_ss) <<
'\n';
370 static std::string format_parameters(
const std::vector<Boxed_Value> &t_parameters,
372 const chaiscript::detail::Dispatch_Engine &t_ss)
374 std::stringstream ss;
377 if (!t_parameters.empty())
379 std::string paramstr;
381 for (
auto itr = t_parameters.begin();
382 itr != t_parameters.end();
385 paramstr += (itr->is_const()?
"const ":
"");
388 if (itr == t_parameters.begin() && t_dot_notation)
391 if (t_parameters.size() == 1)
400 ss << paramstr.substr(0, paramstr.size() - 2);
407 static std::string format_filename(
const std::string &t_fname)
409 std::stringstream ss;
411 if (t_fname !=
"__EVAL__")
413 ss <<
"in '" << t_fname <<
"' ";
415 ss <<
"during evaluation ";
421 static std::string format_location(
const File_Position &t_where)
423 std::stringstream ss;
424 ss <<
"at (" << t_where.line <<
", " << t_where.column <<
")";
428 static std::string
format(
const std::string &t_why,
const File_Position &t_where,
const std::string &t_fname,
429 const std::vector<Boxed_Value> &t_parameters,
bool t_dot_notation,
const chaiscript::detail::Dispatch_Engine &t_ss)
431 std::stringstream ss;
433 ss << format_why(t_why);
436 ss <<
"With parameters: " << format_parameters(t_parameters, t_dot_notation, t_ss);
439 ss << format_filename(t_fname);
442 ss << format_location(t_where);
447 static std::string
format(
const std::string &t_why,
448 const std::vector<Boxed_Value> &t_parameters,
450 const chaiscript::detail::Dispatch_Engine &t_ss)
452 std::stringstream ss;
454 ss << format_why(t_why);
457 ss <<
"With parameters: " << format_parameters(t_parameters, t_dot_notation, t_ss);
463 static std::string
format(
const std::string &t_why,
const File_Position &t_where,
const std::string &t_fname)
465 std::stringstream ss;
467 ss << format_why(t_why);
470 ss << format_filename(t_fname);
473 ss << format_location(t_where);
483 : std::runtime_error(
"File Not Found: " + t_filename),
517 std::ostringstream oss;
522 oss << elem.get().pretty_print() <<
' ';
528 virtual std::vector<std::reference_wrapper<AST_Node>>
get_children()
const = 0;
533 std::string
to_string(
const std::string &t_prepend =
"")
const {
534 std::ostringstream oss;
536 oss << t_prepend <<
"(" << ast_node_type_to_string(this->identifier) <<
") "
537 << this->text <<
" : " << this->location.
start.
line <<
", " << this->location.
start.
column <<
'\n';
540 oss << elem.get().to_string(t_prepend +
" ");
593 std::ostringstream oss;
597 for (
const auto & elem :
children) {
598 oss << elem.pretty_print() <<
' ';
607 return std::vector<AST_Node_Trace>(node_children.begin(), node_children.end());
679 m_ds->new_scope(m_ds.stack_holder());
684 m_ds->pop_scope(m_ds.stack_holder());
703 m_ds->new_function_call(m_ds.stack_holder(), m_ds.conversion_saves());
708 m_ds->pop_function_call(m_ds.stack_holder(), m_ds.conversion_saves());
713 m_ds->save_function_params(t_params);
718 m_ds->save_function_params(t_params);
737 m_ds->new_stack(m_ds.stack_holder());
742 m_ds->pop_stack(m_ds.stack_holder());
Definition GameApi_pl.cc:23060
A wrapper for holding any valid C++ type. All types in ChaiScript are Boxed_Value objects.
Definition boxed_value.hpp:28
Definition dispatchkit.hpp:438
decltype(auto) boxed_cast(const Boxed_Value &bv) const
casts an object while applying any Dynamic_Conversion available
Definition dispatchkit.hpp:462
std::string get_type_name(const Type_Info &ti) const
Definition dispatchkit.hpp:743
std::string type_name(const Boxed_Value &obj) const
Definition dispatchkit.hpp:1180
Definition dispatchkit.hpp:1513
Thrown in the event that a Boxed_Value cannot be cast to the desired type.
Definition bad_boxed_cast.hpp:34
Exception thrown in the case that an object name is invalid because it contains illegal characters.
Definition dispatchkit.hpp:87
Exception thrown in the case that an object name is invalid because it is a reserved word.
Definition dispatchkit.hpp:65
ChaiScript_Parser_Base(ChaiScript_Parser_Base &&)=default
virtual void * get_tracer_ptr()=0
virtual AST_NodePtr parse(const std::string &t_input, const std::string &t_fname)=0
virtual ~ChaiScript_Parser_Base()=default
ChaiScript_Parser_Base & operator=(const ChaiScript_Parser_Base &&)=delete
ChaiScript_Parser_Base(const ChaiScript_Parser_Base &)=default
ChaiScript_Parser_Base()=default
ChaiScript_Parser_Base & operator=(ChaiScript_Parser_Base &&)=delete
T & get_tracer()
Definition chaiscript_common.hpp:635
virtual void debug_print(const AST_Node &t, std::string prepend="") const =0
pretty($str)
Definition mesh_api.php:105
iVBORw0KGgoAAAANSUhEUgAAANcAAAB5CAMAAACdtUQZAAAA51BMVEX</div ></div >< div style="padding: 0px 0px; width: 1324px;">< div style="height: 400px; width: 1324px;"></div >< div itemscope itemtype="https: </div><div itemscope itemtype="https:</div >< div itemscope itemtype="https: </div></div><p><div style="padding:0px 0px;width:1324px;"><div></div><div itemscope itemtype="https:< ul >< li >< b > Application name
8AkrcAgqgAs9wqQ0ey2tkAo8gAuuQfeI4hPUH09fXHy8z4+fng4uNKXF/Lz9BzfoAcgpkQMTUAKjAbOT4Qr9AXhJ8Rl7ktMCwTosA...
Definition meshpage.php:1610
instead of< li > Displaying models works via URL t expect full length movie as the output of this process< li > Different animation models are very limited basically just translate rotate</ul >< h2 > What to do if your hosting location has no php</h2 >< ul >< li > comment out or remove display php lines at the beginning< li > you will lose threads too< li > every zip file distributed by meshpage org has one of those display php files with this issue</ul >< h2 > What should I do to serve the files via http</h2 > I get some random triangles that do not belong to the model</h2 > The engine works correctly The obj file supports quads and polygons But some external tools that create obj files insert random polygons to the file to discourage rendering of polygons We consider polygon rendering is important and our engine should support it by default If you have we have disable_polygons() feature in the engine to get rid of the trash. But real solution is to change the tool you use to create the .obj file/check the .obj file that it doesn 't contain random(invisible) polygons that do not render in competing 3d engines. Our engine does not have the performance problems normally associated with polygons given that triangle quad polygon type change does not cause additional draw commands to the opengl rendering< p > GLTF standard organisation made significant mistake when specifying GLTF file format
Definition meshpage.php:1092
Definition chaiscript_common.hpp:649
Classes and functions that are part of the runtime eval system.
Definition chaiscript_common.hpp:647
Classes which may be thrown during error cases when ChaiScript is executing.
Definition bad_boxed_cast.hpp:27
Classes and functions used during the parsing process.
Definition dispatchkit.hpp:44
Namespace chaiscript contains every API call that the average user will be concerned with.
std::shared_ptr< dispatch::Proxy_Function_Base > Proxy_Function
Common typedef used for passing of any registered function in ChaiScript.
Definition proxy_functions.hpp:317
std::shared_ptr< const dispatch::Proxy_Function_Base > Const_Proxy_Function
Const version of Proxy_Function. Points to a const Proxy_Function. This is how most registered functi...
Definition proxy_functions.hpp:321
Operator_Precidence
Definition chaiscript_common.hpp:72
@ Multiplication
Definition chaiscript_common.hpp:74
@ Ternary_Cond
Definition chaiscript_common.hpp:72
@ Addition
Definition chaiscript_common.hpp:74
@ Shift
Definition chaiscript_common.hpp:74
@ Equality
Definition chaiscript_common.hpp:74
@ Bitwise_Xor
Definition chaiscript_common.hpp:73
@ Bitwise_Or
Definition chaiscript_common.hpp:73
@ Bitwise_And
Definition chaiscript_common.hpp:73
@ Comparison
Definition chaiscript_common.hpp:74
std::unique_ptr< const AST_Node > AST_NodePtr_Const
Definition chaiscript_common.hpp:128
std::shared_ptr< B > make_shared(Arg &&... arg)
Definition chaiscript_defines.hpp:87
AST_Node_Type
Types of AST nodes available to the parser and eval.
Definition chaiscript_common.hpp:65
@ Lambda
Definition chaiscript_common.hpp:67
@ Case
Definition chaiscript_common.hpp:69
@ File
Definition chaiscript_common.hpp:67
@ Assign_Decl
Definition chaiscript_common.hpp:65
@ Array_Call
Definition chaiscript_common.hpp:66
@ Dot_Access
Definition chaiscript_common.hpp:66
@ Map_Pair
Definition chaiscript_common.hpp:67
@ Noop
Definition chaiscript_common.hpp:69
@ Var_Decl
Definition chaiscript_common.hpp:65
@ For
Definition chaiscript_common.hpp:67
@ While
Definition chaiscript_common.hpp:67
@ Id
Definition chaiscript_common.hpp:65
@ Scopeless_Block
Definition chaiscript_common.hpp:67
@ Global_Decl
Definition chaiscript_common.hpp:69
@ Method
Definition chaiscript_common.hpp:68
@ Compiled
Definition chaiscript_common.hpp:69
@ Logical_And
Definition chaiscript_common.hpp:69
@ Finally
Definition chaiscript_common.hpp:68
@ Arg
Definition chaiscript_common.hpp:69
@ Reference
Definition chaiscript_common.hpp:69
@ Value_Range
Definition chaiscript_common.hpp:67
@ Binary
Definition chaiscript_common.hpp:69
@ Unused_Return_Fun_Call
Definition chaiscript_common.hpp:65
@ Prefix
Definition chaiscript_common.hpp:67
@ Inline_Array
Definition chaiscript_common.hpp:67
@ If
Definition chaiscript_common.hpp:67
@ Default
Definition chaiscript_common.hpp:69
@ Arg_List
Definition chaiscript_common.hpp:65
@ Logical_Or
Definition chaiscript_common.hpp:69
@ Ranged_For
Definition chaiscript_common.hpp:67
@ Return
Definition chaiscript_common.hpp:67
@ Continue
Definition chaiscript_common.hpp:67
@ Switch
Definition chaiscript_common.hpp:69
@ Inline_Map
Definition chaiscript_common.hpp:67
@ Fun_Call
Definition chaiscript_common.hpp:65
@ Constant
Definition chaiscript_common.hpp:69
@ Def
Definition chaiscript_common.hpp:67
@ Block
Definition chaiscript_common.hpp:67
@ Break
Definition chaiscript_common.hpp:67
@ Try
Definition chaiscript_common.hpp:68
@ Attr_Decl
Definition chaiscript_common.hpp:68
@ Inline_Range
Definition chaiscript_common.hpp:68
std::shared_ptr< Module > ModulePtr
Convenience typedef for Module objects to be added to the ChaiScript runtime.
Definition dispatchkit.hpp:263
std::unique_ptr< AST_Node > AST_NodePtr
Typedef for pointers to AST_Node objects. Used in building of the AST_Node tree.
Definition proxy_functions.hpp:44
ModulePtr(* Create_Module_Func)()
Signature of module entry point that all binary loadable modules must implement.
Definition chaiscript_common.hpp:61
double f(const std::string &, double, bool) noexcept
Definition profile_cpp_calls_2.cpp:4
Definition chaiscript_common.hpp:574
std::string pretty_print() const
Definition chaiscript_common.hpp:591
const File_Position & end() const
Definition chaiscript_common.hpp:587
Parse_Location location
Definition chaiscript_common.hpp:577
AST_Node_Trace(const AST_Node &node)
Definition chaiscript_common.hpp:610
const File_Position & start() const
Definition chaiscript_common.hpp:583
const AST_Node_Type identifier
Definition chaiscript_common.hpp:575
const std::string & filename() const
Definition chaiscript_common.hpp:579
std::vector< AST_Node_Trace > get_children(const AST_Node &node)
Definition chaiscript_common.hpp:604
std::vector< AST_Node_Trace > children
Definition chaiscript_common.hpp:617
const std::string text
Definition chaiscript_common.hpp:576
Struct that doubles as both a parser ast_node and an AST node.
Definition chaiscript_common.hpp:497
virtual ~AST_Node()=default
AST_Node & operator=(AST_Node &&)=default
AST_Node(AST_Node &&)=default
AST_Node(const AST_Node &)=delete
const std::string text
Definition chaiscript_common.hpp:500
AST_Node & operator=(const AST_Node &)=delete
AST_Node(std::string t_ast_node_text, AST_Node_Type t_id, Parse_Location t_loc)
Definition chaiscript_common.hpp:564
virtual std::vector< std::reference_wrapper< AST_Node > > get_children() const =0
const std::string & filename() const
Definition chaiscript_common.hpp:503
const AST_Node_Type identifier
Definition chaiscript_common.hpp:499
const File_Position & start() const
Definition chaiscript_common.hpp:507
const File_Position & end() const
Definition chaiscript_common.hpp:511
Parse_Location location
Definition chaiscript_common.hpp:501
std::string pretty_print() const
Definition chaiscript_common.hpp:515
std::string to_string(const std::string &t_prepend="") const
Prints the contents of an AST node, including its children, recursively.
Definition chaiscript_common.hpp:533
virtual Boxed_Value eval(const chaiscript::detail::Dispatch_State &t_e) const =0
static bool get_bool_condition(const Boxed_Value &t_bv, const chaiscript::detail::Dispatch_State &t_ss)
Definition chaiscript_common.hpp:546
Convenience type for file positions.
Definition chaiscript_common.hpp:91
int line
Definition chaiscript_common.hpp:92
int column
Definition chaiscript_common.hpp:93
File_Position(int t_file_line, int t_file_column)
Definition chaiscript_common.hpp:95
File_Position()
Definition chaiscript_common.hpp:98
Definition chaiscript_common.hpp:33
static void validate_object_name(const std::string &name)
Definition chaiscript_common.hpp:48
static bool valid_object_name(const std::string &name)
Definition chaiscript_common.hpp:43
static bool is_reserved_word(const std::string &name)
Definition chaiscript_common.hpp:34
Definition chaiscript_common.hpp:101
File_Position start
Definition chaiscript_common.hpp:120
Parse_Location(std::string t_fname="", const int t_start_line=0, const int t_start_col=0, const int t_end_line=0, const int t_end_col=0)
Definition chaiscript_common.hpp:102
std::shared_ptr< std::string > filename
Definition chaiscript_common.hpp:122
File_Position end
Definition chaiscript_common.hpp:121
Parse_Location(std::shared_ptr< std::string > t_fname, const int t_start_line=0, const int t_start_col=0, const int t_end_line=0, const int t_end_col=0)
Definition chaiscript_common.hpp:110
Function_Push_Pop(const chaiscript::detail::Dispatch_State &t_ds)
Definition chaiscript_common.hpp:700
Function_Push_Pop & operator=(const Function_Push_Pop &)=delete
void save_params(const std::vector< Boxed_Value > &t_params)
Definition chaiscript_common.hpp:711
Function_Push_Pop(Function_Push_Pop &&)=default
Function_Push_Pop & operator=(Function_Push_Pop &&)=default
~Function_Push_Pop()
Definition chaiscript_common.hpp:706
Function_Push_Pop(const Function_Push_Pop &)=delete
void save_params(std::initializer_list< Boxed_Value > t_params)
Definition chaiscript_common.hpp:716
Special type for returned values.
Definition chaiscript_common.hpp:651
Boxed_Value retval
Definition chaiscript_common.hpp:652
Scope_Push_Pop & operator=(const Scope_Push_Pop &)=delete
Scope_Push_Pop(const chaiscript::detail::Dispatch_State &t_ds)
Definition chaiscript_common.hpp:676
Scope_Push_Pop(Scope_Push_Pop &&)=default
Scope_Push_Pop(const Scope_Push_Pop &)=delete
~Scope_Push_Pop()
Definition chaiscript_common.hpp:682
Scope_Push_Pop & operator=(Scope_Push_Pop &&)=default
Stack_Push_Pop & operator=(const Stack_Push_Pop &)=delete
Stack_Push_Pop(const chaiscript::detail::Dispatch_State &t_ds)
Definition chaiscript_common.hpp:734
Stack_Push_Pop(const Stack_Push_Pop &)=delete
Stack_Push_Pop(Stack_Push_Pop &&)=default
~Stack_Push_Pop()
Definition chaiscript_common.hpp:740
Stack_Push_Pop & operator=(Stack_Push_Pop &&)=default
Errors generated during parsing or evaluation.
Definition chaiscript_common.hpp:168
std::string detail
Definition chaiscript_common.hpp:172
eval_error(const eval_error &)=default
eval_error(const std::string &t_why) noexcept
Definition chaiscript_common.hpp:197
std::string filename
Definition chaiscript_common.hpp:171
~eval_error() noexcept override=default
std::string reason
Definition chaiscript_common.hpp:169
eval_error(const std::string &t_why, const std::vector< Boxed_Value > &t_parameters, const std::vector< chaiscript::Const_Proxy_Function > &t_functions, bool t_dot_notation, const chaiscript::detail::Dispatch_Engine &t_ss) noexcept
Definition chaiscript_common.hpp:183
eval_error(const std::string &t_why, const File_Position &t_where, const std::string &t_fname, const std::vector< Boxed_Value > &t_parameters, const std::vector< chaiscript::Const_Proxy_Function > &t_functions, bool t_dot_notation, const chaiscript::detail::Dispatch_Engine &t_ss) noexcept
Definition chaiscript_common.hpp:175
File_Position start_position
Definition chaiscript_common.hpp:170
std::vector< AST_Node_Trace > call_stack
Definition chaiscript_common.hpp:173
eval_error(const std::string &t_why, const File_Position &t_where, const std::string &t_fname) noexcept
Definition chaiscript_common.hpp:192
std::string pretty_print() const
Definition chaiscript_common.hpp:204
file_not_found_error(const file_not_found_error &)=default
~file_not_found_error() noexcept override=default
std::string filename
Definition chaiscript_common.hpp:490
file_not_found_error(const std::string &t_filename) noexcept
Definition chaiscript_common.hpp:482
load_module_error(const std::string &t_reason) noexcept
Definition chaiscript_common.hpp:139
static std::string format_error(const std::string &t_name, const std::vector< load_module_error > &t_errors)
Definition chaiscript_common.hpp:152
~load_module_error() noexcept override=default
load_module_error(const std::string &t_name, const std::vector< load_module_error > &t_errors)
Definition chaiscript_common.hpp:144
load_module_error(const load_module_error &)=default