I have changed the inheritance hierarchy in the API to reflect the fact that Date and RegExp objects are Objects.
Thanks, -- Mads On Tue, May 3, 2011 at 9:51 PM, Mads Sig Ager <[email protected]> wrote: > That is indeed confusing. We should update the inheritance hierarchy in the > API for date and regexp objects. They are JavaScript objects and not > primitive values. > > The type testing and casting is implemented in terms of the actual > JavaScript values and therefore Date and RegExp objects can be casted to > Object even though the API inheritance hierarchy does not reflect the fact > that they are objects. > > Cheers, -- Mads > > > On Tue, May 3, 2011 at 9:41 PM, Charles Lowell > <[email protected]>wrote: > >> Mads, >> >> Thanks again for the response. I was under the impression that Date >> and RegExp were not objects, only values. For example, >> https://github.com/v8/v8/blob/master/include/v8.h#L1355 >> >> Although now that I actually attempt to cast it to object and call >> object methods on it, it does appear to work. How is that possible, >> and why not make it descend from Object in the first place? >> >> cheers, >> Charles >> >> On May 3, 2:23 pm, Mads Sig Ager <[email protected]> wrote: >> > PS: dates and regexps are objects so they will be covered by the Object >> > branch here. >> > >> > Cheers, -- Mads >> > >> > On Tue, May 3, 2011 at 9:21 PM, Mads Sig Ager <[email protected]> >> wrote: >> > >> > >> > >> > >> > >> > >> > >> > > Hi again Charles, >> > >> > > I was only considering values and I was thinking that rolling your own >> Hash >> > > method for a value would be fairly easy since there are not that many >> basic >> > > types to worry about. >> > >> > > Something along the lines of: >> > >> > > int Hash(Handle<Value> value) { >> > > if (value->IsObject()) { >> > > return Handle<Object>::Cast(value)->GetIdentityHash(); >> > > } else if (value->IsString()) { >> > > // compute and return string hash >> > > } else if (value->IsNumber()) { >> > > // compute and return number hash >> > > } else if (value->IsBoolean()) { >> > > if (value->IsTrue()) { >> > > // return hash value for true >> > > } else { >> > > // return hash value for false >> > > } >> > > } else if (value->IsNull()) { >> > > // return hash value for null >> > > } else if (value->IsUndefined()) { >> > > // return hash value for undefined >> > > } >> > > assert(false); >> > > return 0; >> > > } >> > >> > > Cheers, -- Mads >> > >> > > On Tue, May 3, 2011 at 3:41 PM, Charles Lowell < >> [email protected]>wrote: >> > >> > >> Mads, >> > >> > >> Thanks for the helpful tips. I will definitely look into using >> > >> internal fields where possible to achieve the speedup. >> > >> > >> Stephan is correct, I'm wanting to associate metadata with >> non-object, >> > >> non-template created values like dates and regexen. In fact, for my >> > >> use-case (therubyracer), I'd really like to be able to tie metadata >> to >> > >> anything you can get a Handle to since I also reflect non-value >> things >> > >> into Ruby like Context and FunctionTemplate. That said, being able to >> > >> get a stable, unique object id for all values would be killer. You >> > >> mentioned that it would be relatively straightforward to roll your >> > >> own? Any chance you could elaborate? >> > >> > >> cheers, >> > >> Charles >> > >> > >> On May 3, 2:01 am, Mads Sig Ager <[email protected]> wrote: >> > >> > On Tue, May 3, 2011 at 8:58 AM, Stephan Beal < >> [email protected]> >> > >> wrote: >> > >> > > On Tue, May 3, 2011 at 8:56 AM, Mads Sig Ager <[email protected] >> > >> > >> wrote: >> > >> > >> > >> On Tue, May 3, 2011 at 8:52 AM, Stephan Beal < >> [email protected] >> > >> >wrote: >> > >> > >> > >>> i think Charles is wanting to tie data to >> non-template-generated >> > >> values >> > >> > >>> like Numbers. From what i understand, v8 does not have the API >> to do >> > >> this. >> > >> > >>> Nor ... >> > >> > >> > >> Object::GetIdentityHash should give you what you want to do the >> > >> mapping >> > >> > >> externally. If you want to add external data after the fact in >> the >> > >> object >> > >> > >> itself hidden values is the way to go. :) >> > >> > >> > > But Object::GetIdentityHash() only works for Objects, right? >> > >> > >> > > In SpiderMonkey each JS value is a numeric handle with a stable >> value >> > >> (v8's >> > >> > > aren't stable b/c of how the allocator works), and those numbers >> can >> > >> be used >> > >> > > to map, e.g. >> > >> > > a Window handle to a JS Integer. >> > >> > >> > Yes, GetIdentifyHash only works for Objects. For values you can >> easily >> > >> roll >> > >> > your own. What you get from GetIdentityHash will stay the same over >> > >> time. >> > >> > >> > -- Mads >> > >> > >> > > -- >> > >> > > ----- stephan beal >> > >> > >http://wanderinghorse.net/home/stephan/ >> > >> > >> > > -- >> > >> > > v8-users mailing list >> > >> > > [email protected] >> > >> > >http://groups.google.com/group/v8-users >> > >> > >> -- >> > >> v8-users mailing list >> > >> [email protected] >> > >>http://groups.google.com/group/v8-users >> >> -- >> v8-users mailing list >> [email protected] >> http://groups.google.com/group/v8-users >> > > -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
