mirror of
https://github.com/urinalcaketopper/fddl.git
synced 2025-06-07 05:34:47 +00:00
unary operators
This commit is contained in:
parent
4c8d674e0d
commit
bc42cda601
379
clippy.txt
379
clippy.txt
@ -1,379 +0,0 @@
|
|||||||
cargo clippy
|
|
||||||
Checking fddl v0.0.3 (/home/noro/Documents/words/rust/fddl)
|
|
||||||
warning: unused import: `crate::lexer::Lexer`
|
|
||||||
--> src/parser/parser.rs:3:5
|
|
||||||
|
|
|
||||||
3 | use crate::lexer::Lexer;
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: `#[warn(unused_imports)]` on by default
|
|
||||||
|
|
||||||
warning: unused variable: `operator_token`
|
|
||||||
--> src/parser/parser.rs:222:17
|
|
||||||
|
|
|
||||||
222 | let operator_token = self.current_token().clone();
|
|
||||||
| ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_operator_token`
|
|
||||||
|
|
|
||||||
= note: `#[warn(unused_variables)]` on by default
|
|
||||||
|
|
||||||
warning: unused variable: `operator_token`
|
|
||||||
--> src/parser/parser.rs:237:17
|
|
||||||
|
|
|
||||||
237 | let operator_token = self.current_token().clone();
|
|
||||||
| ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_operator_token`
|
|
||||||
|
|
||||||
warning: method `line_comment` is never used
|
|
||||||
--> src/lexer/lexer.rs:300:8
|
|
||||||
|
|
|
||||||
11 | impl Lexer {
|
|
||||||
| ---------- method in this implementation
|
|
||||||
...
|
|
||||||
300 | fn line_comment(&mut self) -> Option<Token>{
|
|
||||||
| ^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: `#[warn(dead_code)]` on by default
|
|
||||||
|
|
||||||
warning: module has the same name as its containing module
|
|
||||||
--> src/lexer/mod.rs:1:1
|
|
||||||
|
|
|
||||||
1 | pub mod lexer;
|
|
||||||
| ^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception
|
|
||||||
= note: `#[warn(clippy::module_inception)]` on by default
|
|
||||||
|
|
||||||
warning: module has the same name as its containing module
|
|
||||||
--> src/parser/mod.rs:2:1
|
|
||||||
|
|
|
||||||
2 | pub mod parser;
|
|
||||||
| ^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception
|
|
||||||
|
|
||||||
warning: unneeded `return` statement
|
|
||||||
--> src/parser/parser.rs:42:21
|
|
||||||
|
|
|
||||||
42 | return None;
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return
|
|
||||||
= note: `#[warn(clippy::needless_return)]` on by default
|
|
||||||
help: remove `return`
|
|
||||||
|
|
|
||||||
42 - return None;
|
|
||||||
42 + None
|
|
||||||
|
|
|
||||||
|
|
||||||
warning: this `if` has identical blocks
|
|
||||||
--> src/parser/parser.rs:439:46
|
|
||||||
|
|
|
||||||
439 | if self.check(&Token::LeftBrace) {
|
|
||||||
| ______________________________________________^
|
|
||||||
440 | | else_branch_opt = Some(Box::new(self.parse_statement()?));
|
|
||||||
441 | | } else if self.check(&Token::If) {
|
|
||||||
| |_____________^
|
|
||||||
|
|
|
||||||
note: same as this
|
|
||||||
--> src/parser/parser.rs:441:46
|
|
||||||
|
|
|
||||||
441 | } else if self.check(&Token::If) {
|
|
||||||
| ______________________________________________^
|
|
||||||
442 | | else_branch_opt = Some(Box::new(self.parse_statement()?));
|
|
||||||
443 | | } else {
|
|
||||||
| |_____________^
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else
|
|
||||||
= note: `#[warn(clippy::if_same_then_else)]` on by default
|
|
||||||
|
|
||||||
warning: unneeded late initialization
|
|
||||||
--> src/parser/parser.rs:539:9
|
|
||||||
|
|
|
||||||
539 | let increment: Box<Statement>;
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init
|
|
||||||
= note: `#[warn(clippy::needless_late_init)]` on by default
|
|
||||||
help: move the declaration `increment` here and remove the assignments from the branches
|
|
||||||
|
|
|
||||||
539 ~
|
|
||||||
540 ~ let increment: Box<Statement> = if self.check(&Token::RightParen) { // Empty increment (if ')' is next)
|
|
||||||
541 ~ Box::new(Statement::ExpressionStatement(Expression::Literal(Literal::Nil)))
|
|
||||||
542 | } else {
|
|
||||||
543 | let incr_expr = self.parse_expression()?; // Now this will see past the comment
|
|
||||||
544 ~ Box::new(Statement::ExpressionStatement(incr_expr))
|
|
||||||
545 ~ };
|
|
||||||
|
|
|
||||||
|
|
||||||
warning: accessing first element with `self.tokens.get(0)`
|
|
||||||
--> src/parser/parser.rs:691:14
|
|
||||||
|
|
|
||||||
691 | self.tokens.get(0).unwrap_or(&Token::EOF)
|
|
||||||
| ^^^^^^^^^^^^^^^^^^ help: try: `self.tokens.first()`
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first
|
|
||||||
= note: `#[warn(clippy::get_first)]` on by default
|
|
||||||
|
|
||||||
warning: you should consider adding a `Default` implementation for `Environment`
|
|
||||||
--> src/interpreter/evaluator.rs:35:5
|
|
||||||
|
|
|
||||||
35 | / pub fn new() -> Self {
|
|
||||||
36 | | Environment {
|
|
||||||
37 | | values: HashMap::new(),
|
|
||||||
38 | | }
|
|
||||||
39 | | }
|
|
||||||
| |_____^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default
|
|
||||||
= note: `#[warn(clippy::new_without_default)]` on by default
|
|
||||||
help: try adding this
|
|
||||||
|
|
|
||||||
34 + impl Default for Environment {
|
|
||||||
35 + fn default() -> Self {
|
|
||||||
36 + Self::new()
|
|
||||||
37 + }
|
|
||||||
38 + }
|
|
||||||
|
|
|
||||||
|
|
||||||
warning: you should consider adding a `Default` implementation for `Evaluator`
|
|
||||||
--> src/interpreter/evaluator.rs:73:5
|
|
||||||
|
|
|
||||||
73 | / pub fn new() -> Self {
|
|
||||||
74 | | Evaluator {
|
|
||||||
75 | | environment: Environment::new(),
|
|
||||||
76 | | }
|
|
||||||
77 | | }
|
|
||||||
| |_____^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default
|
|
||||||
help: try adding this
|
|
||||||
|
|
|
||||||
72 + impl Default for Evaluator {
|
|
||||||
73 + fn default() -> Self {
|
|
||||||
74 + Self::new()
|
|
||||||
75 + }
|
|
||||||
76 + }
|
|
||||||
|
|
|
||||||
|
|
||||||
warning: `fddl` (lib) generated 12 warnings (run `cargo clippy --fix --lib -p fddl` to apply 5 suggestions)
|
|
||||||
warning: unused import: `parser::*`
|
|
||||||
--> src/parser/mod.rs:5:9
|
|
||||||
|
|
|
||||||
5 | pub use parser::*;
|
|
||||||
| ^^^^^^^^^
|
|
||||||
|
|
||||||
warning: unused import: `std::fs`
|
|
||||||
--> src/main.rs:6:5
|
|
||||||
|
|
|
||||||
6 | use std::fs;
|
|
||||||
| ^^^^^^^
|
|
||||||
|
|
||||||
warning: unused import: `self`
|
|
||||||
--> src/main.rs:7:15
|
|
||||||
|
|
|
||||||
7 | use std::io::{self, Write};
|
|
||||||
| ^^^^
|
|
||||||
|
|
||||||
warning: unused import: `Expression`
|
|
||||||
--> src/main.rs:12:36
|
|
||||||
|
|
|
||||||
12 | use fddl::parser::ast::{Statement, Expression};
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
||||||
warning: function `run` is never used
|
|
||||||
--> src/main.rs:84:4
|
|
||||||
|
|
|
||||||
84 | fn run(source: String) {
|
|
||||||
| ^^^
|
|
||||||
|
|
|
||||||
= note: `#[warn(dead_code)]` on by default
|
|
||||||
|
|
||||||
warning: multiple associated items are never used
|
|
||||||
--> src/lexer/lexer.rs:12:12
|
|
||||||
|
|
|
||||||
11 | impl Lexer {
|
|
||||||
| ---------- associated items in this implementation
|
|
||||||
12 | pub fn new(source: String) -> Self {
|
|
||||||
| ^^^
|
|
||||||
...
|
|
||||||
21 | pub fn scan_tokens(&mut self) -> Vec<Token> {
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
...
|
|
||||||
40 | fn scan_token(&mut self) -> Option<Token> {
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
...
|
|
||||||
137 | fn consume_block_comment(&mut self) -> Option<Token> {
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
...
|
|
||||||
165 | fn advance(&mut self) -> char {
|
|
||||||
| ^^^^^^^
|
|
||||||
...
|
|
||||||
174 | fn match_char(&mut self, expected: char) -> bool {
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
...
|
|
||||||
187 | fn peek(&self) -> char {
|
|
||||||
| ^^^^
|
|
||||||
...
|
|
||||||
195 | fn peek_next(&self) -> char {
|
|
||||||
| ^^^^^^^^^
|
|
||||||
...
|
|
||||||
203 | fn is_at_end(&self) -> bool {
|
|
||||||
| ^^^^^^^^^
|
|
||||||
...
|
|
||||||
207 | fn string(&mut self) -> Option<Token> {
|
|
||||||
| ^^^^^^
|
|
||||||
...
|
|
||||||
231 | fn number(&mut self) -> Option<Token> {
|
|
||||||
| ^^^^^^
|
|
||||||
...
|
|
||||||
254 | fn identifier(&mut self) -> Option<Token> {
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
...
|
|
||||||
291 | fn is_alpha(&self, c: char) -> bool {
|
|
||||||
| ^^^^^^^^
|
|
||||||
...
|
|
||||||
295 | fn is_alphanumeric(&self, c: char) -> bool {
|
|
||||||
| ^^^^^^^^^^^^^^^
|
|
||||||
...
|
|
||||||
300 | fn line_comment(&mut self) -> Option<Token>{
|
|
||||||
| ^^^^^^^^^^^^
|
|
||||||
|
|
||||||
warning: multiple variants are never constructed
|
|
||||||
--> src/lexer/token.rs:9:5
|
|
||||||
|
|
|
||||||
2 | pub enum Token {
|
|
||||||
| ----- variants in this enum
|
|
||||||
...
|
|
||||||
9 | Dot, // .
|
|
||||||
| ^^^
|
|
||||||
10 | Minus, // -
|
|
||||||
| ^^^^^
|
|
||||||
11 | Plus, // +
|
|
||||||
| ^^^^
|
|
||||||
12 | Semicolon, // ;
|
|
||||||
13 | Slash, // /
|
|
||||||
| ^^^^^
|
|
||||||
14 | Star, // *
|
|
||||||
| ^^^^
|
|
||||||
15 | Percent, // %
|
|
||||||
| ^^^^^^^
|
|
||||||
16 | Equal, // =
|
|
||||||
17 | BangEqual, // !=
|
|
||||||
| ^^^^^^^^^
|
|
||||||
18 | EqualEqual, // ==
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
19 | Greater, // >
|
|
||||||
| ^^^^^^^
|
|
||||||
20 | GreaterEqual, // >=
|
|
||||||
| ^^^^^^^^^^^^
|
|
||||||
21 | Less, // <
|
|
||||||
| ^^^^
|
|
||||||
22 | LessEqual, // <=
|
|
||||||
| ^^^^^^^^^
|
|
||||||
23 | Tilde, // ~
|
|
||||||
| ^^^^^
|
|
||||||
24 | TildeEqual, // ~=
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
...
|
|
||||||
27 | Identifier(String),
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
28 | StringLiteral(String),
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
29 | Number(f64),
|
|
||||||
| ^^^^^^
|
|
||||||
...
|
|
||||||
32 | And,
|
|
||||||
| ^^^
|
|
||||||
33 | Or,
|
|
||||||
| ^^
|
|
||||||
...
|
|
||||||
36 | True,
|
|
||||||
| ^^^^
|
|
||||||
37 | False,
|
|
||||||
| ^^^^^
|
|
||||||
38 | Nil,
|
|
||||||
| ^^^
|
|
||||||
39 | Let,
|
|
||||||
40 | Const,
|
|
||||||
| ^^^^^
|
|
||||||
...
|
|
||||||
46 | Pub,
|
|
||||||
| ^^^
|
|
||||||
47 | Sym,
|
|
||||||
| ^^^
|
|
||||||
48 | Module,
|
|
||||||
| ^^^^^^
|
|
||||||
49 | Import,
|
|
||||||
| ^^^^^^
|
|
||||||
50 | Some,
|
|
||||||
| ^^^^
|
|
||||||
51 | Not,
|
|
||||||
| ^^^
|
|
||||||
...
|
|
||||||
54 | Comment(String),
|
|
||||||
| ^^^^^^^
|
|
||||||
...
|
|
||||||
57 | Error(String),
|
|
||||||
| ^^^^^
|
|
||||||
|
|
|
||||||
= note: `Token` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
|
|
||||||
|
|
||||||
warning: name `EOF` contains a capitalized acronym
|
|
||||||
--> src/lexer/token.rs:59:5
|
|
||||||
|
|
|
||||||
59 | EOF,
|
|
||||||
| ^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Eof`
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms
|
|
||||||
= note: `#[warn(clippy::upper_case_acronyms)]` on by default
|
|
||||||
|
|
||||||
warning: variant name ends with the enum's name
|
|
||||||
--> src/parser/ast.rs:57:5
|
|
||||||
|
|
|
||||||
57 | ExpressionStatement(Expression),
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names
|
|
||||||
= note: `#[warn(clippy::enum_variant_names)]` on by default
|
|
||||||
|
|
||||||
warning: variant name ends with the enum's name
|
|
||||||
--> src/parser/ast.rs:58:5
|
|
||||||
|
|
|
||||||
58 | PrintStatement(Expression),
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names
|
|
||||||
|
|
||||||
warning: variant name ends with the enum's name
|
|
||||||
--> src/parser/ast.rs:61:5
|
|
||||||
|
|
|
||||||
61 | IfStatement(Expression, Box<Statement>, Option<Box<Statement>>),
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names
|
|
||||||
|
|
||||||
warning: variant name ends with the enum's name
|
|
||||||
--> src/parser/ast.rs:62:5
|
|
||||||
|
|
|
||||||
62 | WhileStatement(Expression, Box<Statement>),
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names
|
|
||||||
|
|
||||||
warning: variant name ends with the enum's name
|
|
||||||
--> src/parser/ast.rs:63:5
|
|
||||||
|
|
|
||||||
63 | ForStatement(Box<Statement>, Expression, Box<Statement>, Box<Statement>),
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names
|
|
||||||
|
|
||||||
warning: variant name ends with the enum's name
|
|
||||||
--> src/parser/ast.rs:69:5
|
|
||||||
|
|
|
||||||
69 | ReturnStatement(Option<Expression>),
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names
|
|
||||||
|
|
||||||
warning: `fddl` (bin "fddl") generated 23 warnings (9 duplicates) (run `cargo clippy --fix --bin "fddl"` to apply 4 suggestions)
|
|
||||||
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.41s
|
|
||||||
noro@saturn:~/Documents/words/rust/fddl$
|
|
@ -83,6 +83,14 @@ impl Evaluator {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_truthy(value: &FddlValue) -> bool {
|
||||||
|
match value {
|
||||||
|
FddlValue::Boolean(false) => false,
|
||||||
|
FddlValue::Nil => false,
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn evaluate_statement(&mut self, statement: &Statement) -> Result<(), RuntimeError> {
|
fn evaluate_statement(&mut self, statement: &Statement) -> Result<(), RuntimeError> {
|
||||||
match statement {
|
match statement {
|
||||||
Statement::PrintStatement(expr) => {
|
Statement::PrintStatement(expr) => {
|
||||||
@ -149,6 +157,7 @@ impl Evaluator {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Operator::Not => {
|
Operator::Not => {
|
||||||
if let FddlValue::Boolean(b) = right_val {
|
if let FddlValue::Boolean(b) = right_val {
|
||||||
Ok(FddlValue::Boolean(!b))
|
Ok(FddlValue::Boolean(!b))
|
||||||
@ -158,12 +167,14 @@ impl Evaluator {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Operator::Some => {
|
Operator::Some => {
|
||||||
Ok(right_val)
|
Ok(FddlValue::Boolean(!matches!(right_val, FddlValue::Nil)))
|
||||||
}
|
}
|
||||||
|
|
||||||
Operator::Almost => {
|
Operator::Almost => {
|
||||||
if let FddlValue::Number(n) = right_val {
|
if let FddlValue::Number(n) = right_val {
|
||||||
Ok(FddlValue::Number(n.round()))
|
Ok(FddlValue::Number(n.floor()))
|
||||||
} else {
|
} else {
|
||||||
Err(RuntimeError::TypeMismatch(
|
Err(RuntimeError::TypeMismatch(
|
||||||
"Operand for unary '~' (Almost) must be a number for this example.".to_string(),
|
"Operand for unary '~' (Almost) must be a number for this example.".to_string(),
|
||||||
@ -182,6 +193,12 @@ impl Evaluator {
|
|||||||
let right_val = self.evaluate_expression(right_expr)?;
|
let right_val = self.evaluate_expression(right_expr)?;
|
||||||
|
|
||||||
match op {
|
match op {
|
||||||
|
Operator::EqualEqual => { // For ==
|
||||||
|
Ok(FddlValue::Boolean(left_val == right_val))
|
||||||
|
}
|
||||||
|
Operator::NotEqual => { // For !=
|
||||||
|
Ok(FddlValue::Boolean(left_val != right_val))
|
||||||
|
}
|
||||||
Operator::Plus => {
|
Operator::Plus => {
|
||||||
if let (FddlValue::Number(l), FddlValue::Number(r)) = (&left_val, &right_val) {
|
if let (FddlValue::Number(l), FddlValue::Number(r)) = (&left_val, &right_val) {
|
||||||
Ok(FddlValue::Number(l + r))
|
Ok(FddlValue::Number(l + r))
|
||||||
@ -235,6 +252,42 @@ impl Evaluator {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Operator::Greater => {
|
||||||
|
if let (FddlValue::Number(l), FddlValue::Number(r)) = (&left_val, &right_val) {
|
||||||
|
Ok(FddlValue::Boolean(l > r))
|
||||||
|
} else {
|
||||||
|
Err(RuntimeError::TypeMismatch(
|
||||||
|
"Operands for '>' must be numbers.".to_string()
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Operator::GreaterEqual => {
|
||||||
|
if let (FddlValue::Number(l), FddlValue::Number(r)) = (&left_val, &right_val) {
|
||||||
|
Ok(FddlValue::Boolean(l >= r))
|
||||||
|
} else {
|
||||||
|
Err(RuntimeError::TypeMismatch(
|
||||||
|
"Operands for '>=' must be numbers.".to_string()
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Operator::Less => {
|
||||||
|
if let (FddlValue::Number(l), FddlValue::Number(r)) = (&left_val, &right_val) {
|
||||||
|
Ok(FddlValue::Boolean(l < r))
|
||||||
|
} else {
|
||||||
|
Err(RuntimeError::TypeMismatch(
|
||||||
|
"Operands for '<' must be numbers.".to_string()
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Operator::LessEqual => {
|
||||||
|
if let (FddlValue::Number(l), FddlValue::Number(r)) = (&left_val, &right_val) {
|
||||||
|
Ok(FddlValue::Boolean(l <= r))
|
||||||
|
} else {
|
||||||
|
Err(RuntimeError::TypeMismatch(
|
||||||
|
"Operands for '<=' must be numbers.".to_string()
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
_ => Err(RuntimeError::TypeMismatch(format!(
|
_ => Err(RuntimeError::TypeMismatch(format!(
|
||||||
"Unsupported binary operator {:?}.",
|
"Unsupported binary operator {:?}.",
|
||||||
op
|
op
|
||||||
|
Loading…
x
Reference in New Issue
Block a user