#janet #proc-macro #embedding

无需std janetrs_macros

JanetRS的属性宏

15个不稳定版本 (6个重大更改)

0.7.2 2024年4月20日
0.6.0 2023年7月22日
0.5.0 2021年11月13日
0.4.4 2021年7月29日
0.2.0 2020年10月13日

#919过程宏

Download history 321/week @ 2024-04-14 101/week @ 2024-04-21 1/week @ 2024-05-19 1/week @ 2024-06-09 5/week @ 2024-06-30 195/week @ 2024-07-28

每月195次下载
用于 janetrs

自定义许可证

51KB
1K SLoC

janetrs_macros

JanetRS的过程宏crate

janet_fn

用法:

  • #[janet_fn]
  • #[janet_fn(arity(fix(<N>)))]] 其中 N 是一个整数字面量
  • #[janet_fn(arity(range(<MIN> [, MAX])))]] 其中 MINMAX 是整数字面量
  • #[janet_fn(check_mut_ref)]
  • #[janet_fn(arity(<...>), check_mut_ref)]] 结合两者

宏将高级 Janet 函数(fn(&mut [Janet]) -> Janet)转换为 Janet C API 所期望的函数(fn(i32, *mut janetrs::lowlevel::Janet) -> janetrs::lowlevel::Janet

可选参数 arity 为函数添加了参数个数检查。它必须接收参数个数的检查类型。这些类型包括 fix,表示固定参数个数,以及 range,表示范围或可变参数个数。固定参数个数的 fix 类型接收 Janet 函数必须拥有的参数个数的整数,而范围参数个数的 range 类型可以接收两个参数,第一个是必选的,而第二个是可选的,第一个表示 Janet 函数必须接收的参数的最小个数,第二个表示 Janet 函数可以接收的参数的最大个数。如果未设置范围参数个数的最大值,则禁用最大值检查,允许可变参数。

可选参数 check_mut_ref 添加了一个检查,以查看函数是否接收了同一 *mut 指针的多个引用。此检查不是默认设置,因为 Janet 类型类似于具有内部可变性的类型,检查较为昂贵,但如果您想确保您的函数永远不会接收同一指针多次,则可以使用此功能。

条件 Janet 版本门控

用法

  • #[cjvg(<MIN_VERSION>, [MAX_VERSION])],其中 MIN_VERSIONMAX_VERSION 是字符串字面量。
  • #[janet_version(<MIN_VERSION>, [MAX_VERSION])],其中 MIN_VERSIONMAX_VERSION 是字符串字面量。

该宏条件性地包含 input,如果 Janet 的版本大于或等于传递的最小版本,并且小于传递的最大版本。

这意味着在最大版本中范围是开放的:[MIN_VERSION, MAX_VERSION)。

Janet 模块声明

用法

use janetrs::{janet_mod, Janet, janet_fn};

/// (rust/hello)
///
/// Rust says hello to you! 🦀
#[janet_fn(arity(fix(0)))]
fn rust_hello(args: &mut [Janet]) -> Janet {
    println!("Hello from Rust!");
    Janet::nil()
}

/// (rust/hi)
///
/// I introducing myself to you! 🙆
#[janet_fn(arity(fix(0)))]
fn hi(args: &mut [Janet]) -> Janet {
    Janet::from("Hi! My name is GrayJack!")
}

#[janet_fn(arity(fix(0)))]
fn no_doc_fn(args: &mut [Janet]) -> Janet {
    Janet::nil()
}

declare_janet_mod!("rust";
    {"hello", rust_hello},
    {"hi", hi},
    {"no_doc_fn", no_doc_fn, "Using custom docs as string literal"},
);

一个宏用于声明 Janet 模块/库以及暴露的函数。

依赖项

~3–5.5MB
~102K SLoC