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

Reply via email to