diff options
author | Josh Matthews <josh@joshmatthews.net> | 2025-03-16 10:08:22 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-16 14:08:22 +0000 |
commit | c8d878795966f0b685385e6961e0d69df4268734 (patch) | |
tree | 3560dee84d5ed70506b1de90910d361868b868dd /components/script_bindings/conversions.rs | |
parent | d35da38a2fd6f093967e74f704612391b4988e69 (diff) | |
download | servo-c8d878795966f0b685385e6961e0d69df4268734.tar.gz servo-c8d878795966f0b685385e6961e0d69df4268734.zip |
Move CustomTraceable to script_bindings. (#35988)
* script: Move CustomTraceable to script_bindings.
Signed-off-by: Josh Matthews <josh@joshmatthews.net>
* script: Move record binding support to script_bindings.
Signed-off-by: Josh Matthews <josh@joshmatthews.net>
* Address clippy warnings.
Signed-off-by: Josh Matthews <josh@joshmatthews.net>
---------
Signed-off-by: Josh Matthews <josh@joshmatthews.net>
Diffstat (limited to 'components/script_bindings/conversions.rs')
-rw-r--r-- | components/script_bindings/conversions.rs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/components/script_bindings/conversions.rs b/components/script_bindings/conversions.rs index 98998e170da..6e0ce7adee0 100644 --- a/components/script_bindings/conversions.rs +++ b/components/script_bindings/conversions.rs @@ -18,8 +18,8 @@ use js::jsapi::{ }; use js::jsval::{ObjectValue, StringValue, UndefinedValue}; use js::rust::{ - HandleValue, MutableHandleValue, ToString, get_object_class, is_dom_class, is_dom_object, - maybe_wrap_value, + HandleId, HandleValue, MutableHandleValue, ToString, get_object_class, is_dom_class, + is_dom_object, maybe_wrap_value, }; use crate::inheritance::Castable; @@ -387,3 +387,24 @@ where } root_from_object(v.get().to_object(), cx) } + +/// Convert `id` to a `DOMString`. Returns `None` if `id` is not a string or +/// integer. +/// +/// Handling of invalid UTF-16 in strings depends on the relevant option. +/// +/// # Safety +/// - cx must point to a non-null, valid JSContext instance. +pub unsafe fn jsid_to_string(cx: *mut JSContext, id: HandleId) -> Option<DOMString> { + let id_raw = *id; + if id_raw.is_string() { + let jsstr = std::ptr::NonNull::new(id_raw.to_string()).unwrap(); + return Some(jsstring_to_str(cx, jsstr)); + } + + if id_raw.is_int() { + return Some(id_raw.to_int().to_string().into()); + } + + None +} |