forked from Mirror/wren
Start moving embedding API towards "slot" register-API.
- wrenGetArgumentCount() -> wrenGetSlotCount() - wrenGetArgument___() -> wrenGetSlot___() Also, the get functions assert that the value is the right type instead of checking at runtime. This puts the onus on the caller to be safe, but maximizes performance.
This commit is contained in:
@ -5,17 +5,18 @@
|
||||
static void arguments(WrenVM* vm)
|
||||
{
|
||||
double result = 0;
|
||||
result += wrenGetArgumentDouble(vm, 1);
|
||||
result += wrenGetArgumentDouble(vm, 2);
|
||||
result += wrenGetArgumentDouble(vm, 3);
|
||||
result += wrenGetArgumentDouble(vm, 4);
|
||||
|
||||
|
||||
result += wrenGetSlotDouble(vm, 1);
|
||||
result += wrenGetSlotDouble(vm, 2);
|
||||
result += wrenGetSlotDouble(vm, 3);
|
||||
result += wrenGetSlotDouble(vm, 4);
|
||||
|
||||
wrenReturnDouble(vm, result);
|
||||
}
|
||||
|
||||
WrenForeignMethodFn benchmarkBindMethod(const char* signature)
|
||||
{
|
||||
if (strcmp(signature, "static Benchmark.arguments(_,_,_,_)") == 0) return arguments;
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -18,15 +18,15 @@ static void counterAllocate(WrenVM* vm)
|
||||
|
||||
static void counterIncrement(WrenVM* vm)
|
||||
{
|
||||
double* value = (double*)wrenGetArgumentForeign(vm, 0);
|
||||
double increment = wrenGetArgumentDouble(vm, 1);
|
||||
double* value = (double*)wrenGetSlotForeign(vm, 0);
|
||||
double increment = wrenGetSlotDouble(vm, 1);
|
||||
|
||||
*value += increment;
|
||||
}
|
||||
|
||||
static void counterValue(WrenVM* vm)
|
||||
{
|
||||
double value = *(double*)wrenGetArgumentForeign(vm, 0);
|
||||
double value = *(double*)wrenGetSlotForeign(vm, 0);
|
||||
wrenReturnDouble(vm, value);
|
||||
}
|
||||
|
||||
@ -34,9 +34,9 @@ static void pointAllocate(WrenVM* vm)
|
||||
{
|
||||
double* coordinates = (double*)wrenAllocateForeign(vm, sizeof(double[3]));
|
||||
|
||||
// This gets called by both constructors, so sniff the argument count to see
|
||||
// This gets called by both constructors, so sniff the slot count to see
|
||||
// which one was invoked.
|
||||
if (wrenGetArgumentCount(vm) == 1)
|
||||
if (wrenGetSlotCount(vm) == 1)
|
||||
{
|
||||
coordinates[0] = 0.0;
|
||||
coordinates[1] = 0.0;
|
||||
@ -44,23 +44,23 @@ static void pointAllocate(WrenVM* vm)
|
||||
}
|
||||
else
|
||||
{
|
||||
coordinates[0] = wrenGetArgumentDouble(vm, 1);
|
||||
coordinates[1] = wrenGetArgumentDouble(vm, 2);
|
||||
coordinates[2] = wrenGetArgumentDouble(vm, 3);
|
||||
coordinates[0] = wrenGetSlotDouble(vm, 1);
|
||||
coordinates[1] = wrenGetSlotDouble(vm, 2);
|
||||
coordinates[2] = wrenGetSlotDouble(vm, 3);
|
||||
}
|
||||
}
|
||||
|
||||
static void pointTranslate(WrenVM* vm)
|
||||
{
|
||||
double* coordinates = (double*)wrenGetArgumentForeign(vm, 0);
|
||||
coordinates[0] += wrenGetArgumentDouble(vm, 1);
|
||||
coordinates[1] += wrenGetArgumentDouble(vm, 2);
|
||||
coordinates[2] += wrenGetArgumentDouble(vm, 3);
|
||||
double* coordinates = (double*)wrenGetSlotForeign(vm, 0);
|
||||
coordinates[0] += wrenGetSlotDouble(vm, 1);
|
||||
coordinates[1] += wrenGetSlotDouble(vm, 2);
|
||||
coordinates[2] += wrenGetSlotDouble(vm, 3);
|
||||
}
|
||||
|
||||
static void pointToString(WrenVM* vm)
|
||||
{
|
||||
double* coordinates = (double*)wrenGetArgumentForeign(vm, 0);
|
||||
double* coordinates = (double*)wrenGetSlotForeign(vm, 0);
|
||||
char result[100];
|
||||
sprintf(result, "(%g, %g, %g)",
|
||||
coordinates[0], coordinates[1], coordinates[2]);
|
||||
|
||||
@ -6,7 +6,7 @@ static WrenValue* value;
|
||||
|
||||
static void setValue(WrenVM* vm)
|
||||
{
|
||||
value = wrenGetArgumentValue(vm, 1);
|
||||
value = wrenGetSlotValue(vm, 1);
|
||||
}
|
||||
|
||||
static void getValue(WrenVM* vm)
|
||||
|
||||
Reference in New Issue
Block a user