mirror of
https://github.com/servo/servo.git
synced 2025-06-08 00:23:30 +00:00
Remove some usage of unsafe code in iterator.rs
This commit is contained in:
parent
b08a3e6217
commit
ce3778afcc
1 changed files with 14 additions and 14 deletions
|
@ -13,10 +13,10 @@ use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
|
||||||
use crate::dom::bindings::root::{Dom, DomRoot};
|
use crate::dom::bindings::root::{Dom, DomRoot};
|
||||||
use crate::dom::bindings::trace::{JSTraceable, RootedTraceableBox};
|
use crate::dom::bindings::trace::{JSTraceable, RootedTraceableBox};
|
||||||
use crate::dom::globalscope::GlobalScope;
|
use crate::dom::globalscope::GlobalScope;
|
||||||
use crate::script_runtime::JSContext as SafeJSContext;
|
use crate::script_runtime::JSContext;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
use js::conversions::ToJSValConvertible;
|
use js::conversions::ToJSValConvertible;
|
||||||
use js::jsapi::{Heap, JSContext, JSObject};
|
use js::jsapi::{Heap, JSObject};
|
||||||
use js::jsval::UndefinedValue;
|
use js::jsval::UndefinedValue;
|
||||||
use js::rust::{HandleValue, MutableHandleObject};
|
use js::rust::{HandleValue, MutableHandleObject};
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
@ -63,7 +63,7 @@ impl<T: DomObject + JSTraceable + Iterable> IterableIterator<T> {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
iterable: &T,
|
iterable: &T,
|
||||||
type_: IteratorType,
|
type_: IteratorType,
|
||||||
wrap: unsafe fn(SafeJSContext, &GlobalScope, Box<IterableIterator<T>>) -> DomRoot<Self>,
|
wrap: unsafe fn(JSContext, &GlobalScope, Box<IterableIterator<T>>) -> DomRoot<Self>,
|
||||||
) -> DomRoot<Self> {
|
) -> DomRoot<Self> {
|
||||||
let iterator = Box::new(IterableIterator {
|
let iterator = Box::new(IterableIterator {
|
||||||
reflector: Reflector::new(),
|
reflector: Reflector::new(),
|
||||||
|
@ -76,12 +76,12 @@ impl<T: DomObject + JSTraceable + Iterable> IterableIterator<T> {
|
||||||
|
|
||||||
/// Return the next value from the iterable object.
|
/// Return the next value from the iterable object.
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn Next(&self, cx: SafeJSContext) -> Fallible<NonNull<JSObject>> {
|
pub fn Next(&self, cx: JSContext) -> Fallible<NonNull<JSObject>> {
|
||||||
let index = self.index.get();
|
let index = self.index.get();
|
||||||
rooted!(in(*cx) let mut value = UndefinedValue());
|
rooted!(in(*cx) let mut value = UndefinedValue());
|
||||||
rooted!(in(*cx) let mut rval = ptr::null_mut::<JSObject>());
|
rooted!(in(*cx) let mut rval = ptr::null_mut::<JSObject>());
|
||||||
let result = if index >= self.iterable.get_iterable_length() {
|
let result = if index >= self.iterable.get_iterable_length() {
|
||||||
dict_return(*cx, rval.handle_mut(), true, value.handle())
|
dict_return(cx, rval.handle_mut(), true, value.handle())
|
||||||
} else {
|
} else {
|
||||||
match self.type_ {
|
match self.type_ {
|
||||||
IteratorType::Keys => {
|
IteratorType::Keys => {
|
||||||
|
@ -90,7 +90,7 @@ impl<T: DomObject + JSTraceable + Iterable> IterableIterator<T> {
|
||||||
.get_key_at_index(index)
|
.get_key_at_index(index)
|
||||||
.to_jsval(*cx, value.handle_mut());
|
.to_jsval(*cx, value.handle_mut());
|
||||||
}
|
}
|
||||||
dict_return(*cx, rval.handle_mut(), false, value.handle())
|
dict_return(cx, rval.handle_mut(), false, value.handle())
|
||||||
},
|
},
|
||||||
IteratorType::Values => {
|
IteratorType::Values => {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -98,7 +98,7 @@ impl<T: DomObject + JSTraceable + Iterable> IterableIterator<T> {
|
||||||
.get_value_at_index(index)
|
.get_value_at_index(index)
|
||||||
.to_jsval(*cx, value.handle_mut());
|
.to_jsval(*cx, value.handle_mut());
|
||||||
}
|
}
|
||||||
dict_return(*cx, rval.handle_mut(), false, value.handle())
|
dict_return(cx, rval.handle_mut(), false, value.handle())
|
||||||
},
|
},
|
||||||
IteratorType::Entries => {
|
IteratorType::Entries => {
|
||||||
rooted!(in(*cx) let mut key = UndefinedValue());
|
rooted!(in(*cx) let mut key = UndefinedValue());
|
||||||
|
@ -110,7 +110,7 @@ impl<T: DomObject + JSTraceable + Iterable> IterableIterator<T> {
|
||||||
.get_value_at_index(index)
|
.get_value_at_index(index)
|
||||||
.to_jsval(*cx, value.handle_mut());
|
.to_jsval(*cx, value.handle_mut());
|
||||||
}
|
}
|
||||||
key_and_value_return(*cx, rval.handle_mut(), key.handle(), value.handle())
|
key_and_value_return(cx, rval.handle_mut(), key.handle(), value.handle())
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -120,7 +120,7 @@ impl<T: DomObject + JSTraceable + Iterable> IterableIterator<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dict_return(
|
fn dict_return(
|
||||||
cx: *mut JSContext,
|
cx: JSContext,
|
||||||
mut result: MutableHandleObject,
|
mut result: MutableHandleObject,
|
||||||
done: bool,
|
done: bool,
|
||||||
value: HandleValue,
|
value: HandleValue,
|
||||||
|
@ -128,16 +128,16 @@ fn dict_return(
|
||||||
let mut dict = IterableKeyOrValueResult::empty();
|
let mut dict = IterableKeyOrValueResult::empty();
|
||||||
dict.done = done;
|
dict.done = done;
|
||||||
dict.value.set(value.get());
|
dict.value.set(value.get());
|
||||||
rooted!(in(cx) let mut dict_value = UndefinedValue());
|
rooted!(in(*cx) let mut dict_value = UndefinedValue());
|
||||||
unsafe {
|
unsafe {
|
||||||
dict.to_jsval(cx, dict_value.handle_mut());
|
dict.to_jsval(*cx, dict_value.handle_mut());
|
||||||
}
|
}
|
||||||
result.set(dict_value.to_object());
|
result.set(dict_value.to_object());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn key_and_value_return(
|
fn key_and_value_return(
|
||||||
cx: *mut JSContext,
|
cx: JSContext,
|
||||||
mut result: MutableHandleObject,
|
mut result: MutableHandleObject,
|
||||||
key: HandleValue,
|
key: HandleValue,
|
||||||
value: HandleValue,
|
value: HandleValue,
|
||||||
|
@ -150,9 +150,9 @@ fn key_and_value_return(
|
||||||
.map(|handle| RootedTraceableBox::from_box(Heap::boxed(handle.get())))
|
.map(|handle| RootedTraceableBox::from_box(Heap::boxed(handle.get())))
|
||||||
.collect(),
|
.collect(),
|
||||||
);
|
);
|
||||||
rooted!(in(cx) let mut dict_value = UndefinedValue());
|
rooted!(in(*cx) let mut dict_value = UndefinedValue());
|
||||||
unsafe {
|
unsafe {
|
||||||
dict.to_jsval(cx, dict_value.handle_mut());
|
dict.to_jsval(*cx, dict_value.handle_mut());
|
||||||
}
|
}
|
||||||
result.set(dict_value.to_object());
|
result.set(dict_value.to_object());
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue