pocketpy_c.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "pocketpy.h"
  2. #include "pocketpy_c.h"
  3. pkpy_vm pkpy_vm_create(bool use_stdio, bool enable_os) {
  4. pkpy::VM* p = new pkpy::VM(use_stdio, enable_os);
  5. return (pkpy_vm) p;
  6. }
  7. void pkpy_vm_exec(pkpy_vm vm_handle, const char* source) {
  8. pkpy::VM* vm = (pkpy::VM*) vm_handle;
  9. vm->exec(source, "main.py", pkpy::EXEC_MODE);
  10. }
  11. void pkpy_vm_destroy(pkpy_vm vm_handle) {
  12. pkpy::VM* vm = (pkpy::VM*) vm_handle;
  13. delete vm;
  14. }
  15. void pkpy_push_cfunction(pkpy_vm vm_handle, pkpy_cfunction f) {
  16. pkpy::VM* vm = (pkpy::VM*) vm_handle;
  17. vm->s_data.push(VAR((pkpy::StackFunc) f));
  18. }
  19. void pkpy_push_int(pkpy_vm vm_handle, int64_t value) {
  20. pkpy::VM* vm = (pkpy::VM*) vm_handle;
  21. vm->s_data.push(VAR(value));
  22. }
  23. void pkpy_push_null(pkpy_vm vm_handle) {
  24. pkpy::VM* vm = (pkpy::VM*) vm_handle;
  25. vm->s_data.push(pkpy::PY_NULL);
  26. }
  27. void pkpy_push_float(pkpy_vm vm_handle, double value) {
  28. pkpy::VM* vm = (pkpy::VM*) vm_handle;
  29. vm->s_data.push(VAR(value));
  30. }
  31. void pkpy_set_global(pkpy_vm vm_handle, const char* name) {
  32. pkpy::VM* vm = (pkpy::VM*) vm_handle;
  33. vm->_main->attr().set(name, vm->s_data.top());
  34. vm->s_data.pop();
  35. }
  36. void pkpy_get_global(pkpy_vm vm_handle, const char* name) {
  37. pkpy::VM* vm = (pkpy::VM*) vm_handle;
  38. pkpy::PyObject* o = vm->_main->attr().try_get(name);
  39. vm->s_data.push(o);
  40. }
  41. void pkpy_call(pkpy_vm vm_handle, int argc) {
  42. pkpy::VM* vm = (pkpy::VM*) vm_handle;
  43. pkpy::PyObject* o = vm->vectorcall(argc, 0, 0);
  44. vm->s_data.push(o);
  45. }
  46. int pkpy_toint(pkpy_vm vm_handle, int index) {
  47. pkpy::VM* vm = (pkpy::VM*) vm_handle;
  48. pkpy::PyObject* o = vm->s_data.peek(index);
  49. return pkpy::py_cast<int>(vm, o);
  50. }