Procházet zdrojové kódy

Add API wasm_runtime_set_module_inst (#1286)

Add API wasm_runtime_set_module_inst, per request from #1275
Wenyong Huang před 3 roky
rodič
revize
0ec27af9df

+ 7 - 0
core/iwasm/common/wasm_exec_env.c

@@ -178,6 +178,13 @@ wasm_exec_env_get_module_inst(WASMExecEnv *exec_env)
     return exec_env->module_inst;
 }
 
+void
+wasm_exec_env_set_module_inst(WASMExecEnv *exec_env,
+                              WASMModuleInstanceCommon *const module_inst)
+{
+    exec_env->module_inst = module_inst;
+}
+
 void
 wasm_exec_env_set_thread_info(WASMExecEnv *exec_env)
 {

+ 4 - 0
core/iwasm/common/wasm_exec_env.h

@@ -255,6 +255,10 @@ wasm_exec_env_get_cur_frame(WASMExecEnv *exec_env)
 struct WASMModuleInstanceCommon *
 wasm_exec_env_get_module_inst(WASMExecEnv *exec_env);
 
+void
+wasm_exec_env_set_module_inst(
+    WASMExecEnv *exec_env, struct WASMModuleInstanceCommon *const module_inst);
+
 void
 wasm_exec_env_set_thread_info(WASMExecEnv *exec_env);
 

+ 7 - 0
core/iwasm/common/wasm_runtime_common.c

@@ -1180,6 +1180,13 @@ wasm_runtime_get_module_inst(WASMExecEnv *exec_env)
     return wasm_exec_env_get_module_inst(exec_env);
 }
 
+void
+wasm_runtime_set_module_inst(WASMExecEnv *exec_env,
+                             WASMModuleInstanceCommon *const module_inst)
+{
+    wasm_exec_env_set_module_inst(exec_env, module_inst);
+}
+
 void *
 wasm_runtime_get_function_attachment(WASMExecEnv *exec_env)
 {

+ 5 - 0
core/iwasm/common/wasm_runtime_common.h

@@ -507,6 +507,11 @@ wasm_runtime_destroy_exec_env(WASMExecEnv *exec_env);
 WASM_RUNTIME_API_EXTERN WASMModuleInstanceCommon *
 wasm_runtime_get_module_inst(WASMExecEnv *exec_env);
 
+/* See wasm_export.h for description */
+WASM_RUNTIME_API_EXTERN void
+wasm_runtime_set_module_inst(WASMExecEnv *exec_env,
+                             WASMModuleInstanceCommon *const module_inst);
+
 /* See wasm_export.h for description */
 WASM_RUNTIME_API_EXTERN void *
 wasm_runtime_get_function_attachment(WASMExecEnv *exec_env);

+ 15 - 0
core/iwasm/include/wasm_export.h

@@ -539,6 +539,21 @@ wasm_runtime_thread_env_inited(void);
 WASM_RUNTIME_API_EXTERN wasm_module_inst_t
 wasm_runtime_get_module_inst(wasm_exec_env_t exec_env);
 
+/**
+ * Set WASM module instance of execution environment
+ * Caution:
+ *   normally the module instance is bound with the execution
+ *   environment one by one, if multiple module instances want
+ *   to share to the same execution environment, developer should
+ *   be responsible for the backup and restore of module instance
+ *
+ * @param exec_env the execution environment
+ * @param module_inst the WASM module instance to set
+ */
+WASM_RUNTIME_API_EXTERN void
+wasm_runtime_set_module_inst(wasm_exec_env_t exec_env,
+                             const wasm_module_inst_t module_inst);
+
 /**
  * Call the given WASM function of a WASM module instance with
  * arguments (bytecode and AoT).