Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add operations on imports #92

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion js/global.ml
Expand Up @@ -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_ =
Expand Down
20 changes: 20 additions & 0 deletions js/import.ml
Expand Up @@ -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_ |])
2 changes: 1 addition & 1 deletion src/binaryen_stubs_globals.c
Expand Up @@ -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
Expand Down
29 changes: 29 additions & 0 deletions src/binaryen_stubs_imports.c
Expand Up @@ -2,6 +2,7 @@
#include <caml/mlvalues.h>
#include <caml/fail.h>
#include <caml/memory.h>
#include <caml/alloc.h>

#include "binaryen-c.h"
#include "ocaml_helpers.h"
Expand Down Expand Up @@ -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)));
}
12 changes: 12 additions & 0 deletions src/import.ml
Expand Up @@ -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"
8 changes: 8 additions & 0 deletions virtual/import.mli
Expand Up @@ -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