mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
layout: Make NodeRange
use OpaqueNode
for memory safety.
These were stored in inline flows. This was caught by my WIP changes to harden layout (yay for Rust!)
This commit is contained in:
parent
45c092cea4
commit
423f5b8540
2 changed files with 16 additions and 7 deletions
|
@ -228,7 +228,7 @@ impl TextRunScanner {
|
|||
|
||||
debug!("--- Elem ranges: ---");
|
||||
for (i, nr) in inline.elems.eachi() {
|
||||
debug!("{:u}: {} --> {:s}", i, nr.range, nr.node.debug_str()); ()
|
||||
debug!("{:u}: {} --> {:?}", i, nr.range, nr.node.id()); ()
|
||||
}
|
||||
debug!("--------------------");
|
||||
|
||||
|
|
|
@ -18,12 +18,12 @@ use style::{ComputedValues, PropertyDeclaration};
|
|||
|
||||
/// A range of nodes.
|
||||
pub struct NodeRange {
|
||||
node: AbstractNode<LayoutView>,
|
||||
node: OpaqueNode,
|
||||
range: Range,
|
||||
}
|
||||
|
||||
impl NodeRange {
|
||||
pub fn new(node: AbstractNode<LayoutView>, range: &Range) -> NodeRange {
|
||||
pub fn new(node: OpaqueNode, range: &Range) -> NodeRange {
|
||||
NodeRange {
|
||||
node: node,
|
||||
range: (*range).clone()
|
||||
|
@ -37,10 +37,12 @@ struct ElementMapping {
|
|||
|
||||
impl ElementMapping {
|
||||
pub fn new() -> ElementMapping {
|
||||
ElementMapping { entries: ~[] }
|
||||
ElementMapping {
|
||||
entries: ~[],
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_mapping(&mut self, node: AbstractNode<LayoutView>, range: &Range) {
|
||||
pub fn add_mapping(&mut self, node: OpaqueNode, range: &Range) {
|
||||
self.entries.push(NodeRange::new(node, range))
|
||||
}
|
||||
|
||||
|
@ -74,7 +76,7 @@ impl ElementMapping {
|
|||
|
||||
debug!("--- Elem ranges before repair: ---");
|
||||
for (i, nr) in entries.iter().enumerate() {
|
||||
debug!("{:u}: {} --> {:s}", i, nr.range, nr.node.debug_str());
|
||||
debug!("{:u}: {} --> {:?}", i, nr.range, nr.node.id());
|
||||
}
|
||||
debug!("----------------------------------");
|
||||
|
||||
|
@ -116,7 +118,7 @@ impl ElementMapping {
|
|||
}
|
||||
debug!("--- Elem ranges after repair: ---");
|
||||
for (i, nr) in entries.iter().enumerate() {
|
||||
debug!("{:u}: {} --> {:s}", i, nr.range, nr.node.debug_str());
|
||||
debug!("{:u}: {} --> {:?}", i, nr.range, nr.node.id());
|
||||
}
|
||||
debug!("----------------------------------");
|
||||
}
|
||||
|
@ -213,5 +215,12 @@ impl OpaqueNode {
|
|||
pub unsafe fn to_node<T>(&self) -> AbstractNode<T> {
|
||||
cast::transmute(**self)
|
||||
}
|
||||
|
||||
/// Returns the address of this node, for debugging purposes.
|
||||
pub fn id(&self) -> uintptr_t {
|
||||
unsafe {
|
||||
cast::transmute_copy(self)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue