~starkingdoms/starkingdoms

c4a401a1d1582e3df5869184036cf11da506018b — ghostlyzsh 1 year, 4 months ago fdb3bfb
single-line comments
3 files changed, 33 insertions(+), 13 deletions(-)

M kabel/src/lexer.rs
M kabel/src/macros.rs
M kabel/src/parser.rs
M kabel/src/lexer.rs => kabel/src/lexer.rs +9 -2
@@ 48,8 48,15 @@ impl Lexer {
                self.start = self.current;
            }
            b'/' => {
                self.output.push(token!(self, TokenType::Slash));
                self.start = self.current;
                if self.peek() == b'/' {
                    while self.peek() != b'\n' && self.current < self.input.len() {
                        self.read_char();
                    }
                    self.start = self.current;
                } else {
                    self.output.push(token!(self, TokenType::Slash));
                    self.start = self.current;
                }
            }
            b'(' => {
                self.output.push(token!(self, TokenType::LeftParen));

M kabel/src/macros.rs => kabel/src/macros.rs +1 -4
@@ 30,10 30,7 @@ macro_rules! unexpected_token {
    ($self:expr, $message:expr, $token:expr) => {
        $crate::error::KabelError::new(
            $crate::error::ErrorKind::UnexpectedToken,
            format!(
                $message,
                $self.text[$token.start..$token.end].to_string()
            ),
            format!($message, $self.text[$token.start..$token.end].to_string()),
            $token.line,
            $token.column,
            $self.text[$token.line_start..$token.end].to_string(),

M kabel/src/parser.rs => kabel/src/parser.rs +23 -7
@@ 75,7 75,11 @@ impl Parser {
                if let TokenType::RightParen = right_paren.token_type {
                    let block = self.block()?;
                    return Ok(AST {
                        ast_type: ASTType::Function(Box::new(lit!(Ident, name, ident)), expressions, Box::new(block.clone())),
                        ast_type: ASTType::Function(
                            Box::new(lit!(Ident, name, ident)),
                            expressions,
                            Box::new(block.clone()),
                        ),
                        start: function_ident.start,
                        end: block.end,
                        line: function_ident.line,


@@ 88,7 92,11 @@ impl Parser {
                return Err(unexpected_token!(self, "Expected ( found {}", left_paren));
            }
        } else {
            return Err(unexpected_token!(self, "Expected identifier found {}", ident));
            return Err(unexpected_token!(
                self,
                "Expected identifier found {}",
                ident
            ));
        }
    }



@@ 169,7 177,11 @@ impl Parser {
                                        column: if_ident.column,
                                    });
                                } else {
                                    return Err(unexpected_token!(self, "Expected if found {}", else_if_ident));
                                    return Err(unexpected_token!(
                                        self,
                                        "Expected if found {}",
                                        else_if_ident
                                    ));
                                }
                            }
                            return Err(unexpected_token!(self, "Unexpected token {}", else_ident));


@@ 265,7 277,11 @@ impl Parser {
                return Err(unexpected_token!(self, "Expected = found {}", equal));
            }
        } else {
            return Err(unexpected_token!(self, "Expected identifier found {}", ident));
            return Err(unexpected_token!(
                self,
                "Expected identifier found {}",
                ident
            ));
        }
    }



@@ 741,10 757,10 @@ pub enum ASTType {
    Program(Vec<AST>),

    Function(Box<AST>, Vec<AST>, Box<AST>), // name, args, block
    Loop(Box<AST>), // block
    While(Box<AST>, Box<AST>), // condition, block
    Loop(Box<AST>),                         // block
    While(Box<AST>, Box<AST>),              // condition, block
    If(Box<AST>, Box<AST>, Option<Box<AST>>), // condition, block, else/else if
    Block(Vec<AST>), // statements
    Block(Vec<AST>),                        // statements

    Decl(Box<AST>, Box<AST>), // identifier, expression
    Binary(Box<AST>, BinOp, Box<AST>),