This is rebased on top of D2818 and D2817.
Changes:
Javascript "GUI Object", counterparts to C++ objects, are now [[ https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Proxy | Proxy Objects ]]. Reasoning:
- We don't have any actual JS object, so our "JS GUI Objects" are really just proxying calls to the C++ objects. It makes semantic sense.
- SM devs recommend it (see public/Proxy.h comment on overloading JSClassOps or Proxy objects)
- On that note, DOM objects are implemented as Proxies in Firefox, and our GUI objects are basically that.
- They would have also needed some migrating for SM52 which this removes the need for
See D1781 for a slightly longer argument.
Function-parameters are no longer defined per-object or on the "global" prototype. They are created by a "GuiObjectFactory", of which there can exist several, and are created once for this class of object. When in the "get" hook, they are returned, much like settings, when appropriate.
Why this change?
It lets us define function on some subtypes only, removing the need for workarounds introduced in D2136 and likely to-be-introduced in D1781 (virtual functions on IGUIObject).
----
Side-effects:
- This de-activates RTTI everywhere, except for AtlasUI.
----
This follows experiments on D1781, and incidentally D2136.