|
OpenTTD Source 20251117-master-g7398d2e290
|
Public Member Functions | |
| Squirrel (std::string_view api_name) | |
| HSQUIRRELVM | GetVM () |
| Get the squirrel VM. | |
| bool | LoadScript (const std::string &script) |
| Load a script. | |
| bool | LoadScript (HSQUIRRELVM vm, const std::string &script, bool in_root=true) |
| SQRESULT | LoadFile (HSQUIRRELVM vm, const std::string &filename, SQBool printerror) |
| Load a file to a given VM. | |
| void | AddMethod (std::string_view method_name, SQFUNCTION proc, std::string_view params={}, void *userdata=nullptr, int size=0) |
| Adds a function to the stack. | |
| void | AddConst (std::string_view var_name, SQInteger value) |
| Adds a const to the stack. | |
| void | AddConst (std::string_view var_name, uint value) |
| Adds a const to the stack. | |
| void | AddConst (std::string_view var_name, int value) |
| Adds a const to the stack. | |
| void | AddConst (std::string_view var_name, const ConvertibleThroughBase auto &value) |
| void | AddConst (std::string_view var_name, bool value) |
| Adds a const to the stack. | |
| void | AddClassBegin (std::string_view class_name) |
| Adds a class to the global scope. | |
| void | AddClassBegin (std::string_view class_name, std::string_view parent_class) |
| Adds a class to the global scope, extending 'parent_class'. | |
| void | AddClassEnd () |
| Finishes adding a class to the global scope. | |
| bool | Resume (int suspend=-1) |
| Resume a VM when it was suspended via a throw. | |
| void | ResumeError () |
| Resume the VM with an error so it prints a stack trace. | |
| void | CollectGarbage () |
| Tell the VM to do a garbage collection run. | |
| void | InsertResult (bool result) |
| void | InsertResult (int result) |
| void | InsertResult (uint result) |
| void | InsertResult (ConvertibleThroughBase auto result) |
| bool | CallMethod (HSQOBJECT instance, std::string_view method_name, HSQOBJECT *ret, int suspend) |
| Call a method of an instance, in various flavors. | |
| bool | CallMethod (HSQOBJECT instance, std::string_view method_name, int suspend) |
| bool | CallStringMethod (HSQOBJECT instance, std::string_view method_name, std::string *res, int suspend) |
| bool | CallIntegerMethod (HSQOBJECT instance, std::string_view method_name, int *res, int suspend) |
| bool | CallBoolMethod (HSQOBJECT instance, std::string_view method_name, bool *res, int suspend) |
| bool | MethodExists (HSQOBJECT instance, std::string_view method_name) |
| Check if a method exists in an instance. | |
| bool | CreateClassInstance (const std::string &class_name, void *real_instance, HSQOBJECT *instance) |
| Exactly the same as CreateClassInstanceVM, only callable without instance of Squirrel. | |
| void | SetGlobalPointer (void *ptr) |
| Sets a pointer in the VM that is reachable from where ever you are in SQ. | |
| void | SetPrintFunction (SQPrintFunc *func) |
| Set a custom print function, so you can handle outputs from SQ yourself. | |
| void | ThrowError (std::string_view error) |
| Throw a Squirrel error that will be nicely displayed to the user. | |
| void | ReleaseObject (HSQOBJECT *ptr) |
| Release a SQ object. | |
| bool | IsSuspended () |
| Did the squirrel code suspend or return normally. | |
| bool | HasScriptCrashed () |
| Find out if the squirrel script made an error before. | |
| void | CrashOccurred () |
| Set the script status to crashed. | |
| bool | CanSuspend () |
| Are we allowed to suspend the squirrel script at this moment? | |
| SQInteger | GetOpsTillSuspend () |
| How many operations can we execute till suspension? | |
| void | Reset () |
| Completely reset the engine; start from scratch. | |
| size_t | GetAllocatedMemory () const noexcept |
| Get number of bytes allocated by this VM. | |
Static Public Member Functions | |
| static bool | CreateClassInstanceVM (HSQUIRRELVM vm, const std::string &class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook, bool prepend_API_name=false) |
| Creates a class instance. | |
| static SQUserPointer | GetRealInstance (HSQUIRRELVM vm, int index, std::string_view tag) |
| Get the real-instance pointer. | |
| static bool | GetInstance (HSQUIRRELVM vm, HSQOBJECT *ptr, int pos=1) |
| Get the Squirrel-instance pointer. | |
| static std::optional< std::string_view > | ObjectToString (HSQOBJECT *ptr) |
| Convert a Squirrel-object to a string. | |
| static int | ObjectToInteger (HSQOBJECT *ptr) |
| Convert a Squirrel-object to an integer. | |
| static bool | ObjectToBool (HSQOBJECT *ptr) |
| Convert a Squirrel-object to a bool. | |
| static void * | GetGlobalPointer (HSQUIRRELVM vm) |
| Get the pointer as set by SetGlobalPointer. | |
| static void | DecreaseOps (HSQUIRRELVM vm, int amount) |
Tell the VM to remove amount ops from the number of ops till suspend. | |
Static Protected Member Functions | |
| static void | CompileError (HSQUIRRELVM vm, std::string_view desc, std::string_view source, SQInteger line, SQInteger column) |
| The CompileError handler. | |
| static void | RunError (HSQUIRRELVM vm, std::string_view error) |
| The RunError handler. | |
| static void | PrintFunc (HSQUIRRELVM vm, std::string_view s) |
| If a user runs 'print' inside a script, this function gets the params. | |
| static void | ErrorPrintFunc (HSQUIRRELVM vm, std::string_view s) |
| If an error has to be print, this function is called. | |
Private Types | |
| using | SQPrintFunc = void(bool error_msg, std::string_view message) |
Private Member Functions | |
| std::string_view | GetAPIName () |
| Get the API name. | |
| void | Initialize () |
| Perform all initialization steps to create the engine. | |
| void | Uninitialize () |
| Perform all the cleanups for the engine. | |
Static Private Member Functions | |
| static SQInteger | _RunError (HSQUIRRELVM vm) |
| The internal RunError handler. | |
Private Attributes | |
| HSQUIRRELVM | vm |
| The VirtualMachine instance for squirrel. | |
| void * | global_pointer |
| Can be set by who ever initializes Squirrel. | |
| SQPrintFunc * | print_func |
| Points to either nullptr, or a custom print handler. | |
| bool | crashed |
| True if the squirrel script made an error. | |
| int | overdrawn_ops |
| The amount of operations we have overdrawn. | |
| std::string_view | api_name |
| Name of the API used for this squirrel. | |
| std::unique_ptr< ScriptAllocator > | allocator |
| Allocator object used by this script. | |
Friends | |
| class | ScriptAllocatorScope |
| class | ScriptInstance |
Definition at line 24 of file squirrel.hpp.
|
private |
Definition at line 29 of file squirrel.hpp.
| Squirrel::Squirrel | ( | std::string_view | api_name | ) |
Definition at line 510 of file squirrel.cpp.
| Squirrel::~Squirrel | ( | ) |
Definition at line 718 of file squirrel.cpp.
|
staticprivate |
The internal RunError handler.
It looks up the real error and calls RunError with it.
Definition at line 230 of file squirrel.cpp.
References RunError(), and vm.
Referenced by Initialize().
| void Squirrel::AddClassBegin | ( | std::string_view | class_name | ) |
Adds a class to the global scope.
Make sure to call AddClassEnd when you are done adding methods.
Definition at line 291 of file squirrel.cpp.
References vm.
Referenced by AILibrary::RegisterAPI(), and GameLibrary::RegisterAPI().
| void Squirrel::AddClassBegin | ( | std::string_view | class_name, |
| std::string_view | parent_class | ||
| ) |
Adds a class to the global scope, extending 'parent_class'.
Make sure to call AddClassEnd when you are done adding methods.
Definition at line 300 of file squirrel.cpp.
| void Squirrel::AddClassEnd | ( | ) |
Finishes adding a class to the global scope.
If this isn't called, no class is really created.
Definition at line 315 of file squirrel.cpp.
References vm.
Referenced by AILibrary::RegisterAPI(), and GameLibrary::RegisterAPI().
| void Squirrel::AddConst | ( | std::string_view | var_name, |
| bool | value | ||
| ) |
Adds a const to the stack.
Depending on the current state this means either a const to a class or to the global space.
Definition at line 282 of file squirrel.cpp.
References vm.
|
inline |
Definition at line 121 of file squirrel.hpp.
|
inline |
Adds a const to the stack.
Depending on the current state this means either a const to a class or to the global space.
Definition at line 119 of file squirrel.hpp.
References AddConst().
Referenced by AddConst().
| void Squirrel::AddConst | ( | std::string_view | var_name, |
| SQInteger | value | ||
| ) |
Adds a const to the stack.
Depending on the current state this means either a const to a class or to the global space.
Definition at line 273 of file squirrel.cpp.
References vm.
|
inline |
Adds a const to the stack.
Depending on the current state this means either a const to a class or to the global space.
Definition at line 113 of file squirrel.hpp.
References AddConst().
Referenced by AddConst().
| void Squirrel::AddMethod | ( | std::string_view | method_name, |
| SQFUNCTION | proc, | ||
| std::string_view | params = {}, |
||
| void * | userdata = nullptr, |
||
| int | size = 0 |
||
| ) |
Adds a function to the stack.
Depending on the current state this means either a method or a global function.
Definition at line 256 of file squirrel.cpp.
References vm.
Referenced by DefSQClass< CL, ST >::DefSQAdvancedMethod(), DefSQClass< CL, ST >::DefSQAdvancedStaticMethod(), AIInfo::RegisterAPI(), AILibrary::RegisterAPI(), GameInfo::RegisterAPI(), GameLibrary::RegisterAPI(), squirrel_register_global_std(), and squirrel_register_std().
| bool Squirrel::CallBoolMethod | ( | HSQOBJECT | instance, |
| std::string_view | method_name, | ||
| bool * | res, | ||
| int | suspend | ||
| ) |
Definition at line 431 of file squirrel.cpp.
| bool Squirrel::CallIntegerMethod | ( | HSQOBJECT | instance, |
| std::string_view | method_name, | ||
| int * | res, | ||
| int | suspend | ||
| ) |
Definition at line 422 of file squirrel.cpp.
| bool Squirrel::CallMethod | ( | HSQOBJECT | instance, |
| std::string_view | method_name, | ||
| HSQOBJECT * | ret, | ||
| int | suspend | ||
| ) |
Call a method of an instance, in various flavors.
Definition at line 376 of file squirrel.cpp.
References crashed, Debug, IsSuspended(), and vm.
Referenced by ScriptInfo::GetSettings().
|
inline |
Definition at line 172 of file squirrel.hpp.
| bool Squirrel::CallStringMethod | ( | HSQOBJECT | instance, |
| std::string_view | method_name, | ||
| std::string * | res, | ||
| int | suspend | ||
| ) |
Definition at line 410 of file squirrel.cpp.
| bool Squirrel::CanSuspend | ( | ) |
Are we allowed to suspend the squirrel script at this moment?
Definition at line 789 of file squirrel.cpp.
| void Squirrel::CollectGarbage | ( | ) |
Tell the VM to do a garbage collection run.
Definition at line 370 of file squirrel.cpp.
References vm.
|
staticprotected |
The CompileError handler.
Definition at line 182 of file squirrel.cpp.
References crashed, Debug, print_func, and vm.
Referenced by Initialize().
| void Squirrel::CrashOccurred | ( | ) |
| bool Squirrel::CreateClassInstance | ( | const std::string & | class_name, |
| void * | real_instance, | ||
| HSQOBJECT * | instance | ||
| ) |
Exactly the same as CreateClassInstanceVM, only callable without instance of Squirrel.
Definition at line 487 of file squirrel.cpp.
References CreateClassInstanceVM(), and vm.
|
static |
Creates a class instance.
| vm | The VM to create the class instance for |
| class_name | The name of the class of which we create an instance. |
| real_instance | The instance to the real class, if it represents a real class. |
| instance | Returning value with the pointer to the instance. |
| release_hook | Optional param to give a release hook. |
| prepend_API_name | Optional parameter; if true, the class_name is prefixed with the current API name. |
Definition at line 440 of file squirrel.cpp.
References Debug, GetAPIName(), and vm.
Referenced by CreateClassInstance().
|
static |
Tell the VM to remove amount ops from the number of ops till suspend.
Definition at line 769 of file squirrel.cpp.
References vm.
Referenced by ScriptInstance::Pause().
|
staticprotected |
If an error has to be print, this function is called.
Definition at line 197 of file squirrel.cpp.
References print_func, and vm.
Referenced by RunError().
|
noexcept |
Get number of bytes allocated by this VM.
Definition at line 175 of file squirrel.cpp.
|
inlineprivate |
Get the API name.
Definition at line 47 of file squirrel.hpp.
References api_name.
Referenced by CreateClassInstanceVM(), GetRealInstance(), and LoadFile().
|
inlinestatic |
Get the pointer as set by SetGlobalPointer.
Definition at line 237 of file squirrel.hpp.
References vm.
Referenced by ScriptInfo::Constructor().
|
inlinestatic |
Get the Squirrel-instance pointer.
Definition at line 211 of file squirrel.hpp.
References vm.
Referenced by ScriptInfo::Constructor(), SQConvert::DefSQAdvancedNonStaticCallback(), and SQConvert::DefSQNonStaticCallback().
| SQInteger Squirrel::GetOpsTillSuspend | ( | ) |
How many operations can we execute till suspension?
Definition at line 795 of file squirrel.cpp.
Referenced by ScriptInstance::GetOpsTillSuspend().
|
static |
Get the real-instance pointer.
Definition at line 493 of file squirrel.cpp.
References GetAPIName(), and vm.
Referenced by ScriptInstance::SaveObject().
|
inline |
Get the squirrel VM.
Try to avoid using this.
Definition at line 82 of file squirrel.hpp.
References vm.
Referenced by ScriptInstance::CallLoad(), ScriptInstance::LoadOnStack(), RegisterGameTranslation(), and squirrel_register_std().
| bool Squirrel::HasScriptCrashed | ( | ) |
Find out if the squirrel script made an error before.
Definition at line 779 of file squirrel.cpp.
References crashed.
|
private |
Perform all initialization steps to create the engine.
Definition at line 516 of file squirrel.cpp.
References _RunError(), CompileError(), crashed, global_pointer, overdrawn_ops, print_func, PrintFunc(), squirrel_register_global_std(), and vm.
Referenced by Reset().
| void Squirrel::InsertResult | ( | bool | result | ) |
Definition at line 747 of file squirrel.cpp.
|
inline |
Definition at line 165 of file squirrel.hpp.
| void Squirrel::InsertResult | ( | int | result | ) |
Definition at line 758 of file squirrel.cpp.
|
inline |
Definition at line 164 of file squirrel.hpp.
| bool Squirrel::IsSuspended | ( | ) |
Did the squirrel code suspend or return normally.
Definition at line 774 of file squirrel.cpp.
Referenced by CallMethod().
| SQRESULT Squirrel::LoadFile | ( | HSQUIRRELVM | vm, |
| const std::string & | filename, | ||
| SQBool | printerror | ||
| ) |
Load a file to a given VM.
Definition at line 622 of file squirrel.cpp.
References AI_DIR, AI_LIBRARY_DIR, FioFOpenFile(), GAME_DIR, GAME_LIBRARY_DIR, GetAPIName(), and vm.
| bool Squirrel::LoadScript | ( | const std::string & | script | ) |
Load a script.
| script | The full script-name to load. |
Definition at line 713 of file squirrel.cpp.
References LoadScript().
Referenced by LoadScript(), and SquirrelStd::require().
| bool Squirrel::LoadScript | ( | HSQUIRRELVM | vm, |
| const std::string & | script, | ||
| bool | in_root = true |
||
| ) |
Definition at line 689 of file squirrel.cpp.
| bool Squirrel::MethodExists | ( | HSQOBJECT | instance, |
| std::string_view | method_name | ||
| ) |
Check if a method exists in an instance.
Definition at line 323 of file squirrel.cpp.
Referenced by ScriptInstance::CallLoad(), ScriptInfo::CheckMethod(), AIInfo::Constructor(), GameInfo::Constructor(), and ScriptInfo::Constructor().
|
inlinestatic |
Convert a Squirrel-object to a bool.
Definition at line 226 of file squirrel.hpp.
|
inlinestatic |
Convert a Squirrel-object to an integer.
Definition at line 221 of file squirrel.hpp.
|
inlinestatic |
Convert a Squirrel-object to a string.
Definition at line 216 of file squirrel.hpp.
|
staticprotected |
If a user runs 'print' inside a script, this function gets the params.
Definition at line 245 of file squirrel.cpp.
References print_func, and vm.
Referenced by Initialize().
|
inline |
Release a SQ object.
Definition at line 252 of file squirrel.hpp.
Referenced by ScriptInstance::ReleaseSQObject().
| void Squirrel::Reset | ( | ) |
Completely reset the engine; start from scratch.
Definition at line 741 of file squirrel.cpp.
References Initialize(), and Uninitialize().
| bool Squirrel::Resume | ( | int | suspend = -1 | ) |
Resume a VM when it was suspended via a throw.
Definition at line 341 of file squirrel.cpp.
References crashed, overdrawn_ops, and vm.
| void Squirrel::ResumeError | ( | ) |
Resume the VM with an error so it prints a stack trace.
Definition at line 363 of file squirrel.cpp.
|
staticprotected |
The RunError handler.
Definition at line 208 of file squirrel.cpp.
References ErrorPrintFunc(), print_func, and vm.
Referenced by _RunError().
|
inline |
Sets a pointer in the VM that is reachable from where ever you are in SQ.
Useful to keep track of the main instance.
Definition at line 232 of file squirrel.hpp.
|
inline |
Set a custom print function, so you can handle outputs from SQ yourself.
Definition at line 242 of file squirrel.hpp.
|
inline |
Throw a Squirrel error that will be nicely displayed to the user.
Definition at line 247 of file squirrel.hpp.
Referenced by ScriptInfo::AddLabels(), ScriptInfo::AddSetting(), and ScriptInfo::CheckMethod().
|
private |
Perform all the cleanups for the engine.
Definition at line 723 of file squirrel.cpp.
Referenced by Reset().
|
friend |
Definition at line 25 of file squirrel.hpp.
|
friend |
Definition at line 26 of file squirrel.hpp.
|
private |
Allocator object used by this script.
Definition at line 37 of file squirrel.hpp.
|
private |
Name of the API used for this squirrel.
Definition at line 36 of file squirrel.hpp.
Referenced by GetAPIName().
|
private |
True if the squirrel script made an error.
Definition at line 34 of file squirrel.hpp.
Referenced by CallMethod(), CompileError(), CrashOccurred(), HasScriptCrashed(), Initialize(), MethodExists(), Resume(), and ResumeError().
|
private |
Can be set by who ever initializes Squirrel.
Definition at line 32 of file squirrel.hpp.
Referenced by Initialize().
|
private |
The amount of operations we have overdrawn.
Definition at line 35 of file squirrel.hpp.
Referenced by Initialize(), and Resume().
|
private |
Points to either nullptr, or a custom print handler.
Definition at line 33 of file squirrel.hpp.
Referenced by CompileError(), ErrorPrintFunc(), Initialize(), PrintFunc(), and RunError().
|
private |
The VirtualMachine instance for squirrel.
Definition at line 31 of file squirrel.hpp.
Referenced by _RunError(), AddClassBegin(), AddClassBegin(), AddClassEnd(), AddConst(), AddConst(), AddMethod(), CallMethod(), CollectGarbage(), CompileError(), CreateClassInstance(), CreateClassInstanceVM(), DecreaseOps(), ErrorPrintFunc(), GetGlobalPointer(), GetInstance(), GetRealInstance(), GetVM(), Initialize(), LoadFile(), MethodExists(), PrintFunc(), Resume(), ResumeError(), and RunError().