Handle == and !=
This commit is contained in:
parent
74a81060ba
commit
29917d95d4
13
src/lexer.rs
13
src/lexer.rs
@ -46,7 +46,18 @@ impl<'a> Iterator for Lexer<'a> {
|
||||
'(' => symbol!(self, OpenParen),
|
||||
')' => symbol!(self, CloseParen),
|
||||
'+' => symbol!(self, Plus),
|
||||
'=' => symbol!(self, Equal),
|
||||
'=' => {
|
||||
self.buf.next();
|
||||
self.pos.next_char();
|
||||
match self.buf.peek() {
|
||||
Some('=') => {
|
||||
self.buf.next();
|
||||
self.pos.next_char();
|
||||
TokenKind::Op(Op::Equal)
|
||||
}
|
||||
_ => TokenKind::Symbol(Symbol::Equal)
|
||||
}
|
||||
},
|
||||
'?' => symbol!(self, QuestionMark),
|
||||
'\\' => symbol!(self, BackSlash),
|
||||
'~' => symbol!(self, Tilde),
|
||||
|
13
src/value.rs
13
src/value.rs
@ -226,7 +226,8 @@ impl Value {
|
||||
}
|
||||
|
||||
pub fn is_true(&self) -> bool {
|
||||
!(self == &Value::Null || self == &Value::False)
|
||||
let s = self.eval();
|
||||
!(s == Value::Null || s == Value::False)
|
||||
}
|
||||
|
||||
pub fn unquote(self) -> Self {
|
||||
@ -250,11 +251,21 @@ impl Value {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn bool(b: bool) -> Self {
|
||||
if b {
|
||||
Value::True
|
||||
} else {
|
||||
Value::False
|
||||
}
|
||||
}
|
||||
|
||||
pub fn eval(&self) -> Self {
|
||||
match self {
|
||||
Self::BinaryOp(lhs, op, rhs) => match op {
|
||||
Op::Plus => *lhs.clone() + *rhs.clone(),
|
||||
Op::Minus => *lhs.clone() - *rhs.clone(),
|
||||
Op::Equal => Self::bool(*lhs == *rhs),
|
||||
Op::NotEqual => Self::bool(*lhs != *rhs),
|
||||
_ => Self::BinaryOp(lhs.clone(), *op, rhs.clone()),
|
||||
},
|
||||
_ => self.clone(),
|
||||
|
@ -8,6 +8,16 @@ test!(
|
||||
"a {\n color: if(true, 1, 2)\n}\n",
|
||||
"a {\n color: 1;\n}\n"
|
||||
);
|
||||
test!(
|
||||
if_equal,
|
||||
"a {\n color: if(1 == 1, 1, 2)\n}\n",
|
||||
"a {\n color: 1;\n}\n"
|
||||
);
|
||||
test!(
|
||||
if_not_equal,
|
||||
"a {\n color: if(1 != 1, 1, 2)\n}\n",
|
||||
"a {\n color: 2;\n}\n"
|
||||
);
|
||||
test!(
|
||||
if_named_args,
|
||||
"a {\n color: if($condition: true, $if-true: 1, $if-false: 2)\n}\n",
|
||||
|
Loading…
x
Reference in New Issue
Block a user