Creating / Manipulating Objects#
Arrays#
-
SQRESULT newarray(HSquirrelVM *sqvm, const SQInteger size = 0)#
- Parameters:
HSquirrelVM* sqvm – the target vm
SQInteger size – initial size of the array
- Returns:
a
SQRESULT
creates a new array and pushes it to the stack
newarray(sqvm, 0); pushstring(sqvm, "val1"); arrayappend(sqvm, -2); pushinteger(sqvm, 15); arrayappend(sqvm, -2); /* The array on the stack now looks like this: [ "val1", 15 ] */
-
SQRESULT arrayappend(HSquirrelVM *sqvm, const SQInteger stackpos)#
- Parameters:
HSquirrelVM* sqvm – the target vm
SQInteger stackpos – stack position of the array to append to
- Returns:
a
SQRESULT
pops a value from the stack and pushes it to the back of the array at the position idx in the stack
Tables#
-
SQRESULT newtable(HSquirrelVM *sqvm)#
- Parameters:
HSquirrelVM* sqvm – the target vm
- Returns:
a
SQRESULT
creates a new table and pushes it onto the stack.
-
SQRESULT newslot(HSquirrelVM *sqvm, SQInteger stackpos, SQBool bstatic)#
- Parameters:
HSquirrelVM* sqvm – the target vm
SQInteger stackpos – the index of the table to insert into
SQBool bstatic – if
SQTrue
creates a static member. This parameter is only used if the target object is a class.
pops a key and a value from the stack and performs a set operation on the table or class that is at position idx in the stack, if the slot does not exist it will be created.
newtable(sqvm); // slot 1 pushstring(sqvm, "key"); pushstring(sqvm, "value"); newslot(sqvm, -3); // slot 2 pushstring(sqvm, "key2"); pushasset(sqvm, "value2"); newslot(sqvm, -3); // slot 3 pushstring(sqvm, "key3"); newtable(sqvm); pushstring(sqvm, "sub"); pushinteger(sqvm, 13); newslot(sqvm, -3); newslot(sqvm, -3); /* The table on the stack now looks like this: { key = "value" key2 = $"value2" key3 = { sub = 13 } } */
Structs#
Note
These functions aren’t available for plugins yet.
-
SQRESULT::SQRESULT_NULL pushnewstructinstance(HSquirrelVM *sqvm, int fieldCount)#
- Parameters:
HSquirrelVM* sqvm – The target vm
int fieldCount – total number of fields the struct contains
Creates and pushes a struct instance with
fieldCount
to the stack.
-
SQRESULT::SQRESULT_NULL sealstructslot(HSquirrelVM *sqvm, int fieldIndex)#
- Parameters:
HSquirrelVM* sqvm – The target vm
int fieldIndex – Index of the field to fill
Pops a value from the stack and fills the field at
fieldIndex
from the struct object that needs to be at the top of the stack.pushnewstructinstance(sqvm, 2); // create a struct instance with 2 slots pushinteger(sqvm, 12); sealstructslot(sqvm, 0); pushstring(sqvm, "example", -1); sealstructslot(sqvm, 1); /* Assuming the compiler expects this slot: struct ExStruct { int i, string s } , the struct on the stack looks like this ExStruct { i = 12, s = "example" } */
Userdata#
-
T *createuserdata(HSquirrelVM *sqvm, SQInteger size)#
- Parameters:
HSquirrelVM* sqvm – The target vm
SQInteger size – bit size of the userdata object
When the function sq_newuserdata is called, Squirrel allocates a new userdata with the specified size, returns a pointer to his payload buffer and push the object in the stack; at this point the application can do whatever it want with this memory chunk, the VM will automatically take care of the memory deallocation like for every other built-in type. A userdata can be passed to a function or stored in a table slot. By default Squirrel cannot manipulate directly userdata; however is possible to assign a delegate to it and define a behavior like it would be a table. Because the application would want to do something with the data stored in a userdata object when it get deleted, is possible to assign a callback that will be called by the VM just before deleting a certain userdata. This is done through the API call sq_setreleasehook.
-
SQRESULT setuserdatatypeid(HSquirrelVM *sqvm, const SQInteger stackpos, uint64_t typeId)#
- Parameters:
HSquirrelVM* sqvm – The target vm
SQInteger stackpos – Stack position of the userdata
-
SQRESULT getuserdata(HSquirrelVM *sqvm, const SQInteger stackpos, T *data, uint64_t *typeId)#
- Parameters:
HSquirrelVM* sqvm – The target vm
SQInteger stackpos – Stack position of the userdata
T* data – Pointer to an arbitrary variable the userdata gets mapped to
uint64_t* typeid – Pointer to a variable edited to hold the userdata type