GlobalMacroExpander

Trait GlobalMacroExpander 

Source
pub trait GlobalMacroExpander:
    Fn(&MacroExprFactory<'_>, Vec<Expr>) -> Option<Expr>
    + Send
    + Sync { }
Expand description

Trait for global macro expansion functions.

A global macro expander receives a list of arguments and produces a transformed expression. Global macros are triggered by function calls, not method calls.

§Type Requirements

The expander function must be:

  • Fn(&mut MacroExprFactory, Vec<Expr>) -> Option<Expr>: The expansion signature
  • Send + Sync: Thread-safe for use in concurrent environments
  • 'static: No borrowed references in the closure

§Return Value

  • Some(expr): The macro expansion succeeded and expr replaces the original call
  • None: The macro cannot be expanded (keeps the original expression)

§Examples

// Simple constant-folding macro
fn optimize_add(factory: &mut MacroExprFactory, args: Vec<Expr>) -> Option<Expr> {
    if args.len() != 2 {
        return None;
    }
     
    // If both args are constant integers, fold them
    let left = args[0].kind()?.as_constant()?.as_int()?;
    let right = args[1].kind()?.as_constant()?.as_int()?;
     
    Some(factory.new_const(left + right))
}

Implementors§

Source§

impl<'f, F> GlobalMacroExpander for F
where F: Fn(&MacroExprFactory<'_>, Vec<Expr>) -> Option<Expr> + Send + Sync + 'f,