diff --git a/src/ast/expression/if_expression.rs b/src/ast/expression/if_expression.rs index 3a07364..613955e 100644 --- a/src/ast/expression/if_expression.rs +++ b/src/ast/expression/if_expression.rs @@ -42,8 +42,8 @@ impl If { &mut self.consequence } - pub fn condition_mut(&mut self) -> &mut Box { - &mut self.condition + pub fn update_expression(&mut self, expression: Expression) { + self.condition = Box::new(expression); } } diff --git a/src/ast/expression/infix.rs b/src/ast/expression/infix.rs index 6d9faaa..4d8cc87 100644 --- a/src/ast/expression/infix.rs +++ b/src/ast/expression/infix.rs @@ -36,8 +36,8 @@ impl Infix { &self.right } - pub fn right_mut(&mut self) -> &mut Box { - &mut self.right + pub fn update_expression(&mut self, right: Expression) { + self.right = Box::new(right); } } diff --git a/src/ast/expression/integer.rs b/src/ast/expression/integer.rs index 5c3744c..030b3a5 100644 --- a/src/ast/expression/integer.rs +++ b/src/ast/expression/integer.rs @@ -27,8 +27,8 @@ impl IntegerLiteral { self.value } - pub fn value_mut(&mut self) -> &mut isize { - &mut self.value + pub fn update_value(&mut self, value: isize) { + self.value = value; } } diff --git a/src/ast/expression/prefix.rs b/src/ast/expression/prefix.rs index 8f2ae3e..14ebabe 100644 --- a/src/ast/expression/prefix.rs +++ b/src/ast/expression/prefix.rs @@ -30,8 +30,8 @@ impl Prefix { &self.right } - pub fn right_mut(&mut self) -> &mut Box { - &mut self.right + pub fn update_expression(&mut self, expression: Expression) { + self.right = Box::new(expression); } } diff --git a/src/ast/statement/expression.rs b/src/ast/statement/expression.rs index 6fc3984..44e5360 100644 --- a/src/ast/statement/expression.rs +++ b/src/ast/statement/expression.rs @@ -31,8 +31,8 @@ impl ExpressionStatement { &self.expression } - pub fn expression_mut(&mut self) -> &mut Expression { - &mut self.expression + pub fn update_expression(&mut self, expression: Expression) { + self.expression = expression; } } diff --git a/src/ast/statement/let_statement.rs b/src/ast/statement/let_statement.rs index 3e81b9c..6f77749 100644 --- a/src/ast/statement/let_statement.rs +++ b/src/ast/statement/let_statement.rs @@ -34,16 +34,16 @@ impl LetStatement { &self.value } - pub fn value_mut(&mut self) -> &mut Expression { - &mut self.value + pub fn update_expression(&mut self, value: Expression) { + self.value = Box::new(value); } pub fn name(&self) -> &Identifier { &self.name } - pub fn name_mut(&mut self) -> &mut Identifier { - &mut self.name + pub fn update_identifier(&mut self, name: Identifier) { + self.name = name; } } diff --git a/src/ast/statement/return_statement.rs b/src/ast/statement/return_statement.rs index 8431446..34ebfe8 100644 --- a/src/ast/statement/return_statement.rs +++ b/src/ast/statement/return_statement.rs @@ -29,8 +29,8 @@ impl ReturnStatement { &self.return_value } - pub fn return_value_mut(&mut self) -> &mut Box { - &mut self.return_value + pub fn update_expression(&mut self, expression: Expression) { + self.return_value = Box::new(expression); } pub fn return_value_into(self) -> Expression { diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 966ce2f..ff48569 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -171,10 +171,10 @@ impl<'a> Parser<'a> { } .into()); } - *stmt.name_mut() = Identifier::new( + stmt.update_identifier(Identifier::new( self.current_token.clone(), self.current_token.literal().into(), - ); + )); tracing::trace!("stmt = {stmt}"); if self.expect_peek(TokenType::ASSIGN).is_err() { return Err(Error::CannotFindTokenType { @@ -183,7 +183,7 @@ impl<'a> Parser<'a> { .into()); } self.next_token()?; - *stmt.value_mut() = self.parse_expression(LOWEST)?; + stmt.update_expression(self.parse_expression(LOWEST)?); while !self.cur_token_is(TokenType::SEMICOLON) { self.next_token()?; } @@ -198,7 +198,7 @@ impl<'a> Parser<'a> { let mut stmt = ReturnStatement::new(self.current_token.clone()); self.next_token()?; // add equal expression - *stmt.return_value_mut() = self.parse_expression(LOWEST)?.into(); + stmt.update_expression(self.parse_expression(LOWEST)?.into()); while !self.cur_token_is(TokenType::SEMICOLON) { self.next_token()?; } @@ -213,7 +213,7 @@ impl<'a> Parser<'a> { tracing::trace!("current_token = {:?}", self.current_token); let mut stmt = ExpressionStatement::new(self.current_token.clone()); tracing::trace!("before ExpressionStatement = {stmt}"); - *stmt.expression_mut() = self.parse_expression(LOWEST)?; + stmt.update_expression(self.parse_expression(LOWEST)?); if self.peek_token_is(TokenType::SEMICOLON) { self.next_token()?; } @@ -314,7 +314,7 @@ impl<'a> Parser<'a> { let mut literal = IntegerLiteral::new(self.current_token.clone()); let value = self.current_token.literal().parse::()?; - *literal.value_mut() = value; + literal.update_value(value); Ok(literal.into()) } @@ -326,7 +326,7 @@ impl<'a> Parser<'a> { self.current_token.literal().into(), ); self.next_token()?; - *expression.right_mut() = Box::new(self.parse_expression(PREFIX)?); + expression.update_expression(self.parse_expression(PREFIX)?); Ok(expression.into()) } @@ -345,7 +345,7 @@ impl<'a> Parser<'a> { self.next_token()?; - *expression.right_mut() = Box::new(self.parse_expression(precedence)?); + expression.update_expression(self.parse_expression(precedence)?); tracing::trace!("after InfixExpression = {expression}"); @@ -383,7 +383,7 @@ impl<'a> Parser<'a> { self.next_token()?; - *expression.condition_mut() = Box::new(self.parse_expression(LOWEST)?); + expression.update_expression(self.parse_expression(LOWEST)?); if self.expect_peek(TokenType::RPAREN).is_err() { return Err(Error::CannotFindTokenType {