From e2bf81d7f2689b6604de250271397a5d68999dac Mon Sep 17 00:00:00 2001 From: Kolten Pearson Date: Mon, 8 May 2023 20:41:44 -0600 Subject: [PATCH] added a pkpy_vm_push method --- c_bindings/pocketpy_c.cpp | 8 ++++++++ c_bindings/pocketpy_c.h | 4 ++++ c_bindings/test.c | 2 ++ 3 files changed, 14 insertions(+) diff --git a/c_bindings/pocketpy_c.cpp b/c_bindings/pocketpy_c.cpp index ece6996d..cec58df0 100644 --- a/c_bindings/pocketpy_c.cpp +++ b/c_bindings/pocketpy_c.cpp @@ -547,3 +547,11 @@ bool pkpy_pop(pkpy_vm* vm_handle, int n) { vm->c_data->shrink(n); return true; } + + +bool pkpy_push(pkpy_vm* vm_handle, int index) { + CVM* vm = (CVM*) vm_handle; + index = lua_to_cstack_index(index, vm->c_data->size()); + vm->c_data->push(vm->c_data->begin()[index]); + return true; +} diff --git a/c_bindings/pocketpy_c.h b/c_bindings/pocketpy_c.h index 7924d75c..143f5019 100644 --- a/c_bindings/pocketpy_c.h +++ b/c_bindings/pocketpy_c.h @@ -30,6 +30,10 @@ typedef int (*pkpy_function)(pkpy_vm*); bool pkpy_pop(pkpy_vm*, int n); +//push the item at index onto the top of the stack (as well as leaving it where +//it is on the stack) +bool pkpy_push(pkpy_vm*, int index); + bool pkpy_push_function(pkpy_vm*, pkpy_function); bool pkpy_push_int(pkpy_vm*, int); bool pkpy_push_float(pkpy_vm*, double); diff --git a/c_bindings/test.c b/c_bindings/test.c index 12336094..d95a1d44 100644 --- a/c_bindings/test.c +++ b/c_bindings/test.c @@ -209,6 +209,8 @@ int main(int argc, char** argv) { check(pkpy_is_string(vm, -3)); check(pkpy_is_none(vm, -2)); check(pkpy_is_voidp(vm, -1)); + check(pkpy_push(vm, -3)); + check(pkpy_is_string(vm, -1)); printf("\ntesting error catching\n"); error(pkpy_vm_run(vm, "let's make sure syntax errors get caught"));