Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(685)

Side by Side Diff: src/objects.cc

Issue 464473002: Add "own" symbols support. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixes for 64-bit builds Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/allocation-site-scopes.h" 8 #include "src/allocation-site-scopes.h"
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 3542 matching lines...) Expand 10 before | Expand all | Expand 10 after
3553 DisallowHeapAllocation no_gc; 3553 DisallowHeapAllocation no_gc;
3554 LookupOwnRealNamedProperty(name, result); 3554 LookupOwnRealNamedProperty(name, result);
3555 if (result->IsFound()) return; 3555 if (result->IsFound()) return;
3556 3556
3557 LookupRealNamedPropertyInPrototypes(name, result); 3557 LookupRealNamedPropertyInPrototypes(name, result);
3558 } 3558 }
3559 3559
3560 3560
3561 void JSObject::LookupRealNamedPropertyInPrototypes(Handle<Name> name, 3561 void JSObject::LookupRealNamedPropertyInPrototypes(Handle<Name> name,
3562 LookupResult* result) { 3562 LookupResult* result) {
3563 if (name->IsOwn()) {
3564 result->NotFound();
3565 return;
3566 }
3567
3563 DisallowHeapAllocation no_gc; 3568 DisallowHeapAllocation no_gc;
3564 Isolate* isolate = GetIsolate(); 3569 Isolate* isolate = GetIsolate();
3565 for (PrototypeIterator iter(isolate, this); !iter.IsAtEnd(); iter.Advance()) { 3570 for (PrototypeIterator iter(isolate, this); !iter.IsAtEnd(); iter.Advance()) {
3566 if (iter.GetCurrent()->IsJSProxy()) { 3571 if (iter.GetCurrent()->IsJSProxy()) {
3567 return result->HandlerResult(JSProxy::cast(iter.GetCurrent())); 3572 return result->HandlerResult(JSProxy::cast(iter.GetCurrent()));
3568 } 3573 }
3569 JSObject::cast(iter.GetCurrent())->LookupOwnRealNamedProperty(name, result); 3574 JSObject::cast(iter.GetCurrent())->LookupOwnRealNamedProperty(name, result);
3570 DCHECK(!(result->IsFound() && result->type() == INTERCEPTOR)); 3575 DCHECK(!(result->IsFound() && result->type() == INTERCEPTOR));
3571 if (result->IsFound()) return; 3576 if (result->IsFound()) return;
3572 } 3577 }
(...skipping 2527 matching lines...) Expand 10 before | Expand all | Expand 10 after
6100 JSObject* js_object = JSObject::cast(this); 6105 JSObject* js_object = JSObject::cast(this);
6101 6106
6102 // Check for lookup interceptor except when bootstrapping. 6107 // Check for lookup interceptor except when bootstrapping.
6103 if (js_object->HasNamedInterceptor() && 6108 if (js_object->HasNamedInterceptor() &&
6104 !GetIsolate()->bootstrapper()->IsActive()) { 6109 !GetIsolate()->bootstrapper()->IsActive()) {
6105 result->InterceptorResult(js_object); 6110 result->InterceptorResult(js_object);
6106 return; 6111 return;
6107 } 6112 }
6108 6113
6109 js_object->LookupOwnRealNamedProperty(name, result); 6114 js_object->LookupOwnRealNamedProperty(name, result);
6110 if (result->IsFound() || !search_hidden_prototypes) return; 6115 if (result->IsFound() || name->IsOwn() || !search_hidden_prototypes) return;
6111 6116
6112 PrototypeIterator iter(GetIsolate(), js_object); 6117 PrototypeIterator iter(GetIsolate(), js_object);
6113 if (!iter.GetCurrent()->IsJSReceiver()) return; 6118 if (!iter.GetCurrent()->IsJSReceiver()) return;
6114 JSReceiver* receiver = JSReceiver::cast(iter.GetCurrent()); 6119 JSReceiver* receiver = JSReceiver::cast(iter.GetCurrent());
6115 if (receiver->map()->is_hidden_prototype()) { 6120 if (receiver->map()->is_hidden_prototype()) {
6116 receiver->LookupOwn(name, result, search_hidden_prototypes); 6121 receiver->LookupOwn(name, result, search_hidden_prototypes);
6117 } 6122 }
6118 } 6123 }
6119 6124
6120 6125
6121 void JSReceiver::Lookup(Handle<Name> name, LookupResult* result) { 6126 void JSReceiver::Lookup(Handle<Name> name, LookupResult* result) {
6122 DisallowHeapAllocation no_gc; 6127 DisallowHeapAllocation no_gc;
6123 // Ecma-262 3rd 8.6.2.4 6128 // Ecma-262 3rd 8.6.2.4
6124 for (PrototypeIterator iter(GetIsolate(), this, 6129 for (PrototypeIterator iter(GetIsolate(), this,
6125 PrototypeIterator::START_AT_RECEIVER); 6130 PrototypeIterator::START_AT_RECEIVER);
6126 !iter.IsAtEnd(); iter.Advance()) { 6131 !iter.IsAtEnd(); iter.Advance()) {
6127 JSReceiver::cast(iter.GetCurrent())->LookupOwn(name, result, false); 6132 JSReceiver::cast(iter.GetCurrent())->LookupOwn(name, result, false);
6128 if (result->IsFound()) return; 6133 if (result->IsFound()) return;
6134 if (name->IsOwn()) {
6135 result->NotFound();
6136 return;
6137 }
6129 } 6138 }
6130 result->NotFound(); 6139 result->NotFound();
6131 } 6140 }
6132 6141
6133 6142
6134 static bool ContainsOnlyValidKeys(Handle<FixedArray> array) { 6143 static bool ContainsOnlyValidKeys(Handle<FixedArray> array) {
6135 int len = array->length(); 6144 int len = array->length();
6136 for (int i = 0; i < len; i++) { 6145 for (int i = 0; i < len; i++) {
6137 Object* e = array->get(i); 6146 Object* e = array->get(i);
6138 if (!(e->IsString() || e->IsNumber())) return false; 6147 if (!(e->IsString() || e->IsNumber())) return false;
(...skipping 10781 matching lines...) Expand 10 before | Expand all | Expand 10 after
16920 #define ERROR_MESSAGES_TEXTS(C, T) T, 16929 #define ERROR_MESSAGES_TEXTS(C, T) T,
16921 static const char* error_messages_[] = { 16930 static const char* error_messages_[] = {
16922 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) 16931 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS)
16923 }; 16932 };
16924 #undef ERROR_MESSAGES_TEXTS 16933 #undef ERROR_MESSAGES_TEXTS
16925 return error_messages_[reason]; 16934 return error_messages_[reason];
16926 } 16935 }
16927 16936
16928 16937
16929 } } // namespace v8::internal 16938 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698