byteflow/bytecode/macros.rs
1//! Thin `macro_rules!` sugar over crate-internal [`ChunkBuilder`] helpers.
2//!
3//! Prefer [`crate::Fn::native1_from`] and [`crate::Fn::native_n`] in new code.
4//! These macros remain for internal tests that emit bytecode directly.
5
6/// `emit_native1_from!(builder, dest, src, native)` — see [`Fn::native1_from`].
7///
8/// # Example
9/// ```
10/// use byteflow::Program;
11///
12/// let mut p = Program::new("example");
13/// p.function("main", 0, |f| {
14/// let msg = f.receive();
15/// let sender = f.native1_from(msg, 3);
16/// f.return_(sender);
17/// });
18/// let chunk = p.build();
19/// assert!(chunk.code.len() >= 4);
20/// ```
21#[macro_export]
22macro_rules! emit_native1_from {
23 ($builder:expr, $dest:expr, $src:expr, $native:expr) => {
24 $builder.emit_native1_from($dest, $src, $native)
25 };
26}
27
28/// `emit_native_n!(builder, base, native, argc)` — see [`Fn::native_n`].
29#[macro_export]
30macro_rules! emit_native_n {
31 ($builder:expr, $base:expr, $native:expr, $argc:expr) => {
32 $builder.emit_native_n($base, $native, $argc)
33 };
34}
35
36/// Namespaced re-exports for callers who prefer an explicit path.
37pub mod asm_macros {
38 pub use crate::emit_native1_from;
39 pub use crate::emit_native_n;
40}