And I also check the code of chromium binding.
I found there are accessors for each attribute of all element, and the implementation of these accessors are almost the same. I think it would be very convenient if there is signature support for interceptor in v8. By then chromium only have to bind all attribute accessing through interceptor. On Tue, Dec 1, 2009 at 8:59 PM, Xiang Zhong <clock...@gmail.com> wrote: > Hi, Anton, > > > Thanks for your clarification! > > I have to hook on the prototype, so that it is visible when other object > inherit from this object. > > Is it true that the signature is a missed feature for Interceptor? > > > And I am confused about traversing the This of AccessorInfo. > It is easy to get __proto__ of one object, but how can we find the object > itself through its prototype? > > > > Thanks~ > > Cheers~ > Xiang > > > > > > > > > On Tue, Dec 1, 2009 at 8:49 PM, Anton Muhin <ant...@chromium.org> wrote: > >> Good day, Xiang. >> >> First of all, I think you'd better off keeping an interceptor on the >> objects. If you're still determined to keep it on the prototype, you >> should be able to find an object, but you will have to traversal from >> the This of AccessorInfo. Please note that is somewhat fragile as one >> can change prototype chain. >> >> yours, >> anton. >> >> On Tue, Dec 1, 2009 at 3:11 PM, Xiang Zhong <clock...@gmail.com> wrote: >> > Hi, All, >> > There are two object involved: >> > Prototype >> > ^ >> > | >> > | >> > Object >> > >> > I set interceptor on prototype template, and have set internal field on >> > Object. >> > Is there a way to access these internal field of Object in intercrptor >> of >> > Prototype? >> > >> > >> > For Accessor, there is a way to define signature, then the VM will pass >> the >> > right object to accessor, how about inteceptors? >> > >> > Please check the following sample, it will crash if I try a access the >> > internal filed. >> > >> > #include <v8.h> >> > #include <iostream> >> > #include <fstream> >> > #include <sstream> >> > #include <cmath> >> > using namespace v8; >> > v8::Handle<v8::Value> Getter(v8::Local<v8::String> propertyName,const >> > v8::AccessorInfo &info) { >> > v8::HandleScope handleScope; >> > v8::Handle<v8::External> external = >> > v8::Handle<v8::External>::Cast(info.Holder()->GetInternalField(0)); >> > void * message = external->Value(); >> > const char * str = (const char *)message; >> > printf(str); >> > //return something that is not NULL back >> > return v8::True(); >> > } >> > Handle<Value> CreateObjectWithInteceptor(const Arguments& args) >> > { >> > HandleScope handleScope; >> > const char * test = "With Inteceptor"; >> > v8::Handle<v8::External> external = v8::External::New((void *)test); >> > args.Holder()->SetInternalField(0, external); >> > return args.Holder(); >> > } >> > int main() >> > { >> > HandleScope handleScope; >> > >> > Handle<FunctionTemplate> functionTemplate = >> > FunctionTemplate::New(CreateObjectWithInteceptor); >> > >> functionTemplate->SetClassName(String::New("CreateObjectWithInteceptor")); >> > v8::Local<v8::Signature> default_signature = >> > v8::Signature::New(functionTemplate); >> > Handle<ObjectTemplate> instanceTemplate = >> > functionTemplate->InstanceTemplate(); >> > instanceTemplate->SetInternalFieldCount(1); // create an internal field >> for >> > the C++ object >> > Handle<ObjectTemplate> prot = functionTemplate->PrototypeTemplate(); >> > prot->SetNamedPropertyHandler(Getter); >> > >> > Handle<ObjectTemplate> globals = ObjectTemplate::New(); >> > globals->Set(String::New("object"), instanceTemplate); // add our >> print >> > function >> > Persistent<Context> context = Context::New(0, globals); >> > Context::Scope contextScope(context); >> > Handle<Script> script = >> Script::Compile(v8::String::New("object.getValue")); >> > Handle<Value> result = script->Run(); >> > context.Dispose(); >> > return 0; >> > } >> > >> > Cheers~ >> > Xiang >> > >> > -- >> > v8-dev mailing list >> > v8-dev@googlegroups.com >> > http://groups.google.com/group/v8-dev >> >> -- >> v8-dev mailing list >> v8-dev@googlegroups.com >> http://groups.google.com/group/v8-dev > > > -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev