pocketpy_c.h 3.2 KB

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