11use crate :: evaluator:: model:: object:: Object ;
2-
32use crate :: syntax_analysis:: model:: abstract_syntax_tree:: syntax_tree_node:: * ;
43use crate :: syntax_analysis:: model:: abstract_syntax_tree:: AbstractSyntaxTree ;
54
5+ use std:: collections:: HashMap ;
6+
67pub ( crate ) mod model;
78
89#[ cfg( test) ]
@@ -12,14 +13,19 @@ mod tests;
1213mod expression;
1314mod statement;
1415
15- pub ( crate ) struct Evaluator { }
16+ #[ derive( Debug ) ]
17+ pub ( crate ) struct Evaluator {
18+ variables : HashMap < String , Object > ,
19+ }
1620
1721impl Evaluator {
1822 pub ( crate ) fn new ( ) -> Evaluator {
19- Evaluator { }
23+ Evaluator {
24+ variables : HashMap :: new ( ) ,
25+ }
2026 }
2127
22- pub ( crate ) fn evaluate ( & self , abstract_syntax_tree : AbstractSyntaxTree ) -> Object {
28+ pub ( crate ) fn evaluate ( & mut self , abstract_syntax_tree : AbstractSyntaxTree ) -> Object {
2329 if !abstract_syntax_tree. syntax_parsing_errors . is_empty ( ) {
2430 panic ! ( "Syntax errors unable to evaluate." ) ;
2531 }
@@ -42,7 +48,7 @@ impl Evaluator {
4248 object
4349 }
4450
45- fn evaluate_block ( & self , block : Block ) -> Object {
51+ fn evaluate_block ( & mut self , block : Block ) -> Object {
4652 let mut object = Object :: Null ;
4753
4854 for syntax_tree_node in block. nodes {
@@ -57,7 +63,7 @@ impl Evaluator {
5763 object
5864 }
5965
60- fn evaluate_node ( & self , syntax_tree_node : SyntaxTreeNode ) -> Object {
66+ fn evaluate_node ( & mut self , syntax_tree_node : SyntaxTreeNode ) -> Object {
6167 match syntax_tree_node {
6268 SyntaxTreeNode :: Expression { expression } => self . evaluate_expression ( expression) ,
6369 SyntaxTreeNode :: Statement { statement } => self . evaluate_statement ( statement) ,
0 commit comments