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, OpenParen),
|
||||||
')' => symbol!(self, CloseParen),
|
')' => symbol!(self, CloseParen),
|
||||||
'+' => symbol!(self, Plus),
|
'+' => 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, QuestionMark),
|
||||||
'\\' => symbol!(self, BackSlash),
|
'\\' => symbol!(self, BackSlash),
|
||||||
'~' => symbol!(self, Tilde),
|
'~' => symbol!(self, Tilde),
|
||||||
|
13
src/value.rs
13
src/value.rs
@ -226,7 +226,8 @@ impl Value {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_true(&self) -> bool {
|
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 {
|
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 {
|
pub fn eval(&self) -> Self {
|
||||||
match self {
|
match self {
|
||||||
Self::BinaryOp(lhs, op, rhs) => match op {
|
Self::BinaryOp(lhs, op, rhs) => match op {
|
||||||
Op::Plus => *lhs.clone() + *rhs.clone(),
|
Op::Plus => *lhs.clone() + *rhs.clone(),
|
||||||
Op::Minus => *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::BinaryOp(lhs.clone(), *op, rhs.clone()),
|
||||||
},
|
},
|
||||||
_ => self.clone(),
|
_ => self.clone(),
|
||||||
|
@ -8,6 +8,16 @@ test!(
|
|||||||
"a {\n color: if(true, 1, 2)\n}\n",
|
"a {\n color: if(true, 1, 2)\n}\n",
|
||||||
"a {\n color: 1;\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!(
|
test!(
|
||||||
if_named_args,
|
if_named_args,
|
||||||
"a {\n color: if($condition: true, $if-true: 1, $if-false: 2)\n}\n",
|
"a {\n color: if($condition: true, $if-true: 1, $if-false: 2)\n}\n",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user