auto merge of #2236 : Ms2ger/servo/Vec, r=jdm

I'd rather do this before it turns out that a rust upgrade removed `~[T]` behind our back.
This commit is contained in:
bors-servo 2014-04-28 17:10:41 -04:00
commit 77d9f72947
25 changed files with 102 additions and 106 deletions

View file

@ -754,7 +754,7 @@ impl LayoutTask {
ContentBoxesQuery(node, reply_chan) => { ContentBoxesQuery(node, reply_chan) => {
let node: OpaqueNode = OpaqueNodeMethods::from_script_node(node); let node: OpaqueNode = OpaqueNodeMethods::from_script_node(node);
fn add_boxes_for_node(accumulator: &mut ~[Rect<Au>], fn add_boxes_for_node(accumulator: &mut Vec<Rect<Au>>,
mut iter: DisplayItemIterator, mut iter: DisplayItemIterator,
node: OpaqueNode) { node: OpaqueNode) {
for item in iter { for item in iter {
@ -765,7 +765,7 @@ impl LayoutTask {
} }
} }
let mut boxes = ~[]; let mut boxes = vec!();
match self.display_list { match self.display_list {
None => fail!("no display list!"), None => fail!("no display list!"),
Some(ref display_list) => { Some(ref display_list) => {
@ -830,7 +830,7 @@ impl LayoutTask {
fn mouse_over_test(x: Au, fn mouse_over_test(x: Au,
y: Au, y: Au,
list: &[DisplayItem], list: &[DisplayItem],
result: &mut ~[UntrustedNodeAddress]) { result: &mut Vec<UntrustedNodeAddress>) {
for item in list.rev_iter() { for item in list.rev_iter() {
match *item { match *item {
ClipDisplayItemClass(ref cc) => { ClipDisplayItemClass(ref cc) => {
@ -856,7 +856,7 @@ impl LayoutTask {
} }
} }
let mut mouse_over_list:~[UntrustedNodeAddress] = ~[]; let mut mouse_over_list: Vec<UntrustedNodeAddress> = vec!();
let (x, y) = (Au::from_frac_px(point.x as f64), let (x, y) = (Au::from_frac_px(point.x as f64),
Au::from_frac_px(point.y as f64)); Au::from_frac_px(point.y as f64));
match self.display_list { match self.display_list {

View file

@ -53,14 +53,16 @@ fn load(url: Url, start_chan: Sender<LoadResponse>) {
progress_chan.send(Done(Err(()))); progress_chan.send(Done(Err(())));
} }
Ok(data) => { Ok(data) => {
progress_chan.send(Payload(data)); let data: ~[u8] = data;
progress_chan.send(Payload(data.move_iter().collect()));
progress_chan.send(Done(Ok(()))); progress_chan.send(Done(Ok(())));
} }
} }
} else { } else {
// FIXME: Since the %-decoded URL is already a str, we can't // FIXME: Since the %-decoded URL is already a str, we can't
// handle UTF8-incompatible encodings. // handle UTF8-incompatible encodings.
progress_chan.send(Payload(parts[1].as_bytes().into_owned())); let bytes: &[u8] = parts[1].as_bytes();
progress_chan.send(Payload(bytes.iter().map(|&x| x).collect()));
progress_chan.send(Done(Ok(()))); progress_chan.send(Done(Ok(())));
} }
} }
@ -69,7 +71,7 @@ fn load(url: Url, start_chan: Sender<LoadResponse>) {
fn assert_parse(url: &'static str, fn assert_parse(url: &'static str,
content_type: Option<(~str, ~str)>, content_type: Option<(~str, ~str)>,
charset: Option<~str>, charset: Option<~str>,
data: Option<~[u8]>) { data: Option<Vec<u8>>) {
use std::from_str::FromStr; use std::from_str::FromStr;
use std::comm; use std::comm;
@ -100,35 +102,35 @@ fn empty_invalid() {
#[test] #[test]
fn plain() { fn plain() {
assert_parse("data:,hello%20world", None, None, Some(bytes!("hello world").into_owned())); assert_parse("data:,hello%20world", None, None, Some(bytes!("hello world").iter().map(|&x| x).collect()));
} }
#[test] #[test]
fn plain_ct() { fn plain_ct() {
assert_parse("data:text/plain,hello", assert_parse("data:text/plain,hello",
Some((~"text", ~"plain")), None, Some(bytes!("hello").into_owned())); Some((~"text", ~"plain")), None, Some(bytes!("hello").iter().map(|&x| x).collect()));
} }
#[test] #[test]
fn plain_charset() { fn plain_charset() {
assert_parse("data:text/plain;charset=latin1,hello", assert_parse("data:text/plain;charset=latin1,hello",
Some((~"text", ~"plain")), Some(~"latin1"), Some(bytes!("hello").into_owned())); Some((~"text", ~"plain")), Some(~"latin1"), Some(bytes!("hello").iter().map(|&x| x).collect()));
} }
#[test] #[test]
fn base64() { fn base64() {
assert_parse("data:;base64,C62+7w==", None, None, Some(~[0x0B, 0xAD, 0xBE, 0xEF])); assert_parse("data:;base64,C62+7w==", None, None, Some(vec!(0x0B, 0xAD, 0xBE, 0xEF)));
} }
#[test] #[test]
fn base64_ct() { fn base64_ct() {
assert_parse("data:application/octet-stream;base64,C62+7w==", assert_parse("data:application/octet-stream;base64,C62+7w==",
Some((~"application", ~"octet-stream")), None, Some(~[0x0B, 0xAD, 0xBE, 0xEF])); Some((~"application", ~"octet-stream")), None, Some(vec!(0x0B, 0xAD, 0xBE, 0xEF)));
} }
#[test] #[test]
fn base64_charset() { fn base64_charset() {
assert_parse("data:text/plain;charset=koi8-r;base64,8PLl9+XkIO3l5Pfl5A==", assert_parse("data:text/plain;charset=koi8-r;base64,8PLl9+XkIO3l5Pfl5A==",
Some((~"text", ~"plain")), Some(~"koi8-r"), Some((~"text", ~"plain")), Some(~"koi8-r"),
Some(~[0xF0, 0xF2, 0xE5, 0xF7, 0xE5, 0xE4, 0x20, 0xED, 0xE5, 0xE4, 0xF7, 0xE5, 0xE4])); Some(vec!(0xF0, 0xF2, 0xE5, 0xF7, 0xE5, 0xE4, 0x20, 0xED, 0xE5, 0xE4, 0xF7, 0xE5, 0xE4)));
} }

View file

@ -16,7 +16,7 @@ fn read_all(reader: &mut io::Stream, progress_chan: &Sender<ProgressMsg>)
loop { loop {
let mut buf = Vec::new(); let mut buf = Vec::new();
match reader.push_exact(&mut buf, READ_SIZE) { match reader.push_exact(&mut buf, READ_SIZE) {
Ok(_) => progress_chan.send(Payload(buf.iter().map(|&x| x).collect())), Ok(_) => progress_chan.send(Payload(buf)),
Err(e) => match e.kind { Err(e) => match e.kind {
io::EndOfFile => return Ok(()), io::EndOfFile => return Ok(()),
_ => return Err(()), _ => return Err(()),

View file

@ -104,7 +104,8 @@ fn load(mut url: Url, start_chan: Sender<LoadResponse>) {
match response.read(buf) { match response.read(buf) {
Ok(len) => { Ok(len) => {
unsafe { buf.set_len(len); } unsafe { buf.set_len(len); }
progress_chan.send(Payload(buf)); let buf: ~[u8] = buf;
progress_chan.send(Payload(buf.move_iter().collect()));
} }
Err(_) => { Err(_) => {
progress_chan.send(Done(Ok(()))); progress_chan.send(Done(Ok(())));

View file

@ -21,8 +21,8 @@ pub fn Image(width: u32, height: u32, color_type: png::ColorType, data: ~[u8]) -
static TEST_IMAGE: &'static [u8] = include_bin!("test.jpeg"); static TEST_IMAGE: &'static [u8] = include_bin!("test.jpeg");
pub fn test_image_bin() -> ~[u8] { pub fn test_image_bin() -> Vec<u8> {
TEST_IMAGE.into_owned() TEST_IMAGE.iter().map(|&x| x).collect()
} }
// TODO(pcwalton): Speed up with SIMD, or better yet, find some way to not do this. // TODO(pcwalton): Speed up with SIMD, or better yet, find some way to not do this.

View file

@ -491,7 +491,7 @@ fn load_image_data(url: Url, resource_task: ResourceTask) -> Result<~[u8], ()> {
loop { loop {
match progress_port.recv() { match progress_port.recv() {
resource_task::Payload(data) => { resource_task::Payload(data) => {
image_data.push_all(data); image_data.push_all(data.as_slice());
} }
resource_task::Done(result::Ok(..)) => { resource_task::Done(result::Ok(..)) => {
return Ok(image_data); return Ok(image_data);
@ -554,7 +554,7 @@ mod tests {
struct SendBogusImage; struct SendBogusImage;
impl Closure for SendBogusImage { impl Closure for SendBogusImage {
fn invoke(&self, response: Sender<resource_task::ProgressMsg>) { fn invoke(&self, response: Sender<resource_task::ProgressMsg>) {
response.send(resource_task::Payload(~[])); response.send(resource_task::Payload(vec!()));
response.send(resource_task::Done(Ok(()))); response.send(resource_task::Done(Ok(())));
} }
} }

View file

@ -78,7 +78,7 @@ pub struct LoadResponse {
#[deriving(Eq,Show)] #[deriving(Eq,Show)]
pub enum ProgressMsg { pub enum ProgressMsg {
/// Binary data - there may be multiple of these /// Binary data - there may be multiple of these
Payload(~[u8]), Payload(Vec<u8>),
/// Indicates loading is complete, either successfully or not /// Indicates loading is complete, either successfully or not
Done(Result<(), ()>) Done(Result<(), ()>)
} }
@ -104,7 +104,7 @@ pub fn load_whole_resource(resource_task: &ResourceTask, url: Url)
let mut buf = ~[]; let mut buf = ~[];
loop { loop {
match response.progress_port.recv() { match response.progress_port.recv() {
Payload(data) => buf.push_all(data), Payload(data) => buf.push_all(data.as_slice()),
Done(Ok(())) => return Ok((response.metadata, buf)), Done(Ok(())) => return Ok((response.metadata, buf)),
Done(Err(e)) => return Err(e) Done(Err(e)) => return Err(e)
} }
@ -228,7 +228,7 @@ static snicklefritz_payload: [u8, ..3] = [1, 2, 3];
fn snicklefritz_loader_factory() -> LoaderTask { fn snicklefritz_loader_factory() -> LoaderTask {
let f: LoaderTask = proc(url: Url, start_chan: Sender<LoadResponse>) { let f: LoaderTask = proc(url: Url, start_chan: Sender<LoadResponse>) {
let progress_chan = start_sending(start_chan, Metadata::default(url)); let progress_chan = start_sending(start_chan, Metadata::default(url));
progress_chan.send(Payload(snicklefritz_payload.into_owned())); progress_chan.send(Payload(Vec::from_slice(snicklefritz_payload)));
progress_chan.send(Done(Ok(()))); progress_chan.send(Done(Ok(())));
}; };
f f
@ -244,7 +244,7 @@ fn should_delegate_to_scheme_loader() {
let response = start.recv(); let response = start.recv();
let progress = response.progress_port; let progress = response.progress_port;
assert!(progress.recv() == Payload(snicklefritz_payload.into_owned())); assert!(progress.recv() == Payload(Vec::from_slice(snicklefritz_payload)));
assert!(progress.recv() == Done(Ok(()))); assert!(progress.recv() == Done(Ok(())));
resource_task.send(Exit); resource_task.send(Exit);
} }

View file

@ -35,7 +35,7 @@ impl AttrList {
} }
pub fn Item(&self, index: u32) -> Option<JS<Attr>> { pub fn Item(&self, index: u32) -> Option<JS<Attr>> {
self.owner.get().attrs.get(index as uint).map(|x| x.clone()) self.owner.get().attrs.as_slice().get(index as uint).map(|x| x.clone())
} }
pub fn IndexedGetter(&self, index: u32, found: &mut bool) -> Option<JS<Attr>> { pub fn IndexedGetter(&self, index: u32, found: &mut bool) -> Option<JS<Attr>> {

View file

@ -11,13 +11,13 @@ use dom::window::Window;
#[deriving(Encodable)] #[deriving(Encodable)]
pub struct ClientRectList { pub struct ClientRectList {
pub reflector_: Reflector, pub reflector_: Reflector,
pub rects: ~[JS<ClientRect>], pub rects: Vec<JS<ClientRect>>,
pub window: JS<Window>, pub window: JS<Window>,
} }
impl ClientRectList { impl ClientRectList {
pub fn new_inherited(window: JS<Window>, pub fn new_inherited(window: JS<Window>,
rects: ~[JS<ClientRect>]) -> ClientRectList { rects: Vec<JS<ClientRect>>) -> ClientRectList {
ClientRectList { ClientRectList {
reflector_: Reflector::new(), reflector_: Reflector::new(),
rects: rects, rects: rects,
@ -26,7 +26,7 @@ impl ClientRectList {
} }
pub fn new(window: &JS<Window>, pub fn new(window: &JS<Window>,
rects: ~[JS<ClientRect>]) -> JS<ClientRectList> { rects: Vec<JS<ClientRect>>) -> JS<ClientRectList> {
reflect_dom_object(~ClientRectList::new_inherited(window.clone(), rects), reflect_dom_object(~ClientRectList::new_inherited(window.clone(), rects),
window, ClientRectListBinding::Wrap) window, ClientRectListBinding::Wrap)
} }
@ -37,7 +37,7 @@ impl ClientRectList {
pub fn Item(&self, index: u32) -> Option<JS<ClientRect>> { pub fn Item(&self, index: u32) -> Option<JS<ClientRect>> {
if index < self.rects.len() as u32 { if index < self.rects.len() as u32 {
Some(self.rects[index as uint].clone()) Some(self.rects.get(index as uint).clone())
} else { } else {
None None
} }

View file

@ -58,7 +58,7 @@ pub struct Document {
pub node: Node, pub node: Node,
pub reflector_: Reflector, pub reflector_: Reflector,
pub window: JS<Window>, pub window: JS<Window>,
pub idmap: HashMap<DOMString, ~[JS<Element>]>, pub idmap: HashMap<DOMString, Vec<JS<Element>>>,
pub implementation: Option<JS<DOMImplementation>>, pub implementation: Option<JS<DOMImplementation>>,
pub content_type: DOMString, pub content_type: DOMString,
pub encoding_name: DOMString, pub encoding_name: DOMString,
@ -232,11 +232,9 @@ impl Document {
// http://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid // http://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid
pub fn GetElementById(&self, id: DOMString) -> Option<JS<Element>> { pub fn GetElementById(&self, id: DOMString) -> Option<JS<Element>> {
// TODO: "in tree order, within the context object's tree"
// http://dom.spec.whatwg.org/#dom-document-getelementbyid.
match self.idmap.find_equiv(&id) { match self.idmap.find_equiv(&id) {
None => None, None => None,
Some(ref elements) => Some(elements[0].clone()), Some(ref elements) => Some(elements.get(0).clone()),
} }
} }
@ -388,10 +386,9 @@ impl Document {
} }
}); });
}); });
let v: ~[&str] = title.words().collect(); let v: Vec<&str> = title.words().collect();
title = v.connect(" "); let title = v.connect(" ");
title = title.trim().to_owned(); title.trim().to_owned()
title
} }
// http://www.whatwg.org/specs/web-apps/current-work/#document.title // http://www.whatwg.org/specs/web-apps/current-work/#document.title
@ -610,7 +607,7 @@ impl Document {
} }
pub fn createNodeList(&self, callback: |node: &JS<Node>| -> bool) -> JS<NodeList> { pub fn createNodeList(&self, callback: |node: &JS<Node>| -> bool) -> JS<NodeList> {
let mut nodes: ~[JS<Node>] = ~[]; let mut nodes = vec!();
match self.GetDocumentElement() { match self.GetDocumentElement() {
None => {}, None => {},
Some(root) => { Some(root) => {
@ -679,7 +676,7 @@ impl Document {
for node in root.traverse_preorder() { for node in root.traverse_preorder() {
match ElementCast::to(&node) { match ElementCast::to(&node) {
Some(elem) => { Some(elem) => {
if elements[head] == elem { if elements.get(head) == &elem {
head = head + 1; head = head + 1;
} }
if new_node == node || head == elements.len() { if new_node == node || head == elements.len() {
@ -694,6 +691,6 @@ impl Document {
}, },
None => (), None => (),
} }
self.idmap.insert(id, ~[element.clone()]); self.idmap.insert(id, vec!(element.clone()));
} }
} }

View file

@ -36,7 +36,7 @@ pub struct Element {
pub local_name: DOMString, // TODO: This should be an atom, not a DOMString. pub local_name: DOMString, // TODO: This should be an atom, not a DOMString.
pub namespace: Namespace, pub namespace: Namespace,
pub prefix: Option<DOMString>, pub prefix: Option<DOMString>,
pub attrs: ~[JS<Attr>], pub attrs: Vec<JS<Attr>>,
pub style_attribute: Option<style::PropertyDeclarationBlock>, pub style_attribute: Option<style::PropertyDeclarationBlock>,
pub attr_list: Option<JS<AttrList>> pub attr_list: Option<JS<AttrList>>
} }
@ -145,7 +145,7 @@ impl Element {
local_name: local_name, local_name: local_name,
namespace: namespace, namespace: namespace,
prefix: prefix, prefix: prefix,
attrs: ~[], attrs: vec!(),
attr_list: None, attr_list: None,
style_attribute: None, style_attribute: None,
} }
@ -264,7 +264,7 @@ impl AttributeHandlers for JS<Element> {
let idx = self.get().attrs.iter().position(cb); let idx = self.get().attrs.iter().position(cb);
let (mut attr, set_type): (JS<Attr>, AttrSettingType) = match idx { let (mut attr, set_type): (JS<Attr>, AttrSettingType) = match idx {
Some(idx) => { Some(idx) => {
let attr = self.get_mut().attrs[idx].clone(); let attr = self.get_mut().attrs.get(idx).clone();
(attr, ReplacedAttr) (attr, ReplacedAttr)
} }
@ -376,7 +376,7 @@ impl AttributeHandlers for JS<Element> {
None => (), None => (),
Some(idx) => { Some(idx) => {
if namespace == namespace::Null { if namespace == namespace::Null {
let removed_raw_value = self.get().attrs[idx].get().Value(); let removed_raw_value = self.get().attrs.get(idx).get().Value();
vtable_for(&node).before_remove_attr(local_name.clone(), removed_raw_value); vtable_for(&node).before_remove_attr(local_name.clone(), removed_raw_value);
} }
@ -651,8 +651,8 @@ pub fn get_attribute_parts(name: DOMString) -> (Option<~str>, ~str) {
//FIXME: Throw for XML-invalid names //FIXME: Throw for XML-invalid names
//FIXME: Throw for XMLNS-invalid names //FIXME: Throw for XMLNS-invalid names
let (prefix, local_name) = if name.contains(":") { let (prefix, local_name) = if name.contains(":") {
let parts: ~[&str] = name.splitn(':', 1).collect(); let mut parts = name.splitn(':', 1);
(Some(parts[0].to_owned()), parts[1].to_owned()) (Some(parts.next().unwrap().to_owned()), parts.next().unwrap().to_owned())
} else { } else {
(None, name) (None, name)
}; };

View file

@ -24,23 +24,24 @@ pub fn dispatch_event(target: &JS<EventTarget>,
} }
let type_ = event.get().type_.clone(); let type_ = event.get().type_.clone();
let mut chain = ~[];
//TODO: no chain if not participating in a tree //TODO: no chain if not participating in a tree
if target.get().is_node() { let chain: Vec<JS<EventTarget>> = if target.get().is_node() {
let target_node: JS<Node> = NodeCast::to(target).unwrap(); let target_node: JS<Node> = NodeCast::to(target).unwrap();
for ancestor in target_node.ancestors() { target_node.ancestors().map(|ancestor| {
let ancestor_target: JS<EventTarget> = EventTargetCast::from(&ancestor); let ancestor_target: JS<EventTarget> = EventTargetCast::from(&ancestor);
chain.push(ancestor_target); ancestor_target
} }).collect()
} } else {
vec!()
};
event.get_mut().phase = PhaseCapturing; event.get_mut().phase = PhaseCapturing;
//FIXME: The "callback this value" should be currentTarget //FIXME: The "callback this value" should be currentTarget
/* capturing */ /* capturing */
for cur_target in chain.rev_iter() { for cur_target in chain.as_slice().rev_iter() {
let stopped = match cur_target.get().get_listeners_for(type_, Capturing) { let stopped = match cur_target.get().get_listeners_for(type_, Capturing) {
Some(listeners) => { Some(listeners) => {
event.get_mut().current_target = Some(cur_target.clone()); event.get_mut().current_target = Some(cur_target.clone());

View file

@ -37,7 +37,7 @@ pub struct EventListenerEntry {
pub struct EventTarget { pub struct EventTarget {
pub type_id: EventTargetTypeId, pub type_id: EventTargetTypeId,
pub reflector_: Reflector, pub reflector_: Reflector,
pub handlers: HashMap<DOMString, ~[EventListenerEntry]>, pub handlers: HashMap<DOMString, Vec<EventListenerEntry>>,
} }
impl EventTarget { impl EventTarget {
@ -49,14 +49,14 @@ impl EventTarget {
} }
} }
pub fn get_listeners(&self, type_: &str) -> Option<~[EventListener]> { pub fn get_listeners(&self, type_: &str) -> Option<Vec<EventListener>> {
self.handlers.find_equiv(&type_).map(|listeners| { self.handlers.find_equiv(&type_).map(|listeners| {
listeners.iter().map(|entry| entry.listener).collect() listeners.iter().map(|entry| entry.listener).collect()
}) })
} }
pub fn get_listeners_for(&self, type_: &str, desired_phase: ListenerPhase) pub fn get_listeners_for(&self, type_: &str, desired_phase: ListenerPhase)
-> Option<~[EventListener]> { -> Option<Vec<EventListener>> {
self.handlers.find_equiv(&type_).map(|listeners| { self.handlers.find_equiv(&type_).map(|listeners| {
let filtered = listeners.iter().filter(|entry| entry.phase == desired_phase); let filtered = listeners.iter().filter(|entry| entry.phase == desired_phase);
filtered.map(|entry| entry.listener).collect() filtered.map(|entry| entry.listener).collect()
@ -68,13 +68,13 @@ impl EventTarget {
listener: Option<EventListener>, listener: Option<EventListener>,
capture: bool) { capture: bool) {
for &listener in listener.iter() { for &listener in listener.iter() {
let entry = self.handlers.find_or_insert_with(ty.clone(), |_| ~[]); let entry = self.handlers.find_or_insert_with(ty.clone(), |_| vec!());
let phase = if capture { Capturing } else { Bubbling }; let phase = if capture { Capturing } else { Bubbling };
let new_entry = EventListenerEntry { let new_entry = EventListenerEntry {
phase: phase, phase: phase,
listener: listener listener: listener
}; };
if entry.position_elem(&new_entry).is_none() { if entry.as_slice().position_elem(&new_entry).is_none() {
entry.push(new_entry); entry.push(new_entry);
} }
} }
@ -92,7 +92,7 @@ impl EventTarget {
phase: phase, phase: phase,
listener: listener listener: listener
}; };
let position = entry.position_elem(&old_entry); let position = entry.as_slice().position_elem(&old_entry);
for &position in position.iter() { for &position in position.iter() {
entry.remove(position); entry.remove(position);
} }

View file

@ -26,7 +26,7 @@ impl<S: Encoder<E>, E> Encodable<S, E> for ~CollectionFilter {
#[deriving(Encodable)] #[deriving(Encodable)]
pub enum CollectionTypeId { pub enum CollectionTypeId {
Static(~[JS<Element>]), Static(Vec<JS<Element>>),
Live(JS<Node>, ~CollectionFilter) Live(JS<Node>, ~CollectionFilter)
} }
@ -94,7 +94,7 @@ impl HTMLCollection {
pub fn by_class_name(window: &JS<Window>, root: &JS<Node>, classes: DOMString) pub fn by_class_name(window: &JS<Window>, root: &JS<Node>, classes: DOMString)
-> JS<HTMLCollection> { -> JS<HTMLCollection> {
struct ClassNameFilter { struct ClassNameFilter {
classes: ~[DOMString] classes: Vec<DOMString>
} }
impl CollectionFilter for ClassNameFilter { impl CollectionFilter for ClassNameFilter {
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool { fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
@ -135,6 +135,7 @@ impl HTMLCollection {
pub fn Item(&self, index: u32) -> Option<JS<Element>> { pub fn Item(&self, index: u32) -> Option<JS<Element>> {
match self.collection { match self.collection {
Static(ref elems) => elems Static(ref elems) => elems
.as_slice()
.get(index as uint) .get(index as uint)
.map(|elem| elem.clone()), .map(|elem| elem.clone()),
Live(ref root, ref filter) => root.traverse_preorder() Live(ref root, ref filter) => root.traverse_preorder()

View file

@ -118,7 +118,7 @@ impl HTMLFormElement {
// FIXME: https://github.com/mozilla/servo/issues/1844 // FIXME: https://github.com/mozilla/servo/issues/1844
let doc = self.htmlelement.element.node.owner_doc(); let doc = self.htmlelement.element.node.owner_doc();
let doc = doc.get(); let doc = doc.get();
HTMLCollection::new(&doc.window, Static(~[])) HTMLCollection::new(&doc.window, Static(vec!()))
} }
pub fn Length(&self) -> i32 { pub fn Length(&self) -> i32 {

View file

@ -54,6 +54,6 @@ impl HTMLMapElement {
// FIXME: https://github.com/mozilla/servo/issues/1845 // FIXME: https://github.com/mozilla/servo/issues/1845
let doc = self.htmlelement.element.node.owner_doc(); let doc = self.htmlelement.element.node.owner_doc();
let doc = doc.get(); let doc = doc.get();
HTMLCollection::new(&doc.window, Static(~[])) HTMLCollection::new(&doc.window, Static(vec!()))
} }
} }

View file

@ -21,7 +21,7 @@ use dom::text::Text;
pub fn serialize(iterator: &mut NodeIterator) -> ~str { pub fn serialize(iterator: &mut NodeIterator) -> ~str {
let mut html = ~""; let mut html = ~"";
let mut open_elements: ~[~str] = ~[]; let mut open_elements: Vec<~str> = vec!();
for node in *iterator { for node in *iterator {
while open_elements.len() > iterator.depth { while open_elements.len() > iterator.depth {
@ -93,7 +93,7 @@ fn serialize_doctype(doctype: &JS<DocumentType>) -> ~str {
~"<!DOCTYPE" + doctype.get().name + ">" ~"<!DOCTYPE" + doctype.get().name + ">"
} }
fn serialize_elem(elem: &JS<Element>, open_elements: &mut ~[~str]) -> ~str { fn serialize_elem(elem: &JS<Element>, open_elements: &mut Vec<~str>) -> ~str {
let mut rv = ~"<" + elem.get().local_name; let mut rv = ~"<" + elem.get().local_name;
for attr in elem.get().attrs.iter() { for attr in elem.get().attrs.iter() {
rv.push_str(serialize_attr(attr)); rv.push_str(serialize_attr(attr));

View file

@ -288,7 +288,7 @@ pub trait NodeHelpers {
fn to_trusted_node_address(&self) -> TrustedNodeAddress; fn to_trusted_node_address(&self) -> TrustedNodeAddress;
fn get_bounding_content_box(&self) -> Rect<Au>; fn get_bounding_content_box(&self) -> Rect<Au>;
fn get_content_boxes(&self) -> ~[Rect<Au>]; fn get_content_boxes(&self) -> Vec<Rect<Au>>;
} }
impl NodeHelpers for JS<Node> { impl NodeHelpers for JS<Node> {
@ -517,14 +517,14 @@ impl NodeHelpers for JS<Node> {
/// Iterates over this node and all its descendants, in preorder. /// Iterates over this node and all its descendants, in preorder.
fn traverse_preorder(&self) -> TreeIterator { fn traverse_preorder(&self) -> TreeIterator {
let mut nodes = ~[]; let mut nodes = vec!();
gather_abstract_nodes(self, &mut nodes, false); gather_abstract_nodes(self, &mut nodes, false);
TreeIterator::new(nodes) TreeIterator::new(nodes)
} }
/// Iterates over this node and all its descendants, in postorder. /// Iterates over this node and all its descendants, in postorder.
fn sequential_traverse_postorder(&self) -> TreeIterator { fn sequential_traverse_postorder(&self) -> TreeIterator {
let mut nodes = ~[]; let mut nodes = vec!();
gather_abstract_nodes(self, &mut nodes, true); gather_abstract_nodes(self, &mut nodes, true);
TreeIterator::new(nodes) TreeIterator::new(nodes)
} }
@ -581,7 +581,7 @@ impl NodeHelpers for JS<Node> {
rect rect
} }
fn get_content_boxes(&self) -> ~[Rect<Au>] { fn get_content_boxes(&self) -> Vec<Rect<Au>> {
let window = window_from_node(self); let window = window_from_node(self);
let page = window.get().page(); let page = window.get().page();
let (chan, port) = channel(); let (chan, port) = channel();
@ -633,12 +633,12 @@ impl Iterator<JS<Node>> for AncestorIterator {
// FIXME: Do this without precomputing a vector of refs. // FIXME: Do this without precomputing a vector of refs.
// Easy for preorder; harder for postorder. // Easy for preorder; harder for postorder.
pub struct TreeIterator { pub struct TreeIterator {
nodes: ~[JS<Node>], nodes: Vec<JS<Node>>,
index: uint, index: uint,
} }
impl TreeIterator { impl TreeIterator {
fn new(nodes: ~[JS<Node>]) -> TreeIterator { fn new(nodes: Vec<JS<Node>>) -> TreeIterator {
TreeIterator { TreeIterator {
nodes: nodes, nodes: nodes,
index: 0, index: 0,
@ -651,7 +651,7 @@ impl Iterator<JS<Node>> for TreeIterator {
if self.index >= self.nodes.len() { if self.index >= self.nodes.len() {
None None
} else { } else {
let v = self.nodes[self.index].clone(); let v = self.nodes.get(self.index).clone();
self.index += 1; self.index += 1;
Some(v) Some(v)
} }
@ -735,7 +735,7 @@ impl Iterator<JS<Node>> for NodeIterator {
} }
} }
fn gather_abstract_nodes(cur: &JS<Node>, refs: &mut ~[JS<Node>], postorder: bool) { fn gather_abstract_nodes(cur: &JS<Node>, refs: &mut Vec<JS<Node>>, postorder: bool) {
if !postorder { if !postorder {
refs.push(cur.clone()); refs.push(cur.clone());
} }
@ -1201,7 +1201,7 @@ impl Node {
// Step 4. // Step 4.
let mut nodes = match node.type_id() { let mut nodes = match node.type_id() {
DocumentFragmentNodeTypeId => node.children().collect(), DocumentFragmentNodeTypeId => node.children().collect(),
_ => ~[node.clone()], _ => vec!(node.clone()),
}; };
// Step 5: DocumentFragment, mutation records. // Step 5: DocumentFragment, mutation records.
@ -1242,14 +1242,14 @@ impl Node {
} }
// Step 2. // Step 2.
let removedNodes: ~[JS<Node>] = parent.children().collect(); let removedNodes: Vec<JS<Node>> = parent.children().collect();
// Step 3. // Step 3.
let addedNodes = match node { let addedNodes = match node {
None => ~[], None => vec!(),
Some(ref node) => match node.type_id() { Some(ref node) => match node.type_id() {
DocumentFragmentNodeTypeId => node.children().collect(), DocumentFragmentNodeTypeId => node.children().collect(),
_ => ~[node.clone()], _ => vec!(node.clone()),
}, },
}; };

View file

@ -10,7 +10,7 @@ use dom::window::Window;
#[deriving(Encodable)] #[deriving(Encodable)]
pub enum NodeListType { pub enum NodeListType {
Simple(~[JS<Node>]), Simple(Vec<JS<Node>>),
Children(JS<Node>) Children(JS<Node>)
} }
@ -37,7 +37,7 @@ impl NodeList {
window, NodeListBinding::Wrap) window, NodeListBinding::Wrap)
} }
pub fn new_simple_list(window: &JS<Window>, elements: ~[JS<Node>]) -> JS<NodeList> { pub fn new_simple_list(window: &JS<Window>, elements: Vec<JS<Node>>) -> JS<NodeList> {
NodeList::new(window, Simple(elements)) NodeList::new(window, Simple(elements))
} }
@ -55,7 +55,7 @@ impl NodeList {
pub fn Item(&self, index: u32) -> Option<JS<Node>> { pub fn Item(&self, index: u32) -> Option<JS<Node>> {
match self.list_type { match self.list_type {
_ if index >= self.Length() => None, _ if index >= self.Length() => None,
Simple(ref elems) => Some(elems[index as uint].clone()), Simple(ref elems) => Some(elems.get(index as uint).clone()),
Children(ref node) => node.children().nth(index as uint) Children(ref node) => node.children().nth(index as uint)
} }
} }

View file

@ -111,7 +111,6 @@ pub struct TimerData {
pub handle: i32, pub handle: i32,
pub is_interval: bool, pub is_interval: bool,
pub funval: JSVal, pub funval: JSVal,
pub args: ~[JSVal],
} }
impl Window { impl Window {
@ -248,7 +247,6 @@ impl Window {
handle: handle, handle: handle,
is_interval: is_interval, is_interval: is_interval,
funval: callback, funval: callback,
args: ~[],
}; };
let ScriptChan(ref chan) = chan; let ScriptChan(ref chan) = chan;
chan.send(FireTimerMsg(page_id, data)); chan.send(FireTimerMsg(page_id, data));

View file

@ -62,8 +62,8 @@ struct ProgressMsgPortIterator {
progress_port: Receiver<ProgressMsg> progress_port: Receiver<ProgressMsg>
} }
impl Iterator<~[u8]> for ProgressMsgPortIterator { impl Iterator<Vec<u8>> for ProgressMsgPortIterator {
fn next(&mut self) -> Option<~[u8]> { fn next(&mut self) -> Option<Vec<u8>> {
match self.progress_port.recv() { match self.progress_port.recv() {
Payload(data) => Some(data), Payload(data) => Some(data),
Done(..) => None Done(..) => None

View file

@ -50,7 +50,7 @@ pub struct JSFile {
pub url: Url pub url: Url
} }
pub type JSResult = ~[JSFile]; pub type JSResult = Vec<JSFile>;
enum CSSMessage { enum CSSMessage {
CSSTaskNewFile(StylesheetProvenance), CSSTaskNewFile(StylesheetProvenance),
@ -105,7 +105,7 @@ spawned, collates them, and sends them to the given result channel.
*/ */
fn css_link_listener(to_parent: Sender<HtmlDiscoveryMessage>, fn css_link_listener(to_parent: Sender<HtmlDiscoveryMessage>,
from_parent: Receiver<CSSMessage>) { from_parent: Receiver<CSSMessage>) {
let mut result_vec = ~[]; let mut result_vec = vec!();
loop { loop {
match from_parent.recv_opt() { match from_parent.recv_opt() {
@ -128,7 +128,7 @@ fn css_link_listener(to_parent: Sender<HtmlDiscoveryMessage>,
fn js_script_listener(to_parent: Sender<HtmlDiscoveryMessage>, fn js_script_listener(to_parent: Sender<HtmlDiscoveryMessage>,
from_parent: Receiver<JSMessage>, from_parent: Receiver<JSMessage>,
resource_task: ResourceTask) { resource_task: ResourceTask) {
let mut result_vec = ~[]; let mut result_vec = vec!();
loop { loop {
match from_parent.recv_opt() { match from_parent.recv_opt() {
@ -465,7 +465,7 @@ pub fn parse_html(page: &Page,
js_chan2.send(JSTaskNewFile(new_url)); js_chan2.send(JSTaskNewFile(new_url));
} }
None => { None => {
let mut data = ~[]; let mut data = vec!();
let scriptnode: JS<Node> = NodeCast::from(&script); let scriptnode: JS<Node> = NodeCast::from(&script);
debug!("iterating over children {:?}", scriptnode.first_child()); debug!("iterating over children {:?}", scriptnode.first_child());
for child in scriptnode.children() { for child in scriptnode.children() {
@ -493,7 +493,7 @@ pub fn parse_html(page: &Page,
match load_response.progress_port.recv() { match load_response.progress_port.recv() {
Payload(data) => { Payload(data) => {
debug!("received data"); debug!("received data");
parser.parse_chunk(data); parser.parse_chunk(data.as_slice());
} }
Done(Err(..)) => { Done(Err(..)) => {
fail!("Failed to load page URL {:s}", url.to_str()); fail!("Failed to load page URL {:s}", url.to_str());

View file

@ -83,9 +83,9 @@ impl<S: Encoder<E>, E> Encodable<S, E> for TrustedNodeAddress {
pub type UntrustedNodeAddress = *c_void; pub type UntrustedNodeAddress = *c_void;
pub struct ContentBoxResponse(pub Rect<Au>); pub struct ContentBoxResponse(pub Rect<Au>);
pub struct ContentBoxesResponse(pub ~[Rect<Au>]); pub struct ContentBoxesResponse(pub Vec<Rect<Au>>);
pub struct HitTestResponse(pub UntrustedNodeAddress); pub struct HitTestResponse(pub UntrustedNodeAddress);
pub struct MouseOverResponse(pub ~[UntrustedNodeAddress]); pub struct MouseOverResponse(pub Vec<UntrustedNodeAddress>);
/// Determines which part of the /// Determines which part of the
#[deriving(Eq, Ord, TotalEq, TotalOrd, Encodable)] #[deriving(Eq, Ord, TotalEq, TotalOrd, Encodable)]

View file

@ -151,11 +151,11 @@ pub struct Page {
pub struct PageTree { pub struct PageTree {
pub page: Rc<Page>, pub page: Rc<Page>,
pub inner: ~[PageTree], pub inner: Vec<PageTree>,
} }
pub struct PageTreeIterator<'a> { pub struct PageTreeIterator<'a> {
stack: ~[&'a mut PageTree], stack: Vec<&'a mut PageTree>,
} }
impl PageTree { impl PageTree {
@ -175,7 +175,7 @@ impl PageTree {
fragment_node: Traceable::new(RefCell::new(None)), fragment_node: Traceable::new(RefCell::new(None)),
last_reflow_id: Traceable::new(RefCell::new(0)), last_reflow_id: Traceable::new(RefCell::new(0)),
}), }),
inner: ~[], inner: vec!(),
} }
} }
@ -198,7 +198,7 @@ impl PageTree {
pub fn iter<'a>(&'a mut self) -> PageTreeIterator<'a> { pub fn iter<'a>(&'a mut self) -> PageTreeIterator<'a> {
PageTreeIterator { PageTreeIterator {
stack: ~[self], stack: vec!(self),
} }
} }
@ -459,7 +459,7 @@ impl Page {
address address
} }
pub fn get_nodes_under_mouse(&self, point: &Point2D<f32>) -> Option<~[UntrustedNodeAddress]> { pub fn get_nodes_under_mouse(&self, point: &Point2D<f32>) -> Option<Vec<UntrustedNodeAddress>> {
let frame = self.frame(); let frame = self.frame();
let document = frame.get_ref().document.clone(); let document = frame.get_ref().document.clone();
let root = document.get().GetDocumentElement(); let root = document.get().GetDocumentElement();
@ -524,7 +524,7 @@ pub struct ScriptTask {
/// The JavaScript runtime. /// The JavaScript runtime.
pub js_runtime: js::rust::rt, pub js_runtime: js::rust::rt,
pub mouse_over_targets: RefCell<Option<~[JS<Node>]>> pub mouse_over_targets: RefCell<Option<Vec<JS<Node>>>>
} }
/// In the event of task failure, all data on the stack runs its destructor. However, there /// In the event of task failure, all data on the stack runs its destructor. However, there
@ -647,7 +647,7 @@ impl ScriptTask {
fn handle_msgs(&self) -> bool { fn handle_msgs(&self) -> bool {
// Handle pending resize events. // Handle pending resize events.
// Gather them first to avoid a double mut borrow on self. // Gather them first to avoid a double mut borrow on self.
let mut resizes = ~[]; let mut resizes = vec!();
{ {
let mut page_tree = self.page_tree.borrow_mut(); let mut page_tree = self.page_tree.borrow_mut();
@ -669,7 +669,7 @@ impl ScriptTask {
} }
// Store new resizes, and gather all other events. // Store new resizes, and gather all other events.
let mut sequential = ~[]; let mut sequential = vec!();
// Receive at least one message so we don't spinloop. // Receive at least one message so we don't spinloop.
let mut event = self.port.recv(); let mut event = self.port.recv();
@ -751,11 +751,7 @@ impl ScriptTask {
window.get_mut().active_timers.remove(&timer_data.handle); window.get_mut().active_timers.remove(&timer_data.handle);
} }
let this_value = if timer_data.args.len() > 0 { let this_value = window.reflector().get_jsobject();
fail!("NYI")
} else {
window.reflector().get_jsobject()
};
// TODO: Support extra arguments. This requires passing a `*JSVal` array as `argv`. // TODO: Support extra arguments. This requires passing a `*JSVal` array as `argv`.
let rval = NullValue(); let rval = NullValue();
@ -1105,7 +1101,7 @@ impl ScriptTask {
match page.get_nodes_under_mouse(&point) { match page.get_nodes_under_mouse(&point) {
Some(node_address) => { Some(node_address) => {
let mut target_list: ~[JS<Node>] = ~[]; let mut target_list = vec!();
let mut target_compare = false; let mut target_compare = false;
let mouse_over_targets = &mut *self.mouse_over_targets.borrow_mut(); let mouse_over_targets = &mut *self.mouse_over_targets.borrow_mut();

View file

@ -41,13 +41,13 @@ pub struct StyleRule {
impl Stylesheet { impl Stylesheet {
pub fn from_bytes_iter<I: Iterator<~[u8]>>( pub fn from_bytes_iter<I: Iterator<Vec<u8>>>(
mut input: I, base_url: Url, protocol_encoding_label: Option<&str>, mut input: I, base_url: Url, protocol_encoding_label: Option<&str>,
environment_encoding: Option<EncodingRef>) -> Stylesheet { environment_encoding: Option<EncodingRef>) -> Stylesheet {
let mut bytes = ~[]; let mut bytes = ~[];
// TODO: incremental decoding and tokinization/parsing // TODO: incremental decoding and tokinization/parsing
for chunk in input { for chunk in input {
bytes.push_all(chunk) bytes.push_all(chunk.as_slice())
} }
Stylesheet::from_bytes(bytes, base_url, protocol_encoding_label, environment_encoding) Stylesheet::from_bytes(bytes, base_url, protocol_encoding_label, environment_encoding)
} }