|
22 | 22 | //! | double | `Finite<f64>` |
|
23 | 23 | //! | USVString | `String` |
|
24 | 24 | //! | object | `*mut JSObject` |
|
| 25 | +//! | symbol | `*mut Symbol` | |
25 | 26 | //! | nullable types | `Option<T>` |
|
26 | 27 | //! | sequences | `Vec<T>` |
|
27 | 28 |
|
|
30 | 31 | use error::throw_type_error;
|
31 | 32 | use glue::RUST_JS_NumberValue;
|
32 | 33 | use jsapi::AssertSameCompartment;
|
| 34 | +use jsapi::JS; |
33 | 35 | use jsapi::{ForOfIterator, ForOfIterator_NonIterableBehavior};
|
34 | 36 | use jsapi::{Heap, JS_DefineElement, JS_GetLatin1StringCharsAndLength};
|
35 | 37 | use jsapi::{JSContext, JSObject, JSString, RootedObject, RootedValue};
|
36 | 38 | use jsapi::{JS_DeprecatedStringHasLatin1Chars, JS_NewUCStringCopyN, JSPROP_ENUMERATE};
|
37 | 39 | use jsapi::{JS_GetTwoByteStringCharsAndLength, NewArrayObject1};
|
38 | 40 | use jsval::{BooleanValue, Int32Value, NullValue, UInt32Value, UndefinedValue};
|
39 |
| -use jsval::{JSVal, ObjectOrNullValue, ObjectValue, StringValue}; |
| 41 | +use jsval::{JSVal, ObjectOrNullValue, ObjectValue, StringValue, SymbolValue}; |
40 | 42 | use libc;
|
41 | 43 | use num_traits::{Bounded, Zero};
|
42 | 44 | use rust::maybe_wrap_value;
|
@@ -752,3 +754,27 @@ impl FromJSValConvertible for *mut JSObject {
|
752 | 754 | Ok(ConversionResult::Success(value.to_object()))
|
753 | 755 | }
|
754 | 756 | }
|
| 757 | + |
| 758 | +impl ToJSValConvertible for *mut JS::Symbol { |
| 759 | + #[inline] |
| 760 | + unsafe fn to_jsval(&self, _: *mut JSContext, mut rval: MutableHandleValue) { |
| 761 | + rval.set(SymbolValue(&**self)); |
| 762 | + } |
| 763 | +} |
| 764 | + |
| 765 | +impl FromJSValConvertible for *mut JS::Symbol { |
| 766 | + type Config = (); |
| 767 | + #[inline] |
| 768 | + unsafe fn from_jsval( |
| 769 | + cx: *mut JSContext, |
| 770 | + value: HandleValue, |
| 771 | + _option: (), |
| 772 | + ) -> Result<ConversionResult<*mut JS::Symbol>, ()> { |
| 773 | + if !value.is_symbol() { |
| 774 | + throw_type_error(cx, "value is not a symbol"); |
| 775 | + return Err(()); |
| 776 | + } |
| 777 | + |
| 778 | + Ok(ConversionResult::Success(value.to_symbol())) |
| 779 | + } |
| 780 | +} |
0 commit comments