From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- js/src/vm/ObjectFlags-inl.h | 61 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 js/src/vm/ObjectFlags-inl.h (limited to 'js/src/vm/ObjectFlags-inl.h') diff --git a/js/src/vm/ObjectFlags-inl.h b/js/src/vm/ObjectFlags-inl.h new file mode 100644 index 0000000000..6a7cc64c15 --- /dev/null +++ b/js/src/vm/ObjectFlags-inl.h @@ -0,0 +1,61 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: set ts=8 sts=2 et sw=2 tw=80: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef vm_ObjectFlags_inl_h +#define vm_ObjectFlags_inl_h + +#include "vm/ObjectFlags.h" + +#include "builtin/Array.h" +#include "vm/JSAtomState.h" +#include "vm/JSContext.h" +#include "vm/PlainObject.h" +#include "vm/PropertyInfo.h" + +namespace js { + +MOZ_ALWAYS_INLINE ObjectFlags +GetObjectFlagsForNewProperty(const JSClass* clasp, ObjectFlags flags, jsid id, + PropertyFlags propFlags, JSContext* cx) { + uint32_t index; + if (IdIsIndex(id, &index)) { + flags.setFlag(ObjectFlag::Indexed); + } else if (id.isSymbol() && id.toSymbol()->isInterestingSymbol()) { + flags.setFlag(ObjectFlag::HasInterestingSymbol); + } + + if ((!propFlags.isDataProperty() || !propFlags.writable()) && + clasp == &PlainObject::class_ && !id.isAtom(cx->names().proto)) { + flags.setFlag(ObjectFlag::HasNonWritableOrAccessorPropExclProto); + } + + if (propFlags.enumerable()) { + flags.setFlag(ObjectFlag::HasEnumerable); + } + + return flags; +} + +// When reusing another shape's PropMap, we need to copy the object flags that +// are based on property information. This is equivalent to (but faster than) +// calling GetObjectFlagsForNewProperty for all properties in the map. +inline ObjectFlags CopyPropMapObjectFlags(ObjectFlags dest, + ObjectFlags source) { + if (source.hasFlag(ObjectFlag::Indexed)) { + dest.setFlag(ObjectFlag::Indexed); + } + if (source.hasFlag(ObjectFlag::HasInterestingSymbol)) { + dest.setFlag(ObjectFlag::HasInterestingSymbol); + } + if (source.hasFlag(ObjectFlag::HasNonWritableOrAccessorPropExclProto)) { + dest.setFlag(ObjectFlag::HasNonWritableOrAccessorPropExclProto); + } + return dest; +} + +} // namespace js + +#endif /* vm_ObjectFlags_inl_h */ -- cgit v1.2.3