Skip to content

Commit c9bdc09

Browse files
committed
refactor: creating error and error type
1 parent 7ce118e commit c9bdc09

14 files changed

+60
-23
lines changed

src/evaluator/expression/infix/mod.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::evaluator::model::object::Object;
1+
use crate::evaluator::model::object::{ErrorType, Object};
22
use crate::evaluator::Evaluator;
33
use crate::lexical_analysis::model::token::Token;
44
use crate::syntax_analysis::model::abstract_syntax_tree::syntax_tree_node::Expression;
@@ -43,17 +43,23 @@ impl Evaluator {
4343
},
4444
_ => panic!("Operator token is not operator token."),
4545
},
46-
_ => Object::TypeMismatch,
46+
_ => Object::Error {
47+
error_type: ErrorType::TypeMismatch,
48+
},
4749
},
4850
Object::True => match self.evaluate_expression(right_hand) {
4951
Object::True => evaluate_same_boolean(operator_token),
5052
Object::False => evaluate_opposite_boolean(operator_token),
51-
_ => Object::TypeMismatch,
53+
_ => Object::Error {
54+
error_type: ErrorType::TypeMismatch,
55+
},
5256
},
5357
Object::False => match self.evaluate_expression(right_hand) {
5458
Object::False => evaluate_same_boolean(operator_token),
5559
Object::True => evaluate_opposite_boolean(operator_token),
56-
_ => Object::TypeMismatch,
60+
_ => Object::Error {
61+
error_type: ErrorType::TypeMismatch,
62+
},
5763
},
5864
_ => Object::Null,
5965
}
@@ -64,15 +70,19 @@ fn evaluate_same_boolean(operator_token: Token) -> Object {
6470
match operator_token {
6571
Token::Equals => Object::True,
6672
Token::NotEquals => Object::False,
67-
_ => Object::UnknownOperator,
73+
_ => Object::Error {
74+
error_type: ErrorType::UnknownOperator,
75+
},
6876
}
6977
}
7078

7179
fn evaluate_opposite_boolean(operator_token: Token) -> Object {
7280
match operator_token {
7381
Token::Equals => Object::False,
7482
Token::NotEquals => Object::True,
75-
_ => Object::UnknownOperator,
83+
_ => Object::Error {
84+
error_type: ErrorType::UnknownOperator,
85+
},
7686
}
7787
}
7888

src/evaluator/expression/infix/tests/snapshots/monkey_interpreter__evaluator__expression__infix__tests__test_evaluator_infix_type_mismatch_expressions_case1.snap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ source: src/evaluator/expression/infix/tests/mod.rs
33
expression: "evaluator.evaluate(crate::syntax_analysis::SyntaxAnalysis::from(crate::lexical_analysis::LexicalAnalysis::from(code)))"
44

55
---
6-
TypeMismatch
6+
Error {
7+
error_type: TypeMismatch,
8+
}

src/evaluator/expression/infix/tests/snapshots/monkey_interpreter__evaluator__expression__infix__tests__test_evaluator_infix_type_mismatch_expressions_case2.snap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ source: src/evaluator/expression/infix/tests/mod.rs
33
expression: "evaluator.evaluate(crate::syntax_analysis::SyntaxAnalysis::from(crate::lexical_analysis::LexicalAnalysis::from(code)))"
44

55
---
6-
TypeMismatch
6+
Error {
7+
error_type: TypeMismatch,
8+
}

src/evaluator/expression/infix/tests/snapshots/monkey_interpreter__evaluator__expression__infix__tests__test_evaluator_infix_type_mismatch_expressions_case3.snap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ source: src/evaluator/expression/infix/tests/mod.rs
33
expression: "evaluator.evaluate(crate::syntax_analysis::SyntaxAnalysis::from(crate::lexical_analysis::LexicalAnalysis::from(code)))"
44

55
---
6-
TypeMismatch
6+
Error {
7+
error_type: TypeMismatch,
8+
}

src/evaluator/expression/infix/tests/snapshots/monkey_interpreter__evaluator__expression__infix__tests__test_evaluator_infix_type_mismatch_expressions_case4.snap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ source: src/evaluator/expression/infix/tests/mod.rs
33
expression: "evaluator.evaluate(crate::syntax_analysis::SyntaxAnalysis::from(crate::lexical_analysis::LexicalAnalysis::from(code)))"
44

55
---
6-
TypeMismatch
6+
Error {
7+
error_type: TypeMismatch,
8+
}

src/evaluator/expression/infix/tests/snapshots/monkey_interpreter__evaluator__expression__infix__tests__test_evaluator_infix_unknown_operator_expressions_case1.snap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ source: src/evaluator/expression/infix/tests/mod.rs
33
expression: "evaluator.evaluate(crate::syntax_analysis::SyntaxAnalysis::from(crate::lexical_analysis::LexicalAnalysis::from(code)))"
44

55
---
6-
UnknownOperator
6+
Error {
7+
error_type: UnknownOperator,
8+
}

src/evaluator/expression/infix/tests/snapshots/monkey_interpreter__evaluator__expression__infix__tests__test_evaluator_infix_unknown_operator_expressions_case2.snap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ source: src/evaluator/expression/infix/tests/mod.rs
33
expression: "evaluator.evaluate(crate::syntax_analysis::SyntaxAnalysis::from(crate::lexical_analysis::LexicalAnalysis::from(code)))"
44

55
---
6-
UnknownOperator
6+
Error {
7+
error_type: UnknownOperator,
8+
}

src/evaluator/expression/infix/tests/snapshots/monkey_interpreter__evaluator__expression__infix__tests__test_evaluator_infix_unknown_operator_expressions_case3.snap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ source: src/evaluator/expression/infix/tests/mod.rs
33
expression: "evaluator.evaluate(crate::syntax_analysis::SyntaxAnalysis::from(crate::lexical_analysis::LexicalAnalysis::from(code)))"
44

55
---
6-
UnknownOperator
6+
Error {
7+
error_type: UnknownOperator,
8+
}

src/evaluator/expression/prefix/mod.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::evaluator::model::object::Object;
1+
use crate::evaluator::model::object::{ErrorType, Object};
22
use crate::evaluator::Evaluator;
33
use crate::lexical_analysis::model::token::Token;
44
use crate::syntax_analysis::model::abstract_syntax_tree::syntax_tree_node::Expression;
@@ -14,11 +14,15 @@ impl Evaluator {
1414
Token::Not => match object {
1515
Object::True => Object::False,
1616
Object::False => Object::True,
17-
_ => Object::UnknownOperator,
17+
_ => Object::Error {
18+
error_type: ErrorType::UnknownOperator,
19+
},
1820
},
1921
Token::Minus => match object {
2022
Object::Integer { value } => Object::Integer { value: -value },
21-
_ => Object::UnknownOperator,
23+
_ => Object::Error {
24+
error_type: ErrorType::UnknownOperator,
25+
},
2226
},
2327
_ => panic!("Prefix token not a prefix token."),
2428
}

src/evaluator/expression/prefix/tests/snapshots/monkey_interpreter__evaluator__expression__prefix__tests__test_evaluator_unknown_operator_prefix_nodes_case1.snap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ source: src/evaluator/expression/prefix/tests/mod.rs
33
expression: "evaluator.evaluate(crate::syntax_analysis::SyntaxAnalysis::from(crate::lexical_analysis::LexicalAnalysis::from(code)))"
44

55
---
6-
UnknownOperator
6+
Error {
7+
error_type: UnknownOperator,
8+
}

0 commit comments

Comments
 (0)