Actually just three programming languages in a trenchcoat
at string-repr-callable 31 lines 755 B view raw
1use super::{pattern::Precedence, *}; 2use crate::{Parser, Spanned}; 3use source_span::Span; 4use trilogy_scanner::{Token, TokenType::*}; 5 6#[derive(Clone, Debug, PrettyPrintSExpr)] 7pub struct PatternDisjunction { 8 pub lhs: Pattern, 9 pub or: Token, 10 pub rhs: Pattern, 11 span: Span, 12} 13 14impl Spanned for PatternDisjunction { 15 fn span(&self) -> Span { 16 self.span 17 } 18} 19 20impl PatternDisjunction { 21 pub(crate) fn parse(parser: &mut Parser, lhs: Pattern) -> SyntaxResult<Self> { 22 let or = parser.expect(KwOr).unwrap(); 23 let rhs = Pattern::parse_precedence(parser, Precedence::Disjunction)?; 24 Ok(Self { 25 span: lhs.span().union(rhs.span()), 26 lhs, 27 or, 28 rhs, 29 }) 30 } 31}