diff options
author | Josh Matthews <josh@joshmatthews.net> | 2021-01-24 14:07:10 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2021-02-18 09:35:45 -0500 |
commit | 5c4939599e2793154569b19db87be8cc05ca9269 (patch) | |
tree | d159222463bf786b64f6e1a30b443e631f4e1b4c /components/script/dom/bindings/utils.rs | |
parent | 4c82d3cb861d00e63a08fb987631817bfc7ce07c (diff) | |
download | servo-5c4939599e2793154569b19db87be8cc05ca9269.tar.gz servo-5c4939599e2793154569b19db87be8cc05ca9269.zip |
Update mozjs.
Diffstat (limited to 'components/script/dom/bindings/utils.rs')
-rw-r--r-- | components/script/dom/bindings/utils.rs | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs index 8ca51c2189d..36f255bc4ee 100644 --- a/components/script/dom/bindings/utils.rs +++ b/components/script/dom/bindings/utils.rs @@ -16,7 +16,7 @@ use crate::dom::bindings::str::DOMString; use crate::dom::bindings::trace::trace_object; use crate::dom::windowproxy; use crate::script_runtime::JSContext as SafeJSContext; -use js::conversions::{jsstr_to_string, ToJSValConvertible}; +use js::conversions::ToJSValConvertible; use js::glue::{CallJitGetterOp, CallJitMethodOp, CallJitSetterOp, IsWrapper}; use js::glue::{GetCrossCompartmentWrapper, JS_GetReservedSlot, WrapperNew}; use js::glue::{UnwrapObjectDynamic, UnwrapObjectStatic, RUST_JSID_TO_INT, RUST_JSID_TO_STRING}; @@ -27,15 +27,15 @@ use js::jsapi::HandleId as RawHandleId; use js::jsapi::HandleObject as RawHandleObject; use js::jsapi::MutableHandleIdVector as RawMutableHandleIdVector; use js::jsapi::MutableHandleObject as RawMutableHandleObject; +use js::jsapi::{AtomToLinearString, GetLinearStringCharAt, GetLinearStringLength}; use js::jsapi::{CallArgs, DOMCallbacks, GetNonCCWObjectGlobal}; use js::jsapi::{Heap, JSAutoRealm, JSContext, JS_FreezeObject}; +use js::jsapi::{JSAtom, JS_IsExceptionPending, JS_IsGlobalObject}; use js::jsapi::{JSJitInfo, JSObject, JSTracer, JSWrapObjectCallbacks}; -use js::jsapi::{JS_EnumerateStandardClasses, JS_GetLatin1StringCharsAndLength}; -use js::jsapi::{JS_IsExceptionPending, JS_IsGlobalObject}; use js::jsapi::{ - JS_ResolveStandardClass, JS_StringHasLatin1Chars, ObjectOpResult, StringIsArrayIndex1, - StringIsArrayIndex2, + JS_DeprecatedStringHasLatin1Chars, JS_ResolveStandardClass, ObjectOpResult, StringIsArrayIndex, }; +use js::jsapi::{JS_EnumerateStandardClasses, JS_GetLatin1StringCharsAndLength}; use js::jsval::{JSVal, UndefinedValue}; use js::rust::wrappers::JS_DeletePropertyById; use js::rust::wrappers::JS_ForwardGetPropertyTo; @@ -191,7 +191,7 @@ pub unsafe fn get_property_on_prototype( /// Get an array index from the given `jsid`. Returns `None` if the given /// `jsid` is not an integer. -pub unsafe fn get_array_index_from_id(cx: *mut JSContext, id: HandleId) -> Option<u32> { +pub unsafe fn get_array_index_from_id(_cx: *mut JSContext, id: HandleId) -> Option<u32> { let raw_id = id.into(); if RUST_JSID_IS_INT(raw_id) { return Some(RUST_JSID_TO_INT(raw_id) as u32); @@ -201,7 +201,28 @@ pub unsafe fn get_array_index_from_id(cx: *mut JSContext, id: HandleId) -> Optio return None; } - let s = jsstr_to_string(cx, RUST_JSID_TO_STRING(raw_id)); + let atom = RUST_JSID_TO_STRING(raw_id) as *mut JSAtom; + let s = AtomToLinearString(atom); + if GetLinearStringLength(s) == 0 { + return None; + } + + let chars = [GetLinearStringCharAt(s, 0)]; + let first_char = char::decode_utf16(chars.iter().cloned()) + .next() + .map_or('\0', |r| r.unwrap_or('\0')); + if first_char < 'a' || first_char > 'z' { + return None; + } + + let mut i = 0; + if StringIsArrayIndex(s, &mut i) { + Some(i) + } else { + None + } + + /*let s = jsstr_to_string(cx, RUST_JSID_TO_STRING(raw_id)); if s.len() == 0 { return None; } @@ -225,7 +246,7 @@ pub unsafe fn get_array_index_from_id(cx: *mut JSContext, id: HandleId) -> Optio Some(i) } else { None - } + }*/ } /// Find the enum equivelent of a string given by `v` in `pairs`. @@ -436,7 +457,7 @@ pub unsafe extern "C" fn resolve_global( } let string = RUST_JSID_TO_STRING(id); - if !JS_StringHasLatin1Chars(string) { + if !JS_DeprecatedStringHasLatin1Chars(string) { *rval = false; return true; } |