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