///|
pub(all) struct MacroExpansion {
tokens : Array[Token]
num_args : Int
delimiters : Array[Array[String]]?
unexpandable : Bool
}
///|
pub(all) enum MacroDefinition {
Text(String)
Expansion(MacroExpansion)
}
///|
fn MacroDefinition::text(expansion : String) -> MacroDefinition {
Text(expansion)
}
///|
#warnings("-unused_value")
fn MacroDefinition::expansion(expansion : MacroExpansion) -> MacroDefinition {
Expansion(expansion)
}
///|
fn MacroExpansion::make(
tokens : Array[Token],
num_args? : Int = 0,
delimiters? : Array[Array[String]],
unexpandable? : Bool = false,
) -> MacroExpansion {
{ tokens, num_args, delimiters, unexpandable }
}
///|
priv struct MacroArgument {
start : Token
end : Token
tokens : Array[Token]
}