mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Fix some calc parsing panics
This commit is contained in:
parent
67db4fbc2e
commit
f8bd7c46ae
1 changed files with 16 additions and 9 deletions
|
@ -504,13 +504,8 @@ pub mod specified {
|
||||||
|
|
||||||
match node_with_unit {
|
match node_with_unit {
|
||||||
None => Ok(CalcAstNode::Value(CalcValueNode::Number(multiplier))),
|
None => Ok(CalcAstNode::Value(CalcValueNode::Number(multiplier))),
|
||||||
Some(CalcValueNode::Sum(box sum)) =>
|
Some(CalcValueNode::Sum(box ref sum)) =>
|
||||||
Ok(CalcAstNode::Add(CalcSumNode {
|
Ok(CalcAstNode::Add(Calc::multiply_sum(sum, multiplier))),
|
||||||
products: sum.products
|
|
||||||
.iter()
|
|
||||||
.map(|p| Calc::multiply_product(p, multiplier))
|
|
||||||
.collect()
|
|
||||||
})),
|
|
||||||
Some(ref value) =>
|
Some(ref value) =>
|
||||||
Ok(CalcAstNode::Value(Calc::multiply_value(value, multiplier))),
|
Ok(CalcAstNode::Value(Calc::multiply_value(value, multiplier))),
|
||||||
}
|
}
|
||||||
|
@ -525,11 +520,22 @@ pub mod specified {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn multiply_sum(node: &CalcSumNode, multiplier: CSSFloat) -> CalcSumNode {
|
||||||
|
CalcSumNode {
|
||||||
|
products: node.products
|
||||||
|
.iter()
|
||||||
|
.map(|p| Calc::multiply_product(p, multiplier))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn multiply_value(node: &CalcValueNode, multiplier: CSSFloat) -> CalcValueNode {
|
fn multiply_value(node: &CalcValueNode, multiplier: CSSFloat) -> CalcValueNode {
|
||||||
|
println!("multiplying {:?} by {}", node, multiplier);
|
||||||
match node {
|
match node {
|
||||||
&CalcValueNode::Number(_) => unreachable!(),
|
&CalcValueNode::Number(num) => CalcValueNode::Number(num * multiplier),
|
||||||
&CalcValueNode::Percentage(p) => CalcValueNode::Percentage(p * multiplier),
|
&CalcValueNode::Percentage(p) => CalcValueNode::Percentage(p * multiplier),
|
||||||
&CalcValueNode::Sum(_) => unreachable!(),
|
&CalcValueNode::Sum(box ref sum) =>
|
||||||
|
CalcValueNode::Sum(box Calc::multiply_sum(sum, multiplier)),
|
||||||
&CalcValueNode::Length(l) => CalcValueNode::Length(l * multiplier),
|
&CalcValueNode::Length(l) => CalcValueNode::Length(l * multiplier),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -544,6 +550,7 @@ pub mod specified {
|
||||||
CalcAstNode::Value(value) => simplified.push(value),
|
CalcAstNode::Value(value) => simplified.push(value),
|
||||||
CalcAstNode::Add(sum) => {
|
CalcAstNode::Add(sum) => {
|
||||||
for product in sum.products {
|
for product in sum.products {
|
||||||
|
println!(" Matching product AST: {:?}", product);
|
||||||
assert!(product.values.len() == 1);
|
assert!(product.values.len() == 1);
|
||||||
simplified.push(product.values[0].clone());
|
simplified.push(product.values[0].clone());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue