diff --git a/src/parse/value/eval.rs b/src/parse/value/eval.rs index b516a71..0b43447 100644 --- a/src/parse/value/eval.rs +++ b/src/parse/value/eval.rs @@ -68,7 +68,7 @@ impl<'a, 'b: 'a> ValueVisitor<'a, 'b> { let val2 = self.paren_or_unary(val2)?; if let HigherIntermediateValue::BinaryOp(val1_1, op2, val1_2) = val1 { - if op2.precedence() > op.precedence() { + if op2.precedence() >= op.precedence() { val1 = HigherIntermediateValue::Literal(self.bin_op(*val1_1, op2, *val1_2)?); } else { let val2 = HigherIntermediateValue::Literal(self.bin_op(*val1_2, op, val2)?); diff --git a/tests/min-max.rs b/tests/min-max.rs index 525df78..e7e902c 100644 --- a/tests/min-max.rs +++ b/tests/min-max.rs @@ -90,7 +90,7 @@ test!( test!( max_evaluated_binop, "a {\n color: max(100% - lightness(red) - 2%);\n}\n", - "a {\n color: 52%;\n}\n" + "a {\n color: 48%;\n}\n" ); error!( max_arg_of_incorrect_type, diff --git a/tests/order-of-operations.rs b/tests/order-of-operations.rs index a3e08c5..2a82d03 100644 --- a/tests/order-of-operations.rs +++ b/tests/order-of-operations.rs @@ -38,3 +38,8 @@ test!( "a {\n color: a or b !=c;\n}\n", "a {\n color: a;\n}\n" ); +test!( + leftmost_is_evaluated_first_when_same_precedence, + "a {\n color: 1 / 2 * 1em;\n}\n", + "a {\n color: 0.5em;\n}\n" +);