Actually just three programming languages in a trenchcoat
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}