From 11f54f639115627c385b898dfc0e9c7d06b41c8f Mon Sep 17 00:00:00 2001 From: Marco Castelluccio Date: Wed, 2 Oct 2019 06:47:11 +0000 Subject: [PATCH] servo: Merge #19316 - Fix Stylo tests to pass on both Stable and Nightly Rust (from servo:stylo-size-of); r=emilio This is on top of /~https://github.com/servo/servo/pull/19285. Rust Nightly has new enum memory layout optimizations: /~https://github.com/rust-lang/rust/pull/45225 Source-Repo: /~https://github.com/servo/servo Source-Revision: 17e97b9320fdb7cdb33bbc5f4d0fde0653bbf2e4 UltraBlame original commit: 6de571030d5d998dcadbd3dac602fa006395165c --- servo/components/style/build.rs | 10 ++++++++++ servo/components/style/properties/build.py | 3 ++- servo/components/style/properties/data.py | 2 +- .../style/properties/longhand/inherited_svg.mako.rs | 4 ++-- .../style/properties/longhand/pointing.mako.rs | 2 +- servo/tests/unit/stylo/build.rs | 5 +++++ servo/tests/unit/stylo/size_of.rs | 6 ++++-- 7 files changed, 25 insertions(+), 7 deletions(-) diff --git a/servo/components/style/build.rs b/servo/components/style/build.rs index 7fa9138e55e56..cd036005ad4f5 100644 --- a/servo/components/style/build.rs +++ b/servo/components/style/build.rs @@ -76,6 +76,16 @@ fn generate_properties() { .arg(&script) .arg(product) .arg("style-crate") + .envs(if std::mem::size_of::>() == 1 { + + + + + + vec![("RUSTC_HAS_PR45225", "1")] + } else { + vec![] + }) .status() .unwrap(); if !status.success() { diff --git a/servo/components/style/properties/build.py b/servo/components/style/properties/build.py index 33fa0e2006dd1..d7a7a9085c90a 100644 --- a/servo/components/style/properties/build.py +++ b/servo/components/style/properties/build.py @@ -32,7 +32,8 @@ def main(): properties = data.PropertiesData(product=product) template = os.path.join(BASE, "properties.mako.rs") - rust = render(template, product=product, data=properties, __file__=template) + rust = render(template, product=product, data=properties, __file__=template, + RUSTC_HAS_PR45225=os.environ.get("RUSTC_HAS_PR45225")) if output == "style-crate": write(os.environ["OUT_DIR"], "properties.rs", rust) if product == "gecko": diff --git a/servo/components/style/properties/data.py b/servo/components/style/properties/data.py index f2bb901a9e4f3..60a36cb0159aa 100644 --- a/servo/components/style/properties/data.py +++ b/servo/components/style/properties/data.py @@ -140,7 +140,7 @@ def casted_constant_name(self, value, cast_type): def arg_to_bool(arg): if isinstance(arg, bool): return arg - assert arg in ["True", "False"] + assert arg in ["True", "False"], "Unexpected value for boolean arguement: " + repr(arg) return arg == "True" diff --git a/servo/components/style/properties/longhand/inherited_svg.mako.rs b/servo/components/style/properties/longhand/inherited_svg.mako.rs index 18608eba44fad..46404f37ed54a 100644 --- a/servo/components/style/properties/longhand/inherited_svg.mako.rs +++ b/servo/components/style/properties/longhand/inherited_svg.mako.rs @@ -66,7 +66,7 @@ ${helpers.predefined_type( "stroke-width", "SVGWidth", "::values::computed::NonNegativeLength::new(1.).into()", products="gecko", - boxed="True", + boxed=not RUSTC_HAS_PR45225, animation_value_type="::values::computed::SVGWidth", spec="https://www.w3.org/TR/SVG2/painting.html#StrokeWidth")} @@ -101,7 +101,7 @@ ${helpers.predefined_type( "stroke-dashoffset", "SVGLength", "Au(0).into()", products="gecko", - boxed="True", + boxed=not RUSTC_HAS_PR45225, animation_value_type="ComputedValue", spec="https://www.w3.org/TR/SVG2/painting.html#StrokeDashing")} diff --git a/servo/components/style/properties/longhand/pointing.mako.rs b/servo/components/style/properties/longhand/pointing.mako.rs index bf678caff72a0..bd2ae1dc22378 100644 --- a/servo/components/style/properties/longhand/pointing.mako.rs +++ b/servo/components/style/properties/longhand/pointing.mako.rs @@ -177,7 +177,7 @@ ${helpers.predefined_type( "Either::Second(Auto)", spec="https://drafts.csswg.org/css-ui/#caret-color", animation_value_type="Either", - boxed=True, + boxed=not RUSTC_HAS_PR45225, ignored_when_colors_disabled=True, products="gecko", )} diff --git a/servo/tests/unit/stylo/build.rs b/servo/tests/unit/stylo/build.rs index 1e37a9cecd7e0..32bca7336a40b 100644 --- a/servo/tests/unit/stylo/build.rs +++ b/servo/tests/unit/stylo/build.rs @@ -11,6 +11,11 @@ use std::io::{BufRead, BufReader, Write}; use std::path::Path; fn main() { + if std::mem::size_of::>() == 1 { + + println!("cargo:rustc-cfg=rustc_has_pr45225") + } + let root_path = Path::new("../../../"); let bindings_file = root_path.join("components/style/gecko/generated/bindings.rs"); let glue_file = root_path.join("ports/geckolib/glue.rs"); diff --git a/servo/tests/unit/stylo/size_of.rs b/servo/tests/unit/stylo/size_of.rs index 6e0eecb842cc6..4c18d26d48e8c 100644 --- a/servo/tests/unit/stylo/size_of.rs +++ b/servo/tests/unit/stylo/size_of.rs @@ -57,5 +57,7 @@ size_of_test!(test_size_of_specified_image, specified::image::Image, 40); -size_of_test!(test_size_of_computed_image_layer, computed::image::ImageLayer, 48); -size_of_test!(test_size_of_specified_image_layer, specified::image::ImageLayer, 48); +size_of_test!(test_size_of_computed_image_layer, computed::image::ImageLayer, + if cfg!(rustc_has_pr45225) { 40 } else { 48 }); +size_of_test!(test_size_of_specified_image_layer, specified::image::ImageLayer, + if cfg!(rustc_has_pr45225) { 40 } else { 48 });