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, 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}