diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index 35eb5038bc9..f027b8b8504 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -58,6 +58,7 @@ use libc; use std::borrow::ToOwned; use std::default; use std::marker::MarkerTrait; +use std::num::Float; use std::slice; /// A trait to retrieve the constants necessary to check if a `JSObject` @@ -257,24 +258,6 @@ impl FromJSValConvertible for f32 { } } -impl ToJSValConvertible for Finite { - fn to_jsval(&self, cx: *mut JSContext) -> JSVal { - let value = **self; - value.to_jsval(cx) - } -} - -impl FromJSValConvertible for Finite { - type Config = (); - fn from_jsval(cx: *mut JSContext, val: JSVal, option: ()) -> Result, ()> { - let result = FromJSValConvertible::from_jsval(cx, val, option); - let result = result.and_then(|v| { - Finite::::new(v).ok_or(()) - }); - result - } -} - impl ToJSValConvertible for f64 { fn to_jsval(&self, _cx: *mut JSContext) -> JSVal { unsafe { @@ -290,7 +273,7 @@ impl FromJSValConvertible for f64 { } } -impl ToJSValConvertible for Finite { +impl ToJSValConvertible for Finite { #[inline] fn to_jsval(&self, cx: *mut JSContext) -> JSVal { let value = **self; @@ -298,14 +281,15 @@ impl ToJSValConvertible for Finite { } } -impl FromJSValConvertible for Finite { +impl> FromJSValConvertible for Finite { type Config = (); - fn from_jsval(cx: *mut JSContext, val: JSVal, option: ()) -> Result, ()> { - let result = FromJSValConvertible::from_jsval(cx, val, option); - let result = result.and_then(|v| { - Finite::::new(v).ok_or(()) - }); - result + + fn from_jsval(cx: *mut JSContext, value: JSVal, option: ()) -> Result, ()> { + let result = try!(FromJSValConvertible::from_jsval(cx, value, option)); + match Finite::new(result) { + Some(v) => Ok(v), + None => Err(()), + } } }