jetcrab\parser\literals/
class.rs1use crate::ast::{ClassExpression, Node};
2use crate::lexer::TokenKind;
3use crate::parser::error::ParseResult;
4use crate::parser::Parser;
5
6impl Parser {
7 pub fn parse_class_expression(&mut self) -> ParseResult<Node> {
8 self.advance();
9
10 let id = if self.check_identifier() {
11 Some(Box::new(self.parse_identifier()?))
12 } else {
13 None
14 };
15
16 let super_class = if let Some(token) = &self.current {
17 if let TokenKind::Keyword(kw) = &token.kind {
18 if kw == "extends" {
19 self.advance();
20 Some(Box::new(self.parse_expression()?))
21 } else {
22 None
23 }
24 } else {
25 None
26 }
27 } else {
28 None
29 };
30
31 let body = Box::new(self.parse_class_body()?);
32
33 let span = self.create_span_from_tokens();
34 Ok(Node::ClassExpression(ClassExpression {
35 id,
36 super_class,
37 body,
38 span: Some(span),
39 }))
40 }
41}