From 56c870c369bb296458816d017ac508540bb7186c Mon Sep 17 00:00:00 2001 From: Davirain Date: Fri, 31 May 2024 12:54:59 +0800 Subject: [PATCH] update mirror --- src/ast/mod.rs | 27 ++------------------------- src/ast/statement/mod.rs | 30 +++--------------------------- src/object/environment.rs | 4 ++-- src/parser/mod.rs | 2 +- 4 files changed, 8 insertions(+), 55 deletions(-) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index b97ee25..9e70d70 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -12,9 +12,10 @@ use crate::object::environment::Environment; use crate::object::Object; use crate::token::Token; +use derive_more::From; use std::fmt::{Debug, Display, Formatter}; -#[derive(Debug, Clone, PartialOrd, PartialEq, Eq, Ord, Hash)] +#[derive(Debug, Clone, PartialOrd, PartialEq, Eq, Ord, Hash, From)] pub enum Node { Program(Program), Expression(Expression), @@ -22,42 +23,18 @@ pub enum Node { Object(Object), } -impl From for Node { - fn from(value: Program) -> Self { - Self::Program(value) - } -} - -impl From for Node { - fn from(value: Expression) -> Self { - Self::Expression(value) - } -} - impl From<&Expression> for Node { fn from(value: &Expression) -> Self { Self::Expression(value.clone()) } } -impl From for Node { - fn from(value: Statement) -> Self { - Self::Statement(value) - } -} - impl From<&Statement> for Node { fn from(value: &Statement) -> Self { Self::Statement(value.clone()) } } -impl From for Node { - fn from(value: Object) -> Self { - Self::Object(value) - } -} - impl From<&Object> for Node { fn from(value: &Object) -> Self { Self::Object(value.clone()) diff --git a/src/ast/statement/mod.rs b/src/ast/statement/mod.rs index 43a0e38..adb6588 100644 --- a/src/ast/statement/mod.rs +++ b/src/ast/statement/mod.rs @@ -3,16 +3,16 @@ pub mod expression; pub mod let_statement; pub mod return_statement; +use super::Node; use crate::ast::statement::block::BlockStatement; use crate::ast::statement::expression::ExpressionStatement; use crate::ast::statement::let_statement::LetStatement; use crate::ast::statement::return_statement::ReturnStatement; use crate::ast::NodeInterface; +use derive_more::From; use std::fmt::{Debug, Display, Formatter}; -use super::Node; - -#[derive(Debug, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)] +#[derive(Debug, Clone, Hash, Eq, PartialEq, Ord, PartialOrd, From)] pub enum Statement { Expression(ExpressionStatement), Let(LetStatement), @@ -42,48 +42,24 @@ impl Display for Statement { } } -impl From for Statement { - fn from(value: ExpressionStatement) -> Self { - Self::Expression(value) - } -} - impl From for Node { fn from(value: ExpressionStatement) -> Self { Self::Statement(Statement::Expression(value)) } } -impl From for Statement { - fn from(value: LetStatement) -> Self { - Self::Let(value) - } -} - impl From for Node { fn from(value: LetStatement) -> Self { Self::Statement(Statement::Let(value)) } } -impl From for Statement { - fn from(value: ReturnStatement) -> Self { - Self::Return(value) - } -} - impl From for Node { fn from(value: ReturnStatement) -> Self { Self::Statement(Statement::Return(value)) } } -impl From for Statement { - fn from(value: BlockStatement) -> Self { - Self::BlockStatement(value) - } -} - impl From for Node { fn from(value: BlockStatement) -> Self { Self::Statement(Statement::BlockStatement(value)) diff --git a/src/object/environment.rs b/src/object/environment.rs index 5ab15c4..d9683b6 100644 --- a/src/object/environment.rs +++ b/src/object/environment.rs @@ -18,11 +18,11 @@ impl Display for Environment { for (key, value) in self.store.iter() { writeln!(f, "{}: {}", key, value)?; } - writeln!(f, "")?; + writeln!(f,)?; if self.outer.is_some() { writeln!(f, "{}", self.outer.as_ref().unwrap()) } else { - writeln!(f, "") + writeln!(f,) } } } diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 9e3a285..db66d13 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -198,7 +198,7 @@ impl<'a> Parser<'a> { let mut stmt = ReturnStatement::new(self.current_token.clone()); self.next_token()?; // add equal expression - stmt.update_expression(self.parse_expression(LOWEST)?.into()); + stmt.update_expression(self.parse_expression(LOWEST)?); while !self.cur_token_is(TokenType::SEMICOLON) { self.next_token()?; }