From c78b111dfb550cfabdbcc7ee402f5ef4c2bca599 Mon Sep 17 00:00:00 2001 From: Oscar Spencer Date: Tue, 23 Mar 2021 19:37:36 -0400 Subject: [PATCH] feat: Add operations on imports --- js/global.ml | 2 +- js/import.ml | 20 ++++++++++++++++++++ src/binaryen_stubs_globals.c | 2 +- src/binaryen_stubs_imports.c | 29 +++++++++++++++++++++++++++++ src/import.ml | 12 ++++++++++++ virtual/import.mli | 8 ++++++++ 6 files changed, 71 insertions(+), 2 deletions(-) diff --git a/js/global.ml b/js/global.ml index 6dd19290..97f3f142 100644 --- a/js/global.ml +++ b/js/global.ml @@ -22,7 +22,7 @@ let get_num_globals wasm_mod = meth_call global##.binaryen "_BinaryenGetNumGlobals" [| inject wasm_mod |] let get_global_by_index wasm_mod index = - meth_call global##.binaryen "_BinaryenGlobalByIndex" + meth_call global##.binaryen "_BinaryenGetGlobalByIndex" [| inject wasm_mod; inject index |] let get_name global_ = diff --git a/js/import.ml b/js/import.ml index 30ad4f1c..e9bb4430 100644 --- a/js/import.ml +++ b/js/import.ml @@ -43,3 +43,23 @@ let add_global_import wasm_mod internal_name external_module_name inject typ; inject (if is_mut then 1 else 0); |] + +let function_import_get_module func = + to_string + (meth_call global##.binaryen "_BinaryenFunctionImportGetModule" + [| inject func |]) + +let global_import_get_module global_ = + to_string + (meth_call global##.binaryen "_BinaryenGlobalImportGetModule" + [| inject global_ |]) + +let function_import_get_base func = + to_string + (meth_call global##.binaryen "_BinaryenFunctionImportGetBase" + [| inject func |]) + +let global_import_get_base global_ = + to_string + (meth_call global##.binaryen "_BinaryenGlobalImportGetBase" + [| inject global_ |]) diff --git a/src/binaryen_stubs_globals.c b/src/binaryen_stubs_globals.c index 4656d008..28b48064 100644 --- a/src/binaryen_stubs_globals.c +++ b/src/binaryen_stubs_globals.c @@ -74,7 +74,7 @@ caml_binaryen_get_global_by_index(value _module, value _index) { CAMLparam2(_module, _index); BinaryenModuleRef module = BinaryenModuleRef_val(_module); BinaryenIndex index = Int_val(_index); - CAMLreturn(alloc_BinaryenGlobalRef(BinaryenGlobalByIndex(module, index))); + CAMLreturn(alloc_BinaryenGlobalRef(BinaryenGetGlobalByIndex(module, index))); } CAMLprim value diff --git a/src/binaryen_stubs_imports.c b/src/binaryen_stubs_imports.c index 28e5b706..af694dfc 100644 --- a/src/binaryen_stubs_imports.c +++ b/src/binaryen_stubs_imports.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "binaryen-c.h" #include "ocaml_helpers.h" @@ -65,3 +66,31 @@ CAMLprim value caml_binaryen_add_global_import__bytecode(value * argv) { return caml_binaryen_add_global_import(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]); } + +CAMLprim value +caml_binaryen_function_import_get_module(value _fun) { + CAMLparam1(_fun); + BinaryenFunctionRef fun = BinaryenFunctionRef_val(_fun); + CAMLreturn(caml_copy_string(BinaryenFunctionImportGetModule(fun))); +} + +CAMLprim value +caml_binaryen_global_import_get_module(value _global) { + CAMLparam1(_global); + BinaryenGlobalRef global = BinaryenGlobalRef_val(_global); + CAMLreturn(caml_copy_string(BinaryenGlobalImportGetModule(global))); +} + +CAMLprim value +caml_binaryen_function_import_get_base(value _fun) { + CAMLparam1(_fun); + BinaryenFunctionRef fun = BinaryenFunctionRef_val(_fun); + CAMLreturn(caml_copy_string(BinaryenFunctionImportGetBase(fun))); +} + +CAMLprim value +caml_binaryen_global_import_get_base(value _global) { + CAMLparam1(_global); + BinaryenGlobalRef global = BinaryenGlobalRef_val(_global); + CAMLreturn(caml_copy_string(BinaryenGlobalImportGetBase(global))); +} diff --git a/src/import.ml b/src/import.ml index 9cc6708e..0694f9c3 100644 --- a/src/import.ml +++ b/src/import.ml @@ -16,3 +16,15 @@ external add_global_import : Module.t -> string -> string -> string -> Type.t -> bool -> unit = "caml_binaryen_add_global_import__bytecode" "caml_binaryen_add_global_import" (** Module, internal name, external module name, external base name, type, mutable. *) + +external function_import_get_module : Function.t -> string + = "caml_binaryen_function_import_get_module" + +external global_import_get_module : Global.t -> string + = "caml_binaryen_global_import_get_module" + +external function_import_get_base : Function.t -> string + = "caml_binaryen_function_import_get_base" + +external global_import_get_base : Global.t -> string + = "caml_binaryen_global_import_get_base" diff --git a/virtual/import.mli b/virtual/import.mli index a9b69a06..c7ea3ff0 100644 --- a/virtual/import.mli +++ b/virtual/import.mli @@ -7,3 +7,11 @@ val add_memory_import : Module.t -> string -> string -> string -> bool -> unit val add_global_import : Module.t -> string -> string -> string -> Type.t -> bool -> unit + +val function_import_get_module : Function.t -> string + +val global_import_get_module : Global.t -> string + +val function_import_get_base : Function.t -> string + +val global_import_get_base : Global.t -> string