aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/utils.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2021-01-24 14:07:10 -0500
committerJosh Matthews <josh@joshmatthews.net>2021-02-18 09:35:45 -0500
commit5c4939599e2793154569b19db87be8cc05ca9269 (patch)
treed159222463bf786b64f6e1a30b443e631f4e1b4c /components/script/dom/bindings/utils.rs
parent4c82d3cb861d00e63a08fb987631817bfc7ce07c (diff)
downloadservo-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.rs39
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;
}