wasm_c_api_internal.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. /*
  2. * Copyright (C) 2019 Intel Corporation. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #ifndef _WASM_C_API_INTERNAL_H
  6. #define _WASM_C_API_INTERNAL_H
  7. #include "../include/wasm_c_api.h"
  8. #include "wasm_runtime_common.h"
  9. #ifndef own
  10. #define own
  11. #endif
  12. /* Vectors */
  13. /* we will malloc resource for the vector's data field */
  14. /* we will release resource of data */
  15. /* caller needs to take care resource for the vector itself */
  16. #define DEFAULT_VECTOR_INIT_LENGTH (64)
  17. WASM_DECLARE_VEC(instance, *)
  18. WASM_DECLARE_VEC(module, *)
  19. WASM_DECLARE_VEC(store, *)
  20. /* Runtime Environment */
  21. struct wasm_engine_t {
  22. /* support one store for now */
  23. wasm_store_vec_t *stores;
  24. };
  25. struct wasm_store_t {
  26. wasm_module_vec_t *modules;
  27. wasm_instance_vec_t *instances;
  28. Vector *foreigns;
  29. };
  30. /* Type Representations */
  31. struct wasm_valtype_t {
  32. wasm_valkind_t kind;
  33. };
  34. struct wasm_functype_t {
  35. uint32 extern_kind;
  36. /* gona to new and delete own */
  37. wasm_valtype_vec_t *params;
  38. wasm_valtype_vec_t *results;
  39. };
  40. struct wasm_globaltype_t {
  41. uint32 extern_kind;
  42. /* gona to new and delete own */
  43. wasm_valtype_t *val_type;
  44. wasm_mutability_t mutability;
  45. };
  46. struct wasm_tabletype_t {
  47. uint32 extern_kind;
  48. /* always be WASM_FUNCREF */
  49. wasm_valtype_t *val_type;
  50. wasm_limits_t limits;
  51. };
  52. struct wasm_memorytype_t {
  53. uint32 extern_kind;
  54. wasm_limits_t limits;
  55. };
  56. struct wasm_externtype_t {
  57. uint32 extern_kind;
  58. /* reservered space */
  59. uint8 data[1];
  60. };
  61. struct wasm_importtype_t {
  62. wasm_name_t *module_name;
  63. wasm_name_t *name;
  64. wasm_externtype_t *extern_type;
  65. };
  66. struct wasm_exporttype_t {
  67. wasm_name_t *name;
  68. wasm_externtype_t *extern_type;
  69. };
  70. /* Runtime Objects */
  71. enum wasm_reference_kind {
  72. WASM_REF_foreign,
  73. WASM_REF_func,
  74. WASM_REF_global,
  75. WASM_REF_memory,
  76. WASM_REF_table,
  77. };
  78. struct wasm_host_info {
  79. void *info;
  80. void (*finalizer)(void *);
  81. };
  82. struct wasm_ref_t {
  83. wasm_store_t *store;
  84. enum wasm_reference_kind kind;
  85. struct wasm_host_info host_info;
  86. uint32 ref_idx_rt;
  87. WASMModuleInstanceCommon *inst_comm_rt;
  88. };
  89. struct wasm_trap_t {
  90. wasm_byte_vec_t *message;
  91. Vector *frames;
  92. };
  93. struct wasm_foreign_t {
  94. wasm_store_t *store;
  95. enum wasm_reference_kind kind;
  96. struct wasm_host_info host_info;
  97. int32 ref_cnt;
  98. uint32 foreign_idx_rt;
  99. WASMModuleInstanceCommon *inst_comm_rt;
  100. };
  101. struct wasm_func_t {
  102. wasm_store_t *store;
  103. wasm_name_t *module_name;
  104. wasm_name_t *name;
  105. uint16 kind;
  106. struct wasm_host_info host_info;
  107. wasm_functype_t *type;
  108. bool with_env;
  109. union {
  110. wasm_func_callback_t cb;
  111. struct callback_ext {
  112. void *env;
  113. wasm_func_callback_with_env_t cb;
  114. void (*finalizer)(void *);
  115. } cb_env;
  116. } u;
  117. /*
  118. * an index in both functions runtime instance lists
  119. * of interpreter mode and aot mode
  120. */
  121. uint16 func_idx_rt;
  122. WASMModuleInstanceCommon *inst_comm_rt;
  123. WASMFunctionInstanceCommon *func_comm_rt;
  124. };
  125. struct wasm_global_t {
  126. wasm_store_t *store;
  127. wasm_name_t *module_name;
  128. wasm_name_t *name;
  129. uint16 kind;
  130. struct wasm_host_info host_info;
  131. wasm_globaltype_t *type;
  132. wasm_val_t *init;
  133. /*
  134. * an index in both global runtime instance lists
  135. * of interpreter mode and aot mode
  136. */
  137. uint16 global_idx_rt;
  138. WASMModuleInstanceCommon *inst_comm_rt;
  139. };
  140. struct wasm_memory_t {
  141. wasm_store_t *store;
  142. wasm_name_t *module_name;
  143. wasm_name_t *name;
  144. uint16 kind;
  145. struct wasm_host_info host_info;
  146. wasm_memorytype_t *type;
  147. /*
  148. * an index in both memory runtime instance lists
  149. * of interpreter mode and aot mode
  150. */
  151. uint16 memory_idx_rt;
  152. WASMModuleInstanceCommon *inst_comm_rt;
  153. };
  154. struct wasm_table_t {
  155. wasm_store_t *store;
  156. wasm_name_t *module_name;
  157. wasm_name_t *name;
  158. uint16 kind;
  159. struct wasm_host_info host_info;
  160. wasm_tabletype_t *type;
  161. /*
  162. * an index in both table runtime instance lists
  163. * of interpreter mode and aot mode
  164. */
  165. uint16 table_idx_rt;
  166. WASMModuleInstanceCommon *inst_comm_rt;
  167. };
  168. struct wasm_extern_t {
  169. wasm_store_t *store;
  170. wasm_name_t *module_name;
  171. wasm_name_t *name;
  172. wasm_externkind_t kind;
  173. /* reservered space */
  174. uint8 data[1];
  175. };
  176. struct wasm_instance_t {
  177. wasm_store_t *store;
  178. wasm_extern_vec_t *imports;
  179. wasm_extern_vec_t *exports;
  180. struct wasm_host_info host_info;
  181. WASMModuleInstanceCommon *inst_comm_rt;
  182. };
  183. wasm_ref_t *
  184. wasm_ref_new_internal(wasm_store_t *store,
  185. enum wasm_reference_kind kind,
  186. uint32 obj_idx_rt,
  187. WASMModuleInstanceCommon *inst_comm_rt);
  188. wasm_foreign_t *
  189. wasm_foreign_new_internal(wasm_store_t *store,
  190. uint32 foreign_idx_rt,
  191. WASMModuleInstanceCommon *inst_comm_rt);
  192. wasm_func_t *
  193. wasm_func_new_internal(wasm_store_t *store,
  194. uint16 func_idx_rt,
  195. WASMModuleInstanceCommon *inst_comm_rt);
  196. wasm_global_t *
  197. wasm_global_new_internal(wasm_store_t *store,
  198. uint16 global_idx_rt,
  199. WASMModuleInstanceCommon *inst_comm_rt);
  200. wasm_memory_t *
  201. wasm_memory_new_internal(wasm_store_t *store,
  202. uint16 memory_idx_rt,
  203. WASMModuleInstanceCommon *inst_comm_rt);
  204. wasm_table_t *
  205. wasm_table_new_internal(wasm_store_t *store,
  206. uint16 table_idx_rt,
  207. WASMModuleInstanceCommon *inst_comm_rt);
  208. #endif /* _WASM_C_API_INTERNAL_H */