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

Side by Side Diff: src/lookup.cc

Issue 527963002: Implement loads and calls from 'super' (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 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
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/bootstrapper.h" 7 #include "src/bootstrapper.h"
8 #include "src/deoptimizer.h" 8 #include "src/deoptimizer.h"
9 #include "src/lookup.h" 9 #include "src/lookup.h"
10 #include "src/lookup-inl.h" 10 #include "src/lookup-inl.h"
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 PrototypeIterator::START_AT_RECEIVER); 263 PrototypeIterator::START_AT_RECEIVER);
264 do { 264 do {
265 if (JSReceiver::cast(iter.GetCurrent()) == holder) return true; 265 if (JSReceiver::cast(iter.GetCurrent()) == holder) return true;
266 DCHECK(!current->IsJSProxy()); 266 DCHECK(!current->IsJSProxy());
267 iter.Advance(); 267 iter.Advance();
268 } while (!iter.IsAtEnd(PrototypeIterator::END_AT_NON_HIDDEN)); 268 } while (!iter.IsAtEnd(PrototypeIterator::END_AT_NON_HIDDEN));
269 return false; 269 return false;
270 } 270 }
271 271
272 272
273 void LookupIterator::LookupForRead() {
274 for (; IsFound(); Next()) {
275 switch (state()) {
276 case LookupIterator::NOT_FOUND:
277 case LookupIterator::TRANSITION:
278 UNREACHABLE();
279 case LookupIterator::JSPROXY:
280 return;
281 case LookupIterator::INTERCEPTOR: {
282 // If there is a getter, return; otherwise loop to perform the lookup.
283 Handle<JSObject> holder = GetHolder<JSObject>();
284 if (!holder->GetNamedInterceptor()->getter()->IsUndefined()) {
285 return;
286 }
287 break;
288 }
289 case LookupIterator::ACCESS_CHECK:
290 // PropertyHandlerCompiler::CheckPrototypes() knows how to emit
291 // access checks for global proxies.
292 if (GetHolder<JSObject>()->IsJSGlobalProxy() &&
Toon Verwaest 2014/09/15 11:57:20 Wth? Why do you explicitly avoid access checks on
Dmitry Lomov (no reviews) 2014/09/15 12:31:12 As discussed offline, this returns otherwise, so d
293 HasAccess(v8::ACCESS_GET)) {
294 break;
295 }
296 return;
297 case LookupIterator::PROPERTY:
298 if (HasProperty()) return; // Yay!
299 break;
300 }
301 }
302 }
303
304
273 Handle<Object> LookupIterator::FetchValue() const { 305 Handle<Object> LookupIterator::FetchValue() const {
274 Object* result = NULL; 306 Object* result = NULL;
275 Handle<JSObject> holder = GetHolder<JSObject>(); 307 Handle<JSObject> holder = GetHolder<JSObject>();
276 switch (property_encoding_) { 308 switch (property_encoding_) {
277 case DICTIONARY: 309 case DICTIONARY:
278 result = holder->property_dictionary()->ValueAt(number_); 310 result = holder->property_dictionary()->ValueAt(number_);
279 if (holder->IsGlobalObject()) { 311 if (holder->IsGlobalObject()) {
280 result = PropertyCell::cast(result)->value(); 312 result = PropertyCell::cast(result)->value();
281 } 313 }
282 break; 314 break;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 DCHECK_EQ(v8::internal::CONSTANT, property_details_.type()); 396 DCHECK_EQ(v8::internal::CONSTANT, property_details_.type());
365 } 397 }
366 } 398 }
367 399
368 400
369 void LookupIterator::InternalizeName() { 401 void LookupIterator::InternalizeName() {
370 if (name_->IsUniqueName()) return; 402 if (name_->IsUniqueName()) return;
371 name_ = factory()->InternalizeString(Handle<String>::cast(name_)); 403 name_ = factory()->InternalizeString(Handle<String>::cast(name_));
372 } 404 }
373 } } // namespace v8::internal 405 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698