pocketpy_c.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #ifndef POCKETPY_C_H
  2. #define POCKETPY_C_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #include <stdbool.h>
  7. #include <stdint.h>
  8. #include "export.h"
  9. typedef struct pkpy_vm_handle pkpy_vm;
  10. typedef int (*pkpy_CFunction)(pkpy_vm*);
  11. typedef void (*pkpy_COutputHandler)(pkpy_vm*, const char*, int);
  12. typedef int pkpy_CName;
  13. typedef int pkpy_CType;
  14. typedef struct{
  15. const char* data;
  16. int size;
  17. }pkpy_CString;
  18. /* Basic Functions */
  19. PK_EXPORT pkpy_vm* pkpy_new_vm(bool enable_os);
  20. PK_EXPORT void pkpy_delete_vm(pkpy_vm*);
  21. PK_EXPORT bool pkpy_exec(pkpy_vm*, const char* source);
  22. PK_EXPORT bool pkpy_exec_2(pkpy_vm*, const char* source, const char* filename, int mode, const char* module);
  23. /* Stack Manipulation */
  24. PK_EXPORT bool pkpy_dup(pkpy_vm*, int i);
  25. PK_EXPORT bool pkpy_pop(pkpy_vm*, int n);
  26. PK_EXPORT bool pkpy_pop_top(pkpy_vm*);
  27. PK_EXPORT bool pkpy_dup_top(pkpy_vm*);
  28. PK_EXPORT bool pkpy_rot_two(pkpy_vm*);
  29. PK_EXPORT int pkpy_stack_size(pkpy_vm*);
  30. // int
  31. PK_EXPORT bool pkpy_push_int(pkpy_vm*, int val);
  32. PK_EXPORT bool pkpy_is_int(pkpy_vm*, int i);
  33. PK_EXPORT bool pkpy_to_int(pkpy_vm*, int i, int* out);
  34. // float
  35. PK_EXPORT bool pkpy_push_float(pkpy_vm*, float val);
  36. PK_EXPORT bool pkpy_is_float(pkpy_vm*, int i);
  37. PK_EXPORT bool pkpy_to_float(pkpy_vm*, int i, float* out);
  38. // bool
  39. PK_EXPORT bool pkpy_push_bool(pkpy_vm*, bool val);
  40. PK_EXPORT bool pkpy_is_bool(pkpy_vm*, int i);
  41. PK_EXPORT bool pkpy_to_bool(pkpy_vm*, int i, bool* out);
  42. // string
  43. PK_EXPORT bool pkpy_push_string(pkpy_vm*, pkpy_CString val);
  44. PK_EXPORT bool pkpy_is_string(pkpy_vm*, int i);
  45. PK_EXPORT bool pkpy_to_string(pkpy_vm*, int i, pkpy_CString* out);
  46. // void_p
  47. PK_EXPORT bool pkpy_push_voidp(pkpy_vm*, void* val);
  48. PK_EXPORT bool pkpy_is_voidp(pkpy_vm*, int i);
  49. PK_EXPORT bool pkpy_to_voidp(pkpy_vm*, int i, void** out);
  50. // none
  51. PK_EXPORT bool pkpy_push_none(pkpy_vm*);
  52. PK_EXPORT bool pkpy_is_none(pkpy_vm*, int i);
  53. // special push
  54. PK_EXPORT bool pkpy_push_null(pkpy_vm*);
  55. PK_EXPORT bool pkpy_push_function(pkpy_vm*, const char* sig, pkpy_CFunction val);
  56. PK_EXPORT bool pkpy_push_module(pkpy_vm*, const char* name);
  57. // some opt
  58. PK_EXPORT bool pkpy_getattr(pkpy_vm*, pkpy_CName name);
  59. PK_EXPORT bool pkpy_setattr(pkpy_vm*, pkpy_CName name);
  60. PK_EXPORT bool pkpy_getglobal(pkpy_vm*, pkpy_CName name);
  61. PK_EXPORT bool pkpy_setglobal(pkpy_vm*, pkpy_CName name);
  62. PK_EXPORT bool pkpy_eval(pkpy_vm*, const char* source);
  63. PK_EXPORT bool pkpy_unpack_sequence(pkpy_vm*, int size);
  64. PK_EXPORT bool pkpy_get_unbound_method(pkpy_vm*, pkpy_CName name);
  65. PK_EXPORT bool pkpy_py_repr(pkpy_vm*);
  66. /* Error Handling */
  67. PK_EXPORT bool pkpy_error(pkpy_vm*, const char* name, pkpy_CString msg);
  68. PK_EXPORT bool pkpy_check_error(pkpy_vm*);
  69. PK_EXPORT bool pkpy_clear_error(pkpy_vm*, char** message);
  70. /* Callables */
  71. PK_EXPORT bool pkpy_vectorcall(pkpy_vm*, int argc);
  72. /* Special APIs */
  73. PK_EXPORT void pkpy_free(void* p);
  74. PK_EXPORT pkpy_CString pkpy_string(const char* s);
  75. PK_EXPORT pkpy_CName pkpy_name(const char* s);
  76. PK_EXPORT pkpy_CString pkpy_name_to_string(pkpy_CName name);
  77. PK_EXPORT void pkpy_compile_to_string(pkpy_vm*, const char* source, const char* filename, int mode, bool* ok, char** out);
  78. PK_EXPORT void pkpy_set_output_handler(pkpy_vm*, pkpy_COutputHandler handler);
  79. /* REPL */
  80. PK_EXPORT void* pkpy_new_repl(pkpy_vm*);
  81. PK_EXPORT bool pkpy_repl_input(void* r, const char* line);
  82. PK_EXPORT void pkpy_delete_repl(void* repl);
  83. #ifdef __cplusplus
  84. }
  85. #endif
  86. #endif