mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
Make JSVal conversions actually fallible.
This commit is contained in:
parent
4cdb4df70c
commit
02d2ec5ccd
1 changed files with 39 additions and 13 deletions
|
@ -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 {
|
||||
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 {
|
||||
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 {
|
||||
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 {
|
||||
if RUST_JSVAL_IS_INT(val) != 0 {
|
||||
Some(RUST_JSVAL_TO_INT(val) as u16)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -78,15 +96,15 @@ impl JSValConvertible for bool {
|
|||
}
|
||||
|
||||
fn from_jsval(val: JSVal) -> Option<bool> {
|
||||
if val == JSVAL_TRUE {
|
||||
Some(true)
|
||||
} else if val == JSVAL_FALSE {
|
||||
Some(false)
|
||||
unsafe {
|
||||
if RUST_JSVAL_IS_BOOLEAN(val) != 0 {
|
||||
Some(RUST_JSVAL_TO_BOOLEAN(val) != 0)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl JSValConvertible for f32 {
|
||||
fn to_jsval(&self) -> JSVal {
|
||||
|
@ -97,7 +115,11 @@ impl JSValConvertible for f32 {
|
|||
|
||||
fn from_jsval(val: JSVal) -> Option<f32> {
|
||||
unsafe {
|
||||
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 {
|
||||
if RUST_JSVAL_IS_DOUBLE(val) != 0 {
|
||||
Some(RUST_JSVAL_TO_DOUBLE(val) as f64)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue