AngelScript
|
The interface to the script modules. More...
Public Member Functions | |
Miscellaneous | |
virtual asIScriptEngine * | GetEngine () const =0 |
Returns a pointer to the engine. | |
virtual void | SetName (const char *name)=0 |
Sets the name of the module. | |
virtual const char * | GetName () const =0 |
Gets the name of the module. | |
Compilation | |
virtual int | AddScriptSection (const char *name, const char *code, size_t codeLength=0, int lineOffset=0)=0 |
Add a script section for the next build. | |
virtual int | Build ()=0 |
Build the previously added script sections. | |
virtual int | CompileFunction (const char *sectionName, const char *code, int lineOffset, asDWORD compileFlags, asIScriptFunction **outFunc)=0 |
Compile a single function. | |
virtual int | CompileGlobalVar (const char *sectionName, const char *code, int lineOffset)=0 |
Compile a single global variable and add it to the scope of the module. | |
virtual asDWORD | SetAccessMask (asDWORD accessMask)=0 |
Sets the access mask that should be used during the compilation. | |
Functions | |
virtual asUINT | GetFunctionCount () const =0 |
Returns the number of global functions in the module. | |
virtual int | GetFunctionIdByIndex (asUINT index) const =0 |
Returns the function id by index. | |
virtual int | GetFunctionIdByName (const char *name) const =0 |
Returns the function id by name. | |
virtual int | GetFunctionIdByDecl (const char *decl) const =0 |
Returns the function id by declaration. | |
virtual asIScriptFunction * | GetFunctionByIndex (asUINT index) const =0 |
Returns the function by index. | |
virtual asIScriptFunction * | GetFunctionByDecl (const char *decl) const =0 |
Returns the function by its declaration. | |
virtual asIScriptFunction * | GetFunctionByName (const char *name) const =0 |
Returns the function by its name. | |
virtual asIScriptFunction * | GetFunctionDescriptorByIndex (asUINT index) const =0 |
virtual asIScriptFunction * | GetFunctionDescriptorById (int funcId) const =0 |
virtual int | RemoveFunction (int funcId)=0 |
Remove a single function from the scope of the module. | |
Global variables | |
virtual int | ResetGlobalVars (asIScriptContext *ctx=0)=0 |
Reset the global variables of the module. | |
virtual asUINT | GetGlobalVarCount () const =0 |
Returns the number of global variables in the module. | |
virtual int | GetGlobalVarIndexByName (const char *name) const =0 |
Returns the global variable index by name. | |
virtual int | GetGlobalVarIndexByDecl (const char *decl) const =0 |
Returns the global variable index by declaration. | |
virtual const char * | GetGlobalVarDeclaration (asUINT index) const =0 |
Returns the global variable declaration. | |
virtual int | GetGlobalVar (asUINT index, const char **name, int *typeId=0, bool *isConst=0) const =0 |
Returns the global variable properties. | |
virtual void * | GetAddressOfGlobalVar (asUINT index)=0 |
Returns the pointer to the global variable. | |
virtual int | RemoveGlobalVar (asUINT index)=0 |
Remove the global variable from the scope of the module. | |
Type identification | |
virtual asUINT | GetObjectTypeCount () const =0 |
Returns the number of object types. | |
virtual asIObjectType * | GetObjectTypeByIndex (asUINT index) const =0 |
Returns the object type interface by index. | |
virtual int | GetTypeIdByDecl (const char *decl) const =0 |
Returns a type id by declaration. | |
Enums | |
virtual asUINT | GetEnumCount () const =0 |
Returns the number of enum types declared in the module. | |
virtual const char * | GetEnumByIndex (asUINT index, int *enumTypeId) const =0 |
Returns the enum type. | |
virtual int | GetEnumValueCount (int enumTypeId) const =0 |
Returns the number of values defined for the enum type. | |
virtual const char * | GetEnumValueByIndex (int enumTypeId, asUINT index, int *outValue) const =0 |
Returns the name and value of the enum value. | |
Typedefs | |
virtual asUINT | GetTypedefCount () const =0 |
Returns the number of typedefs in the module. | |
virtual const char * | GetTypedefByIndex (asUINT index, int *typeId) const =0 |
Returns the typedef. | |
Dynamic binding between modules | |
virtual asUINT | GetImportedFunctionCount () const =0 |
Returns the number of functions declared for import. | |
virtual int | GetImportedFunctionIndexByDecl (const char *decl) const =0 |
Returns the imported function index by declaration. | |
virtual const char * | GetImportedFunctionDeclaration (asUINT importIndex) const =0 |
Returns the imported function declaration. | |
virtual const char * | GetImportedFunctionSourceModule (asUINT importIndex) const =0 |
Returns the declared imported function source module. | |
virtual int | BindImportedFunction (asUINT importIndex, int funcId)=0 |
Binds an imported function to the function from another module. | |
virtual int | UnbindImportedFunction (asUINT importIndex)=0 |
Unbinds an imported function. | |
virtual int | BindAllImportedFunctions ()=0 |
Binds all imported functions in a module, by searching their equivalents in the declared source modules. | |
virtual int | UnbindAllImportedFunctions ()=0 |
Unbinds all imported functions. | |
Bytecode saving and loading | |
virtual int | SaveByteCode (asIBinaryStream *out) const =0 |
Save compiled bytecode to a binary stream. | |
virtual int | LoadByteCode (asIBinaryStream *in)=0 |
Load pre-compiled bytecode from a binary stream. | |
User data | |
virtual void * | SetUserData (void *data)=0 |
Register the memory address of some user data. | |
virtual void * | GetUserData () const =0 |
Returns the address of the previously registered user data. |
A script module can be thought of a library of script functions, objects, and global variables. These are built from a single or multiple script files, also known as script sections.
An application can load multiple modules independently, and can even discard modules that are no longer used without affecting the other modules. This makes modules convenient for use with on-demand script logic, i.e. the script is loaded and compiled only as it needed, rather than everything up front.
If two modules are built using the same source script files, they will each hold unique copies of the global variables, functions, and objects declared in the script. There may be valid reasons to do this, but if your only reason is to give a set of individual scripted properties to application objects, then you should consider designing your scripts to use script classes. The use of script classes will allow each application object to maintain its own instance of the script class, while still sharing the same implementation in a single module.
While different modules are independent, they can communicate with each other with a little help from the application. It is for example possible to import functions between modules, or a handle to an interface might be passed from one module to another to allow. To facilitate the information exchange between modules, the script language permits the declaration of shared entities, e.g. classes and interfaces. These shared entities will be seen and shared by all modules that declare them, thus making guaranteeing that the modules speak the same language, so to speak.
virtual int asIScriptModule::AddScriptSection | ( | const char * | name, |
const char * | code, | ||
size_t | codeLength = 0 , |
||
int | lineOffset = 0 |
||
) | [pure virtual] |
[in] | name | The name of the script section |
[in] | code | The script code buffer |
[in] | codeLength | The length of the script code |
[in] | lineOffset | An offset that will be added to compiler message line numbers |
asMODULE_IS_IN_USE | The module is currently in use. |
asINVALID_ARG | The code argument is null. |
asNOT_SUPPORTED | Compiler support is disabled in the engine. |
This adds a script section to the module. All sections added will be treated as if one large script. Errors reported will give the name of the corresponding section.
The code added is copied by the engine, so there is no need to keep the original buffer after the call. Note that this can be changed by setting the engine property asEP_COPY_SCRIPT_SECTIONS with asIScriptEngine::SetEngineProperty.
virtual int asIScriptModule::BindAllImportedFunctions | ( | ) | [pure virtual] |
asERROR | An error occurred. |
asCANT_BIND_ALL_FUNCTIONS | Not all functions where bound. |
This functions tries to bind all imported functions in the module by searching for matching functions in the suggested modules. If a function cannot be bound the function will give an error asCANT_BIND_ALL_FUNCTIONS, but it will continue binding the rest of the functions.
virtual int asIScriptModule::BindImportedFunction | ( | asUINT | importIndex, |
int | funcId | ||
) | [pure virtual] |
[in] | importIndex | The index of the imported function. |
[in] | funcId | The function id of the function that will be bound to the imported function. |
asNO_FUNCTION | importIndex or fundId is incorrect. |
asINVALID_INTERFACE | The signature of function doesn't match the import statement. |
The imported function is only bound if the functions have the exact same signature, i.e the same return type, and parameters.
virtual int asIScriptModule::Build | ( | ) | [pure virtual] |
asINVALID_CONFIGURATION | The engine configuration is invalid. |
asERROR | The script failed to build. |
asBUILD_IN_PROGRESS | Another thread is currently building. |
asINIT_GLOBAL_VARS_FAILED | It was not possible to initialize at least one of the global variables. |
asNOT_SUPPORTED | Compiler support is disabled in the engine. |
Builds the script based on the added sections, and registered types and functions. After the build is complete the script sections are removed to free memory. If the script module needs to be rebuilt all of the script sections needs to be added again.
Compiler messages are sent to the message callback function set with asIScriptEngine::SetMessageCallback. If there are no errors or warnings, no messages will be sent to the callback function.
Any global variables found in the script will be initialized by the compiler if the engine property asEP_INIT_GLOBAL_VARS_AFTER_BUILD is set. If you get the error asINIT_GLOBAL_VARS_FAILED, then it is probable that one of the global variables during the initialization is trying to access another global variable before it has been initialized.
virtual int asIScriptModule::CompileFunction | ( | const char * | sectionName, |
const char * | code, | ||
int | lineOffset, | ||
asDWORD | compileFlags, | ||
asIScriptFunction ** | outFunc | ||
) | [pure virtual] |
[in] | sectionName | The name of the script section |
[in] | code | The script code buffer |
[in] | lineOffset | An offset that will be added to compiler message line numbers |
[in] | compileFlags | One of asECompileFlags values |
[out] | outFunc | Optional parameter to receive the compiled function descriptor |
asINVALID_ARG | One or more arguments have invalid values. |
asINVALID_CONFIGURATION | The engine configuration is invalid. |
asBUILD_IN_PROGRESS | Another build is in progress. |
asERROR | The compilation failed. |
asNOT_SUPPORTED | Compiler support is disabled in the engine. |
Use this to compile a single function. The function can be optionally added to the scope of the module, in which case it will be available for subsequent compilations. If not added to the module, the function can still be returned in the output parameter, which will allow the application to execute it, and then discard it when it is no longer needed.
If the output function parameter is set, remember to release the function object when you're done with it.
virtual int asIScriptModule::CompileGlobalVar | ( | const char * | sectionName, |
const char * | code, | ||
int | lineOffset | ||
) | [pure virtual] |
[in] | sectionName | The name of the script section |
[in] | code | The script code buffer |
[in] | lineOffset | An offset that will be added to compiler message line numbers |
asINVALID_ARG | One or more arguments have invalid values. |
asINVALID_CONFIGURATION | The engine configuration is invalid. |
asBUILD_IN_PROGRESS | Another build is in progress. |
asERROR | The compilation failed. |
asNOT_SUPPORTED | Compiler support is disabled in the engine. |
Use this to add a single global variable to the scope of a module. The variable can then be referred to by the application and subsequent compilations.
The script code may contain an initialization expression, which will be executed by the compiler if the engine property asEP_INIT_GLOBAL_VARS_AFTER_BUILD is set.
virtual void* asIScriptModule::GetAddressOfGlobalVar | ( | asUINT | index | ) | [pure virtual] |
[in] | index | The index of the global variable. |
This method should be used to retrieve the pointer of a variable that you wish to access.
virtual asIScriptEngine* asIScriptModule::GetEngine | ( | ) | const [pure virtual] |
virtual const char* asIScriptModule::GetEnumByIndex | ( | asUINT | index, |
int * | enumTypeId | ||
) | const [pure virtual] |
[in] | index | The index of the enum type. |
[out] | enumTypeId | Receives the type id of the enum type. |
virtual asUINT asIScriptModule::GetEnumCount | ( | ) | const [pure virtual] |
virtual const char* asIScriptModule::GetEnumValueByIndex | ( | int | enumTypeId, |
asUINT | index, | ||
int * | outValue | ||
) | const [pure virtual] |
[in] | enumTypeId | The type id of the enum type. |
[in] | index | The index of the enum value. |
[out] | outValue | Receives the numeric value. |
virtual int asIScriptModule::GetEnumValueCount | ( | int | enumTypeId | ) | const [pure virtual] |
[in] | enumTypeId | The type id of the enum type. |
asINVALID_ARG | enumTypeId is not an enum type. |
virtual asIScriptFunction* asIScriptModule::GetFunctionByDecl | ( | const char * | decl | ) | const [pure virtual] |
[in] | decl | The function declaration. |
virtual asIScriptFunction* asIScriptModule::GetFunctionByIndex | ( | asUINT | index | ) | const [pure virtual] |
[in] | index | The index of the function |
virtual asIScriptFunction* asIScriptModule::GetFunctionByName | ( | const char * | name | ) | const [pure virtual] |
[in] | name | The function name |
virtual asUINT asIScriptModule::GetFunctionCount | ( | ) | const [pure virtual] |
This method retrieves the number of compiled script functions.
virtual asIScriptFunction* asIScriptModule::GetFunctionDescriptorById | ( | int | funcId | ) | const [pure virtual] |
virtual asIScriptFunction* asIScriptModule::GetFunctionDescriptorByIndex | ( | asUINT | index | ) | const [pure virtual] |
virtual int asIScriptModule::GetFunctionIdByDecl | ( | const char * | decl | ) | const [pure virtual] |
[in] | decl | The function signature. |
asERROR | The module was not compiled successfully. |
asINVALID_DECLARATION | The decl is invalid. |
asMULTIPLE_FUNCTIONS | Found multiple matching functions. |
asNO_FUNCTION | Didn't find any matching functions. |
This method should be used to retrieve the id of the script function that you wish to execute. The id is then sent to the context's Prepare method.
The method will find the script function with the exact same declaration.
virtual int asIScriptModule::GetFunctionIdByIndex | ( | asUINT | index | ) | const [pure virtual] |
[in] | index | The index of the function. |
asNO_FUNCTION | There is no function with that index. |
This method should be used to retrieve the id of the script function that you wish to execute. The id is then sent to the context's Prepare method.
virtual int asIScriptModule::GetFunctionIdByName | ( | const char * | name | ) | const [pure virtual] |
[in] | name | The name of the function. |
asERROR | The module was not compiled successfully. |
asMULTIPLE_FUNCTIONS | Found multiple matching functions. |
asNO_FUNCTION | Didn't find any matching functions. |
This method should be used to retrieve the id of the script function that you wish to execute. The id is then sent to the context's Prepare method.
virtual int asIScriptModule::GetGlobalVar | ( | asUINT | index, |
const char ** | name, | ||
int * | typeId = 0 , |
||
bool * | isConst = 0 |
||
) | const [pure virtual] |
[in] | index | The index of the global variable. |
[out] | name | The name of the variable. |
[out] | typeId | The type of the variable. |
[out] | isConst | Whether or not the variable is const. |
asINVALID_ARG | The index is out of range. |
virtual asUINT asIScriptModule::GetGlobalVarCount | ( | ) | const [pure virtual] |
virtual const char* asIScriptModule::GetGlobalVarDeclaration | ( | asUINT | index | ) | const [pure virtual] |
[in] | index | The index of the global variable. |
This method can be used to retrieve the variable declaration of the script variables that the host application will access. Verifying the declaration is important because, even though the script may compile correctly the user may not have used the variable types as intended.
virtual int asIScriptModule::GetGlobalVarIndexByDecl | ( | const char * | decl | ) | const [pure virtual] |
[in] | decl | The global variable declaration. |
asERROR | The module was not built successfully. |
asNO_GLOBAL_VAR | The matching global variable was found. |
This method should be used to retrieve the index of the script variable that you wish to access.
The method will find the script variable with the exact same declaration.
virtual int asIScriptModule::GetGlobalVarIndexByName | ( | const char * | name | ) | const [pure virtual] |
[in] | name | The name of the global variable. |
asERROR | The module was not built successfully. |
asNO_GLOBAL_VAR | The matching global variable was found. |
This method should be used to retrieve the index of the script variable that you wish to access.
virtual asUINT asIScriptModule::GetImportedFunctionCount | ( | ) | const [pure virtual] |
This function returns the number of functions that are imported in a module. These functions need to be bound before they can be used, or a script exception will be thrown.
virtual const char* asIScriptModule::GetImportedFunctionDeclaration | ( | asUINT | importIndex | ) | const [pure virtual] |
[in] | importIndex | The index of the imported function. |
Use this function to get the declaration of the imported function. The returned declaration can be used to find a matching function in another module that can be bound to the imported function.
virtual int asIScriptModule::GetImportedFunctionIndexByDecl | ( | const char * | decl | ) | const [pure virtual] |
[in] | decl | The function declaration of the imported function. |
asERROR | The module was not built successfully. |
asMULTIPLE_FUNCTIONS | Found multiple matching functions. |
asNO_FUNCTION | Didn't find any matching function. |
This function is used to find a specific imported function by its declaration.
virtual const char* asIScriptModule::GetImportedFunctionSourceModule | ( | asUINT | importIndex | ) | const [pure virtual] |
[in] | importIndex | The index of the imported function. |
Use this function to get the name of the suggested module to import the function from.
virtual const char* asIScriptModule::GetName | ( | ) | const [pure virtual] |
virtual asIObjectType* asIScriptModule::GetObjectTypeByIndex | ( | asUINT | index | ) | const [pure virtual] |
[in] | index | The index of the type. |
This does not increase the reference count of the returned object.
virtual asUINT asIScriptModule::GetObjectTypeCount | ( | ) | const [pure virtual] |
virtual const char* asIScriptModule::GetTypedefByIndex | ( | asUINT | index, |
int * | typeId | ||
) | const [pure virtual] |
[in] | index | The index of the typedef. |
[out] | typeId | The type that the typedef aliases. |
virtual asUINT asIScriptModule::GetTypedefCount | ( | ) | const [pure virtual] |
virtual int asIScriptModule::GetTypeIdByDecl | ( | const char * | decl | ) | const [pure virtual] |
[in] | decl | The declaration of the type. |
asINVALID_TYPE | decl is not a valid type. |
Translates a type declaration into a type id. The returned type id is valid for as long as the type is valid, so you can safely store it for later use to avoid potential overhead by calling this function each time. Just remember to update the type id, any time the type is changed within the engine, e.g. when recompiling script declared classes, or changing the engine configuration.
The type id is based on a sequence number and depends on the order in which the type ids are queried, thus is not guaranteed to always be the same for each execution of the application. The asETypeIdFlags can be used to obtain some information about the type directly from the id.
A base type yields the same type id whether the declaration is const or not, however if the const is for the subtype then the type id is different, e.g. string@ isn't the same as const string@ but string is the same as const string.
virtual void* asIScriptModule::GetUserData | ( | ) | const [pure virtual] |
virtual int asIScriptModule::LoadByteCode | ( | asIBinaryStream * | in | ) | [pure virtual] |
[in] | in | The input stream. |
asINVALID_ARG | The stream object wasn't specified. |
asBUILD_IN_PROGRESS | Another thread is currently building. |
This method is used to load pre-compiled byte code from disk or memory. The application must implement an object that inherits from asIBinaryStream to provide the necessary stream operations.
It is expected that the application performs the necessary validations to make sure the pre-compiled byte code is from a trusted source. The application should also make sure the pre-compiled byte code is compatible with the current engine configuration, i.e. that the engine has been configured in the same way as when the byte code was first compiled.
virtual int asIScriptModule::RemoveFunction | ( | int | funcId | ) | [pure virtual] |
[in] | funcId | The id of the function to remove. |
asNO_FUNCTION | The function is not part of the scope. |
This method allows the application to remove a single function from the scope of the module. The function is not destroyed immediately though, only when no more references point to it.
virtual int asIScriptModule::RemoveGlobalVar | ( | asUINT | index | ) | [pure virtual] |
[in] | index | The index of the global variable. |
asINVALID_ARG | The index is out of range. |
The global variable is removed from the scope of the module, but it is not destroyed until all functions that access it are freed.
virtual int asIScriptModule::ResetGlobalVars | ( | asIScriptContext * | ctx = 0 | ) | [pure virtual] |
[in] | ctx | Optional script context. |
asERROR | The module was not compiled successfully. |
asINIT_GLOBAL_VARS_FAILED | The initialization of the global variables failed. |
Resets the global variables declared in this module to their initial value. The context should be informed if the application needs to have extra control over how the initialization is done, for example for debugging, or for catching exceptions.
virtual int asIScriptModule::SaveByteCode | ( | asIBinaryStream * | out | ) | const [pure virtual] |
[in] | out | The output stream. |
asINVALID_ARG | The stream object wasn't specified. |
asNOT_SUPPORTED | Compiler support is disabled in the engine. |
This method is used to save pre-compiled byte code to disk or memory, for a later restoral. The application must implement an object that inherits from asIBinaryStream to provide the necessary stream operations.
The pre-compiled byte code is currently not platform independent, so you need to make sure the byte code is compiled on a platform that is compatible with the one that will load it.
[in] | accessMask | The access bit mask |
The module's access mask with be bitwise and-ed with the registered entity's access mask in order to determine if the module is allowed to access the entity. If the result is zero then the script in the module will not be able to use the entity.
This can be used to provide different interfaces to scripts that serve different purposes in the application.
virtual void asIScriptModule::SetName | ( | const char * | name | ) | [pure virtual] |
[in] | name | The new name. |
Sets the name of the script module.
virtual void* asIScriptModule::SetUserData | ( | void * | data | ) | [pure virtual] |
[in] | data | A pointer to the user data. |
This method allows the application to associate a value, e.g. a pointer, with the module instance.
Optionally, a callback function can be registered to clean up the user data when the module is destroyed.
virtual int asIScriptModule::UnbindAllImportedFunctions | ( | ) | [pure virtual] |
Unbinds all imported functions in the module.
virtual int asIScriptModule::UnbindImportedFunction | ( | asUINT | importIndex | ) | [pure virtual] |
[in] | importIndex | The index of the imported function. |
asINVALID_ARG | The index is not valid. |
Unbinds the imported function.