From 230ac2dd17210478734f9f9d67017f226c8f8633 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Sun, 18 Nov 2012 18:59:05 -0800 Subject: [PATCH] css, sub: Don't copy so much --- src/rust-css | 2 +- src/rust-wapcaplet | 2 +- src/servo/css/select_handler.rs | 24 ++++++++++++++---------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/rust-css b/src/rust-css index 679e6319ab7..b1ac22d98de 160000 --- a/src/rust-css +++ b/src/rust-css @@ -1 +1 @@ -Subproject commit 679e6319ab771b9b2a676f4be39e72aa7a8e7b8e +Subproject commit b1ac22d98de7c6e622709ebd3ae2bd63a762b2b2 diff --git a/src/rust-wapcaplet b/src/rust-wapcaplet index b23d902eccd..d7b9920a1cd 160000 --- a/src/rust-wapcaplet +++ b/src/rust-wapcaplet @@ -1 +1 @@ -Subproject commit b23d902eccdae25fef9e71e6cc42c8d2b943f2ab +Subproject commit d7b9920a1cd5b3a8ad383051c8ddce500e46ab23 diff --git a/src/servo/css/select_handler.rs b/src/servo/css/select_handler.rs index e3df15afce4..c1f92085731 100644 --- a/src/servo/css/select_handler.rs +++ b/src/servo/css/select_handler.rs @@ -6,17 +6,17 @@ pub struct NodeSelectHandler { node: Node } -fn node_name(data: &NodeData) -> ~str { +fn with_node_name(data: &NodeData, f: &fn(&str) -> R) -> R { match *data.kind { - Element(ref data) => copy data.tag_name, + Element(ref data) => f(data.tag_name), _ => fail ~"attempting to style non-element node" } } impl NodeSelectHandler: SelectHandler { - fn node_name(node: &Node) -> ~str { + fn with_node_name(node: &Node, f: &fn(&str) -> R) -> R { do node.read |data| { - node_name(data) + with_node_name(data, f) } } @@ -25,10 +25,12 @@ impl NodeSelectHandler: SelectHandler { match parent { Some(parent) => { do parent.read |data| { - if name == node_name(data) { - Some(parent) - } else { - None + do with_node_name(data) |node_name| { + if name == node_name { + Some(parent) + } else { + None + } } } } @@ -49,8 +51,10 @@ impl NodeSelectHandler: SelectHandler { Some(parent) => { let mut found = false; do parent.read |data| { - if name == node_name(data) { - found = true; + do with_node_name(data) |node_name| { + if name == node_name { + found = true; + } } } if found {