Just FYI. This is a missing part for https://bugs.webkit.org/show_bug.cgi?id=29031
And it looks like we actually had a bug (which I duplicate): it shouldn't be a real named property lookup for the whole prototype chain---that would ignore interceptors in unlikely, but possible case of presence some objects w/ interceptors below (imagine some nasty games w/ __proto__). What do you think? yours, anton. On Thu, Sep 24, 2009 at 8:32 PM, <[email protected]> wrote: > Reviewers: Mads Ager, Christian Plesner Hansen, Vitaly, > > Description: > Add another method that allows to lookup for a real named property not only > in prototype chain, but in the object itself. > > > Please review this at http://codereview.chromium.org/235004 > > SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ > > Affected files: > M include/v8.h > M src/api.cc > > > Index: include/v8.h > =================================================================== > --- include/v8.h (revision 2967) > +++ include/v8.h (working copy) > @@ -1207,6 +1207,13 @@ > */ > Handle<Value> GetRealNamedPropertyInPrototypeChain(Handle<String> key); > > + /** > + * If result.IsEmpty() no real property was located on the object or > + * in the prototype chain. > + * This means interceptors in the prototype chain are not called. > + */ > + Handle<Value> GetRealNamedProperty(Handle<String> key); > + > /** Tests for a named lookup interceptor.*/ > bool HasNamedLookupInterceptor(); > > Index: src/api.cc > =================================================================== > --- src/api.cc (revision 2967) > +++ src/api.cc (working copy) > @@ -2142,6 +2142,25 @@ > } > > > +Handle<Value> v8::Object::GetRealNamedProperty(Handle<String> key) { > + ON_BAILOUT("v8::Object::GetRealNamedProperty()", return Local<Value>()); > + ENTER_V8; > + i::Handle<i::JSObject> self_obj = Utils::OpenHandle(this); > + i::Handle<i::String> key_obj = Utils::OpenHandle(*key); > + i::LookupResult lookup; > + self_obj->LookupRealNamedProperty(*key_obj, &lookup); > + if (lookup.IsValid()) { > + PropertyAttributes attributes; > + i::Handle<i::Object> result(self_obj->GetProperty(*self_obj, > + &lookup, > + *key_obj, > + &attributes)); > + return Utils::ToLocal(result); > + } > + return Local<Value>(); // No real property was found in prototype chain. > +} > + > + > // Turns on access checks by copying the map and setting the check flag. > // Because the object gets a new map, existing inline cache caching > // the old map of this object will fail. > > > --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
