Add support for retrieving list values from a slot
This PR adds support for retrieving list information from a slot. Rather than take the whole list, two different methods are provided for retrieving a) the length of the list, and b) a specific value in the list.
This commit is contained in:
@@ -345,6 +345,12 @@ double wrenGetSlotDouble(WrenVM* vm, int slot);
|
||||
// foreign class.
|
||||
void* wrenGetSlotForeign(WrenVM* vm, int slot);
|
||||
|
||||
// Returns the size of the list stored in [slot].
|
||||
int wrenGetSlotListSize(WrenVM* vm, int slot);
|
||||
|
||||
// Reads a value from the list in [slot].
|
||||
WrenValue* wrenGetSlotListValue(WrenVM* vm, int slot, int index);
|
||||
|
||||
// Reads a string from [slot].
|
||||
//
|
||||
// The memory for the returned string is owned by Wren. You can inspect it
|
||||
|
||||
@@ -1547,6 +1547,26 @@ void* wrenGetSlotForeign(WrenVM* vm, int slot)
|
||||
return AS_FOREIGN(vm->apiStack[slot])->data;
|
||||
}
|
||||
|
||||
int wrenGetSlotListSize(WrenVM* vm, int slot)
|
||||
{
|
||||
validateApiSlot(vm, slot);
|
||||
ASSERT(IS_LIST(vm->apiStack[slot]),
|
||||
"Slot must hold a list instance.");
|
||||
|
||||
ValueBuffer elements = AS_LIST(vm->apiStack[slot])->elements;
|
||||
return elements.count;
|
||||
}
|
||||
|
||||
WrenValue* wrenGetSlotListValue(WrenVM* vm, int slot, int index)
|
||||
{
|
||||
validateApiSlot(vm, slot);
|
||||
ASSERT(IS_LIST(vm->apiStack[slot]),
|
||||
"Slot must hold a list instance.");
|
||||
|
||||
ValueBuffer elements = AS_LIST(vm->apiStack[slot])->elements;
|
||||
return wrenCaptureValue(vm, elements.data[index]);
|
||||
}
|
||||
|
||||
const char* wrenGetSlotString(WrenVM* vm, int slot)
|
||||
{
|
||||
validateApiSlot(vm, slot);
|
||||
|
||||
Reference in New Issue
Block a user