mirror of
https://github.com/wren-lang/wren.git
synced 2026-01-11 22:28:45 +01:00
- wrenEnsureSlots() Lets you go the foreign slot stack to make room for a temporary work area. - wrenSetSlotNewList() Creates a new empty list and stores it in a slot. - wrenInsertInList() Takes a value from one slot and inserts it into the list in another. Still need more functions like getting elements from a list, removing, etc. but this at least lets you create, populate, and return lists from foreign methods.
47 lines
973 B
C
47 lines
973 B
C
#include <string.h>
|
|
|
|
#include "lists.h"
|
|
|
|
static void newList(WrenVM* vm)
|
|
{
|
|
wrenSetSlotNewList(vm, 0);
|
|
}
|
|
|
|
// Helper function to store a double in a slot then insert it into the list at
|
|
// slot zero.
|
|
static void insertNumber(WrenVM* vm, int index, double value)
|
|
{
|
|
wrenSetSlotDouble(vm, 1, value);
|
|
wrenInsertInList(vm, 0, index, 1);
|
|
}
|
|
|
|
static void insert(WrenVM* vm)
|
|
{
|
|
wrenSetSlotNewList(vm, 0);
|
|
|
|
wrenEnsureSlots(vm, 2);
|
|
|
|
// Appending.
|
|
insertNumber(vm, 0, 1.0);
|
|
insertNumber(vm, 1, 2.0);
|
|
insertNumber(vm, 2, 3.0);
|
|
|
|
// Inserting.
|
|
insertNumber(vm, 0, 4.0);
|
|
insertNumber(vm, 1, 5.0);
|
|
insertNumber(vm, 2, 6.0);
|
|
|
|
// Negative indexes.
|
|
insertNumber(vm, -1, 7.0);
|
|
insertNumber(vm, -2, 8.0);
|
|
insertNumber(vm, -3, 9.0);
|
|
}
|
|
|
|
WrenForeignMethodFn listsBindMethod(const char* signature)
|
|
{
|
|
if (strcmp(signature, "static Lists.newList()") == 0) return newList;
|
|
if (strcmp(signature, "static Lists.insert()") == 0) return insert;
|
|
|
|
return NULL;
|
|
}
|