mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-03-31 01:11:06 +00:00
Merge pull request #1393 from RReverser/faster-try-iter
Remove string allocation from try_iter
This commit is contained in:
commit
e43963fd42
@ -1101,6 +1101,14 @@ impl IterState {
|
|||||||
/// Create an iterator over `val` using the JS iteration protocol and
|
/// Create an iterator over `val` using the JS iteration protocol and
|
||||||
/// `Symbol.iterator`.
|
/// `Symbol.iterator`.
|
||||||
pub fn try_iter(val: &JsValue) -> Result<Option<IntoIter>, JsValue> {
|
pub fn try_iter(val: &JsValue) -> Result<Option<IntoIter>, JsValue> {
|
||||||
|
#[wasm_bindgen]
|
||||||
|
extern "C" {
|
||||||
|
type MaybeIterator;
|
||||||
|
|
||||||
|
#[wasm_bindgen(method, getter)]
|
||||||
|
fn next(this: &MaybeIterator) -> JsValue;
|
||||||
|
}
|
||||||
|
|
||||||
let iter_sym = Symbol::iterator();
|
let iter_sym = Symbol::iterator();
|
||||||
let iter_fn = Reflect::get(val, iter_sym.as_ref())?;
|
let iter_fn = Reflect::get(val, iter_sym.as_ref())?;
|
||||||
if !iter_fn.is_function() {
|
if !iter_fn.is_function() {
|
||||||
@ -1113,8 +1121,7 @@ pub fn try_iter(val: &JsValue) -> Result<Option<IntoIter>, JsValue> {
|
|||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
|
|
||||||
let next = JsValue::from("next");
|
let next = it.unchecked_ref::<MaybeIterator>().next();
|
||||||
let next = Reflect::get(&it, &next)?;
|
|
||||||
|
|
||||||
Ok(if next.is_function() {
|
Ok(if next.is_function() {
|
||||||
let it: Iterator = it.unchecked_into();
|
let it: Iterator = it.unchecked_into();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user