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

Reply via email to