mirror of
https://github.com/servo/servo.git
synced 2025-08-07 06:25:32 +01:00
Work around a miscompilation bug in LineboxScanner::repair_elem_ranges
This commit is contained in:
parent
ee47778bd5
commit
b0536d7898
1 changed files with 11 additions and 10 deletions
|
@ -267,7 +267,7 @@ impl LineboxScanner {
|
||||||
self.flush_current_line();
|
self.flush_current_line();
|
||||||
}
|
}
|
||||||
|
|
||||||
//self.repair_elem_ranges();
|
self.repair_elem_ranges();
|
||||||
self.swap_out_results();
|
self.swap_out_results();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,7 +280,6 @@ impl LineboxScanner {
|
||||||
|
|
||||||
let mut old_i = 0;
|
let mut old_i = 0;
|
||||||
let old_boxes = &self.flow.inline().boxes;
|
let old_boxes = &self.flow.inline().boxes;
|
||||||
|
|
||||||
// index into self.new_boxes
|
// index into self.new_boxes
|
||||||
let mut new_j = 0;
|
let mut new_j = 0;
|
||||||
|
|
||||||
|
@ -293,7 +292,7 @@ impl LineboxScanner {
|
||||||
do self.flow.inline().elems.borrow |elems: &[NodeRange]| {
|
do self.flow.inline().elems.borrow |elems: &[NodeRange]| {
|
||||||
// index into elems
|
// index into elems
|
||||||
let mut elems_k = 0;
|
let mut elems_k = 0;
|
||||||
|
|
||||||
while old_i < old_boxes.len() {
|
while old_i < old_boxes.len() {
|
||||||
debug!("Considering old box %u", old_i);
|
debug!("Considering old box %u", old_i);
|
||||||
// possibly push several items
|
// possibly push several items
|
||||||
|
@ -303,9 +302,12 @@ impl LineboxScanner {
|
||||||
repair_stack.push(item);
|
repair_stack.push(item);
|
||||||
elems_k += 1;
|
elems_k += 1;
|
||||||
}
|
}
|
||||||
|
// XXX: the following loop form causes segfaults; assigning to locals doesn't.
|
||||||
// slide forward through any dups
|
// while new_j < new_boxes.len() && old_boxes[old_i].d().node != new_boxes[new_j].d().node {
|
||||||
while new_j < self.new_boxes.len() && old_boxes[old_i].d().node == self.new_boxes[new_j].d().node {
|
while new_j < self.new_boxes.len() {
|
||||||
|
let o = old_boxes[old_i];
|
||||||
|
let n = self.new_boxes[new_j];
|
||||||
|
if o.d().node != n.d().node { break }
|
||||||
debug!("Slide through new box %u", new_j);
|
debug!("Slide through new box %u", new_j);
|
||||||
new_j += 1;
|
new_j += 1;
|
||||||
}
|
}
|
||||||
|
@ -318,7 +320,6 @@ impl LineboxScanner {
|
||||||
}
|
}
|
||||||
old_i += 1;
|
old_i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// possibly pop several items
|
// possibly pop several items
|
||||||
while repair_stack.len() > 0 && old_i == elems[repair_stack.last().elem_idx].range.end() {
|
while repair_stack.len() > 0 && old_i == elems[repair_stack.last().elem_idx].range.end() {
|
||||||
let item = repair_stack.pop();
|
let item = repair_stack.pop();
|
||||||
|
@ -342,9 +343,9 @@ impl LineboxScanner {
|
||||||
};
|
};
|
||||||
|
|
||||||
debug!("--- Elem ranges after repair: ---");
|
debug!("--- Elem ranges after repair: ---");
|
||||||
// for self.flow.inline().elems.eachi |i: uint, nr: &NodeRange| {
|
for self.flow.inline().elems.eachi |i: uint, nr: &NodeRange| {
|
||||||
// debug!("%u: %?", i, nr.range);
|
debug!("%u: %?", i, nr.range);
|
||||||
// }
|
}
|
||||||
debug!("----------------------------------");
|
debug!("----------------------------------");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue