aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/components/script/dom/bindings/conversions.rs52
1 files changed, 39 insertions, 13 deletions
diff --git a/src/components/script/dom/bindings/conversions.rs b/src/components/script/dom/bindings/conversions.rs
index 06745217365..decb047ab9f 100644
--- a/src/components/script/dom/bindings/conversions.rs
+++ b/src/components/script/dom/bindings/conversions.rs
@@ -4,7 +4,9 @@
use js::jsapi::JSVal;
use js::{JSVAL_FALSE, JSVAL_TRUE};
-use js::glue::{RUST_UINT_TO_JSVAL, RUST_JSVAL_TO_INT, RUST_DOUBLE_TO_JSVAL, RUST_JSVAL_TO_DOUBLE};
+use js::glue::{RUST_UINT_TO_JSVAL, RUST_JSVAL_TO_INT, RUST_DOUBLE_TO_JSVAL};
+use js::glue::{RUST_JSVAL_TO_DOUBLE, RUST_JSVAL_IS_INT, RUST_JSVAL_IS_DOUBLE};
+use js::glue::{RUST_JSVAL_IS_BOOLEAN, RUST_JSVAL_TO_BOOLEAN};
pub trait JSValConvertible {
fn to_jsval(&self) -> JSVal;
@@ -21,7 +23,11 @@ impl JSValConvertible for i64 {
fn from_jsval(val: JSVal) -> Option<i64> {
unsafe {
- Some(RUST_JSVAL_TO_DOUBLE(val) as i64)
+ if RUST_JSVAL_IS_INT(val) != 0 {
+ Some(RUST_JSVAL_TO_DOUBLE(val) as i64)
+ } else {
+ None
+ }
}
}
}
@@ -35,7 +41,11 @@ impl JSValConvertible for u32 {
fn from_jsval(val: JSVal) -> Option<u32> {
unsafe {
- Some(RUST_JSVAL_TO_INT(val) as u32)
+ if RUST_JSVAL_IS_INT(val) != 0 {
+ Some(RUST_JSVAL_TO_INT(val) as u32)
+ } else {
+ None
+ }
}
}
}
@@ -49,7 +59,11 @@ impl JSValConvertible for i32 {
fn from_jsval(val: JSVal) -> Option<i32> {
unsafe {
- Some(RUST_JSVAL_TO_INT(val) as i32)
+ if RUST_JSVAL_IS_INT(val) != 0 {
+ Some(RUST_JSVAL_TO_INT(val) as i32)
+ } else {
+ None
+ }
}
}
}
@@ -63,7 +77,11 @@ impl JSValConvertible for u16 {
fn from_jsval(val: JSVal) -> Option<u16> {
unsafe {
- Some(RUST_JSVAL_TO_INT(val) as u16)
+ if RUST_JSVAL_IS_INT(val) != 0 {
+ Some(RUST_JSVAL_TO_INT(val) as u16)
+ } else {
+ None
+ }
}
}
}
@@ -78,12 +96,12 @@ impl JSValConvertible for bool {
}
fn from_jsval(val: JSVal) -> Option<bool> {
- if val == JSVAL_TRUE {
- Some(true)
- } else if val == JSVAL_FALSE {
- Some(false)
- } else {
- None
+ unsafe {
+ if RUST_JSVAL_IS_BOOLEAN(val) != 0 {
+ Some(RUST_JSVAL_TO_BOOLEAN(val) != 0)
+ } else {
+ None
+ }
}
}
}
@@ -97,7 +115,11 @@ impl JSValConvertible for f32 {
fn from_jsval(val: JSVal) -> Option<f32> {
unsafe {
- Some(RUST_JSVAL_TO_DOUBLE(val) as f32)
+ if RUST_JSVAL_IS_DOUBLE(val) != 0 {
+ Some(RUST_JSVAL_TO_DOUBLE(val) as f32)
+ } else {
+ None
+ }
}
}
}
@@ -111,7 +133,11 @@ impl JSValConvertible for f64 {
fn from_jsval(val: JSVal) -> Option<f64> {
unsafe {
- Some(RUST_JSVAL_TO_DOUBLE(val) as f64)
+ if RUST_JSVAL_IS_DOUBLE(val) != 0 {
+ Some(RUST_JSVAL_TO_DOUBLE(val) as f64)
+ } else {
+ None
+ }
}
}
}