0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-02-13 01:06:00 -05:00
denoland-deno/test_napi/src/lib.rs
Luke Channings a2488ae792
fix(npm): support compiling on linux/aarch64 (#16208)
Changes introduced in #13633 have broken the ability to compile for
linux/aarch64 - specifically the use of a `i8` as a char type, which is
an `u8` on linux/aarch64.

This PR:
- Replaces instances of `i8` with the architecture-aware wrapper type
`c_char`
- Skips the use of `--export-dynamic-symbol` on linux-aarch64, because
the target environments often rely on older libc/binutils versions
2022-10-10 07:59:31 +05:30

80 lines
1.7 KiB
Rust

// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
#![allow(clippy::all)]
#![allow(clippy::undocumented_unsafe_blocks)]
use napi_sys::*;
pub mod array;
pub mod r#async;
pub mod callback;
pub mod coerce;
pub mod numbers;
pub mod object_wrap;
pub mod primitives;
pub mod promise;
pub mod properties;
pub mod strings;
pub mod typedarray;
#[macro_export]
macro_rules! get_callback_info {
($env: expr, $callback_info: expr, $size: literal) => {{
let mut args = [ptr::null_mut(); $size];
let mut argc = $size;
let mut this = ptr::null_mut();
unsafe {
assert!(
napi_get_cb_info(
$env,
$callback_info,
&mut argc,
args.as_mut_ptr(),
&mut this,
ptr::null_mut(),
) == napi_ok,
)
};
(args, argc, this)
}};
}
#[macro_export]
macro_rules! new_property {
($env: expr, $name: expr, $value: expr) => {
napi_property_descriptor {
utf8name: $name.as_ptr() as *const std::os::raw::c_char,
name: ptr::null_mut(),
method: Some($value),
getter: None,
setter: None,
data: ptr::null_mut(),
attributes: 0,
value: ptr::null_mut(),
}
};
}
#[no_mangle]
unsafe extern "C" fn napi_register_module_v1(
env: napi_env,
exports: napi_value,
) -> napi_value {
#[cfg(windows)]
{
napi_sys::setup();
}
strings::init(env, exports);
numbers::init(env, exports);
typedarray::init(env, exports);
array::init(env, exports);
primitives::init(env, exports);
properties::init(env, exports);
promise::init(env, exports);
coerce::init(env, exports);
object_wrap::init(env, exports);
callback::init(env, exports);
r#async::init(env, exports);
exports
}