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
