Skip to main content

MacroDef

Struct MacroDef 

Source
pub struct MacroDef {
    pub name: Symbol,
    pub function_like: bool,
    pub params: Vec<Symbol>,
    pub variadic: Option<Symbol>,
    pub body: Vec<PpToken>,
    pub span: Span,
    pub builtin: Option<Builtin>,
}
Expand description

A #define.

Fields§

§name: Symbol

The macro’s name.

§function_like: bool

Whether the macro takes arguments. A function-like macro with no parameters is not the same thing as an object-like macro, so this cannot be inferred from params.

§params: Vec<Symbol>

The named parameters, in order, not including the variadic one.

§variadic: Option<Symbol>

The variadic parameter: __VA_ARGS__ for the standard ... spelling, or the given name for the GNU args... form. None for a macro that is not variadic.

§body: Vec<PpToken>

The replacement list.

§span: Span

The #define line, for the note attached to a redefinition or an arity error.

§builtin: Option<Builtin>

Which question this macro asks, for the handful that ask one instead of having a body.

Implementations§

Source§

impl MacroDef

Source

pub fn is_variadic(&self) -> bool

Whether the macro takes a variable number of arguments.

Source

pub fn arity(&self) -> usize

How many arguments an invocation must supply at a minimum.

Source

pub fn param_index(&self, name: Symbol) -> Option<usize>

The parameter position name refers to, with the variadic parameter counting as one past the named ones.

Source

pub fn is_variadic_param(&self, name: Symbol) -> bool

Whether name is this macro’s variadic parameter.

Source

pub fn same_definition_as(&self, other: &MacroDef) -> bool

Whether two definitions are the same one, which is what decides whether a redefinition is silently allowed.

The standard’s rule is spelling equivalence including whitespace separation, not just the same tokens, which is why the leading space flag is part of the comparison.

Trait Implementations§

Source§

impl Clone for MacroDef

Source§

fn clone(&self) -> MacroDef

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MacroDef

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.