Kolten Pearson 2 лет назад
Родитель
Сommit
e2bf81d7f2
3 измененных файлов с 14 добавлено и 0 удалено
  1. 8 0
      c_bindings/pocketpy_c.cpp
  2. 4 0
      c_bindings/pocketpy_c.h
  3. 2 0
      c_bindings/test.c

+ 8 - 0
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;
+}

+ 4 - 0
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);

+ 2 - 0
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"));