aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/layout_2020/flow/construct.rs38
1 files changed, 21 insertions, 17 deletions
diff --git a/components/layout_2020/flow/construct.rs b/components/layout_2020/flow/construct.rs
index 0ddd4a41f88..d1a57145110 100644
--- a/components/layout_2020/flow/construct.rs
+++ b/components/layout_2020/flow/construct.rs
@@ -157,25 +157,29 @@ impl BlockContainer {
builder.end_ongoing_inline_formatting_context();
}
- let mut contains_floats = builder.contains_floats;
+ type Intermediate<Node> = IntermediateBlockLevelBox<Node>;
+ #[derive(Default)]
+ struct Target {
+ contains_floats: ContainsFloats,
+ }
+ let mut target = Target {
+ contains_floats: builder.contains_floats,
+ };
let request_content_sizes = false; // FIXME
- let container = BlockContainer::BlockLevelBoxes(
- builder
- .block_level_boxes
- .into_par_iter()
- .mapfold_reduce_into(
- &mut contains_floats,
- |contains_floats, (intermediate, box_slot): (IntermediateBlockLevelBox<_>, BoxSlot<'_>)| {
- let (block_level_box, box_contains_floats) = intermediate.finish(context, request_content_sizes);
- *contains_floats |= box_contains_floats;
- box_slot.set(LayoutBox::BlockLevel(block_level_box.clone()));
- block_level_box
- },
- |left, right| *left |= right,
- )
- .collect(),
+ let iter = builder.block_level_boxes.into_par_iter();
+ let iter = iter.mapfold_reduce_into(
+ &mut target,
+ |target, (intermediate, box_slot): (Intermediate<_>, BoxSlot<'_>)| {
+ let (block_level_box, box_contains_floats) =
+ intermediate.finish(context, request_content_sizes);
+ target.contains_floats |= box_contains_floats;
+ box_slot.set(LayoutBox::BlockLevel(block_level_box.clone()));
+ block_level_box
+ },
+ |left, right| left.contains_floats |= right.contains_floats,
);
- (container, contains_floats)
+ let container = BlockContainer::BlockLevelBoxes(iter.collect());
+ (container, target.contains_floats)
}
}