mirror of
https://github.com/servo/servo.git
synced 2025-10-16 16:29:18 +01:00
Rewrite the codegen for nullable primitives to use JSValConvertible.
This commit is contained in:
parent
aa9a61a78c
commit
1608f842e9
2 changed files with 34 additions and 22 deletions
|
@ -6,8 +6,9 @@ use js::jsapi::{JSVal, JSBool, JSContext};
|
|||
use js::jsapi::{JS_ValueToUint64, JS_ValueToInt64};
|
||||
use js::jsapi::{JS_ValueToECMAUint32, JS_ValueToECMAInt32};
|
||||
use js::jsapi::{JS_ValueToUint16, JS_ValueToNumber, JS_ValueToBoolean};
|
||||
use js::{JSVAL_FALSE, JSVAL_TRUE};
|
||||
use js::{JSVAL_FALSE, JSVAL_TRUE, JSVAL_NULL};
|
||||
use js::glue::{RUST_INT_TO_JSVAL, RUST_UINT_TO_JSVAL, RUST_JS_NumberValue};
|
||||
use js::glue::{RUST_JSVAL_IS_NULL, RUST_JSVAL_IS_VOID};
|
||||
|
||||
pub trait JSValConvertible {
|
||||
fn to_jsval(&self) -> JSVal;
|
||||
|
@ -165,3 +166,21 @@ impl JSValConvertible for f64 {
|
|||
unsafe { convert_from_jsval(cx, val, JS_ValueToNumber) }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: JSValConvertible> JSValConvertible for Option<T> {
|
||||
fn to_jsval(&self) -> JSVal {
|
||||
match self {
|
||||
&Some(ref value) => value.to_jsval(),
|
||||
&None => JSVAL_NULL,
|
||||
}
|
||||
}
|
||||
|
||||
fn from_jsval(cx: *JSContext, value: JSVal) -> Option<Option<T>> {
|
||||
if unsafe { RUST_JSVAL_IS_NULL(value) != 0 || RUST_JSVAL_IS_VOID(value) != 0 } {
|
||||
Some(None)
|
||||
} else {
|
||||
let result: Option<T> = JSValConvertible::from_jsval(cx, value);
|
||||
result.map(|v| Some(v))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue