Actually just three programming languages in a trenchcoat
at main 31 lines 745 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)] 7pub struct PatternConjunction { 8 pub lhs: Pattern, 9 pub and: Token, 10 pub rhs: Pattern, 11 pub span: Span, 12} 13 14impl Spanned for PatternConjunction { 15 fn span(&self) -> Span { 16 self.span 17 } 18} 19 20impl PatternConjunction { 21 pub(crate) fn parse(parser: &mut Parser, lhs: Pattern) -> SyntaxResult<Self> { 22 let and = parser.expect(KwAnd).unwrap(); 23 let rhs = Pattern::parse_precedence(parser, Precedence::Conjunction)?; 24 Ok(Self { 25 span: lhs.span().union(rhs.span()), 26 lhs, 27 and, 28 rhs, 29 }) 30 } 31}