0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-10-30 09:08:00 -04:00
denoland-deno/cli/napi_sym
2022-10-08 19:32:34 +05:30
..
Cargo.toml chore(napi_sym): fix readme path (#16203) 2022-10-08 19:32:34 +05:30
lib.rs fix(napi): move napi symbols file (#16179) 2022-10-07 09:21:43 +05:30
README.md chore(napi): Add README explainer for cli/napi_sym and cli/napi (#16187) 2022-10-07 12:56:36 +05:30
symbol_exports.json fix(napi): move napi symbols file (#16179) 2022-10-07 09:21:43 +05:30

napi_sym

A proc_macro for Deno's Node-API implementation. It does the following things:

  • Marks the symbol as #[no_mangle] and rewrites it as pub extern "C" $name.
  • Asserts that the function symbol is present in symbol_exports.json.
  • Maps deno_napi::Result to raw napi_result.
use deno_napi::{napi_value, Env, Error, Result};

#[napi_sym::napi_sym]
fn napi_get_boolean(
  env: *mut Env,
  value: bool,
  result: *mut napi_value,
) -> Result {
  let _env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?;
  // *result = ...
  Ok(())
}

symbol_exports.json

A file containing the symbols that need to be put into the exectable's dynamic symbol table at link-time.

This is done using /DEF: on Windows, -exported_symbol,_ on macOS and --export-dynamic-symbol= on Linux. See cli/build.rs.

On Windows, you need to generate the .def file by running tools/napi/generate_link_win.js.