}
-Handle<Symbol> Factory::NewPrivateOwnSymbol() {
- Handle<Symbol> symbol = NewSymbol();
- symbol->set_is_private(true);
- symbol->set_is_own(true);
- return symbol;
-}
-
-
Handle<Context> Factory::NewNativeContext() {
Handle<FixedArray> array = NewFixedArray(Context::NATIVE_CONTEXT_SLOTS);
array->set_map_no_write_barrier(*native_context_map());
// Create a symbol.
Handle<Symbol> NewSymbol();
Handle<Symbol> NewPrivateSymbol();
- Handle<Symbol> NewPrivateOwnSymbol();
// Create a global (but otherwise uninitialized) context.
Handle<Context> NewNativeContext();
LookupIterator(Handle<Object> receiver,
Handle<Name> name,
Configuration configuration = CHECK_ALL)
- : configuration_(ComputeConfiguration(configuration, name)),
+ : configuration_(configuration),
state_(NOT_FOUND),
property_kind_(DATA),
property_encoding_(DESCRIPTOR),
Handle<Name> name,
Handle<JSReceiver> holder,
Configuration configuration = CHECK_ALL)
- : configuration_(ComputeConfiguration(configuration, name)),
+ : configuration_(configuration),
state_(NOT_FOUND),
property_kind_(DATA),
property_encoding_(DESCRIPTOR),
return number_;
}
- static Configuration ComputeConfiguration(
- Configuration configuration, Handle<Name> name) {
- if (name->IsOwn()) {
- return static_cast<Configuration>(configuration & CHECK_OWN);
- } else {
- return configuration;
- }
- }
-
Configuration configuration_;
State state_;
bool has_property_;
ACCESSORS(Symbol, name, Object, kNameOffset)
ACCESSORS(Symbol, flags, Smi, kFlagsOffset)
BOOL_ACCESSORS(Symbol, flags, is_private, kPrivateBit)
-BOOL_ACCESSORS(Symbol, flags, is_own, kOwnBit)
bool String::Equals(String* other) {
return String::cast(this)->ComputeAndSetHash();
}
-bool Name::IsOwn() {
- return this->IsSymbol() && Symbol::cast(this)->is_own();
-}
-
StringHasher::StringHasher(int length, uint32_t seed)
: length_(length),
HeapObject::PrintHeader(os, "Symbol");
os << " - hash: " << Hash();
os << "\n - name: " << Brief(name());
- os << "\n - private: " << is_private();
- os << "\n - own: " << is_own();
+ os << " - private: " << is_private();
os << "\n";
}
void JSObject::LookupRealNamedPropertyInPrototypes(Handle<Name> name,
LookupResult* result) {
- if (name->IsOwn()) {
- result->NotFound();
- return;
- }
-
DisallowHeapAllocation no_gc;
Isolate* isolate = GetIsolate();
for (PrototypeIterator iter(isolate, this); !iter.IsAtEnd(); iter.Advance()) {
}
js_object->LookupOwnRealNamedProperty(name, result);
- if (result->IsFound() || name->IsOwn() || !search_hidden_prototypes) return;
+ if (result->IsFound() || !search_hidden_prototypes) return;
PrototypeIterator iter(GetIsolate(), js_object);
if (!iter.GetCurrent()->IsJSReceiver()) return;
!iter.IsAtEnd(); iter.Advance()) {
JSReceiver::cast(iter.GetCurrent())->LookupOwn(name, result, false);
if (result->IsFound()) return;
- if (name->IsOwn()) {
- result->NotFound();
- return;
- }
}
result->NotFound();
}
// Conversion.
inline bool AsArrayIndex(uint32_t* index);
- // Whether name can only name own properties.
- inline bool IsOwn();
-
DECLARE_CAST(Name)
DECLARE_PRINTER(Name)
// [is_private]: whether this is a private symbol.
DECL_BOOLEAN_ACCESSORS(is_private)
- // [is_own]: whether this is an own symbol, that is, only used to designate
- // own properties of objects.
- DECL_BOOLEAN_ACCESSORS(is_own)
-
DECLARE_CAST(Symbol)
// Dispatched behavior.
private:
static const int kPrivateBit = 0;
- static const int kOwnBit = 1;
DISALLOW_IMPLICIT_CONSTRUCTORS(Symbol);
};
}
-RUNTIME_FUNCTION(Runtime_CreatePrivateOwnSymbol) {
- HandleScope scope(isolate);
- DCHECK(args.length() == 1);
- CONVERT_ARG_HANDLE_CHECKED(Object, name, 0);
- RUNTIME_ASSERT(name->IsString() || name->IsUndefined());
- Handle<Symbol> symbol = isolate->factory()->NewPrivateOwnSymbol();
- if (name->IsString()) symbol->set_name(*name);
- return *symbol;
-}
-
-
RUNTIME_FUNCTION(Runtime_CreateGlobalPrivateSymbol) {
HandleScope scope(isolate);
DCHECK(args.length() == 1);
F(CreateSymbol, 1, 1) \
F(CreatePrivateSymbol, 1, 1) \
F(CreateGlobalPrivateSymbol, 1, 1) \
- F(CreatePrivateOwnSymbol, 1, 1) \
F(NewSymbolWrapper, 1, 1) \
F(SymbolDescription, 1, 1) \
F(SymbolRegistry, 0, 1) \
+++ /dev/null
-// Copyright 2014 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.
-//
-// Flags: --allow-natives-syntax
-
-var s = %CreatePrivateOwnSymbol("s");
-var s1 = %CreatePrivateOwnSymbol("s1");
-
-function TestSimple() {
- var p = {}
- p[s] = "moo";
-
- var o = Object.create(p);
-
- assertEquals(undefined, o[s]);
- assertEquals("moo", p[s]);
-
- o[s] = "bow-wow";
- assertEquals("bow-wow", o[s]);
- assertEquals("moo", p[s]);
-}
-
-TestSimple();
-
-
-function TestICs() {
- var p = {}
- p[s] = "moo";
-
-
- var o = Object.create(p);
- o[s1] = "bow-wow";
- function checkNonOwn(o) {
- assertEquals(undefined, o[s]);
- assertEquals("bow-wow", o[s1]);
- }
-
- checkNonOwn(o);
-
- // Test monomorphic/optimized.
- for (var i = 0; i < 1000; i++) {
- checkNonOwn(o);
- }
-
- // Test non-monomorphic.
- for (var i = 0; i < 1000; i++) {
- var oNew = Object.create(p);
- oNew["s" + i] = i;
- oNew[s1] = "bow-wow";
- checkNonOwn(oNew);
- }
-}
-
-TestICs();
+++ /dev/null
-// Copyright 2014 the V8 project authors. All rights reserved.
-// AUTO-GENERATED BY tools/generate-runtime-tests.py, DO NOT MODIFY
-// Flags: --allow-natives-syntax --harmony --harmony-proxies
-var arg0 = "foo";
-%CreatePrivateOwnSymbol(arg0);
# that the parser doesn't bit-rot. Change the values as needed when you add,
# remove or change runtime functions, but make sure we don't lose our ability
# to parse them!
-EXPECTED_FUNCTION_COUNT = 429
-EXPECTED_FUZZABLE_COUNT = 332
+EXPECTED_FUNCTION_COUNT = 428
+EXPECTED_FUZZABLE_COUNT = 331
EXPECTED_CCTEST_COUNT = 7
EXPECTED_UNKNOWN_COUNT = 16
EXPECTED_BUILTINS_COUNT = 809
"CreateBreakIterator": ["'en-US'", "{type: 'string'}", None, None],
"CreateJSFunctionProxy": [None, "function() {}", None, None, None],
"CreatePrivateSymbol": ["\"foo\"", None],
- "CreatePrivateOwnSymbol": ["\"foo\"", None],
"CreateSymbol": ["\"foo\"", None],
"DateParseString": [None, "new Array(8)", None],
"DefineAccessorPropertyUnchecked": [None, None, "function() {}",