[][src]Macro wast::custom_reserved

macro_rules! custom_reserved {
    ($name:ident) => { ... };
    ($name:ident = $rsv:expr) => { ... };
}

A macro for defining custom reserved symbols.

This is like custom_keyword! but for reserved symbols (Token::Reserved) instead of keywords (Token::Keyword).

use wast::parser::{Parser, Result, Parse};

// Define a custom reserved symbol, the "spaceship" operator: `<=>`.
wast::custom_reserved!(spaceship = "<=>");

/// A "three-way comparison" like `(<=> a b)` that returns -1 if `a` is less
/// than `b`, 0 if they're equal, and 1 if `a` is greater than `b`.
struct ThreeWayComparison<'a> {
    lhs: wast::Expression<'a>,
    rhs: wast::Expression<'a>,
}

impl<'a> Parse<'a> for ThreeWayComparison<'a> {
    fn parse(parser: Parser<'a>) -> Result<Self> {
        parser.parse::<spaceship>()?;
        let lhs = parser.parse()?;
        let rhs = parser.parse()?;
        Ok(ThreeWayComparison { lhs, rhs })
    }
}