diff --git a/src/ast.rs b/src/ast.rs index 1b17cb1..945860c 100644 --- a/src/ast.rs +++ b/src/ast.rs @@ -12,6 +12,7 @@ pub enum Entity { Fn(Fn), Class(Class), Module(Module), + Static(Let) } /// A module just provides an additional scope diff --git a/src/lexer.rs b/src/lexer.rs index b8695dd..d6c7788 100644 --- a/src/lexer.rs +++ b/src/lexer.rs @@ -136,8 +136,8 @@ pub struct Lexer<'a> { /// A peekable double ended queue for the tokens tokens: VecDeque, /// Current line number - pub line: usize, - pub col: usize, + pub(crate) line: usize, + pub(crate) col: usize, /// Start character index for the current token start: usize, /// End character index for the current token diff --git a/src/parser/entity.rs b/src/parser/entity.rs index 2874c23..06e0b50 100644 --- a/src/parser/entity.rs +++ b/src/parser/entity.rs @@ -9,21 +9,22 @@ use crate::lexer::{ use std::rc::Rc; impl<'a> Parser<'a> { - /// entity ::= module | class | fn + /// entity ::= module | class | fn | static pub(super) fn parse_entity(&mut self) -> Option { use TokenKeyword::*; let token = self.peek_token(); if let TokenKind::Keyword(keyword) = &token.kind { - match keyword { - Module => Some(Entity::Module(self.parse_module()?)), - Class => Some(Entity::Class(self.parse_class()?)), - Fn => Some(Entity::Fn(self.parse_fn()?)), + Some(match keyword { + Module => Entity::Module(self.parse_module()?), + Class => Entity::Class(self.parse_class()?), + Fn => Entity::Fn(self.parse_fn()?), + Static => Entity::Static(self.parse_static()?), _ => { self.error_expected_peek("entity"); - None + return None; } - } + }) } else { self.error_expected_peek("entity"); None