mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Clean up AST simplification code
This commit is contained in:
parent
64dc95436d
commit
cfa1e467f1
1 changed files with 44 additions and 41 deletions
|
@ -374,7 +374,6 @@ pub mod specified {
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
enum CalcAstNode {
|
enum CalcAstNode {
|
||||||
Add(CalcSumNode),
|
Add(CalcSumNode),
|
||||||
Multiply(CalcProductNode),
|
|
||||||
Value(CalcValueNode),
|
Value(CalcValueNode),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -412,7 +411,6 @@ pub mod specified {
|
||||||
}
|
}
|
||||||
|
|
||||||
let sum = CalcSumNode { products: products };
|
let sum = CalcSumNode { products: products };
|
||||||
println!("Parsed sum {:?} ", sum);
|
|
||||||
Ok(sum)
|
Ok(sum)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -445,7 +443,6 @@ pub mod specified {
|
||||||
}
|
}
|
||||||
|
|
||||||
let sum = CalcProductNode { values: values };
|
let sum = CalcProductNode { values: values };
|
||||||
println!("Parsed product {:?} ", sum);
|
|
||||||
Ok(sum)
|
Ok(sum)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -491,7 +488,6 @@ pub mod specified {
|
||||||
})),
|
})),
|
||||||
Some(CalcAstNode::Value(ref value)) =>
|
Some(CalcAstNode::Value(ref value)) =>
|
||||||
Ok(CalcAstNode::Value(Calc::multiply_value(value, multiplier))),
|
Ok(CalcAstNode::Value(Calc::multiply_value(value, multiplier))),
|
||||||
_ => unreachable!()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,14 +516,12 @@ pub mod specified {
|
||||||
let node = try!(Calc::simplify_product(node));
|
let node = try!(Calc::simplify_product(node));
|
||||||
match node {
|
match node {
|
||||||
CalcAstNode::Value(value) => {
|
CalcAstNode::Value(value) => {
|
||||||
let product = CalcProductNode { values: vec!(value) };
|
|
||||||
if length == 1 {
|
if length == 1 {
|
||||||
return Ok(CalcAstNode::Multiply(product));
|
return Ok(CalcAstNode::Value(value));
|
||||||
}
|
}
|
||||||
simplified.push(product);
|
simplified.push(CalcProductNode { values: vec!(value) });
|
||||||
}
|
}
|
||||||
CalcAstNode::Add(sum) => simplified.push_all(&sum.products),
|
CalcAstNode::Add(sum) => simplified.push_all(&sum.products),
|
||||||
_ => return Err(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -546,6 +540,8 @@ pub mod specified {
|
||||||
let ast = try!(Calc::parse_sum(input));
|
let ast = try!(Calc::parse_sum(input));
|
||||||
let ast = try!(Calc::simplify_sum(ast));
|
let ast = try!(Calc::simplify_sum(ast));
|
||||||
|
|
||||||
|
println!("Simlified ast {:?} ", ast);
|
||||||
|
|
||||||
let mut absolute = None;
|
let mut absolute = None;
|
||||||
let mut vw = None;
|
let mut vw = None;
|
||||||
let mut vh = None;
|
let mut vh = None;
|
||||||
|
@ -556,10 +552,20 @@ pub mod specified {
|
||||||
let mut rem = None;
|
let mut rem = None;
|
||||||
let mut percentage = None;
|
let mut percentage = None;
|
||||||
|
|
||||||
if let CalcAstNode::Add(ast) = ast {
|
let values = match ast {
|
||||||
for value in ast.products {
|
CalcAstNode::Add(sum) => {
|
||||||
assert!(value.values.len() == 1);
|
let mut values = Vec::new();
|
||||||
match value.values[0] {
|
for product in sum.products {
|
||||||
|
assert!(product.values.len() == 1);
|
||||||
|
values.push(product.values[0].clone());
|
||||||
|
}
|
||||||
|
values
|
||||||
|
},
|
||||||
|
CalcAstNode::Value(value) => vec!(value)
|
||||||
|
};
|
||||||
|
|
||||||
|
for value in values {
|
||||||
|
match value {
|
||||||
CalcValueNode::Percentage(p) =>
|
CalcValueNode::Percentage(p) =>
|
||||||
percentage = Some(percentage.unwrap_or(0.) + p),
|
percentage = Some(percentage.unwrap_or(0.) + p),
|
||||||
CalcValueNode::Length(Length::Absolute(Au(au))) =>
|
CalcValueNode::Length(Length::Absolute(Au(au))) =>
|
||||||
|
@ -587,9 +593,6 @@ pub mod specified {
|
||||||
_ => return Err(())
|
_ => return Err(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
unreachable!()
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(Calc {
|
Ok(Calc {
|
||||||
absolute: absolute.map(Au),
|
absolute: absolute.map(Au),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue