Trivial. Since symbols are always allocated in the atoms compartment and all
compartments are allowed to have direct references to them, Compartment::wrap
on a symbol is a no-op.
--HG--
extra : rebase_source : 2f51ff0b3870885de8c6ef6a82efa7398e17d5e8
Symbols are not yet supported as property keys at this point in the stack. The
work here is to pass symbol pointers around in Ion JIT code unboxed.
The baseline compiler doesn't need much new code. A few kinds of ICs need to
know all the primitive types.
--HG--
extra : rebase_source : 3addcd18e913e5879b0ee3700ecf9660b14b1e05
This exposes a new primitive type to scripts for the first time since
JavaScript first shipped in Netscape 2, over 13 years ago.
The tests focus on identity, equality, and being able to pass a symbol around
as a value. Of course the point of symbols is that they can be property keys,
but that will have to wait for a later patch in this series.
--HG--
extra : rebase_source : c22cf4b774cca8e7c9f6c757079e054a6eb0f307
Layout: js/src/vm/Symbol.h defines the new class JS::Symbol. JS::Symbol is the
same size as JSString on all platforms, because the allocator does not support
smaller allocations.
Allocation: Since the purpose of symbols is to serve as property keys, they are
always allocated in the atoms compartment.
We take a lock when allocating. This could probably be replaced with a
main-thread-only assertion. However, if atom allocation is not already a
bottleneck, symbol allocation probably never will be.
Symbols are given their own finalize-class in the GC. This means we allocate a
page per zone for symbols, even though they are only ever allocated in the
atoms zone. Terrence thought this could be easily fixed later. It should be; we
never touch the page, but a 32-bit virtual address space does not just have
infinite pages to spare.
A jsapi-test exercises the new symbol allocation code. A few oddities in
jsapi-tests are fixed in passing.
Discussion after review led to some new assertions about minimum object size in
AllocateObject and AllocateNonObject.
--HG--
extra : rebase_source : 45abb651d3b1b493d77a5dd0eb554f96b058c63a
The API for symbol Values is much like the API for strings.
The implementation behind all this is in a later patch. Here, a class
JS::Symbol is declared, but not defined anywhere yet.
The constants being deleted from js/public/Value.h probably haven't been used
since Tracemonkey days.
--HG--
extra : rebase_source : 5b2d0cc4d99223483e850ee80913eef3854c427c
JSVAL_TYPE_SYMBOL is inserted between STRING and NULL, rather than added at the
end, in order to preserve all the inequality relations on JSValueTypes used
throughout Value.h. (Search the header for the operators < > <= >=.)
Otherwise, this pretty much just works. Some details of Ion snapshot layout
had to change to accommodate 4-bit types.
--HG--
extra : rebase_source : e3141e6a9ee32ef563dab43a4942a9e67d234865