mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-04-21 20:22:14 +00:00
156 lines
5.2 KiB
Rust
156 lines
5.2 KiB
Rust
//! Definition of all wasm-bindgen intrinsics.
|
|
//!
|
|
//! This contains a definition of all intrinsics used by `src/lib.rs` in the
|
|
//! wasm-bindgen crate. Each intrinsic listed here is part of an `enum
|
|
//! Intrinsic` and is generated through a macro to reduce repetition.
|
|
//!
|
|
//! Intrinsics in this module currently largely contain their expected symbol
|
|
//! name as well as the signature of the function that it expects.
|
|
|
|
use crate::descriptor::{self, Descriptor, Function};
|
|
|
|
macro_rules! intrinsics {
|
|
(pub enum Intrinsic {
|
|
$(
|
|
#[symbol = $sym:tt]
|
|
#[signature = fn($($arg:expr),*) -> $ret:ident]
|
|
$name:ident,
|
|
)*
|
|
}) => {
|
|
/// All wasm-bindgen intrinsics that could be depended on by a wasm
|
|
/// module.
|
|
#[derive(Debug)]
|
|
pub enum Intrinsic {
|
|
$($name,)*
|
|
}
|
|
|
|
impl Intrinsic {
|
|
/// Returns the corresponding intrinsic for a symbol name, if one
|
|
/// matches.
|
|
pub fn from_symbol(symbol: &str) -> Option<Intrinsic> {
|
|
match symbol {
|
|
$($sym => Some(Intrinsic::$name),)*
|
|
_ => None,
|
|
}
|
|
}
|
|
|
|
/// Returns the expected signature of this intrinsic, used for
|
|
/// generating a JS shim.
|
|
pub fn binding(&self) -> Function {
|
|
use crate::descriptor::Descriptor::*;
|
|
match self {
|
|
$(
|
|
Intrinsic::$name => {
|
|
descriptor::Function {
|
|
shim_idx: 0,
|
|
arguments: vec![$($arg),*],
|
|
ret: $ret,
|
|
}
|
|
}
|
|
)*
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
fn ref_anyref() -> Descriptor {
|
|
Descriptor::Ref(Box::new(Descriptor::Anyref))
|
|
}
|
|
|
|
fn ref_string() -> Descriptor {
|
|
Descriptor::Ref(Box::new(Descriptor::String))
|
|
}
|
|
|
|
intrinsics! {
|
|
pub enum Intrinsic {
|
|
#[symbol = "__wbindgen_jsval_eq"]
|
|
#[signature = fn(ref_anyref(), ref_anyref()) -> Boolean]
|
|
JsvalEq,
|
|
#[symbol = "__wbindgen_is_function"]
|
|
#[signature = fn(ref_anyref()) -> Boolean]
|
|
IsFunction,
|
|
#[symbol = "__wbindgen_is_undefined"]
|
|
#[signature = fn(ref_anyref()) -> Boolean]
|
|
IsUndefined,
|
|
#[symbol = "__wbindgen_is_null"]
|
|
#[signature = fn(ref_anyref()) -> Boolean]
|
|
IsNull,
|
|
#[symbol = "__wbindgen_is_object"]
|
|
#[signature = fn(ref_anyref()) -> Boolean]
|
|
IsObject,
|
|
#[symbol = "__wbindgen_is_symbol"]
|
|
#[signature = fn(ref_anyref()) -> Boolean]
|
|
IsSymbol,
|
|
#[symbol = "__wbindgen_is_string"]
|
|
#[signature = fn(ref_anyref()) -> Boolean]
|
|
IsString,
|
|
#[symbol = "__wbindgen_is_falsy"]
|
|
#[signature = fn(ref_anyref()) -> Boolean]
|
|
IsFalsy,
|
|
#[symbol = "__wbindgen_object_clone_ref"]
|
|
#[signature = fn(ref_anyref()) -> Anyref]
|
|
ObjectCloneRef,
|
|
#[symbol = "__wbindgen_object_drop_ref"]
|
|
#[signature = fn(Anyref) -> Unit]
|
|
ObjectDropRef,
|
|
#[symbol = "__wbindgen_cb_drop"]
|
|
#[signature = fn(Anyref) -> Boolean]
|
|
CallbackDrop,
|
|
#[symbol = "__wbindgen_cb_forget"]
|
|
#[signature = fn(Anyref) -> Unit]
|
|
CallbackForget,
|
|
#[symbol = "__wbindgen_number_new"]
|
|
#[signature = fn(F64) -> Anyref]
|
|
NumberNew,
|
|
#[symbol = "__wbindgen_string_new"]
|
|
#[signature = fn(ref_string()) -> Anyref]
|
|
StringNew,
|
|
#[symbol = "__wbindgen_symbol_anonymous_new"]
|
|
#[signature = fn() -> Anyref]
|
|
SymbolAnonymousNew,
|
|
#[symbol = "__wbindgen_symbol_named_new"]
|
|
#[signature = fn(ref_string()) -> Anyref]
|
|
SymbolNamedNew,
|
|
#[symbol = "__wbindgen_number_get"]
|
|
#[signature = fn(ref_anyref(), I32) -> F64]
|
|
NumberGet,
|
|
#[symbol = "__wbindgen_string_get"]
|
|
#[signature = fn(ref_anyref(), I32) -> I32]
|
|
StringGet,
|
|
#[symbol = "__wbindgen_boolean_get"]
|
|
#[signature = fn(ref_anyref()) -> I32]
|
|
BooleanGet,
|
|
#[symbol = "__wbindgen_throw"]
|
|
#[signature = fn(ref_string()) -> Unit]
|
|
Throw,
|
|
#[symbol = "__wbindgen_rethrow"]
|
|
#[signature = fn(Anyref) -> Unit]
|
|
Rethrow,
|
|
#[symbol = "__wbindgen_memory"]
|
|
#[signature = fn() -> Anyref]
|
|
Memory,
|
|
#[symbol = "__wbindgen_module"]
|
|
#[signature = fn() -> Anyref]
|
|
Module,
|
|
#[symbol = "__wbindgen_function_table"]
|
|
#[signature = fn() -> Anyref]
|
|
FunctionTable,
|
|
#[symbol = "__wbindgen_debug_string"]
|
|
#[signature = fn(ref_anyref()) -> String]
|
|
DebugString,
|
|
#[symbol = "__wbindgen_json_parse"]
|
|
#[signature = fn(ref_string()) -> Anyref]
|
|
JsonParse,
|
|
#[symbol = "__wbindgen_json_serialize"]
|
|
#[signature = fn(ref_anyref()) -> String]
|
|
JsonSerialize,
|
|
#[symbol = "__wbindgen_anyref_heap_live_count"]
|
|
#[signature = fn() -> I32]
|
|
AnyrefHeapLiveCount,
|
|
#[symbol = "__wbindgen_init_anyref_table"]
|
|
#[signature = fn() -> Unit]
|
|
InitAnyrefTable,
|
|
}
|
|
}
|