diff options
author | Michaƫl Zasso <targos@protonmail.com> | 2017-09-12 11:34:59 +0200 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2017-09-13 16:15:18 +0200 |
commit | d82e1075dbc2cec2d6598ade10c1f43805f690fd (patch) | |
tree | ccd242b9b491dfc341d1099fe11b0ef528839877 /deps/v8/src/objects/name-inl.h | |
parent | b4b7ac6ae811b2b5a3082468115dfb5a5246fe3f (diff) | |
download | android-node-v8-d82e1075dbc2cec2d6598ade10c1f43805f690fd.tar.gz android-node-v8-d82e1075dbc2cec2d6598ade10c1f43805f690fd.tar.bz2 android-node-v8-d82e1075dbc2cec2d6598ade10c1f43805f690fd.zip |
deps: update V8 to 6.1.534.36
PR-URL: https://github.com/nodejs/node/pull/14730
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Diffstat (limited to 'deps/v8/src/objects/name-inl.h')
-rw-r--r-- | deps/v8/src/objects/name-inl.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/deps/v8/src/objects/name-inl.h b/deps/v8/src/objects/name-inl.h new file mode 100644 index 0000000000..4271a1da14 --- /dev/null +++ b/deps/v8/src/objects/name-inl.h @@ -0,0 +1,99 @@ +// Copyright 2017 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_OBJECTS_NAME_INL_H_ +#define V8_OBJECTS_NAME_INL_H_ + +#include "src/objects/name.h" + +// Has to be the last include (doesn't have include guards): +#include "src/objects/object-macros.h" + +namespace v8 { +namespace internal { + +CAST_ACCESSOR(Name) +CAST_ACCESSOR(Symbol) + +ACCESSORS(Symbol, name, Object, kNameOffset) +SMI_ACCESSORS(Symbol, flags, kFlagsOffset) +BOOL_ACCESSORS(Symbol, flags, is_private, kPrivateBit) +BOOL_ACCESSORS(Symbol, flags, is_well_known_symbol, kWellKnownSymbolBit) +BOOL_ACCESSORS(Symbol, flags, is_public, kPublicBit) + +TYPE_CHECKER(Symbol, SYMBOL_TYPE) + +bool Name::IsUniqueName() const { + uint32_t type = map()->instance_type(); + return (type & (kIsNotStringMask | kIsNotInternalizedMask)) != + (kStringTag | kNotInternalizedTag); +} + +uint32_t Name::hash_field() { + return READ_UINT32_FIELD(this, kHashFieldOffset); +} + +void Name::set_hash_field(uint32_t value) { + WRITE_UINT32_FIELD(this, kHashFieldOffset, value); +#if V8_HOST_ARCH_64_BIT +#if V8_TARGET_LITTLE_ENDIAN + WRITE_UINT32_FIELD(this, kHashFieldSlot + kIntSize, 0); +#else + WRITE_UINT32_FIELD(this, kHashFieldSlot, 0); +#endif +#endif +} + +bool Name::Equals(Name* other) { + if (other == this) return true; + if ((this->IsInternalizedString() && other->IsInternalizedString()) || + this->IsSymbol() || other->IsSymbol()) { + return false; + } + return String::cast(this)->SlowEquals(String::cast(other)); +} + +bool Name::Equals(Handle<Name> one, Handle<Name> two) { + if (one.is_identical_to(two)) return true; + if ((one->IsInternalizedString() && two->IsInternalizedString()) || + one->IsSymbol() || two->IsSymbol()) { + return false; + } + return String::SlowEquals(Handle<String>::cast(one), + Handle<String>::cast(two)); +} + +bool Name::IsHashFieldComputed(uint32_t field) { + return (field & kHashNotComputedMask) == 0; +} + +bool Name::HasHashCode() { return IsHashFieldComputed(hash_field()); } + +uint32_t Name::Hash() { + // Fast case: has hash code already been computed? + uint32_t field = hash_field(); + if (IsHashFieldComputed(field)) return field >> kHashShift; + // Slow case: compute hash code and set it. Has to be a string. + return String::cast(this)->ComputeAndSetHash(); +} + +bool Name::IsPrivate() { + return this->IsSymbol() && Symbol::cast(this)->is_private(); +} + +bool Name::AsArrayIndex(uint32_t* index) { + return IsString() && String::cast(this)->AsArrayIndex(index); +} + +// static +bool Name::ContainsCachedArrayIndex(uint32_t hash) { + return (hash & Name::kDoesNotContainCachedArrayIndexMask) == 0; +} + +} // namespace internal +} // namespace v8 + +#include "src/objects/object-macros-undef.h" + +#endif // V8_OBJECTS_NAME_INL_H_ |