mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 05:13:58 -07:00
JSAutoRequest is required before calling into most JSAPI methods, for GC reasons. Calling it is required and fragile as one must not forget. Further, SM52 and later make manipulating JSContext* dangerous as that can cross Compartment(Realm in SM68) barriers (and ScriptInterface now matches a Compartment). The solution to both problems is to avoid using JSContext* in 0 A.D. itself. To achieve this, a Request class is introduced, and must be used to access a JSContext* from a scriptInterface. Further, Request is passed to other ScriptInterface functions isntead of JSContext*, making it obvious that the caller has already called it, reducing errors and redundant JSAutoRequest calls. Only JSNative functions now get a naked JSContext* without protection, but the likelihood of forgetting a request is lower since many ScriptInterface functions now expect it. JSContext* is directly passed to JSAPI functions only. Part of the SM52 migration, stage: SM45 compatible Based on a patch by: Itms Tested By: Freagarach Refs #4893 Differential Revision: https://code.wildfiregames.com/D3088 This was SVN commit r24176. |
||
|---|---|---|
| .. | ||
| tests | ||
| NativeWrapperDecls.h | ||
| NativeWrapperDefns.h | ||
| ScriptConversions.cpp | ||
| ScriptConversions.h | ||
| ScriptEngine.h | ||
| ScriptExtraHeaders.h | ||
| ScriptInterface.cpp | ||
| ScriptInterface.h | ||
| ScriptRuntime.cpp | ||
| ScriptRuntime.h | ||
| ScriptStats.cpp | ||
| ScriptStats.h | ||
| ScriptTypes.h | ||