Actually just three programming languages in a trenchcoat
at main 29 lines 745 B view raw
1use super::{expression::Precedence, *}; 2use crate::{Parser, Spanned}; 3use source_span::Span; 4use trilogy_scanner::{Token, TokenType::*}; 5 6#[derive(Clone, Debug)] 7pub struct ReturnExpression { 8 pub r#return: Token, 9 pub expression: Expression, 10 pub span: Span, 11} 12 13impl Spanned for ReturnExpression { 14 fn span(&self) -> Span { 15 self.span 16 } 17} 18 19impl ReturnExpression { 20 pub(crate) fn parse(parser: &mut Parser) -> SyntaxResult<Self> { 21 let r#return = parser.expect(KwReturn).unwrap(); 22 let expression = Expression::parse_precedence(parser, Precedence::Continuation)?; 23 Ok(Self { 24 span: r#return.span.union(expression.span()), 25 r#return, 26 expression, 27 }) 28 } 29}