Global objects in the browser are generally windows, the types of whose properties are currently unknown to inference. To understand the types of global variables in browser scripts (pretty critical for perf!), we need to understand the types of the windows.
Keep enough type information around in XPConnect to track the types of window object properties (we still don't know anything about DOM nodes and DOM-related functions ('alert' etc.) and treat them as generic objects and functions). Main things this does:
- Make a unique type for the initial prototypes of window objects, which were previously unknown generic objects.
- Allow JSAPI clients to splice new prototypes onto objects with singleton types. The proto on the type object is updated in place without needing to change the type of the holding JSObject.
Oversight where we didn't mark type objects as unknown when splicing in a prototype with unknown properties. This hit on the GlobalScopePolluter, which this patch fixes up.
Add a read barrier for types when getting properties from shapes with non-standard getters. Previously we just asserted and needed these getters to add the types manually.
This is needed to handle various quickstub getters getting properties from window objects, would rather put the type management stuff behind the API rather than mess around with lots of client code (not just quickstubs) to add types in the right places.