Actually just three programming languages in a trenchcoat
at main 39 lines 781 B view raw
1use super::*; 2use crate::{Parser, Spanned}; 3use source_span::Span; 4use trilogy_scanner::{Token, TokenType::*}; 5 6/// An end expression. 7/// 8/// ```trilogy 9/// end 10/// ``` 11#[derive(Clone, Debug)] 12pub struct EndExpression { 13 pub end: Token, 14 pub span: Span, 15} 16 17impl Spanned for EndExpression { 18 fn span(&self) -> Span { 19 self.span 20 } 21} 22 23impl EndExpression { 24 pub(crate) fn parse(parser: &mut Parser) -> SyntaxResult<Self> { 25 let end = parser.expect(KwEnd).unwrap(); 26 Ok(Self { 27 span: end.span, 28 end, 29 }) 30 } 31} 32 33#[cfg(test)] 34mod test { 35 use super::*; 36 37 test_parse!(endexpr_empty: "end" => EndExpression::parse => EndExpression { .. }); 38 test_parse_error!(endexpr_value: "end unit" => EndExpression::parse); 39}