There are several changes here:
1) Adds some MutableThis methods to Optional, Nullable, and dictionaries to
effectively allow doing a const_cast without knowing the actual type being
templated over. I needed this because I do not in fact know that type in
the relevant code. I'm open to suggestions for a better name for this
method.
2) Adds some operator& to RootedJSValue to make it look more like a JS::Value,
and in particular so I can JS_WrapValue the thing in it.
3) Adds a Slot() method to NonNullLazyRootedObject, just like NonNull has.
4) Adds an operator& to LazyRootedObject to make it look more like JSObject* so
I can JS_WrapObject the thing in it.
5) Implements the actual rewrapping of the arguments into the content compartment.
6) Fixes a small preexisting bug in which we didn't look at named constructors
in getTypesFromDescriptor (this was causing my tests to not compile).
7) Changes Xrays to not enter the content compartment when calling a WebIDL
constructor.
8) Adds some friend API to report things as not being functions.
Although this patch contains some updates to Makefile.in, I am no longer using it at all. I now run analyze.py for better control, though note that it depends on loading in some configuration settings that are hardcoded to my environment.
This patch also contains a number of updates to the annotations.
--HG--
extra : rebase_source : ebd4deb590fb9fde4532bdf45214ffca117e1c3a
More random details:
Various JIT components required updating for this. In the case of some
methodjit bits, this meant simply disabling those optimizations. This
patch also, passing, improves the Array.prototype.push method's
fast-path to work for any number of provided arguments, not just one.
The patch also fixes a few pre-existing bugs in how array length setting
works and includes the appropriate tests. (If anyone notices, it's
because they were a test in a test suite.) I also added a ParallelArray
test that verifies that arrays with non-writable length function
correctly in parallel code. We bail before getting there now, because
Object.defineProperty isn't parallel-friendly, but if it ever becomes
so, hopefully the test will start failing. Hello, is this thing on?
There are some other uses of ObjectIsNativeWrapper in other scriptable helpers
that are tempting to remove as well, but it's probably just better to wait for
that stuff to just go away. Given that the issue we're running into here is
Window-specific, there's not a pressing need to fix the other stuff.
Right now, it sometimes fills out |desc|, and sometimes just defines the property
on the holder. This can get confusing, so let's refine the semantics here and
describe them in a big comment.
The current setup is just an artifact of how it used to be before I refactored
Xrays. Have it as a virtual trap is more flexible since it allows us to invoke
the right trap by just calling GetXrayTraits(wrapper) from non-templatized code.