Thanks, I understand it much better now, especially the use of JSValue.
Your help is much appreciated.

Regards


On Thu, Feb 19, 2009 at 5:10 PM, William Hesse <[email protected]> wrote:

> The implementation of object and value types in V8 is not necessarily as
> pointers versus data.
> Almost all objects and values are HeapObjects, and all internal references
> to them are through pointers to them.  Objects are mutable HeapObjects, and
> values are immutable HeapObjects.  When a value is replaced by another
> value, the pointer to the first value is replaced by a pointer to a new
> value with different contents.  The old value object may still be around, if
> other variables point to it.
>
> Sometimes a value is wrapped in a JSValue object, which gives it more of
> the properties of a object.
>
> There are some values that are not stored as HeapObjects.  Some number
> values (small integers) are represented by 32-bit tagged non-pointer words,
> stored where a pointer to a HeapObject would normally be.
>
>
>
> On Thu, Feb 19, 2009 at 4:27 PM, Jan de Mooij <[email protected]>wrote:
>
>> Thanks for your reply.
>>
>> I understand JavaScript value/reference semantics though, but not the
>> implementation of it in V8.
>> I was wondering where the difference between value and reference types is
>> made. I suppose reference-types (JavaScript object and arrays) are
>> implemented as a reference-to-object whereas primitives directly contain the
>> value, but I couldn't find this anywhere. For example: in objects.h
>> HeapNumber and Array both derive from HeapObject, but HeapNumber is a
>> value-type (I suppose) whereas Array is a reference type.
>>
>> Thanks,
>> Jan
>>
>>
>> On Thu, Feb 19, 2009 at 4:00 PM, William Hesse <[email protected]>wrote:
>>
>>> JavaScript objects, primitive values, and properties are all very
>>> different, and should
>>> be explained well in good JavaScript books.  The simplest way to achieve
>>> what you
>>> want (two variables aliased to the same information) is:
>>>
>>> var a = new Object();
>>> var b = a
>>> // a and b point to the same object.  That object's properties can be
>>> created and changed.
>>> a.x = 3;
>>> // b.x == 3 and a.x == 3
>>> b.x = 5;
>>> // b.x == 5 and a.x == 5
>>>
>>> Only a property of an object can be changed without changing the object's
>>> identity.
>>> Two variables or properties can point to the same object.
>>>
>>> Hope this helps,
>>> Bill Hesse
>>>
>>>
>>> On Wed, Feb 18, 2009 at 11:08 PM, Jan de M. <[email protected]>wrote:
>>>
>>>>
>>>> Hello,
>>>>
>>>> First, thanks for creating this great engine. I am evaluating using it
>>>> for one of my projects, so I started reading the source and I could
>>>> figure out most things myself, but I still don't quite understand how
>>>> variables, values and objects relate to each other. See this code, for
>>>> example:
>>>>
>>>> var a = 0;
>>>> var b = 1;
>>>>
>>>> This creates two locals, but is there any mapping from variable to
>>>> memory address? I found the SymbolTable class but I don't see how it
>>>> is used here. For example, would it be possible to let a point to the
>>>> exact same memory location (object) as b?
>>>>
>>>> Any help would be appreciated.
>>>>
>>>> Jan
>>>>
>>>>
>>>
>>>
>>> --
>>> We can IMAGINE what is not
>>>
>>> >>>
>>>
>>
>
>
> --
> We can IMAGINE what is not
>

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to