I'm trying to understand what this macro does: rust/arena.rs at b25d3ba78118033b3f25b6de7a32e210d113872c · rust-lang/rust · GitHub
#[macro_export]
macro_rules! arena_types {
($macro:path, $args:tt, $tcx:lifetime) => (
$macro!($args, [
// HIR types
[few] hir_krate: rustc_hir::Crate<$tcx>,
[] arm: rustc_hir::Arm<$tcx>,
[] asm_operand: (rustc_hir::InlineAsmOperand<$tcx>, Span),
[] asm_template: rustc_ast::InlineAsmTemplatePiece,
[] attribute: rustc_ast::Attribute,
[] block: rustc_hir::Block<$tcx>,
[] bare_fn_ty: rustc_hir::BareFnTy<$tcx>,
//...
It's called like this:
rustc_hir::arena_types!(rustc_arena::declare_arena, [], 'tcx);
Well, the first thing matched is a macro, the second is a tokentree which I couldn't understand what exactly is but looks like things inside [] and the third is a lifetime.
Well, I understand that the arena_types! macro applies the matched macro with the arguments, but what is the things that come after the $args? What is [few] hir_krate: rustc_hir::Crate<$tcx>,? I don't understand anything of here.