1
0

pocketpy_c.h 3.4 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 void (*pkpy_COutputHandler)(const char*, int);
  12. typedef unsigned char* (*pkpy_CImportHandler)(const char*, int, int*);
  13. typedef int pkpy_CName;
  14. typedef int pkpy_CType;
  15. typedef const char* pkpy_CString;
  16. /* Basic Functions */
  17. PK_EXPORT pkpy_vm* pkpy_new_vm(bool enable_os);
  18. PK_EXPORT void pkpy_delete_vm(pkpy_vm*);
  19. PK_EXPORT bool pkpy_exec(pkpy_vm*, const char* source);
  20. PK_EXPORT bool pkpy_exec_2(pkpy_vm*, const char* source, const char* filename, int mode, const char* module);
  21. /* Stack Manipulation */
  22. PK_EXPORT bool pkpy_dup(pkpy_vm*, int i);
  23. PK_EXPORT bool pkpy_pop(pkpy_vm*, int n);
  24. PK_EXPORT bool pkpy_pop_top(pkpy_vm*);
  25. PK_EXPORT bool pkpy_dup_top(pkpy_vm*);
  26. PK_EXPORT bool pkpy_rot_two(pkpy_vm*);
  27. PK_EXPORT int pkpy_stack_size(pkpy_vm*);
  28. // int
  29. PK_EXPORT bool pkpy_push_int(pkpy_vm*, int val);
  30. PK_EXPORT bool pkpy_is_int(pkpy_vm*, int i);
  31. PK_EXPORT bool pkpy_to_int(pkpy_vm*, int i, int* out);
  32. // float
  33. PK_EXPORT bool pkpy_push_float(pkpy_vm*, double val);
  34. PK_EXPORT bool pkpy_is_float(pkpy_vm*, int i);
  35. PK_EXPORT bool pkpy_to_float(pkpy_vm*, int i, double* out);
  36. // bool
  37. PK_EXPORT bool pkpy_push_bool(pkpy_vm*, bool val);
  38. PK_EXPORT bool pkpy_is_bool(pkpy_vm*, int i);
  39. PK_EXPORT bool pkpy_to_bool(pkpy_vm*, int i, bool* out);
  40. // string
  41. PK_EXPORT bool pkpy_push_string(pkpy_vm*, pkpy_CString val);
  42. PK_EXPORT bool pkpy_is_string(pkpy_vm*, int i);
  43. PK_EXPORT bool pkpy_to_string(pkpy_vm*, int i, pkpy_CString* out);
  44. // void_p
  45. PK_EXPORT bool pkpy_push_voidp(pkpy_vm*, void* val);
  46. PK_EXPORT bool pkpy_is_voidp(pkpy_vm*, int i);
  47. PK_EXPORT bool pkpy_to_voidp(pkpy_vm*, int i, void** out);
  48. // none
  49. PK_EXPORT bool pkpy_push_none(pkpy_vm*);
  50. PK_EXPORT bool pkpy_is_none(pkpy_vm*, int i);
  51. // special push
  52. PK_EXPORT bool pkpy_push_null(pkpy_vm*);
  53. PK_EXPORT bool pkpy_push_function(pkpy_vm*, const char* sig, pkpy_CFunction val);
  54. PK_EXPORT bool pkpy_push_module(pkpy_vm*, const char* name);
  55. // some opt
  56. PK_EXPORT bool pkpy_getattr(pkpy_vm*, pkpy_CName name);
  57. PK_EXPORT bool pkpy_setattr(pkpy_vm*, pkpy_CName name);
  58. PK_EXPORT bool pkpy_getglobal(pkpy_vm*, pkpy_CName name);
  59. PK_EXPORT bool pkpy_setglobal(pkpy_vm*, pkpy_CName name);
  60. PK_EXPORT bool pkpy_eval(pkpy_vm*, const char* source);
  61. PK_EXPORT bool pkpy_unpack_sequence(pkpy_vm*, int size);
  62. PK_EXPORT bool pkpy_get_unbound_method(pkpy_vm*, pkpy_CName name);
  63. PK_EXPORT bool pkpy_py_repr(pkpy_vm*);
  64. PK_EXPORT bool pkpy_py_str(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. #define pkpy_string(__s) (__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_set_output_handler(pkpy_vm*, pkpy_COutputHandler handler);
  77. PK_EXPORT void pkpy_set_import_handler(pkpy_vm*, pkpy_CImportHandler handler);
  78. /* REPL */
  79. PK_EXPORT void* pkpy_new_repl(pkpy_vm*);
  80. PK_EXPORT bool pkpy_repl_input(void* r, const char* line);
  81. PK_EXPORT void pkpy_delete_repl(void* repl);
  82. #ifdef __cplusplus
  83. }
  84. #endif
  85. #endif