From 28e394e650f33fa3afbe8ebafeb0766235979813 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 17:42:09 +0300 Subject: [PATCH 01/58] docs: plan the quickjs-ng migration com.reactunity.quickjs binds unity-jsb's fork of Bellard-era QuickJS. The shipped DLL exports JS_NewBigDecimal and JSB_ATOM_BigFloatEnv and has no JS_SetModuleLoaderFunc2; quickjs-ng deleted BigDecimal and BigFloat outright. They are different engines, not two versions of one, and both of our upstreams are dormant. The driver is asynchronous module loading - the spec's HostLoadImportedModule, which lets a host fetch modules over a network without blocking a frame. It is implemented on gkurt/quickjs and cannot reach Unity until this migration lands. MIGRATION.md records the measured surface rather than an estimate: which of the 137 P/Invoke names survive as-is, which changed signature in ways that compile clean and return garbage, and which subsystems can simply go. Also records the one question grep could not settle, and how to settle it with a single build. --- CLAUDE.md | 2 + unity/quickjs/MIGRATION.md | 158 ++++++++++++++++++++++++++++++++ unity/quickjs/MIGRATION.md.meta | 7 ++ 3 files changed, 167 insertions(+) create mode 100644 unity/quickjs/MIGRATION.md create mode 100644 unity/quickjs/MIGRATION.md.meta diff --git a/CLAUDE.md b/CLAUDE.md index 6e2352b2..22595728 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -142,6 +142,8 @@ The C# side of that call surface is `unity/core/Runtime/Core/ReactUnityBridge.cs `unity/core/Runtime/Scripting/` defines `IJavaScriptEngine` plus DOM shims (`DomProxies/` — `fetch`, `XMLHttpRequest`, `WebSocket`, `localStorage`, `URL`). Concrete engines ship as separate UPM packages so a project pulls in only one native binary: `com.reactunity.quickjs` (recommended), `jint` (pure C#, slower), `clearscript` (V8). +`com.reactunity.quickjs` binds unity-jsb's fork of **Bellard-era QuickJS**, not quickjs-ng — the two are different engines, not two versions of one, and the difference is load-bearing for anything touching `Runtime/Source/Native`. [unity/quickjs/MIGRATION.md](unity/quickjs/MIGRATION.md) has the measured plan for moving to quickjs-ng, which is what unblocks asynchronous module loading. Read it before changing that binding. + ### Styling `unity/core/Runtime/Styling/` implements a CSS subset over Yoga flexbox. Note for anything UI-facing: **flex direction defaults to `column`**, not `row`; CSS cannot style SVG icons from libraries like `react-icons` (use their `color`/`size` props); emoji are not reliably supported. diff --git a/unity/quickjs/MIGRATION.md b/unity/quickjs/MIGRATION.md new file mode 100644 index 00000000..a3f1bd0a --- /dev/null +++ b/unity/quickjs/MIGRATION.md @@ -0,0 +1,158 @@ +# Migrating `com.reactunity.quickjs` to quickjs-ng + +Work in progress on branch `quickjs-ng-migration`. A rendered version of this plan, with the +full measured tables, is at . + +## Why + +This package binds [unity-jsb](https://github.com/ialex32x/unity-jsb)'s fork of **Bellard-era +QuickJS**, not [quickjs-ng](https://github.com/quickjs-ng/quickjs). `dumpbin -exports` on the +shipped `Plugins/QuickJS/x64/quickjs.dll` proves it: `JS_NewBigDecimal` and +`JSB_ATOM_BigFloatEnv` are present, `JS_SetModuleLoaderFunc2` is not. quickjs-ng deleted BigDecimal +and BigFloat outright. + +Both upstreams are dormant. The immediate driver is **asynchronous module loading** — the spec's +`HostLoadImportedModule`, which lets a host fetch modules over a network without blocking. It is +implemented and tested on branch `async-module-loading` +(28 assertions, clean under ASan and `QJS_ENABLE_GC_STRESS`), and it cannot reach Unity until this +migration lands. Bellard-era QuickJS has no async loader and never will. + +A proven C# binding for the new API — P/Invoke declarations, UTF-8 marshalling, delegate rooting, +`GCHandle` handling, and a `QuickJSModuleLoader` shaped like `JintModuleLoader` — lives outside this +repo at `S:/Work/Unity/quickjs-ng-csharp` (23 assertions passing against a quickjs-ng DLL on +.NET 8). Use it as the reference in phase 3. + +## Measured surface + +137 distinct P/Invoke names across `Runtime/Source/Native`: + +| Group | Count | Disposition | +|---|---:|---| +| `JS_*` — real QuickJS API | 72 | 60 exported by ng unchanged; 2 inline (`JS_NewFloat64`, `JS_NewString`) need a shim; 10 absent and all free — see below | +| `JSB_*` / `jsb_*` — unity-jsb C shim | 46 | None exist in ng. 41 live, 5 dead. **This is the migration.** | +| `JSB_ATOM_*` | 16 | Only 16 of the ~1000 the DLL exports are used | +| `js_*` — allocator | 3 | `js_malloc`, `js_free`, `js_strdup` all exported by ng | + +Every one of the 10 absent `JS_*` costs nothing: `JS_GetPropertyInternal`/`JS_SetPropertyInternal` +have zero callers; the five `JS_*Debugger*` plus `JS_SetLogFunc` are `#if JSB_WITH_V8_BACKEND` with +no-op stubs in the `#else`; `JS_SetBaseUrl` is a real P/Invoke only under +`UNITY_WEBGL && !UNITY_EDITOR` and lives in the jslib; `JS_AddIntrinsicOperators` is already stubbed +under `JSB_NO_BIGNUM`, which ng makes permanent. Nothing in the QuickJS path touches +BigFloat/BigDecimal either. + +Where the 41 live shim functions are consumed: + +| Directory | Sites | What it is | +|---|---:|---| +| `Binding/ValueTypes/` | 60 | Unity struct marshalling (`Values_Vector3`, `Values_Color`, …) — the `jsb_get/set_float_4` fast paths. **The open question.** | +| `Binding/` root | 14 | Runtime reflection binder (`DynamicType`, `DynamicMethod`, `DefaultBinder`). Used. | +| `Source/` root | 13 | `ScriptRuntime`, `ScriptContext`. Used. | +| `Source/Unity/` | 12 | Unity integration. Used. | +| `Source/Utils/`, `Source/Experimental/` | 4 | Used. | +| `Binding/Editor/` | **0** | The codegen. Pure C#, no native dependency. | + +## What fails silently + +Missing symbols throw on first call. **Changed** symbols keep working and return nonsense. Seven of +those, in two patterns — do not port a declaration by eye: + +| Symbol | Current C# | quickjs-ng | Failure | +|---|---|---|---| +| `JS_IsArray` | `int (ctx, val)` | `bool (val)` | arity + width | +| `JS_IsError` | `JS_BOOL (ctx, val)` | `bool (val)` | arity + width | +| `JS_IsFunction` | `JS_BOOL (ctx, val)` | `bool (ctx, val)` | width | +| `JS_IsConstructor` | `JS_BOOL (ctx, val)` | `bool (ctx, val)` | width | +| `JS_IsJobPending` | `int (rt)` | `bool (rt)` | width | + +`JS_BOOL` is `Int32` here; ng returns C `bool`. On x64 a `bool` return sets only `AL` and the upper +three bytes of `EAX` are undefined — usually truthy, occasionally not. Every one needs +`[return: MarshalAs(UnmanagedType.U1)] bool`. ng's header has 26 `bool`-returning functions, so this +recurs as the surface grows. + +`JS_IsArray` and `JS_IsError` also **lost their `JSContext*`**, which shifts the `JSValue` into the +wrong register slot. `JS_IsPromise` is a third instance, hit while writing the reference binding: it +compiled clean and returned the wrong answer. + +Also silent: **`JS_TAG_FLOAT64` is 8 in ng and 7 in Bellard** — the enum gained `STRING_ROPE` and +`SHORT_BIG_INT`. Re-derive every tag from the new header rather than copying it forward. + +## The second implementation + +`Plugins/QuickJS/WebGL/jsbplugin.jslib` reimplements 125 functions — 122 overlapping the C# +P/Invoke surface — on the browser's own engine, compiled from 1,824 lines of TypeScript in ES5-safe +syntax because Emscripten requires it. There is no QuickJS on WebGL at all, so every signature +change and every tag value has to land here independently. Budget it as a peer of the C# work. + +The async loader is *easier* here: the browser has real promises and real `import()`, so +`JS_EvalModuleAsync` is a thin `async function` rather than a state machine. + +## Phases + +**Gate 0 — the native build pipeline.** Twelve binaries ship (3 Android ABIs, iOS `.a`, macOS +bundle, 4 WSA architectures, Linux x64, Windows x64 + x86) and the repo has **no sources and no +build script** for any of them — they are unity-jsb prebuilts. Nothing downstream is verifiable +until this exists. Fork unity-jsb's C shim, repoint at quickjs-ng, stand up a CI matrix. ng helps: +proper CMake with real cross-compilation and a supported wasm target. +*Exit: twelve artifacts built reproducibly in CI from a tagged ng commit, Windows x64 loading in the Editor.* + +**Phase 1 — subtract, against the old DLL.** Partly done on this branch (see below). Remaining: drop +`Binding/Editor/`, which needs `BindingManager.Generate()` split first — `QuickJSEngine.cs:83` calls +`bm.Generate(TypeBindingFlags.None)`, which still constructs a `CodeGenerator` and runs the full +per-type traversal into disabled buffers because no `codegenCallback` is passed. Then run the +`ValueTypes/` experiment. All of it against the **old** DLL, one subsystem per commit, suite green +between each — never bundle subtraction with migration. +*Exit: repo compiles and `pnpm unity test tests` passes against the old DLL with those subsystems gone.* + +**Phase 2 — port the C shim.** Whatever survives the `ValueTypes/` experiment — 18 to 41 `JSB_*` +functions — against ng headers, plus the two inline shims and the 16 atoms. +*Exit: `libquickjs` builds against ng and exports everything the C# layer names.* + +**Phase 3 — rewrite the C# declarations from the header.** Not by eye, not by editing in place. +Generate or hand-check every declaration against `quickjs.h`, fixing `bool` widths and dropped +contexts. Re-derive the tag constants. +*Exit: Unity suite passes on Windows against the ng DLL **and** a desktop IL2CPP player build runs.* + +**Phase 4 — mirror in the jslib, then wire the async loader.** Bring `jsbplugin.ts` into agreement, +then install `JS_SetModuleLoaderFuncAsync`, port `QuickJSModuleLoader` onto +`Dispatcher.StartDeferred` + `UnityWebRequest`, set `EngineCapabilities.ModuleResolution`, and +retire `ModuleCompat.RewriteDynamicImports` for QuickJS. +*Exit: kitchen-sink loads a module graph over HTTP with no blocking frame, on desktop and in WebGL.* + +## The open question: can `Binding/ValueTypes/` go? + +It is 60 of the 74 shim call-sites, and grep cannot settle it. ReactUnity calls only three `Values` +members — `js_get_classvalue` (6×), `register_type_caster` (4×), `PushArray` (1×) — registers its own +type casters, and its QuickJS files contain no direct `Vector2`/`Vector3`/`Color` references. But +`Values` is a partial class spread across all sixteen `Values_*.cs`, which may register into a +generic dispatch table those calls consult. + +**Settle it empirically:** delete `Binding/ValueTypes/`, compile against the **old** DLL, run +`pnpm unity test tests`. Green means the shim drops from 41 functions to 18 and the struct fast paths +never need porting. Red gives the exact dependency list. One build, and it is the difference between +porting 18 functions and 41. + +## Risks + +- **IL2CPP diverges from CoreCLR.** The reference binding runs on .NET 8; struct-by-value and + reverse P/Invoke are exactly where Mono and IL2CPP differ. Made a phase 3 exit criterion, not a + phase 4 discovery. +- **No sanitizer off desktop.** ASan and GC-stress cover x64 only. Test every new interop behaviour + on desktop under ASan first; mobile is validation, never discovery. +- **Two implementations drifting.** C# and the jslib must agree on 122 signatures and every tag, and + nothing enforces it — WebGL just misbehaves. Generate both from one description if possible; + failing that, a test asserting tags and arities match across backends. +- **The async loader is not upstream yet.** Pin a tagged commit of `gkurt/quickjs`, not a branch, and + pursue the upstream PR in parallel. Coordinate with quickjs-ng#1522, whose author proposed a + dynamic-import-only version of the same feature. + +## Done on this branch + +Phase 1 subtractions that were verifiable without touching the engine: + +- **The V8 backend.** No `v8-bridge` binary ships anywhere in `Plugins/`, so every + `JSB_WITH_V8_BACKEND` path referenced a DLL that does not exist. ClearScript covers V8. +- **The debug server.** All five `JS_*Debugger*` entry points sat behind `JSB_WITH_V8_BACKEND` with + no-op stubs in the `#else` — `JS_OpenDebugger` was `{ }`, `JS_IsDebuggerConnected` was `return 0`. + Never functional on QuickJS, so removing it is not a regression. +- **Dead API.** `JS_GetPropertyInternal`/`JS_SetPropertyInternal` (zero callers) and the five shim + declarations with no callers. diff --git a/unity/quickjs/MIGRATION.md.meta b/unity/quickjs/MIGRATION.md.meta new file mode 100644 index 00000000..69502b7a --- /dev/null +++ b/unity/quickjs/MIGRATION.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d1f752cf1e43eec4292f874afdce2adf +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From e5339643f869ebea51b57a8f8c7fb9bcccc43c27 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 17:44:56 +0300 Subject: [PATCH 02/58] refactor(quickjs): drop the v8-bridge backend unity-jsb could build against either QuickJS or its own v8-bridge, selected by JSB_WITH_V8_BACKEND. No v8-bridge binary has ever shipped in this package - Plugins/QuickJS holds only libquickjs - so every one of those branches referenced a DLL that does not exist. ClearScript is how ReactUnity offers V8, and it is a maintained upstream rather than a fork we would have to carry. Resolving the symbol to false throughout, which also removes the engine picker in ScriptEngineStatsWindow: it had one option left. --- .../Runtime/Source/Native/JSApi+QuickJS.cs | 4 +- unity/quickjs/Runtime/Source/Native/JSApi.cs | 53 +------------------ unity/quickjs/Runtime/Source/ScriptContext.cs | 11 +--- .../Runtime/Source/ScriptRuntime+Module.cs | 8 +-- unity/quickjs/Runtime/Source/ScriptRuntime.cs | 10 ---- .../Unity/Editor/ScriptEngineStatsWindow.cs | 20 +------ 6 files changed, 7 insertions(+), 99 deletions(-) diff --git a/unity/quickjs/Runtime/Source/Native/JSApi+QuickJS.cs b/unity/quickjs/Runtime/Source/Native/JSApi+QuickJS.cs index 464018b2..eec68c79 100644 --- a/unity/quickjs/Runtime/Source/Native/JSApi+QuickJS.cs +++ b/unity/quickjs/Runtime/Source/Native/JSApi+QuickJS.cs @@ -1,5 +1,4 @@ -#if !JSB_WITH_V8_BACKEND -using System; +using System; using System.Runtime.InteropServices; using System.Text; @@ -29,4 +28,3 @@ public static void JS_SetModuleLoaderFunc(JSRuntime rt, JSModuleNormalizeFunc mo #endregion } } -#endif diff --git a/unity/quickjs/Runtime/Source/Native/JSApi.cs b/unity/quickjs/Runtime/Source/Native/JSApi.cs index 86b42c5a..8b160d34 100644 --- a/unity/quickjs/Runtime/Source/Native/JSApi.cs +++ b/unity/quickjs/Runtime/Source/Native/JSApi.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -89,7 +89,7 @@ public partial class JSApi public const int CS_JSB_VERSION = 0xa; // expected dll version public static readonly int SO_JSB_VERSION; // actual dll version -#if JSB_NO_BIGNUM || ((UNITY_WSA || UNITY_WEBGL) && !UNITY_EDITOR) || JSB_WITH_V8_BACKEND +#if JSB_NO_BIGNUM || ((UNITY_WSA || UNITY_WEBGL) && !UNITY_EDITOR) public const bool IsOperatorOverloadingSupported = false; #else public const bool IsOperatorOverloadingSupported = true; @@ -97,12 +97,8 @@ public partial class JSApi #if (UNITY_IPHONE || UNITY_WEBGL) && !UNITY_EDITOR public const string JSBDLL = "__Internal"; -#else -#if JSB_WITH_V8_BACKEND - public const string JSBDLL = "v8-bridge"; #else public const string JSBDLL = "quickjs"; -#endif #endif public const int JS_TAG_FIRST = -11; /* first negative tag */ @@ -572,13 +568,8 @@ public static unsafe JSValue JS_Invoke(JSContext ctx, JSValueConst this_val, JSA [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern int JS_ExecutePendingJob(JSRuntime rt, out JSContext pctx); -#if JSB_WITH_V8_BACKEND - //TODO unity-jsb: [IMPORTANT] implement it in v8-bridge later - public static int JS_IsJobPending(JSRuntime rt, out JSContext pctx) { return 0; } -#else [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern int JS_IsJobPending(JSRuntime rt, out JSContext pctx); -#endif [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern int JS_ToBool(JSContext ctx, JSValueConst val); @@ -893,52 +884,12 @@ public static IntPtr JS_ToCStringLen(JSContext ctx, out size_t len, JSValue val) #region diagnostics -#if JSB_WITH_V8_BACKEND - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe void JS_OpenDebugger(JSContext ctx, int port); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe JS_BOOL JS_IsDebuggerConnected(JSContext ctx); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe JS_BOOL JS_IsDebuggerOpen(JSContext ctx); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe void JS_CloseDebugger(JSContext ctx); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - private static extern unsafe void JS_SetLogFunc(JSContext ctx, IntPtr func); - public static void JS_SetLogFunc(JSContext ctx, JSLogCFunction cb) - { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) - GCHandle.Alloc(cb); -#endif - var fn = Marshal.GetFunctionPointerForDelegate(cb); - JS_SetLogFunc(ctx, fn); - } - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - private static extern unsafe void JS_SetWaitingForDebuggerFunc(JSContext ctx, IntPtr func); - public static void JS_SetWaitingForDebuggerFunc(JSContext ctx, JSWaitingForDebuggerCFunction cb) - { - if (cb != null) - { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) - GCHandle.Alloc(cb); -#endif - var fn = Marshal.GetFunctionPointerForDelegate(cb); - JS_SetWaitingForDebuggerFunc(ctx, fn); - } - else - { - JS_SetWaitingForDebuggerFunc(ctx, IntPtr.Zero); - } - } -#else public static void JS_OpenDebugger(JSContext ctx, int port) { } public static JS_BOOL JS_IsDebuggerConnected(JSContext ctx) { return 0; } public static JS_BOOL JS_IsDebuggerOpen(JSContext ctx) { return 0; } public static void JS_CloseDebugger(JSContext ctx) { } public static void JS_SetLogFunc(JSContext ctx, JSLogCFunction cb) { } public static void JS_SetWaitingForDebuggerFunc(JSContext ctx, JSWaitingForDebuggerCFunction cb) { } -#endif // end JSB_WITH_V8_BACKEND [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern unsafe void JS_ComputeMemoryUsage(JSRuntime rt, JSMemoryUsage* s); diff --git a/unity/quickjs/Runtime/Source/ScriptContext.cs b/unity/quickjs/Runtime/Source/ScriptContext.cs index b17e7375..5bd6a465 100644 --- a/unity/quickjs/Runtime/Source/ScriptContext.cs +++ b/unity/quickjs/Runtime/Source/ScriptContext.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; @@ -703,16 +703,7 @@ public unsafe JSValue LoadModuleFromSource(byte[] source, string resolved_id, st fixed (byte* resolved_id_ptr = resolved_id_bytes) { var input_len = (size_t)(input_bytes.Length - 1); -#if JSB_WITH_V8_BACKEND - JSValue func_val; - var filename_bytes = TextUtils.GetNullTerminatedBytes(filename.Replace('/', '\\')); // normalize for v8 debug protocol - fixed (byte* filename_ptr = filename_bytes) - { - func_val = JSApi.JS_EvalSource(ctx, input_ptr, input_len, filename_ptr); - } -#else var func_val = JSApi.JS_EvalSource(ctx, input_ptr, input_len, resolved_id_ptr); -#endif if (func_val.IsException()) { diff --git a/unity/quickjs/Runtime/Source/ScriptRuntime+Module.cs b/unity/quickjs/Runtime/Source/ScriptRuntime+Module.cs index c3fafc82..c5c91ef0 100644 --- a/unity/quickjs/Runtime/Source/ScriptRuntime+Module.cs +++ b/unity/quickjs/Runtime/Source/ScriptRuntime+Module.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Text; @@ -114,7 +114,6 @@ public static unsafe JSValue EvalSource(JSContext ctx, byte[] source, string fil if (bModule) { -#if !JSB_WITH_V8_BACKEND // Compile before running so import.meta can be filled in. QuickJS only // populates it for modules that came through module_loader, which leaves // import.meta.url undefined on a module evaluated directly from source. @@ -125,16 +124,12 @@ public static unsafe JSValue EvalSource(JSContext ctx, byte[] source, string fil // JS_EvalFunction takes ownership of mod_val. return JSApi.JS_EvalFunction(ctx, mod_val); -#else - return JSApi.JS_EvalModule(ctx, input_ptr, input_len, fn_ptr); -#endif } return JSApi.JS_EvalSource(ctx, input_ptr, input_len, fn_ptr); } } -#if !JSB_WITH_V8_BACKEND [MonoPInvokeCallback(typeof(JSModuleNormalizeFunc))] public static IntPtr module_normalize(JSContext ctx, string module_base_name, string module_name, IntPtr opaque) { @@ -244,6 +239,5 @@ private static void _SetImportMeta(JSContext ctx, JSValue mod_val, string url) JSApi.JS_DefinePropertyValue(ctx, meta, context.GetAtom("main"), JSApi.JS_NewBool(ctx, false)); JSApi.JS_FreeValue(ctx, meta); } -#endif } } \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/ScriptRuntime.cs b/unity/quickjs/Runtime/Source/ScriptRuntime.cs index 3aea9fb7..be432d65 100644 --- a/unity/quickjs/Runtime/Source/ScriptRuntime.cs +++ b/unity/quickjs/Runtime/Source/ScriptRuntime.cs @@ -357,9 +357,7 @@ public void Initialize(ScriptRuntimeArgs args) throw new NullReferenceException(nameof(fileSystem)); } -#if !JSB_WITH_V8_BACKEND args.withDebugServer = false; -#endif args.asyncManager.Initialize(_mainThreadId); _isValid = true; @@ -380,9 +378,7 @@ public void Initialize(ScriptRuntimeArgs args) } #endif JSApi.JSB_SetRuntimeOpaque(_rt, (IntPtr)_runtimeId); -#if !JSB_WITH_V8_BACKEND JSApi.JS_SetModuleLoaderFunc(_rt, module_normalize, module_loader, IntPtr.Zero); -#endif CreateContext(args.apiBridge, args.withDebugServer, args.debugServerPort); _pathResolver = args.pathResolver; _asyncManager = args.asyncManager; @@ -1018,10 +1014,8 @@ public void Destroy() GC.WaitForPendingFinalizers(); ExecutePendingActions(true); -#if !JSB_WITH_V8_BACKEND //TODO unity-jsb: jsvalue's gc finalizer can't be certainly invoked when the jsvalue hasn't any reference, we just do not calling cache.Destroy normally for now. _objectCache.Destroy(); -#endif // GC.Collect(); @@ -1061,10 +1055,6 @@ public void Destroy() _logger?.Write(LogLevel.Assert, "gc object leaks"); } -#if JSB_WITH_V8_BACKEND - //TODO unity-jsb: jsvalue's gc finalizer can't be certainly invoked when the jsvalue hasn't any reference, we just do not calling cache.Destroy normally for now. - _objectCache.Destroy(); -#endif var id = _runtimeId; _runtimeId = -1; _rt = JSRuntime.Null; diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs b/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs index f0bd59d6..e1b8055b 100644 --- a/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs +++ b/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs @@ -1,4 +1,4 @@ -#if !JSB_UNITYLESS +#if !JSB_UNITYLESS using System; using System.Linq; using System.Collections.Generic; @@ -11,7 +11,6 @@ namespace QuickJS.Unity public class ScriptEngineStatsWindow : BaseEditorWindow, IHasCustomMenu { - private static readonly string[] _backends = { "quickjs", "v8-bridge" }; private static GUIContent GUIContent_Stats_Operator = new GUIContent("Operator", "Is operator overloading supported?"); private int _categoryIndex; @@ -453,22 +452,7 @@ protected override void OnPaint() Block("Control", () => { EditorGUI.BeginDisabledGroup(EditorApplication.isCompiling); - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.LabelField("Engine"); - var selectedBackend = Array.IndexOf(_backends, Native.JSApi.JSBDLL); - var selectedBackendNew = GUILayout.Toolbar(selectedBackend, _backends); - if (selectedBackendNew != selectedBackend) - { - if (EditorUtility.DisplayDialog("Switching backend", "Are you sure to switch to " + _backends[selectedBackendNew] + "?", "Confirm", "Cancel")) - { - UnityHelper.SetDefineSymbol("JSB_WITH_V8_BACKEND", _backends[selectedBackendNew] != "quickjs"); - } - } - EditorGUILayout.EndHorizontal(); - if (_backends[selectedBackendNew] != "quickjs") - { - EditorGUILayout.HelpBox("v8-bridge is still in experimental stage, the stability and the performance are unsure.", MessageType.Warning); - } + EditorGUILayout.LabelField("Engine", Native.JSApi.JSBDLL); EditorGUI.EndDisabledGroup(); var old_isDebugMode = Native.JSApi.IsDebugMode(); From 33d8a6c46c2d3469326f4471a7b0c947721080fe Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 17:47:46 +0300 Subject: [PATCH 03/58] refactor(quickjs): drop the debug server The five JS_*Debugger* entry points and JS_SetLogFunc only ever existed in the v8-bridge build; the QuickJS build got no-op stubs. Two further layers made them unreachable even in principle: ScriptRuntime.Initialize hardcoded args.withDebugServer = false before anything read it, so the "waiting for debugger" branch could not be taken, and OnDebuggerConnected had no subscribers. So this removes no behaviour. It does remove the impression that QuickJS can be debugged - ScriptRuntimeArgs advertised withDebugServer, waitingForDebugger and debugServerPort, and QuickJSEngine dutifully set all three. Debugging is what ClearScript is for. RaiseDebuggerConnectedEvent is renamed RaiseInitialized, which is what it actually did: fire OnInitializing and OnInitialized. QuickJSEngine still accepts debug and awaitDebugger, since IJavaScriptEngineFactory.Create passes them for every engine, and now ignores them. --- .../Scripting/QuickJS/QuickJSEngine.cs | 5 +-- unity/quickjs/Runtime/Source/Native/JSApi.cs | 17 ---------- unity/quickjs/Runtime/Source/ScriptContext.cs | 17 +--------- unity/quickjs/Runtime/Source/ScriptRuntime.cs | 33 +++---------------- .../Runtime/Source/ScriptRuntimeArgs.cs | 18 +--------- 5 files changed, 8 insertions(+), 82 deletions(-) diff --git a/unity/core/Runtime/Scripting/QuickJS/QuickJSEngine.cs b/unity/core/Runtime/Scripting/QuickJS/QuickJSEngine.cs index 5d3782a9..17dda099 100644 --- a/unity/core/Runtime/Scripting/QuickJS/QuickJSEngine.cs +++ b/unity/core/Runtime/Scripting/QuickJS/QuickJSEngine.cs @@ -1,4 +1,4 @@ -#if !REACT_DISABLE_QUICKJS && REACT_QUICKJS_AVAILABLE +#if !REACT_DISABLE_QUICKJS && REACT_QUICKJS_AVAILABLE #define REACT_QUICKJS #endif @@ -65,13 +65,10 @@ public QuickJSEngine(ReactContext context, bool debug, bool awaitDebugger, Actio Runtime.OnInitialized += Runtime_OnInitialized; Runtime.Initialize(new ScriptRuntimeArgs { - withDebugServer = debug, - waitingForDebugger = awaitDebugger, fileSystem = new DefaultFileSystem(logger), asyncManager = new DefaultAsyncManager(), logger = logger, binder = InvokeReflectBinding, - debugServerPort = 9222, byteBufferAllocator = new QuickJS.IO.ByteBufferPooledAllocator(), pathResolver = new PathResolver(), apiBridge = ApiBridge, diff --git a/unity/quickjs/Runtime/Source/Native/JSApi.cs b/unity/quickjs/Runtime/Source/Native/JSApi.cs index 8b160d34..9e150fd5 100644 --- a/unity/quickjs/Runtime/Source/Native/JSApi.cs +++ b/unity/quickjs/Runtime/Source/Native/JSApi.cs @@ -73,16 +73,6 @@ namespace QuickJS.Native #endif public delegate JSValue JSGetterCFunctionMagic(JSContext ctx, JSValueConst this_val, int magic); -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif - public delegate void JSLogCFunction(int level, [MarshalAs(UnmanagedType.LPStr)] string line); - -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif - public delegate void JSWaitingForDebuggerCFunction(JSContext ctx); - public partial class JSApi { public const int VERSION = 0x010704; @@ -884,13 +874,6 @@ public static IntPtr JS_ToCStringLen(JSContext ctx, out size_t len, JSValue val) #region diagnostics - public static void JS_OpenDebugger(JSContext ctx, int port) { } - public static JS_BOOL JS_IsDebuggerConnected(JSContext ctx) { return 0; } - public static JS_BOOL JS_IsDebuggerOpen(JSContext ctx) { return 0; } - public static void JS_CloseDebugger(JSContext ctx) { } - public static void JS_SetLogFunc(JSContext ctx, JSLogCFunction cb) { } - public static void JS_SetWaitingForDebuggerFunc(JSContext ctx, JSWaitingForDebuggerCFunction cb) { } - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern unsafe void JS_ComputeMemoryUsage(JSRuntime rt, JSMemoryUsage* s); diff --git a/unity/quickjs/Runtime/Source/ScriptContext.cs b/unity/quickjs/Runtime/Source/ScriptContext.cs index 5bd6a465..a5acd2ed 100644 --- a/unity/quickjs/Runtime/Source/ScriptContext.cs +++ b/unity/quickjs/Runtime/Source/ScriptContext.cs @@ -45,28 +45,13 @@ public partial class ScriptContext // id = context slot index + 1 public int id { get { return _contextId; } } - [MonoPInvokeCallback(typeof(JSLogCFunction))] - private static void _JSLog(int level, string line) - { -#if !JSB_UNITYLESS - UnityEngine.Debug.LogFormat("[RAW] {0}", line); -#endif - } - - public ScriptContext(ScriptRuntime runtime, int contextId, Experimental.IJSApiBridge apiBridge, bool withDebugServer, int debugServerPort) + public ScriptContext(ScriptRuntime runtime, int contextId, Experimental.IJSApiBridge apiBridge) { _isValid = true; _runtime = runtime; _apiBridge = apiBridge ?? new Experimental.DefaultJSApiBridgeImpl(); _contextId = contextId; _ctx = JSApi.JS_NewContext(_runtime); - //TODO will be removed later - JSApi.JS_SetLogFunc(_ctx, _JSLog); - if (withDebugServer && debugServerPort > 0) - { - JSApi.JS_OpenDebugger(_ctx, debugServerPort); - runtime.GetLogger()?.Write(LogLevel.Info, string.Format("[EXPERIMENTAL] Debugger is now available with this URL (Windows x64 only): devtools://devtools/bundled/inspector.html?v8only=true&ws=127.0.0.1:{0}/1", debugServerPort)); - } JSApi.JS_SetContextOpaque(_ctx, (IntPtr)_contextId); JSApi.JS_AddIntrinsicOperators(_ctx); _atoms = new AtomCache(_ctx); diff --git a/unity/quickjs/Runtime/Source/ScriptRuntime.cs b/unity/quickjs/Runtime/Source/ScriptRuntime.cs index be432d65..b659dab0 100644 --- a/unity/quickjs/Runtime/Source/ScriptRuntime.cs +++ b/unity/quickjs/Runtime/Source/ScriptRuntime.cs @@ -28,7 +28,6 @@ private class ScriptContextRef /// /// this event will be raised after debugger connected if debug server is used, otherwise it will be raised immediately after OnInitialized /// - public event Action OnDebuggerConnected; public event Action OnAfterDestroy; public event Action OnUpdate; public event Action OnScriptReloading; @@ -316,18 +315,6 @@ private void RaiseScriptReloadedEvent_nothrow(ScriptContext context, string reso } } - [MonoPInvokeCallback(typeof(JSWaitingForDebuggerCFunction))] - private static void _RunIfWaitingForDebugger(JSContext ctx) - { - var runtime = ScriptEngine.GetRuntime(ctx); - if (runtime != null) - { - // wait only once - JSApi.JS_SetWaitingForDebuggerFunc(ctx, null); - runtime.RaiseDebuggerConnectedEvent(); - } - } - // 通用析构函数 [MonoPInvokeCallback(typeof(JSGCObjectFinalizer))] public static void class_finalizer(JSRuntime rt, JSPayloadHeader header) @@ -357,7 +344,6 @@ public void Initialize(ScriptRuntimeArgs args) throw new NullReferenceException(nameof(fileSystem)); } - args.withDebugServer = false; args.asyncManager.Initialize(_mainThreadId); _isValid = true; @@ -379,7 +365,7 @@ public void Initialize(ScriptRuntimeArgs args) #endif JSApi.JSB_SetRuntimeOpaque(_rt, (IntPtr)_runtimeId); JSApi.JS_SetModuleLoaderFunc(_rt, module_normalize, module_loader, IntPtr.Zero); - CreateContext(args.apiBridge, args.withDebugServer, args.debugServerPort); + CreateContext(args.apiBridge); _pathResolver = args.pathResolver; _asyncManager = args.asyncManager; _byteBufferAllocator = args.byteBufferAllocator; @@ -432,18 +418,10 @@ public void Initialize(ScriptRuntimeArgs args) } #endif - if (!args.withDebugServer || !args.waitingForDebugger || args.debugServerPort <= 0 || JSApi.JS_IsDebuggerConnected(_mainContext) == 1) - { - RaiseDebuggerConnectedEvent(); - } - else - { - _logger?.Write(LogLevel.Info, "[EXPERIMENTAL] Waiting for debugger..."); - JSApi.JS_SetWaitingForDebuggerFunc((JSContext)_mainContext, _RunIfWaitingForDebugger); - } + RaiseInitialized(); } - private void RaiseDebuggerConnectedEvent() + private void RaiseInitialized() { if (!_isInitialized) { @@ -451,7 +429,6 @@ private void RaiseDebuggerConnectedEvent() OnInitializing?.Invoke(this); OnInitialized?.Invoke(this); } - OnDebuggerConnected?.Invoke(this); } [MonoPInvokeCallback(typeof(JSInterruptHandler))] @@ -563,7 +540,7 @@ public bool RemoveManagedObject(ObjectCollection.Handle handle) return _objectCollection.RemoveObject(handle); } - private ScriptContext CreateContext(Experimental.IJSApiBridge apiBridge, bool withDebugServer, int debugServerPort) + private ScriptContext CreateContext(Experimental.IJSApiBridge apiBridge) { ScriptContextRef freeEntry; int slotIndex; @@ -582,7 +559,7 @@ private ScriptContext CreateContext(Experimental.IJSApiBridge apiBridge, bool wi freeEntry.next = -1; } - var context = new ScriptContext(this, slotIndex + 1, apiBridge, withDebugServer, debugServerPort); + var context = new ScriptContext(this, slotIndex + 1, apiBridge); freeEntry.target = context; if (_mainContext == null) diff --git a/unity/quickjs/Runtime/Source/ScriptRuntimeArgs.cs b/unity/quickjs/Runtime/Source/ScriptRuntimeArgs.cs index 533a67dc..30370994 100644 --- a/unity/quickjs/Runtime/Source/ScriptRuntimeArgs.cs +++ b/unity/quickjs/Runtime/Source/ScriptRuntimeArgs.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; @@ -15,22 +15,6 @@ namespace QuickJS public struct ScriptRuntimeArgs { - /// - /// [v8-bridge] open debug server automatically after JSContext created - /// - public bool withDebugServer; - - /// - /// the ScriptRuntime will complete the initialization process until the debugger is actually connected. - /// if very early breakpoints are required to be set, 'debugger' should be added to the script to hit before these breakpoints. - /// - public bool waitingForDebugger; - - /// - /// [v8-bridge] the port to listen of the debug server - /// - public int debugServerPort; - public IFileSystem fileSystem; public IPathResolver pathResolver; From 8dfb96f5840c17e2042344e04eacecf2c4162e5e Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 17:49:37 +0300 Subject: [PATCH 04/58] refactor(quickjs): remove three uncalled shim declarations JSB_GetBridgeClassID, jsb_get_int_4 and jsb_set_int_4 have no callers - JSB_GetBridgeClassID appears only inside a commented-out line. Three fewer functions to port to quickjs-ng. Also corrects two claims in MIGRATION.md. JSB_Init and the two *PropertyInternal wrappers looked dead and are not: the search that found them excluded Runtime/Source/Native, which is where their callers live. JSB_Init is the DLL version handshake, and phase 3 has to map *PropertyInternal onto ng'"'"'s JS_GetProperty/JS_SetProperty rather than deleting them. Noted in the doc so the next pass does not repeat the mistake. --- unity/quickjs/MIGRATION.md | 20 +++++++++++++------ .../Source/Native/JSApi+StructValue.cs | 11 +--------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/unity/quickjs/MIGRATION.md b/unity/quickjs/MIGRATION.md index a3f1bd0a..63c2af74 100644 --- a/unity/quickjs/MIGRATION.md +++ b/unity/quickjs/MIGRATION.md @@ -1,4 +1,4 @@ -# Migrating `com.reactunity.quickjs` to quickjs-ng +# Migrating `com.reactunity.quickjs` to quickjs-ng Work in progress on branch `quickjs-ng-migration`. A rendered version of this plan, with the full measured tables, is at . @@ -29,12 +29,14 @@ repo at `S:/Work/Unity/quickjs-ng-csharp` (23 assertions passing against a quick | Group | Count | Disposition | |---|---:|---| | `JS_*` — real QuickJS API | 72 | 60 exported by ng unchanged; 2 inline (`JS_NewFloat64`, `JS_NewString`) need a shim; 10 absent and all free — see below | -| `JSB_*` / `jsb_*` — unity-jsb C shim | 46 | None exist in ng. 41 live, 5 dead. **This is the migration.** | +| `JSB_*` / `jsb_*` — unity-jsb C shim | 46 | None exist in ng. 43 live, 3 dead (removed on this branch). **This is the migration.** | | `JSB_ATOM_*` | 16 | Only 16 of the ~1000 the DLL exports are used | | `js_*` — allocator | 3 | `js_malloc`, `js_free`, `js_strdup` all exported by ng | -Every one of the 10 absent `JS_*` costs nothing: `JS_GetPropertyInternal`/`JS_SetPropertyInternal` -have zero callers; the five `JS_*Debugger*` plus `JS_SetLogFunc` are `#if JSB_WITH_V8_BACKEND` with +Every one of the 10 absent `JS_*` costs nothing except two. `JS_GetPropertyInternal` and +`JS_SetPropertyInternal` are **live** — called from wrapper methods in `JSApi.cs` itself, at lines +231 and 488 — so phase 3 has to map them onto ng's `JS_GetProperty`/`JS_SetProperty`. For the rest: +the five `JS_*Debugger*` plus `JS_SetLogFunc` are `#if JSB_WITH_V8_BACKEND` with no-op stubs in the `#else`; `JS_SetBaseUrl` is a real P/Invoke only under `UNITY_WEBGL && !UNITY_EDITOR` and lives in the jslib; `JS_AddIntrinsicOperators` is already stubbed under `JSB_NO_BIGNUM`, which ng makes permanent. Nothing in the QuickJS path touches @@ -154,5 +156,11 @@ Phase 1 subtractions that were verifiable without touching the engine: - **The debug server.** All five `JS_*Debugger*` entry points sat behind `JSB_WITH_V8_BACKEND` with no-op stubs in the `#else` — `JS_OpenDebugger` was `{ }`, `JS_IsDebuggerConnected` was `return 0`. Never functional on QuickJS, so removing it is not a regression. -- **Dead API.** `JS_GetPropertyInternal`/`JS_SetPropertyInternal` (zero callers) and the five shim - declarations with no callers. +- **Dead API.** Three shim declarations with no callers: `JSB_GetBridgeClassID`, `jsb_get_int_4`, + `jsb_set_int_4`. + +Two things that looked deletable and were not, both because the first caller search excluded +`Runtime/Source/Native` itself — check that directory before concluding anything is dead: + +- `JSB_Init` is the DLL version handshake, called from `JSApi.cs:151`. +- `JS_GetPropertyInternal`/`JS_SetPropertyInternal` are called from wrappers in `JSApi.cs`. diff --git a/unity/quickjs/Runtime/Source/Native/JSApi+StructValue.cs b/unity/quickjs/Runtime/Source/Native/JSApi+StructValue.cs index aae933e6..ea00cc69 100644 --- a/unity/quickjs/Runtime/Source/Native/JSApi+StructValue.cs +++ b/unity/quickjs/Runtime/Source/Native/JSApi+StructValue.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Runtime.InteropServices; using System.Text; @@ -10,9 +10,6 @@ namespace QuickJS.Native public partial class JSApi { - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JSClassID JSB_GetBridgeClassID(); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSValue jsb_construct_bridge_object(JSContext ctx, JSValue proto, int32_t object_id); @@ -106,12 +103,6 @@ public static int32_t JSB_GetBridgeType(JSContext ctx, JSValue obj, JSAtom key) [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JS_BOOL jsb_set_int_3(JSContext ctx, JSValue val, int v0, int v1, int v2); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_get_int_4(JSContext ctx, JSValue val, out int v0, out int v1, out int v2, out int v3); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_set_int_4(JSContext ctx, JSValue val, int v0, int v1, int v2, int v3); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JS_BOOL jsb_get_byte_4(JSContext ctx, JSValue val, out byte v0, out byte v1, out byte v2, out byte v3); From ba254e6eda7754d86b5df93637cb28dd07ce3240 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 18:08:29 +0300 Subject: [PATCH 05/58] refactor(quickjs): delete the dead unity-jsb Unity integration `Runtime/Source/Unity/` was compiled out in its entirety. Every file in it opens with `#if !JSB_UNITYLESS`, and `JSB_UNITYLESS` is defined for all five jsb assemblies by a `versionDefines` entry with an empty expression, on every platform. Verified by injecting a syntax error inside one of the guards and watching the compile pass. That takes two whole assemblies with it -- jsb.editor.unity (25 files) and jsb.editor.hotfix (1 file, plus 468 KB of bundled Unity.Cecil DLLs) -- neither of which is referenced by anything outside the tree being removed. ReactUnity supplies its own Unity layer, so jsb's JSBehaviour, inspectors, editor windows and Prefs GUI were never reachable. The hard type references from live files (DefaultAsyncManager, ScriptContext, ScriptRuntime) all sit inside dead blocks; those blocks go in a later commit. --- unity/quickjs/Runtime/Source/Unity.meta | 8 - .../Runtime/Source/Unity/Callbacks.meta | 8 - .../Unity/Callbacks/ApplicationCallback.cs | 31 - .../Callbacks/ApplicationCallback.cs.meta | 11 - .../Unity/Callbacks/BecameVisibleCallback.cs | 25 - .../Callbacks/BecameVisibleCallback.cs.meta | 11 - .../Unity/Callbacks/CollisionCallback.cs | 30 - .../Unity/Callbacks/CollisionCallback.cs.meta | 11 - .../Runtime/Source/Unity/ComponentFix.cs | 340 ------ .../Runtime/Source/Unity/ComponentFix.cs.meta | 11 - .../quickjs/Runtime/Source/Unity/Editor.meta | 8 - .../Source/Unity/Editor/BaseEditorWindow.cs | 174 ---- .../Unity/Editor/BaseEditorWindow.cs.meta | 11 - .../Source/Unity/Editor/CustomBindings.meta | 8 - .../Editor/CustomBindings/UnityBinding.cs | 207 ---- .../CustomBindings/UnityBinding.cs.meta | 11 - .../CustomBindings/UnityEditorBinding.cs | 140 --- .../CustomBindings/UnityEditorBinding.cs.meta | 11 - .../Editor/CustomBindings/UnityUIBinding.cs | 51 - .../CustomBindings/UnityUIBinding.cs.meta | 11 - .../Source/Unity/Editor/EditorRuntime.cs | 302 ------ .../Source/Unity/Editor/EditorRuntime.cs.meta | 11 - .../Unity/Editor/JSAssetPostprocessor.cs | 139 --- .../Unity/Editor/JSAssetPostprocessor.cs.meta | 11 - .../Unity/Editor/JSBehaviourFullInspector.cs | 13 - .../Editor/JSBehaviourFullInspector.cs.meta | 11 - .../Unity/Editor/JSBehaviourInspector.cs | 43 - .../Unity/Editor/JSBehaviourInspector.cs.meta | 11 - .../Source/Unity/Editor/JSInspectorBase.cs | 546 ---------- .../Unity/Editor/JSInspectorBase.cs.meta | 11 - .../Unity/Editor/JSScriptClassPathHint.cs | 47 - .../Editor/JSScriptClassPathHint.cs.meta | 3 - .../Source/Unity/Editor/JSScriptFinder.cs | 252 ----- .../Unity/Editor/JSScriptFinder.cs.meta | 11 - .../Unity/Editor/JSScriptSearchWindow.cs | 217 ---- .../Unity/Editor/JSScriptSearchWindow.cs.meta | 3 - .../Editor/JSScriptableObjectInspector.cs | 32 - .../JSScriptableObjectInspector.cs.meta | 11 - .../Source/Unity/Editor/PrefsEditor.cs | 970 ------------------ .../Source/Unity/Editor/PrefsEditor.cs.meta | 11 - .../Source/Unity/Editor/PrefsLoader.cs | 125 --- .../Source/Unity/Editor/PrefsLoader.cs.meta | 11 - .../Editor/ScriptEditorWindowLauncher.cs | 214 ---- .../Editor/ScriptEditorWindowLauncher.cs.meta | 11 - .../Unity/Editor/ScriptEngineStatsWindow.cs | 500 --------- .../Editor/ScriptEngineStatsWindow.cs.meta | 11 - .../Source/Unity/Editor/SimpleListView.cs | 91 -- .../Unity/Editor/SimpleListView.cs.meta | 11 - .../Source/Unity/Editor/SimpleSplitView.cs | 66 -- .../Unity/Editor/SimpleSplitView.cs.meta | 11 - .../Source/Unity/Editor/SimpleTreeView.cs | 384 ------- .../Unity/Editor/SimpleTreeView.cs.meta | 11 - .../Unity/Editor/TypescriptPostProcessor.cs | 61 -- .../Editor/TypescriptPostProcessor.cs.meta | 11 - .../Source/Unity/Editor/UnityBindingUtils.cs | 22 - .../Unity/Editor/UnityBindingUtils.cs.meta | 11 - .../Source/Unity/Editor/UnityHelper.cs | 579 ----------- .../Source/Unity/Editor/UnityHelper.cs.meta | 11 - .../Unity/Editor/UnityJSScriptCompiler.cs | 109 -- .../Editor/UnityJSScriptCompiler.cs.meta | 11 - .../Source/Unity/Editor/UnityShellHelper.cs | 85 -- .../Unity/Editor/UnityShellHelper.cs.meta | 11 - .../Unity/Editor/jsb.editor.unity.asmdef | 35 - .../Unity/Editor/jsb.editor.unity.asmdef.meta | 7 - .../Runtime/Source/Unity/EditorWindowFix.cs | 324 ------ .../Source/Unity/EditorWindowFix.cs.meta | 11 - .../Runtime/Source/Unity/GameObjectFix.cs | 378 ------- .../Source/Unity/GameObjectFix.cs.meta | 11 - .../quickjs/Runtime/Source/Unity/Hotfix.meta | 8 - .../Runtime/Source/Unity/Hotfix/Editor.meta | 8 - .../Source/Unity/Hotfix/Editor/HotfixUtil.cs | 345 ------- .../Unity/Hotfix/Editor/HotfixUtil.cs.meta | 11 - .../Source/Unity/Hotfix/Editor/Plugins.meta | 8 - .../Hotfix/Editor/Plugins/Unity.Cecil.Mdb.dll | Bin 44544 -> 0 bytes .../Editor/Plugins/Unity.Cecil.Mdb.dll.meta | 33 - .../Hotfix/Editor/Plugins/Unity.Cecil.Pdb.dll | Bin 87552 -> 0 bytes .../Editor/Plugins/Unity.Cecil.Pdb.dll.meta | 33 - .../Hotfix/Editor/Plugins/Unity.Cecil.dll | Bin 347136 -> 0 bytes .../Editor/Plugins/Unity.Cecil.dll.meta | 33 - .../Hotfix/Editor/jsb.editor.hotfix.asmdef | 37 - .../Editor/jsb.editor.hotfix.asmdef.meta | 7 - .../Runtime/Source/Unity/JSBehaviour.cs | 689 ------------- .../Runtime/Source/Unity/JSBehaviour.cs.meta | 11 - .../Runtime/Source/Unity/JSBehaviourFull.cs | 104 -- .../Source/Unity/JSBehaviourFull.cs.meta | 11 - .../Runtime/Source/Unity/JSEditorWindow.cs | 585 ----------- .../Source/Unity/JSEditorWindow.cs.meta | 11 - .../Source/Unity/JSScriptProperties.cs | 90 -- .../Source/Unity/JSScriptProperties.cs.meta | 11 - .../Runtime/Source/Unity/JSScriptRef.cs | 66 -- .../Runtime/Source/Unity/JSScriptRef.cs.meta | 11 - .../Source/Unity/JSScriptableObject.cs | 518 ---------- .../Source/Unity/JSScriptableObject.cs.meta | 11 - .../Source/Unity/JSSerializationContext.cs | 64 -- .../Unity/JSSerializationContext.cs.meta | 11 - .../quickjs/Runtime/Source/Unity/ObjectFix.cs | 20 - .../Runtime/Source/Unity/ObjectFix.cs.meta | 11 - .../Runtime/Source/Unity/ResourcesFix.cs | 85 -- .../Runtime/Source/Unity/ResourcesFix.cs.meta | 11 - .../Source/Unity/ScriptEditorSupport.cs | 25 - .../Source/Unity/ScriptEditorSupport.cs.meta | 11 - .../Source/Unity/ScriptInstancedObject.cs | 16 - .../Unity/ScriptInstancedObject.cs.meta | 11 - .../Source/Unity/ScriptableObjectFix.cs | 91 -- .../Source/Unity/ScriptableObjectFix.cs.meta | 11 - .../Source/Unity/UnityCoroutineContext.cs | 115 --- .../Unity/UnityCoroutineContext.cs.meta | 11 - 107 files changed, 10030 deletions(-) delete mode 100644 unity/quickjs/Runtime/Source/Unity.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Callbacks.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Callbacks/ApplicationCallback.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Callbacks/ApplicationCallback.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Callbacks/BecameVisibleCallback.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Callbacks/BecameVisibleCallback.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Callbacks/CollisionCallback.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Callbacks/CollisionCallback.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/ComponentFix.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/ComponentFix.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/BaseEditorWindow.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/BaseEditorWindow.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityBinding.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityBinding.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityEditorBinding.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityEditorBinding.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityUIBinding.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityUIBinding.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/EditorRuntime.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/EditorRuntime.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSAssetPostprocessor.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSAssetPostprocessor.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourFullInspector.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourFullInspector.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourInspector.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourInspector.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSInspectorBase.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSInspectorBase.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSScriptClassPathHint.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSScriptClassPathHint.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSScriptFinder.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSScriptFinder.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSScriptSearchWindow.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSScriptSearchWindow.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSScriptableObjectInspector.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/JSScriptableObjectInspector.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/PrefsEditor.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/PrefsEditor.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/PrefsLoader.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/PrefsLoader.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/ScriptEditorWindowLauncher.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/ScriptEditorWindowLauncher.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/SimpleListView.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/SimpleListView.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/SimpleSplitView.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/SimpleSplitView.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/SimpleTreeView.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/SimpleTreeView.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/TypescriptPostProcessor.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/TypescriptPostProcessor.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/UnityBindingUtils.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/UnityBindingUtils.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/UnityHelper.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/UnityHelper.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/UnityJSScriptCompiler.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/UnityJSScriptCompiler.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/UnityShellHelper.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/UnityShellHelper.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/jsb.editor.unity.asmdef delete mode 100644 unity/quickjs/Runtime/Source/Unity/Editor/jsb.editor.unity.asmdef.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/EditorWindowFix.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/EditorWindowFix.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/GameObjectFix.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/GameObjectFix.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/HotfixUtil.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/HotfixUtil.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Mdb.dll delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Mdb.dll.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Pdb.dll delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Pdb.dll.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.dll delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.dll.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/jsb.editor.hotfix.asmdef delete mode 100644 unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/jsb.editor.hotfix.asmdef.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSBehaviour.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSBehaviour.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSBehaviourFull.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSBehaviourFull.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSEditorWindow.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSEditorWindow.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSScriptProperties.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSScriptProperties.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSScriptRef.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSScriptRef.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSScriptableObject.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSScriptableObject.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSSerializationContext.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/JSSerializationContext.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/ObjectFix.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/ObjectFix.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/ResourcesFix.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/ResourcesFix.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/ScriptEditorSupport.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/ScriptEditorSupport.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/ScriptInstancedObject.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/ScriptInstancedObject.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/ScriptableObjectFix.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/ScriptableObjectFix.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Unity/UnityCoroutineContext.cs delete mode 100644 unity/quickjs/Runtime/Source/Unity/UnityCoroutineContext.cs.meta diff --git a/unity/quickjs/Runtime/Source/Unity.meta b/unity/quickjs/Runtime/Source/Unity.meta deleted file mode 100644 index d1a4b4b4..00000000 --- a/unity/quickjs/Runtime/Source/Unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 044d3429d1ce7e94fbb9d3ae59dfa4b3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Callbacks.meta b/unity/quickjs/Runtime/Source/Unity/Callbacks.meta deleted file mode 100644 index 4bca91df..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Callbacks.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 64513695e0d694f4a97ce98212a57c58 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Callbacks/ApplicationCallback.cs b/unity/quickjs/Runtime/Source/Unity/Callbacks/ApplicationCallback.cs deleted file mode 100644 index 51ee556a..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Callbacks/ApplicationCallback.cs +++ /dev/null @@ -1,31 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using Native; - using UnityEngine; - using UnityEngine.Serialization; - - // it's an example how to receive more MonoBehaviour callbacks without modifying JSBehaviour class. - public class JSApplicationCallback : MonoBehaviour - { - void OnApplicationFocus(bool hasFocus) - { - JSBehaviour.Dispatch(gameObject, "OnApplicationFocus", hasFocus); - } - - void OnApplicationPause(bool pauseStatus) - { - JSBehaviour.Dispatch(gameObject, "OnApplicationPause", pauseStatus); - } - - //TODO fixme, script order - void OnApplicationQuit() - { - JSBehaviour.Dispatch(gameObject, "OnApplicationQuit"); - } - } -} -#endif // if !JSB_UNITYLESS diff --git a/unity/quickjs/Runtime/Source/Unity/Callbacks/ApplicationCallback.cs.meta b/unity/quickjs/Runtime/Source/Unity/Callbacks/ApplicationCallback.cs.meta deleted file mode 100644 index 04a62220..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Callbacks/ApplicationCallback.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: af9079c36cea7ec40b351e2d1d839db2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Callbacks/BecameVisibleCallback.cs b/unity/quickjs/Runtime/Source/Unity/Callbacks/BecameVisibleCallback.cs deleted file mode 100644 index b49e1e26..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Callbacks/BecameVisibleCallback.cs +++ /dev/null @@ -1,25 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using Native; - using UnityEngine; - using UnityEngine.Serialization; - - // it's an example how to receive more MonoBehaviour callbacks without modifying JSBehaviour class. - public class JSBecameVisibleCallback : MonoBehaviour - { - void OnBecameVisible() - { - JSBehaviour.Dispatch(gameObject, "OnBecameVisible"); - } - - void OnBecameInvisible() - { - JSBehaviour.Dispatch(gameObject, "OnBecameInvisible"); - } - } -} -#endif // if !JSB_UNITYLESS diff --git a/unity/quickjs/Runtime/Source/Unity/Callbacks/BecameVisibleCallback.cs.meta b/unity/quickjs/Runtime/Source/Unity/Callbacks/BecameVisibleCallback.cs.meta deleted file mode 100644 index 3abd7714..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Callbacks/BecameVisibleCallback.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6962bdad98ed190458e1b6535f716efe -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Callbacks/CollisionCallback.cs b/unity/quickjs/Runtime/Source/Unity/Callbacks/CollisionCallback.cs deleted file mode 100644 index 137f665e..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Callbacks/CollisionCallback.cs +++ /dev/null @@ -1,30 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using Native; - using UnityEngine; - using UnityEngine.Serialization; - - // it's an example how to receive more MonoBehaviour callbacks without modifying JSBehaviour class. - public class JSCollisionCallback : MonoBehaviour - { - void OnCollisionEnter(Collision other) - { - JSBehaviour.Dispatch(gameObject, "OnCollisionEnter", other); - } - - void OnCollisionExit(Collision other) - { - JSBehaviour.Dispatch(gameObject, "OnCollisionExit", other); - } - - void OnCollisionStay(Collision other) - { - JSBehaviour.Dispatch(gameObject, "OnCollisionStay", other); - } - } -} -#endif // if !JSB_UNITYLESS diff --git a/unity/quickjs/Runtime/Source/Unity/Callbacks/CollisionCallback.cs.meta b/unity/quickjs/Runtime/Source/Unity/Callbacks/CollisionCallback.cs.meta deleted file mode 100644 index 1672bcdb..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Callbacks/CollisionCallback.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d299c7c1179632f4bb5fbdac9200a1eb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/ComponentFix.cs b/unity/quickjs/Runtime/Source/Unity/ComponentFix.cs deleted file mode 100644 index 94da1de4..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ComponentFix.cs +++ /dev/null @@ -1,340 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Reflection; - -namespace QuickJS.Unity -{ - using Native; - using Binding; - using UnityEngine; - - public static class ComponentFix - { - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponent(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - do - { - if (argc == 1) - { - if (Values.js_match_type(ctx, argv[0], typeof(System.Type))) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponent", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_component(ctx, argv[0], self, arg0); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponent(arg0); - return Values.js_push_classvalue(ctx, ret); - } - if (Values.js_match_type(ctx, argv[0], typeof(string))) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - string arg0; - if (!Values.js_get_primitive(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponent", typeof(string), 0); - } - var ret = self.GetComponent(arg0); - return Values.js_push_classvalue(ctx, ret); - } - } - } while (false); - throw new NoSuitableMethodException("GetComponent", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponentInChildren(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - do - { - if (argc == 2) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponentInChildren", typeof(System.Type), 0); - } - bool arg1; - if (!Values.js_get_primitive(ctx, argv[1], out arg1)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponentInChildren", typeof(bool), 1); - } - var inject = Values._js_game_object_get_component_in_children(ctx, argv[0], self, arg0, arg1); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentInChildren(arg0, arg1); - return Values.js_push_classvalue(ctx, ret); - } - if (argc == 1) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponentInChildren", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_component_in_children(ctx, argv[0], self, arg0, false); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentInChildren(arg0); - return Values.js_push_classvalue(ctx, ret); - } - } while (false); - throw new NoSuitableMethodException("GetComponentInChildren", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponentsInChildren(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - do - { - if (argc == 2) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponentsInChildren", typeof(System.Type), 0); - } - bool arg1; - if (!Values.js_get_primitive(ctx, argv[1], out arg1)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponentsInChildren", typeof(bool), 1); - } - var inject = Values._js_game_object_get_components_in_children(ctx, argv[0], self, arg0, arg1); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentsInChildren(arg0, arg1); - return Values.PushArray(ctx, ret); - } - if (argc == 1) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponentsInChildren", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_components_in_children(ctx, argv[0], self, arg0, false); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentsInChildren(arg0); - return Values.PushArray(ctx, ret); - } - } while (false); - throw new NoSuitableMethodException("GetComponentsInChildren", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponentInParent(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - if (argc == 1) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponentInParent", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_component_in_parent(ctx, argv[0], self, arg0, false); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentInParent(arg0); - return Values.js_push_classvalue(ctx, ret); - } - throw new NoSuitableMethodException("GetComponentInParent", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponentsInParent(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - do - { - if (argc == 2) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponentsInParent", typeof(System.Type), 0); - } - bool arg1; - if (!Values.js_get_primitive(ctx, argv[1], out arg1)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponentsInParent", typeof(bool), 1); - } - var inject = Values._js_game_object_get_components_in_parent(ctx, argv[0], self, arg0, arg1); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentsInParent(arg0, arg1); - return Values.PushArray(ctx, ret); - } - if (argc == 1) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponentsInParent", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_components_in_parent(ctx, argv[0], self, arg0, false); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentsInParent(arg0); - return Values.PushArray(ctx, ret); - } - } while (false); - throw new NoSuitableMethodException("GetComponentsInParent", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponents(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - do - { - if (argc == 2) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponents", typeof(System.Type), 0); - } - System.Collections.Generic.List arg1; - if (!Values.js_get_classvalue(ctx, argv[1], out arg1)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponents", typeof(System.Collections.Generic.List), 1); - } - var inject = Values._js_game_object_get_components(ctx, argv[0], self, arg0, arg1); - if (!inject.IsUndefined()) - { - return inject; - } - self.GetComponents(arg0, arg1); - return JSApi.JS_UNDEFINED; - } - if (argc == 1) - { - UnityEngine.Component self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.Component), "GetComponents", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_components(ctx, argv[0], self, arg0); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponents(arg0); - return Values.PushArray(ctx, ret); - } - } while (false); - throw new NoSuitableMethodException("GetComponents", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/ComponentFix.cs.meta b/unity/quickjs/Runtime/Source/Unity/ComponentFix.cs.meta deleted file mode 100644 index 7bd74070..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ComponentFix.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3a3d7819a05d0584e8ca675d09d7afac -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor.meta b/unity/quickjs/Runtime/Source/Unity/Editor.meta deleted file mode 100644 index 6fbe3d2b..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: eca8a806d86464b4c9c0939da061e24c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/BaseEditorWindow.cs b/unity/quickjs/Runtime/Source/Unity/Editor/BaseEditorWindow.cs deleted file mode 100644 index b33103e5..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/BaseEditorWindow.cs +++ /dev/null @@ -1,174 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Reflection; -using System.Runtime.CompilerServices; - -namespace QuickJS.Unity -{ - using UnityEngine; - using UnityEditor; - - public class BaseEditorWindow : EditorWindow - { - protected static GUIStyle _blockStyle = new GUIStyle(); - protected List _defers = new List(); - - private static Dictionary _textContents = new Dictionary(); - - protected virtual void OnEnable() - { - } - - protected virtual void OnDisable() - { - } - - protected virtual void OnPaint() - { - } - - protected void Update() - { - OnUpdate(); - } - - protected virtual void OnUpdate() - { - } - - private void OnGUI() - { - OnPaint(); - ExecuteDefers(); - } - - public static GUIContent GetCachedTextContent(string text) - { - if (_textContents.TryGetValue(text, out var content)) - { - return content; - } - _textContents[text] = new GUIContent(text); - return content; - } - - public static Texture2D MakeTex(int width, int height, Color fillColor) - { - var pixels = new Color[width * height]; - for (var x = 0; x < width; ++x) - { - for (var y = 0; y < height; ++y) - { - var point = x + y * width; - pixels[point] = fillColor; - } - } - var result = new Texture2D(width, height); - result.SetPixels(pixels); - result.Apply(); - return result; - } - - public static void BorderLine(Rect rect) - { - Handles.color = Color.black; - Handles.DrawLine(new Vector3(rect.xMin, rect.yMin + rect.height * 0.5f), new Vector3(rect.xMax, rect.yMin + rect.height * 0.5f)); - Handles.color = Color.gray; - Handles.DrawLine(new Vector3(rect.xMin + 1f, rect.yMin + rect.height * 0.5f + 1f), new Vector3(rect.xMax, rect.yMin + rect.height * 0.5f + 1f)); - } - - public static void BorderLine(float x1, float y1, float x2, float y2) - { - Handles.color = Color.black; - Handles.DrawLine(new Vector3(x1, y1), new Vector3(x2, y2)); - Handles.color = Color.gray; - Handles.DrawLine(new Vector3(x1 + 1f, y1 + 1f), new Vector3(x2, y2)); - } - - public static void Block(string title, Action contentDrawer, Action[] utilities, Action tailUtility) - { - var li = new Action[utilities.Length + 1]; - for (var i = 0; i < utilities.Length; i++) - { - li[i] = utilities[i]; - } - li[utilities.Length] = tailUtility; - Block(title, Color.clear, contentDrawer, li); - } - - public static void Block(string title, Action contentDrawer, params Action[] utilities) - { - Block(title, Color.clear, contentDrawer, utilities); - } - - public static void Block(string title, Color titleColor, Action contentDrawer, params Action[] utilities) - { - EditorGUILayout.BeginHorizontal(); - GUILayout.Space(10f); - if (_blockStyle == null) - { - _blockStyle = new GUIStyle(); - _blockStyle.normal.background = MakeTex(100, 100, new Color32(56, 56, 56, 0)); - } - EditorGUILayout.BeginVertical(_blockStyle); - EditorGUILayout.BeginHorizontal(); - var guiColor = GUI.color; - if (titleColor != Color.clear) - { - GUI.color = titleColor; - } - GUILayout.Label(title, GUILayout.ExpandWidth(false)); - GUI.color = guiColor; - var rectBegin = EditorGUILayout.GetControlRect(true, GUILayout.ExpandWidth(true)); - var handlesColor = Handles.color; - BorderLine(rectBegin); - Handles.color = handlesColor; - for (var i = 0; i < utilities.Length; i++) - { - utilities[i](); - } - EditorGUILayout.EndHorizontal(); - GUILayout.Space(4f); - EditorGUILayout.BeginHorizontal(); - GUILayout.Space(10f); - EditorGUILayout.BeginVertical(); - contentDrawer(); - EditorGUILayout.EndVertical(); - GUILayout.Space(4f); - EditorGUILayout.EndHorizontal(); - GUILayout.Space(10f); - var rectEnd = EditorGUILayout.GetControlRect(true, GUILayout.Height(1f)); - BorderLine(rectEnd); - BorderLine(rectEnd.xMin, rectBegin.yMax, rectEnd.xMin, rectEnd.yMax); - BorderLine(rectEnd.xMax, (rectBegin.yMin + rectBegin.yMax) * 0.5f, rectEnd.xMax, rectEnd.yMax); - Handles.color = handlesColor; - GUILayout.Space(2f); - EditorGUILayout.EndVertical(); - EditorGUILayout.EndHorizontal(); - } - - protected void Defer(Action action) - { - _defers.Add(action); - } - - protected void ExecuteDefers() - { - var size = _defers.Count; - if (size > 0) - { - var list = new Action[size]; - _defers.CopyTo(list, 0); - _defers.Clear(); - for (var i = 0; i < size; i++) - { - list[i](); - } - } - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/BaseEditorWindow.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/BaseEditorWindow.cs.meta deleted file mode 100644 index af83d0eb..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/BaseEditorWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 666a8ccf93b43fa4d9c66e1ae0798faf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings.meta b/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings.meta deleted file mode 100644 index f242fb12..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3da17c6d4b07a81489fd383109d2442d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityBinding.cs b/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityBinding.cs deleted file mode 100644 index b53b32c4..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityBinding.cs +++ /dev/null @@ -1,207 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Reflection; - -namespace jsb.Editor -{ - using QuickJS.Unity; - using QuickJS.Binding; - using UnityEngine; - - /// - /// the most essential types for scripting. - /// you could define your own BindingProcess anywhere in your project's 'Assets' editor directory, - /// add more types to export and transform even the types already added here. - /// - public class UnityBinding : AbstractBindingProcess - { - public bool IsAvailable(MethodInfo methodInfo) - { - return methodInfo != null && methodInfo.IsPublic; - } - - public override void OnPreCollectAssemblies(BindingManager bindingManager) - { - HackGetComponents(bindingManager.TransformType(typeof(GameObject))); - HackGetComponents(bindingManager.TransformType(typeof(Component))); - - bindingManager.TransformType(typeof(MonoBehaviour)) - .WriteCrossBindingConstructor(); - - bindingManager.TransformType(typeof(ScriptableObject)) - .WriteCrossBindingConstructor() - .SetMethodBlocked("CreateInstance", typeof(string)) - // .SetMethodBlocked("CreateInstance", typeof(Type)) - .AddTSMethodDeclaration("static CreateInstance(type: { new(): T }): T", "CreateInstance", typeof(Type)) - .WriteCSMethodOverrideBinding("CreateInstance", ScriptableObjectFix.BindStatic_CreateInstance) - ; - - // var buildTarget = EditorUserBuildSettings.activeBuildTarget; - // if (buildTarget != BuildTarget.iOS) - // { - // bindingManager.AddTypePrefixBlacklist("UnityEngine.Apple"); - // } - // if (buildTarget != BuildTarget.Android) - // { - // bindingManager.AddTypePrefixBlacklist("UnityEngine.Android"); - // } - // bindingManager.AddTypePrefixBlacklist("SyntaxTree."); - - // fix d.ts, some C# classes use explicit implemented interface method - bindingManager.SetTypeBlocked(typeof(UnityEngine.ILogHandler)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.ISerializationCallbackReceiver)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.Playables.ScriptPlayable<>)); - bindingManager.SetTypeBlocked(typeof(AOT.MonoPInvokeCallbackAttribute)); - - // SetTypeBlocked(typeof(RendererExtensions)); - bindingManager.TransformType(typeof(UnityEngine.Events.UnityEvent<>)) - .Rename("UnityEvent1"); - - bindingManager.TransformType(typeof(UnityEngine.Events.UnityEvent<,>)) - .Rename("UnityEvent2"); - - bindingManager.TransformType(typeof(UnityEngine.Events.UnityEvent<,,>)) - .Rename("UnityEvent3"); - - bindingManager.TransformType(typeof(UnityEngine.Events.UnityEvent<,,,>)) - .Rename("UnityEvent4"); - - bindingManager.TransformType(typeof(UnityEngine.Texture)) - .SetMemberBlocked("imageContentsHash"); - bindingManager.TransformType(typeof(UnityEngine.Texture2D)) - .AddRequiredDefinesForMember("alphaIsTransparency", "UNITY_EDITOR"); - bindingManager.TransformType(typeof(UnityEngine.Input)) - .SetMemberBlocked("IsJoystickPreconfigured"); // specific platform available only - bindingManager.TransformType(typeof(UnityEngine.MonoBehaviour)) - .SetMemberBlocked("runInEditMode"); // editor only - bindingManager.TransformType(typeof(UnityEngine.QualitySettings)) - .SetMemberBlocked("streamingMipmapsRenderersPerFrame"); - } - - public override void OnPreExporting(BindingManager bindingManager) - { - bindingManager.AddExportedType(typeof(LayerMask)); - bindingManager.AddExportedType(typeof(Color)); - bindingManager.AddExportedType(typeof(Color32)); - bindingManager.AddExportedType(typeof(Vector2)); - bindingManager.AddExportedType(typeof(Vector2Int)); - bindingManager.AddExportedType(typeof(Vector3)); - bindingManager.AddExportedType(typeof(Vector3Int)); - bindingManager.AddExportedType(typeof(Vector4)); - bindingManager.AddExportedType(typeof(Rect)); - bindingManager.AddExportedType(typeof(Quaternion)); - bindingManager.AddExportedType(typeof(Matrix4x4)); - bindingManager.AddExportedType(typeof(PrimitiveType)); - - bindingManager.AddExportedType(typeof(UnityEngine.Object)) - .EnableOperatorOverloading(false) - ; - bindingManager.AddExportedType(typeof(KeyCode)); - bindingManager.AddExportedType(typeof(Texture)); - bindingManager.AddExportedType(typeof(Texture2D)); - bindingManager.AddExportedType(typeof(Material)); - bindingManager.AddExportedType(typeof(Time)); - bindingManager.AddExportedType(typeof(Random)); - bindingManager.AddExportedType(typeof(GameObject), true); - bindingManager.AddExportedType(typeof(Camera), true); - bindingManager.AddExportedType(typeof(Transform), true); - bindingManager.AddExportedType(typeof(RectTransform), true); - bindingManager.AddExportedType(typeof(MonoBehaviour), true); - bindingManager.AddExportedType(typeof(ScriptableObject), true); - bindingManager.AddExportedType(typeof(Sprite), true); - bindingManager.AddExportedType(typeof(SpriteRenderer), true); - bindingManager.AddExportedType(typeof(Animation), true); - bindingManager.AddExportedType(typeof(AnimationClip), true); - bindingManager.AddExportedType(typeof(Animator), true); - bindingManager.AddExportedType(typeof(AnimationState), true); - bindingManager.AddExportedType(typeof(WrapMode), true); - bindingManager.AddExportedType(typeof(Debug)); - bindingManager.AddExportedType(typeof(WaitForSeconds), true); - bindingManager.AddExportedType(typeof(WaitForEndOfFrame), true); - bindingManager.AddExportedType(typeof(Input)); - bindingManager.AddExportedType(typeof(Application)); - - bindingManager.AddExportedType(typeof(Ray)); - bindingManager.AddExportedType(typeof(RaycastHit)); - bindingManager.AddExportedType(typeof(Physics)); - bindingManager.AddExportedType(typeof(Collider)); - bindingManager.AddExportedType(typeof(BoxCollider)); - bindingManager.AddExportedType(typeof(SphereCollider)); - bindingManager.AddExportedType(typeof(Rigidbody)); - - bindingManager.AddExportedType(typeof(Resources)) - .SetAllConstructorsBlocked() - // .SetMethodBlocked("FindObjectsOfTypeAll", typeof(Type)) - .AddTSMethodDeclaration("static FindObjectsOfTypeAll(type: { new(): T }): T[]", "FindObjectsOfTypeAll", typeof(Type)) - .WriteCSMethodOverrideBinding("FindObjectsOfTypeAll", ResourcesFix.BindStatic_FindObjectsOfTypeAll) - ; - bindingManager.AddExportedType(typeof(QuickJS.Unity.JSSerializationContext)).SetAllConstructorsBlocked(); - -#if JSB_WITH_UIELEMENTS - //TODO [experimental, not_implemented] ui elements support - bindingManager.SetTypeBlocked(typeof(UnityEngine.UIElements.IUxmlFactory)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.UIElements.IMouseEvent)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.UIElements.ITransform)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.UIElements.IVisualElementScheduler)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.UIElements.IResolvedStyle)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.UIElements.IExperimentalFeatures)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.UIElements.Experimental.ITransitionAnimations)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.UIElements.Experimental.IValueAnimation)); - bindingManager.TransformType(typeof(UnityEngine.UIElements.VisualElement.UxmlTraits)).Rename("UxmlTraits0"); - bindingManager.TransformType(typeof(UnityEngine.UIElements.EventBase<>)).Rename("EventBase1"); - bindingManager.TransformType(typeof(UnityEngine.UIElements.UxmlFactory<>)).Rename("UxmlFactory1"); - bindingManager.TransformType(typeof(UnityEngine.UIElements.UxmlFactory<,>)).Rename("UxmlFactory2"); - bindingManager.ExportTypesInAssembly(typeof(UnityEngine.UIElements.Label).Assembly, true); -#endif - } - - private static TypeTransform HackGetComponents(TypeTransform typeTransform) - { - if (typeTransform.type == typeof(GameObject)) - { - typeTransform.AddTSMethodDeclaration($"AddComponent(type: {{ new(): T }}): T", - "AddComponent", typeof(Type)); - - typeTransform.WriteCSMethodOverrideBinding("AddComponent", GameObjectFix.Bind_AddComponent); - - typeTransform.WriteCSMethodOverrideBinding("GetComponent", GameObjectFix.Bind_GetComponent); - typeTransform.WriteCSMethodOverrideBinding("GetComponentInChildren", GameObjectFix.Bind_GetComponentInChildren); - typeTransform.WriteCSMethodOverrideBinding("GetComponentInParent", GameObjectFix.Bind_GetComponentInParent); - typeTransform.WriteCSMethodOverrideBinding("GetComponentsInChildren", GameObjectFix.Bind_GetComponentsInChildren); - typeTransform.WriteCSMethodOverrideBinding("GetComponentsInParent", GameObjectFix.Bind_GetComponentsInParent); - typeTransform.WriteCSMethodOverrideBinding("GetComponents", GameObjectFix.Bind_GetComponents); - } - else - { - typeTransform.WriteCSMethodOverrideBinding("GetComponent", ComponentFix.Bind_GetComponent); - typeTransform.WriteCSMethodOverrideBinding("GetComponentInChildren", ComponentFix.Bind_GetComponentInChildren); - typeTransform.WriteCSMethodOverrideBinding("GetComponentInParent", ComponentFix.Bind_GetComponentInParent); - typeTransform.WriteCSMethodOverrideBinding("GetComponentsInChildren", ComponentFix.Bind_GetComponentsInChildren); - typeTransform.WriteCSMethodOverrideBinding("GetComponentsInParent", ComponentFix.Bind_GetComponentsInParent); - typeTransform.WriteCSMethodOverrideBinding("GetComponents", ComponentFix.Bind_GetComponents); - } - - typeTransform.AddTSMethodDeclaration($"GetComponent(type: {{ new(): T }}): T", - "GetComponent", typeof(Type)) - .AddTSMethodDeclaration($"GetComponentInChildren(type: {{ new(): T }}, includeInactive: boolean): T", - "GetComponentInChildren", typeof(Type), typeof(bool)) - .AddTSMethodDeclaration($"GetComponentInChildren(type: {{ new(): T }}): T", - "GetComponentInChildren", typeof(Type)) - .AddTSMethodDeclaration($"GetComponentInParent(type: {{ new(): T }}): T", - "GetComponentInParent", typeof(Type)) - .AddTSMethodDeclaration($"GetComponents(type: {{ new(): T }}): T[]", - "GetComponents", typeof(Type)) - .AddTSMethodDeclaration($"GetComponentsInChildren(type: {{ new(): T }}, includeInactive: boolean): T[]", - "GetComponentsInChildren", typeof(Type), typeof(bool)) - .AddTSMethodDeclaration($"GetComponentsInChildren(type: {{ new(): T }}): T[]", - "GetComponentsInChildren", typeof(Type)) - .AddTSMethodDeclaration($"GetComponentsInParent(type: {{ new(): T }}, includeInactive: boolean): T[]", - "GetComponentsInParent", typeof(Type), typeof(bool)) - .AddTSMethodDeclaration($"GetComponentsInParent(type: {{ new(): T }}): T[]", - "GetComponentsInParent", typeof(Type)) - ; - return typeTransform; - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityBinding.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityBinding.cs.meta deleted file mode 100644 index c0618096..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityBinding.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b04afd0268214ec4ab688d493f3165b8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityEditorBinding.cs b/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityEditorBinding.cs deleted file mode 100644 index 900e0f7e..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityEditorBinding.cs +++ /dev/null @@ -1,140 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Reflection; - -namespace jsb.Editor -{ - using QuickJS.Native; - using QuickJS.Binding; - using QuickJS.Unity; - using UnityEngine; - using UnityEditor; - using UnityEditor.IMGUI.Controls; - - public class UnityEditorBinding : AbstractBindingProcess - { - public bool IsAvailable(MethodInfo methodInfo) - { - return methodInfo != null && methodInfo.IsPublic; - } - - public override void OnPreExporting(BindingManager bindingManager) - { -#if !UNITY_WEBGL - bindingManager.AddExportedRawTypes(typeof(QuickJS.Utils.FSWatcher)).EditorRuntime(); -#endif - // bindingManager.AddTypePrefixBlacklist("Unity."); - // bindingManager.AddTypePrefixBlacklist("TreeEditor."); - bindingManager.AddTypeFullNameBlacklist("UnityEditor.UpdatePrefabInstancesEventArgs"); - bindingManager.AddExportedType(typeof(QuickJS.Unity.UnityHelper)).EditorRuntime(); - bindingManager.AddExportedType(typeof(QuickJS.Binding.Prefs)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(QuickJS.Utils.TSConfig)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(QuickJS.Utils.TSConfig.CompilerOptions)).EditorRuntime().SetAllConstructorsBlocked(); - - bindingManager.AddExportedType(typeof(GUI)).SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(GUIUtility)).SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(GUILayout)).SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(GUILayoutUtility)).SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(GUILayoutOption)); - bindingManager.AddExportedType(typeof(GUIContent)); - bindingManager.AddExportedType(typeof(GUISkin)); - bindingManager.AddExportedType(typeof(GUIStyle)); - bindingManager.AddExportedType(typeof(TextAnchor)); - bindingManager.AddExportedType(typeof(ScaleMode)); - bindingManager.AddExportedType(typeof(FocusType)); - bindingManager.AddExportedType(typeof(AudioClip)); - bindingManager.AddExportedType(typeof(RectInt)); - bindingManager.AddExportedType(typeof(Bounds)); - bindingManager.AddExportedType(typeof(BoundsInt)); - bindingManager.AddExportedType(typeof(Gradient)); - bindingManager.AddExportedType(typeof(AnimationCurve)); - bindingManager.AddExportedType(typeof(Event)); - bindingManager.AddExportedType(typeof(EventType)).OnFilter(i => char.IsLower(i[0])); - bindingManager.AddExportedType(typeof(Coroutine)); - bindingManager.AddExportedType(typeof(System.Collections.IEnumerator)); - bindingManager.AddExportedType(typeof(System.Collections.Generic.IEnumerable)); - - bindingManager.AddExportedType(typeof(SearchField)).EditorRuntime(); - bindingManager.AddExportedType(typeof(EditorStyles)).EditorRuntime(); - bindingManager.AddExportedType(typeof(GenericMenu)).EditorRuntime(); - bindingManager.AddExportedType(typeof(PrefabAssetType)).EditorRuntime(); - bindingManager.AddExportedType(typeof(PrefabInstanceStatus)).EditorRuntime(); - bindingManager.AddExportedType(typeof(UIOrientation)).EditorRuntime(); - bindingManager.AddExportedType(typeof(MessageType)).EditorRuntime(); - bindingManager.AddExportedType(typeof(Hash128)).EditorRuntime(); - bindingManager.AddExportedType(typeof(ImportAssetOptions)).EditorRuntime(); - #if !UNITY_2019_3_OR_NEWER - bindingManager.AddExportedType(typeof(ScriptingRuntimeVersion)).EditorRuntime(); - #endif - bindingManager.AddExportedType(typeof(AssetPostprocessor)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(AssetImporter)).EditorRuntime(); - bindingManager.AddExportedType(typeof(ModelImporter)).EditorRuntime(); - bindingManager.AddExportedType(typeof(AudioImporter)).EditorRuntime(); - bindingManager.AddExportedType(typeof(VideoClipImporter)).EditorRuntime(); - bindingManager.AddExportedType(typeof(TextureImporter)).EditorRuntime(); - bindingManager.AddExportedType(typeof(MouseCursor)).EditorRuntime(); - bindingManager.AddExportedType(typeof(PauseState)).EditorRuntime(); - bindingManager.AddExportedType(typeof(PlayModeStateChange)).EditorRuntime(); - bindingManager.AddExportedType(typeof(ExportPackageOptions)).EditorRuntime(); - bindingManager.AddExportedType(typeof(ForceReserializeAssetsOptions)).EditorRuntime(); - bindingManager.AddExportedType(typeof(StatusQueryOptions)).EditorRuntime(); - bindingManager.AddExportedType(typeof(SerializedObject)).EditorRuntime(); - bindingManager.AddExportedType(typeof(SerializedProperty)).EditorRuntime(); - bindingManager.AddExportedType(typeof(SerializedPropertyType)).EditorRuntime(); - bindingManager.AddExportedType(typeof(BuildPlayerOptions)).EditorRuntime(); - bindingManager.AddExportedType(typeof(BuildAssetBundleOptions)).EditorRuntime(); - bindingManager.AddExportedType(typeof(BuildTarget)).EditorRuntime(); - bindingManager.AddExportedType(typeof(BuildOptions)).EditorRuntime(); - bindingManager.AddExportedType(typeof(ObjectFactory)).EditorRuntime(); - bindingManager.AddExportedType(typeof(CameraEditor)).EditorRuntime(); - bindingManager.AddExportedType(typeof(CameraEditorUtils)).EditorRuntime(); - bindingManager.AddExportedType(typeof(TransformUtils)).EditorRuntime(); - bindingManager.AddExportedType(typeof(EditorJsonUtility)).EditorRuntime(); - bindingManager.AddExportedType(typeof(GameObjectUtility)).EditorRuntime(); - bindingManager.AddExportedType(typeof(EditorPrefs)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(Handles)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(HandleUtility)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(SceneView)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(MeshUtility)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(PrefabUtility)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(FileUtil)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(UnityEditor.Build.Reporting.BuildReport)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(AssetBundleManifest)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(BuildPipeline)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(AssetDatabase)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(ShaderUtil)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(EditorUtility)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(EditorGUI)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(EditorGUIUtility)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(EditorGUILayout)).EditorRuntime().SetAllConstructorsBlocked() - // note: it's easy to confuse a bunch of overloads in typescript (you need to add '' before every argument or 'ts-ignore' when the ts compiler can't guess the correct candidate) - // note: so you'd prefer to rename some of them it another totally different name like this: .SetMethodJSName("Popup_sis", "Popup", typeof(string), typeof(int), typeof(string[]), typeof(GUILayoutOption[])) - // .SetMethodJSName("Popup_sis", "Popup", typeof(string), typeof(int), typeof(string[]), typeof(GUILayoutOption[])) - ; - bindingManager.AddExportedType(typeof(EditorApplication)).EditorRuntime().SetAllConstructorsBlocked(); - bindingManager.AddExportedType(typeof(Editor)).EditorRuntime() - .WriteCrossBindingConstructor(); - bindingManager.AddExportedType(typeof(EditorWindow)).EditorRuntime() - .SetMemberBlocked("CreateWindow") - .SetMemberBlocked("GetWindowWithRect") - .SetMethodBlocked("GetWindow", typeof(Type), typeof(bool), typeof(string), typeof(bool)) - .SetMethodBlocked("GetWindow", typeof(Type), typeof(bool), typeof(string)) - .SetMethodBlocked("GetWindow", typeof(Type), typeof(bool)) - //TODO add overloading members of GetWindow (already implemented) - .AddTSMethodDeclaration("static GetWindow(type: { new(): T }): T", "GetWindow", typeof(Type)) - //TODO desiredDockNextTo - //.add equivalent memeber function in typescript for desiredDockNextTo - .WriteCrossBindingConstructor() - .WriteCSMethodOverrideBinding("GetWindow", EditorWindowFix.BindStatic_GetWindow) - .AddStaticMethod(EditorWindowFix.CreateWindow) - ; - bindingManager.AddTypeFullNameBlacklist("UnityEditor.ProfilerWindow"); - } - - public override void OnPostExporting(BindingManager bindingManager) - { - bindingManager.ExportTypesInAssembly(typeof(Editor).Assembly, true, transform => transform.EditorRuntime()); - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityEditorBinding.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityEditorBinding.cs.meta deleted file mode 100644 index c51e0f94..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityEditorBinding.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8fdb1efddb7f11a42934fcc318602ffc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityUIBinding.cs b/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityUIBinding.cs deleted file mode 100644 index 52cc3001..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityUIBinding.cs +++ /dev/null @@ -1,51 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Reflection; - -namespace jsb.Editor -{ - using QuickJS.Native; - using QuickJS.Unity; - using QuickJS.Binding; - using UnityEngine; - using UnityEditor; - using UnityEditor.IMGUI.Controls; - - public class UnityUIBinding : AbstractBindingProcess - { - public bool IsAvailable(MethodInfo methodInfo) - { - return methodInfo != null && methodInfo.IsPublic; - } - - public override void OnPreCollectAssemblies(BindingManager bindingManager) - { - bindingManager.SetTypeBlocked(typeof(UnityEngine.UI.ILayoutGroup)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.UI.ILayoutSelfController)); - bindingManager.SetTypeBlocked(typeof(UnityEngine.UI.GraphicRebuildTracker)); - bindingManager.TransformType(typeof(UnityEngine.UI.DefaultControls)) - .SetMemberBlocked("factory"); - ; - bindingManager.TransformType(typeof(UnityEngine.UI.PositionAsUV1)) - .SetMemberBlocked("ModifyMesh"); - bindingManager.TransformType(typeof(UnityEngine.UI.Shadow)) - .SetMemberBlocked("ModifyMesh"); - bindingManager.TransformType(typeof(UnityEngine.UI.Outline)) - .SetMemberBlocked("ModifyMesh"); - bindingManager.TransformType(typeof(UnityEngine.UI.Graphic)) - .SetMemberBlocked("OnRebuildRequested"); - bindingManager.TransformType(typeof(UnityEngine.UI.Text)) - .SetMemberBlocked("OnRebuildRequested"); - } - - public override void OnPreExporting(BindingManager bindingManager) - { - } - - public override void OnPostExporting(BindingManager bindingManager) - { - bindingManager.ExportTypesInAssembly(typeof(UnityEngine.UI.Text).Assembly, true); - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityUIBinding.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityUIBinding.cs.meta deleted file mode 100644 index 03f7aac8..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/CustomBindings/UnityUIBinding.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f24feeabf2369dc40928bc73f4676413 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/EditorRuntime.cs b/unity/quickjs/Runtime/Source/Unity/Editor/EditorRuntime.cs deleted file mode 100644 index 23217986..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/EditorRuntime.cs +++ /dev/null @@ -1,302 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.IO; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using UnityEngine; - using UnityEditor; - using QuickJS.Utils; - using QuickJS.IO; - using QuickJS; - using QuickJS.Binding; - using QuickJS.Native; - - [InitializeOnLoad] - public class EditorRuntime - { - private enum RunMode - { - Editor, - Playing, - None, - } -#pragma warning disable 0649 - private static EditorRuntime _instance; -#pragma warning restore 0649 - private ScriptRuntime _runtime; - private RunMode _runMode; - private int _tick; - private Prefs _prefs; - private TSConfig _tsConfig; - private float _changedFileInterval; - private HashSet _changedFileQueue; - - static EditorRuntime() - { - PrefsLoader.prefsChanged += OnPrefsChanged; - OnPrefsChanged(PrefsLoader.CurrentPrefs); - } - - private static void OnPrefsChanged(Prefs prefs) - { - if (_instance != null) - { - if (!prefs.editorScripting) - { - _instance.OnEditorQuitting(); - _instance = null; - } - } - else - { - if (prefs.editorScripting) - { - _instance = new EditorRuntime(prefs); - } - } - } - - public static Prefs GetPrefs() - { - return _instance?._prefs; - } - - public static TSConfig GetTSConfig() - { - return _instance?._tsConfig; - } - - public static EditorRuntime GetInstance() - { - return _instance; - } - - public EditorRuntime(Prefs prefs) - { - _prefs = prefs; - _runMode = RunMode.None; - _changedFileQueue = new HashSet(); - ScriptEngine.RuntimeCreated += OnScriptRuntimeCreated; - EditorApplication.delayCall += OnEditorInit; - EditorApplication.playModeStateChanged += OnPlayModeStateChanged; - } - - ~EditorRuntime() - { - } - - private void OnEditorQuitting() - { - if (_runtime == null) - { - return; - } - - var runtime = _runtime; - _runtime = null; - _runMode = RunMode.None; - JSScriptFinder.GetInstance().ModuleSourceChanged -= OnModuleSourceChanged; - EditorApplication.delayCall -= OnEditorInit; - EditorApplication.update -= OnEditorUpdate; - AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeAssemblyReload; - EditorApplication.quitting -= OnEditorQuitting; - runtime.Shutdown(); - } - - public bool Reload() - { - if (EditorApplication.isCompiling) - { - return false; - } - - OnEditorQuitting(); - OnEditorInit(); - return true; - } - - private void OnEditorInit() - { - if (_runMode == RunMode.Playing) - { - return; - } - - if (_runtime == null) - { - EditorApplication.update += OnEditorUpdate; - AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload; - EditorApplication.quitting += OnEditorQuitting; - - var logger = new DefaultScriptLogger(); - var pathResolver = new PathResolver(); - var fileSystem = new DefaultFileSystem(logger); - var asyncManager = new DefaultAsyncManager(); - - _tick = Environment.TickCount; - _runtime = ScriptEngine.CreateRuntime(true); - _runtime.AddModuleResolvers(); - _runtime.Initialize(new ScriptRuntimeArgs - { - fileSystem = fileSystem, - pathResolver = pathResolver, - asyncManager = asyncManager, - logger = logger, - byteBufferAllocator = new ByteBufferPooledAllocator(), - binder = DefaultBinder.GetBinder(_prefs.preferredBindingMethod), - }); - } - } - - private void OnScriptRuntimeCreated(ScriptRuntime runtime) - { - runtime.OnInitializing += OnScriptRuntimeInitializing; - runtime.OnMainModuleLoaded += OnScriptRuntimeMainModuleLoaded; - } - - public static TSConfig LoadTSConfig(string workspace = null) - { - var tsconfigPath = string.IsNullOrEmpty(workspace) ? "tsconfig.json" : Path.Combine(workspace, "tsconfig.json"); - if (File.Exists(tsconfigPath)) - { - var text = Utils.TextUtils.NormalizeJson(File.ReadAllText(tsconfigPath)); - var tsconfig = JsonUtility.FromJson(text); - return tsconfig; - } - - Debug.LogWarning("no tsconfig.json found"); - return null; - } - - private void OnScriptRuntimeMainModuleLoaded(ScriptRuntime runtime) - { - } - - private void OnScriptRuntimeInitializing(ScriptRuntime runtime) - { - _tsConfig = LoadTSConfig(); - - if (_tsConfig != null && !string.IsNullOrEmpty(_tsConfig.compilerOptions.outDir)) - { - runtime.AddSearchPath(_tsConfig.compilerOptions.outDir); - } - runtime.AddStaticModule("jsb.editor", Bind); - JSScriptFinder.GetInstance().ModuleSourceChanged += OnModuleSourceChanged; - - if (!string.IsNullOrEmpty(_prefs.editorEntryPoint)) - { - runtime.ResolveModule(_prefs.editorEntryPoint); - } - - foreach (var module in _prefs.editorRequires) - { - runtime.ResolveModule(module); - } - - // in order to evaluate the decorator (the registration of CustomEditor), we need to load these modules before actually using - var editorScripts = new List(); - JSScriptFinder.GetInstance().Search(JSScriptClassType.CustomEditor, editorScripts); - foreach (var editorScript in editorScripts) - { - runtime.ResolveModule(editorScript.modulePath); - } - } - - public static ClassDecl Bind(TypeRegister register) - { - var ns_jsb = register.CreateClass("JSBEditorModule"); - - { - var ns_editorRuntime = register.CreateClass("JSEditorRuntimeClass"); - ns_editorRuntime.AddProperty(true, "prefs", JS_GetPrefs, null); - ns_editorRuntime.AddProperty(true, "tsconfig", JS_GetTSConfig, null); - ns_jsb.AddValue("EditorRuntime", ns_editorRuntime.GetConstructor()); - } - return ns_jsb; - } - - [MonoPInvokeCallback(typeof(JSGetterCFunction))] - private static JSValue JS_GetPrefs(JSContext ctx, JSValue this_val) - { - return Values.js_push_classvalue(ctx, GetPrefs()); - } - - [MonoPInvokeCallback(typeof(JSGetterCFunction))] - private static JSValue JS_GetTSConfig(JSContext ctx, JSValue this_val) - { - return Values.js_push_classvalue(ctx, GetTSConfig()); - } - - private void OnModuleSourceChanged(string modulePath, JSScriptClassType classTypes) - { - // the already loaded CustomEditor scripts could be reloaded automatically by file-watcher - // but if it's freshly added, resolve it here - if ((classTypes & JSScriptClassType.CustomEditor) != 0) - { - var runtime = ScriptEngine.GetRuntime(); - if (runtime != null && !EditorApplication.isCompiling) - { - runtime.ResolveModule(modulePath); - } - } - } - - private void OnPlayModeStateChanged(PlayModeStateChange mode) - { - switch (mode) - { - case PlayModeStateChange.EnteredEditMode: _runMode = RunMode.Editor; EditorApplication.delayCall += OnEditorInit; break; - case PlayModeStateChange.ExitingEditMode: OnEditorQuitting(); break; - case PlayModeStateChange.EnteredPlayMode: _runMode = RunMode.Playing; break; - } - } - - private void OnBeforeAssemblyReload() - { - OnEditorQuitting(); - } - - private void OnEditorUpdate() - { - if (_runtime != null) - { - if (EditorApplication.isCompiling) - { - OnEditorQuitting(); - return; - } - - var tick = Environment.TickCount; - if (tick < _tick) - { - _runtime.Update((tick - int.MinValue) + (int.MaxValue - _tick)); - } - else - { - _runtime.Update(tick - _tick); - } - _tick = tick; - } - } - - public static void Eval(string code) - { - var runtime = ScriptEngine.GetRuntime(); - if (runtime != null && !EditorApplication.isCompiling) - { - runtime.GetMainContext().EvalSource(code, "eval"); - return; - } - - Debug.LogError("no running ScriptRuntime"); - } - - public static void ShowWindow(string module, string typename) - { - Eval($"require('UnityEditor').EditorWindow.GetWindow(require('{module}').{typename}).Show()"); - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/EditorRuntime.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/EditorRuntime.cs.meta deleted file mode 100644 index 862454d1..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/EditorRuntime.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 624bf9490fcf6e24aa6c8cde17602b3b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSAssetPostprocessor.cs b/unity/quickjs/Runtime/Source/Unity/Editor/JSAssetPostprocessor.cs deleted file mode 100644 index dcf2bf22..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSAssetPostprocessor.cs +++ /dev/null @@ -1,139 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Reflection; - -namespace QuickJS.Unity -{ - using Binding; - using Native; - using UnityEngine; - using UnityEditor; - - public class JSAssetPostprocessor : AssetPostprocessor - { - private void OnPostprocessTexture(Texture2D texture) - { - CallJavascript(this, "OnPostprocessTexture", texture); - } - - private void OnPostprocessModel(GameObject model) - { - CallJavascript(this, "OnPostprocessModel", model); - } - - private void OnPostprocessAudio(AudioClip audioClip) - { - CallJavascript(this, "OnPostprocessAudio", audioClip); - } - - private void OnPostprocessMaterial(Material material) - { - CallJavascript(this, "OnPostprocessMaterial", material); - } - - private void OnPostProcessSprites(Texture2D texture, Sprite[] sprites) - { - CallJavascript(this, "OnPostProcessSprites", texture, sprites); - } - - static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) - { - CallJavascript(null, "OnPostprocessAllAssets", importedAssets, deletedAssets, movedAssets, movedFromAssetPaths); - } - - private static void CallJavascript(AssetPostprocessor proc, string funcName, params object[] args) - { - var prefs = EditorRuntime.GetPrefs(); - if (prefs != null && prefs.assetPostProcessors != null) - { - foreach (var postprocessor in prefs.assetPostProcessors) - { - CallJavascript(postprocessor, proc, funcName, args); - } - } - } - - private static void CallJavascript(string module_id, AssetPostprocessor proc, string funcName, params object[] args) - { - var runtime = ScriptEngine.GetRuntime(); - if (runtime != null && runtime.isValid && !EditorApplication.isCompiling) - { - runtime.ResolveModule(module_id); - - var context = runtime.GetMainContext(); - var ctx = (JSContext)context; - JSValue func; - - if (context.LoadModuleCacheExports(module_id, funcName, out func)) - { - var globalThis = context.GetGlobalObject(); - - if (JSApi.JS_IsFunction(ctx, func) == 1) - { - var arglist = new List(); - do - { - if (proc != null) - { - var val = Values.js_push_var(ctx, proc); - if (val.IsException()) - { - ctx.print_exception(); - break; - } - arglist.Add(val); - } - - var err = false; - for (var i = 0; i < args.Length; i++) - { - var val = Values.js_push_var(ctx, args[i]); - if (val.IsException()) - { - ctx.print_exception(); - err = true; - break; - } - arglist.Add(val); - } - - if (err) - { - break; - } - - var argv = arglist.ToArray(); - JSValue rval = JSApi.JS_UNDEFINED; - unsafe - { - fixed (JSValue* pArgs = argv) - { - rval = JSApi.JS_Call(ctx, func, globalThis, argv.Length, pArgs); - } - } - - if (rval.IsException()) - { - ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(ctx, rval); - } - } while (false); - - for (var i = 0; i < arglist.Count; i++) - { - JSApi.JS_FreeValue(ctx, arglist[i]); - } - } - - JSApi.JS_FreeValue(ctx, globalThis); - JSApi.JS_FreeValue(ctx, func); - } - } - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSAssetPostprocessor.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/JSAssetPostprocessor.cs.meta deleted file mode 100644 index 7022eb58..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSAssetPostprocessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 80d6ff795de7fef48a922288249e1616 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourFullInspector.cs b/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourFullInspector.cs deleted file mode 100644 index 04c8cfc5..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourFullInspector.cs +++ /dev/null @@ -1,13 +0,0 @@ -#if !JSB_UNITYLESS - -namespace QuickJS.Unity -{ - using UnityEditor; - - [CustomEditor(typeof(JSBehaviourFull))] - public class JSBehaviourFullInspector : JSBehaviourInspector - { - } -} - -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourFullInspector.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourFullInspector.cs.meta deleted file mode 100644 index 18b0a87d..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourFullInspector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e19e97cf5f4c95749aa634d2d97a1fe5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourInspector.cs b/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourInspector.cs deleted file mode 100644 index 56e45083..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourInspector.cs +++ /dev/null @@ -1,43 +0,0 @@ -#if !JSB_UNITYLESS -using System; - -namespace QuickJS.Unity -{ - using UnityEditor; - - [CustomEditor(typeof(JSBehaviour))] - public class JSBehaviourInspector : JSInspectorBase - { - protected override JSScriptClassType GetScriptClassType() - { - return JSScriptClassType.MonoBehaviour; - } - - protected override void DrawSourceView() - { - base.DrawSourceView(); - - var target_t = GetTarget(); - var updatableOld = target_t is JSBehaviourFull; - var updatableNew = EditorGUILayout.Toggle("Updatable", updatableOld); - - if (updatableNew != updatableOld) - { - this.ReleaseJSValues(); - target_t.ReleaseScriptInstance(); - - var type = updatableNew ? typeof(JSBehaviourFull) : typeof(JSBehaviour); - var monoScript = UnityHelper.GetMonoScript(type); - var prop = serializedObject.FindProperty("m_Script"); - serializedObject.Update(); - prop.objectReferenceValue = monoScript; - - // this editor instance (and _target) reference will be invalid after this call, - // do not access anything relating to the old references - serializedObject.ApplyModifiedProperties(); - } - } - } -} - -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourInspector.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourInspector.cs.meta deleted file mode 100644 index 12f8afaf..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSBehaviourInspector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 56ce79cbfb2f9ba45bf27a8f8f95a243 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSInspectorBase.cs b/unity/quickjs/Runtime/Source/Unity/Editor/JSInspectorBase.cs deleted file mode 100644 index 9fa2d4de..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSInspectorBase.cs +++ /dev/null @@ -1,546 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.IO; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using UnityEditor; - using UnityEngine; - using Native; - - public abstract class JSInspectorBase : Editor, Utils.IObjectCollectionEntry - where T : Object, IScriptEditorSupport - { - private T _target; - private Utils.ObjectCollection.Handle _handle; - private JSScriptRef _scriptRef; - - [NonSerialized] - private JSScriptRef _lastScriptRefOfTarget; - - private string[] _tabViews = new string[] { "Editor", "Source", "Primitive" }; - private int _selectedTabViewIndex = 0; - - /// - /// indicates the current acutal state of this Editor instance - /// - private bool _enabled; - - /// - /// the script runtime is not ready when the Editor is enabled, - /// try to mark and delay the call of OnEnable in scripts - /// - private bool _enabledPending; - - private JSContext _ctx = JSContext.Null; - private JSValue _this_obj = JSApi.JS_UNDEFINED; - - private bool _onDestroyValid; - private JSValue _onDestroyFunc = JSApi.JS_UNDEFINED; - - private bool _onEnableValid; - private JSValue _onEnableFunc = JSApi.JS_UNDEFINED; - - private bool _onDisableValid; - private JSValue _onDisableFunc = JSApi.JS_UNDEFINED; - - private bool _onInspectorGUIValid; - private JSValue _onInspectorGUIFunc = JSApi.JS_UNDEFINED; - - private bool _onBeforeScriptReloadValid; - private JSValue _onBeforeScriptReloadFunc = JSApi.JS_UNDEFINED; - - private bool _onAfterScriptReloadValid; - private JSValue _onAfterScriptReloadFunc = JSApi.JS_UNDEFINED; - - protected T GetTarget() - { - if (_target == null) - { - _target = target as T; - } - return _target; - } - - void Awake() - { - } - - protected abstract JSScriptClassType GetScriptClassType(); - - private void OnScriptReloading(ScriptContext context, string resolved_id) - { - if (context.CheckModuleId(_scriptRef, resolved_id)) - { - if (_onBeforeScriptReloadValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onBeforeScriptReloadFunc); - } - } - } - - private void OnScriptReloaded(ScriptContext context, string resolved_id) - { - if (context.CheckModuleId(_scriptRef, resolved_id)) - { - if (!_this_obj.IsNullish()) - { - JSValue newClass; - if (context.LoadModuleCacheExports(resolved_id, _scriptRef.className, out newClass)) - { - var prototype = JSApi.JS_GetProperty(context, newClass, context.GetAtom("prototype")); - - if (prototype.IsObject()) - { - OnUnbindingJSMembers(); - JSApi.JS_SetPrototype(context, _this_obj, prototype); - OnBindingJSMembers(context); - - if (_onAfterScriptReloadValid) - { - JSScriptableObject._CallJSFunc(context, _this_obj, _onAfterScriptReloadFunc); - } - } - - JSApi.JS_FreeValue(context, prototype); - JSApi.JS_FreeValue(context, newClass); - } - } - } - - var scriptRefOfTarget = GetTarget().scriptRef; - if (!_lastScriptRefOfTarget.IsSameScript(scriptRefOfTarget) && context.CheckModuleId(scriptRefOfTarget, resolved_id)) - { - // trigger editor script reloading after the target being changed - if (_enabled) - { - OnEnable(); - } - } - } - - #region IObjectCollectionEntry implementation - public void OnCollectionReleased() - { - Release(); - } - #endregion - - protected void ReleaseJSValues() - { - if (!_this_obj.IsNullish()) - { - OnUnbindingJSMembers(); - - JSApi.JS_FreeValue(_ctx, _this_obj); - _this_obj = JSApi.JS_UNDEFINED; - } - - var runtime = ScriptEngine.GetRuntime(_ctx); - var context = runtime?.GetContext(_ctx); - _ctx = JSContext.Null; - - if (context != null) - { - runtime.RemoveManagedObject(_handle); - context.OnScriptReloading -= OnScriptReloading; - context.OnScriptReloaded -= OnScriptReloaded; - } - } - - void Release() - { - if (!GetTarget().isStandaloneScript) - { - GetTarget().ReleaseScriptInstance(); - _lastScriptRefOfTarget.Reset(); - } - ReleaseJSValues(); - } - - protected void CreateScriptInstance(JSContext ctx, JSValue this_obj, JSValue ctor) - { - var runtime = ScriptEngine.GetRuntime(ctx); - var context = runtime?.GetContext(ctx); - if (context == null || !context.IsValid()) - { - return; - } - - runtime.AddManagedObject(this, out _handle); - context.OnScriptReloading += OnScriptReloading; - context.OnScriptReloaded += OnScriptReloaded; - _ctx = ctx; - _this_obj = JSApi.JS_DupValue(ctx, this_obj); - - if (!_this_obj.IsNullish()) - { - OnBindingJSMembers(context); - - var awakeFunc = JSApi.JS_GetProperty(ctx, this_obj, context.GetAtom("Awake")); - - JSScriptableObject._CallJSFunc(_ctx, _this_obj, awakeFunc); - JSApi.JS_FreeValue(_ctx, awakeFunc); - } - } - - private void OnBindingJSMembers(ScriptContext context) - { - var ctx = (JSContext)context; - - _onDestroyFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnDestroy")); - _onDestroyValid = JSApi.JS_IsFunction(ctx, _onDestroyFunc) == 1; - - _onEnableFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnEnable")); - _onEnableValid = JSApi.JS_IsFunction(ctx, _onEnableFunc) == 1; - - _onDisableFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnDisable")); - _onDisableValid = JSApi.JS_IsFunction(ctx, _onDisableFunc) == 1; - - _onInspectorGUIFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnInspectorGUI")); - _onInspectorGUIValid = JSApi.JS_IsFunction(ctx, _onInspectorGUIFunc) == 1; - - _onBeforeScriptReloadFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnBeforeScriptReload")); - _onBeforeScriptReloadValid = JSApi.JS_IsFunction(ctx, _onBeforeScriptReloadFunc) == 1; - - _onAfterScriptReloadFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnAfterScriptReload")); - _onAfterScriptReloadValid = JSApi.JS_IsFunction(ctx, _onAfterScriptReloadFunc) == 1; - } - - private void OnUnbindingJSMembers() - { - JSApi.JS_FreeValue(_ctx, _onDestroyFunc); - _onDestroyFunc = JSApi.JS_UNDEFINED; - _onDestroyValid = false; - - JSApi.JS_FreeValue(_ctx, _onEnableFunc); - _onEnableFunc = JSApi.JS_UNDEFINED; - _onEnableValid = false; - - JSApi.JS_FreeValue(_ctx, _onDisableFunc); - _onDisableFunc = JSApi.JS_UNDEFINED; - _onDisableValid = false; - - JSApi.JS_FreeValue(_ctx, _onInspectorGUIFunc); - _onInspectorGUIFunc = JSApi.JS_UNDEFINED; - _onInspectorGUIValid = false; - - JSApi.JS_FreeValue(_ctx, _onBeforeScriptReloadFunc); - _onBeforeScriptReloadFunc = JSApi.JS_UNDEFINED; - _onBeforeScriptReloadValid = false; - - JSApi.JS_FreeValue(_ctx, _onAfterScriptReloadFunc); - _onAfterScriptReloadFunc = JSApi.JS_UNDEFINED; - _onAfterScriptReloadValid = false; - } - - protected void CreateScriptInstance() - { - ReleaseJSValues(); - - var target_t = GetTarget(); - var ctx = target_t.ctx; - if (!ctx.IsValid()) - { - return; - } - - var prefs = EditorRuntime.GetPrefs(); - var runtime = ScriptEngine.GetRuntime(ctx); - if (prefs == null || runtime == null || !runtime.isRunning) - { - return; - } - - var editorClass = JSApi.JS_UNDEFINED; - var context = runtime.GetMainContext(); - var decorator_module = prefs.editorDecoratorScript; - var scriptFunc = context.EvalSource($"require('{decorator_module}').EditorUtil.getCustomEditor", "eval"); - if (scriptFunc != null) - { - unsafe - { - var safeRelease = new Utils.SafeRelease(context, target_t.CloneValue()); - if (safeRelease[0].IsObject()) - { - var args = stackalloc JSValue[] { safeRelease[0] }; - editorClass = scriptFunc._Invoke(context, 1, args); - } - safeRelease.Release(); - } - scriptFunc.Dispose(); - } - else - { - Debug.LogError($"failed to get EditorUtil.getCustomEditor in {decorator_module}"); - } - - if (JSApi.JS_IsConstructor(ctx, editorClass) == 1) - { - var objectCache = runtime.GetObjectCache(); - - // 旧的绑定值释放? - if (!_this_obj.IsNullish()) - { - var payload = JSApi.JSB_FreePayload(ctx, _this_obj); - if (payload.type_id == BridgeObjectType.ObjectRef) - { - try - { - objectCache.RemoveObject(payload.value); - } - catch (Exception exception) - { - runtime.GetLogger()?.WriteException(exception); - } - } - } - - var object_id = objectCache.AddObject(this, false); - var editorInstance = JSApi.jsb_construct_bridge_object(ctx, editorClass, object_id); - if (editorInstance.IsException()) - { - ctx.print_exception(); - objectCache.RemoveObject(object_id); - } - else - { - _lastScriptRefOfTarget = target_t.scriptRef; - objectCache.AddJSValue(this, editorInstance); - context.TrySetScriptRef(ref _scriptRef, editorClass); - CreateScriptInstance(ctx, editorInstance, editorClass); - JSApi.JS_FreeValue(ctx, editorInstance); - } - } - - JSApi.JS_FreeValue(ctx, editorClass); - } - - void OnEnable() - { - _enabled = true; - _enabledPending = true; - ReleaseJSValues(); - } - - private void EnableScriptInstance() - { - if (!_enabledPending || !_enabled) - { - return; - } - - // 当前编辑器为附加模式执行时, 等待目标脚本建立连接 - // 否则由编辑器管理目标生命周期 - - if (GetTarget().isStandaloneScript) - { - if (GetTarget().isScriptInstanced) - { - this.OnEnableScriptInstance(); - } - } - else - { - if (GetTarget().CreateScriptInstance()) - { - this.OnEnableScriptInstance(); - } - } - } - - private void OnEnableScriptInstance() - { - _enabledPending = false; - this.CreateScriptInstance(); - - if (_onEnableValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onEnableFunc); - } - } - - void OnDisable() - { - _enabledPending = false; - _enabled = false; - - if (_onDisableValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onDisableFunc); - } - - Release(); - } - - void OnDestroy() - { - if (_onDestroyValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onDestroyFunc); - } - - _enabledPending = false; - Release(); - } - - private void OnSelectedScript(JSScriptClassPathHint classPath) - { - var target_t = GetTarget(); - - if (_enabled && target_t != null && !classPath.IsReferenced(target_t.scriptRef)) - { - var scriptRef = target_t.scriptRef; - - scriptRef.sourceFile = classPath.sourceFile; - if (scriptRef.modulePath != classPath.modulePath || scriptRef.className != classPath.className) - { - scriptRef.modulePath = classPath.modulePath; - scriptRef.className = classPath.className; - - Undo.RecordObject(target_t, "Change Script Reference"); - target_t.scriptRef = scriptRef; - this.ReleaseJSValues(); - target_t.ReleaseScriptInstance(); - target_t.CreateScriptInstance(); - - // 重新绑定当前编辑器脚本实例 - this.CreateScriptInstance(); - } - else - { - Undo.RecordObject(target_t, "Update Script Source"); - target_t.scriptRef = scriptRef; - } - - EditorUtility.SetDirty(target_t); - } - } - - protected virtual void DrawSourceView() - { - BaseEditorWindow.Block("Target Script", () => - { - var target_t = GetTarget(); - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.TextField("Source File", target_t.scriptRef.sourceFile); - var sourceFileRect = GUILayoutUtility.GetLastRect(); - - if (GUILayout.Button("F", GUILayout.Width(20f))) - { - sourceFileRect.y += 10f; - if (JSScriptSearchWindow.Show(sourceFileRect, string.Empty, GetScriptClassType(), OnSelectedScript)) - { - GUIUtility.ExitGUI(); - } - } - - EditorGUILayout.EndHorizontal(); - - if (!string.IsNullOrEmpty(target_t.scriptRef.sourceFile)) - { - var sourceFileExists = File.Exists(target_t.scriptRef.sourceFile); - - if (!sourceFileExists) - { - EditorGUILayout.HelpBox("Source file is missing", MessageType.Warning); - } - } - else - { - if (EditorApplication.isPlaying) - { - EditorGUILayout.HelpBox("Script instance without relevant script reference info?", MessageType.Warning); - } - } - - EditorGUILayout.LabelField("Module Path", target_t.scriptRef.modulePath); - EditorGUILayout.LabelField("Class Name", target_t.scriptRef.className); - }); - - BaseEditorWindow.Block("Editor Script", () => - { - EditorGUILayout.LabelField("Module Path", _scriptRef.modulePath); - EditorGUILayout.LabelField("Class Name", _scriptRef.className); - }); - } - - private void DrawPrimitiveView() - { - var ps = GetTarget().properties; - if (ps == null || ps.IsEmpty) - { - EditorGUILayout.HelpBox("Empty Properties View", MessageType.Info); - return; - } - - EditorGUI.BeginDisabledGroup(true); - EditorGUILayout.IntField("Data Format", ps.dataFormat); - EditorGUILayout.IntField("Blob", ps.GenericCount); - EditorGUILayout.IntField("Referenced Objects", ps.ReferencedObjectCount); - EditorGUI.EndDisabledGroup(); - } - - private void DrawScriptingView() - { - var target_t = GetTarget(); - - if (target_t.isScriptInstanced) - { - if (target_t.IsValid()) - { - if (_onInspectorGUIValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onInspectorGUIFunc); - } - else - { - EditorGUILayout.HelpBox("No inspector available for this script type", MessageType.Info); - } - } - else - { - if (!target_t.scriptRef.IsEmpty()) - { - EditorGUILayout.HelpBox("Invalid script reference", MessageType.Warning); - } - DrawSourceView(); - } - } - else - { - EditorGUILayout.HelpBox("Waiting for script instancing...", MessageType.Warning); - OnWaitingForScriptInstancing(); - } - } - - protected virtual void OnWaitingForScriptInstancing() - { - } - - public override void OnInspectorGUI() - { - if (EditorApplication.isCompiling || (!EditorApplication.isPlaying && EditorApplication.isPlayingOrWillChangePlaymode)) - { - Release(); - EditorGUILayout.HelpBox("Temporarily unavailable in the script compilation process", MessageType.Warning); - return; - } - - if (_enabledPending) - { - EnableScriptInstance(); - } - - _selectedTabViewIndex = GUILayout.Toolbar(_selectedTabViewIndex, _tabViews); - switch (_selectedTabViewIndex) - { - case 0: DrawScriptingView(); break; - case 1: DrawSourceView(); break; - default: DrawPrimitiveView(); break; - } - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSInspectorBase.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/JSInspectorBase.cs.meta deleted file mode 100644 index e55d262e..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSInspectorBase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 43d172ac0ae6ce64392ab5e901a6aeee -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptClassPathHint.cs b/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptClassPathHint.cs deleted file mode 100644 index 4821fa93..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptClassPathHint.cs +++ /dev/null @@ -1,47 +0,0 @@ -#if !JSB_UNITYLESS -namespace QuickJS.Unity -{ - [System.Flags] - public enum JSScriptClassType - { - None = 0, - MonoBehaviour = 1, - - /// - /// UnityEditor.Editor - /// - CustomEditor = 2, - - ScriptableObject = 4, - EditorWindow = 8, - } - - public struct JSScriptClassPathHint - { - public readonly string sourceFile; - public readonly string modulePath; - public readonly string className; - public readonly string classPath; - public readonly JSScriptClassType classType; - - public JSScriptClassPathHint(string sourceFile, string modulePath, string className, JSScriptClassType classType) - { - this.sourceFile = sourceFile; - this.modulePath = modulePath; - this.className = className; - this.classPath = JSScriptRef.ToClassPath(modulePath, className); - this.classType = classType; - } - - public bool IsReferenced(JSScriptRef scriptRef) - { - return scriptRef.modulePath == modulePath && scriptRef.className == className; - } - - public string ToClassPath() - { - return classPath; - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptClassPathHint.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptClassPathHint.cs.meta deleted file mode 100644 index 08fcce51..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptClassPathHint.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 2f85e8f11c134957badab8e5e5587495 -timeCreated: 1619156725 \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptFinder.cs b/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptFinder.cs deleted file mode 100644 index 650283a1..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptFinder.cs +++ /dev/null @@ -1,252 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.IO; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - /// - /// ScriptFinder is a utility editor service to collect the unity scripts (MonoBehaviour/Editor etc.) implemented by typescripts - /// - public class JSScriptFinder - { - private static JSScriptFinder _finder; - - private FileSystemWatcher _fsw; - private string _baseDir; - private string _fileExt; - private bool _isRefreshing; - private float _delay; - - // classPath => JSScriptClassPathHint - private Dictionary _scriptClassPaths = new Dictionary(); - private Dictionary> _fullPathToClassPath = new Dictionary>(); - - private bool _cachedChangesDirty = false; - // fullPath => WatcherChangeType - private Dictionary _cachedChanges = new Dictionary(); - - public event Action ModuleSourceChanged; - public event Action ScriptClassPathsUpdated; - - public static JSScriptFinder GetInstance() - { - if (_finder == null) - { - var prefs = PrefsLoader.CurrentPrefs; - var baseDir = prefs.sourceDir; - - _finder = new JSScriptFinder(baseDir, prefs.typescriptExt); - _finder.Start(); //TODO: need optimization, make the full collecting process async, and wait it finished - } - - return _finder; - } - - public JSScriptFinder(string baseDir, string fileExt) - { - _baseDir = baseDir; - _fileExt = fileExt; - } - - private void OnChanged(object sender, FileSystemEventArgs e) - { - lock (_cachedChanges) - { - var fullPath = Path.GetFullPath(e.FullPath); - _cachedChanges[fullPath] = WatcherChangeTypes.Changed; - _cachedChangesDirty = true; - // UnityEngine.Debug.Log($"changed {fullPath}"); - } - } - - private void OnCreated(object sender, FileSystemEventArgs e) - { - lock (_cachedChanges) - { - var fullPath = Path.GetFullPath(e.FullPath); - _cachedChanges[fullPath] = WatcherChangeTypes.Created; - _cachedChangesDirty = true; - // UnityEngine.Debug.Log($"created {fullPath}"); - } - } - - private void OnDeleted(object sender, FileSystemEventArgs e) - { - lock (_cachedChanges) - { - var fullPath = Path.GetFullPath(e.FullPath); - _cachedChanges[fullPath] = WatcherChangeTypes.Deleted; - _cachedChangesDirty = true; - // UnityEngine.Debug.Log($"deleted {fullPath}"); - } - } - - public void RefreshAll() - { - _isRefreshing = true; - _scriptClassPaths.Clear(); - SearchDirectory(_baseDir); - _isRefreshing = false; - ScriptClassPathsUpdated?.Invoke(); - } - - private void SearchDirectory(string dir) - { - foreach (var subDir in Directory.GetDirectories(dir)) - { - SearchDirectory(subDir); - } - - foreach (var file in Directory.GetFiles(dir)) - { - ParseFile(file.Replace('\\', '/')); - } - } - - private void ParseFile(string filePath) - { - if (!filePath.EndsWith(_fileExt)) - { - return; - } - - var results = new List(); - string normalizedPath; - string modulePath; - if (UnityHelper.ResolveScriptRef(_baseDir, filePath, out normalizedPath, out modulePath, results)) - { - List list; - normalizedPath = normalizedPath.ToLower(); - if (_fullPathToClassPath.TryGetValue(normalizedPath, out list)) - { - foreach (var item in list) - { - _scriptClassPaths.Remove(item); - } - list.Clear(); - } - else - { - list = _fullPathToClassPath[normalizedPath] = new List(); - } - - var classTypes = JSScriptClassType.None; - foreach (var result in results) - { - var classPath = result.ToClassPath(); - - list.Add(classPath); - _scriptClassPaths[classPath] = result; - classTypes |= result.classType; - } - - ModuleSourceChanged?.Invoke(modulePath, classTypes); - } - } - - public bool Search(JSScriptClassType classType, List results) - { - return Search(null, classType, results); - } - - public bool Search(string pattern, JSScriptClassType classType, List results) - { - foreach (var pair in _scriptClassPaths) - { - //TODO: need optimization - if ((pair.Value.classType & classType) != 0 && (string.IsNullOrEmpty(pattern) || pair.Key.Contains(pattern))) - { - results.Add(pair.Value); - } - } - - return true; - } - - public void Start() - { - if (_fsw != null) - { - return; - } - - UnityEditor.EditorApplication.update += OnUpdate; - } - - private void OnUpdate() - { - if (_isRefreshing || !UnityHelper.IsApplicationActive()) - { - return; - } - - _delay += UnityEngine.Time.realtimeSinceStartup; - if (_delay < 1.0f) - { - return; - } - - _delay = 0f; - if (_fsw == null) - { - if (Directory.Exists(_baseDir)) - { - _fsw = new FileSystemWatcher(_baseDir, $"*{_fileExt}"); - _fsw.IncludeSubdirectories = true; - _fsw.Changed += OnChanged; - _fsw.Created += OnCreated; - _fsw.Deleted += OnDeleted; - _fsw.EnableRaisingEvents = true; - RefreshAll(); - } - return; - } - - lock (_cachedChanges) - { - if (_cachedChangesDirty) - { - foreach (var pair in _cachedChanges) - { - var fullPath = pair.Key; - var changeType = pair.Value; - - if (changeType == WatcherChangeTypes.Deleted) - { - List classPathList; - var lowerCasedFullPath = fullPath.ToLower(); - if (_fullPathToClassPath.TryGetValue(lowerCasedFullPath, out classPathList)) - { - _fullPathToClassPath.Remove(lowerCasedFullPath); - foreach (var item in classPathList) - { - _scriptClassPaths.Remove(item); - } - } - } - else - { - ParseFile(fullPath); - } - } - _cachedChanges.Clear(); - _cachedChangesDirty = false; - ScriptClassPathsUpdated?.Invoke(); - } - } - } - - public void Stop() - { - UnityEditor.EditorApplication.update -= OnUpdate; - - if (_fsw != null) - { - _fsw.Dispose(); - _fsw = null; - } - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptFinder.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptFinder.cs.meta deleted file mode 100644 index 3f1bc0d9..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptFinder.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6b6b93d0397822b44aa94815efb3343d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptSearchWindow.cs b/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptSearchWindow.cs deleted file mode 100644 index 460d97b3..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptSearchWindow.cs +++ /dev/null @@ -1,217 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using UnityEditor; - using UnityEditor.IMGUI.Controls; - using UnityEngine; - - public class JSScriptSearchWindow : EditorWindow - { - private bool _parepared; - private Action _selectCallback; - - private bool _showSearchResults; - private int _selectedSearchResultIndex; - private int _maxSearchResults = 30; - private string _searchString = "string.Empty"; - - private JSScriptClassType _searchType; - - private List _searchResults = new List(); - private SearchField _searchField; - - private Vector2 _searchScrollViewState; - - private float Styles_resultHeight = 20; - private float Styles_resultsBorderWidth = 2; - // private float Styles_resultsMargin = 15; - // private float Styles_resultsLabelOffset = 2; - - private GUIStyle Styles_entryEven; - private GUIStyle Styles_entryOdd; - private GUIStyle Styles_labelStyle; - // private GUIStyle Styles_resultsBorderStyle; - - private GUIContent s_TextImage = new GUIContent(); - - private GUIContent TempContent(string t, Texture i = null) - { - s_TextImage.text = t; - s_TextImage.image = i; - return s_TextImage; - } - - private void OnEnable() - { - _parepared = false; - } - - private void OnPrepareGUI() - { - Styles_entryEven = new GUIStyle("CN EntryBackEven"); - Styles_entryOdd = new GUIStyle("CN EntryBackOdd"); - Styles_labelStyle = new GUIStyle(EditorStyles.label); - // Styles_resultsBorderStyle = new GUIStyle("hostview"); - - Styles_labelStyle.alignment = TextAnchor.MiddleLeft; - Styles_labelStyle.richText = true; - } - - void OnGUI() - { - if (!_parepared) - { - _parepared = true; - OnPrepareGUI(); - } - - DrawSearchField(); - Repaint(); - } - - private static void CloseAllOpenWindows() - { - foreach (var obj in Resources.FindObjectsOfTypeAll(typeof(T))) - { - try - { - ((EditorWindow)obj).Close(); - } - catch - { - Object.DestroyImmediate(obj); - } - } - } - - public static bool Show(Rect rect, string searchString, JSScriptClassType searchType, Action selectCallback) - { - CloseAllOpenWindows(); - var window = ScriptableObject.CreateInstance(); - window._searchString = searchString; - window._selectCallback = selectCallback; - window._searchType = searchType; - window.Init(rect); - return true; - } - - private void Init(Rect rect) - { - var screenRect = GUIUtility.GUIToScreenRect(rect); - - ShowAsDropDown(screenRect, CalculateWindowSize(rect)); - - _searchResults.Clear(); - JSScriptFinder.GetInstance().Search(_searchString, _searchType, _searchResults); - } - - private Vector2 CalculateWindowSize(Rect buttonRect) - { - var vector = new Vector2(200f, _maxSearchResults * Styles_resultHeight); - vector.x += Styles_resultsBorderWidth * 2f; - vector.y += Styles_resultHeight; - vector.y = Mathf.Clamp(vector.y, base.minSize.y, base.maxSize.y); - if (vector.x < buttonRect.width) - { - vector.x = buttonRect.width; - } - if (vector.x < minSize.x) - { - vector.x = minSize.x; - } - if (vector.y < minSize.y) - { - vector.y = minSize.y; - } - return new Vector2(vector.x, vector.y); - } - - private void DrawSearchField() - { - var rect = GUILayoutUtility.GetRect(1, 1, 18, 18, GUILayout.ExpandWidth(true)); - if (_searchField == null) - { - _searchField = new SearchField(); - _searchField.downOrUpArrowKeyPressed += OnDownOrUpArrowKeyPressed; - } - - var result = _searchField.OnGUI(rect, _searchString); - if (result != _searchString) - { - _searchString = result; - _searchResults.Clear(); - JSScriptFinder.GetInstance().Search(_searchString, _searchType, _searchResults); - } - - rect.y += 18; - DrawSearchResults(rect); - } - - private void DrawSearchResults(Rect rect) - { - if (this._searchResults.Count <= 0) - { - return; - } - - _searchScrollViewState = GUILayout.BeginScrollView(_searchScrollViewState); - var current = Event.current; - var mouseIsInResultsRect = rect.Contains(current.mousePosition); - var lastSelectedSearchResultIndex = _selectedSearchResultIndex; - - for (var i = 0; i < this._searchResults.Count; i++) - { - var elementContent = TempContent(_searchResults[i].ToClassPath()); - var elementRect = GUILayoutUtility.GetRect(elementContent, Styles_labelStyle); - - elementRect.width = rect.width; - if (current.type == EventType.Repaint) - { - var style = i % 2 == 0 ? Styles_entryOdd : Styles_entryEven; - style.Draw(elementRect, false, false, i == _selectedSearchResultIndex, false); - GUI.Label(elementRect, this._searchResults[i].ToClassPath(), Styles_labelStyle); - } - - if (elementRect.Contains(current.mousePosition)) - { - _selectedSearchResultIndex = i; - - if (current.type == EventType.MouseDown) - { - this.OnConfirmSearchResult(this._searchResults[i]); - } - } - } - GUI.EndScrollView(); - - if (current.type == EventType.KeyUp && current.keyCode == KeyCode.Return && _selectedSearchResultIndex >= 0) - { - this.OnConfirmSearchResult(this._searchResults[_selectedSearchResultIndex]); - } - } - - private void OnConfirmSearchResult(JSScriptClassPathHint result) - { - try - { - _selectCallback?.Invoke(result); - } - catch (Exception exception) - { - Debug.LogError(exception); - } - Close(); - GUIUtility.ExitGUI(); - Event.current.Use(); - } - - private void OnDownOrUpArrowKeyPressed() - { - //TODO: keyboard operations - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptSearchWindow.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptSearchWindow.cs.meta deleted file mode 100644 index 01b2c689..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptSearchWindow.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 7918b934f03640d0986a2f9658f54caa -timeCreated: 1619152826 \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptableObjectInspector.cs b/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptableObjectInspector.cs deleted file mode 100644 index ebe75c08..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptableObjectInspector.cs +++ /dev/null @@ -1,32 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.IO; - -namespace QuickJS.Unity -{ - using UnityEditor; - using UnityEditor.IMGUI.Controls; - using UnityEngine; - using Native; - - [CustomEditor(typeof(JSScriptableObject))] - public class JSScriptableObjectInspector : JSInspectorBase - { - protected override JSScriptClassType GetScriptClassType() - { - return JSScriptClassType.ScriptableObject; - } - - protected override void OnWaitingForScriptInstancing() - { - var target_t = GetTarget(); - - if (target_t.enabled) - { - target_t.CreateScriptInstance(); - } - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptableObjectInspector.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptableObjectInspector.cs.meta deleted file mode 100644 index 73c821ea..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/JSScriptableObjectInspector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3479d842276b7594ba8030a3090bf4b4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/PrefsEditor.cs b/unity/quickjs/Runtime/Source/Unity/Editor/PrefsEditor.cs deleted file mode 100644 index 261672c0..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/PrefsEditor.cs +++ /dev/null @@ -1,970 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Reflection; -using System.Runtime.CompilerServices; - -namespace QuickJS.Unity -{ - using UnityEngine; - using UnityEditor; - using UnityEditor.IMGUI.Controls; - using QuickJS.Binding; - - // 配置编辑器 - public class PrefsEditor : BaseEditorWindow - { - internal abstract class TreeViewNode : SimpleTreeView.INode - { - protected bool _expanded = true; - - protected T _value; - protected GUIContent _content; - private bool _isSizeCached; - private Vector2 _contentSize; - protected List _children = new List(); - - public T value => _value; - - public GUIContent content => _content; - - public int childCount => _children.Count; - - public bool isExpanded - { - get { return _expanded; } - set { _expanded = value; } - } - - public bool CollapseAll() - { - var change = false; - if (_expanded) - { - _expanded = false; - change = true; - } - - foreach (var child in _children) - { - if (child.CollapseAll()) - { - change = true; - } - } - return change; - } - - public bool ExpandAll() - { - var change = false; - if (!_expanded) - { - _expanded = true; change = true; - } - - foreach (var child in _children) - { - if (child.ExpandAll()) - { - change = true; - } - } - return change; - } - - public void ShowContextMenu(SimpleTreeView.State state) - { - var menu = new GenericMenu(); - menu.AddItem(new GUIContent("Expand All"), false, () => state.ExpandAll()); - menu.AddItem(new GUIContent("Collapse All"), false, () => state.CollapseAll()); - menu.ShowAsContext(); - } - - public void AddChild(SimpleTreeView.INode node) - { - _children.Add(node); - } - - public Vector2 CalcSize(GUIStyle style) - { - if (!_isSizeCached) - { - _isSizeCached = true; - _contentSize = style.CalcSize(content); - } - return _contentSize; - } - - public void Prepass(SimpleTreeView.State state) - { - state.AddSpace(this); - if (_expanded) - { - state.PushGroup(); - for (int i = 0, count = _children.Count; i < count; ++i) - { - _children[i].Prepass(state); - } - state.PopGroup(); - } - } - - public bool Render(SimpleTreeView.State state) - { - if (state.Render(this)) - { - if (_expanded) - { - state.PushGroup(); - for (int i = 0, count = _children.Count; i < count; ++i) - { - if (!_children[i].Render(state)) - { - return false; - } - } - state.PopGroup(); - } - return true; - } - return false; - } - } - - internal class Type_TreeViewNode : TreeViewNode - { - private GUIContent _fullNameContent; - - public GUIContent FullName => _fullNameContent; - - public Type_TreeViewNode(Type type) - { - var icon = GetIcon(type); - - _value = type; - _content = new GUIContent(type.Name, icon); - _fullNameContent = new GUIContent(type.FullName, icon); - } - - public static Texture GetIcon(Type type) - { - if (type.IsEnum) - { - return UnityHelper.GetIcon("EnumIcon"); - } - - if (type.IsValueType) - { - return UnityHelper.GetIcon("StructIcon"); - } - - return UnityHelper.GetIcon("ClassIcon"); - } - - public bool MatchString(string pattern) - { - return _value.FullName.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) >= 0; - } - - public override string ToString() - { - return _value.Name; - } - } - - internal class Namespace_TreeViewNode : TreeViewNode - { - public Namespace_TreeViewNode(string ns) - { - _value = ns; - _content = new GUIContent(ns, UnityHelper.GetIcon("NamespaceIcon")); - } - - public override string ToString() - { - return _value; - } - } - - internal class Assembly_TreeViewNode : TreeViewNode - { - private Dictionary _allNamespaces = new Dictionary(); - - public Namespace_TreeViewNode GetNamespace_TreeViewNode(string ns) - { - var name = string.IsNullOrEmpty(ns) ? "-" : ns; - Namespace_TreeViewNode node; - if (!_allNamespaces.TryGetValue(name, out node)) - { - _allNamespaces[name] = node = new Namespace_TreeViewNode(name); - AddChild(node); - } - return node; - } - - public Assembly_TreeViewNode(Assembly assembly) - { - _value = assembly; - _content = new GUIContent(assembly.GetName().Name, UnityHelper.GetIcon("AssemblyIcon")); - } - - public override string ToString() - { - return _value.GetName().Name; - } - } - - internal interface IView - { - void Draw(PrefsEditor context); - } - - internal class NoneView : IView - { - public void Draw(PrefsEditor context) - { - EditorGUILayout.HelpBox("Nothing", MessageType.Warning); - } - } - - internal class NamespaceInfoView : IView - { - public string _namespace; - - public void Show(string ns) - { - _namespace = ns; - } - - public void Draw(PrefsEditor context) - { - if (_namespace == "-") - { - EditorGUILayout.HelpBox("It's not a real namespace (types without namespace)", MessageType.Info); - } - else - { - EditorGUILayout.LabelField("Namespace", _namespace); - var blocked = context._bindingManager.IsNamespaceInBlacklist(_namespace); - var blocked_t = EditorGUILayout.Toggle("Blacklisted", blocked); - if (blocked_t != blocked) - { - if (blocked_t) - { - context._bindingManager.AddNamespaceBlacklist(_namespace); - context._prefs.namespaceBlacklist.Add(_namespace); - } - else - { - context._bindingManager.RemoveNamespaceBlacklist(_namespace); - context._prefs.namespaceBlacklist.Remove(_namespace); - } - context.MarkAsDirty(); - } - } - } - } - - internal class TypeInfoView : IView - { - private Type _type; - - public void Show(Type type) - { - _type = type; - } - - public void Draw(PrefsEditor context) - { - if (_type == null) - { - EditorGUILayout.HelpBox("No type is seleted", MessageType.Warning); - return; - } - - if (DrawTypeBindingInfo(context._bindingManager.GetExportedType(_type))) - { - return; - } - - if (DrawRawTypeBindingInfo(context._bindingManager.GetExportedRawType(_type))) - { - return; - } - - EditorGUILayout.HelpBox(_type.Name + " will not be exported to the script runtime", MessageType.Warning); - } - - private bool DrawRawTypeBindingInfo(RawTypeBindingInfo rawTypeBindingInfo) - { - if (rawTypeBindingInfo == null) - { - return false; - } - EditorGUI.BeginDisabledGroup(true); - EditorGUILayout.TextField("Raw Binding", rawTypeBindingInfo.jsName); - EditorGUI.EndDisabledGroup(); - return true; - } - - private bool DrawTypeBindingInfo(TypeBindingInfo typeBindingInfo) - { - if (typeBindingInfo == null) - { - return false; - } - - EditorGUI.BeginDisabledGroup(true); - EditorGUILayout.Toggle("Managed", typeBindingInfo.disposable); - EditorGUILayout.TextField("Binding", typeBindingInfo.csBindingName ?? string.Empty); - - var tsTypeNaming = typeBindingInfo.tsTypeNaming; - EditorGUILayout.TextField("JS Module", tsTypeNaming.jsModule); - EditorGUILayout.TextField("JS Namespace", tsTypeNaming.jsNamespace); - EditorGUILayout.TextField("JS Name", tsTypeNaming.jsLocalName); - - var requiredDefines = typeBindingInfo.transform.requiredDefines; - if (requiredDefines != null && requiredDefines.Count > 0) - { - EditorGUILayout.LabelField("Required Defines"); - foreach (var def in requiredDefines) - { - EditorGUILayout.TextField(def); - } - } - EditorGUI.EndDisabledGroup(); - return true; - } - } - - internal class AssemblyInfoView : IView - { - private Assembly _assembly; - - public void Show(Assembly assembly) - { - _assembly = assembly; - } - - public void Draw(PrefsEditor context) - { - if (_assembly == null) - { - EditorGUILayout.HelpBox("No assembly is seleted", MessageType.Warning); - return; - } - - var name = context._bindingManager.GetSimplifiedAssemblyName(_assembly); - var blocked = context._bindingManager.InAssemblyBlacklist(name); - - EditorGUILayout.LabelField("Assembly", _assembly.FullName); - EditorGUILayout.LabelField("Location", _assembly.Location); - var blocked_t = EditorGUILayout.Toggle("Blacklisted", blocked); - if (blocked_t != blocked) - { - if (blocked_t) - { - context._bindingManager.AddAssemblyBlacklist(name); - context._prefs.assemblyBlacklist.Add(name); - } - else - { - context._bindingManager.RemoveAssemblyBlacklist(name); - context._prefs.assemblyBlacklist.Remove(name); - } - context.MarkAsDirty(); - } - } - } - - private Prefs _prefs; - private bool _dirty; - private BindingManager _bindingManager; - - private int _selectedTabViewIndex; - - [NonSerialized] - private GUIContent[] _tabViewNames = new GUIContent[] { }; - private Action[] _tabViewDrawers = new Action[] { }; - private string[] _newlineValues = new string[] { "cr", "lf", "crlf", "" }; - private string[] _newlineNames = new string[] { "UNIX", "MacOS", "Windows", "Auto" }; - private int _selectedBindingMethod; - private string[] _bindingMethodValues = new string[] { "Reflect Bind", "Static Bind", "In-Memory Bind" }; - private string[] _bindingMethodDescriptions = new string[] { "Reflect Bind", "Static Bind", "In-Memory Bind (experimental)" }; - - private GUIStyle _footStyle; - private SearchField _searchField; - private string _lastSearchString = string.Empty; - - private System.Collections.IEnumerator _typeTreeConstruct; - private int _typeTreeConstructWalk; - private int _typeTreeConstructAll; - - private List _typeNodes = new List(); - - private SimpleTreeView _treeView = new SimpleTreeView(); - private SimpleListView _listView = new SimpleListView(); - private SimpleSplitView _splitView = new SimpleSplitView(); - private List _allViews = new List(); - private IView _activeView; - - private List _repeatStringCache = new List(new string[] { "" }); - [NonSerialized] - private Vector2 _scrollPosition_TypeCastRegistry; - [NonSerialized] - private Vector2 _scrollPosition_Codegen; - [NonSerialized] - private Rect _typesViewRect; - - public void AddTabView(string name, Action action) - { - ArrayUtility.Add(ref _tabViewNames, new GUIContent(name)); - ArrayUtility.Add(ref _tabViewDrawers, action); - } - - private Type_TreeViewNode ConstructTypeNode(TreeViewNode parent, Dictionary cache, Type type) - { - Type_TreeViewNode self; - if (!cache.TryGetValue(type, out self)) - { - self = new Type_TreeViewNode(type); - cache[type] = self; - _typeNodes.Add(self); - if (type.DeclaringType != null) - { - var declaringType = ConstructTypeNode(parent, cache, type.DeclaringType); - declaringType.AddChild(self); - } - else - { - parent.AddChild(self); - } - } - - return self; - } - - private System.Collections.IEnumerator ConstructAssemblyNode(Assembly assembly, Type[] types) - { - if (types.Length == 0) - { - yield break; - } - _typeTreeConstructAll += types.Length; - var node = new Assembly_TreeViewNode(assembly); - - Array.Sort(types, (a, b) => string.Compare(a.FullName, b.FullName, true)); - var cache = new Dictionary(); - foreach (var type in types) - { - _typeTreeConstructWalk++; - if (type.IsGenericTypeDefinition) - { - continue; - } - - var ns = node.GetNamespace_TreeViewNode(type.Namespace); - ConstructTypeNode(ns, cache, type); - yield return null; - } - - if (node.childCount > 0) - { - _treeView.Add(node); - } - - yield break; - } - - protected override void OnEnable() - { - base.OnEnable(); - - var args = new BindingManager.Args() - { - utils = new UnityBindingUtils(), - }; - - _prefs = PrefsLoader.CurrentPrefs; - _dirty = string.IsNullOrEmpty(_prefs.filePath); - _selectedBindingMethod = Array.IndexOf(_bindingMethodValues, _prefs.preferredBindingMethod); - _bindingManager = new BindingManager(_prefs, args); - _bindingManager.Collect(); - _bindingManager.Generate(TypeBindingFlags.None); - _bindingManager.Report(); - - AddTabView("Types", DrawView_Types); - AddTabView("Codegen", DrawView_Codegen); - AddTabView("Type Cast Registry", DrawView_TypeCastRegistry); - AddTabView("Scripting", DrawView_Scripting); - OnDirtyStateChanged(); - } - - public void MarkAsDirty() - { - if (!_dirty) - { - _dirty = true; - OnDirtyStateChanged(); - // EditorApplication.delayCall += Save; - } - } - - public void Save() - { - if (_dirty) - { - _dirty = false; - OnDirtyStateChanged(); - try - { - var isNewFile = !File.Exists(Prefs.PATH); - var json = JsonUtility.ToJson(_prefs, true); - System.IO.File.WriteAllText(Prefs.PATH, json); - _prefs.filePath = Prefs.PATH; - Debug.LogFormat("saved {0}", Prefs.PATH); - } - catch (Exception exception) - { - Debug.LogWarning(exception); - } - } - } - - private void OnDirtyStateChanged() - { - titleContent = new GUIContent("JS Bridge Prefs" + (_dirty ? " *" : "")); - } - - private void OnDrawItem(Rect rect, Type type) - { - GUI.Label(rect, type.FullName); - } - - private void DrawView_Scripting() - { - Block("Basic", () => - { - EditorGUI.BeginChangeCheck(); - _prefs.editorScripting = EditorGUILayout.Toggle("Editor Scripting", _prefs.editorScripting); - var selectedBindingMethod_t = EditorGUILayout.Popup("Binding Method", _selectedBindingMethod, _bindingMethodDescriptions); - if (_selectedBindingMethod != selectedBindingMethod_t) - { - _selectedBindingMethod = selectedBindingMethod_t; - _prefs.preferredBindingMethod = _bindingMethodValues[Mathf.Clamp(_selectedBindingMethod, 0, _bindingMethodValues.Length - 1)]; - } - if (!CodeGenUtils.IsCodeEmitSupported() && _prefs.preferredBindingMethod == _bindingMethodValues[0]) - { - EditorGUILayout.HelpBox(CodeGenUtils.CodeEmitWarning, MessageType.Warning); - } - _prefs.typescriptExt = EditorGUILayout.TextField("Typescript Ext", _prefs.typescriptExt); - _prefs.sourceDir = EditorGUILayout.TextField("Source Dir", _prefs.sourceDir); - - if (EditorGUI.EndChangeCheck()) - { - MarkAsDirty(); - } - }); - - Block("Editor Scripts", () => - { - EditorGUI.BeginChangeCheck(); - _prefs.editorEntryPoint = EditorGUILayout.TextField("Entry Point", _prefs.editorEntryPoint); - _prefs.editorDecoratorScript = EditorGUILayout.TextField("Decorator Definition", _prefs.editorDecoratorScript); - - if (EditorGUI.EndChangeCheck()) - { - MarkAsDirty(); - } - }); - - Block("Preloaded Modules", () => - { - if (_prefs.editorRequires == null) - { - _prefs.editorRequires = new List(); - } - - var count = _prefs.editorRequires.Count; - for (var i = 0; i < count;) - { - EditorGUILayout.BeginHorizontal(); - var do_delete = GUILayout.Button("X", GUILayout.Width(22f)); - var mod_old = _prefs.editorRequires[i] ?? string.Empty; - var mod_new = EditorGUILayout.TextField(mod_old); - EditorGUILayout.EndHorizontal(); - - if (do_delete) - { - --count; - continue; - } - - if (mod_new != mod_old) - { - _prefs.editorRequires[i] = mod_new; - MarkAsDirty(); - } - ++i; - } - }, () => - { - if (GUILayout.Button("+", GUILayout.Width(22f))) - { - _prefs.editorRequires.Add(""); - MarkAsDirty(); - } - }); - - Block("AssetPost Processors", () => - { - if (_prefs.assetPostProcessors == null) - { - _prefs.assetPostProcessors = new List(); - } - - foreach (var assetPostProcessor in _prefs.assetPostProcessors) - { - EditorGUILayout.TextField(assetPostProcessor); - } - }, () => - { - if (GUILayout.Button("+", GUILayout.Width(22f))) - { - _prefs.assetPostProcessors.Add(""); - MarkAsDirty(); - } - }); - } - - private string RepeatString(string v, int repeat) - { - while (_repeatStringCache.Count < repeat + 1) - { - _repeatStringCache.Add(_repeatStringCache[_repeatStringCache.Count - 1] + v); - } - return _repeatStringCache[repeat]; - } - - private void DrawView_TypeCastRegistry() - { - //TODO jsb.editor/prefs: draw it as a tree - using (var scope = new EditorGUILayout.ScrollViewScope(_scrollPosition_TypeCastRegistry)) - { - _scrollPosition_TypeCastRegistry = scope.scrollPosition; - Block("js_get: " + Values._JSCastMap.Count, () => - { - foreach (var kv in Values._JSCastMap) - { - EditorGUILayout.TextField(string.Format("{0}: {1}", _bindingManager.GetCSTypeFullName(kv.Value), _bindingManager.GetCSTypeFullName(kv.Key))); - } - }); - - Block("js_rebind: " + Values._JSRebindMap.Count, () => - { - foreach (var kv in Values._JSRebindMap) - { - EditorGUILayout.TextField(string.Format("{0}: {1}", _bindingManager.GetCSTypeFullName(kv.Value), _bindingManager.GetCSTypeFullName(kv.Key))); - } - }); - - Block("js_push: " + Values._CSCastMap.Count, () => - { - foreach (var kv in Values._CSCastMap) - { - EditorGUILayout.TextField(string.Format("{0}: {1}", _bindingManager.GetCSTypeFullName(kv.Value), _bindingManager.GetCSTypeFullName(kv.Key))); - } - }); - - Block("js_new: " + Values._JSNewMap.Count, () => - { - foreach (var kv in Values._JSNewMap) - { - EditorGUILayout.TextField(string.Format("{0}: {1}", _bindingManager.GetCSTypeFullName(kv.Value), _bindingManager.GetCSTypeFullName(kv.Key))); - } - }); - } - } - - private void DrawView_Codegen() - { - using (var scope = new EditorGUILayout.ScrollViewScope(_scrollPosition_Codegen)) - { - EditorGUI.BeginChangeCheck(); - _scrollPosition_Codegen = scope.scrollPosition; - Block("Binding Options", () => - { - _prefs.optToString = EditorGUILayout.Toggle("Auto ToString", _prefs.optToString); - _prefs.enableOperatorOverloading = EditorGUILayout.Toggle("Operator Overloading", _prefs.enableOperatorOverloading); - _prefs.skipDelegateWithByRefParams = EditorGUILayout.Toggle("Omit ref param Delegates", _prefs.skipDelegateWithByRefParams); - _prefs.alwaysCheckArgType = EditorGUILayout.Toggle("Always check arg type", _prefs.alwaysCheckArgType); - _prefs.alwaysCheckArgc = EditorGUILayout.Toggle("Always check argc", _prefs.alwaysCheckArgc); - _prefs.typeBindingPrefix = EditorGUILayout.TextField("C# Binding Prefix", _prefs.typeBindingPrefix); - _prefs.ns = EditorGUILayout.TextField("C# Binding Namespace", _prefs.ns); - _prefs.outDir = EditorGUILayout.TextField("Output Dir", _prefs.outDir); - _prefs.genTypescriptDoc = EditorGUILayout.Toggle("Gen d.ts", _prefs.genTypescriptDoc); - _prefs.xmlDocDir = EditorGUILayout.TextField("XmlDoc Dir", _prefs.xmlDocDir); - _prefs.typescriptDir = EditorGUILayout.TextField("d.ts Output Dir", _prefs.typescriptDir); - _prefs.jsModulePackInfoPath = EditorGUILayout.TextField("JS Module List", _prefs.jsModulePackInfoPath); - _prefs.defaultJSModule = EditorGUILayout.TextField("Default Module", _prefs.defaultJSModule); - }); - - Block("Code Style", () => - { - _prefs.tsdSizeThreshold = EditorGUILayout.IntField("TSD Slice Size", _prefs.tsdSizeThreshold); - _prefs.tab = RepeatString(" ", EditorGUILayout.IntSlider("Tab Size", _prefs.tab.Length, 0, 8)); - var newlineIndex = Array.IndexOf(_newlineValues, _prefs.newLineStyle); - var newlineIndex_t = EditorGUILayout.Popup("Newline Style", newlineIndex, _newlineNames); - if (newlineIndex_t != newlineIndex && newlineIndex_t >= 0) - { - _prefs.newLineStyle = _newlineValues[newlineIndex_t]; - } - }); - - Block("Advanced (Experimental)", () => - { - _prefs.randomizedBindingCode = EditorGUILayout.Toggle("Obfuscate", _prefs.randomizedBindingCode); - }); - - Block("Custom Binding Process", () => - { - var list = _bindingManager.GetBindingProcessTypes(); - for (int i = 0, count = list.Count; i < count; ++i) - { - var process = list[i]; - var name = process.FullName; - var enabled = !_prefs.skipBinding.Contains(name); - var state = EditorGUILayout.ToggleLeft(name, enabled); - if (state != enabled) - { - if (state) - { - _prefs.skipBinding.Remove(name); - } - else - { - _prefs.skipBinding.Add(name); - } - MarkAsDirty(); - } // end if: enabled - } // end for: list - }); // end block: custom binding process - - Block("Diagnostics", () => - { - _prefs.debugCodegen = EditorGUILayout.Toggle("Debug Codegen", _prefs.debugCodegen); - _prefs.verboseLog = EditorGUILayout.Toggle("Verbose Log", _prefs.verboseLog); - _prefs.logPath = EditorGUILayout.TextField("Log", _prefs.logPath); - }); - - if (EditorGUI.EndChangeCheck()) - { - MarkAsDirty(); - } - } - } - - private void DrawView_Types() - { - var y = 90f; - _typesViewRect.Set(0f, y, position.width, position.height - y); - var repaint = _splitView.Draw(_typesViewRect); - - _typesViewRect.Set(0f, y, _splitView.cursorChangeRect.x, position.height - y); - GUILayout.BeginArea(_typesViewRect); - DrawView_Types_Left(); - GUILayout.EndArea(); - - _typesViewRect.Set(_splitView.cursorChangeRect.xMax, y, position.width - _splitView.cursorChangeRect.x, position.height - y); - GUILayout.BeginArea(_typesViewRect); - DrawView_Types_Right(); - GUILayout.EndArea(); - - if (repaint) - { - Repaint(); - } - } - - private void DrawView_Types_Right() - { - _activeView?.Draw(this); - } - - private System.Collections.IEnumerator ConstructTypeTree() - { - var assemblyList = AppDomain.CurrentDomain.GetAssemblies(); - Array.Sort(assemblyList, (a, b) => string.Compare(a.FullName, b.FullName, true)); - List> aTypes = new List>(assemblyList.Length); - foreach (var assembly in assemblyList) - { - if (!assembly.IsDynamic) - { - var types = assembly.GetExportedTypes(); - aTypes.Add(new Tuple(assembly, types)); - _typeTreeConstructAll += types.Length; - } - } - - for (int i = 0, count = aTypes.Count; i < count; i++) - { - var tuple = aTypes[i]; - var e = ConstructAssemblyNode(tuple.Item1, tuple.Item2); - while (e.MoveNext()) - { - yield return null; - } - - _treeView.Invalidate(); - } - _typeTreeConstruct = null; - } - - private void DrawView_Types_Left() - { - if (_searchField == null) - { - if (_typeTreeConstruct == null) - { - _typeTreeConstruct = ConstructTypeTree(); - } - _treeView.OnSelectItem = OnSelectTreeViewItem; - _listView.OnDrawItem = (rect, index, node) => GUI.Label(rect, node.FullName, EditorStyles.label); - _listView.OnSelectItem = OnSelectListViewItem; - _searchField = new SearchField(); - _searchField.autoSetFocusOnFindCommand = true; - } - - var searchFieldRect = EditorGUILayout.GetControlRect(); - var searchString = _searchField.OnGUI(searchFieldRect, _lastSearchString); - if (_lastSearchString != searchString) - { - _lastSearchString = searchString; - _listView.Clear(); - if (!string.IsNullOrEmpty(_lastSearchString)) - { - foreach (var t in _typeNodes) - { - if (t.MatchString(_lastSearchString)) - { - _listView.Add(t); - } - } - } - } - - if (_footStyle == null) - { - _footStyle = new GUIStyle(EditorStyles.miniLabel); - _footStyle.alignment = TextAnchor.MiddleRight; - } - - var typesViewRect = EditorGUILayout.GetControlRect(GUILayout.ExpandHeight(true)); - var pendingHint = string.Empty; - - if (_typeTreeConstruct != null) - { - pendingHint = $"(Loading... {ToPercent((float)_typeTreeConstructWalk / _typeTreeConstructAll)}%) "; - Repaint(); - } - - if (string.IsNullOrEmpty(_lastSearchString)) - { - if (_treeView.Draw(typesViewRect)) - { - Repaint(); - } - GUILayout.Label($"{pendingHint}{_typeNodes.Count} Types", _footStyle); - } - else - { - _listView.Draw(typesViewRect); - GUILayout.Label($"{pendingHint}{_listView.Count} Types", _footStyle); - } - } - - private static int ToPercent(float p) - { - return Mathf.FloorToInt(p * 100f); - } - - private T SetActiveView() - where T : IView, new() - { - Repaint(); - - foreach (var view in _allViews) - { - if (view.GetType() == typeof(T)) - { - _activeView = view; - return (T)view; - } - } - - var newView = new T(); - _allViews.Add(newView); - _activeView = newView; - - return newView; - } - - private void OnSelectTreeViewItem(SimpleTreeView.INode item, HashSet selection) - { - if (item is Assembly_TreeViewNode) - { - Defer(() => SetActiveView().Show((item as Assembly_TreeViewNode).value)); - } - else if (item is Type_TreeViewNode) - { - Defer(() => SetActiveView().Show((item as Type_TreeViewNode).value)); - } - else if (item is Namespace_TreeViewNode) - { - Defer(() => SetActiveView().Show((item as Namespace_TreeViewNode).value)); - } - else - { - Defer(() => SetActiveView()); - } - Repaint(); - } - - private void OnSelectListViewItem(Type_TreeViewNode item, HashSet selection) - { - _treeView.Select(item); - Defer(() => SetActiveView().Show(item.value)); - Repaint(); - } - - protected override void OnUpdate() - { - var cycle = 5; - while (_typeTreeConstruct != null && --cycle > 0) - { - _typeTreeConstruct.MoveNext(); - } - } - - protected override void OnPaint() - { - EditorGUILayout.BeginHorizontal(); - EditorGUI.BeginDisabledGroup(!_dirty); - if (GUILayout.Button("Save", EditorStyles.miniButton, GUILayout.Width(46f))) - { - Save(); - } - EditorGUI.EndDisabledGroup(); - EditorGUILayout.EndHorizontal(); - var fileType = string.IsNullOrEmpty(_prefs.filePath) ? "in memory" : "from file"; - EditorGUILayout.HelpBox($"(experimental) Editor for {Prefs.PATH} ({fileType})", MessageType.Warning); - - _selectedTabViewIndex = GUILayout.Toolbar(_selectedTabViewIndex, _tabViewNames); - _tabViewDrawers[_selectedTabViewIndex](); - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/PrefsEditor.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/PrefsEditor.cs.meta deleted file mode 100644 index d74cfe2b..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/PrefsEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5f02c64b59b6a0d4ab946e82c9673fb0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/PrefsLoader.cs b/unity/quickjs/Runtime/Source/Unity/Editor/PrefsLoader.cs deleted file mode 100644 index 9bb5a82a..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/PrefsLoader.cs +++ /dev/null @@ -1,125 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.IO; - -namespace QuickJS.Unity -{ - using UnityEngine; - using UnityEditor; - using QuickJS.Binding; - - public class PrefsLoader - { - private static PrefsLoader _loader; - - public static Action prefsChanged; - - private FileSystemWatcher _prefsWatcher; - private float _changedFileInterval; - private int _changedEvent; - - private Prefs _prefs; - - public static Prefs CurrentPrefs { get { return GetInstance()._prefs; } } - - public static PrefsLoader GetInstance() - { - if (_loader == null) - { - _loader = new PrefsLoader(); - _loader.Initialize(); - } - return _loader; - } - - private PrefsLoader() - { - } - - private static Prefs LoadPrefs() - { - string filePath; - return LoadPrefs(out filePath); - } - - private static Prefs LoadPrefs(out string filePath) - { - if (File.Exists(Prefs.PATH)) - { - try - { - var json = Utils.TextUtils.NormalizeJson(File.ReadAllText(Prefs.PATH)); - Debug.Log($"load prefs({Prefs.PATH}): {json}"); - var prefs = JsonUtility.FromJson(json); - filePath = Prefs.PATH; - prefs.filePath = filePath; - if (string.IsNullOrEmpty(prefs.typescriptDir)) - { - prefs.typescriptDir = prefs.outDir; - } - return prefs; - } - catch (Exception exception) - { - Debug.LogWarning(exception); - } - } - Debug.Log($"load prefs in memory"); - var defaultPrefs = new Prefs(); - filePath = Prefs.PATH; - return defaultPrefs; - } - - private void Initialize() - { - _prefs = LoadPrefs(); - _prefsWatcher = new FileSystemWatcher(".", Prefs.PATH); - _prefsWatcher.Changed += OnFileChanged; - _prefsWatcher.Created += OnFileChanged; - _prefsWatcher.Deleted += OnFileChanged; - _prefsWatcher.EnableRaisingEvents = true; - EditorApplication.update += OnPrefsSync; - } - - private void OnPrefsSync() - { - if (!UnityHelper.IsApplicationActive()) - { - return; - } - - _changedFileInterval += Time.realtimeSinceStartup; - if (_changedFileInterval < 3f) - { - return; - } - - _changedFileInterval = 0f; - if (System.Threading.Interlocked.Exchange(ref _changedEvent, 0) > 0) - { - _prefs = LoadPrefs(); - try - { - prefsChanged?.Invoke(_prefs); - } - catch (Exception exception) - { - Debug.LogErrorFormat("OnPrefsChanged: {0}\n{1}", exception.Message, exception.StackTrace); - } - } - } - - private void OnFileChanged(object sender, FileSystemEventArgs e) - { - var changedFile = e.FullPath; - var fullPath1 = Path.GetFullPath(changedFile); - var fullPath2 = Path.GetFullPath(Prefs.PATH); - - if (string.Compare(fullPath1, fullPath2, true) == 0) - { - System.Threading.Interlocked.Exchange(ref _changedEvent, 1); - } - } - } -} -#endif // !JSB_UNITYLESS \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/PrefsLoader.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/PrefsLoader.cs.meta deleted file mode 100644 index f6aa39d0..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/PrefsLoader.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d94e1e1811cd345da8876261d6cbd08b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEditorWindowLauncher.cs b/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEditorWindowLauncher.cs deleted file mode 100644 index 80f57d15..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEditorWindowLauncher.cs +++ /dev/null @@ -1,214 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using UnityEngine; - using UnityEditor; - - /// - /// ScriptEditorWindowLauncher is an experimental unfinished feature. - /// it could be used to open editor windows implemented in typescript, - /// we need this because there is no open api in Unity to dynamically create menu item at the moment. - /// - public class ScriptEditorWindowLauncher : BaseEditorWindow, IHasCustomMenu - { - [Serializable] - public enum ListMode - { - Icons, - List, - } - private const JSScriptClassType classTypes = - JSScriptClassType.EditorWindow | - JSScriptClassType.CustomEditor | - JSScriptClassType.MonoBehaviour | - JSScriptClassType.ScriptableObject; - - private GUIContent _scriptIcon; - private GUIContent _InspectorIcon; - private GUIContent _EditorWindowIcon; - private GUIContent _ScriptableObjectIcon; - private GUIContent _MonoBehaviourIcon; - private Vector2 _scriptListViewScrollPosition; - private List _scriptClassPaths; - private GUIStyle _footStyle; - - [SerializeField] - private ListMode _listMode; - - void Awake() - { - _scriptIcon = new GUIContent(UnityHelper.LoadPackageAsset("Editor/Icons/JsScript.png")); - _InspectorIcon = new GUIContent(UnityHelper.LoadPackageAsset("Editor/Icons/InspectorIcon.png")); - _EditorWindowIcon = new GUIContent(UnityHelper.LoadPackageAsset("Editor/Icons/EditorWindowIcon.png")); - _ScriptableObjectIcon = new GUIContent(UnityHelper.LoadPackageAsset("Editor/Icons/ScriptableObjectIcon.png")); - _MonoBehaviourIcon = new GUIContent(UnityHelper.LoadPackageAsset("Editor/Icons/MonoBehaviourIcon.png")); - Reset(); - } - - void OnDestroy() - { - JSScriptFinder.GetInstance().ScriptClassPathsUpdated -= OnScriptClassPathsUpdated; - } - - protected override void OnEnable() - { - base.OnEnable(); - titleContent = new GUIContent("Launchpad", _scriptIcon.image); - } - - private void OnScriptClassPathsUpdated() - { - _scriptClassPaths.Clear(); - JSScriptFinder.GetInstance().Search(classTypes, _scriptClassPaths); - } - - private GUIContent GetIcon(JSScriptClassType type) - { - switch (type) - { - case JSScriptClassType.CustomEditor: return _InspectorIcon; - case JSScriptClassType.MonoBehaviour: return _MonoBehaviourIcon; - case JSScriptClassType.EditorWindow: return _EditorWindowIcon; - case JSScriptClassType.ScriptableObject: return _ScriptableObjectIcon; - default: return _scriptIcon; - } - } - - private void DrawScriptItemAsIcon(Rect rect, JSScriptClassPathHint classPath) - { - var labelHeight = Math.Min(EditorStyles.label.lineHeight, rect.height); - var padding = 4f; - var buttonSize = rect.height - labelHeight - padding; - - if (buttonSize > 8f) - { - var buttonRect = new Rect(rect.x + (rect.width - buttonSize) * .5f, rect.y, buttonSize, buttonSize); - - if (classPath.classType != JSScriptClassType.EditorWindow) - { - GUI.DrawTexture(buttonRect, GetIcon(classPath.classType).image); - } - else - { - if (GUI.Button(buttonRect, GetIcon(classPath.classType))) - { - EditorRuntime.ShowWindow(classPath.modulePath, classPath.className); - } - } - - var labelRect = new Rect(rect.x, rect.yMax - labelHeight, rect.width, labelHeight); - EditorGUI.LabelField(labelRect, classPath.className, EditorStyles.centeredGreyMiniLabel); - } - else - { - if (GUI.Button(rect, classPath.className)) - { - EditorRuntime.ShowWindow(classPath.modulePath, classPath.className); - } - } - } - - private void DrawScriptItemAsListEntry(Rect rect, JSScriptClassPathHint classPath) - { - var texRect = new Rect(rect.x, rect.y, EditorGUIUtility.singleLineHeight, EditorGUIUtility.singleLineHeight); - GUI.DrawTexture(texRect, GetIcon(classPath.classType).image); - if (classPath.classType == JSScriptClassType.EditorWindow) - { - var buttonRect = new Rect(rect.xMax - 52f, rect.y, 52f, rect.height); - var labelRect = new Rect(texRect.xMax + 4f, rect.y, rect.width - texRect.xMax - 4f - buttonRect.width, EditorGUIUtility.singleLineHeight); - GUI.Label(labelRect, classPath.className); - if (GUI.Button(buttonRect, "Show")) - { - EditorRuntime.ShowWindow(classPath.modulePath, classPath.className); - } - } - else - { - var labelRect = new Rect(texRect.xMax + 4f, rect.y, rect.width - texRect.xMax - 4f, EditorGUIUtility.singleLineHeight); - GUI.Label(labelRect, classPath.className); - } - } - - private void Reset() - { - JSScriptFinder.GetInstance().ScriptClassPathsUpdated -= OnScriptClassPathsUpdated; - JSScriptFinder.GetInstance().ScriptClassPathsUpdated += OnScriptClassPathsUpdated; - _scriptClassPaths = new List(); - OnScriptClassPathsUpdated(); - } - - public void AddItemsToMenu(GenericMenu menu) - { - menu.AddItem(new GUIContent("Show as Icons"), _listMode == ListMode.Icons, () => _listMode = ListMode.Icons); - menu.AddItem(new GUIContent("Show as List"), _listMode == ListMode.List, () => _listMode = ListMode.List); - } - - private void DrawScriptListView() - { - _scriptListViewScrollPosition = EditorGUILayout.BeginScrollView(_scriptListViewScrollPosition); - var size = _scriptClassPaths.Count; - GUILayout.Space(6f); - if (_listMode == ListMode.Icons) - { - var itemSize = new Vector2(120f, 80f); - var rowRect = EditorGUILayout.GetControlRect(GUILayout.Height(itemSize.y)); - var rows = 0; - var itemRect = new Rect(rowRect.x, rowRect.y, itemSize.x, itemSize.y); - for (var i = 0; i < size; i++) - { - var item = _scriptClassPaths[i]; - - DrawScriptItemAsIcon(itemRect, item); - itemRect.x += itemSize.x; - if (i != size - 1 && itemRect.xMax > position.width) - { - itemRect.x = rowRect.x; - itemRect.y += itemSize.y; - ++rows; - } - } - EditorGUILayout.GetControlRect(GUILayout.Height(rows * itemSize.y)); - } - else - { - for (var i = 0; i < size; i++) - { - var item = _scriptClassPaths[i]; - var itemRect = EditorGUILayout.GetControlRect(); - if (i % 2 == 0) - { - EditorGUI.DrawRect(itemRect, UnityHelper.RowColor); - } - DrawScriptItemAsListEntry(itemRect, item); - } - } - EditorGUILayout.EndScrollView(); - - if (_footStyle == null) - { - _footStyle = new GUIStyle(EditorStyles.miniLabel); - _footStyle.alignment = TextAnchor.MiddleRight; - } - if (size > 1) - { - GUILayout.Label(size + " Scripts", _footStyle); - } - } - - protected override void OnPaint() - { - if (_scriptClassPaths == null) - { - Reset(); - } - - // _selectedTabViewIndex = GUILayout.Toolbar(_selectedTabViewIndex, _tabViews); - // GUILayout.Space(12f); - DrawScriptListView(); - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEditorWindowLauncher.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEditorWindowLauncher.cs.meta deleted file mode 100644 index 8d941fa2..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEditorWindowLauncher.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eddfb1a522315a94683ede96d3b9b9af -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs b/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs deleted file mode 100644 index e1b8055b..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs +++ /dev/null @@ -1,500 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Linq; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using UnityEngine; - using UnityEditor; - using System.Threading; - - public class ScriptEngineStatsWindow : BaseEditorWindow, IHasCustomMenu - { - private static GUIContent GUIContent_Stats_Operator = new GUIContent("Operator", "Is operator overloading supported?"); - - private int _categoryIndex; - private string[] _categoryLabels; - private Action[] _categoryDrawers; - - private class Snapshot - { - public struct TimerInfo - { - public ulong id; - public int delay; - public int deadline; - public bool once; - } - public int id; - public bool alive; - - public Native.JSMemoryUsage memoryUsage; - public bool isStaticBinding; - public int exportedTypes; - public int managedObjectCount; - public int managedObjectCap; - public bool fetchManagedObjectRefs; - public int selectedManagedObjectIndex; - // public List> managedObjectRefs = new List>(); - public SimpleListView> managedObjectRefs = new SimpleListView>(); - public int jsObjectCount; - public int delegateCount; - public int scriptValueCount; - // public int scriptPromiseCount; - public int stringCount; - public int timeNow; - public List activeTimers = new List(); - } - - private Vector2 _sv; - private int _alive; - - [SerializeField] - private bool _fetchManagedObjectRefs = false; - - [SerializeField] - private bool _autoCap = true; - - private float _time; - - [SerializeField] - private float _timeCap = 5f; - private List _snapshots = new List(); - private string[] _snapshotNames = new string[] { }; - private int _selectedSnapshotIndex; - - [MenuItem("JS Bridge/Stats Viewer", false, 5000)] - static void OpenThis() - { - GetWindow().Show(); - } - - protected override void OnEnable() - { - base.OnEnable(); - _categoryLabels = new string[] { "Statistics", "Managed Objects", "Timers" }; - _categoryDrawers = new Action[] { OnStatisticsGUI, OnManagedObjectsGUI, OnTimersGUI }; - _categoryIndex = Math.Min(_categoryIndex, _categoryLabels.Length - 1); - - titleContent = new GUIContent("ScriptEngine Stats"); - _time = Time.realtimeSinceStartup; - CaptureAll(); - } - - protected override void OnDisable() - { - base.OnDisable(); - } - - string ToSizeText(long size) - { - if (size > 1024 * 1024 * 2) - { - return string.Format("{0:.0} MB", (float)size / 1024f / 1024f); - } - else if (size > 1024 * 2) - { - return string.Format("{0:.0} KB", (float)size / 1024f); - } - return string.Format("{0} B", (int)size); - } - - string ToCountText(long size) - { - return size.ToString(); - } - - private void GarbadgeCollect() - { - GC.Collect(); - GC.WaitForPendingFinalizers(); - } - - public void AddItemsToMenu(GenericMenu menu) - { - menu.AddItem(new GUIContent("JS Launcher"), false, () => GetWindow().Show()); - menu.AddItem(new GUIContent("Prefs"), false, () => GetWindow().Show()); - menu.AddSeparator(""); - menu.AddItem(new GUIContent("Capture"), false, () => CaptureAll()); - menu.AddItem(new GUIContent("GC (mono)"), false, () => GarbadgeCollect()); - menu.AddItem(new GUIContent("Reload EditorScripting"), false, () => EditorRuntime.GetInstance()?.Reload()); -#if UNITY_2019_4_OR_NEWER - menu.AddItem(new GUIContent("Reload CSharp"), false, () => UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation()); -#endif - } - - private Snapshot GetSnapshot(int id) - { - for (int i = 0, count = _snapshots.Count; i < count; i++) - { - var snapshot = _snapshots[i]; - if (snapshot.id == id) - { - return snapshot; - } - } - var inst = new Snapshot(); - inst.id = id; - ArrayUtility.Add(ref _snapshotNames, id.ToString()); - _snapshots.Add(inst); - return inst; - } - - private void Capture(ScriptRuntime runtime) - { - if (!runtime.isValid) - { - return; - } - - var snapshot = GetSnapshot(runtime.id); - snapshot.alive = true; - snapshot.fetchManagedObjectRefs = _fetchManagedObjectRefs; - runtime.EnqueueAction(OnSnapshotRequest, snapshot); - } - - /// - /// Callback runs on the script runtime thread - /// - private static void OnSnapshotRequest(ScriptRuntime runtime, object cbArgs, Native.JSValue cbValue) - { - if (!runtime.isValid || !runtime.isRunning) - { - return; - } - - var snapshot = (Snapshot)cbArgs; - lock (snapshot) - { - unsafe - { - fixed (Native.JSMemoryUsage* ptr = &snapshot.memoryUsage) - { - Native.JSApi.JS_ComputeMemoryUsage(runtime, ptr); - } - } - - var typeDB = runtime.GetTypeDB(); - snapshot.exportedTypes = typeDB.Count; - snapshot.isStaticBinding = runtime.isStaticBinding; - - var objectCache = runtime.GetObjectCache(); - var stringCache = runtime.GetMainContext().GetStringCache(); - - snapshot.managedObjectCount = objectCache.GetManagedObjectCount(); - snapshot.managedObjectCap = objectCache.GetManagedObjectCap(); - snapshot.managedObjectRefs.Clear(); - if (snapshot.fetchManagedObjectRefs) - { - objectCache.ForEachManagedObject(obj => - { - snapshot.managedObjectRefs.Add(new WeakReference(obj)); - }); - } - snapshot.selectedManagedObjectIndex = Math.Min(snapshot.selectedManagedObjectIndex, snapshot.managedObjectRefs.Count - 1); - snapshot.jsObjectCount = objectCache.GetJSObjectCount(); - snapshot.delegateCount = objectCache.GetDelegateCount(); - snapshot.scriptValueCount = objectCache.GetScriptValueCount(); - // snapshot.scriptPromiseCount = objectCache.GetScriptPromiseCount(); - snapshot.stringCount = stringCache.GetStringCount(); - - var timeManager = runtime.GetTimerManager(); - snapshot.activeTimers.Clear(); - snapshot.timeNow = timeManager.now; - timeManager.ForEach((id, delay, deadline, once) => snapshot.activeTimers.Add(new Snapshot.TimerInfo() - { - id = id, - delay = delay, - deadline = deadline, - once = once, - })); - } - } - - private string GetDescription(object obj) - { - try - { - return obj.ToString(); - } - catch (Exception e) - { - return "[Error] " + e.Message; - } - } - - private void OnStatisticsGUI(Snapshot snapshot) - { - EditorGUILayout.BeginVertical(); - Block("Misc.", () => - { - EditorGUILayout.Toggle("Static Bind", snapshot.isStaticBinding); - EditorGUILayout.IntField("Exported Types", snapshot.exportedTypes); - EditorGUILayout.TextField("ManagedObject", snapshot.managedObjectCount + "/" + snapshot.managedObjectCap); - EditorGUILayout.IntField("JSObject", snapshot.jsObjectCount); - EditorGUILayout.IntField("Delegate Mapping", snapshot.delegateCount); - EditorGUILayout.IntField("Value Mapping", snapshot.scriptValueCount); - // EditorGUILayout.IntField("ScriptPromise Mapping", snapshot.scriptPromiseCount); - EditorGUILayout.IntField("Cached String", snapshot.stringCount); - }); - Block("Timers", () => - { - EditorGUILayout.IntField("Active Timer", snapshot.activeTimers.Count); - EditorGUILayout.IntField("Now", snapshot.timeNow); - }); - Block("JSMemoryUsage", () => - { - EditorGUILayout.TextField("malloc_size", ToSizeText(snapshot.memoryUsage.malloc_size)); - EditorGUILayout.TextField("malloc_limit", ToCountText(snapshot.memoryUsage.malloc_limit)); - EditorGUILayout.TextField("memory_used_size", ToSizeText(snapshot.memoryUsage.memory_used_size)); - EditorGUILayout.TextField("malloc_count", ToCountText(snapshot.memoryUsage.malloc_count)); - EditorGUILayout.TextField("memory_used_count", ToCountText(snapshot.memoryUsage.memory_used_count)); - EditorGUILayout.TextField("atom_count", ToCountText(snapshot.memoryUsage.atom_count)); - EditorGUILayout.TextField("atom_size", ToSizeText(snapshot.memoryUsage.atom_size)); - EditorGUILayout.TextField("str_count", ToCountText(snapshot.memoryUsage.str_count)); - EditorGUILayout.TextField("str_size", ToSizeText(snapshot.memoryUsage.str_size)); - EditorGUILayout.TextField("obj_count", ToCountText(snapshot.memoryUsage.obj_count)); - EditorGUILayout.TextField("obj_size", ToSizeText(snapshot.memoryUsage.obj_size)); - EditorGUILayout.TextField("prop_count", ToCountText(snapshot.memoryUsage.prop_count)); - EditorGUILayout.TextField("prop_size", ToSizeText(snapshot.memoryUsage.prop_size)); - EditorGUILayout.TextField("shape_count", ToCountText(snapshot.memoryUsage.shape_count)); - EditorGUILayout.TextField("shape_size", ToSizeText(snapshot.memoryUsage.shape_size)); - EditorGUILayout.TextField("js_func_count", ToCountText(snapshot.memoryUsage.js_func_count)); - EditorGUILayout.TextField("js_func_size", ToSizeText(snapshot.memoryUsage.js_func_size)); - EditorGUILayout.TextField("js_func_code_size", ToSizeText(snapshot.memoryUsage.js_func_code_size)); - EditorGUILayout.TextField("js_func_pc2line_count", ToCountText(snapshot.memoryUsage.js_func_pc2line_count)); - EditorGUILayout.TextField("js_func_pc2line_size", ToSizeText(snapshot.memoryUsage.js_func_pc2line_size)); - EditorGUILayout.TextField("c_func_count", ToCountText(snapshot.memoryUsage.c_func_count)); - EditorGUILayout.TextField("array_count", ToCountText(snapshot.memoryUsage.array_count)); - EditorGUILayout.TextField("fast_array_count", ToCountText(snapshot.memoryUsage.fast_array_count)); - EditorGUILayout.TextField("fast_array_elements", ToCountText(snapshot.memoryUsage.fast_array_elements)); - EditorGUILayout.TextField("binary_object_count", ToCountText(snapshot.memoryUsage.binary_object_count)); - EditorGUILayout.TextField("binary_object_size", ToSizeText(snapshot.memoryUsage.binary_object_size)); - }); - EditorGUILayout.EndVertical(); - } - - private void OnDrawManagedObjectEntry(Rect rect, int index, WeakReference objRef) - { - if (objRef.TryGetTarget(out var item)) - { - EditorGUI.LabelField(rect, GetDescription(item)); - } - else - { - EditorGUI.LabelField(rect, "Empty Slot"); - } - } - - private void OnManagedObjectsGUI(Snapshot snapshot) - { - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.BeginVertical(GUILayout.Width(100f)); - var rect = EditorGUILayout.GetControlRect(GUILayout.ExpandHeight(true)); - if (snapshot.fetchManagedObjectRefs) - { - - snapshot.managedObjectRefs.OnDrawItem = OnDrawManagedObjectEntry; - snapshot.managedObjectRefs.Draw(rect); - } - EditorGUILayout.EndVertical(); - EditorGUILayout.BeginVertical(); - - var first = snapshot.managedObjectRefs.selection.FirstOrDefault(); - if (first != null && first.TryGetTarget(out var obj)) - { - InspectObject(obj); - } - EditorGUILayout.EndVertical(); - EditorGUILayout.EndHorizontal(); - } - - //TODO unfinished_feature: inspect internal details of object - private void InspectObject(object selected) - { - if (selected == null) - { - return; - } - - var type = selected.GetType(); - EditorGUILayout.LabelField("Type", type.Name); - EditorGUILayout.Toggle("Primitive", type.IsPrimitive); - EditorGUILayout.Toggle("Pointer", type.IsPointer); - if (type.IsPointer) - { - return; - } - if (type.IsArray) - { - var array = selected as Array; - if (array.Rank == 1) - { - var len = array.GetLength(0); - EditorGUILayout.IntField("Length", len); - for (var i = 0; i < len; ++i) - { - InspectObject(array.GetValue(i)); - } - } - return; - } - - if (type == typeof(string)) - { - EditorGUILayout.LabelField("String", selected as string); - return; - } - - if (type == typeof(GUIContent)) - { - EditorGUILayout.LabelField(GetCachedTextContent("GUIContent"), selected as GUIContent); - return; - } - - var fields = type.GetFields(Binding.DynamicType.DefaultFlags); - for (var i = 0; i < fields.Length; i++) - { - var field = fields[i]; - var fieldValue = field.GetValue(field.IsStatic ? null : selected); - EditorGUILayout.LabelField(field.Name, GetDescription(fieldValue)); - } - } - - private void OnTimersGUI(Snapshot snapshot) - { - EditorGUILayout.BeginVertical(); - EditorGUILayout.IntField("Now", snapshot.timeNow); - - var count = snapshot.activeTimers.Count; - if (count > 0) - { - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.LabelField("ID"); - EditorGUILayout.LabelField("Delay"); - EditorGUILayout.LabelField("Deadline"); - EditorGUILayout.EndHorizontal(); - for (var i = 0; i < count; i++) - { - var t = snapshot.activeTimers[i]; - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.TextField(t.id.ToString()); - EditorGUILayout.IntField(t.delay); - EditorGUILayout.IntField(t.deadline); - EditorGUILayout.EndHorizontal(); - } - } - EditorGUILayout.EndVertical(); - } - - private void InspectSnapshot(Snapshot snapshot) - { - lock (snapshot) - { - if (!snapshot.alive) - { - EditorGUILayout.HelpBox("This runtime isn't alive.", MessageType.Info); - return; - } - - _categoryIndex = GUILayout.Toolbar(_categoryIndex, _categoryLabels); - _categoryDrawers[_categoryIndex](snapshot); - } - } - - protected override void OnUpdate() - { - if (_autoCap) - { - var rt = Time.realtimeSinceStartup; - - if (rt - _time > _timeCap) - { - _time = rt; - CaptureAll(); - } - } - } - - private void CaptureAll() - { - for (int i = 0, count = _snapshots.Count; i < count; i++) - { - var snapshot = _snapshots[i]; - snapshot.alive = false; - } - _alive = ScriptEngine.ForEachRuntime(runtime => Capture(runtime)); - - for (int i = 0, count = _snapshots.Count; i < count; i++) - { - var snapshot = _snapshots[i]; - if (snapshot.alive) - { - _snapshotNames[i] = snapshot.id.ToString(); - } - else - { - _snapshotNames[i] = snapshot.id.ToString() + " (dead)"; - } - } - Repaint(); - } - - protected override void OnPaint() - { - _alive = ScriptEngine.ForEachRuntime(runtime => { }); - - using (var scrollViewScope = new EditorGUILayout.ScrollViewScope(_sv)) - { - _sv = scrollViewScope.scrollPosition; - - Block("Control", () => - { - EditorGUI.BeginDisabledGroup(EditorApplication.isCompiling); - EditorGUILayout.LabelField("Engine", Native.JSApi.JSBDLL); - EditorGUI.EndDisabledGroup(); - - var old_isDebugMode = Native.JSApi.IsDebugMode(); - var new_isDebugMode = EditorGUILayout.Toggle("IsDebugMode", old_isDebugMode); - if (new_isDebugMode != old_isDebugMode) - { - if (EditorUtility.DisplayDialog("Setting debug symbol", "Are you sure to " + (new_isDebugMode ? "set" : "unset") + " debug mode?", "Confirm", "Cancel")) - { - UnityHelper.SetDefineSymbol("JSB_DEBUG", new_isDebugMode); - } - } - EditorGUI.BeginDisabledGroup(true); - EditorGUILayout.IntField("Dll Version", Native.JSApi.SO_JSB_VERSION); - if (Native.JSApi.CS_JSB_VERSION != Native.JSApi.SO_JSB_VERSION) - { - EditorGUILayout.HelpBox("The version of imported dll doesn't equal to " + Native.JSApi.CS_JSB_VERSION, MessageType.Warning); - } - EditorGUILayout.Toggle(GUIContent_Stats_Operator, Native.JSApi.IsOperatorOverloadingSupported); - EditorGUI.EndDisabledGroup(); - - _fetchManagedObjectRefs = EditorGUILayout.Toggle("Show Refs", _fetchManagedObjectRefs); - _autoCap = EditorGUILayout.Toggle("Auto Refresh", _autoCap); - EditorGUI.BeginDisabledGroup(!_autoCap); - _timeCap = EditorGUILayout.Slider("Interval", _timeCap, 1f, 30f); - EditorGUI.EndDisabledGroup(); - - _selectedSnapshotIndex = EditorGUILayout.Popup("Snapshot", _selectedSnapshotIndex, _snapshotNames); - }); - - if (_alive == 0) - { - EditorGUILayout.HelpBox("No Running Runtime", MessageType.Info); - return; - } - - if (_selectedSnapshotIndex >= 0 && _selectedSnapshotIndex < _snapshots.Count) - { - InspectSnapshot(_snapshots[_selectedSnapshotIndex]); - } - } - } // end OnPaint() - } -} - -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs.meta deleted file mode 100644 index cdd5714f..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/ScriptEngineStatsWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4281011bc9bc4444f96b29365e6c00f5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleListView.cs b/unity/quickjs/Runtime/Source/Unity/Editor/SimpleListView.cs deleted file mode 100644 index b6ef6bf7..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleListView.cs +++ /dev/null @@ -1,91 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using UnityEngine; - using UnityEditor; - - public class SimpleListView - { - private Vector2 _scollPosition; - private Rect _viewRect; - private Rect _itemRect; - private List _items; - private HashSet _selection = new HashSet(); - private float _itemHeight; - - public Action OnDrawItem; - public Action> OnSelectItem; - - public HashSet selection => _selection; - - public SimpleListView() - { - _itemHeight = EditorGUIUtility.singleLineHeight; - _items = new List(); - } - - public int Count => _items.Count; - - public void Clear() - { - _items.Clear(); - _viewRect = new Rect(0f, 0f, 0f, 0f); - } - - public void AddRange(System.Collections.Generic.IEnumerable items) - { - _items.AddRange(items); - _viewRect.height = _itemHeight * _items.Count; - } - - public void Add(T item) - { - _items.Add(item); - _viewRect.height = _itemHeight * _items.Count; - } - - public void Draw(Rect rect) - { - _viewRect.width = rect.width - 16f; - _scollPosition = GUI.BeginScrollView(rect, _scollPosition, _viewRect); - var fromIndex = Mathf.Max(Mathf.FloorToInt(_scollPosition.y / _itemHeight), 0); - var toIndex = Mathf.Min(fromIndex + Mathf.CeilToInt(rect.height / _itemHeight), _items.Count - 1); - for (var i = fromIndex; i <= toIndex; ++i) - { - _itemRect.Set(0f, i * _itemHeight, rect.width, _itemHeight); - - var currentItem = _items[i]; - var isSelected = _selection.Contains(currentItem); - - if (!isSelected && Event.current.type == EventType.MouseUp) - { - if (_itemRect.Contains(Event.current.mousePosition)) - { - _selection.Clear(); - _selection.Add(currentItem); - OnSelectItem?.Invoke(currentItem, _selection); - isSelected = true; - } - } - - if (isSelected) - { - EditorGUI.DrawRect(_itemRect, UnityHelper.SelectRowColor); - } - else - { - if (i % 2 == 0) - { - EditorGUI.DrawRect(_itemRect, UnityHelper.RowColor); - } - } - OnDrawItem?.Invoke(_itemRect, i, currentItem); - } - GUI.EndScrollView(); - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleListView.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/SimpleListView.cs.meta deleted file mode 100644 index 9df8c9f2..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleListView.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9dba33ffeddeae841bf2938c9bcf9024 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleSplitView.cs b/unity/quickjs/Runtime/Source/Unity/Editor/SimpleSplitView.cs deleted file mode 100644 index 508feb1a..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleSplitView.cs +++ /dev/null @@ -1,66 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using UnityEngine; - using UnityEditor; - - public class SimpleSplitView - { - public bool init = false; // 是否初始化 - public float splitPivot = 0f; - public bool resizing = false; - public Rect cursorChangeRect; - public Rect cursorHintRect; - - public float cursorHintSize = 2f; - public float cursorSize = 6f; - public Color cursorHintColor = new Color(0f, 0f, 0f, 0.35f); - - public bool Draw(Rect rect) - { - var startY = rect.y; - var layout = Event.current.type == EventType.Repaint; - - if (!this.init && layout) - { - this.init = true; - this.splitPivot = Mathf.Max(Mathf.Min(rect.width * .25f, rect.width - 10f), 10f); - } - - if (!this.resizing) - { - this.cursorChangeRect.Set(this.splitPivot - 2f, startY, this.cursorSize, rect.height); - this.cursorHintRect.Set(this.splitPivot - 2f, startY, this.cursorHintSize, rect.height); - } - - EditorGUI.DrawRect(this.cursorHintRect, this.cursorHintColor); - EditorGUIUtility.AddCursorRect(this.cursorChangeRect, MouseCursor.ResizeHorizontal); - - if (Event.current.type == EventType.MouseDown && this.cursorChangeRect.Contains(Event.current.mousePosition)) - { - this.resizing = true; - } - - if (this.resizing && layout) - { - var y = this.cursorChangeRect.y; - var h = this.cursorChangeRect.height; - this.splitPivot = Mathf.Min(Mathf.Max(Event.current.mousePosition.x, 10), rect.width - 10); - this.cursorChangeRect.Set(this.splitPivot - 2, y, this.cursorSize, h); - this.cursorHintRect.Set(this.splitPivot - 2, y, this.cursorHintSize, h); - } - - if (Event.current.type == EventType.MouseUp) - { - this.resizing = false; - } - - return this.resizing; - } - - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleSplitView.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/SimpleSplitView.cs.meta deleted file mode 100644 index 737cd388..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleSplitView.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 713e0cd4cf9039348a24135792042c66 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleTreeView.cs b/unity/quickjs/Runtime/Source/Unity/Editor/SimpleTreeView.cs deleted file mode 100644 index c5b1aa22..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleTreeView.cs +++ /dev/null @@ -1,384 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using UnityEngine; - using UnityEditor; - - internal class SimpleTreeView - { - public interface INode - { - GUIContent content { get; } - bool isExpanded { get; set; } - int childCount { get; } - - void AddChild(INode node); - void Prepass(State state); - bool Render(State state); - Vector2 CalcSize(GUIStyle style); - - bool CollapseAll(); - bool ExpandAll(); - - void ShowContextMenu(State state); - } - - public class State - { - private SimpleTreeView _treeView; - private float _indentWidth = 16f; - private float _itemHeight = EditorGUIUtility.singleLineHeight; - - private int _index; - private int _indent; - private float _leftPadding = 4f; - private Vector2 _position; - protected Vector2 _scrollPosition; - private float _maxWidth; - private Rect _drawRect; - private Rect _viewRect; - private Rect _itemRect; - private Rect _itemFullRect; - private GUIStyle _itemStyle; - - private float _lastClickTime; - - private Color _rowColor = new Color(0.5f, 0.5f, 0.5f, 0.1f); - private Color _selectColor = new Color(44f / 255f, 93f / 255f, 135f / 255f); - - private int _fromIndex; - private int _toIndex; - private int _itemCount; - private bool _repaint; - private bool _isRendering; - - private HashSet _selection = new HashSet(); - - private Func _itemValidator = null; - - public bool repaint => _repaint; - - public State(SimpleTreeView treeView) - { - _treeView = treeView; - _itemStyle = EditorStyles.label; - } - - public void BeginPrepass() - { - _indent = 0; - _itemCount = 0; - _viewRect.Set(0f, 0f, 0f, 0f); - } - - public void AddSpace(INode node) - { - var itemWidth = node.CalcSize(_itemStyle).x; - _viewRect.height += _itemHeight; - var width = _indent * _indentWidth + itemWidth; - _viewRect.width = Mathf.Max(width, _viewRect.width); - _itemCount++; - } - - public void EndPrepass() - { - var yMax = _viewRect.height - _drawRect.height; - if (_scrollPosition.y > yMax) - { - _scrollPosition.y = yMax; - } - } - - public void Begin(Func itemValidator) - { - _index = 0; - _indent = 0; - _isRendering = false; - _itemValidator = itemValidator; - } - - public void End() - { - } - - public void BeginView(Rect rect) - { - Begin(null); - _repaint = false; - _isRendering = true; - _drawRect = rect; - _maxWidth = Mathf.Max(_drawRect.width, _viewRect.width); - _scrollPosition = GUI.BeginScrollView(_drawRect, _scrollPosition, _viewRect); - _fromIndex = Mathf.Max(Mathf.FloorToInt(_scrollPosition.y / _itemHeight) - 1, 0); - _toIndex = Mathf.Min(_fromIndex + Mathf.CeilToInt(_drawRect.height / _itemHeight) + 1, _itemCount - 1); - } - - public void EndView() - { - End(); - GUI.EndScrollView(); - } - - public void PushGroup() - { - ++_indent; - } - - public void PopGroup() - { - --_indent; - } - - private bool CheckDoubleClick() - { - var rt = Time.realtimeSinceStartup; - var dt = rt - _lastClickTime; - if (dt < 0.2f) - { - _lastClickTime = 0f; - return true; - } - _lastClickTime = rt; - return false; - } - - public bool Render(INode node) - { - if (_itemValidator != null && !_itemValidator(node)) - { - return false; - } - - var index = _index++; - - if (!_isRendering) - { - return true; - } - - if (index >= _fromIndex && index <= _toIndex) - { - var isSelected = _selection.Contains(node); - var isExpandable = node.childCount > 0; - - if (isSelected) - { - _itemRect.Set(0, index * _itemHeight, _maxWidth, _itemHeight); - EditorGUI.DrawRect(_itemRect, _selectColor); - } - else - { - if (index % 2 == 0) - { - _itemRect.Set(0, index * _itemHeight, _maxWidth, _itemHeight); - EditorGUI.DrawRect(_itemRect, _rowColor); - } - } - - var x = _indent * _indentWidth + _leftPadding; - var eventUsed = false; - - if (isExpandable) - { - _itemRect.Set(x, index * _itemHeight, _itemHeight, _itemHeight); - - var isExpanded = node.isExpanded; - GUI.DrawTexture(_itemRect, isExpanded ? UnityHelper.GetIcon("ExpandedItemIcon") : UnityHelper.GetIcon("CollapsedItemIcon"), ScaleMode.ScaleToFit); - if (!eventUsed && Event.current.type == EventType.MouseUp) - { - if (_itemRect.Contains(Event.current.mousePosition)) - { - if (Event.current.button == 1) - { - node.ShowContextMenu(this); - eventUsed = true; - } - else - { - node.isExpanded = !isExpanded; - _treeView.Invalidate(); - _repaint = true; - eventUsed = true; - } - } - } - } - - _itemRect.Set(x + _itemHeight, index * _itemHeight, _maxWidth - x, _itemHeight); - EditorGUI.LabelField(_itemRect, node.content, _itemStyle); - - if (!eventUsed && Event.current.type == EventType.MouseUp) - { - _itemRect.x = 0f; - if (_itemRect.Contains(Event.current.mousePosition)) - { - if (Event.current.button == 1) - { - node.ShowContextMenu(this); - eventUsed = true; - } - else - { - if (CheckDoubleClick()) - { - node.isExpanded = !node.isExpanded; - _treeView.Invalidate(); - _repaint = true; - eventUsed = true; - } - else - { - if (!isSelected) - { - _selection.Clear(); - _selection.Add(node); - _treeView.OnSelectItem?.Invoke(node, _selection); - _repaint = true; - eventUsed = true; - } - } - } - } - } - } // end if visible - return true; - } - - public void Select(INode node, bool doRaiseEvent) - { - _selection.Clear(); - _selection.Add(node); - if (doRaiseEvent) - { - _treeView.OnSelectItem?.Invoke(node, _selection); - } - } - - public void SelectCurrent(INode node, bool doRaiseEvent) - { - _scrollPosition.y = Mathf.Min(_index * _itemHeight, _viewRect.height - _drawRect.height); - Select(node, doRaiseEvent); - } - - public void CollapseAll() - { - var change = false; - foreach (var child in _treeView._children) - { - if (child.CollapseAll()) - { - change = true; - } - } - - if (change) - { - _treeView.Invalidate(); - } - } - - public void ExpandAll() - { - var change = false; - foreach (var child in _treeView._children) - { - if (child.ExpandAll()) - { - change = true; - } - } - - if (change) - { - _treeView.Invalidate(); - } - } - } - - public Action> OnSelectItem; - - private State _state; - private List _children = new List(); - - public void Add(INode node) - { - if (node != null) - { - _children.Add(node); - } - } - - public void Invalidate() - { - if (_state == null) - { - _state = new State(this); - } - _state.BeginPrepass(); - for (int i = 0, count = _children.Count; i < count; ++i) - { - var child = _children[i]; - child.Prepass(_state); - } - _state.EndPrepass(); - } - - public void Select(INode node, bool doScrollTo = true, bool doRaiseEvent = false) - { - if (_state == null) - { - _state = new State(this); - } - - if (!doScrollTo) - { - _state.Select(node, doRaiseEvent); - return; - } - - _state.Begin(it => - { - if (it == node) - { - _state.SelectCurrent(node, doRaiseEvent); - return false; - } - return true; - }); - - for (int i = 0, count = _children.Count; i < count; ++i) - { - var child = _children[i]; - if (!child.Render(_state)) - { - break; - } - } - _state.End(); - } - - public bool Draw(Rect rect) - { - if (_state == null) - { - _state = new State(this); - } - _state.BeginView(rect); - for (int i = 0, count = _children.Count; i < count; ++i) - { - var child = _children[i]; - if (!child.Render(_state)) - { - break; - } - } - _state.EndView(); - - return _state.repaint; - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleTreeView.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/SimpleTreeView.cs.meta deleted file mode 100644 index d242515d..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/SimpleTreeView.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bc1f08674fa18f8428f05556b44352b9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/TypescriptPostProcessor.cs b/unity/quickjs/Runtime/Source/Unity/Editor/TypescriptPostProcessor.cs deleted file mode 100644 index c0e29cb3..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/TypescriptPostProcessor.cs +++ /dev/null @@ -1,61 +0,0 @@ -#if !JSB_UNITYLESS - -namespace QuickJS.Unity -{ - // public class TypeScriptPostProcessor : AssetPostprocessor - // { - // private static bool IsScriptSourceFile(string filename) - // { - // return filename.EndsWith(".ts") || filename.EndsWith(".js") || filename.EndsWith(".js.txt"); - // } - - // private static bool CheckAssets(string outDir, string[] assetPaths) - // { - // foreach (var assetPath in assetPaths) - // { - // if (outDir == null || !assetPath.StartsWith(outDir, StringComparison.OrdinalIgnoreCase)) // skip output files - // { - // if (IsScriptSourceFile(assetPath)) - // { - // // Debug.Log(assetPath); - // return true; - // } - // } - // } - // return false; - // } - - // private static void OnPostprocessAllAssets( - // string[] importedAssets, - // string[] deletedAssets, - // string[] movedAssets, - // string[] movedFromAssetPaths) - // { - // // if (EditorApplication.isPlaying || EditorApplication.isPaused) - // // { - // // return; - // // } - // // if (!File.Exists("tsconfig.json")) - // // { - // // // no typescript context - // // return; - // // } - // // string outDir = null; - // // try - // // { - // // var text = NormalizeJson(File.ReadAllText("tsconfig.json")); - // // var tsconfig = JsonUtility.FromJson(text); - // // outDir = tsconfig.compilerOptions.outDir; - // // } - // // catch (Exception exception) { Debug.LogWarning(exception); } - // // if (CheckAssets(outDir, importedAssets) || - // // CheckAssets(outDir, deletedAssets) || - // // CheckAssets(outDir, movedAssets) || - // // CheckAssets(outDir, movedFromAssetPaths)) - // // { - // // UnityHelper.CompileScripts(); - // // } - // } - // } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/TypescriptPostProcessor.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/TypescriptPostProcessor.cs.meta deleted file mode 100644 index 3176e35c..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/TypescriptPostProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0e76ab41d4b3cd444a1305b4b13ea7d9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/UnityBindingUtils.cs b/unity/quickjs/Runtime/Source/Unity/Editor/UnityBindingUtils.cs deleted file mode 100644 index 3f2ced84..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/UnityBindingUtils.cs +++ /dev/null @@ -1,22 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.IO; -using System.Collections.Generic; -using System.Reflection; - -namespace QuickJS.Unity -{ - public class UnityBindingUtils : Binding.IBindingUtils - { - public string ReplacePathVars(string value) - { - return Unity.UnityHelper.ReplacePathVars(value); - } - - public bool IsExplicitEditorType(Type type) - { - return Unity.UnityHelper.IsExplicitEditorType(type); - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/UnityBindingUtils.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/UnityBindingUtils.cs.meta deleted file mode 100644 index 8e92df5f..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/UnityBindingUtils.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 687b23b93fb78b5429ad5cfb965c731b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/UnityHelper.cs b/unity/quickjs/Runtime/Source/Unity/Editor/UnityHelper.cs deleted file mode 100644 index c550e86d..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/UnityHelper.cs +++ /dev/null @@ -1,579 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using UnityEngine; - using UnityEditor; - using System.Reflection; - using QuickJS.Binding; - - [InitializeOnLoad] - public static class UnityHelper - { - public static Color RowColor = new Color(0.5f, 0.5f, 0.5f, 0.1f); - public static Color SelectRowColor = new Color(44f / 255f, 93f / 255f, 135f / 255f); - - private static Dictionary _iconCache = new Dictionary(); - - public static Texture GetIcon(string name) - { - Texture icon; - if (!_iconCache.TryGetValue(name, out icon)) - { - icon = _iconCache[name] = LoadPackageAsset($"Editor/Icons/{name}.png"); - } - return icon; - } - - public static bool IsApplicationActive() - { - return UnityEditorInternal.InternalEditorUtility.isApplicationActive && !EditorApplication.isCompiling; - } - - #region All Menu Items - [MenuItem("JS Bridge/Generate Bindings And Type Definition")] - public static void GenerateBindingsAndTypeDefinition() - { - var bm = new BindingManager(PrefsLoader.CurrentPrefs, new BindingManager.Args - { - codeGenCallback = new DefaultCodeGenCallback(), - bindingLogger = new DefaultBindingLogger(), - useLogWriter = true, - utils = new UnityBindingUtils(), - }); - bm.Collect(); - bm.Generate(TypeBindingFlags.Default); - bm.Cleanup(); - bm.Report(); - AssetDatabase.Refresh(); - } - - [MenuItem("JS Bridge/Generate Type Definition")] - public static void GenerateTypeDefinition() - { - var bm = new BindingManager(PrefsLoader.CurrentPrefs, new BindingManager.Args - { - codeGenCallback = new DefaultCodeGenCallback(), - bindingLogger = new DefaultBindingLogger(), - useLogWriter = true, - utils = new UnityBindingUtils(), - }); - bm.Collect(); - bm.Generate(TypeBindingFlags.TypeDefinition); - bm.Cleanup(); - bm.Report(); - AssetDatabase.Refresh(); - } - - public static T LoadPackageAsset(string assetPath) - where T : Object - { - try - { - var path = AssetDatabase.GetAssetPath(GetMonoScript(typeof(JSBehaviour))); - if (path != null) - { - var evaluatedPath = Path.Combine(Path.GetDirectoryName(path), "../../", assetPath).Replace("\\", "/"); - var extractedPath = Utils.PathUtils.ExtractPath(evaluatedPath, '/'); - if (File.Exists(extractedPath)) - { - return LoadAssetAtPath(extractedPath); // for upm-shipping style - } - } - } - catch (Exception) - { - } - - return LoadAssetAtPath("Assets/jsb/" + assetPath) // for old-school style - ?? LoadAssetAtPath("Packages/cc.starlessnight.unity-jsb/" + assetPath) // for upm-dev style - ; - } - - public static T LoadAssetAtPath(string assetPath) - where T : Object - { - return AssetDatabase.LoadAssetAtPath(assetPath, typeof(T)) as T; - } - - /// - /// Get MonoScript by type - /// - public static MonoScript GetMonoScript(Type type) - { - var name = type.Name; - var assetGuids = AssetDatabase.FindAssets($"t:Script {name}"); - foreach (var assetGuid in assetGuids) - { - var assetPath = AssetDatabase.GUIDToAssetPath(assetGuid); - var asset = AssetDatabase.LoadAssetAtPath(assetPath); - if (asset && asset.GetClass() == type) - { - return asset; - } - } - - return null; - } - - public static void SetDefineSymbol(string defineItem, bool isAdding) - { - var buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup; - var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup).Split(';').ToList(); - if (isAdding) - { - if (!defines.Contains(defineItem)) - { - defines.Add(defineItem); - PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, string.Join(";", defines)); - } - } - else - { - if (defines.Remove(defineItem)) - { - PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, string.Join(";", defines)); - } - } - } - - public static bool IsReflectBindingSupported() - { - return PrefsLoader.CurrentPrefs.preferredBindingMethod == "Reflect Bind"; - } - - public static void Time(string name, Action action) - { - var stopWatch = new System.Diagnostics.Stopwatch(); - stopWatch.Start(); - try - { - action(); - stopWatch.Stop(); - Debug.LogFormat("Finished executing {0} in {1}ms", name, stopWatch.ElapsedMilliseconds); - } - catch (Exception exception) - { - stopWatch.Stop(); - Debug.LogFormat("Finished executing {0} in {1}ms with error: {2}", name, stopWatch.ElapsedMilliseconds, exception.Message); - throw; - } - } - - public static void InvokeReflectBinding(ScriptRuntime runtime) - { - Time("InvokeReflectBinding", () => - { - var bm = new BindingManager(PrefsLoader.CurrentPrefs, new BindingManager.Args - { - bindingCallback = new ReflectBindingCallback(runtime), - utils = new UnityBindingUtils(), - bindingLogger = new DefaultBindingLogger(Utils.LogLevel.Error), - }); - bm.Collect(); - bm.Generate(TypeBindingFlags.None); - bm.Report(); - }); - } - - public static bool IsInMemoryBindingSupported() - { - return PrefsLoader.CurrentPrefs.preferredBindingMethod == "In-Memory Bind"; - } - - public static void InvokeInMemoryBinding(ScriptRuntime runtime) - { - Time("InvokeInMemoryBinding", () => - { - var callback = new InMemoryCompilationBindingCallback(runtime); - var bm = new BindingManager(PrefsLoader.CurrentPrefs, new BindingManager.Args - { - bindingCallback = callback, - codeGenCallback = callback, - utils = new UnityBindingUtils(), - }); - bm.Collect(); - bm.Generate(TypeBindingFlags.BindingCode | TypeBindingFlags.BuildTargetPlatformOnly); - bm.Report(); - }); - } - - // [MenuItem("JS Bridge/Compile TypeScript")] - public static void CompileScripts() - { - Debug.Log("compiling typescript source..."); - EditorApplication.delayCall += () => - { - EditorApplication.delayCall += () => - { -#if UNITY_EDITOR_WIN - string command = "tsc.cmd"; -#else - string command = "tsc"; -#endif - var exitCode = UnityShellHelper.Run(command, "", 30); - Debug.Log($"{command}: {exitCode}"); - }; - }; - } - - [MenuItem("JS Bridge/Clear")] - public static void ClearBindings() - { - var prefs = PrefsLoader.CurrentPrefs; - var kv = new Dictionary>(); - - if (prefs.cleanupDir != null) - { - prefs.cleanupDir.ForEach(dir => kv[ReplacePathVars(dir)] = null); - } - kv[ReplacePathVars(prefs.outDir)] = null; - kv[ReplacePathVars(prefs.typescriptDir)] = null; - BindingManager.Cleanup(kv, null); - AssetDatabase.Refresh(); - } - - [MenuItem("JS Bridge/Prefs ...", false, 5001)] - public static void OpenPrefsEditor() - { - EditorWindow.GetWindow().Show(); - } - - [MenuItem("JS Bridge/Javascript Console", false, 5003)] - public static void ShowJSConsole() - { - QuickJS.Unity.EditorRuntime.ShowWindow("plover/editor/js_console", "JSConsole"); - } - - [MenuItem("JS Bridge/Javascript Module View", false, 5004)] - public static void ShowJSModuleView() - { - QuickJS.Unity.EditorRuntime.ShowWindow("plover/editor/js_module_view", "JSModuleView"); - } - - [MenuItem("JS Bridge/Script Editor Window Launcher", false, 5005)] - public static void ShowScriptEditorWindowLauncher() - { - EditorWindow.GetWindow().Show(); - } - - public static string GetPlatform() - { - var buildTarget = EditorUserBuildSettings.activeBuildTarget; - switch (buildTarget) - { - case BuildTarget.Android: return "Android"; - case BuildTarget.iOS: return "iOS"; - case BuildTarget.WSAPlayer: return "WSA"; - case BuildTarget.StandaloneWindows: - case BuildTarget.StandaloneWindows64: return "Windows"; - case BuildTarget.StandaloneOSX: return "OSX"; -#if !UNITY_2019_2_OR_NEWER - case BuildTarget.StandaloneLinux: - case BuildTarget.StandaloneLinuxUniversal: -#endif - case BuildTarget.StandaloneLinux64: return "Linux"; - case BuildTarget.Switch: return "Switch"; - case BuildTarget.PS4: return "PS4"; - case BuildTarget.XboxOne: return "XboxOne"; - default: return buildTarget.ToString(); - } - } - - /// - /// 可以明确表明该 Type 属于 Editor 运行时 - /// - public static bool IsExplicitEditorType(Type type) - { - if (type.Namespace != null && type.Namespace.StartsWith("UnityEditor")) - { - return true; - } - - return IsExplicitEditorDomain(type.Assembly); - } - - /// - /// 可以明确表明该 Assembly 包含的类型属于 Editor 运行时 - /// - public static bool IsExplicitEditorDomain(Assembly assembly) - { - if (assembly == typeof(Editor).Assembly) - { - return true; - } - - var location = assembly.Location.Replace('\\', '/'); - var assetsPath = new FileInfo(Application.dataPath); - var fullAssetsPath = assetsPath.FullName.Replace('\\', '/'); - - if (location.StartsWith(fullAssetsPath, StringComparison.OrdinalIgnoreCase)) - { - var substr = location.Substring(fullAssetsPath.Length).ToLower(); - if (substr.Contains("/editor/")) - { - return true; - } - } - - return false; - } - - public static string ReplacePathVars(string value) - { - var platform = GetPlatform(); - value = value.Replace("${platform}", platform); - return value; - } - - public static bool CheckAnyScriptExists() - { - var objects = Selection.objects; - for (var i = 0; i < objects.Length; ++i) - { - var obj = objects[i]; - var assetPath = AssetDatabase.GetAssetPath(obj); - if (CheckAnyScripts(assetPath, 5)) - { - return true; - } - } - return false; - } - - private static bool CheckAnyScripts(string assetPath, int maxDepth) - { - if (maxDepth <= 0) - { - // Debug.LogWarningFormat("max depth limited: {0}", assetPath); - return false; - } - - if (Directory.Exists(assetPath)) - { - foreach (var subDir in Directory.GetDirectories(assetPath)) - { - if (CheckAnyScripts(subDir, maxDepth - 1)) - { - return true; - } - } - - foreach (var subFile in Directory.GetFiles(assetPath)) - { - if (CheckAnyScripts(subFile, maxDepth)) - { - return true; - } - } - } - else - { - if (!string.IsNullOrEmpty(assetPath) && assetPath.EndsWith(".js")) - { - return true; - } - } - return false; - } - - [MenuItem("Assets/JS Bridge/Compile (bytecode)", true)] - public static bool CompileBytecodeValidate() - { - return CheckAnyScriptExists(); - } - - [MenuItem("Assets/JS Bridge/Compile (bytecode)")] - public static void CompileBytecode() - { - CompileBytecode(null); - AssetDatabase.Refresh(); - } - - // workspace: path of tsconfig.json - public static void CompileBytecode(string workspace) - { - var commonJSModule = false; - var tsconfigPath = string.IsNullOrEmpty(workspace) ? "tsconfig.json" : Path.Combine(workspace, "tsconfig.json"); - if (File.Exists(tsconfigPath)) - { - var text = Utils.TextUtils.NormalizeJson(File.ReadAllText(tsconfigPath)); - var tsconfig = JsonUtility.FromJson(text); - var module = tsconfig.compilerOptions.module; - if (module == "commonjs") - { - commonJSModule = true; - Debug.LogFormat("read tsconfig.json: compile as commonjs module mode"); - } - } - else - { - Debug.LogFormat("no tsconfig.json found, compile as ES6 module mode"); - } - - using (var compiler = new UnityJSScriptCompiler()) - { - var objects = Selection.objects; - for (var i = 0; i < objects.Length; ++i) - { - var obj = objects[i]; - var assetPath = AssetDatabase.GetAssetPath(obj); - CompileBytecode(compiler, assetPath, commonJSModule); - } - } - } - - private static void CompileBytecode(UnityJSScriptCompiler compiler, string assetPath, bool commonJSModule) - { - if (Directory.Exists(assetPath)) - { - foreach (var subDir in Directory.GetDirectories(assetPath)) - { - CompileBytecode(compiler, subDir, commonJSModule); - } - - foreach (var subFile in Directory.GetFiles(assetPath)) - { - CompileBytecode(compiler, subFile, commonJSModule); - } - } - else - { - if (!string.IsNullOrEmpty(assetPath) && assetPath.EndsWith(".js")) - { - var outPath = assetPath + ".bytes"; - var bytes = File.ReadAllBytes(assetPath); - var bytecode = compiler.Compile(assetPath, bytes, commonJSModule); - if (bytecode != null) - { - File.WriteAllBytes(outPath, bytecode); - Debug.LogFormat("compile {0}({1}) => {2}({3})", assetPath, bytes.Length, outPath, bytecode.Length); - } - else - { - Debug.LogErrorFormat("compilation failed: {0}", assetPath); - if (File.Exists(outPath)) - { - File.Delete(outPath); - } - } - } - } - } - - #endregion - - // https://regex101.com/r/426q4x/1 - public static Regex JSBehaviourClassNameRegex = new Regex(@"@ScriptType\s*\([\s\w\{\})]*\)[\n\s]*export\s+class\s+(\w+)\s+extends", RegexOptions.Multiline | RegexOptions.Compiled); - public static Regex JSAssetClassNameRegex = new Regex(@"@ScriptAsset\s*\([\s\w\{\})]*\)[\n\s]*export\s+class\s+(\w+)\s+extends", RegexOptions.Multiline | RegexOptions.Compiled); - public static Regex JSCustomEditorClassNameRegex = new Regex(@"^\s*@ScriptEditor\s*\([\s\w\{\})]*\)[\n\s]*export\s+class\s+(\w+)\s+extends", RegexOptions.Multiline | RegexOptions.Compiled); - public static Regex JSEditorWindowClassNameRegex = new Regex(@"^\s*@ScriptEditorWindow\s*\([\s\w\{\})]*\)[\n\s]*export\s+class\s+(\w+)\s+extends", RegexOptions.Multiline | RegexOptions.Compiled); - - public static string NormalizePathString(string path) - { - return path.Replace('\\', '/'); - } - - // sourceFile: 需要传入 FullPath - public static bool ResolveScriptRef(string sourceDirBase, string sourceFile, out string normalizedPath, out string modulePath, List hints) - { - if (!Path.IsPathRooted(sourceFile)) - { - sourceFile = Path.GetFullPath(sourceFile); - } - - normalizedPath = sourceFile; - if (!sourceFile.EndsWith(".ts") && !sourceFile.EndsWith(".tsx")) - { - // invalid - modulePath = null; - return false; - } - - var sourceExt = Path.GetExtension(sourceFile); - - if (File.Exists(sourceFile)) - { - var sourceDir = string.IsNullOrEmpty(sourceDirBase) ? "." : sourceDirBase; - if (Path.IsPathRooted(sourceDir)) - { - // not implemented - } - else - { - var appRoot = Path.GetPathRoot(Application.dataPath); - var sourceRoot = Path.GetPathRoot(sourceFile).Replace('\\', '/'); - - if (appRoot == sourceRoot) - { - var sourcePathNorm = sourceFile.Replace('\\', '/'); - var appPathNorm = Path.Combine(Directory.GetParent(Application.dataPath).FullName, sourceDir).Replace('\\', '/'); - - if (sourcePathNorm.ToLower().StartsWith(appPathNorm.ToLower())) - { - var sourceSubPathNorm = sourcePathNorm[0] == '/' ? sourcePathNorm.Substring(appPathNorm.Length + 1) : sourcePathNorm.Substring(appPathNorm.Length); - var offset = sourceSubPathNorm[0] == '/' ? 1 : 0; - - modulePath = sourceSubPathNorm.Substring(offset, sourceSubPathNorm.Length - sourceExt.Length - offset); - GetJSScriptClasses(sourceFile, modulePath, hints); - return true; - } - } - else - { - // invalid - } - } - } - - modulePath = null; - return false; - } - - private static void GetJSScriptClasses(string sourceFile, string modulePath, List hints) - { - //TODO: need optimization? - var text = File.ReadAllText(sourceFile); - - foreach (Match m in JSBehaviourClassNameRegex.Matches(text)) - { - hints.Add(new JSScriptClassPathHint(sourceFile, modulePath, m.Groups[1].Value, JSScriptClassType.MonoBehaviour)); - } - - foreach (Match m in JSAssetClassNameRegex.Matches(text)) - { - hints.Add(new JSScriptClassPathHint(sourceFile, modulePath, m.Groups[1].Value, JSScriptClassType.ScriptableObject)); - } - - foreach (Match m in JSCustomEditorClassNameRegex.Matches(text)) - { - hints.Add(new JSScriptClassPathHint(sourceFile, modulePath, m.Groups[1].Value, JSScriptClassType.CustomEditor)); - } - - foreach (Match m in JSEditorWindowClassNameRegex.Matches(text)) - { - hints.Add(new JSScriptClassPathHint(sourceFile, modulePath, m.Groups[1].Value, JSScriptClassType.EditorWindow)); - } - } - - static UnityHelper() - { - // EditorApplication.playModeStateChanged += OnPlayModeStateChanged; - } - - // private static void OnPlayModeStateChanged(PlayModeStateChange playModeStateChange) - // { - // if (playModeStateChange == PlayModeStateChange.EnteredEditMode) - // { - // EditorApplication.delayCall += () => ScriptEngine.Shutdown(); - // } - // } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/UnityHelper.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/UnityHelper.cs.meta deleted file mode 100644 index 61f9b88d..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/UnityHelper.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a2bdcad3496b55147b4d1665e163a907 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/UnityJSScriptCompiler.cs b/unity/quickjs/Runtime/Source/Unity/Editor/UnityJSScriptCompiler.cs deleted file mode 100644 index 7155b551..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/UnityJSScriptCompiler.cs +++ /dev/null @@ -1,109 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.IO; -using System.Text; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace QuickJS.Unity -{ - using Native; - - /// utility helps to compile js source into bytecode - public class UnityJSScriptCompiler : IDisposable - { - private JSRuntime _rt; - private JSContext _ctx; - private Utils.IScriptLogger _logger = new Utils.DefaultScriptLogger(); - - public UnityJSScriptCompiler() - { - _rt = JSApi.JSB_NewRuntime(ScriptRuntime.class_finalizer); - _ctx = JSApi.JS_NewContext(_rt); - JSApi.JS_AddIntrinsicOperators(_ctx); - } - - ~UnityJSScriptCompiler() - { - Dispose(false); - } - - public unsafe byte[] Compile(string filename, byte[] input_bytes, bool commonJSModule) - { - byte[] outputBytes = null; - try - { - byte[] fn_bytes = null; - if (commonJSModule) - { - input_bytes = Utils.TextUtils.GetShebangNullTerminatedCommonJSBytes(input_bytes); - } - - fn_bytes = Utils.TextUtils.GetNullTerminatedBytes(filename); - fixed (byte* input_ptr = input_bytes) - fixed (byte* fn_ptr = fn_bytes) - { - var input_len = (size_t)(input_bytes.Length - 1); - JSValue rval; - if (commonJSModule) - { - rval = JSApi.JS_CompileSource(_ctx, input_ptr, input_len, fn_ptr); - } - else - { - rval = JSApi.JS_CompileModule(_ctx, input_ptr, input_len, fn_ptr); - } - - if (JSApi.JS_IsException(rval)) - { - JSNative.print_exception(_ctx, _logger, Utils.LogLevel.Error, "[ScriptCompiler]"); - } - else - { - size_t psize; - var byteCode = JSApi.JS_WriteByteCode(_ctx, out psize, rval); - JSApi.JS_FreeValue(_ctx, rval); - if (byteCode != IntPtr.Zero) - { - var tagSize = sizeof(uint); - uint tagValue = commonJSModule ? ScriptRuntime.BYTECODE_COMMONJS_MODULE_TAG : ScriptRuntime.BYTECODE_ES6_MODULE_TAG; - - outputBytes = new byte[psize + tagSize]; - Buffer.BlockCopy(BitConverter.GetBytes(Utils.TextUtils.ToNetworkByteOrder(tagValue)), 0, outputBytes, 0, tagSize); - Marshal.Copy(byteCode, outputBytes, tagSize, psize); - } - JSApi.js_free(_ctx, byteCode); - } - } - return outputBytes; - } - catch (Exception exception) - { - _logger.WriteException(exception); - return null; - } - } - - public virtual void Dispose(bool bManaged) - { - if (_ctx.IsValid()) - { - JSApi.JS_FreeContext(_ctx); - _ctx = JSContext.Null; - } - - if (_rt.IsValid()) - { - JSApi.JSB_FreeRuntime(_rt); - _rt = JSRuntime.Null; - } - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/UnityJSScriptCompiler.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/UnityJSScriptCompiler.cs.meta deleted file mode 100644 index 18ca95e9..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/UnityJSScriptCompiler.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 415f0d456dbbcbb4b9f993cc27d84df8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/UnityShellHelper.cs b/unity/quickjs/Runtime/Source/Unity/Editor/UnityShellHelper.cs deleted file mode 100644 index a8c53681..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/UnityShellHelper.cs +++ /dev/null @@ -1,85 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Text; - -namespace QuickJS.Unity -{ - public static class UnityShellHelper - { - public static int Run(string command, string arguments, int maxIdleTime) - { - return Run(command, arguments, null, maxIdleTime); - } - - private static int Run(string command, string arguments, DirectoryInfo workingDirectory, int maxIdleTime) - { - var output = new StringBuilder(); - using (var process = new Process()) - { - process.StartInfo = new ProcessStartInfo() - { - FileName = command, - Arguments = arguments, - WorkingDirectory = workingDirectory?.FullName ?? new DirectoryInfo(".").FullName, - RedirectStandardInput = true, - RedirectStandardOutput = true, - RedirectStandardError = true, - CreateNoWindow = true, - UseShellExecute = false - }; - // Prepare data received handlers - process.OutputDataReceived += (sender, e) => - { - if (!string.IsNullOrEmpty(e.Data)) - { - output.AppendLine(e.Data); - UnityEngine.Debug.Log(e.Data); - } - }; - process.ErrorDataReceived += (sender, e) => - { - if (!string.IsNullOrEmpty(e.Data)) - { - UnityEngine.Debug.LogError(e.Data); - } - }; - process.Start(); - process.BeginOutputReadLine(); - process.BeginErrorReadLine(); - return WaitForProcess(process, output, maxIdleTime); - } - } - - private static int WaitForProcess(Process process, StringBuilder output, int maxIdleTime) - { - while (true) - { - var len = output.Length; - if (process.WaitForExit(maxIdleTime * 1000)) - { - // WaitForExit with a timeout will not wait for async event handling operations to finish. - // To ensure that async event handling has been completed, call WaitForExit that takes no parameters. - // See remarks: https://msdn.microsoft.com/en-us/library/ty0d8k56(v=vs.110) - process.WaitForExit(); - - return process.ExitCode; - } - if (output.Length != len) - { - continue; - } - // idle for too long with no output? -> kill - // nb: testing the process threads WaitState doesn't work on OSX - UnityEngine.Debug.LogError("Idle process detected. See console for more details."); - process.Kill(); - return -1; - } - } - } -} - -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/UnityShellHelper.cs.meta b/unity/quickjs/Runtime/Source/Unity/Editor/UnityShellHelper.cs.meta deleted file mode 100644 index ecf66f66..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/UnityShellHelper.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4379e5600ae38c54ba8a035d9dfca5e7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/jsb.editor.unity.asmdef b/unity/quickjs/Runtime/Source/Unity/Editor/jsb.editor.unity.asmdef deleted file mode 100644 index e4d551b9..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/jsb.editor.unity.asmdef +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "jsb.editor.unity", - "rootNamespace": "", - "references": [ - "GUID:118b4ca3a1852354bac065cf952c1e85", - "GUID:eda0539582471264796e5affb41fe082", - "GUID:ac4126d60783f3d4a98aee6be9a997aa", - "GUID:595d45be140461240b6b4358dc45f2c0" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": true, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [ - "UNITY_EDITOR || JSB_RUNTIME_REFLECT_BINDING", - "!REACT_QUICKJS_ORIGINAL", - "!REACT_DISABLE_QUICKJS", - "!REACT_EXCLUDE_QUICKJS" - ], - "versionDefines": [ - { - "name": "Unity", - "expression": "", - "define": "JSB_RUNTIME_REFLECT_BINDING" - }, - { - "name": "Unity", - "expression": "", - "define": "JSB_UNITYLESS" - } - ], - "noEngineReferences": false -} \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Editor/jsb.editor.unity.asmdef.meta b/unity/quickjs/Runtime/Source/Unity/Editor/jsb.editor.unity.asmdef.meta deleted file mode 100644 index 533c7ae5..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Editor/jsb.editor.unity.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 2746379d15af6e84cbeb433df77dd384 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/EditorWindowFix.cs b/unity/quickjs/Runtime/Source/Unity/EditorWindowFix.cs deleted file mode 100644 index 03fafd54..00000000 --- a/unity/quickjs/Runtime/Source/Unity/EditorWindowFix.cs +++ /dev/null @@ -1,324 +0,0 @@ -#if !JSB_UNITYLESS -#if UNITY_EDITOR -using System; -using System.Reflection; -using System.Collections.Generic; -using System.Linq; - -namespace QuickJS.Unity -{ - using Native; - using Binding; - using UnityEngine; - using UnityEditor; - - public static class EditorWindowFix - { - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue BindStatic_GetWindow(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - //TODO: 需要补充 GetWindow 其余重载匹配 - if (argc == 1) - { - System.Type arg_editorType; - if (!Values.js_get_classvalue(ctx, argv[0], out arg_editorType)) - { - throw new ParameterException(typeof(UnityEditor.EditorWindow), "GetWindow", typeof(System.Type), 0); - } - var inject = js_get_window(ctx, argv[0], arg_editorType, false, null, true); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = UnityEditor.EditorWindow.GetWindow(arg_editorType); - return Values.js_push_classvalue(ctx, ret); - } - else if (argc == 2) - { - if (Values.js_match_type(ctx, argv[0], typeof(Type)) && Values.js_match_type(ctx, argv[1], typeof(bool))) - { - System.Type arg_editorType; - if (!Values.js_get_classvalue(ctx, argv[0], out arg_editorType)) - { - throw new ParameterException(typeof(UnityEditor.EditorWindow), "GetWindow", typeof(System.Type), 0); - } - bool arg_utility; - if (!Values.js_get_primitive(ctx, argv[1], out arg_utility)) - { - throw new ParameterException(typeof(UnityEditor.EditorWindow), "GetWindow", typeof(bool), 1); - } - var inject = js_get_window(ctx, argv[0], arg_editorType, arg_utility, null, true); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = UnityEditor.EditorWindow.GetWindow(arg_editorType); - return Values.js_push_classvalue(ctx, ret); - } - } - else if (argc == 3) - { - if (Values.js_match_type(ctx, argv[0], typeof(Type)) && Values.js_match_type(ctx, argv[1], typeof(bool)) && Values.js_match_type(ctx, argv[2], typeof(string))) - { - System.Type arg_editorType; - if (!Values.js_get_classvalue(ctx, argv[0], out arg_editorType)) - { - throw new ParameterException(typeof(UnityEditor.EditorWindow), "GetWindow", typeof(System.Type), 0); - } - bool arg_utility; - if (!Values.js_get_primitive(ctx, argv[1], out arg_utility)) - { - throw new ParameterException(typeof(UnityEditor.EditorWindow), "GetWindow", typeof(bool), 1); - } - string arg_title; - if (!Values.js_get_primitive(ctx, argv[2], out arg_title)) - { - throw new ParameterException(typeof(UnityEditor.EditorWindow), "GetWindow", typeof(string), 2); - } - var inject = js_get_window(ctx, argv[0], arg_editorType, arg_utility, arg_title, true); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = UnityEditor.EditorWindow.GetWindow(arg_editorType); - return Values.js_push_classvalue(ctx, ret); - } - } - else if (argc == 4) - { - if (Values.js_match_type(ctx, argv[0], typeof(Type)) && Values.js_match_type(ctx, argv[1], typeof(bool)) && Values.js_match_type(ctx, argv[2], typeof(string)) && Values.js_match_type(ctx, argv[3], typeof(bool))) - { - System.Type arg_editorType; - if (!Values.js_get_classvalue(ctx, argv[0], out arg_editorType)) - { - throw new ParameterException(typeof(UnityEditor.EditorWindow), "GetWindow", typeof(System.Type), 0); - } - bool arg_utility; - if (!Values.js_get_primitive(ctx, argv[1], out arg_utility)) - { - throw new ParameterException(typeof(UnityEditor.EditorWindow), "GetWindow", typeof(bool), 1); - } - string arg_title; - if (!Values.js_get_primitive(ctx, argv[2], out arg_title)) - { - throw new ParameterException(typeof(UnityEditor.EditorWindow), "GetWindow", typeof(string), 2); - } - bool arg_focus; - if (!Values.js_get_primitive(ctx, argv[3], out arg_focus)) - { - throw new ParameterException(typeof(UnityEditor.EditorWindow), "GetWindow", typeof(bool), 3); - } - var inject = js_get_window(ctx, argv[0], arg_editorType, arg_utility, arg_title, arg_focus); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = UnityEditor.EditorWindow.GetWindow(arg_editorType); - return Values.js_push_classvalue(ctx, ret); - } - } - throw new NoSuitableMethodException("GetWindow", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - - // as extended method - // public static T CreateWindow(string title, params Type[] desiredDockNextTo) where T : EditorWindow - // public static T CreateWindow(params Type[] desiredDockNextTo) where T : EditorWindow - [JSCFunction(true, - "(type: { new(): T }, ...desiredDockNextTo: any[]): T", - "(type: { new(): T }, title: string, ...desiredDockNextTo: any[]): T")] - public static JSValue CreateWindow(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - if (argc == 0 || JSApi.JS_IsConstructor(ctx, argv[0]) != 1) - { - throw new ParameterException("type", typeof(Type), 0); - } - - if (argc > 1) - { - var firstAsTitle = argv[1].IsString() || argv[1].IsNullish(); - var title = firstAsTitle ? JSApi.GetString(ctx, argv[1]) : null; - var firstArgIndex = firstAsTitle ? 2 : 1; - - return _new_js_editor_window(ctx, argv[0], false, title, argv, firstArgIndex); - } - - return _new_js_editor_window(ctx, argv[0], false, null, null, 0); - } - - //TODO fix type checking - private static bool __type_equals(EditorWindow editorWindow, JSContext ctx, JSValue value) - { - var jsEditorWindow = editorWindow as JSEditorWindow; - if (jsEditorWindow != null) - { - if (jsEditorWindow.IsInstanceOf(value) == 1) - { - return true; - } - } - - Type type; - if (Values.js_get_classvalue(ctx, value, out type)) - { - var editorWindowType = editorWindow.GetType(); - if (editorWindowType == type || editorWindowType.IsSubclassOf(type)) - { - return true; - } - } - - return false; - } - - private static bool __dock(EditorWindow val, JSContext ctx, JSValue[] desiredDockNextTo) - { - if (desiredDockNextTo == null || desiredDockNextTo.Length == 0) - { - return false; - } - - try - { - var ContainerWindow = typeof(EditorWindow).Assembly.GetType("UnityEditor.ContainerWindow"); - var ContainerWindow_windows = ContainerWindow.GetProperty("windows", BindingFlags.Public | BindingFlags.Static); - var ContainerWindow_rootView = ContainerWindow.GetProperty("rootView", BindingFlags.Public | BindingFlags.Instance); - - var View = typeof(EditorWindow).Assembly.GetType("UnityEditor.View"); - var View_allChildren = View.GetProperty("allChildren", BindingFlags.Public | BindingFlags.Instance); - var DockArea = typeof(EditorWindow).Assembly.GetType("UnityEditor.DockArea"); - var DockArea_Panes = DockArea.GetField("m_Panes", BindingFlags.NonPublic | BindingFlags.Instance); - var DockArea_AddTab = DockArea.GetMethod("AddTab", new Type[] { typeof(EditorWindow), typeof(bool) }); - - // foreach (var desired in desiredDockNextTo) - for (var dIndex = 0; dIndex < desiredDockNextTo.Length; dIndex++) - { - var desired = desiredDockNextTo[dIndex]; - // ContainerWindow[] - var windows = (Array)ContainerWindow_windows.GetMethod.Invoke(null, null); - for (var wIndex = 0; wIndex < windows.Length; wIndex++) - { - var containerWindow = windows.GetValue(wIndex); - var rootView = ContainerWindow_rootView.GetMethod.Invoke(containerWindow, null); - // View[] - var allChildren = (Array)View_allChildren.GetMethod.Invoke(rootView, null); - for (var vIndex = 0; vIndex < allChildren.Length; vIndex++) - { - var view = allChildren.GetValue(vIndex); - var dockArea = view; // as DockArea - - // DockArea.m_Panes: internal List - if (!((UnityEngine.Object)dockArea == null) && DockArea.IsInstanceOfType(dockArea)) - { - if ((DockArea_Panes.GetValue(dockArea) as List).Any((EditorWindow pane) => __type_equals(pane, ctx, desired))) - { - DockArea_AddTab.Invoke(dockArea, new object[] { val, true }); // dockArea.AddTab(val); - return true; - } - } - } - } - } - } - catch (Exception exception) - { - Debug.LogError(exception); - } - - return false; - } - - // inject: GetWindow(Type) - public static JSValue js_get_window(JSContext ctx, JSValue ctor, Type type, bool utility, string title, bool focus) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - if (type == typeof(EditorWindow)) - { - var bridgeValue = _js_get_window_clone(ctx, ctor, utility, title, focus); - if (!bridgeValue.IsUndefined()) - { - return bridgeValue; - } - - return JSApi.JS_NULL; // or return an empty array? - } - } - } - - return JSApi.JS_UNDEFINED; - } - - private static JSValue _js_get_window_clone(JSContext ctx, JSValue ctor, bool utility, string title, bool focus) - { - var t = typeof(JSEditorWindow); - var array = Resources.FindObjectsOfTypeAll(t); - var editorWindow = _get_js_editor_window(array, ctor); - if (!editorWindow) - { - return _new_js_editor_window(ctx, ctor, utility, title, null, 0); - } - else if (focus) - { - editorWindow.Show(); - editorWindow.Focus(); - } - - return editorWindow.CloneValue(); - } - - private static JSValue _new_js_editor_window(JSContext ctx, JSValue ctor, bool utility, string title, JSValue[] desiredDockNextTo, int desiredDockNextToOffset) - { - var editorWindow = ScriptableObject.CreateInstance(); - var val = editorWindow.SetScriptInstance(ctx, ctor, true); - - if (val.IsUndefined()) - { - editorWindow.ReleaseScriptInstance(); - Object.DestroyImmediate(editorWindow); - return ctx.ThrowInternalError("failed to bind script"); - } - - if (title != null) - { - editorWindow.titleContent = new GUIContent(title); - } - - __dock(editorWindow, ctx, desiredDockNextTo); - if (utility) - { - editorWindow.ShowUtility(); - } - else - { - editorWindow.Show(); - } - - return val; - } - - private static JSEditorWindow _get_js_editor_window(Object[] array, JSValue ctor) - { - for (int i = 0, len = array.Length; i < len; i++) - { - var ew = (JSEditorWindow)array[i]; - if (ew.IsInstanceOf(ctor) == 1) - { - return ew; - } - } - return null; - } - } -} -#endif -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/EditorWindowFix.cs.meta b/unity/quickjs/Runtime/Source/Unity/EditorWindowFix.cs.meta deleted file mode 100644 index 6e6e32b0..00000000 --- a/unity/quickjs/Runtime/Source/Unity/EditorWindowFix.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 75488ab2780cee646867983c07e2f785 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/GameObjectFix.cs b/unity/quickjs/Runtime/Source/Unity/GameObjectFix.cs deleted file mode 100644 index 8fbf610c..00000000 --- a/unity/quickjs/Runtime/Source/Unity/GameObjectFix.cs +++ /dev/null @@ -1,378 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Reflection; - -namespace QuickJS.Unity -{ - using Native; - using Binding; - using UnityEngine; - - public static class GameObjectFix - { - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_AddComponent(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - if (argc == 1) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "AddComponent", typeof(System.Type), 0); - } - var inject = Values._js_game_object_add_component(ctx, argv[0], self, arg0); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.AddComponent(arg0); - return Values.js_push_classvalue(ctx, ret); - } - throw new NoSuitableMethodException("AddComponent", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponent(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - do - { - if (argc == 1) - { - if (Values.js_match_type(ctx, argv[0], typeof(System.Type))) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponent", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_component(ctx, argv[0], self, arg0); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponent(arg0); - return Values.js_push_classvalue(ctx, ret); - } - if (Values.js_match_type(ctx, argv[0], typeof(string))) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - string arg0; - if (!Values.js_get_primitive(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponent", typeof(string), 0); - } - var ret = self.GetComponent(arg0); - return Values.js_push_classvalue(ctx, ret); - } - } - } while (false); - throw new NoSuitableMethodException("GetComponent", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponentInChildren(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - do - { - if (argc == 2) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponentInChildren", typeof(System.Type), 0); - } - bool arg1; - if (!Values.js_get_primitive(ctx, argv[1], out arg1)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponentInChildren", typeof(bool), 1); - } - var inject = Values._js_game_object_get_component_in_children(ctx, argv[0], self, arg0, arg1); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentInChildren(arg0, arg1); - return Values.js_push_classvalue(ctx, ret); - } - if (argc == 1) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponentInChildren", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_component_in_children(ctx, argv[0], self, arg0, false); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentInChildren(arg0); - return Values.js_push_classvalue(ctx, ret); - } - } while (false); - throw new NoSuitableMethodException("GetComponentInChildren", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponentInParent(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - if (argc == 1) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponentInParent", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_component_in_parent(ctx, argv[0], self, arg0, false); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentInParent(arg0); - return Values.js_push_classvalue(ctx, ret); - } - throw new NoSuitableMethodException("GetComponentInParent", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponents(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - do - { - if (argc == 2) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponents", typeof(System.Type), 0); - } - System.Collections.Generic.List arg1; - if (!Values.js_get_classvalue(ctx, argv[1], out arg1)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponents", typeof(System.Collections.Generic.List), 1); - } - var inject = Values._js_game_object_get_components(ctx, argv[0], self, arg0, arg1); - if (!inject.IsUndefined()) - { - return inject; - } - self.GetComponents(arg0, arg1); - return JSApi.JS_UNDEFINED; - } - if (argc == 1) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponents", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_components(ctx, argv[0], self, arg0); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponents(arg0); - return Values.PushArray(ctx, ret); - } - } while (false); - throw new NoSuitableMethodException("GetComponents", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponentsInChildren(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - do - { - if (argc == 2) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponentsInChildren", typeof(System.Type), 0); - } - bool arg1; - if (!Values.js_get_primitive(ctx, argv[1], out arg1)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponentsInChildren", typeof(bool), 1); - } - var inject = Values._js_game_object_get_components_in_children(ctx, argv[0], self, arg0, arg1); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentsInChildren(arg0, arg1); - return Values.PushArray(ctx, ret); - } - if (argc == 1) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponentsInChildren", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_components_in_children(ctx, argv[0], self, arg0, false); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentsInChildren(arg0); - return Values.PushArray(ctx, ret); - } - } while (false); - throw new NoSuitableMethodException("GetComponentsInChildren", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue Bind_GetComponentsInParent(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - do - { - if (argc == 2) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponentsInParent", typeof(System.Type), 0); - } - bool arg1; - if (!Values.js_get_primitive(ctx, argv[1], out arg1)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponentsInParent", typeof(bool), 1); - } - var inject = Values._js_game_object_get_components_in_parent(ctx, argv[0], self, arg0, arg1); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentsInParent(arg0, arg1); - return Values.PushArray(ctx, ret); - } - if (argc == 1) - { - UnityEngine.GameObject self; - if (!Values.js_get_classvalue(ctx, this_obj, out self)) - { - throw new ThisBoundException(); - } - System.Type arg0; - if (!Values.js_get_classvalue(ctx, argv[0], out arg0)) - { - throw new ParameterException(typeof(UnityEngine.GameObject), "GetComponentsInParent", typeof(System.Type), 0); - } - var inject = Values._js_game_object_get_components_in_parent(ctx, argv[0], self, arg0, false); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = self.GetComponentsInParent(arg0); - return Values.PushArray(ctx, ret); - } - } while (false); - throw new NoSuitableMethodException("GetComponentsInParent", argc); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/GameObjectFix.cs.meta b/unity/quickjs/Runtime/Source/Unity/GameObjectFix.cs.meta deleted file mode 100644 index f7182782..00000000 --- a/unity/quickjs/Runtime/Source/Unity/GameObjectFix.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f7b186cd0be52224f84af7900e3dc03b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix.meta b/unity/quickjs/Runtime/Source/Unity/Hotfix.meta deleted file mode 100644 index b4146e73..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Hotfix.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 94626bff5ed00354ba545a33f52cf384 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor.meta b/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor.meta deleted file mode 100644 index 2076fea8..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ca0ac49d09e11c2409aa809968ff7c93 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/HotfixUtil.cs b/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/HotfixUtil.cs deleted file mode 100644 index ca799111..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/HotfixUtil.cs +++ /dev/null @@ -1,345 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using Mono.Cecil; -using Mono.Cecil.Cil; - -namespace QuickJS.Unity.Experimental.Hotfix -{ - using UnityEditor; - using UnityEngine; - - //TODO: 热更功能临时代码 - public class HotfixUtil - { - private const string TypeNameForInjectFlag = "_jsb_injected_flag_"; - - [MenuItem("JS Bridge/Hotfix")] - public static void RunHotfix() - { - Run(); - } - - private static bool IsHotfixTarget(TypeDefinition td) - { - foreach (var attr in td.CustomAttributes) - { - if (attr.AttributeType.FullName == typeof(QuickJS.JSHotfixAttribute).FullName) - { - return true; - } - } - return false; - } - - public static bool Collect(AssemblyDefinition a, List delegateTypes) - { - foreach (var type in a.MainModule.Types) - { - if (type.Name == TypeNameForInjectFlag) - { - return false; - } - if (type.FullName == "jsb._QuickJSDelegates") - { - foreach (var nested in type.NestedTypes) - { - if (nested.BaseType.FullName == "System.MulticastDelegate") - { - delegateTypes.Add(nested); - // Debug.LogFormat("Nest: {0} based {1} in {2}", nested.FullName, nested.BaseType.FullName, type.FullName); - } - } - } - } - return true; - } - - public static bool IsParameterMatched(ParameterDefinition p1, ParameterDefinition p2) - { - return p1.ParameterType == p2.ParameterType && p1.IsOut == p2.IsOut; - } - - // 方法定义是否与 hotfix 委托定义匹配 - public static bool IsDelegateMatched(MethodDefinition m, TypeReference returnType, TypeDefinition d) - { - var invoke = d.Methods.First(dm => dm.Name == "Invoke"); - var argc = invoke.Parameters.Count; - if (argc != m.Parameters.Count + 1) - { - return false; - } - - if (invoke.ReturnType != returnType) - { - return false; - } - - if (invoke.Parameters[0].IsOut) - { - return false; - } - - if (m.IsStatic) - { - if (invoke.Parameters[0].ParameterType.FullName != "System.Type") - { - return false; - } - } - else - { - if (invoke.Parameters[0].ParameterType.FullName != "System.Object") - { - return false; - } - } - - for (var i = 1; i < argc; i++) - { - var p1 = invoke.Parameters[i]; - var p2 = m.Parameters[i - 1]; - - if (!IsParameterMatched(p1, p2)) - { - return false; - } - } - - return true; - } - - // 从 Delegate 定义池中找一个匹配的 - public static TypeDefinition GetDelegate(MethodDefinition m, TypeReference returnType, List list) - { - if (m.Name != ".cctor") - { - for (var i = 0; i < list.Count; i++) - { - var item = list[i]; - if (IsDelegateMatched(m, returnType, item)) - { - return item; - } - } - } - - return null; - } - - public static string GetMethodString(MethodDefinition method) - { - var sb = ""; - sb += $"{method.ReturnType} "; - sb += $"{method.DeclaringType.FullName}."; - sb += $"{method.Name}("; - for (var i = 0; i < method.Parameters.Count; i++) - { - var p = method.Parameters[i]; - sb += $"{p.ParameterType} {p.Name}"; - if (i != method.Parameters.Count - 1) - { - sb += ", "; - } - } - sb += ");"; - - return sb; - } - - private static OpCode[] ldarg_i_table = new OpCode[] { OpCodes.Ldarg_0, OpCodes.Ldarg_1, OpCodes.Ldarg_2, OpCodes.Ldarg_3 }; - - private static Instruction FindPatchPoint(MethodBody body) - { - var instructions = body.Instructions; - return instructions.Count > 0 ? instructions[0] : null; - } - - private static string GetHotfixFieldName_r(MethodDefinition method, HashSet set) - { - var plainName = method.IsConstructor ? "_JSFIX_RC_" + method.Name.Replace(".", "") : "_JSFIX_R_" + method.Name; - var index = 0; - var serialName = plainName + "_" + index; - - while (set.Contains(serialName)) - { - serialName = plainName + "_" + ++index; - } - - set.Add(serialName); - return serialName; - } - - private static string GetHotfixFieldName_b(MethodDefinition method, HashSet set) - { - var plainName = method.IsConstructor ? "_JSFIX_BC_" + method.Name.Replace(".", "") : "_JSFIX_B_" + method.Name; - var index = 0; - var serialName = plainName + "_" + index; - - while (set.Contains(serialName)) - { - serialName = plainName + "_" + ++index; - } - - return serialName; - } - - public static void Run() - { - var testAssembly = Binding.BindingManager.TryGetAssembly("Assembly-CSharp"); - if (testAssembly == null) - { - return; - } - var assemblyFilePath = testAssembly.Location; - var a = AssemblyDefinition.ReadAssembly(assemblyFilePath); - var delegateTypes = new List(); - var modified = false; - - if (!Collect(a, delegateTypes)) - { - Debug.LogError("dirty dll"); - return; - } - - foreach (var type in a.MainModule.Types) - { - //TODO: 改为通过列表而不是 Attribute 判断 - if (!IsHotfixTarget(type)) - { - continue; - } - - var sb = $"{type.FullName}\n"; - var hotfixRegs = new HashSet(); - foreach (var method in type.Methods) - { - var delegateType_r = GetDelegate(method, method.ReturnType, delegateTypes); - var delegateType_b = GetDelegate(method, a.MainModule.TypeSystem.Void, delegateTypes); - if (delegateType_r == null) - { - continue; - } - var hotfixFieldName_r = GetHotfixFieldName_r(method, hotfixRegs); - var signatureLit = GetMethodString(method); - - var point = FindPatchPoint(method.Body); - if (point == null) - { - Debug.LogWarningFormat("no patch point in {0}", signatureLit); - continue; - } - - modified = true; - var argCount = method.IsStatic ? method.Parameters.Count : method.Parameters.Count + 1; - var proc = method.Body.GetILProcessor(); - var boolVar = new VariableDefinition(a.MainModule.TypeSystem.Boolean); - method.Body.Variables.Add(boolVar); - - if (delegateType_b != null) - { - var hotfixFieldName_b = GetHotfixFieldName_b(method, hotfixRegs); - var delegateField_b = new FieldDefinition(hotfixFieldName_b, FieldAttributes.Public | FieldAttributes.Static, delegateType_b); - var localPoint = point; - - type.Fields.Add(delegateField_b); - proc.InsertBefore(localPoint, point = proc.Create(OpCodes.Ldsfld, delegateField_b)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldnull)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Cgt_Un)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Stloc, boolVar)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldloc, boolVar)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Brfalse_S, localPoint)); // jump to original instructions - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldsfld, delegateField_b)); - - if (method.IsStatic) - { - var refGetTypeFromHandle = a.MainModule.ImportReference(typeof(Type).GetMethod("GetTypeFromHandle")); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldtoken, type)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Call, refGetTypeFromHandle)); - } - - for (var argIndex = 0; argIndex < argCount; argIndex++) - { - var ldarg_i = argIndex; - if (ldarg_i < ldarg_i_table.Length) - { - proc.InsertBefore(localPoint, proc.Create(ldarg_i_table[ldarg_i])); - } - else if (ldarg_i <= byte.MaxValue) - { - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldarg_S, (byte)ldarg_i)); - } - else - { - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldarg, ldarg_i)); - } - } - var invoke_b = delegateType_b.Methods.First(dm => dm.Name == "Invoke"); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Callvirt, invoke_b)); - } - - if (delegateType_r != null) - { - var delegateField_r = new FieldDefinition(hotfixFieldName_r, FieldAttributes.Public | FieldAttributes.Static, delegateType_r); - var localPoint = point; - - type.Fields.Add(delegateField_r); - proc.InsertBefore(localPoint, point = proc.Create(OpCodes.Ldsfld, delegateField_r)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldnull)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Cgt_Un)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Stloc, boolVar)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldloc, boolVar)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Brfalse_S, localPoint)); // jump to original instructions - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldsfld, delegateField_r)); - - if (method.IsStatic) - { - var refGetTypeFromHandle = a.MainModule.ImportReference(typeof(Type).GetMethod("GetTypeFromHandle")); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldtoken, type)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Call, refGetTypeFromHandle)); - } - - for (var argIndex = 0; argIndex < argCount; argIndex++) - { - var ldarg_i = argIndex; - if (ldarg_i < ldarg_i_table.Length) - { - proc.InsertBefore(localPoint, proc.Create(ldarg_i_table[ldarg_i])); - } - else if (ldarg_i <= byte.MaxValue) - { - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldarg_S, (byte)ldarg_i)); - } - else - { - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ldarg, ldarg_i)); - } - } - var invoke_r = delegateType_r.Methods.First(dm => dm.Name == "Invoke"); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Callvirt, invoke_r)); - proc.InsertBefore(localPoint, proc.Create(OpCodes.Ret)); - } - - sb += hotfixFieldName_r + " > " + signatureLit; - sb += "\n"; - } - Debug.LogFormat("{0}", sb); - } - - if (modified) - { - a.MainModule.Types.Add(new TypeDefinition("QuickJS", TypeNameForInjectFlag, Mono.Cecil.TypeAttributes.Class, a.MainModule.TypeSystem.Object)); - a.Write(assemblyFilePath); - // a.Write("temp.dll"); - Debug.LogFormat("write: {0}", assemblyFilePath); - } - else - { - Debug.LogWarningFormat("no change"); - } - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/HotfixUtil.cs.meta b/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/HotfixUtil.cs.meta deleted file mode 100644 index e312aab8..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/HotfixUtil.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b0e8d91143bed454c90fd461485b2089 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins.meta b/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins.meta deleted file mode 100644 index 2088f07e..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3aa64c11d48fd4d4f9adb05011b4df0a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Mdb.dll b/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Mdb.dll deleted file mode 100644 index 6f856f74629baa377e503c810b7ecfbbbc7a2527..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44544 zcmeIb33yx8wKlxZpra$nRxH_;@;R2qA+r7&4KVkdUN~Y|Dv=?c+#x zNMh93g;FSEC}k?N3@Jl_5~czz+(LmC3Y7UWTu5n|%20Ys=|C@q|6ObEBgsynx8L*q z&-4G^cLm;Ot+m%)d#$zCo{yAeCtV;6A%uy)&p#L99z5wYm(wp#29X^c|Kp&z)A!_r zd$grbPH5SZOh2dm^ZHZ{AzbBgPi8ifR9qo2H5;cW|{)tNT%7sEK z)eN!cno%dYwY@G5i3YSf{b^HlY#IP>)CIactpQt7T=-+x(z^=Jp zCsz7D_f)9l7Oy`f#0r967ov+Call6t1)$yVGa)Jt$ompPR0umS+XlWQ53lJZdmR87dISFQK6BArHK|0G14hzS23n4m*+ zBUa)9r7jR50Agh@X;ZcC&2t?zW`uO?`EHm}kc#!mT1L7;=0imi*A0S@CiBbl`&IEvzK_w065Y8aj zIg~P{>jPAg;Y=i~xYjSGLT3mG=>up5v)W2eLe4H&?g^SfPtXc_gLcrD9zvyl-6B6( zR@Jj3xChX{=G1_mo{Yj7LUbk>MtU_0IEPVf7apvT;lz+fl{qJXv+A2)#^jtxEJBd4 z(Lyu^gmirXz0E9J>$frl93GzT%@Hyn7?ZT|skDpgDsm<}^!LpU{Hj0C2PmZ;Y`0=Tzq zt+N{}cm}+RuNL(BS9B>XCq9`$@W9y=22LG#3Z@i>^;kV1!|8$yAk%5c0aATk1|bgvMzUlOhGwMLGo@TQAmm}!7|v;^D! zTkHvW@_qBtfihGzBxzj+k$JFc&_Pg*Mb(fGLzZ(Cj4+%Ys>VV!Nb`DD{TEk5lGbI= z%MMlzdM>K*QZ*D;A+Ix=t7)TZ(9Xr)5L%kDxSxJWH6&?W1|42iBRkquBQhl*LFZ^l z&Y)KvOb>)G$kairk5ue)!0sG_q}WCr*s-~+*g9%aJ2npp$BzA31hM|lT9m}E%b;&$ zm7^}1LHExRID#meGZXWuh=W?~9G zw|6vCCq=At;1}(hNoC{fB_tWW)zedZz&2(in^*CVcKIijNAe5mmYj&Z8N`B#k(aa{ zU*s%=n(0MIG8mOzy5&t{aFH|B{=$OPf1yS@jV85r>FLG9Tu996B?Q9FW|h!jj1WhO zSIe|QP&69n(R*n*g*mkujHxM_=#3ozef2Hb9x%HwN+KGMi7d=EJ6XAMJR@| z2!(kTp$-T^0~iPSNwpG=7=fiSW^Th1`5~jMK8P8DvIajUICBdj^clM$x3aDTUom+Z2mAdjE~AA&-$EilU{TX)i0wH}ddX$NEsA1v4Ftl~KlhC`%aO1`3b!B$}F zF$Aqu|45!_FUL$aVh}JgUTksA4`jTIMc>9kLLlZw#*1qmEvPX0QvKAbYf<-PZ$Vb5 zT_t5kMEMapndsOwm=B8`>ZSiAc2r$t8TtpWH3He1yjlHgMA^bzT^L;jN_@Hg?3{B; z&_M7#$@fMa%&z`nmbm_jh(l-PA&l!!`*cV-dmc#$w@=L)7Sm?u@+$uUf1DOf#n3Q25H$ z7Wz~S(`Z}&w5pA_6o?bA9IkS4^7ZdX{ntpr*#U~X1U7kP4%W(6)h?rYjO3^etC;=@ zwAV{`mPRblyhLq}$tba^n0WZ`HYOmmIPL(_u` zADRbG%!6s9aCs)@!8Gx?bZQ9~rq*;}n3;vyVM350L5Z z=8H^sVKUu?$#fSc(_NTMcVRN!g~@amCevM*Om|^2-G#|?7beqPm`rzJGTnvAbQdPm zU6@RFVKUu?$#jNMkmuF!Df?4rVYxEi@2*$a8SWBK=k1icfYS%aAqvB$gUnSJLYoX$ z*jRmlOjcNhK0rn*tWqB!vlWK53mLAk@#uMEyF~fW1cwWJY7n7)AT6E@v(%%I`IJ>! zN=FK@qbTE|cF?^UEGbQ1*Ckw^cy!TQ zk#z}4Q!19}10+;o*kO}wg~26MgTmkvsz+gP3DqVsY1y0zK50x>)*!aYCXO=XS&Wgv za+|bA7HN+K5Ni(y$bM~z4(N%c57wUuMeLQigz0!83+E~0k7<>KBt^I6(IK%AD zpVU$C>Da7K$wuWH_>^QR3_hh=&Orp}*Gz&>Nw&&^Pf2>d7f*tEvq6Kuj;4nvGY5~V zi(MmS9v_iO24%eD!cvA9SY5y*!D)jl026~WM1lNQB^N=21x!?x$sANbM7IJWN~fNYnqZJqDOXiMnbMhD%Y}M+GdX85$a)%^41Z<`fo{w% z0;1-*ZHTa9>JML9LOOwpNfrHA*_7%7B;TMNqva$~2`^``K$bj#NFni1#YTE5@th1E zUL|F)qiklwVeM$kWlOdwe2@5o=WvBvYD~g?qb*YX;2NA3Y9i{oLs^v<$nLf@H z&*#2WzLd*T0BAfuoka;p5}s{A_6hTT?&lPK=c6qxyS z2Wwv|1N}|CEVF_h>Fp?$Sq`x3$NB(~aw{_E#|O%o#{3yV^Z`l@2fp@Kr6hYb&df-9 zl^#n#xI*NdiHSgzahnVmOiDS(u>5eRWqM-ga!Jy{>zo4N*oD&G?8chLvkkZctOg#7h?<)EE>)inBI>E)Fhq}U<5f8ByuX1!6FD!a%DLDyb(TP zsZwz^fkdE7lL*R(hzyIkF58T&$PP2JnjYw%L2@4jHToxx66ksf_g_g+F*&vn9qY0a zC<9ADe$v_;BMN_p_mktnhCm|GJW1&TBw%WxKECK&G?pgiv6QI=x*qGMx=AJq5vROH zk=3~Hi6jA?Oe=d<&aWI_h(EgH#Mn)h#l8v~r`oEPDnt`e)uEt2wwpZQ3?dEeFSV*I zOWuV{R{Vkeg0}ihqHpNN<|TLg-bMg4<&J{ai+h%9v%>(n-9f!pA=84m`` zzS7IGgRpm1XQ6^}6~~LXq+cRZqB@>4AEaNPQwDK1C^D1re(-UQjjHO zP-9Vfy2IqACIWHMm`lx^9dpaLus%QvI|xf_5^qz>vfEVlH^y6mL0S2`oGu3a!yHR9 zwb$Mw+s@uoV@3-1SMW?dzNr4~vcmnN@*Iym;j5D4QK6_g%JsJp3l|Cx`TL9%u0^o; zAlIqI2YD`U@d10*f};8cqK7|jl(QuR)nLf1LxM0R(*~vz;iNo54d7=p>xmNm91`>a zg4gK-#I!!M0Vyq}VwfTRw63&)&g1(CwCV!FYa*@h8Nk72IE zz18KsC9&5PTRBPtMElkidvla&poGktDdrdsbgZM?(v%}-fMKNKJeEeVcxxt^5m~lO zKE}`GXHF8a1?bX=EUT{%d9j!$@T4P3%yG=?W44KIB5u zS8MC1nB|ID&VV6r^{5f$O{vzDNp4x?=#clMwbJuzpDnh{kUc`{BT!*M&Ioc{VfHqV zU2f*- zkqXO-1E@F<3S=w3z?d{phTQ!4vevE55UpyFo~C%5M7wJTlRYMg;#x}_kC?>h6H0%L zI%gyhDJUz96q{wm9yw6ZrRI@mBghr%%^Qb8-k!DaJP#wgMi>c2) zvlA|&K%gEs`x@wlYS%5asTbmJEdJ14#nJftO5PuhL{l~#s8*z4W+@4T%e+u^EetQ1 zX@KHWghJqdq8Q=)Vh_+afrc=tQxA{@o&_cK{udhHs=Mx4I0@IrYMek>9E?!6a7i22 zt}Q&Mj@wXyZqe1bpGT8yaPnvt8XlY>%noD>pO0jNlQ~szwo`Cok3$1fh=NmDR~Rbf z2%HuU6_oO^3Oy;_ri=?w1aq_&u2os88p;p3q3Bj~P1So+{&~r=y78F%sIJK6$HQ*~ zW%JfuetcP#@zv>|9dF7)VYK9~*j5S9V-kJwHd2nwYye$tVQ`9ueA&m9Y0Li9z zM6667AWTPW7cMMC^Z>hpc4jAu3wkpB{Pbop#PbRZ9U4zxhN{3}F!=~>kf!s>JR^~tc}c%DK3cmF*KxCh9`E@D zG~c0rnFY9zE1VJydVD#W9s4?*U+oS0$~G1Gs(3?f)xXMDcUJuaRp~R3T@0zk9$H|} z40%G<>xz6F+X0!4eYC{AbzYSrZ$nV!^*D~?sEpLv`T#|Z zyC_1llIPvc5M{YA1)W;>(U@C=q3RH7XDO)Gy|m3Aw=*1a1JvTw5U7hlGzM-ocvi(` zPST|NvHV^L1C__$LVK2g-&&iY2f`SmqI}CJnc<)vpcqn;2|OYZ;<_APWQ7K=VP>&e1 zi91Giw`HOE9vfZ_HH<#M9RN=%G`cnN8CsId6X-w%EaLM0M=c9(?!)9Tz|>f5FktFq zE=;a=VRDrVlX)&oRWVFQ#poZ_WIcv1Ko0~wJrKb3_$EDQtQdX^eo)JOCKN$rEd7BxfY7k_qca~Ccl3>@j$&PxT|psNzY>QwQs>X>D8%r32-bSfPcCE)CN+2ceC$1 zmxdM|HR<)R@lrg!3r3Q>X-pK>USe^>(TAZb?>z=ro$R(87o4t5SN||)(=E_$(t$Qn z4G5yTMTh4=-BmOY$6|J4Al6w%U_%s;b*SV!72ifkc)>fJp# zN_f*NsaYs9XU%ViTO+j?W{qphrQgrlvKCq%cAzah-k^`rGq8WAK0v(@eI&5I8s|gV zAd_?lOG`^mz^Z^7;ofX4%wHkvq`ByD@(k)U`Y`a~#0?!IZS?1X9%*aT=}p7wF)9362x^B3t}l)8HDu#l84O! zR^Wd5s*Y9v9?RFoYRHd4J_bh;%>z1M673FxB-({Z(s@b7q*!_tXq4r>oMx3a$d}6r zjOOoGeK)lg{*rQ~MD~b2Kmr+*mnUrJ3h83J{(|`RXE4^f*AD5ki7-e6`Cj!9gX4($ zH3kbQ3@{AgR3P_aS>|*QXqieGRaVtk^ntGf!V*LRhUwgea#iys2XN0J}lb&jsD8Iu_l6n4R;;AH*crU9{Um6JxAk-O~t2l1sj`oG2HC-%UCL z%IAXyCm)29Vv$Zfu~W;FxlwXbBUsKMEb}X7wc)|4>wI9lOoQGB-vln)S4r>d5#|0e z!?_h15nSMnXcuQ66&TrEqa{CH4P^Fmh2lkcve}S@ROXmmCL8ad1Cg`o92>JHy-Ntc z45FNK0rd1w3F9he4;F-;$Rzavf z@j|ROeH1uhG6{ArLKTs^<0O_x!#h;pMpnSfYjb1T;a|NT?6Bz*6pqwkY@_1C3Rup? zD1m0C9C^Y3+bPz%pid3^{+r06?-^V|mJy;4Uh`kKK+srW&PqBbvd18K6R8 z%5*LRTiII6Fw=9u1-FwFuX8!blEdqK2Qc~v=QvjYF`T*JrT$@vBcKcZ5C>c_PTd1& z9B7@D&IBb4r|wrmfJI+^po-|lB6>RC1vOHK*EAXX9@SVC=S-=$<3}E}`w<>`><&t0 z0HII#_1JA7lwkU!;FRAr!R;Bsn;e(Ejx<2GK}26qAOg!BXn`U*n9?1}Z2l^~nh>=>=qHoENRObc=ovboIu;^Pd#AT45sQ**D!*8ON+nuU6 zoEuT74}BHOfvMFlKiZl?iVAxjG^&+;8VO>7%UGltUE)w1Vj5Cy$eQZ|q@5q%IAAp` zgL;;%+Y;^ItwY_0TcJ@hC15$vgTrY>f&;!O$Jmj&sA*qh+GXo5nilcc7kL;e2!e<| zP;0Q-pvpk-BA+rM6!;czgfTtW{{*I+X^d!Ah8Qtuj?!q{@Ml1y*wblGF6yC6`ektW ztE6`+)BRyl5(EWXTh@^ zGZ-=;8e63@ZpNywnyK$&I+bSw%2>2l!3ys)aAel5S_;K8EH$7+`_45n;>DQne^%oEKf$8w6Ti{+U2G8J~elB1+lYqz< z`y0)Ew5t~IR*xC>ioe(SF^Z`(=+s?^hx{*47?!LLH`wFBR`s>4k>4fj%nW)o#-N`d zF9WBURb$e>C;hNgqa3bZA0S?7!F?oz#*X6<4>L%22eCz8=pc416#fku-EQKhd#YYi zWu$)!LV<0>egj(O0U%yG_7>nm9l#p^yuR3P@vy6I*PREEuYVPeGbc?goBUPy(frK% z47ur_A!pJc^=wR+ko?Y;DK$ykr_3&!2e| z393F)QnC8?M(WBGQnv1LUM$$0)`ZOg;@0ihI}qSJmaR((#9&3fJqq<5$@TS8efq#v zFx$fW%)dl|YTa99r5^`0$)MMIEawTp7-X2q>pV$9NpG(}2FZed&II2i9C5Eb7kya6 zYaEgEuSh~9jX}%rJWa4M@Bki?@C*?G*LX9}0>HK3l#GqTdmOCs%W-8jeg%!5wuuFi z6G4K~W=J(kc2$3x1r+H@Gu(92J&Sm8&_bvaNS{5 z(fdXh!7hxuuLkX% zG^G53hTq`0z;{sJg!SoHAr;MV1Z88CAh-^2=`>psr&yBU?3bCf#Q19o*Ax6YVEVQW zRpWp{Z>-WQ5*D8py2uzhFRbcxM;-JjHQbo#52?(UH2SK4*TvbP;%bO<=TIykFkYa; z`ZHKn(Rcx^)p$mB9?fx!eobQnaZudCI*wa?fQnlshJz8nUtJ)d=OxD%)nNL^0)fc1 zjqDeu76DSCY*;!z=-`R zTa8>UZpX6aFQ6H+|Rs~ zX8NZV<#3WR1-r2aNE#}Tbw*LAfjT4Djp|r5e}r5!_A#=tmh?kenBlK~3uA#HHiCB^ zwTXj#KiqE&KzF|bt1vQDqt3qqLi_v;kJu+jreeuRws@Vt1CtrNG6nB{QU2qyUr)~V zYlNCQgDe%Zmdk!UCjBXRX_Zd0^a1K4a+OYTsq_0xWP|LvCU@$ZQi;J6k`Vg`$uLf( zj%@Nxy`a z`J9TthT>X{-U+4ed0;H!toxBg4fAirl3OKFUX_@?`q=pz-C*KVfWPhaHMKR3wKM8x z5XHlL*xy0$pjK8@c)qw*&HZ2S={#H$7J=@+wn4;EYE$DGde6a1ciOmVUJGxV~=E52=`Eb%8! zKeMkv?ox)6oQ63K`u7xC;(V5{xQO71OxasT@cZFUAZJSSDc_(qK(rF z^gV?qit(s%y*Ld9Y-ZRJv$@pj3ew>wAC-EvkkSS&^{$uTC6E@xTM;B}Z}?E#5`PZt z#`objc_@93Dbs>P?#y2uGuUY4?xM4JLhR6J{z!Fc{4;K5y4zZ^Y@ADQ>sl8#MCjz8- zgniW&B%f>mk0s_=q+yLoly@VP9>Y8{iW>r!xVD^l&SVdK$owa zl)f{HI2Q&E8EXlTP4LO=bG?EzIfeCq(YT*91SiGAgOngP=)WTI*{GrLEQYDezZ)J3 zF9b#rR3sLKhQiB$S>kHo7kh@nRL;lPd!r@hXYBBR!~)2NOmNNvRLIyvCSjw|l9acv zlCUGNjwS4B#%5qf^P%>Wfem4$vw*R8QEmwH&tk@QdkLG5bvSW`P{R<;=2x(kb6LtF zoM)5F2N-Kcd=ZvmY^B)3*sZL~TCtt66`Yq88J4*o*pN6?oXdH)!xQtwpxDFMi}1ue z@eOekV^$$y=Zhb+m&zEsL_E#dp9?7OQh}8kYCpY*u8DS!mEk7r8d&X#)Oc*Id%vG)cu@3g>v+ zmUtd?OI$pf(%&^{pV-DahR+8)Srl26J`M?!#UBfoc&Cg1EI1Al?q;6X%c<0# zyemNYG1u}SbePP!lf?s8i+8fPkbNlOwM+>ZCxZT(mpCOw!X$ID_=_M9Ul`c{AJ&$3 zfRpH&_z@&)qT1>L{V=l^=`AJHf|nHc0p1>1a!}6aP$RX)sYv$+C?!r!wCGE`rudJ@ zAWD6QJ+K?zm@FLo>!6$uyVeYT3-mREr+~g@a5Ly@1``#O-lkD{oR`uG7Nu7*Y1sSlYG#GvsWa_5fy z5b2fNQcGZ|CK4?3gTP0ihv98aj4t~tQtB6)IG!!~EAwj3ee~4 zlvY+yYK0N8C`IjcL&1qimxL*OyYxh+leFHlGeP-Gqx3_h)5ZN_ydA-4IT1P>1N|q6 zXDWM<4jMOkRz@*6iZe!671JEFHjCBUn%JDhVi=3IWw9f${@NumjBg&yNvGxIdBr&@ z?@FvhZE=ypmIr3pv=XAv&kGk;&ar(GVQfJjw!*^9lFcg%HUfJhN(8B=Prwku#D5t} zP;P?4{yKWO?H5NXtkh_+17eB7s*RKE0x`tcY2p^I2j4LIk;2|E)9}xKC~T)UV~^pN zkAyf)42^BX-CXn#s_!(hma(}C+sfD`#)iaW_UU$|=*7~VG<(f+jy+ynz}OJHdjw8; ze|H$=T`Yd(xyU|5l+&`3vG3T2idYuA+MXyjWw9IW$zls*XV`a+X~bQ9zrxxX`!c^@ZAD;$DUQ)ZAwuCLWfUxXp7Hu!{~SJAuKTl)c`bE;@%>|tP~zy>8J zM{JWYCqBTQ2Qett1&+f?=#o0ZD6&4W8^rgsnC6=)ZqH)2 z?Da)-9O^i|P%YAFa zdd8^s6MgH%ki@vYlf?CT<<^T|X3ITlt{1Q5mD?yj&MWs7fi9V?uT@N8jOyFyYZXT^ zChLof6C}pdrJ5=5l z@1y1xagNF}N|U~m#XTyI{CTn%^@vT3ohC}OI^Q<2VV2bTG5aiEN^F-H zWX|!W#g&YmA)dz`uwUH3*pLWdUDq!jJyO`Pz2{lnKwtS_YI2C zjGd19ZUMG~F^ZQvd_&?)i9xgbe5VQDJSz7s@s{>;-#0`BV?*K%?HS+MV&?*uDO!vF z!*{;8Q)2cVrEmH6i2D@Qgb{j=cvxY}$9jN0%^219zVAYDLla3M>|@`z#p??R+aoS9 zgZ}S{Rf{-}WA`d?fx=3(MZT-W%}Xdxw&u0sd4=6Ei+r{+?d#UtM^Dc3p!f4*STRfq#fM=uc$Kp+e{k?pi|2|=^U|qzC z#&P}!MU%p2q4tNxT7}(LeuDpDF_^{H`yUZEE9~&{g#S_ToWj0gbon0>?eKKGpxCsLx_w^S>mTB__xd{~& z5;Gb&BwNE-rsj)jpQ^mWeKmn8*}M(mnSq)t79CR_I6|vfBWu47HPmWXFg7F}GL8<^ zX!@~Fo(1?scq?kGGqFfEG}nfpYe*3F#1@x59x$DXe3V(e|-Ld-|gwXbERtO`um zzNhkNWjsr}Ugp`q#QJ)ccB{&xb@D9j?rb>?*e_+CHYv0&FiZQ-EY==4N^4!~>ZysN zwar zuU*R6khm}M-9VFOpG2HP;_>q91B<}Zk2hF(wc&})}XMXN{%jQ*Y+{?w)Tgjrh*RbZiUgBwnKYDVWaG0k(b{_ zom$~0k}21iom%-YY&hp6&N~gSv8^iT)M^-`$eLqs(WWzYhFw~|0N5Of!4n$_wrDMi zlj7`TtwUiHSto0!XE}G7bPBGC877@|KUbQAYl{eW3Mt)+lXMq;V>H2sfgk5imAUlz za+1&)q&t_ZBXn9m8L3CSQ$nZUCSWg43FrjtmN>u7r6|SkRkF@f&kYq+>K#assV>fBPMP~5%F<~DrKG0|Kgax1ldb^K zH-t#CK8orsLh9C=PpL*JUCf3wLp%p*rjVY=ryoekae4&*kRwh%M#`B9nV97u(_)!k z#Yvj$;vM+ezz=*-jjwTANIL1PiD#Ko!!}B~^y?}lnk87I=ZHSD*1>tv6Rz2LtC%UG4;3AF;93Q~>vntZwD zUz9r^HsW>&z1Z!))Ms_oXQhVu-p=<-2CrIzwk}?NSKG$!kNBkzi4(us$KwfcdYIE0$ znJ@n%w5iFO98CU;tog@?XY_Z(yeZ;o^4I~H-Adtj+9C`t`+C-DY%!D@#@eq&6XMy4oCEOO5fuf1GVY|-!hSD?NZ{v72>3lrFC4vJ!4%ehK3`5t2{f5nEazQ<_h8aV%Oy&aJxmX?BDe zP9YwhM_`=ZbL;2N#a~qWweTCpAD$)2=bAVc5v2?1`Evl9;&h}QF&jR|EpbFg%*bez zn#d?U5SIGn=o;=9NwUM<_yhN1Ip)azCAA$iY;ip9;78+qg0CYz7r%#d8U9M}HyXeF zQi1<&!XFbRDO0rY9NRiB!WrjnbDjO1ClmiFRe#1cr+^jp3I}=oI)YF;MP-z64(;wv;y_ zU0irH*1mU*nve8nqZWa(94C_{ET@9giJT58%6nP|ESQdS+=+tVi42!8tm&jfHFH*j zath$>g}YHNP6s&k;5PB&u{SZi4=L4NB0d{K?`Lc;{1H-;3@;Ynhttsy%b!46KK2>h zhtdjlBGYFxeKylen9{_QCZ<%doQa%Pv$SgQ{n9tYQgHr7w1Cs6wJ_&d;`D-`b{X1n zKCE7e{mf71SlnH}PE zPETc@oXRzx&hY6BpUR#*hdp@?`{#6~T*Q=%m_m|Q>Q}JLD_GhUEa3{~+{>JMnez&k zS;1*sPnLaGPwKbZ*XrB!J%Jl_^4q=o%`E3;mUA;+X!!`5zgSsd+{tvL6=MLC4~N9m zNX)p8=?`;ypLiqCfs-4u>pt;t(G!^esJ$L$O`c#)o?uPl`p@hi7&o(?H*-|nEOrsOiHf6v#nHdjQOTqxSD($~-q}ztGD(d$c#a z;{gA@yD zquHF^5hVC*q_@d&hU?v_)fOHnsx|6IJGI?7VXj79r$B!iPo81P&uF)np8;tV-bPS9 zwJ5z7t?-PNL0ZC|-=oou?^g43(C=OEz&?FFP4 z>8~KYRR1;7y$s*L@Xh+0pzPD%MX7uA50T!dQ!NkZkAeOub3VbGPlKmM1jH*yi^UrS zHTcfo2S^VUfx;Sm_pb!$G%*qBQQ|nH3&inAj}xs(SBo^#^-OOU-vHb$-V0K?tccRv zLrr2UBtK-3{6oz&(rY<=$Q%G1tt9$fPG^aeamM{k5z(e;CunWjE^SCVTf0!ZR=Zid zL;Jb*qV{{OLO)bLTt7nJsJH81)z8-V=$GjG^au6l^uOs*W2!ORSY)g=HW}SU+BnNN z&-j*csd1}uzwxZ`p7E(+nn5#aR+}f73G*KFx8^@g(=)@9_MGZD$MX}y5{+6GkzUPr?e|F#K1AS-u+Uh{r2Cu#0`X zGKus7s|V?(U<&CyV<_FsX%naCb9xG=Eu3DUZwC*&g7mH8L8PMW45aDebC50xU5GSN zatTsz>6J)F1?UR^*HutmcY3JabBeD=`mGWwD|3Hccnjd~vL+4s?SP+({0QmYrT0-f zmbB8XpCSE6=`WDR3!X$eF7hnWJ3TKUT~+cL(rpzZ?fR9VveG(f^%3R6t=6&XG2lr* zyr?6(yhsZ`)8V}U(kR{%qi-aQLV5^%tRvovkxs;2xem{kA)O2#>+tPZq*d@d{hI~j zk=CJ{j<+QbMYjWZqnt`6x|L@|DB6=NfXuucZ9W))QyLm`&N7U=$4zUpFome^Q_?}QR(&x|* zbj&2nkp4T~O4G%QSo`VXCG-p(Z&jUu6z_T>)wOj<4Q)May$5krF0RwUh@Ta(Vzbk3I7#1MPy>zSQSqPZ@SrBl+YTgRV5n z|A*&Mw77uheP}N~jSgt5LU_Lf?NkZ>N6}JI@eS=Z?ECPUJ!e*H>x|Y~F?&@a-mw7x z4BP7DuEd-+NnG6*Z{ND9PAqV`x)SYuNv8)$^8%;4H=atQ0546Z`|#+h6Y-9YRGlCp z%{_h7>P3qqpG`?F7fhEdaG>wsIZlUQ7Vp&t8i`7kMXlbIYu70LC zF_r8~D0p+Cul0nMMKeivF?*TQ(chJrBZ#^@-knJI#@iEkr?)2$PPaR~L|fSv@9T6@ z-2hkbO!p06?#j+NEnTxX(UV9aOA5<+GnbL*>1e_~)Ryjxr}_x!z+cmetxK1$ zZf$pZ(tWM)Z)|?`cmECEm5!fp@laH+QfTq(jyuQfV|7XiW|^ikR2YAr|(a zaXQg3?OpvHi4JPk{_dXiFj{w_Z;R8hq8AEFdGq@F99BQx2g>S1-*5s2L$WK8%CW>z zpmj4D%q6l7(VFZK+!6%zq$#CFTig#Io=zva+q!l#vY9B9wQM_pZc3UGoynfWqGY10 zLv$|c@9LW0p9DxuFiND=lRdVub=ivLD_UFeFX<(E$O-9Icvmcl_xAOt5*^1Sfl#zE zuzF`VJd;YK(~NGVOc0i_7sP6(Kh>U4h}1zL3%Z=Nn?YJMr=iD+PL)gUQ{du6pMnxS zeW{%aZtqW}fVXzbdZg%V_zISuLr+NK9rheb(sLLpSRke4Xv^TtL~2!{Gl5##6Ecz( zk{epniEaH%gO$=eu?R*h5Y4Ng=JdRD?+%5e*$-gsN+7%v0^KYf-<%L#@t)271fZO> zOcq!LI$qI0lP&KjOQK(|-r80lPmPGs35yb@z9Z4e3ujuSV z^K%W4Hv6G35>*45OFulkzbEra0=DBM-~csZVv02<0hvWM-NhWch)~5jG+!C5?N% z1Z7K6dX-U zM*1jE&Fr}uEQPKuXUe8zd~=VJ?n}0(Yh=u`#){{%-7bx zc{6pz91Z5KNv4y-X!F!e)ROGWXQlB8Q$<$XLU(e>k=&9LwQBl3Fq7umRCk<~QW!qu zB%R~Jk|~iwMp~)W;^gucb;UQQbEuqmSY0P4skhrc!cNZ(g_J#ljVplPG6kILn(^C0LCD#=~l~S zEaTjUSO?`ok;%=FmW+3ik`%zLX@Z)iikP_E4$-m&k=TKW8Otj05rCnoLw?~5%U=b+ zeg$>#v_O3A6vG725JOW0k1h<5MF>|(u% zei$JsEBhheX*)T$BE~S*zEuogg0!ZY*xE*;gF?9DDHrFu6ptS~Dt$o~##G5e)~Th5 zB=Gnt!8WQ#tV|@fV(oxrX<|nb6DkdqJhP4%ASEqtDZU`tmA5j_UzKw!%Y5SmXi=K*cnC@55wH&D@i8xhOgbUeCHnD4{Txl3h<9^4(paTXp1c$+ zCsP;6u{UG;!OhM926?QO5fXB=71aLo+=V@hclR!|)ROZ1yG1*#lU4&**n@=qO_Vec z=HY}eW+b3Fy(HPuk?3)kguGPlNo>YY+L}zaZjqTJsfB`yWg_(Bv=x#R=`0B^#uA3v zR4`?!vbW6NDG7bdL+!i*BTlkMEKBY{O0^(ZpDmrm-;NJb#38bKOdU83*9&GD!=)BZs?jbn}jS2BoqQ${n z+>7QHG)SUZ$z>GPE{O5W1(#zule>1sBO8-TP-%(sE>)mdKANNwSPF=?lxXh8Muh#n z1ceeQftjxz`;>gr;zVCQ>IU{ISpb8Cf|_NJD-5NE;pG4M$sQbOxCM6(L$^qAsS#44 z54N&UY?$;c6}3olSqk)#Lr<2XN{*nS{F2`Rxn z=^%7B>{WZFMvTY2CcwJOrRVUh(lk(=(1V)0c4AzU3X1-b1a%-H&k$B8QrnYgGqu1} zWri8egT8DHm7Q&!;q1c)Z?Q}@kzzW9&XdR|lqR~9ee`s9vuhGP9Zrh&XEdxzmx-Eo zI1VX4pmmba1J}kPDGygDy3-^=HG%`n)9z@B1C}&*47LB48QFf2&P~;6w+gl3s^Jx) z)9ZR_WVSmcXY)5BR%JA#MVglnX*4A*h0!P&SrW2tcNCM@$j!2(@_?3OWKWKuQCsA1 zs?$6f^W>c?NGf3@$Pu=yAyihQPN!&gbyemiP}+5^!pOHgGN#3eIKXgDNmCJaqCf-E zqArbt3Odc=4O*TNQZ3eWxWS5)GfiegTa}aDYNpA|w1~T#u~tRkqnZU>@%}V&`{~@K zwOwI+dX-%yr$x5U;&mx>l<2mRJ4#~( z%}0!C_C$Y6?aXeSvcU~;YW7QutcMX5X(8R($}q)EZmF(9E4zzKV{O-+pUsWliVlqP zr!;$MUOUYP!r=oWX{+ilw1Gg?n7er4oTlSfp4cSUYISC|(n|_22k`Vm?Kfaa6_vj-Na-U;S)Lx5Y*Is93wYMjAAIsQ;a<= zabEo}i|SBZC`YA;N#Ym+YH{EQtUgr?3AA`0g$f;f@Gv-Iei9Q3^)|X9ktY@-Xv^X| zumPgeXpDj>UdEw?wL>6|#m&O<>*DD{?gVcr$E8^7FVIj=t zH`uo3$2!m9X{`9D-*RM&E~Ul-%xF>}8E!c|JCEf^GX8S-@L0;x=_E>G9EJ+a_VFBJ zUUNyJBX!~B3~wbQ^hFl}92(dNrVtBsvO)J)xyb_XGG}{YIc^Z#3ATmcwo|CTp^H+V zZB60Xjei}6yxNR)%?`PpV+f5wrKM|RrXpp%GmJ`xO9Btd66}El_Jc(8Y?g$sIPQhI z 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 diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Mdb.dll.meta b/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Mdb.dll.meta deleted file mode 100644 index df960a12..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Mdb.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: 226114ec6853e9b4694b3f0a48aa41fc -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Pdb.dll b/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.Pdb.dll deleted file mode 100644 index eee6eb919696c25fafa3516635362612e3d03f27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87552 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 z 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 z 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 diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.dll.meta b/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.dll.meta deleted file mode 100644 index b18c4397..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/Plugins/Unity.Cecil.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: cf55851fa2120e0489592be4bbd7f3a8 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/jsb.editor.hotfix.asmdef b/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/jsb.editor.hotfix.asmdef deleted file mode 100644 index 2ee3ba5b..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/jsb.editor.hotfix.asmdef +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "jsb.editor.hotfix", - "rootNamespace": "", - "references": [ - "GUID:118b4ca3a1852354bac065cf952c1e85", - "GUID:eda0539582471264796e5affb41fe082", - "GUID:2746379d15af6e84cbeb433df77dd384", - "GUID:ac4126d60783f3d4a98aee6be9a997aa", - "GUID:595d45be140461240b6b4358dc45f2c0" - ], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [], - "allowUnsafeCode": true, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [ - "!REACT_QUICKJS_ORIGINAL", - "!REACT_DISABLE_QUICKJS", - "!REACT_EXCLUDE_QUICKJS" - ], - "versionDefines": [ - { - "name": "Unity", - "expression": "", - "define": "JSB_RUNTIME_REFLECT_BINDING" - }, - { - "name": "Unity", - "expression": "", - "define": "JSB_UNITYLESS" - } - ], - "noEngineReferences": false -} \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/jsb.editor.hotfix.asmdef.meta b/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/jsb.editor.hotfix.asmdef.meta deleted file mode 100644 index 5bd73441..00000000 --- a/unity/quickjs/Runtime/Source/Unity/Hotfix/Editor/jsb.editor.hotfix.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a6213e1ed98b428479613d08aa859f3f -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/JSBehaviour.cs b/unity/quickjs/Runtime/Source/Unity/JSBehaviour.cs deleted file mode 100644 index 27c4142d..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSBehaviour.cs +++ /dev/null @@ -1,689 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using Native; - using UnityEngine; - using UnityEngine.Serialization; - - public class JSBehaviour : MonoBehaviour, ISerializationCallbackReceiver, IScriptEditorSupport, IScriptInstancedObject, Utils.IObjectCollectionEntry - { - // 在编辑器运行时下与 js 脚本建立链接关系 - [SerializeField] - [FormerlySerializedAs("scriptRef")] - private JSScriptRef _scriptRef; - - public JSScriptRef scriptRef { get { return _scriptRef; } set { _scriptRef = value; } } - - [SerializeField] - private JSScriptProperties _properties; - - // internal use only - public JSScriptProperties properties => _properties; - - // unsafe, internal use only - public JSContext ctx => _ctx; - - private bool _isScriptInstanced = false; - - public bool isScriptInstanced => _isScriptInstanced; - -#if UNITY_EDITOR - // self controlled script instance lifetime - private bool _isStandaloneScript = false; - public bool isStandaloneScript => _isStandaloneScript; -#else - public bool isStandaloneScript => true; -#endif - - protected JSContext _ctx = JSContext.Null; - private Utils.ObjectCollection.Handle _handle; - - protected JSValue _this_obj = JSApi.JS_UNDEFINED; - - private bool _startValid; - private JSValue _startFunc = JSApi.JS_UNDEFINED; - - private bool _resetValid; - private JSValue _resetFunc = JSApi.JS_UNDEFINED; - - private bool _onEnableValid; - private JSValue _onEnableFunc = JSApi.JS_UNDEFINED; - - private bool _onDisableValid; - private JSValue _onDisableFunc = JSApi.JS_UNDEFINED; - - private bool _onDestroyValid; - private JSValue _onDestroyFunc = JSApi.JS_UNDEFINED; - - private bool _awakeValid; - private JSValue _awakeFunc = JSApi.JS_UNDEFINED; - - private bool _onBeforeSerializeValid; - private JSValue _onBeforeSerializeFunc = JSApi.JS_UNDEFINED; - - private bool _onAfterDeserializeValid; - private JSValue _onAfterDeserializeFunc = JSApi.JS_UNDEFINED; - - private bool _onBeforeScriptReloadValid; - private JSValue _onBeforeScriptReloadFunc = JSApi.JS_UNDEFINED; - - private bool _onAfterScriptReloadValid; - private JSValue _onAfterScriptReloadFunc = JSApi.JS_UNDEFINED; - -#if UNITY_EDITOR - private bool _onDrawGizmosValid; - private JSValue _onDrawGizmosFunc = JSApi.JS_UNDEFINED; -#endif - - public bool IsValid() - { - return _ctx.IsValid() && !_this_obj.IsNullish(); - } - - public int IsInstanceOf(JSValue ctor) - { - if (!IsValid()) - { - return 0; - } - return JSApi.JS_IsInstanceOf(_ctx, _this_obj, ctor); - } - - public JSValue CloneValue() - { - if (!IsValid()) - { - return JSApi.JS_UNDEFINED; - } - return JSApi.JS_DupValue(_ctx, _this_obj); - } - - public JSValue GetProperty(string key) - { - if (!IsValid()) - { - return JSApi.JS_UNDEFINED; - } - - return JSApi.JS_GetPropertyStr(_ctx, _this_obj, key); - } - - public static bool IsUpdatable(ScriptContext context, JSValue prototype) - { - return prototype.CheckFuncProperty(context, "Update") - || prototype.CheckFuncProperty(context, "LateUpdate") - || prototype.CheckFuncProperty(context, "FixedUpdate"); - } - - // 在 gameObject 上创建一个新的脚本组件实例 - // ctor: js class - public static JSValue SetScriptInstance(GameObject gameObject, JSContext ctx, JSValue ctor, bool execAwake) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - var fullCap = false; - var prototype = JSApi.JS_GetProperty(ctx, ctor, JSApi.JS_ATOM_prototype); - var context = ScriptEngine.GetContext(ctx); - if (!prototype.IsException()) - { - if (context != null) - { - fullCap = IsUpdatable(context, prototype); - } - } - JSApi.JS_FreeValue(ctx, prototype); - var bridge = fullCap ? gameObject.AddComponent() : gameObject.AddComponent(); -#if UNITY_EDITOR - context.TrySetScriptRef(ref bridge._scriptRef, ctor); -#endif - return bridge.SetScriptInstance(ctx, ctor, execAwake); - } - } - - return JSApi.JS_UNDEFINED; - } - - public void SetUnresolvedScriptInstance() - { - _isScriptInstanced = true; - } - - public void ReleaseScriptInstance() - { - _isScriptInstanced = false; - ReleaseJSValues(); - } - - // 在当前 JSBehaviour 实例上创建一个脚本实例并与之绑定 - public JSValue SetScriptInstance(JSContext ctx, JSValue ctor, bool execAwake) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - var objectCache = ScriptEngine.GetObjectCache(ctx); - - // 旧的绑定值释放? - OnUnbindingObject(ctx, _this_obj); - var object_id = objectCache.AddObject(this, false); - var val = JSApi.jsb_construct_bridge_object(ctx, ctor, object_id); - if (val.IsException()) - { - objectCache.RemoveObject(object_id); - SetUnresolvedScriptInstance(); - } - else - { - objectCache.AddJSValue(this, val); - this._SetScriptInstance(ctx, val, execAwake); - } - - return val; - } - } - - SetUnresolvedScriptInstance(); - return JSApi.JS_UNDEFINED; - } - - private void _SetScriptInstance(JSContext ctx, JSValue this_obj, bool execAwake) - { - var runtime = ScriptEngine.GetRuntime(ctx); - var context = runtime?.GetContext(ctx); - if (context == null) - { - return; - } - - ReleaseJSValues(); - _ctx = ctx; - runtime.AddManagedObject(this, out _handle); -#if UNITY_EDITOR - context.OnScriptReloading += OnScriptReloading; - context.OnScriptReloaded += OnScriptReloaded; -#endif - - _isScriptInstanced = true; - _this_obj = JSApi.JS_DupValue(ctx, this_obj); - - if (!_this_obj.IsNullish()) - { - this.OnBindingJSFuncs(context); - this._OnScriptingAfterDeserialize(); - if (execAwake) - { - JSScriptableObject._CallJSFunc(context, _this_obj, _awakeFunc); - if (enabled && _onEnableValid) - { - JSScriptableObject._CallJSFunc(context, _this_obj, _onEnableFunc); - } - } - } - } - - protected virtual void OnBindingJSFuncs(ScriptContext context) - { - _onBeforeSerializeFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnBeforeSerialize")); - _onBeforeSerializeValid = JSApi.JS_IsFunction(ctx, _onBeforeSerializeFunc) == 1; - - _onAfterDeserializeFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnAfterDeserialize")); - _onAfterDeserializeValid = JSApi.JS_IsFunction(ctx, _onAfterDeserializeFunc) == 1; - - _onBeforeScriptReloadFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnBeforeScriptReload")); - _onBeforeScriptReloadValid = JSApi.JS_IsFunction(ctx, _onBeforeScriptReloadFunc) == 1; - - _onAfterScriptReloadFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnAfterScriptReload")); - _onAfterScriptReloadValid = JSApi.JS_IsFunction(ctx, _onAfterScriptReloadFunc) == 1; - - _startFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("Start")); - _startValid = JSApi.JS_IsFunction(ctx, _startFunc) == 1; - - _resetFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("Reset")); - _resetValid = JSApi.JS_IsFunction(ctx, _resetFunc) == 1; - - _onEnableFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnEnable")); - _onEnableValid = JSApi.JS_IsFunction(ctx, _onEnableFunc) == 1; - - _onDisableFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnDisable")); - _onDisableValid = JSApi.JS_IsFunction(ctx, _onDisableFunc) == 1; - -#if UNITY_EDITOR - _onDrawGizmosFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnDrawGizmos")); - _onDrawGizmosValid = JSApi.JS_IsFunction(ctx, _onDrawGizmosFunc) == 1; -#endif - - _onDestroyFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnDestroy")); - _onDestroyValid = JSApi.JS_IsFunction(ctx, _onDestroyFunc) == 1; - - _awakeFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("Awake")); - _awakeValid = JSApi.JS_IsFunction(ctx, _awakeFunc) == 1; - - if (Application.isPlaying) - { - if (JSApi.JS_HasProperty(ctx, _this_obj, context.GetAtom("OnBecameVisible")) == 1 - || JSApi.JS_HasProperty(ctx, _this_obj, context.GetAtom("OnBecameInvisible")) == 1) - { - SetupMonoBehaviourCallback(typeof(JSBecameVisibleCallback)); - } - - if (JSApi.JS_HasProperty(ctx, _this_obj, context.GetAtom("OnCollisionEnter")) == 1 - || JSApi.JS_HasProperty(ctx, _this_obj, context.GetAtom("OnCollisionExit")) == 1 - || JSApi.JS_HasProperty(ctx, _this_obj, context.GetAtom("OnCollisionStay")) == 1) - { - SetupMonoBehaviourCallback(typeof(JSCollisionCallback)); - } - - if (JSApi.JS_HasProperty(ctx, _this_obj, context.GetAtom("OnApplicationFocus")) == 1 - || JSApi.JS_HasProperty(ctx, _this_obj, context.GetAtom("OnApplicationPause")) == 1 - || JSApi.JS_HasProperty(ctx, _this_obj, context.GetAtom("OnApplicationQuit")) == 1) - { - SetupMonoBehaviourCallback(typeof(JSApplicationCallback)); - } - } - } - - public void SetupMonoBehaviourCallback(Type type) - { - if (type != null && type.IsSubclassOf(typeof(MonoBehaviour))) - { - var go = gameObject; - if (go && !go.GetComponent(type)) - { - go.AddComponent(type); - } - } - } - - protected virtual void OnUnbindingJSFuncs() - { - JSApi.JS_FreeValue(_ctx, _startFunc); - _startFunc = JSApi.JS_UNDEFINED; - _startValid = false; - - JSApi.JS_FreeValue(_ctx, _resetFunc); - _resetFunc = JSApi.JS_UNDEFINED; - _resetValid = false; - - JSApi.JS_FreeValue(_ctx, _onEnableFunc); - _onEnableFunc = JSApi.JS_UNDEFINED; - _onEnableValid = false; - - JSApi.JS_FreeValue(_ctx, _onDisableFunc); - _onDisableFunc = JSApi.JS_UNDEFINED; - _onDisableValid = false; - -#if UNITY_EDITOR - - JSApi.JS_FreeValue(_ctx, _onDrawGizmosFunc); - _onDrawGizmosFunc = JSApi.JS_UNDEFINED; - _onDrawGizmosValid = false; -#endif - - JSApi.JS_FreeValue(_ctx, _onDestroyFunc); - _onDestroyFunc = JSApi.JS_UNDEFINED; - _onDestroyValid = false; - - JSApi.JS_FreeValue(_ctx, _awakeFunc); - _awakeFunc = JSApi.JS_UNDEFINED; - _awakeValid = false; - - JSApi.JS_FreeValue(_ctx, _onBeforeSerializeFunc); - _onBeforeSerializeFunc = JSApi.JS_UNDEFINED; - _onBeforeSerializeValid = false; - - JSApi.JS_FreeValue(_ctx, _onAfterDeserializeFunc); - _onAfterDeserializeFunc = JSApi.JS_UNDEFINED; - _onAfterDeserializeValid = false; - - JSApi.JS_FreeValue(_ctx, _onBeforeScriptReloadFunc); - _onBeforeScriptReloadFunc = JSApi.JS_UNDEFINED; - _onBeforeScriptReloadValid = false; - - JSApi.JS_FreeValue(_ctx, _onAfterScriptReloadFunc); - _onAfterScriptReloadFunc = JSApi.JS_UNDEFINED; - _onAfterScriptReloadValid = false; - } - - public static void Dispatch(GameObject gameObject, string funcName) - { - if (gameObject) - { - foreach (var comp in gameObject.GetComponents()) - { - comp._Dispatch(funcName); - } - } - } - - public static void Dispatch(GameObject gameObject, string funcName, bool p1) - { - if (gameObject) - { - foreach (var comp in gameObject.GetComponents()) - { - comp._Dispatch(funcName, p1); - } - } - } - - public static void Dispatch(GameObject gameObject, string funcName, object p1) - { - if (gameObject) - { - foreach (var comp in gameObject.GetComponents()) - { - comp._Dispatch(funcName, p1); - } - } - } - - public void _Dispatch(string funcName) - { - if (!_this_obj.IsNullish()) - { - var context = ScriptEngine.GetContext(_ctx); - var atom = context.GetAtom(funcName); - if (JSApi.JS_HasProperty(_ctx, _this_obj, atom) == 1) - { - var rval = JSApi.JS_Invoke(_ctx, _this_obj, atom); - if (rval.IsException()) - { - _ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(_ctx, rval); - } - } - } - } - - public unsafe void _Dispatch(string funcName, bool p1) - { - if (!_this_obj.IsNullish()) - { - var context = ScriptEngine.GetContext(_ctx); - var atom = context.GetAtom(funcName); - if (JSApi.JS_HasProperty(_ctx, _this_obj, atom) == 1) - { - var argv = stackalloc[] { Binding.Values.js_push_primitive(_ctx, p1) }; - var rval = JSApi.JS_Invoke(_ctx, _this_obj, atom, 1, argv); - if (rval.IsException()) - { - _ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(_ctx, rval); - } - JSApi.JS_FreeValue(_ctx, argv[0]); - } - } - } - - public unsafe void _Dispatch(string funcName, object p1) - { - if (!_this_obj.IsNullish()) - { - var context = ScriptEngine.GetContext(_ctx); - var atom = context.GetAtom(funcName); - if (JSApi.JS_HasProperty(_ctx, _this_obj, atom) == 1) - { - var argv = stackalloc[] { Binding.Values.js_push_var(_ctx, p1) }; - var rval = JSApi.JS_Invoke(_ctx, _this_obj, atom, 1, argv); - if (rval.IsException()) - { - _ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(_ctx, rval); - } - JSApi.JS_FreeValue(_ctx, argv[0]); - } - } - } - - #region IObjectCollectionEntry implementation - public void OnCollectionReleased() - { - // it's dangerous, more protection are required during the process of context-destroying - if (enabled) - { - OnDisable(); - } - OnDestroy(); - } - #endregion - -#if UNITY_EDITOR - private void OnScriptReloading(ScriptContext context, string resolved_id) - { - if (context.CheckModuleId(_scriptRef, resolved_id)) - { - if (_onBeforeScriptReloadValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onBeforeScriptReloadFunc); - } - } - } - - private void OnScriptReloaded(ScriptContext context, string resolved_id) - { - if (context.CheckModuleId(_scriptRef, resolved_id)) - { - if (!_this_obj.IsNullish()) - { - JSValue newClass; - if (context.LoadModuleCacheExports(resolved_id, _scriptRef.className, out newClass)) - { - var prototype = JSApi.JS_GetProperty(context, newClass, context.GetAtom("prototype")); - - if (prototype.IsObject()) - { - OnUnbindingJSFuncs(); - JSApi.JS_SetPrototype(context, _this_obj, prototype); - OnBindingJSFuncs(context); - - if (_onAfterScriptReloadValid) - { - JSScriptableObject._CallJSFunc(context, _this_obj, _onAfterScriptReloadFunc); - } - } - - JSApi.JS_FreeValue(context, prototype); - JSApi.JS_FreeValue(context, newClass); - } - } - } - } -#endif - - void OnUnbindingObject(JSContext ctx, JSValue this_obj) - { - var payload = JSApi.JSB_FreePayload(ctx, this_obj); - if (payload.type_id == BridgeObjectType.ObjectRef) - { - try - { - ScriptEngine.GetObjectCache(ctx).RemoveObject(payload.value); - } - catch (Exception exception) - { - ScriptEngine.GetLogger(ctx)?.WriteException(exception); - } - } - } - - public void ReleaseJSValues() - { - if (!_this_obj.IsNullish()) - { - OnUnbindingObject(_ctx, _this_obj); - OnUnbindingJSFuncs(); - JSApi.JS_FreeValue(_ctx, _this_obj); - _this_obj = JSApi.JS_UNDEFINED; - } - - _isScriptInstanced = false; - var runtime = ScriptEngine.GetRuntime(_ctx); - var context = runtime?.GetContext(_ctx); - _ctx = JSContext.Null; - - if (context != null) - { - runtime.RemoveManagedObject(_handle); -#if UNITY_EDITOR - context.OnScriptReloading -= OnScriptReloading; - context.OnScriptReloaded -= OnScriptReloaded; -#endif - } - } - - void Awake() - { -#if UNITY_EDITOR - _isStandaloneScript = true; -#endif - CreateScriptInstance(); - // _OnScriptingAfterDeserialize(); - - if (_awakeValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _awakeFunc); - } - } - - void Start() - { - if (_startValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _startFunc); - } - } - - public void Reset() - { - if (_resetValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _resetFunc); - } - } - - void OnEnable() - { - if (_onEnableValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onEnableFunc); - } - } - - void OnDisable() - { - if (_onDisableValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onDisableFunc); - } - -#if UNITY_EDITOR - if (UnityEditor.EditorApplication.isCompiling) - { - ReleaseJSValues(); - } -#endif - } - -#if UNITY_EDITOR - void OnDrawGizmos() - { - if (_onDrawGizmosValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onDrawGizmosFunc); - } - } -#endif - - void OnDestroy() - { - if (_onDestroyValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onDestroyFunc); - } - ReleaseJSValues(); - } - - public void OnBeforeSerialize() - { - if (_onBeforeSerializeValid) - { - JSScriptableObject.ExecOnBeforeSerialize(ref _properties, _ctx, _this_obj, _onBeforeSerializeFunc); - } - } - - public void OnAfterDeserialize() - { - _OnScriptingAfterDeserialize(); - } - - public void _OnScriptingAfterDeserialize() - { - if (_onAfterDeserializeValid) - { - JSScriptableObject.ExecOnAfterDeserialize(ref _properties, _ctx, _this_obj, _onAfterDeserializeFunc); - } - } - - // 通过 scriptRef 还原脚本绑定关系 - public bool CreateScriptInstance() - { - if (!_isScriptInstanced) - { - if (!string.IsNullOrEmpty(_scriptRef.modulePath) && !string.IsNullOrEmpty(_scriptRef.className)) - { - var runtime = ScriptEngine.GetRuntime(); - if (runtime != null && runtime.isInitialized) - { - var context = runtime.GetMainContext(); - if (context != null) - { - var ctx = (JSContext)context; - var snippet = $"require('{_scriptRef.modulePath}')['{_scriptRef.className}']"; - var bytes = System.Text.Encoding.UTF8.GetBytes(snippet); - var typeValue = ScriptRuntime.EvalSource(ctx, bytes, _scriptRef.sourceFile, false); - if (JSApi.JS_IsException(typeValue)) - { - var ex = ctx.GetExceptionString(); - Debug.LogError(ex); - SetUnresolvedScriptInstance(); - } - else - { - var instValue = SetScriptInstance(ctx, typeValue, false); - JSApi.JS_FreeValue(ctx, instValue); - JSApi.JS_FreeValue(ctx, typeValue); - } - } - } - else - { - Debug.LogError("script runtime not ready"); - } - } - else - { - SetUnresolvedScriptInstance(); - } - } - - return _isScriptInstanced; - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/JSBehaviour.cs.meta b/unity/quickjs/Runtime/Source/Unity/JSBehaviour.cs.meta deleted file mode 100644 index 100f0a5c..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSBehaviour.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e8f8ea57c07f0ad4fa78fb459ef8f2d5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/JSBehaviourFull.cs b/unity/quickjs/Runtime/Source/Unity/JSBehaviourFull.cs deleted file mode 100644 index ba916b4a..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSBehaviourFull.cs +++ /dev/null @@ -1,104 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using Native; - using UnityEngine; - using UnityEngine.Serialization; - - public class JSBehaviourFull : JSBehaviour - { - private bool _updateValid; - private JSValue _updateFunc = JSApi.JS_UNDEFINED; - - private bool _lateUpdateValid; - private JSValue _lateUpdateFunc = JSApi.JS_UNDEFINED; - - private bool _fixedUpdateValid; - private JSValue _fixedUpdateFunc = JSApi.JS_UNDEFINED; - - protected override void OnBindingJSFuncs(ScriptContext context) - { - base.OnBindingJSFuncs(context); - - var ctx = (JSContext)context; - - _updateFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("Update")); - _updateValid = JSApi.JS_IsFunction(ctx, _updateFunc) == 1; - - _lateUpdateFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("LateUpdate")); - _lateUpdateValid = JSApi.JS_IsFunction(ctx, _lateUpdateFunc) == 1; - - _fixedUpdateFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("FixedUpdate")); - _fixedUpdateValid = JSApi.JS_IsFunction(ctx, _fixedUpdateFunc) == 1; - } - - protected override void OnUnbindingJSFuncs() - { - base.OnUnbindingJSFuncs(); - - JSApi.JS_FreeValue(_ctx, _updateFunc); - _updateFunc = JSApi.JS_UNDEFINED; - _updateValid = false; - - JSApi.JS_FreeValue(_ctx, _lateUpdateFunc); - _lateUpdateFunc = JSApi.JS_UNDEFINED; - _lateUpdateValid = false; - - JSApi.JS_FreeValue(_ctx, _fixedUpdateFunc); - _fixedUpdateFunc = JSApi.JS_UNDEFINED; - _fixedUpdateValid = false; - } - - void Update() - { - if (_updateValid) - { - var rval = JSApi.JS_Call(_ctx, _updateFunc, _this_obj); - if (rval.IsException()) - { - _ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(_ctx, rval); - } - } - } - - void LateUpdate() - { - if (_lateUpdateValid) - { - var rval = JSApi.JS_Call(_ctx, _lateUpdateFunc, _this_obj); - if (rval.IsException()) - { - _ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(_ctx, rval); - } - } - } - - void FixedUpdate() - { - if (_fixedUpdateValid) - { - var rval = JSApi.JS_Call(_ctx, _fixedUpdateFunc, _this_obj); - if (rval.IsException()) - { - _ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(_ctx, rval); - } - } - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/JSBehaviourFull.cs.meta b/unity/quickjs/Runtime/Source/Unity/JSBehaviourFull.cs.meta deleted file mode 100644 index 4f08e55a..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSBehaviourFull.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5d7749844623fd647859e1bd098d5a43 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/JSEditorWindow.cs b/unity/quickjs/Runtime/Source/Unity/JSEditorWindow.cs deleted file mode 100644 index 6f98dda3..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSEditorWindow.cs +++ /dev/null @@ -1,585 +0,0 @@ -#if !JSB_UNITYLESS -#if UNITY_EDITOR -using System; -using System.Reflection; - -namespace QuickJS.Unity -{ - using Native; - using UnityEngine; - using UnityEditor; - - /// - /// 脚本实现编辑器窗口的基础类. - /// 此实现刻意放在非 Editor 目录下, 以便在非编辑器脚本中也可以使用, 实际仍然只在编辑器环境下可用. - /// - public class JSEditorWindow : EditorWindow, IHasCustomMenu, IScriptInstancedObject, ISerializationCallbackReceiver, Utils.IObjectCollectionEntry - { - private Utils.ObjectCollection.Handle _handle; - - [NonSerialized] - private bool _isScriptInstanced; - - [NonSerialized] - private bool _isWaitingRuntime = false; - - [NonSerialized] - private bool _checkInstanceOnce = true; - - [SerializeField] - private JSScriptRef _scriptRef; - - [SerializeField] - private JSScriptProperties _properties; - - // internal use only - public JSScriptProperties properties => _properties; - - [NonSerialized] - private JSContext _ctx; - - private JSValue _this_obj = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _updateValid; - private JSValue _updateFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onEnableValid; - private JSValue _onEnableFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onDisableValid; - private JSValue _onDisableFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onDestroyValid; - private JSValue _onDestroyFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onGUIValid; - private JSValue _onGUIFunc = JSApi.JS_UNDEFINED; - -#if JSB_WITH_UIELEMENTS - [NonSerialized] - private bool _createGUIValid; - private JSValue _createGUIFunc = JSApi.JS_UNDEFINED; -#endif - - [NonSerialized] - private bool _addItemsToMenuValid; - private JSValue _addItemsToMenuFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onBeforeScriptReloadValid; - private JSValue _onBeforeScriptReloadFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onAfterScriptReloadValid; - private JSValue _onAfterScriptReloadFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onBeforeSerializeValid; - private JSValue _onBeforeSerializeFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onAfterDeserializeValid; - private JSValue _onAfterDeserializeFunc = JSApi.JS_UNDEFINED; - - public int IsInstanceOf(JSValue ctor) - { - if (!_isScriptInstanced) - { - return 0; - } - return JSApi.JS_IsInstanceOf(_ctx, _this_obj, ctor); - } - - public JSValue CloneValue() - { - if (!_isScriptInstanced) - { - return JSApi.JS_UNDEFINED; - } - return JSApi.JS_DupValue(_ctx, _this_obj); - } - - public JSValue SetScriptInstance(JSContext ctx, JSValue ctor, bool execAwake) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - var cache = ScriptEngine.GetObjectCache(ctx); - - // 旧的绑定值释放? - OnUnbindingObject(ctx, _this_obj); - var object_id = cache.AddObject(this, false); - var val = JSApi.jsb_construct_bridge_object(ctx, ctor, object_id); - if (val.IsException()) - { - cache.RemoveObject(object_id); - SetUnresolvedScriptInstance(); - } - else - { - cache.AddJSValue(this, val); - this._SetScriptInstance(ctx, val, ctor, execAwake); - // JSApi.JSB_SetBridgeType(ctx, val, type_id); - } - - return val; - } - } - - SetUnresolvedScriptInstance(); - return JSApi.JS_UNDEFINED; - } - - public void ReleaseScriptInstance() - { - _isScriptInstanced = false; - ReleaseJSValues(); - } - - private void SetUnresolvedScriptInstance() - { - _isScriptInstanced = true; - } - - public bool CreateScriptInstance() - { - if (!_isScriptInstanced) - { - if (!string.IsNullOrEmpty(_scriptRef.modulePath) && !string.IsNullOrEmpty(_scriptRef.className)) - { - var runtime = ScriptEngine.GetRuntime(); - if (runtime != null && runtime.isValid && runtime.isInitialized) - { - var context = runtime.GetMainContext(); - if (context != null) - { - var ctx = (JSContext)context; - var snippet = $"require('{_scriptRef.modulePath}')['{_scriptRef.className}']"; - var bytes = System.Text.Encoding.UTF8.GetBytes(snippet); - var typeValue = ScriptRuntime.EvalSource(ctx, bytes, _scriptRef.sourceFile ?? _scriptRef.modulePath, false); - if (typeValue.IsException()) - { - ctx.print_exception(); - SetUnresolvedScriptInstance(); - } - else - { - var instValue = SetScriptInstance(ctx, typeValue, false); - JSApi.JS_FreeValue(ctx, instValue); - JSApi.JS_FreeValue(ctx, typeValue); - } - } - else - { - SetUnresolvedScriptInstance(); - } - } - else - { - if (!_isWaitingRuntime) - { - _isWaitingRuntime = true; - ScriptEngine.RuntimeInitialized += OnRuntimeInitialized; - } - } - } - else - { - SetUnresolvedScriptInstance(); - } - } - - return _isScriptInstanced; - } - - private void OnRuntimeInitialized(ScriptRuntime runtime) - { - if (_isWaitingRuntime) - { - _isWaitingRuntime = false; - ScriptEngine.RuntimeInitialized -= OnRuntimeInitialized; - CreateScriptInstance(); - } - } - - private void _SetScriptInstance(JSContext ctx, JSValue this_obj, JSValue ctor, bool execAwake) - { - var context = ScriptEngine.GetContext(ctx); - if (context == null || !context.IsValid()) - { - return; - } - - ReleaseJSValues(); - context.TrySetScriptRef(ref _scriptRef, ctor); - var runtime = context.GetRuntime(); - runtime.AddManagedObject(this, out _handle); -#if UNITY_EDITOR - context.OnScriptReloading += OnScriptReloading; - context.OnScriptReloaded += OnScriptReloaded; -#endif - _ctx = ctx; - _isScriptInstanced = true; - _this_obj = JSApi.JS_DupValue(ctx, this_obj); - - if (!_this_obj.IsNullish()) - { - OnBindingJSFuncs(context); - - if (execAwake) - { - var awake_obj = JSApi.JS_GetProperty(ctx, this_obj, context.GetAtom("Awake")); - JSScriptableObject._CallJSFunc(_ctx, _this_obj, awake_obj); - JSApi.JS_FreeValue(_ctx, awake_obj); - - } - - this._OnScriptingAfterDeserialize(); - if (_onEnableValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onEnableFunc); - } - } - } - - private void OnBindingJSFuncs(ScriptContext context) - { - var ctx = (JSContext)context; - - _updateFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("Update")); - _updateValid = JSApi.JS_IsFunction(ctx, _updateFunc) == 1; - - _onEnableFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnEnable")); - _onEnableValid = JSApi.JS_IsFunction(ctx, _onEnableFunc) == 1; - - _onDisableFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnDisable")); - _onDisableValid = JSApi.JS_IsFunction(ctx, _onDisableFunc) == 1; - - _onDestroyFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnDestroy")); - _onDestroyValid = JSApi.JS_IsFunction(ctx, _onDestroyFunc) == 1; - - _onGUIFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnGUI")); - _onGUIValid = JSApi.JS_IsFunction(ctx, _onGUIFunc) == 1; - -#if JSB_WITH_UIELEMENTS - _createGUIFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("CreateGUI")); - _createGUIValid = JSApi.JS_IsFunction(ctx, _createGUIFunc) == 1; -#endif - - _addItemsToMenuFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("AddItemsToMenu")); - _addItemsToMenuValid = JSApi.JS_IsFunction(ctx, _addItemsToMenuFunc) == 1; - - _onBeforeScriptReloadFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnBeforeScriptReload")); - _onBeforeScriptReloadValid = JSApi.JS_IsFunction(ctx, _onBeforeScriptReloadFunc) == 1; - - _onAfterScriptReloadFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnAfterScriptReload")); - _onAfterScriptReloadValid = JSApi.JS_IsFunction(ctx, _onAfterScriptReloadFunc) == 1; - - _onBeforeSerializeFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnBeforeSerialize")); - _onBeforeSerializeValid = JSApi.JS_IsFunction(ctx, _onBeforeSerializeFunc) == 1; - - _onAfterDeserializeFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnAfterDeserialize")); - _onAfterDeserializeValid = JSApi.JS_IsFunction(ctx, _onAfterDeserializeFunc) == 1; - } - - private void OnUnbindingJSFuncs() - { - JSApi.JS_FreeValue(_ctx, _updateFunc); - _updateFunc = JSApi.JS_UNDEFINED; - _updateValid = false; - - JSApi.JS_FreeValue(_ctx, _onEnableFunc); - _onEnableFunc = JSApi.JS_UNDEFINED; - _onEnableValid = false; - - JSApi.JS_FreeValue(_ctx, _onDisableFunc); - _onDisableFunc = JSApi.JS_UNDEFINED; - _onDisableValid = false; - - JSApi.JS_FreeValue(_ctx, _onDestroyFunc); - _onDestroyFunc = JSApi.JS_UNDEFINED; - _onDestroyValid = false; - - JSApi.JS_FreeValue(_ctx, _onGUIFunc); - _onGUIFunc = JSApi.JS_UNDEFINED; - _onGUIValid = false; - -#if JSB_WITH_UIELEMENTS - JSApi.JS_FreeValue(_ctx, _createGUIFunc); - _createGUIFunc = JSApi.JS_UNDEFINED; - _createGUIValid = false; -#endif - - JSApi.JS_FreeValue(_ctx, _addItemsToMenuFunc); - _addItemsToMenuFunc = JSApi.JS_UNDEFINED; - _addItemsToMenuValid = false; - - JSApi.JS_FreeValue(_ctx, _onBeforeScriptReloadFunc); - _onBeforeScriptReloadFunc = JSApi.JS_UNDEFINED; - _onBeforeScriptReloadValid = false; - - JSApi.JS_FreeValue(_ctx, _onAfterScriptReloadFunc); - _onAfterScriptReloadFunc = JSApi.JS_UNDEFINED; - _onAfterScriptReloadValid = false; - - JSApi.JS_FreeValue(_ctx, _onBeforeSerializeFunc); - _onBeforeSerializeFunc = JSApi.JS_UNDEFINED; - _onBeforeSerializeValid = false; - - JSApi.JS_FreeValue(_ctx, _onAfterDeserializeFunc); - _onAfterDeserializeFunc = JSApi.JS_UNDEFINED; - _onAfterDeserializeValid = false; - } - -#if UNITY_EDITOR - private void OnScriptReloading(ScriptContext context, string resolved_id) - { - if (context.CheckModuleId(_scriptRef, resolved_id)) - { - if (_onBeforeScriptReloadValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onBeforeScriptReloadFunc); - } - } - } - - private void OnScriptReloaded(ScriptContext context, string resolved_id) - { - if (context.CheckModuleId(_scriptRef, resolved_id)) - { - JSValue newClass; - if (context.LoadModuleCacheExports(resolved_id, _scriptRef.className, out newClass)) - { - var prototype = JSApi.JS_GetProperty(context, newClass, context.GetAtom("prototype")); - - if (prototype.IsObject() && _this_obj.IsObject()) - { - OnUnbindingJSFuncs(); - JSApi.JS_SetPrototype(context, _this_obj, prototype); - OnBindingJSFuncs(context); - - if (_onAfterScriptReloadValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onAfterScriptReloadFunc); - } - } - - JSApi.JS_FreeValue(context, prototype); - JSApi.JS_FreeValue(context, newClass); - } - } - } -#endif - - #region IObjectCollectionEntry implementation - public void OnCollectionReleased() - { - OnBeforeSerialize(); - ReleaseJSValues(); - } - #endregion - - void OnUnbindingObject(JSContext ctx, JSValue this_obj) - { - var payload = JSApi.JSB_FreePayload(ctx, this_obj); - if (payload.type_id == BridgeObjectType.ObjectRef) - { - try - { - ScriptEngine.GetObjectCache(ctx).RemoveObject(payload.value); - } - catch (Exception exception) - { - ScriptEngine.GetLogger(ctx)?.WriteException(exception); - } - } - } - - void ReleaseJSValues(bool noClose = false) - { - _isScriptInstanced = false; - if (_isWaitingRuntime) - { - _isWaitingRuntime = false; - ScriptEngine.RuntimeInitialized -= OnRuntimeInitialized; - } - - if (!_this_obj.IsNullish()) - { - OnUnbindingObject(_ctx, _this_obj); - OnUnbindingJSFuncs(); - JSApi.JS_FreeValue(_ctx, _this_obj); - _this_obj = JSApi.JS_UNDEFINED; - } - - var context = ScriptEngine.GetContext(_ctx); - _ctx = JSContext.Null; - if (context != null) - { - var runtime = context.GetRuntime(); - if (runtime != null) - { - runtime.RemoveManagedObject(_handle); - } -#if UNITY_EDITOR - context.OnScriptReloading -= OnScriptReloading; - context.OnScriptReloaded -= OnScriptReloaded; -#endif - } - - try - { - if (!noClose && _scriptRef.IsEmpty()) - { - Close(); - } - } - catch (Exception) { } - } - - void Update() - { - if (_updateValid && _ctx.IsValid()) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _updateFunc); - } - else - { - // there is no callback available to restore the script reference after getting back to edit mode. - // it seems that checking is the only way. - - if (_checkInstanceOnce && !Application.isPlaying) - { - _checkInstanceOnce = false; - CreateScriptInstance(); - } - } - } - - void OnEnable() - { - CreateScriptInstance(); - - // if (_onEnableValid) - // { - // JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onEnableFunc); - // } - } - - void OnDisable() - { - if (_onDisableValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onDisableFunc); - } - } - - void OnDestroy() - { - if (_onDestroyValid) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onDestroyFunc); - } - ReleaseJSValues(true); - } - -#if JSB_WITH_UIELEMENTS - void CreateGUI() - { - if (EditorApplication.isCompiling) - { - ReleaseJSValues(); - return; - } - - if (_createGUIValid && _isScriptInstanced && _ctx.IsValid()) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _createGUIFunc); - } - } -#endif - - void OnGUI() - { - if (EditorApplication.isCompiling) - { - ReleaseJSValues(); - return; - } - - if (_onGUIValid && _isScriptInstanced && _ctx.IsValid()) - { - JSScriptableObject._CallJSFunc(_ctx, _this_obj, _onGUIFunc); - } - else - { - var promptMessage = @"script callback not ready: - 1. runtime unavailable - 2. script instance not ready - 3. callback of OnGUI not provided in target script"; - EditorGUILayout.HelpBox(promptMessage, MessageType.Warning); - } - } - - public unsafe void AddItemsToMenu(GenericMenu menu) - { - if (_addItemsToMenuValid) - { - var argv = stackalloc JSValue[] { Binding.Values.js_push_classvalue(_ctx, menu) }; - var rval = JSApi.JS_Call(_ctx, _addItemsToMenuFunc, _this_obj, 1, argv); - - JSApi.JS_FreeValue(_ctx, argv[0]); - if (rval.IsException()) - { - _ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(_ctx, rval); - } - } - } - - public void OnBeforeSerialize() - { - if (_onBeforeSerializeValid) - { - JSScriptableObject.ExecOnBeforeSerialize(ref _properties, _ctx, _this_obj, _onBeforeSerializeFunc); - } - - if (UnityEditor.EditorApplication.isCompiling) - { - ReleaseJSValues(); - } - } - - public void _OnScriptingAfterDeserialize() - { - if (_onAfterDeserializeValid) - { - JSScriptableObject.ExecOnAfterDeserialize(ref _properties, _ctx, _this_obj, _onAfterDeserializeFunc); - } - } - - public void OnAfterDeserialize() - { - if (_isScriptInstanced) - { - _OnScriptingAfterDeserialize(); - } - else - { - CreateScriptInstance(); - } - } - } -} -#endif -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/JSEditorWindow.cs.meta b/unity/quickjs/Runtime/Source/Unity/JSEditorWindow.cs.meta deleted file mode 100644 index 7df7d836..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSEditorWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6e20916374902fa4380b6f21d2af62a2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/JSScriptProperties.cs b/unity/quickjs/Runtime/Source/Unity/JSScriptProperties.cs deleted file mode 100644 index b46d99bb..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSScriptProperties.cs +++ /dev/null @@ -1,90 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using UnityEngine; - - [Serializable] - public class JSScriptProperties - { - [SerializeField] - private List _referencedObjects; - - [SerializeField] - public byte[] genericValueData; - - [SerializeField] - public int dataFormat = -1; - - public bool IsEmpty - { - get { return GenericCount == 0; } - } - - public int ReferencedObjectCount => _referencedObjects != null ? _referencedObjects.Count : 0; - - public int GenericCount => genericValueData != null ? genericValueData.Length : 0; - - public int AddReferencedObject(Object value) - { - if (_referencedObjects == null) - { - _referencedObjects = new List(); - _referencedObjects.Add(value); - return 0; - } - var count = _referencedObjects.Count; - for (var i = 0; i < count; ++i) - { - var item = _referencedObjects[i]; - if (item == value) - { - return i; - } - } - _referencedObjects.Add(value); - return count; - } - - public Object GetReferencedObject(int index) - { - if (_referencedObjects != null && index >= 0 && index < _referencedObjects.Count) - { - return _referencedObjects[index]; - } - return null; - } - - public void SetGenericValue(IO.ByteBuffer buffer) - { - if (buffer != null && buffer.readableBytes > 0) - { - if (genericValueData == null) - { - genericValueData = new byte[buffer.readableBytes]; - buffer.ReadBytes(genericValueData, 0, buffer.readableBytes); - } - else - { - if (genericValueData.Length != buffer.readableBytes) - { - Array.Resize(ref genericValueData, buffer.readableBytes); - } - buffer.ReadBytes(genericValueData, 0, buffer.readableBytes); - } - } - else - { - genericValueData = null; - } - } - - public void Clear() - { - _referencedObjects?.Clear(); - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/JSScriptProperties.cs.meta b/unity/quickjs/Runtime/Source/Unity/JSScriptProperties.cs.meta deleted file mode 100644 index 0a285099..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSScriptProperties.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 52448f6ae6da2354889ad0d6628e5856 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/JSScriptRef.cs b/unity/quickjs/Runtime/Source/Unity/JSScriptRef.cs deleted file mode 100644 index bfbd2bde..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSScriptRef.cs +++ /dev/null @@ -1,66 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using Native; - using UnityEngine; - - /// - /// indicates a script class - /// (case-sensitive) - /// - [Serializable] - public struct JSScriptRef - { - /// - /// sourceFile will be broken down into modulePath and className by the editor, - /// but not necessary for instantiating the script class instance - /// - public string sourceFile; - - /// - /// the actual script loaded, it's parsed from sourceFile and be resolved by ScriptRuntime.pathResolver. - /// - public string modulePath; - - /// - /// it specifies the exported target class used for bridging of Unity's facilities - /// - public string className; - - public void Reset() - { - sourceFile = null; - modulePath = null; - className = null; - } - - public bool IsEmpty() - { - return string.IsNullOrEmpty(modulePath) && string.IsNullOrEmpty(className); - } - - public bool IsSameScript(JSScriptRef other) - { - return modulePath == other.modulePath && className == other.className; - } - - public static string ToClassPath(string modulePath, string className) - { - if (string.IsNullOrEmpty(modulePath)) - { - return className ?? string.Empty; - } - - return string.IsNullOrEmpty(className) ? string.Empty : $"{modulePath.Replace('/', '.')}.{className}"; - } - - public string ToClassPath() - { - return ToClassPath(modulePath, className); - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/JSScriptRef.cs.meta b/unity/quickjs/Runtime/Source/Unity/JSScriptRef.cs.meta deleted file mode 100644 index 2be1427b..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSScriptRef.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8399b86686bcf604e85be1be014eb933 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/JSScriptableObject.cs b/unity/quickjs/Runtime/Source/Unity/JSScriptableObject.cs deleted file mode 100644 index 18119b06..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSScriptableObject.cs +++ /dev/null @@ -1,518 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; - -namespace QuickJS.Unity -{ - using Native; - using UnityEngine; - using UnityEngine.Serialization; - - // 实际 ScriptableObject.OnAfterDeserialize/OnEnable 可能早于 Runtime 初始化 - // 脚本回调与 C# 版本不完全一致 - - [CreateAssetMenu(fileName = "js_data", menuName = "JSScriptableObject Asset", order = 100)] - public class JSScriptableObject : ScriptableObject, ISerializationCallbackReceiver, IScriptEditorSupport, IScriptInstancedObject, Utils.IObjectCollectionEntry - { - // 在编辑器运行时下与 js 脚本建立链接关系 - [SerializeField] - [FormerlySerializedAs("scriptRef")] - private JSScriptRef _scriptRef; - - [SerializeField] - private JSScriptProperties _properties; - - // internal use only - public JSScriptProperties properties => _properties; - - [NonSerialized] - private bool _enabled; - - [NonSerialized] - private bool _isScriptInstanced = false; - - [NonSerialized] - private bool _isWaitingRuntime = false; - - private JSContext _ctx = JSContext.Null; - private Utils.ObjectCollection.Handle _handle; - private JSValue _this_obj = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _resetValid; - private JSValue _resetFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onBeforeSerializeValid; - private JSValue _onBeforeSerializeFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onAfterDeserializeValid; - private JSValue _onAfterDeserializeFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onBeforeScriptReloadValid; - private JSValue _onBeforeScriptReloadFunc = JSApi.JS_UNDEFINED; - - [NonSerialized] - private bool _onAfterScriptReloadValid; - private JSValue _onAfterScriptReloadFunc = JSApi.JS_UNDEFINED; - - public bool enabled => _enabled; - - public bool isScriptInstanced => _isScriptInstanced; - - // self controlled script instance lifetime - public bool isStandaloneScript => true; - - JSScriptRef IScriptEditorSupport.scriptRef { get { return _scriptRef; } set { _scriptRef = value; } } - - public JSContext ctx => _ctx; - - public bool IsValid() - { - return _ctx.IsValid() && !_this_obj.IsNullish(); - } - - public int IsInstanceOf(JSValue ctor) - { - if (!IsValid()) - { - return 0; - } - return JSApi.JS_IsInstanceOf(_ctx, _this_obj, ctor); - } - - public JSValue CloneValue() - { - if (!IsValid()) - { - return JSApi.JS_UNDEFINED; - } - return JSApi.JS_DupValue(_ctx, _this_obj); - } - - public static void _CallJSFunc(JSContext ctx, JSValue this_obj, JSValue func_obj) - { - if (!this_obj.IsNullish() && JSApi.JS_IsFunction(ctx, func_obj) == 1) - { - var rval = JSApi.JS_Call(ctx, func_obj, this_obj); - if (rval.IsException()) - { - ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(ctx, rval); - } - } - } - - private void OnBindingJSFuncs(ScriptContext context) - { - var ctx = (JSContext)context; - - _onBeforeSerializeFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnBeforeSerialize")); - _onBeforeSerializeValid = JSApi.JS_IsFunction(ctx, _onBeforeSerializeFunc) == 1; - - _onAfterDeserializeFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnAfterDeserialize")); - _onAfterDeserializeValid = JSApi.JS_IsFunction(ctx, _onAfterDeserializeFunc) == 1; - - _onBeforeScriptReloadFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnBeforeScriptReload")); - _onBeforeScriptReloadValid = JSApi.JS_IsFunction(ctx, _onBeforeScriptReloadFunc) == 1; - - _onAfterScriptReloadFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("OnAfterScriptReload")); - _onAfterScriptReloadValid = JSApi.JS_IsFunction(ctx, _onAfterScriptReloadFunc) == 1; - - _resetFunc = JSApi.JS_GetProperty(ctx, _this_obj, context.GetAtom("Reset")); - _resetValid = JSApi.JS_IsFunction(ctx, _resetFunc) == 1; - } - - private void OnUnbindingJSFuncs() - { - JSApi.JS_FreeValue(_ctx, _onBeforeSerializeFunc); - _onBeforeSerializeFunc = JSApi.JS_UNDEFINED; - _onBeforeSerializeValid = false; - - JSApi.JS_FreeValue(_ctx, _onAfterDeserializeFunc); - _onAfterDeserializeFunc = JSApi.JS_UNDEFINED; - _onAfterDeserializeValid = false; - - JSApi.JS_FreeValue(_ctx, _onBeforeScriptReloadFunc); - _onBeforeScriptReloadFunc = JSApi.JS_UNDEFINED; - _onBeforeScriptReloadValid = false; - - JSApi.JS_FreeValue(_ctx, _onAfterScriptReloadFunc); - _onAfterScriptReloadFunc = JSApi.JS_UNDEFINED; - _onAfterScriptReloadValid = false; - - JSApi.JS_FreeValue(_ctx, _resetFunc); - _resetFunc = JSApi.JS_UNDEFINED; - _resetValid = false; - } - - void OnUnbindingObject(JSContext ctx, JSValue this_obj) - { - var payload = JSApi.JSB_FreePayload(ctx, this_obj); - if (payload.type_id == BridgeObjectType.ObjectRef) - { - try - { - ScriptEngine.GetObjectCache(ctx).RemoveObject(payload.value); - } - catch (Exception exception) - { - ScriptEngine.GetLogger(ctx)?.WriteException(exception); - } - } - } - - public void ReleaseJSValues() - { - if (!_this_obj.IsNullish()) - { - OnUnbindingObject(_ctx, _this_obj); - OnUnbindingJSFuncs(); - JSApi.JS_FreeValue(_ctx, _this_obj); - _this_obj = JSApi.JS_UNDEFINED; - } - - var runtime = ScriptEngine.GetRuntime(_ctx); - var context = runtime?.GetContext(_ctx); - _isScriptInstanced = false; - if (_isWaitingRuntime) - { - _isWaitingRuntime = false; - ScriptEngine.RuntimeInitialized -= OnRuntimeInitialized; - } - _ctx = JSContext.Null; - - if (context != null) - { - runtime.RemoveManagedObject(_handle); -#if UNITY_EDITOR - context.OnScriptReloading -= OnScriptReloading; - context.OnScriptReloaded -= OnScriptReloaded; -#endif - } - } - -#if UNITY_EDITOR - private void OnScriptReloading(ScriptContext context, string resolved_id) - { - if (context.CheckModuleId(_scriptRef, resolved_id)) - { - if (_onBeforeScriptReloadValid) - { - var rval = JSApi.JS_Call(_ctx, _onBeforeScriptReloadFunc, _this_obj); - if (rval.IsException()) - { - _ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(_ctx, rval); - } - } - } - } - - private void OnScriptReloaded(ScriptContext context, string resolved_id) - { - if (context.CheckModuleId(_scriptRef, resolved_id)) - { - if (!_this_obj.IsNullish()) - { - JSValue newClass; - if (context.LoadModuleCacheExports(resolved_id, _scriptRef.className, out newClass)) - { - var prototype = JSApi.JS_GetProperty(context, newClass, context.GetAtom("prototype")); - - if (prototype.IsObject()) - { - OnUnbindingJSFuncs(); - JSApi.JS_SetPrototype(context, _this_obj, prototype); - OnBindingJSFuncs(context); - - if (_onAfterScriptReloadValid) - { - var rval = JSApi.JS_Call(_ctx, _onAfterScriptReloadFunc, _this_obj); - if (rval.IsException()) - { - _ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(_ctx, rval); - } - } - } - - JSApi.JS_FreeValue(context, prototype); - JSApi.JS_FreeValue(context, newClass); - } - } - } - } -#endif - - #region IObjectCollectionEntry implementation - public void OnCollectionReleased() - { - ReleaseJSValues(); - } - #endregion - - // 通过 scriptRef 还原脚本绑定关系 - public bool CreateScriptInstance() - { - if (!_isScriptInstanced) - { - if (!string.IsNullOrEmpty(_scriptRef.modulePath) && !string.IsNullOrEmpty(_scriptRef.className)) - { - var runtime = ScriptEngine.GetRuntime(); - if (runtime != null && runtime.isInitialized && runtime.isValid) - { - var context = runtime.GetMainContext(); - if (context != null) - { - var ctx = (JSContext)context; - var snippet = $"require('{_scriptRef.modulePath}')['{_scriptRef.className}']"; - var bytes = System.Text.Encoding.UTF8.GetBytes(snippet); - var typeValue = ScriptRuntime.EvalSource(ctx, bytes, _scriptRef.sourceFile, false); - if (typeValue.IsException()) - { - ctx.print_exception(); - SetUnresolvedScriptInstance(); - } - else - { - var instValue = SetScriptInstance(ctx, typeValue, false); - JSApi.JS_FreeValue(ctx, instValue); - JSApi.JS_FreeValue(ctx, typeValue); - } - } - } - else - { - if (!_isWaitingRuntime) - { - _isWaitingRuntime = true; - ScriptEngine.RuntimeInitialized += OnRuntimeInitialized; - } - } - } - else - { - SetUnresolvedScriptInstance(); - } - } - - return _isScriptInstanced; - } - - private void OnRuntimeInitialized(ScriptRuntime runtime) - { - if (_isWaitingRuntime) - { - _isWaitingRuntime = false; - ScriptEngine.RuntimeInitialized -= OnRuntimeInitialized; - CreateScriptInstance(); - } - } - - // 在当前 JSBehaviour 实例上创建一个脚本实例并与之绑定 - public JSValue SetScriptInstance(JSContext ctx, JSValue ctor, bool execAwake) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - var cache = ScriptEngine.GetObjectCache(ctx); - - // 旧的绑定值释放? - OnUnbindingObject(ctx, _this_obj); - var object_id = cache.AddObject(this, false); - var val = JSApi.jsb_construct_bridge_object(ctx, ctor, object_id); - if (val.IsException()) - { - cache.RemoveObject(object_id); - SetUnresolvedScriptInstance(); - } - else - { - cache.AddJSValue(this, val); - this._SetScriptInstance(ctx, val, execAwake); - } - - return val; - } - } - - SetUnresolvedScriptInstance(); - return JSApi.JS_UNDEFINED; - } - - private void _SetScriptInstance(JSContext ctx, JSValue this_obj, bool execAwake) - { - var runtime = ScriptEngine.GetRuntime(ctx); - var context = runtime?.GetContext(ctx); - if (context == null || !context.IsValid()) - { - return; - } - - ReleaseJSValues(); - - runtime.AddManagedObject(this, out _handle); -#if UNITY_EDITOR - context.OnScriptReloading += OnScriptReloading; - context.OnScriptReloaded += OnScriptReloaded; -#endif - - _ctx = ctx; - _isScriptInstanced = true; - _this_obj = JSApi.JS_DupValue(ctx, this_obj); - - if (!_this_obj.IsNullish()) - { - OnBindingJSFuncs(context); - this._OnScriptingAfterDeserialize(); - } - } - - private void SetUnresolvedScriptInstance() - { - _isScriptInstanced = true; - } - - public void ReleaseScriptInstance() - { - _isScriptInstanced = false; - ReleaseJSValues(); - } - - public void Reset() - { - if (_resetValid) - { - var rval = JSApi.JS_Call(_ctx, _resetFunc, _this_obj); - if (rval.IsException()) - { - _ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(_ctx, rval); - } - } - } - - public void OnBeforeSerialize() - { - if (_onBeforeSerializeValid) - { - ExecOnBeforeSerialize(ref _properties, _ctx, _this_obj, _onBeforeSerializeFunc); - } - } - - void Awake() - { - //NOTE: only Awake will be called if using Scriptable.CreateInstance - // only OnAfterDeserialize will be called if deserializing from asset - } - - public void OnAfterDeserialize() - { - if (_isScriptInstanced) - { - _OnScriptingAfterDeserialize(); - } - else - { - CreateScriptInstance(); - } - } - - public void _OnScriptingAfterDeserialize() - { - if (_onAfterDeserializeValid) - { - ExecOnAfterDeserialize(ref _properties, _ctx, _this_obj, _onAfterDeserializeFunc); - } - } - - public static void ExecOnAfterDeserialize(ref JSScriptProperties properties, JSContext ctx, JSValue this_obj, JSValue onAfterDeserializeFunc) - { - if (properties == null) - { - properties = new JSScriptProperties(); - } - - var buffer = new IO.ByteBuffer(properties.genericValueData); - var context = new JSSerializationContext(properties); - - unsafe - { - var argv = stackalloc[] { Binding.Values.js_push_classvalue(ctx, context), Binding.Values.js_push_classvalue(ctx, buffer) }; - var rval = JSApi.JS_Call(ctx, onAfterDeserializeFunc, this_obj, 2, argv); - JSApi.JS_FreeValue(ctx, argv[0]); - JSApi.JS_FreeValue(ctx, argv[1]); - if (rval.IsException()) - { - ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(ctx, rval); - } - } - context.Release(); - } - - public static void ExecOnBeforeSerialize(ref JSScriptProperties properties, JSContext ctx, JSValue this_obj, JSValue onBeforeSerializeFunc) - { - if (properties == null) - { - properties = new JSScriptProperties(); - } - else - { - properties.Clear(); - } - - var context = new JSSerializationContext(properties); - - unsafe - { - var argv = stackalloc[] { Binding.Values.js_push_classvalue(ctx, context) }; - var rval = JSApi.JS_Call(ctx, onBeforeSerializeFunc, this_obj, 1, argv); - JSApi.JS_FreeValue(ctx, argv[0]); - JSApi.JS_FreeValue(ctx, argv[1]); - if (rval.IsException()) - { - ctx.print_exception(); - } - else - { - JSApi.JS_FreeValue(ctx, rval); - } - } - context.Release(); - } - - void OnEnable() - { - _enabled = true; - CreateScriptInstance(); - } - - void OnDisable() - { - _enabled = false; - ReleaseJSValues(); - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/JSScriptableObject.cs.meta b/unity/quickjs/Runtime/Source/Unity/JSScriptableObject.cs.meta deleted file mode 100644 index 731bd8a1..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSScriptableObject.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c74456a7d35a921468a4a2a23d99cee4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/JSSerializationContext.cs b/unity/quickjs/Runtime/Source/Unity/JSSerializationContext.cs deleted file mode 100644 index 57e23e97..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSSerializationContext.cs +++ /dev/null @@ -1,64 +0,0 @@ -#if !JSB_UNITYLESS -using System; - -namespace QuickJS.Unity -{ - using UnityEngine; - - public class JSSerializationContext - { - private JSScriptProperties _properties; - private Utils.AutoReleasePool _bufferPool = new Utils.AutoReleasePool(); - - public int dataFormat - { - get { return _properties.dataFormat; } - set { _properties.dataFormat = value; } - } - - public JSSerializationContext(JSScriptProperties properties) - { - _properties = properties; - } - - public int AddReferencedObject(Object value) - { - return _properties.AddReferencedObject(value); - } - - public Object GetReferencedObject(int index) - { - return _properties.GetReferencedObject(index); - } - - /// - /// flush the data of byteBuffer into JSProperties.genericValueData - /// - public void Flush(IO.ByteBuffer byteBuffer) - { - _properties.SetGenericValue(byteBuffer); - } - - /// - /// allocate a new ByteBuffer from ScriptRuntime, it will autoreleased after serialization - /// - public IO.ByteBuffer AllocByteBuffer(ScriptRuntime runtime) - { - if (_bufferPool == null) - { - throw new ObjectDisposedException(this.GetType().Name); - } - var buffer = runtime.GetByteBufferAllocator().Alloc(64); - _bufferPool.AutoRelease(buffer); - return buffer; - } - - public void Release() - { - _properties = null; - _bufferPool.Drain(); - _bufferPool = null; - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/JSSerializationContext.cs.meta b/unity/quickjs/Runtime/Source/Unity/JSSerializationContext.cs.meta deleted file mode 100644 index c392458b..00000000 --- a/unity/quickjs/Runtime/Source/Unity/JSSerializationContext.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9ff1e3ea29e1e4a2da5153cb3d029e38 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/ObjectFix.cs b/unity/quickjs/Runtime/Source/Unity/ObjectFix.cs deleted file mode 100644 index 3500a829..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ObjectFix.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if !JSB_UNITYLESS -#if UNITY_EDITOR -using System; -using System.Reflection; -using System.Collections.Generic; -using System.Linq; - -namespace QuickJS.Unity -{ - using Native; - using Binding; - using UnityEngine; - - public static class ObjectFix - { - } -} - -#endif // !JSB_UNITYLESS -#endif // UNITY_EDITOR \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/ObjectFix.cs.meta b/unity/quickjs/Runtime/Source/Unity/ObjectFix.cs.meta deleted file mode 100644 index 3b2f04b1..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ObjectFix.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f6155f7aace8ddc4f94a7606c3f9e61a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/ResourcesFix.cs b/unity/quickjs/Runtime/Source/Unity/ResourcesFix.cs deleted file mode 100644 index b1eda0ba..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ResourcesFix.cs +++ /dev/null @@ -1,85 +0,0 @@ -#if !JSB_UNITYLESS -#if UNITY_EDITOR -using System; - -namespace QuickJS.Unity -{ - using Native; - using Binding; - using UnityEngine; - - public static class ResourcesFix - { - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue BindStatic_FindObjectsOfTypeAll(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - if (argc == 1) - { - System.Type arg_type; - if (!Values.js_get_classvalue(ctx, argv[0], out arg_type)) - { - throw new ParameterException(typeof(Resources), "FindObjectsOfTypeAll", typeof(System.Type), 0); - } - var inject = js_find_objects_of_type_all(ctx, argv[0], arg_type); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = Resources.FindObjectsOfTypeAll(arg_type); - return Values.PushArray(ctx, ret); - } - - throw new NotImplementedException(); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - - public static JSValue js_find_objects_of_type_all(JSContext ctx, JSValue ctor, Type type) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - var typeDB = ScriptEngine.GetTypeDB(ctx); - if (!typeDB.IsConstructorEquals(type, ctor)) - { - var objects = Resources.FindObjectsOfTypeAll(type); - var len = objects.Length; - var array = JSApi.JS_NewArray(ctx); - var arrayLength = 0; - - for (var i = 0; i < len; ++i) - { - var obj = objects[i]; - - if (typeof(IScriptInstancedObject).IsAssignableFrom(obj.GetType())) - { - var si = (IScriptInstancedObject)obj; - if (si.IsInstanceOf(ctor) == 1) - { - JSApi.JS_SetPropertyUint32(ctx, array, (uint)arrayLength, si.CloneValue()); - arrayLength++; - } - continue; - } - } - - return array; - } - } - } - - return JSApi.JS_UNDEFINED; - } - } -} - -#endif // !JSB_UNITYLESS -#endif // UNITY_EDITOR \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/ResourcesFix.cs.meta b/unity/quickjs/Runtime/Source/Unity/ResourcesFix.cs.meta deleted file mode 100644 index 40d5ab51..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ResourcesFix.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4770a7341bc885d40b39fc6503fe01a6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/ScriptEditorSupport.cs b/unity/quickjs/Runtime/Source/Unity/ScriptEditorSupport.cs deleted file mode 100644 index 1b11d166..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ScriptEditorSupport.cs +++ /dev/null @@ -1,25 +0,0 @@ -#if !JSB_UNITYLESS - -namespace QuickJS.Unity -{ - using Native; - - public interface IScriptEditorSupport : IScriptInstancedObject - { - bool isStandaloneScript { get; } - - bool isScriptInstanced { get; } - - JSScriptRef scriptRef { get; set; } - - JSContext ctx { get; } - - JSScriptProperties properties { get; } - - bool IsValid(); - - bool CreateScriptInstance(); - } -} - -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/ScriptEditorSupport.cs.meta b/unity/quickjs/Runtime/Source/Unity/ScriptEditorSupport.cs.meta deleted file mode 100644 index e253b747..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ScriptEditorSupport.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 478a5f29c4c1cea4390bb5f0667f12cb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/ScriptInstancedObject.cs b/unity/quickjs/Runtime/Source/Unity/ScriptInstancedObject.cs deleted file mode 100644 index ce28388b..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ScriptInstancedObject.cs +++ /dev/null @@ -1,16 +0,0 @@ -#if !JSB_UNITYLESS - -namespace QuickJS.Unity -{ - using Native; - - public interface IScriptInstancedObject - { - int IsInstanceOf(JSValue ctor); - JSValue CloneValue(); - JSValue SetScriptInstance(JSContext ctx, JSValue ctor, bool execAwake); - void ReleaseScriptInstance(); - } -} - -#endif // JSB_UNITYLESS diff --git a/unity/quickjs/Runtime/Source/Unity/ScriptInstancedObject.cs.meta b/unity/quickjs/Runtime/Source/Unity/ScriptInstancedObject.cs.meta deleted file mode 100644 index 5a4814d6..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ScriptInstancedObject.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3b467906077fb574dad9d6134addf58b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/ScriptableObjectFix.cs b/unity/quickjs/Runtime/Source/Unity/ScriptableObjectFix.cs deleted file mode 100644 index 72f4e964..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ScriptableObjectFix.cs +++ /dev/null @@ -1,91 +0,0 @@ -#if !JSB_UNITYLESS -#if UNITY_EDITOR -using System; - -namespace QuickJS.Unity -{ - using Native; - using Binding; - using UnityEngine; - - public static class ScriptableObjectFix - { - [MonoPInvokeCallbackAttribute(typeof(JSCFunction))] - public static JSValue BindStatic_CreateInstance(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) - { - try - { - if (argc == 1) - { - System.Type arg_type; - if (!Values.js_get_classvalue(ctx, argv[0], out arg_type)) - { - throw new ParameterException(typeof(ScriptableObject), "CreateInstance", typeof(System.Type), 0); - } - var inject = js_create_instance(ctx, argv[0], arg_type); - if (!inject.IsUndefined()) - { - return inject; - } - var ret = ScriptableObject.CreateInstance(arg_type); - return Values.js_push_classvalue(ctx, ret); - } - - throw new NotImplementedException(); - } - catch (Exception exception) - { - return ctx.ThrowException(exception); - } - } - - public static JSValue js_create_instance(JSContext ctx, JSValue ctor, Type type) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - var typeDB = ScriptEngine.GetTypeDB(ctx); - if (!typeDB.IsConstructorEquals(type, ctor)) - { - Type bridgeType = null; - if (type == typeof(UnityEditor.EditorWindow)) - { - bridgeType = typeof(JSEditorWindow); - } - else if (type == typeof(ScriptableObject)) - { - bridgeType = typeof(JSScriptableObject); - } - else if (type == typeof(MonoBehaviour)) - { - bridgeType = typeof(JSBehaviourFull); - } - - if (bridgeType != null) - { - var scriptableObject = (IScriptInstancedObject)ScriptableObject.CreateInstance(bridgeType); - var bridgeValue = scriptableObject.SetScriptInstance(ctx, ctor, false); - - if (!bridgeValue.IsUndefined()) - { - return bridgeValue; - } - - scriptableObject.ReleaseScriptInstance(); - Object.DestroyImmediate((Object)scriptableObject); - return JSApi.JS_NULL; - } - } - } - } - - // fallthrough - return JSApi.JS_UNDEFINED; - } - } -} - -#endif // !JSB_UNITYLESS -#endif // UNITY_EDITOR \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Unity/ScriptableObjectFix.cs.meta b/unity/quickjs/Runtime/Source/Unity/ScriptableObjectFix.cs.meta deleted file mode 100644 index 4f502878..00000000 --- a/unity/quickjs/Runtime/Source/Unity/ScriptableObjectFix.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 97a26f8a71e75c1409bbfc5525cf9d69 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Unity/UnityCoroutineContext.cs b/unity/quickjs/Runtime/Source/Unity/UnityCoroutineContext.cs deleted file mode 100644 index 387c5250..00000000 --- a/unity/quickjs/Runtime/Source/Unity/UnityCoroutineContext.cs +++ /dev/null @@ -1,115 +0,0 @@ -#if !JSB_UNITYLESS -using System.Collections; - -namespace QuickJS.Unity -{ - using System; - using QuickJS.Native; - using QuickJS.Utils; - using UnityEngine; - - public class UnityCoroutineContext : MonoBehaviour - { - internal void RunTask(object awaitObject, ScriptContext context, SafeRelease safeRelease) - { - if (awaitObject is IEnumerator) - { - StartCoroutine(_Pending(awaitObject as IEnumerator, context, safeRelease)); - } - else - { - StartCoroutine(_Pending(awaitObject as UnityEngine.YieldInstruction, context, safeRelease)); - } - } - - private IEnumerator _Pending(UnityEngine.YieldInstruction instruction, ScriptContext context, SafeRelease safeRelease) - { - yield return instruction; - - if (!context.IsValid()) - { - yield break; - } - - if (!safeRelease.isValid) - { - context.GetLogger()?.Write(LogLevel.Error, "pormise func has already been released"); - yield break; - } - - var ctx = (JSContext)context; - var backVal = Binding.Values.js_push_classvalue(ctx, instruction); - if (backVal.IsException()) - { - ctx.print_exception(); - safeRelease.Release(); - yield break; - } - - var rval = JSApi.Call(ctx, safeRelease[0], JSApi.JS_UNDEFINED, backVal); - JSApi.JS_FreeValue(ctx, backVal); - if (rval.IsException()) - { - ctx.print_exception(); - safeRelease.Release(); - yield break; - } - - JSApi.JS_FreeValue(ctx, rval); - safeRelease.Release(); - - context.GetRuntime().ExecutePendingJob(); - } - - private IEnumerator _Pending(IEnumerator enumerator, ScriptContext context, SafeRelease safeRelease) - { - while (enumerator.MoveNext()) - { - var current = enumerator.Current; - - if (current is UnityEngine.YieldInstruction) - { - yield return current; - } - - yield return null; - } - - if (!context.IsValid()) - { - yield break; - } - - if (!safeRelease.isValid) - { - context.GetLogger()?.Write(LogLevel.Error, "pormise func has already been released"); - yield break; - } - - var ctx = (JSContext)context; - var backVal = Binding.Values.js_push_var(ctx, enumerator.Current); - if (backVal.IsException()) - { - ctx.print_exception(); - safeRelease.Release(); - yield break; - } - - var rval = JSApi.Call(ctx, safeRelease[0], JSApi.JS_UNDEFINED, backVal); - JSApi.JS_FreeValue(ctx, backVal); - if (rval.IsException()) - { - ctx.print_exception(); - safeRelease.Release(); - yield break; - } - - JSApi.JS_FreeValue(ctx, rval); - safeRelease.Release(); - - context.GetRuntime().ExecutePendingJob(); - } - } -} - -#endif diff --git a/unity/quickjs/Runtime/Source/Unity/UnityCoroutineContext.cs.meta b/unity/quickjs/Runtime/Source/Unity/UnityCoroutineContext.cs.meta deleted file mode 100644 index 48b938bf..00000000 --- a/unity/quickjs/Runtime/Source/Unity/UnityCoroutineContext.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f27026bc3190b8d44a5f07351b7d641e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From 763dfab0e90460e9b97fe130b6530bb0f3ffcae9 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 18:09:38 +0300 Subject: [PATCH 06/58] refactor(quickjs): delete the dead Unity struct marshalling Settles the open question in MIGRATION.md, and more cheaply than the experiment it proposed. Fifteen of the sixteen `Binding/ValueTypes/Values_*.cs` files are whole-file `#if !JSB_UNITYLESS`, so the Vector/Color/Matrix fast paths that account for most of the shim call-sites were never compiled. No experiment needed -- the preprocessor had already answered it. `Values_DateTime.cs` stays: System.DateTime needs no Unity, and it is the only live file in the directory. `Values_inject.cs` goes with them, being dead for the same reason and the only other consumer of JSBehaviour. This is what shrinks phase 2. jsb_get/set_float_4, _floats, _int_1..3, _byte_4 and jsb_get_payload_header lose every call-site here. --- .../Binding/ValueTypes/Values_Bounds.cs | 77 ---- .../Binding/ValueTypes/Values_Bounds.cs.meta | 11 - .../Binding/ValueTypes/Values_BoundsInt.cs | 80 ---- .../ValueTypes/Values_BoundsInt.cs.meta | 11 - .../Source/Binding/ValueTypes/Values_Color.cs | 121 ------ .../Binding/ValueTypes/Values_Color.cs.meta | 11 - .../Binding/ValueTypes/Values_Color32.cs | 101 ----- .../Binding/ValueTypes/Values_Color32.cs.meta | 11 - .../Binding/ValueTypes/Values_LayerMask.cs | 85 ---- .../ValueTypes/Values_LayerMask.cs.meta | 11 - .../Binding/ValueTypes/Values_Matrix4x4.cs | 89 ----- .../ValueTypes/Values_Matrix4x4.cs.meta | 11 - .../Binding/ValueTypes/Values_Preserve.cs | 16 - .../ValueTypes/Values_Preserve.cs.meta | 11 - .../Binding/ValueTypes/Values_Quaternion.cs | 59 --- .../ValueTypes/Values_Quaternion.cs.meta | 11 - .../Source/Binding/ValueTypes/Values_Ray.cs | 65 --- .../Binding/ValueTypes/Values_Ray.cs.meta | 11 - .../Source/Binding/ValueTypes/Values_Rect.cs | 71 ---- .../Binding/ValueTypes/Values_Rect.cs.meta | 11 - .../Binding/ValueTypes/Values_Vector2.cs | 101 ----- .../Binding/ValueTypes/Values_Vector2.cs.meta | 11 - .../Binding/ValueTypes/Values_Vector2Int.cs | 59 --- .../ValueTypes/Values_Vector2Int.cs.meta | 11 - .../Binding/ValueTypes/Values_Vector3.cs | 101 ----- .../Binding/ValueTypes/Values_Vector3.cs.meta | 11 - .../Binding/ValueTypes/Values_Vector3Int.cs | 59 --- .../ValueTypes/Values_Vector3Int.cs.meta | 11 - .../Binding/ValueTypes/Values_Vector4.cs | 72 ---- .../Binding/ValueTypes/Values_Vector4.cs.meta | 11 - .../Runtime/Source/Binding/Values_inject.cs | 371 ------------------ .../Source/Binding/Values_inject.cs.meta | 3 - 32 files changed, 1695 deletions(-) delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Bounds.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Bounds.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_BoundsInt.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_BoundsInt.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color32.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color32.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_LayerMask.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_LayerMask.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Matrix4x4.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Matrix4x4.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Preserve.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Preserve.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Quaternion.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Quaternion.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Ray.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Ray.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Rect.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Rect.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2Int.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2Int.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3Int.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3Int.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector4.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector4.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/Values_inject.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/Values_inject.cs.meta diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Bounds.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Bounds.cs deleted file mode 100644 index 932b97ac..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Bounds.cs +++ /dev/null @@ -1,77 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static unsafe JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Bounds o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(float) * 6); - if (!JSApi.JS_IsException(val)) - { - js_rebind_this(ctx, val, ref o); - } - return val; - } - - public static unsafe bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Bounds o) - { - var data = stackalloc float[6]; - var center = o.center; - var size = o.size; - - JSApi.MemoryCopy(¢er.x, data, sizeof(float) * 3, sizeof(float) * 3); - JSApi.MemoryCopy(&size.x, data + 3, sizeof(float) * 3, sizeof(float) * 3); - return JSApi.jsb_set_floats(ctx, this_obj, 6, data) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, Bounds o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 6); - js_rebind_this(ctx, val, ref o); - return val; - } - - public static JSValue js_push_structvalue(JSContext ctx, Bounds? o) - { - if (o == null) - { - return JSApi.JS_NULL; - } - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 6); - var v = (Bounds)o; - js_rebind_this(ctx, val, ref v); - return val; - } - - public static unsafe bool js_get_structvalue(JSContext ctx, JSValue val, out Bounds o) - { - var data = stackalloc float[6]; - var ret = JSApi.jsb_get_floats(ctx, val, 6, data); - o = new Bounds(new Vector3(data[0], data[1], data[2]), new Vector3(data[3], data[4], data[5])); - return ret != 0; - } - - public static unsafe bool js_get_structvalue(JSContext ctx, JSValue val, out Bounds? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - var data = stackalloc float[6]; - var ret = JSApi.jsb_get_floats(ctx, val, 6, data); - o = new Bounds(new Vector3(data[0], data[1], data[2]), new Vector3(data[3], data[4], data[5])); - return ret != 0; - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Bounds.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Bounds.cs.meta deleted file mode 100644 index 272cd332..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Bounds.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a5c7e1e4ef201e248a1a5d67efb46fa9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_BoundsInt.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_BoundsInt.cs deleted file mode 100644 index 0cefcaaa..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_BoundsInt.cs +++ /dev/null @@ -1,80 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static unsafe JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, BoundsInt o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(int) * 6); - if (!JSApi.JS_IsException(val)) - { - js_rebind_this(ctx, val, ref o); - } - return val; - } - - public static unsafe bool js_rebind_this(JSContext ctx, JSValue this_obj, ref BoundsInt o) - { - var data = stackalloc int[6]; - var position = o.position; - var size = o.size; - data[0] = position.x; - data[1] = position.y; - data[2] = position.z; - data[3] = size.x; - data[4] = size.y; - data[5] = size.z; - return JSApi.jsb_set_bytes(ctx, this_obj, sizeof(int) * 6, (byte*)data) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, BoundsInt o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(int) * 6); - js_rebind_this(ctx, val, ref o); - return val; - } - - public static JSValue js_push_structvalue(JSContext ctx, BoundsInt? o) - { - if (o == null) - { - return JSApi.JS_NULL; - } - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(int) * 6); - var v = (BoundsInt)o; - js_rebind_this(ctx, val, ref v); - return val; - } - - public static unsafe bool js_get_structvalue(JSContext ctx, JSValue val, out BoundsInt o) - { - var data = stackalloc int[6]; - var ret = JSApi.jsb_get_bytes(ctx, val, sizeof(int) * 6, (byte*)data); - o = new BoundsInt(new Vector3Int(data[0], data[1], data[2]), new Vector3Int(data[3], data[4], data[5])); - return ret != 0; - } - - public static unsafe bool js_get_structvalue(JSContext ctx, JSValue val, out BoundsInt? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - var data = stackalloc int[6]; - var ret = JSApi.jsb_get_bytes(ctx, val, sizeof(int) * 6, (byte*)data); - o = new BoundsInt(new Vector3Int(data[0], data[1], data[2]), new Vector3Int(data[3], data[4], data[5])); - return ret != 0; - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_BoundsInt.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_BoundsInt.cs.meta deleted file mode 100644 index 4eb32093..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_BoundsInt.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9fb597c76c37c4a40b015e83603b2e6f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color.cs deleted file mode 100644 index f230dc54..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color.cs +++ /dev/null @@ -1,121 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Color o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(float) * 4); - if (!JSApi.JS_IsException(val)) - { - JSApi.jsb_set_float_4(ctx, val, o.r, o.g, o.b, o.a); - } - return val; - } - - public static bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Color o) - { - return JSApi.jsb_set_float_4(ctx, this_obj, o.r, o.g, o.b, o.a) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, Color o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 4); - JSApi.jsb_set_float_4(ctx, val, o.r, o.g, o.b, o.a); - return val; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Color o) - { - float r, g, b, a; - var ret = JSApi.jsb_get_float_4(ctx, val, out r, out g, out b, out a); - if (ret != 0) - { - o = new Color(r, g, b, a); - return true; - } - - float[] batch; - if (js_get_primitive(ctx, val, out batch)) - { - var len = batch.Length; - switch (len) - { - case 4: o = new Color(batch[0], batch[1], batch[2], batch[3]); return true; - case 3: o = new Color(batch[0], batch[1], batch[2]); return true; - case 2: o = new Color(batch[0], batch[1], 1.0f); return true; - case 1: o = new Color(batch[0], 1.0f, 1.0f); return true; - default: o = new Color(); return true; - } - } - o = new Color(); - return false; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Color? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - - Color v; - var rval = js_get_structvalue(ctx, val, out v); - o = v; - return rval; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Color[] o) - { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) - { - var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); - if (JSApi.JS_IsException(lengthVal)) - { - o = null; - return WriteScriptError(ctx); - } - int length; - JSApi.JS_ToInt32(ctx, out length, lengthVal); - JSApi.JS_FreeValue(ctx, lengthVal); - o = new Color[length]; - for (var i = 0U; i < length; i++) - { - var eVal = JSApi.JS_GetPropertyUint32(ctx, val, i); - Color e; - if (js_get_structvalue(ctx, eVal, out e)) - { - o[i] = e; - JSApi.JS_FreeValue(ctx, eVal); - } - else - { - o = null; - JSApi.JS_FreeValue(ctx, eVal); - return false; - } - } - return true; - } - - if (isArray == -1) - { - o = null; - return false; - } - - return js_get_classvalue(ctx, val, out o); - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color.cs.meta deleted file mode 100644 index 232d8fa6..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f8fe6072236ac034db9b80c4248add3d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color32.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color32.cs deleted file mode 100644 index 1c3d6cb7..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color32.cs +++ /dev/null @@ -1,101 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Color32 o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(byte) * 4); - if (!JSApi.JS_IsException(val)) - { - JSApi.jsb_set_byte_4(ctx, val, o.r, o.g, o.b, o.a); - } - return val; - } - - public static bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Color32 o) - { - return JSApi.jsb_set_byte_4(ctx, this_obj, o.r, o.g, o.b, o.a) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, Color32 o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(byte) * 4); - JSApi.jsb_set_byte_4(ctx, val, o.r, o.g, o.b, o.a); - return val; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Color32 o) - { - byte r, g, b, a; - var ret = JSApi.jsb_get_byte_4(ctx, val, out r, out g, out b, out a); - o = new Color32((byte)r, (byte)g, (byte)b, (byte)a); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Color32? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - byte r, g, b, a; - var ret = JSApi.jsb_get_byte_4(ctx, val, out r, out g, out b, out a); - o = new Color32((byte)r, (byte)g, (byte)b, (byte)a); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Color32[] o) - { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) - { - var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); - if (JSApi.JS_IsException(lengthVal)) - { - o = null; - return WriteScriptError(ctx); - } - int length; - JSApi.JS_ToInt32(ctx, out length, lengthVal); - JSApi.JS_FreeValue(ctx, lengthVal); - o = new Color32[length]; - for (var i = 0U; i < length; i++) - { - var eVal = JSApi.JS_GetPropertyUint32(ctx, val, i); - Color32 e; - if (js_get_structvalue(ctx, eVal, out e)) - { - o[i] = e; - JSApi.JS_FreeValue(ctx, eVal); - } - else - { - o = null; - JSApi.JS_FreeValue(ctx, eVal); - return false; - } - } - return true; - } - - if (isArray == -1) - { - o = null; - return false; - } - - return js_get_classvalue(ctx, val, out o); - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color32.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color32.cs.meta deleted file mode 100644 index 28a40b4e..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Color32.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3fe12a0adc003614081c1c3ef9779ca8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_LayerMask.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_LayerMask.cs deleted file mode 100644 index d608ef28..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_LayerMask.cs +++ /dev/null @@ -1,85 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, LayerMask o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(int) * 1); - if (!JSApi.JS_IsException(val)) - { - JSApi.jsb_set_int_1(ctx, val, o.value); - } - return val; - } - - public static bool js_rebind_this(JSContext ctx, JSValue this_obj, ref LayerMask o) - { - return JSApi.jsb_set_int_1(ctx, this_obj, o.value) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, LayerMask o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(int) * 1); - JSApi.jsb_set_int_1(ctx, val, o.value); - return val; - } - - public static JSValue js_push_structvalue(JSContext ctx, LayerMask? o) - { - if (o == null) - { - return JSApi.JS_NULL; - } - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(int) * 1); - JSApi.jsb_set_int_1(ctx, val, ((LayerMask)o).value); - return val; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out LayerMask o) - { - int pres; - if (JSApi.jsb_get_int_1(ctx, val, out pres) == 0) - { - if (JSApi.JS_ToInt32(ctx, out pres, val) < 0) - { - o = (LayerMask)0; - return false; - } - } - o = (LayerMask)pres; - return true; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out LayerMask? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - int pres; - if (JSApi.jsb_get_int_1(ctx, val, out pres) == 0) - { - if (JSApi.JS_ToInt32(ctx, out pres, val) < 0) - { - o = (LayerMask)0; - return false; - } - } - o = (LayerMask)pres; - return true; - } - - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_LayerMask.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_LayerMask.cs.meta deleted file mode 100644 index c695ad9e..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_LayerMask.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 735a83464cc90234f9bc371a16b5847d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Matrix4x4.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Matrix4x4.cs deleted file mode 100644 index 7588c264..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Matrix4x4.cs +++ /dev/null @@ -1,89 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static unsafe JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Matrix4x4 o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(float) * 4 * 4); - if (!JSApi.JS_IsException(val)) - { - js_rebind_this(ctx, val, ref o); - } - return val; - } - - public static unsafe bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Matrix4x4 o) - { - var _matrix_floats_buffer = stackalloc float[16]; - - _matrix_floats_buffer[0] = o.m00; - _matrix_floats_buffer[1] = o.m10; - _matrix_floats_buffer[2] = o.m20; - _matrix_floats_buffer[3] = o.m30; - - _matrix_floats_buffer[4] = o.m01; - _matrix_floats_buffer[5] = o.m11; - _matrix_floats_buffer[6] = o.m21; - _matrix_floats_buffer[7] = o.m31; - - _matrix_floats_buffer[8] = o.m02; - _matrix_floats_buffer[9] = o.m12; - _matrix_floats_buffer[10] = o.m22; - _matrix_floats_buffer[11] = o.m32; - - _matrix_floats_buffer[12] = o.m03; - _matrix_floats_buffer[13] = o.m13; - _matrix_floats_buffer[14] = o.m23; - _matrix_floats_buffer[15] = o.m33; - - return JSApi.jsb_set_floats(ctx, this_obj, 4 * 4, _matrix_floats_buffer) == 1; - } - - public static unsafe JSValue js_push_structvalue(JSContext ctx, Matrix4x4 o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 4 * 4); - - js_rebind_this(ctx, val, ref o); - return val; - } - - public static unsafe bool js_get_structvalue(JSContext ctx, JSValue val, out Matrix4x4 o) - { - var _matrix_floats_buffer = stackalloc float[16]; - var ret = JSApi.jsb_get_floats(ctx, val, 16, _matrix_floats_buffer); - var c0 = new Vector4(_matrix_floats_buffer[0], _matrix_floats_buffer[1], _matrix_floats_buffer[2], _matrix_floats_buffer[3]); - var c1 = new Vector4(_matrix_floats_buffer[4], _matrix_floats_buffer[5], _matrix_floats_buffer[6], _matrix_floats_buffer[7]); - var c2 = new Vector4(_matrix_floats_buffer[8], _matrix_floats_buffer[8], _matrix_floats_buffer[10], _matrix_floats_buffer[11]); - var c3 = new Vector4(_matrix_floats_buffer[12], _matrix_floats_buffer[13], _matrix_floats_buffer[14], _matrix_floats_buffer[15]); - o = new Matrix4x4(c0, c1, c2, c3); - return ret != 0; - } - - public static unsafe bool js_get_structvalue(JSContext ctx, JSValue val, out Matrix4x4? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - var _matrix_floats_buffer = stackalloc float[16]; - var ret = JSApi.jsb_get_floats(ctx, val, 16, _matrix_floats_buffer); - var c0 = new Vector4(_matrix_floats_buffer[0], _matrix_floats_buffer[1], _matrix_floats_buffer[2], _matrix_floats_buffer[3]); - var c1 = new Vector4(_matrix_floats_buffer[4], _matrix_floats_buffer[5], _matrix_floats_buffer[6], _matrix_floats_buffer[7]); - var c2 = new Vector4(_matrix_floats_buffer[8], _matrix_floats_buffer[8], _matrix_floats_buffer[10], _matrix_floats_buffer[11]); - var c3 = new Vector4(_matrix_floats_buffer[12], _matrix_floats_buffer[13], _matrix_floats_buffer[14], _matrix_floats_buffer[15]); - o = new Matrix4x4(c0, c1, c2, c3); - return ret != 0; - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Matrix4x4.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Matrix4x4.cs.meta deleted file mode 100644 index e8070488..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Matrix4x4.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b4fb7ea333903cb40a21e2b38f9bed62 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Preserve.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Preserve.cs deleted file mode 100644 index 1b7fe5bf..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Preserve.cs +++ /dev/null @@ -1,16 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - [UnityEngine.Scripting.Preserve] - public partial class Values - { - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Preserve.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Preserve.cs.meta deleted file mode 100644 index 2e48e5d6..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Preserve.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6976f80e0bd861a43a4609eb549b59e2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Quaternion.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Quaternion.cs deleted file mode 100644 index b6f96e09..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Quaternion.cs +++ /dev/null @@ -1,59 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Quaternion o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(float) * 4); - if (!JSApi.JS_IsException(val)) - { - JSApi.jsb_set_float_4(ctx, val, o.x, o.y, o.z, o.w); - } - return val; - } - - public static bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Quaternion o) - { - return JSApi.jsb_set_float_4(ctx, this_obj, o.x, o.y, o.z, o.w) == 1; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Quaternion o) - { - float x, y, z, w; - var ret = JSApi.jsb_get_float_4(ctx, val, out x, out y, out z, out w); - o = new Quaternion(x, y, z, w); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Quaternion? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - float x, y, z, w; - var ret = JSApi.jsb_get_float_4(ctx, val, out x, out y, out z, out w); - o = new Quaternion(x, y, z, w); - return ret != 0; - } - - public static JSValue js_push_structvalue(JSContext ctx, Quaternion o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 4); - JSApi.jsb_set_float_4(ctx, val, o.x, o.y, o.z, o.w); - return val; - } - - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Quaternion.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Quaternion.cs.meta deleted file mode 100644 index 4dbd0b6d..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Quaternion.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8dac0802d186d9445b809e36ba6822f7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Ray.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Ray.cs deleted file mode 100644 index 6991b6a2..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Ray.cs +++ /dev/null @@ -1,65 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Ray o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(float) * 6); - if (!JSApi.JS_IsException(val)) - { - js_rebind_this(ctx, val, ref o); - } - return val; - } - - public static unsafe bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Ray o) - { - var buffer = stackalloc float[6]; - var origin = o.origin; - var direction = o.direction; - buffer[0] = origin.x; - buffer[1] = origin.y; - buffer[2] = origin.z; - buffer[3] = direction.x; - buffer[4] = direction.y; - buffer[5] = direction.z; - return JSApi.jsb_set_floats(ctx, this_obj, 6, buffer) == 1; - } - - public static unsafe bool js_get_structvalue(JSContext ctx, JSValue val, out Ray o) - { - var buffer = stackalloc float[6]; - var ret = JSApi.jsb_get_floats(ctx, val, 6, buffer); - o = new Ray(new Vector3(buffer[0], buffer[1], buffer[2]), - new Vector3(buffer[3], buffer[4], buffer[5])); - return ret != 0; - } - - public static unsafe JSValue js_push_structvalue(JSContext ctx, Ray o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 6); - var buffer = stackalloc float[6]; - var origin = o.origin; - var direction = o.direction; - buffer[0] = origin.x; - buffer[1] = origin.y; - buffer[2] = origin.z; - buffer[3] = direction.x; - buffer[4] = direction.y; - buffer[5] = direction.z; - JSApi.jsb_set_floats(ctx, val, 6, buffer); - return val; - } - - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Ray.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Ray.cs.meta deleted file mode 100644 index e3cd95e9..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Ray.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6673d31143d79ab408251cf607a63f2d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Rect.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Rect.cs deleted file mode 100644 index a7d0729b..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Rect.cs +++ /dev/null @@ -1,71 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Rect o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(float) * 4); - if (!JSApi.JS_IsException(val)) - { - JSApi.jsb_set_float_4(ctx, val, o.x, o.y, o.width, o.height); - } - return val; - } - - public static bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Rect o) - { - return JSApi.jsb_set_float_4(ctx, this_obj, o.x, o.y, o.width, o.height) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, Rect o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 4); - JSApi.jsb_set_float_4(ctx, val, o.x, o.y, o.width, o.height); - return val; - } - - public static JSValue js_push_structvalue(JSContext ctx, Rect? o) - { - if (o == null) - { - return JSApi.JS_NULL; - } - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 4); - var v = (Rect)o; - JSApi.jsb_set_float_4(ctx, val, v.x, v.y, v.width, v.height); - return val; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Rect o) - { - float x, y, z, w; - var ret = JSApi.jsb_get_float_4(ctx, val, out x, out y, out z, out w); - o = new Rect(x, y, z, w); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Rect? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - float x, y, z, w; - var ret = JSApi.jsb_get_float_4(ctx, val, out x, out y, out z, out w); - o = new Rect(x, y, z, w); - return ret != 0; - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Rect.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Rect.cs.meta deleted file mode 100644 index 74fc4a24..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Rect.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3f18d133f0b50a84ea5a716fd3e12cd4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2.cs deleted file mode 100644 index f075ee62..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2.cs +++ /dev/null @@ -1,101 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Vector2 o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(float) * 2); - if (!JSApi.JS_IsException(val)) - { - JSApi.jsb_set_float_2(ctx, val, o.x, o.y); - } - return val; - } - - public static bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Vector2 o) - { - return JSApi.jsb_set_float_2(ctx, this_obj, o.x, o.y) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, Vector2 o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 2); - JSApi.jsb_set_float_2(ctx, val, o.x, o.y); - return val; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector2 o) - { - float x, y; - var ret = JSApi.jsb_get_float_2(ctx, val, out x, out y); - o = new Vector2(x, y); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector2? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - float x, y; - var ret = JSApi.jsb_get_float_2(ctx, val, out x, out y); - o = new Vector2(x, y); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector2[] o) - { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) - { - var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); - if (JSApi.JS_IsException(lengthVal)) - { - o = null; - return WriteScriptError(ctx); - } - int length; - JSApi.JS_ToInt32(ctx, out length, lengthVal); - JSApi.JS_FreeValue(ctx, lengthVal); - o = new Vector2[length]; - for (var i = 0U; i < length; i++) - { - var eVal = JSApi.JS_GetPropertyUint32(ctx, val, i); - Vector2 e; - if (js_get_structvalue(ctx, eVal, out e)) - { - o[i] = e; - JSApi.JS_FreeValue(ctx, eVal); - } - else - { - o = null; - JSApi.JS_FreeValue(ctx, eVal); - return false; - } - } - return true; - } - - if (isArray == -1) - { - o = null; - return false; - } - - return js_get_classvalue(ctx, val, out o); - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2.cs.meta deleted file mode 100644 index 170de6f6..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c348cebd3a730004a848e4866c1a0842 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2Int.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2Int.cs deleted file mode 100644 index 92f06ea8..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2Int.cs +++ /dev/null @@ -1,59 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Vector2Int o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(int) * 2); - if (!JSApi.JS_IsException(val)) - { - JSApi.jsb_set_int_2(ctx, val, o.x, o.y); - } - return val; - } - - public static bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Vector2Int o) - { - return JSApi.jsb_set_int_2(ctx, this_obj, o.x, o.y) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, Vector2Int o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(int) * 2); - JSApi.jsb_set_int_2(ctx, val, o.x, o.y); - return val; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector2Int o) - { - int x, y; - var ret = JSApi.jsb_get_int_2(ctx, val, out x, out y); - o = new Vector2Int(x, y); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector2Int? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - int x, y; - var ret = JSApi.jsb_get_int_2(ctx, val, out x, out y); - o = new Vector2Int(x, y); - return ret != 0; - } - - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2Int.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2Int.cs.meta deleted file mode 100644 index 4321d225..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector2Int.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 43d2b1773da9e104daffc4a6f6cf4656 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3.cs deleted file mode 100644 index 32551ac3..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3.cs +++ /dev/null @@ -1,101 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Vector3 o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(float) * 3); - if (!JSApi.JS_IsException(val)) - { - JSApi.jsb_set_float_3(ctx, val, o.x, o.y, o.z); - } - return val; - } - - public static bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Vector3 o) - { - return JSApi.jsb_set_float_3(ctx, this_obj, o.x, o.y, o.z) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, Vector3 o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 3); - JSApi.jsb_set_float_3(ctx, val, o.x, o.y, o.z); - return val; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector3 o) - { - float x, y, z; - var ret = JSApi.jsb_get_float_3(ctx, val, out x, out y, out z); - o = new Vector3(x, y, z); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector3? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - float x, y, z; - var ret = JSApi.jsb_get_float_3(ctx, val, out x, out y, out z); - o = new Vector3(x, y, z); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector3[] o) - { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) - { - var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); - if (JSApi.JS_IsException(lengthVal)) - { - o = null; - return WriteScriptError(ctx); - } - int length; - JSApi.JS_ToInt32(ctx, out length, lengthVal); - JSApi.JS_FreeValue(ctx, lengthVal); - o = new Vector3[length]; - for (var i = 0U; i < length; i++) - { - var eVal = JSApi.JS_GetPropertyUint32(ctx, val, i); - Vector3 e; - if (js_get_structvalue(ctx, eVal, out e)) - { - o[i] = e; - JSApi.JS_FreeValue(ctx, eVal); - } - else - { - o = null; - JSApi.JS_FreeValue(ctx, eVal); - return false; - } - } - return true; - } - - if (isArray == -1) - { - o = null; - return false; - } - - return js_get_classvalue(ctx, val, out o); - } - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3.cs.meta deleted file mode 100644 index 6d381c99..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dcee99b194f31de46806e2f66c83be4f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3Int.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3Int.cs deleted file mode 100644 index 8012de7a..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3Int.cs +++ /dev/null @@ -1,59 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Vector3Int o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(int) * 3); - if (!JSApi.JS_IsException(val)) - { - JSApi.jsb_set_int_3(ctx, val, o.x, o.y, o.z); - } - return val; - } - - public static bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Vector3Int o) - { - return JSApi.jsb_set_int_3(ctx, this_obj, o.x, o.y, o.z) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, Vector3Int o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(int) * 3); - JSApi.jsb_set_int_3(ctx, val, o.x, o.y, o.z); - return val; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector3Int o) - { - int x, y, z; - var ret = JSApi.jsb_get_int_3(ctx, val, out x, out y, out z); - o = new Vector3Int(x, y, z); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector3Int? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - int x, y, z; - var ret = JSApi.jsb_get_int_3(ctx, val, out x, out y, out z); - o = new Vector3Int(x, y, z); - return ret != 0; - } - - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3Int.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3Int.cs.meta deleted file mode 100644 index b146b35f..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector3Int.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0e543a07a9631bc4891201abe723a6a1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector4.cs b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector4.cs deleted file mode 100644 index 2258db97..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector4.cs +++ /dev/null @@ -1,72 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - - public partial class Values - { - public static JSValue NewBridgeClassObject(JSContext ctx, JSValue new_target, Vector4 o, int type_id, bool disposable) - { - var val = JSApi.JSB_NewBridgeClassValue(ctx, new_target, sizeof(float) * 4); - if (!JSApi.JS_IsException(val)) - { - JSApi.jsb_set_float_4(ctx, val, o.x, o.y, o.z, o.w); - } - return val; - } - - public static bool js_rebind_this(JSContext ctx, JSValue this_obj, ref Vector4 o) - { - return JSApi.jsb_set_float_4(ctx, this_obj, o.x, o.y, o.z, o.w) == 1; - } - - public static JSValue js_push_structvalue(JSContext ctx, Vector4 o) - { - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 4); - JSApi.jsb_set_float_4(ctx, val, o.x, o.y, o.z, o.w); - return val; - } - - public static JSValue js_push_structvalue(JSContext ctx, Vector4? o) - { - if (o == null) - { - return JSApi.JS_NULL; - } - var proto = FindPrototypeOf(ctx); - JSValue val = JSApi.jsb_new_bridge_value(ctx, proto, sizeof(float) * 4); - var v = (Vector4)o; - JSApi.jsb_set_float_4(ctx, val, v.x, v.y, v.z, v.w); - return val; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector4 o) - { - float x, y, z, w; - var ret = JSApi.jsb_get_float_4(ctx, val, out x, out y, out z, out w); - o = new Vector4(x, y, z, w); - return ret != 0; - } - - public static bool js_get_structvalue(JSContext ctx, JSValue val, out Vector4? o) - { - if (val.IsNullish()) - { - o = null; - return true; - } - float x, y, z, w; - var ret = JSApi.jsb_get_float_4(ctx, val, out x, out y, out z, out w); - o = new Vector4(x, y, z, w); - return ret != 0; - } - - } -} -#endif \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector4.cs.meta b/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector4.cs.meta deleted file mode 100644 index a386f769..00000000 --- a/unity/quickjs/Runtime/Source/Binding/ValueTypes/Values_Vector4.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4871cd66988501f4b9923135cc5e3103 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/Values_inject.cs b/unity/quickjs/Runtime/Source/Binding/Values_inject.cs deleted file mode 100644 index f0f80c39..00000000 --- a/unity/quickjs/Runtime/Source/Binding/Values_inject.cs +++ /dev/null @@ -1,371 +0,0 @@ -#if !JSB_UNITYLESS -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace QuickJS.Binding -{ - using UnityEngine; - using Native; - using Unity; - - public partial class Values - { - // inject GameObject.AddComponent(Type); - public static JSValue _js_game_object_add_component(JSContext ctx, JSValue ctor, GameObject gameObject, Type type) - { - if (type == typeof(MonoBehaviour)) - { -#if UNITY_EDITOR - // JSBehaviour.Awake should not be executed in editor mode (not playing) - return JSBehaviour.SetScriptInstance(gameObject, ctx, ctor, UnityEditor.EditorApplication.isPlaying); -#else - return JSBehaviour.SetScriptInstance(gameObject, ctx, ctor, true); -#endif - } - - return JSApi.JS_UNDEFINED; - } - - public static JSValue _js_game_object_get_component(JSContext ctx, JSValue ctor, Component component, Type type) - { - return _js_game_object_get_component(ctx, ctor, component.gameObject, type); - } - - public static JSValue _js_game_object_get_component(JSContext ctx, JSValue ctor, GameObject gameObject, Type type) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - if (type == typeof(MonoBehaviour)) - { - var bridge = _get_component(gameObject, ctor); - if (bridge != null) - { - return bridge.CloneValue(); - } - - return JSApi.JS_NULL; // or return an empty array? - } - } - } - - return JSApi.JS_UNDEFINED; - } - - private static JSBehaviour _get_component(GameObject gameObject, JSValue ctor) - { - if (gameObject == null) - { - return null; - } - - var allBridges = gameObject.GetComponents(); - for (int i = 0, size = allBridges.Length; i < size; i++) - { - var bridge = allBridges[i]; - if (bridge.IsInstanceOf(ctor) == 1) - { - return bridge; - } - } - return null; - } - - private static JSBehaviour _get_component(Transform transform, JSValue ctor) - { - if (transform == null) - { - return null; - } - - var allBridges = transform.GetComponents(); - for (int i = 0, size = allBridges.Length; i < size; i++) - { - var bridge = allBridges[i]; - if (bridge.IsInstanceOf(ctor) == 1) - { - return bridge; - } - } - return null; - } - - private static JSBehaviour _get_component_in_children(Transform transform, JSValue ctor, bool includeInactive) - { - if (transform == null) - { - return null; - } - - if (includeInactive || transform.gameObject.activeInHierarchy) - { - var bridge = _get_component(transform, ctor); - if (bridge != null) - { - return bridge; - } - } - - var count = transform.childCount; - for (var i = 0; i < count; i++) - { - var child = _get_component_in_children(transform.GetChild(i), ctor, includeInactive); - if (child != null) - { - return child; - } - } - - return null; - } - - private static JSBehaviour _get_component_in_parent(Transform transform, JSValue ctor, bool includeInactive) - { - if (transform == null) - { - return null; - } - - if (includeInactive || transform.gameObject.activeInHierarchy) - { - var bridge = _get_component(transform, ctor); - if (bridge != null) - { - return bridge; - } - } - - if (transform.parent != null) - { - var parent = _get_component_in_parent(transform.parent, ctor, includeInactive); - if (parent != null) - { - return parent; - } - } - - return null; - } - - public static JSValue _js_game_object_get_component_in_children(JSContext ctx, JSValue ctor, Component component, Type type, bool includeInactive) - { - return _js_game_object_get_component_in_children(ctx, ctor, component.gameObject, type, includeInactive); - } - - public static JSValue _js_game_object_get_component_in_children(JSContext ctx, JSValue ctor, GameObject gameObject, Type type, bool includeInactive) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - if (type == typeof(MonoBehaviour)) - { - var bridge = _get_component_in_children(gameObject.transform, ctor, includeInactive); - if (bridge != null) - { - return bridge.CloneValue(); - } - - return JSApi.JS_NULL; // or return an empty array? - } - } - } - - return JSApi.JS_UNDEFINED; - } - - public static JSValue _js_game_object_get_component_in_parent(JSContext ctx, JSValue ctor, Component component, Type type, bool includeInactive) - { - return _js_game_object_get_component_in_parent(ctx, ctor, component.gameObject, type, includeInactive); - } - - public static JSValue _js_game_object_get_component_in_parent(JSContext ctx, JSValue ctor, GameObject gameObject, Type type, bool includeInactive) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - if (type == typeof(MonoBehaviour)) - { - var bridge = _get_component_in_parent(gameObject.transform, ctor, includeInactive); - if (bridge != null) - { - return bridge.CloneValue(); - } - - return JSApi.JS_NULL; // or return an empty array? - } - } - } - - return JSApi.JS_UNDEFINED; - } - - public static JSValue _js_game_object_get_components(JSContext ctx, JSValue ctor, Component component, Type type) - { - return _js_game_object_get_components(ctx, ctor, component.gameObject, type); - } - - public static JSValue _js_game_object_get_components(JSContext ctx, JSValue ctor, GameObject gameObject, Type type) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - if (type == typeof(MonoBehaviour)) - { - var array = JSApi.JS_NewArray(ctx); - var length = 0; - var allBridges = gameObject.GetComponents(); - for (int i = 0, size = allBridges.Length; i < size; i++) - { - var bridge = allBridges[i]; - var instanceOf = bridge.IsInstanceOf(ctor); - if (instanceOf == 1) - { - JSApi.JS_SetPropertyUint32(ctx, array, (uint)length, bridge.CloneValue()); - length++; - } - - if (instanceOf == -1) - { - ctx.print_exception(); - } - } - - return array; // or return an empty array? - } - } - } - - return JSApi.JS_UNDEFINED; - } - - public static JSValue _js_game_object_get_components(JSContext ctx, JSValue ctor, Component component, Type type, List results) - { - return _js_game_object_get_components(ctx, ctor, component.gameObject, type, results); - } - - public static JSValue _js_game_object_get_components(JSContext ctx, JSValue ctor, GameObject gameObject, Type type, List results) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - if (type == typeof(MonoBehaviour)) - { - var allBridges = gameObject.GetComponents(); - for (int i = 0, size = allBridges.Length; i < size; i++) - { - var bridge = allBridges[i]; - var instanceOf = bridge.IsInstanceOf(ctor); - if (instanceOf == 1) - { - results.Add(bridge); - } - - if (instanceOf == -1) - { - ctx.print_exception(); - } - } - - return JSApi.JS_NULL; - } - } - } - - return JSApi.JS_UNDEFINED; - } - - public static JSValue _js_game_object_get_components_in_children(JSContext ctx, JSValue ctor, Component component, Type type, bool includeInactive) - { - return _js_game_object_get_components_in_children(ctx, ctor, component.gameObject, type, includeInactive); - } - - public static JSValue _js_game_object_get_components_in_children(JSContext ctx, JSValue ctor, GameObject gameObject, Type type, bool includeInactive) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - if (type == typeof(MonoBehaviour)) - { - var array = JSApi.JS_NewArray(ctx); - var length = 0; - var allBridges = gameObject.GetComponentsInChildren(includeInactive); - for (int i = 0, size = allBridges.Length; i < size; i++) - { - var bridge = allBridges[i]; - var instanceOf = bridge.IsInstanceOf(ctor); - if (instanceOf == 1) - { - JSApi.JS_SetPropertyUint32(ctx, array, (uint)length, bridge.CloneValue()); - length++; - } - - if (instanceOf == -1) - { - ctx.print_exception(); - } - } - - return array; // or return an empty array? - } - } - } - - return JSApi.JS_UNDEFINED; - } - - public static JSValue _js_game_object_get_components_in_parent(JSContext ctx, JSValue ctor, Component component, Type type, bool includeInactive) - { - return _js_game_object_get_components_in_parent(ctx, ctor, component.gameObject, type, includeInactive); - } - - public static JSValue _js_game_object_get_components_in_parent(JSContext ctx, JSValue ctor, GameObject gameObject, Type type, bool includeInactive) - { - if (JSApi.JS_IsConstructor(ctx, ctor) == 1) - { - var header = JSApi.jsb_get_payload_header(ctx, ctor); - if (header.type_id == BridgeObjectType.None) // it's a plain js value - { - if (type == typeof(MonoBehaviour)) - { - var array = JSApi.JS_NewArray(ctx); - var length = 0; - var allBridges = gameObject.GetComponentsInParent(includeInactive); - for (int i = 0, size = allBridges.Length; i < size; i++) - { - var bridge = allBridges[i]; - var instanceOf = bridge.IsInstanceOf(ctor); - if (instanceOf == 1) - { - JSApi.JS_SetPropertyUint32(ctx, array, (uint)length, bridge.CloneValue()); - length++; - } - - if (instanceOf == -1) - { - ctx.print_exception(); - } - } - - return array; // or return an empty array? - } - } - } - - return JSApi.JS_UNDEFINED; - } - } -} -#endif diff --git a/unity/quickjs/Runtime/Source/Binding/Values_inject.cs.meta b/unity/quickjs/Runtime/Source/Binding/Values_inject.cs.meta deleted file mode 100644 index 0dd0365a..00000000 --- a/unity/quickjs/Runtime/Source/Binding/Values_inject.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 77e32cc4d3414afb91705af7fa949dd7 -timeCreated: 1591852994 \ No newline at end of file From a452ffcc646f20d957178037069ba40d5f5f6b1b Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 18:12:36 +0300 Subject: [PATCH 07/58] refactor(quickjs): drop the 18 shim declarations left with no callers With the Unity struct marshalling gone, the JSB_*/jsb_* surface measures 59 declarations, 41 with live callers and 18 with none. The 18 are the struct fast paths (jsb_get/set_float_2..4, _int_1..3, _byte_4, _floats) plus JSB_FreePayload and jsb_construct_bridge_object, which had no C# caller even before this branch. That sizes phase 2 exactly: 25 shim functions plus 16 JSB_ATOM_* to port, not the "18 to 41" the plan guessed from grep. The jslib still implements all 18 -- Plugins/QuickJS/WebGL/.source/jsbplugin.ts is the source of truth there and regenerating it belongs with the rest of the phase 4 WebGL work. Unused exports are harmless in the meantime. --- .../Source/Native/JSApi+StructValue.cs | 54 ------------------- 1 file changed, 54 deletions(-) diff --git a/unity/quickjs/Runtime/Source/Native/JSApi+StructValue.cs b/unity/quickjs/Runtime/Source/Native/JSApi+StructValue.cs index ea00cc69..3e4d4426 100644 --- a/unity/quickjs/Runtime/Source/Native/JSApi+StructValue.cs +++ b/unity/quickjs/Runtime/Source/Native/JSApi+StructValue.cs @@ -10,9 +10,6 @@ namespace QuickJS.Native public partial class JSApi { - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JSValue jsb_construct_bridge_object(JSContext ctx, JSValue proto, int32_t object_id); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSValue jsb_new_bridge_object(JSContext ctx, JSValue proto, int object_id); @@ -55,60 +52,9 @@ public static int32_t JSB_GetBridgeType(JSContext ctx, JSValue obj, JSAtom key) // !!! - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JSPayloadHeader JSB_FreePayload(JSContext ctx, JSValue val); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSPayloadHeader jsb_get_payload_header(JSContext ctx, JSValue val); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe JS_BOOL jsb_get_floats(JSContext ctx, JSValue val, int n, float* v0); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe JS_BOOL jsb_set_floats(JSContext ctx, JSValue val, int n, float* v0); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_get_float_2(JSContext ctx, JSValue val, out float v0, out float v1); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_set_float_2(JSContext ctx, JSValue val, float v0, float v1); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_get_float_3(JSContext ctx, JSValue val, out float v0, out float v1, out float v2); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_set_float_3(JSContext ctx, JSValue val, float v0, float v1, float v2); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_get_float_4(JSContext ctx, JSValue val, out float v0, out float v1, out float v2, out float v3); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_set_float_4(JSContext ctx, JSValue val, float v0, float v1, float v2, float v3); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_get_int_1(JSContext ctx, JSValue val, out int v0); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_set_int_1(JSContext ctx, JSValue val, int v0); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_get_int_2(JSContext ctx, JSValue val, out int v0, out int v1); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_set_int_2(JSContext ctx, JSValue val, int v0, int v1); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_get_int_3(JSContext ctx, JSValue val, out int v0, out int v1, out int v2); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_set_int_3(JSContext ctx, JSValue val, int v0, int v1, int v2); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_get_byte_4(JSContext ctx, JSValue val, out byte v0, out byte v1, out byte v2, out byte v3); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL jsb_set_byte_4(JSContext ctx, JSValue val, byte v0, byte v1, byte v2, byte v3); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern unsafe JS_BOOL jsb_get_bytes(JSContext ctx, JSValue val, int n, byte* v0); From 8f6f0cec2c02cab8a73d2e1a99da4fdb0e933a46 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 18:20:39 +0300 Subject: [PATCH 08/58] refactor(quickjs): resolve JSB_UNITYLESS away The symbol was supplied unconditionally by a `versionDefines` entry in each asmdef, so `#if !JSB_UNITYLESS` was permanently false and `#if JSB_UNITYLESS` permanently true. Substituting it and constant-folding removes 407 lines and, more usefully, 22 conditionals wrapped around the P/Invoke calling-convention attributes and delegate rooting in JSApi.cs -- exactly the declarations phase 3 has to rewrite one by one against the ng header. Compound conditions were simplified rather than resolved where the symbol was not decisive: `JSB_UNITYLESS && !UNITY_2019_1_OR_NEWER` becomes `!UNITY_2019_1_OR_NEWER`. Conditions not mentioning the symbol are left byte-for -byte alone, so the diff carries no incidental reformatting. Also drops the now-inert versionDefines entries. JSB_RUNTIME_REFLECT_BINDING stays: the asmdef defineConstraints still test it. Two mentions survive, both in comments, one of them inside a commented-out block that also names a declaration deleted earlier on this branch. --- .../BindingCallback/DefaultCodeGenCallback.cs | 10 ---- .../InMemoryCompilationBindingCallback.cs | 34 ----------- .../BindingCallback/ReflectBindingCallback.cs | 14 ----- .../Binding/Editor/Codegen/CodeGenHelper.cs | 34 ----------- .../Editor/Codegen/CodeGenHelper_Class.cs | 9 --- .../Binding/Editor/Codegen/CodeGenUtils.cs | 9 --- .../Binding/Editor/DefaultBindingLogger.cs | 12 ---- .../Binding/Editor/jsb.editor.binding.asmdef | 5 -- .../Source/Binding/Values_push_class.cs | 13 ---- unity/quickjs/Runtime/Source/JSWorker.cs | 4 -- .../Runtime/Source/Native/JSApi+QuickJS.cs | 2 - unity/quickjs/Runtime/Source/Native/JSApi.cs | 44 +------------- .../Runtime/Source/Native/jsb.native.asmdef | 5 -- unity/quickjs/Runtime/Source/ScriptContext.cs | 59 ------------------- unity/quickjs/Runtime/Source/ScriptRuntime.cs | 20 ------- .../Runtime/Source/Shared/jsb.shared.asmdef | 5 -- .../Source/Utils/DefaultAsyncManager.cs | 35 ----------- .../Source/Utils/DefaultJsonConverter.cs | 6 +- .../Source/Utils/DefaultScriptLogger.cs | 41 ------------- .../Runtime/Source/Utils/IFileSystem.cs | 39 ------------ .../quickjs/Runtime/Source/Utils/JSWeakMap.cs | 18 ------ .../Runtime/Source/Utils/ObjectCollection.cs | 9 --- unity/quickjs/Runtime/Source/jsb.core.asmdef | 5 -- 23 files changed, 4 insertions(+), 428 deletions(-) diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/DefaultCodeGenCallback.cs b/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/DefaultCodeGenCallback.cs index af690778..c7712759 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/DefaultCodeGenCallback.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/DefaultCodeGenCallback.cs @@ -22,21 +22,11 @@ public void OnCodeGenEnd() public bool OnTypeGenerating(TypeBindingInfo typeBindingInfo, int current, int total) { -#if JSB_UNITYLESS return false; -#else - return UnityEditor.EditorUtility.DisplayCancelableProgressBar( - "Generating", - $"{current}/{total}: {typeBindingInfo.FullName}", - (float)current / total); -#endif } public void OnGenerateFinish() { -#if !JSB_UNITYLESS - UnityEditor.EditorUtility.ClearProgressBar(); -#endif } public void OnSourceCodeEmitted(CodeGenerator cg, string codeOutDir, string codeName, SourceCodeType type, TextGenerator textGenerator) diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/InMemoryCompilationBindingCallback.cs b/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/InMemoryCompilationBindingCallback.cs index 65d10579..e95f76a5 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/InMemoryCompilationBindingCallback.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/InMemoryCompilationBindingCallback.cs @@ -108,30 +108,6 @@ public static List GetDefinedSymbols() return defines; } -#if !JSB_UNITYLESS && UNITY_EDITOR - public static UnityEditor.BuildTargetGroup GetBuildTargetGroup() - { - var buildTarget = UnityEditor.EditorUserBuildSettings.activeBuildTarget; - switch (buildTarget) - { - case UnityEditor.BuildTarget.Android: return UnityEditor.BuildTargetGroup.Android; - case UnityEditor.BuildTarget.iOS: return UnityEditor.BuildTargetGroup.iOS; - case UnityEditor.BuildTarget.WSAPlayer: return UnityEditor.BuildTargetGroup.WSA; -#if !UNITY_2019_2_OR_NEWER - case UnityEditor.BuildTarget.StandaloneLinux: - case UnityEditor.BuildTarget.StandaloneLinuxUniversal: -#endif - case UnityEditor.BuildTarget.StandaloneLinux64: - case UnityEditor.BuildTarget.StandaloneOSX: - case UnityEditor.BuildTarget.StandaloneWindows: - case UnityEditor.BuildTarget.StandaloneWindows64: return UnityEditor.BuildTargetGroup.Standalone; - case UnityEditor.BuildTarget.Switch: return UnityEditor.BuildTargetGroup.Switch; - case UnityEditor.BuildTarget.PS4: return UnityEditor.BuildTargetGroup.PS4; - case UnityEditor.BuildTarget.XboxOne: return UnityEditor.BuildTargetGroup.XboxOne; - } - throw new NotImplementedException(); - } -#endif public InMemoryCompilationBindingCallback(ScriptRuntime runtime) { @@ -141,19 +117,9 @@ public InMemoryCompilationBindingCallback(ScriptRuntime runtime) var defines = ""; var compilerOptions = "-unsafe"; -#if !JSB_UNITYLESS - symbolList.AddRange(GetDefinedSymbols()); -#endif defines += string.Join(";", symbolList); -#if !JSB_UNITYLESS && UNITY_EDITOR - var customDefinedSymbols = UnityEditor.PlayerSettings.GetScriptingDefineSymbolsForGroup(GetBuildTargetGroup()); - if (!string.IsNullOrEmpty(customDefinedSymbols)) - { - defines += ";" + customDefinedSymbols; - } -#endif if (!string.IsNullOrEmpty(defines)) { compilerOptions += " -defines:" + defines; diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/ReflectBindingCallback.cs b/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/ReflectBindingCallback.cs index b22dd812..92a55a1c 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/ReflectBindingCallback.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/ReflectBindingCallback.cs @@ -178,20 +178,6 @@ public ReflectBindingCallback(ScriptRuntime runtime) ReflectBindValueOp.Register(Binding.Values.js_push_primitive, Binding.Values.js_get_primitive); ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); -#if !JSB_UNITYLESS - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); - ReflectBindValueOp.Register(Binding.Values.js_push_structvalue, Binding.Values.js_get_structvalue); -#endif if (!CodeGenUtils.IsCodeEmitSupported()) { diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper.cs b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper.cs index 92419569..c02d2f7b 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper.cs @@ -49,9 +49,6 @@ public CSTopLevelCodeGen(CodeGenerator cg, string name) private void AppendCommonHead() { -#if !JSB_UNITYLESS - this.cg.cs.AppendLine("// Unity: {0}", UnityEngine.Application.unityVersion); -#endif this.cg.cs.AppendLine("using System;"); this.cg.cs.AppendLine("using System.Collections.Generic;"); this.cg.cs.AppendLine(); @@ -427,37 +424,6 @@ public CSPlatformCodeGen(CodeGenerator cg, TypeBindingFlags bf) this.bf = bf; this.predef = string.Empty; -#if !JSB_UNITYLESS - if ((this.bf & TypeBindingFlags.BuildTargetPlatformOnly) != 0) - { - var buildTarget = UnityEditor.EditorUserBuildSettings.activeBuildTarget; - switch (buildTarget) - { - case UnityEditor.BuildTarget.Android: - predef = "UNITY_ANDROID"; - break; - case UnityEditor.BuildTarget.iOS: - predef = "UNITY_IOS"; - break; - case UnityEditor.BuildTarget.WSAPlayer: - predef = "UNITY_WSA"; // not supported - break; - case UnityEditor.BuildTarget.StandaloneWindows: - case UnityEditor.BuildTarget.StandaloneWindows64: - predef = "UNITY_STANDALONE_WIN"; - break; - case UnityEditor.BuildTarget.StandaloneOSX: - predef = "UNITY_STANDALONE_OSX"; - break; - case UnityEditor.BuildTarget.StandaloneLinux64: - predef = "UNITY_STANDALONE_LINUX"; - break; - default: - predef = string.Format("false // {0} is not supported", buildTarget); - break; - } - } -#endif if (!string.IsNullOrEmpty(this.predef)) { diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Class.cs b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Class.cs index e5cfe1f3..4d7f0270 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Class.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Class.cs @@ -424,15 +424,6 @@ public override void Dispose() if (!typeBindingInfo.constructors.available && !typeBindingInfo.type.IsAbstract) { -#if !JSB_UNITYLESS - if (typeBindingInfo.type.IsSubclassOf(typeof(UnityEngine.Component))) - { - // 因为 ts 泛型约束需要 new() 形式, 所以在定义中产生一个 public 定义 - // 例如: GetComponent(type: { new(): T }): T - cg.tsDeclare.AppendLine("/*protected*/ constructor()"); - } - else -#endif { if (!typeBindingInfo.type.IsGenericTypeDefinition) { diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenUtils.cs b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenUtils.cs index 1dea199c..93f97cdd 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenUtils.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenUtils.cs @@ -13,15 +13,10 @@ public static class CodeGenUtils public static bool IsCodeEmitSupported() { -#if JSB_UNITYLESS #if NETCOREAPP return false; #else return true; -#endif -#else - var apiCompatibilityLevel = UnityEditor.PlayerSettings.GetApiCompatibilityLevel(UnityEditor.BuildTargetGroup.Standalone); - return apiCompatibilityLevel == UnityEditor.ApiCompatibilityLevel.NET_4_6; #endif } @@ -73,15 +68,11 @@ public static bool IsDirectlyImplements(Type type, Type interfaceType) public static void RemoveAt(ref T[] array, int index) { -#if JSB_UNITYLESS for (var i = index; i < array.Length - 1; i++) { array[i] = array[i + 1]; } Array.Resize(ref array, array.Length - 1); -#else - UnityEditor.ArrayUtility.RemoveAt(ref array, index); -#endif } public static string ToLiteral(bool v) diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/DefaultBindingLogger.cs b/unity/quickjs/Runtime/Source/Binding/Editor/DefaultBindingLogger.cs index e692d33c..f0893c84 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/DefaultBindingLogger.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/DefaultBindingLogger.cs @@ -22,11 +22,7 @@ public void Log(string message) { return; } -#if JSB_UNITYLESS Console.WriteLine("[INFO ] {0}", message); -#else - UnityEngine.Debug.Log(message); -#endif } public void LogWarning(string message) @@ -35,11 +31,7 @@ public void LogWarning(string message) { return; } -#if JSB_UNITYLESS Console.WriteLine("[WARN ] {0}", message); -#else - UnityEngine.Debug.LogWarning(message); -#endif } public void LogError(string message) @@ -48,11 +40,7 @@ public void LogError(string message) { return; } -#if JSB_UNITYLESS Console.WriteLine("[ERROR ] {0}", message); -#else - UnityEngine.Debug.LogError(message); -#endif } } } diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/jsb.editor.binding.asmdef b/unity/quickjs/Runtime/Source/Binding/Editor/jsb.editor.binding.asmdef index 132cc2d3..de2318da 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/jsb.editor.binding.asmdef +++ b/unity/quickjs/Runtime/Source/Binding/Editor/jsb.editor.binding.asmdef @@ -23,11 +23,6 @@ "name": "Unity", "expression": "", "define": "JSB_RUNTIME_REFLECT_BINDING" - }, - { - "name": "Unity", - "expression": "", - "define": "JSB_UNITYLESS" } ], "noEngineReferences": false diff --git a/unity/quickjs/Runtime/Source/Binding/Values_push_class.cs b/unity/quickjs/Runtime/Source/Binding/Values_push_class.cs index c845e16b..a24c15d6 100644 --- a/unity/quickjs/Runtime/Source/Binding/Values_push_class.cs +++ b/unity/quickjs/Runtime/Source/Binding/Values_push_class.cs @@ -6,19 +6,6 @@ namespace QuickJS.Binding public partial class Values { -#if !JSB_UNITYLESS - // variant push - // explicitly call UnityEngine.Object.operator == - public static JSValue js_push_classvalue(JSContext ctx, UnityEngine.Object o) - { - if (o == null) - { - return JSApi.JS_NULL; - } - - return js_push_object(ctx, (object)o); - } -#endif public static JSValue js_push_classvalue(JSContext ctx, ScriptValue o) { diff --git a/unity/quickjs/Runtime/Source/JSWorker.cs b/unity/quickjs/Runtime/Source/JSWorker.cs index ae2fc540..01b41da2 100644 --- a/unity/quickjs/Runtime/Source/JSWorker.cs +++ b/unity/quickjs/Runtime/Source/JSWorker.cs @@ -35,11 +35,7 @@ private JSWorker() { if (_inbox.Count != 0) { -#if JSB_UNITYLESS Console.WriteLine("worker: not cleaned up"); -#else - UnityEngine.Debug.LogError("worker: not cleaned up"); -#endif } } #endif diff --git a/unity/quickjs/Runtime/Source/Native/JSApi+QuickJS.cs b/unity/quickjs/Runtime/Source/Native/JSApi+QuickJS.cs index eec68c79..cb02929d 100644 --- a/unity/quickjs/Runtime/Source/Native/JSApi+QuickJS.cs +++ b/unity/quickjs/Runtime/Source/Native/JSApi+QuickJS.cs @@ -13,10 +13,8 @@ public partial class JSApi public static void JS_SetModuleLoaderFunc(JSRuntime rt, JSModuleNormalizeFunc module_normalize, JSModuleLoaderFunc module_loader, IntPtr opaque) { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(module_normalize); GCHandle.Alloc(module_loader); -#endif JS_SetModuleLoaderFunc(rt, module_normalize != null ? Marshal.GetFunctionPointerForDelegate(module_normalize) : IntPtr.Zero, module_loader != null ? Marshal.GetFunctionPointerForDelegate(module_loader) : IntPtr.Zero, opaque); diff --git a/unity/quickjs/Runtime/Source/Native/JSApi.cs b/unity/quickjs/Runtime/Source/Native/JSApi.cs index 9e150fd5..16b783fe 100644 --- a/unity/quickjs/Runtime/Source/Native/JSApi.cs +++ b/unity/quickjs/Runtime/Source/Native/JSApi.cs @@ -17,60 +17,38 @@ namespace QuickJS.Native using int64_t = Int64; using uint64_t = UInt64; -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public delegate int JSInterruptHandler(JSRuntime rt, IntPtr opaque); /* is_handled = TRUE means that the rejection is handled */ -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public delegate void JSHostPromiseRejectionTracker(JSContext ctx, JSValueConst promise, JSValueConst reason, JS_BOOL is_handled, IntPtr opaque); -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public unsafe delegate IntPtr JSModuleNormalizeFunc(JSContext ctx, [MarshalAs(UnmanagedType.LPStr)] string module_base_name, [MarshalAs(UnmanagedType.LPStr)] string module_name, IntPtr opaque); -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public delegate JSModuleDef JSModuleLoaderFunc(JSContext ctx, [MarshalAs(UnmanagedType.LPStr)] string module_name, IntPtr opaque); -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public delegate void JSGCObjectFinalizer(JSRuntime rt, JSPayloadHeader header); -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public delegate JSValue JSCFunction(JSContext ctx, JSValueConst this_obj, int argc, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] JSValueConst[] argv); -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public delegate JSValue JSCFunctionMagic(JSContext ctx, JSValueConst this_obj, int argc, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] JSValueConst[] argv, int magic); -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public delegate JSValue JSSetterCFunction(JSContext ctx, JSValueConst this_val, JSValueConst val); -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public delegate JSValue JSSetterCFunctionMagic(JSContext ctx, JSValueConst this_val, JSValueConst val, int magic); -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public delegate JSValue JSGetterCFunction(JSContext ctx, JSValueConst this_val); -#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) [UnmanagedFunctionPointer(CallingConvention.Cdecl)] -#endif public delegate JSValue JSGetterCFunctionMagic(JSContext ctx, JSValueConst this_val, int magic); public partial class JSApi @@ -149,9 +127,7 @@ public static JSRuntime JSB_NewRuntime(JSGCObjectFinalizer class_finalizer) { if (class_finalizer != null) { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(class_finalizer); -#endif var fn = Marshal.GetFunctionPointerForDelegate(class_finalizer); return JSB_NewRuntime(fn); } @@ -193,9 +169,7 @@ public static JSRuntime JSB_NewRuntime(JSGCObjectFinalizer class_finalizer) public static void JS_SetHostPromiseRejectionTracker(JSRuntime rt, JSHostPromiseRejectionTracker cb, IntPtr opaque) { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(cb); -#endif var fn = Marshal.GetFunctionPointerForDelegate(cb); JS_SetHostPromiseRejectionTracker(rt, fn, opaque); } @@ -404,36 +378,28 @@ public static JSValue JS_NewUint32(JSContext ctx, uint32_t val) public static JSValue JSB_NewGetter(JSContext ctx, JSGetterCFunctionMagic func, JSAtom atom, int magic) { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(func); -#endif var fn = Marshal.GetFunctionPointerForDelegate(func); return JSB_NewCFunctionMagic(ctx, fn, atom, 0, JSCFunctionEnum.JS_CFUNC_getter_magic, magic); } public static JSValue JSB_NewSetter(JSContext ctx, JSSetterCFunctionMagic func, JSAtom atom, int magic) { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(func); -#endif var fn = Marshal.GetFunctionPointerForDelegate(func); return JSB_NewCFunctionMagic(ctx, fn, atom, 1, JSCFunctionEnum.JS_CFUNC_setter_magic, magic); } public static JSValue JSB_NewConstructor(JSContext ctx, JSCFunctionMagic func, JSAtom atom, int magic) { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(func); -#endif var fn = Marshal.GetFunctionPointerForDelegate(func); return JSB_NewCFunctionMagic(ctx, fn, atom, 0, JSCFunctionEnum.JS_CFUNC_constructor_magic, magic); } public static JSValue JSB_NewCFunctionMagic(JSContext ctx, JSCFunctionMagic func, JSAtom atom, int length, int magic) { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(func); -#endif var fn = Marshal.GetFunctionPointerForDelegate(func); return JSB_NewCFunctionMagic(ctx, fn, atom, length, JSCFunctionEnum.JS_CFUNC_generic_magic, magic); } @@ -444,9 +410,7 @@ public static JSValue JSB_NewGetter(JSContext ctx, JSGetterCFunction func, JSAto { return JS_UNDEFINED; } -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(func); -#endif var fn = Marshal.GetFunctionPointerForDelegate(func); return JSB_NewCFunction(ctx, fn, atom, 0, JSCFunctionEnum.JS_CFUNC_getter, 0); } @@ -457,18 +421,14 @@ public static JSValue JSB_NewSetter(JSContext ctx, JSSetterCFunction func, JSAto { return JS_UNDEFINED; } -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(func); -#endif var fn = Marshal.GetFunctionPointerForDelegate(func); return JSB_NewCFunction(ctx, fn, atom, 1, JSCFunctionEnum.JS_CFUNC_setter, 0); } public static JSValue JSB_NewCFunction(JSContext ctx, JSCFunction func, JSAtom atom, int length) { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(func); -#endif var fn = Marshal.GetFunctionPointerForDelegate(func); return JSB_NewCFunction(ctx, fn, atom, length, JSCFunctionEnum.JS_CFUNC_generic, 0); } @@ -765,7 +725,7 @@ public static unsafe void JS_FreeValue(JSContext ctx, int count, JSValue* vs) public static void JS_AddIntrinsicOperators(JSContext ctx) {} public static readonly JSAtom JS_ATOM_Operators; public static readonly JSAtom JS_ATOM_Symbol_operatorSet; -#else +#else [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern void JS_AddIntrinsicOperators(JSContext ctx); @@ -882,9 +842,7 @@ public static IntPtr JS_ToCStringLen(JSContext ctx, out size_t len, JSValue val) public static void JS_SetInterruptHandler(JSRuntime rt, JSInterruptHandler cb, IntPtr opaque) { -#if JSB_UNITYLESS || (UNITY_WSA && !UNITY_EDITOR) GCHandle.Alloc(cb); -#endif var fn = Marshal.GetFunctionPointerForDelegate(cb); JS_SetInterruptHandler(rt, fn, opaque); } diff --git a/unity/quickjs/Runtime/Source/Native/jsb.native.asmdef b/unity/quickjs/Runtime/Source/Native/jsb.native.asmdef index 61388222..fb25f418 100644 --- a/unity/quickjs/Runtime/Source/Native/jsb.native.asmdef +++ b/unity/quickjs/Runtime/Source/Native/jsb.native.asmdef @@ -20,11 +20,6 @@ "name": "Unity", "expression": "", "define": "JSB_RUNTIME_REFLECT_BINDING" - }, - { - "name": "Unity", - "expression": "", - "define": "JSB_UNITYLESS" } ], "noEngineReferences": true diff --git a/unity/quickjs/Runtime/Source/ScriptContext.cs b/unity/quickjs/Runtime/Source/ScriptContext.cs index a5acd2ed..db51ca3f 100644 --- a/unity/quickjs/Runtime/Source/ScriptContext.cs +++ b/unity/quickjs/Runtime/Source/ScriptContext.cs @@ -377,59 +377,6 @@ public JSValue _new_commonjs_module_entry(string parent_module_id, string module return module_obj; } -#if !JSB_UNITYLESS - public unsafe bool TrySetScriptRef(ref Unity.JSScriptRef scriptRef, JSValue ctor) - { - string[] scriptRefValue = null; - var sourceString = @"(function (cache, ctor) { - for (let mod_id in cache) { - let mod_obj = cache[mod_id]; - let exports = mod_obj['exports']; - if (typeof exports === 'object') { - for (let member_id in exports) { - let member_obj = exports[member_id]; - if (typeof member_obj === 'function' && member_obj == ctor) { - return [mod_id, member_id]; - } - } - } - } - return null; - })"; - var scriptRefFinder = ScriptRuntime.EvalSource(_ctx, sourceString, "eval", false); - if (scriptRefFinder.IsException()) - { - _ctx.print_exception(); - return false; - } - var argv = stackalloc JSValue[2] - { - JSApi.JS_DupValue(_ctx, _moduleCache), - JSApi.JS_DupValue(_ctx, ctor), - }; - var retVal = JSApi.JS_Call(_ctx, scriptRefFinder, JSApi.JS_UNDEFINED, 2, argv); - JSApi.JS_FreeValue(_ctx, scriptRefFinder); - JSApi.JS_FreeValue(_ctx, argv[0]); - JSApi.JS_FreeValue(_ctx, argv[1]); - if (retVal.IsException()) - { - _ctx.print_exception(); - return false; - } - if (Values.js_get_primitive(_ctx, retVal, out scriptRefValue) && scriptRefValue != null && scriptRefValue.Length >= 2) - { - if (!string.IsNullOrEmpty(scriptRefValue[1])) - { - JSApi.JS_FreeValue(_ctx, retVal); - scriptRef.modulePath = scriptRefValue[0]; - scriptRef.className = scriptRefValue[1]; - return true; - } - } - JSApi.JS_FreeValue(_ctx, retVal); - return false; - } -#endif public bool LoadModuleCacheExports(string module_id, string key, out JSValue value) { @@ -514,12 +461,6 @@ public void RaiseScriptReloadedEvent_throw(string resolved_id) OnScriptReloaded?.Invoke(this, resolved_id); } -#if !JSB_UNITYLESS - public bool CheckModuleId(Unity.JSScriptRef scriptRef, string resolved_id) - { - return _runtime.ResolveModuleId(this, "", scriptRef.modulePath) == resolved_id; - } -#endif public bool TryGetModuleForReloading(string resolved_id, out JSValue module_obj) { diff --git a/unity/quickjs/Runtime/Source/ScriptRuntime.cs b/unity/quickjs/Runtime/Source/ScriptRuntime.cs index b659dab0..6280c524 100644 --- a/unity/quickjs/Runtime/Source/ScriptRuntime.cs +++ b/unity/quickjs/Runtime/Source/ScriptRuntime.cs @@ -375,14 +375,6 @@ public void Initialize(ScriptRuntimeArgs args) _objectCollection = new ObjectCollection(); _timerManager = args.timerManager ?? new DefaultTimerManager(_logger); _typeDB = new TypeDB(this, _mainContext); -#if !JSB_UNITYLESS - _typeDB.AddType(typeof(Unity.JSBehaviour), JSApi.JS_UNDEFINED); - _typeDB.AddType(typeof(Unity.JSScriptableObject), JSApi.JS_UNDEFINED); -#endif -#if !JSB_UNITYLESS && UNITY_EDITOR - _typeDB.AddType(Values.FindType("QuickJS.Unity.JSEditorWindow"), JSApi.JS_UNDEFINED); - _typeDB.AddType(Values.FindType("QuickJS.Unity.JSBehaviourInspector"), JSApi.JS_UNDEFINED); -#endif // await Task.Run(() => runner.OnBind(this, register)); try @@ -405,18 +397,6 @@ public void Initialize(ScriptRuntimeArgs args) AddStaticModule("jsb", ScriptContext.Bind); // FindModuleResolver().Warmup(_mainContext); -#if !JSB_UNITYLESS - //TODO may be changed in the future - var plover = UnityEngine.Resources.Load("plover.js"); - if (plover != null) - { - _mainContext.EvalSource(plover.text, "plover.js"); - } - else - { - _logger?.Write(LogLevel.Error, "failed to load plover.js from Resources"); - } -#endif RaiseInitialized(); } diff --git a/unity/quickjs/Runtime/Source/Shared/jsb.shared.asmdef b/unity/quickjs/Runtime/Source/Shared/jsb.shared.asmdef index 7322e671..1a45c372 100644 --- a/unity/quickjs/Runtime/Source/Shared/jsb.shared.asmdef +++ b/unity/quickjs/Runtime/Source/Shared/jsb.shared.asmdef @@ -18,11 +18,6 @@ "name": "Unity", "expression": "", "define": "JSB_RUNTIME_REFLECT_BINDING" - }, - { - "name": "Unity", - "expression": "", - "define": "JSB_UNITYLESS" } ], "noEngineReferences": true diff --git a/unity/quickjs/Runtime/Source/Utils/DefaultAsyncManager.cs b/unity/quickjs/Runtime/Source/Utils/DefaultAsyncManager.cs index 3961743b..35a1ceaf 100644 --- a/unity/quickjs/Runtime/Source/Utils/DefaultAsyncManager.cs +++ b/unity/quickjs/Runtime/Source/Utils/DefaultAsyncManager.cs @@ -27,9 +27,6 @@ public JSTaskCompletionArgs(System.Threading.Tasks.Task task, SafeRelease safeRe private int _mainThreadId; -#if !JSB_UNITYLESS - private Unity.UnityCoroutineContext _mb = null; -#endif public DefaultAsyncManager() { @@ -43,13 +40,6 @@ public void Initialize(int mainThreadId) public void Destroy() { -#if !JSB_UNITYLESS - if (_mb != null) - { - UnityEngine.Object.DestroyImmediate(_mb.gameObject); - _mb = null; - } -#endif } // return promise @@ -75,32 +65,7 @@ public unsafe JSValue Yield(ScriptContext context, object awaitObject) #endif return promise; } -#if !JSB_UNITYLESS - else - { - if (_mainThreadId != Thread.CurrentThread.ManagedThreadId) - { - return ctx.ThrowInternalError("not supported on background thread"); - } - - if (_mb == null) - { - var container = new UnityEngine.GameObject("JSRuntimeContainer"); - container.hideFlags = UnityEngine.HideFlags.HideInHierarchy; - UnityEngine.Object.DontDestroyOnLoad(container); - _mb = container.AddComponent(); - } - - var resolving_funcs = stackalloc[] { JSApi.JS_UNDEFINED, JSApi.JS_UNDEFINED }; - var promise = JSApi.JS_NewPromiseCapability(ctx, resolving_funcs); - var safeRelease = new SafeRelease(context).Append(2, resolving_funcs); - - _mb.RunTask(awaitObject, context, safeRelease); - return promise; - } -#else return ctx.ThrowInternalError("not supported await object"); -#endif // !JSB_UNITYLESS } private static unsafe void _OnTaskCompleted(ScriptRuntime runtime, object cbArgs, JSValue cbValue) diff --git a/unity/quickjs/Runtime/Source/Utils/DefaultJsonConverter.cs b/unity/quickjs/Runtime/Source/Utils/DefaultJsonConverter.cs index 148e41c6..0fed2e35 100644 --- a/unity/quickjs/Runtime/Source/Utils/DefaultJsonConverter.cs +++ b/unity/quickjs/Runtime/Source/Utils/DefaultJsonConverter.cs @@ -6,8 +6,8 @@ public class DefaultJsonConverter : IJsonConverter { public object Deserialize(string json, Type type) { - // If inside Unity, use Unity's JSON utility even if JSB_UNITYLESS is defined -#if JSB_UNITYLESS && !UNITY_2019_1_OR_NEWER + // Unity's own JsonUtility from 2019.1 on, System.Text.Json before that +#if !UNITY_2019_1_OR_NEWER #if JSB_COMPATIBLE throw new NotImplementedException(); #else @@ -20,7 +20,7 @@ public object Deserialize(string json, Type type) public string Serialize(object obj, bool prettyPrint) { -#if JSB_UNITYLESS && !UNITY_2019_1_OR_NEWER +#if !UNITY_2019_1_OR_NEWER #if JSB_COMPATIBLE throw new NotImplementedException(); #else diff --git a/unity/quickjs/Runtime/Source/Utils/DefaultScriptLogger.cs b/unity/quickjs/Runtime/Source/Utils/DefaultScriptLogger.cs index 52e031fd..01cdccb8 100644 --- a/unity/quickjs/Runtime/Source/Utils/DefaultScriptLogger.cs +++ b/unity/quickjs/Runtime/Source/Utils/DefaultScriptLogger.cs @@ -11,7 +11,6 @@ namespace QuickJS.Utils public class DefaultScriptLogger : IScriptLogger { -#if JSB_UNITYLESS public void WriteException(Exception exception) { @@ -40,45 +39,5 @@ public void Write(LogLevel ll, string fmt, params object[] args) } } -#else - - public void WriteException(Exception exception) - { - try - { - UnityEngine.Debug.LogException(exception); - if (exception.InnerException != null) - { - UnityEngine.Debug.LogException(exception.InnerException); - } - } - catch (Exception) - { - } - } - - public void Write(LogLevel ll, string text) - { - switch (ll) - { - case LogLevel.Info: UnityEngine.Debug.Log(text); return; - case LogLevel.Warn: UnityEngine.Debug.LogWarning(text); return; - case LogLevel.Error: UnityEngine.Debug.LogError(text); return; - default: UnityEngine.Debug.LogError(text); return; - } - } - - public void Write(LogLevel ll, string fmt, params object[] args) - { - switch (ll) - { - case LogLevel.Info: UnityEngine.Debug.LogFormat(fmt, args); return; - case LogLevel.Warn: UnityEngine.Debug.LogWarningFormat(fmt, args); return; - case LogLevel.Error: UnityEngine.Debug.LogErrorFormat(fmt, args); return; - default: UnityEngine.Debug.LogErrorFormat(fmt, args); return; - } - } - -#endif } } diff --git a/unity/quickjs/Runtime/Source/Utils/IFileSystem.cs b/unity/quickjs/Runtime/Source/Utils/IFileSystem.cs index 1800a3d7..a44f47b9 100644 --- a/unity/quickjs/Runtime/Source/Utils/IFileSystem.cs +++ b/unity/quickjs/Runtime/Source/Utils/IFileSystem.cs @@ -110,43 +110,4 @@ public byte[] ReadAllBytes(string path) } } -#if !JSB_UNITYLESS - public class ResourcesFileSystem : IFileSystem - { - private IScriptLogger _logger; - - public ResourcesFileSystem(IScriptLogger logger) - { - _logger = logger; - } - - public bool Exists(string path) - { - var asset = UnityEngine.Resources.Load(path); - return asset != null; - } - - public string GetFullPath(string path) - { - return path; - } - - public byte[] ReadAllBytes(string path) - { - try - { - var asset = UnityEngine.Resources.Load(path); - return asset.bytes; - } - catch (Exception exception) - { - if (_logger != null) - { - _logger.Write(LogLevel.Error, "{0}: {1}\n{2}", path, exception.Message, exception.StackTrace); - } - return null; - } - } - } -#endif } diff --git a/unity/quickjs/Runtime/Source/Utils/JSWeakMap.cs b/unity/quickjs/Runtime/Source/Utils/JSWeakMap.cs index 6049c69a..129a5b5f 100644 --- a/unity/quickjs/Runtime/Source/Utils/JSWeakMap.cs +++ b/unity/quickjs/Runtime/Source/Utils/JSWeakMap.cs @@ -32,12 +32,6 @@ public int Count ++active; } } -#if !JSB_UNITYLESS - if (active != _map.Count) - { - UnityEngine.Debug.LogFormat("unbalanced WeakMap<{0}> {1} != {2}", typeof(T).Name, active, _map.Count); - } -#endif #endif return _map.Count; } @@ -49,24 +43,15 @@ public void Clear() var values = new WeakReference[valueMapSize]; _map.Values.CopyTo(values, 0); _map.Clear(); -#if JSB_DEBUG && !JSB_UNITYLESS - UnityEngine.Debug.LogFormat("WeakMap<{0}>.Clear: {1}", typeof(T).Name, valueMapSize); -#endif for (var i = 0; i < valueMapSize; i++) { var d = values[i].Target as T; if (d != null) { -#if JSB_DEBUG && !JSB_UNITYLESS - UnityEngine.Debug.LogFormat(" {0}: {1}", i, d); -#endif d.Dispose(); } else { -#if JSB_DEBUG && !JSB_UNITYLESS - UnityEngine.Debug.LogFormat(" {0}: {1}", i, "null"); -#endif } } } @@ -101,9 +86,6 @@ public bool Remove(JSValue jso) { r = true; _map.Remove(jso); -#if JSB_DEBUG && !JSB_UNITYLESS - UnityEngine.Debug.LogFormat("WeakMap<{0}>.Remove: {1} = {2}", typeof(T).Name, jso, weakRef.Target); -#endif } return r; } diff --git a/unity/quickjs/Runtime/Source/Utils/ObjectCollection.cs b/unity/quickjs/Runtime/Source/Utils/ObjectCollection.cs index 3cb0e08d..f2e7a01b 100644 --- a/unity/quickjs/Runtime/Source/Utils/ObjectCollection.cs +++ b/unity/quickjs/Runtime/Source/Utils/ObjectCollection.cs @@ -39,17 +39,8 @@ public void Clear() IObjectCollectionEntry target; if (entry.target.TryGetTarget(out target)) { -#if JSB_DEBUG && !JSB_UNITYLESS - UnityEngine.Debug.LogWarningFormat("releasing collection entry: {0}", target); -#endif target.OnCollectionReleased(); } -#if JSB_DEBUG && !JSB_UNITYLESS - else if (entry.next == -1) - { - UnityEngine.Debug.LogWarningFormat("null collection entry"); - } -#endif } } } diff --git a/unity/quickjs/Runtime/Source/jsb.core.asmdef b/unity/quickjs/Runtime/Source/jsb.core.asmdef index c9898e5c..abd5da73 100644 --- a/unity/quickjs/Runtime/Source/jsb.core.asmdef +++ b/unity/quickjs/Runtime/Source/jsb.core.asmdef @@ -21,11 +21,6 @@ "name": "Unity", "expression": "", "define": "JSB_RUNTIME_REFLECT_BINDING" - }, - { - "name": "Unity", - "expression": "", - "define": "JSB_UNITYLESS" } ], "noEngineReferences": false From af05e2336138dc7af3c48f765610a449836cb63e Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 18:45:11 +0300 Subject: [PATCH 09/58] refactor(quickjs): split BindingManager.Bind() out of Generate() `QuickJSEngine.InvokeReflectBinding` called `bm.Generate(TypeBindingFlags.None)`, which constructed a `CodeGenerator`, called `cg.Begin()`, and ran `cg.Generate()` per exported type into buffers nothing ever read -- no `codegenCallback` is passed, so every write was guarded off. The reflect binding needs none of it. `Bind()` is that path with the codegen removed: the IBindingCallback hooks, OnPre/OnPostGenerateType, the delegates, and the static modules. The log tail both paths shared is now `SubmitLog()`. `Generate(TypeBindingFlags)` is untouched, so this is not the codegen deletion -- see "The codegen is not separable" in MIGRATION.md for why that one is a product decision rather than a subtraction. Suite is byte-identical to the run before the change: EditMode 340/348 passed, PlayMode 689/701, 0 failed either side. --- .../Scripting/QuickJS/QuickJSEngine.cs | 2 +- .../Source/Binding/Editor/BindingManager.cs | 115 +++++++++++++++--- 2 files changed, 97 insertions(+), 20 deletions(-) diff --git a/unity/core/Runtime/Scripting/QuickJS/QuickJSEngine.cs b/unity/core/Runtime/Scripting/QuickJS/QuickJSEngine.cs index 17dda099..29823377 100644 --- a/unity/core/Runtime/Scripting/QuickJS/QuickJSEngine.cs +++ b/unity/core/Runtime/Scripting/QuickJS/QuickJSEngine.cs @@ -83,7 +83,7 @@ public static void InvokeReflectBinding(ScriptRuntime runtime) bindingLogger = new DefaultBindingLogger(LogLevel.Error), }); bm.Collect(); - bm.Generate(TypeBindingFlags.None); + bm.Bind(); bm.Report(); } diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/BindingManager.cs b/unity/quickjs/Runtime/Source/Binding/Editor/BindingManager.cs index 17c1ddce..870fdbeb 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/BindingManager.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/BindingManager.cs @@ -2062,6 +2062,101 @@ public void AddOutputFile(string outDir, string filename) list.Add(filename); } + /// + /// Feeds everything Collect() found to the binding callback, generating no source. + /// This is the reflect-binding path; Generate() is the codegen one. + /// + public void Bind() + { + _bindingCallback?.OnBindingBegin(this); + foreach (var typeKV in _exportedTypes) + { + var typeBindingInfo = typeKV.Value; + try + { + if (!typeBindingInfo.omit) + { + OnPreGenerateType(typeBindingInfo); + OnPostGenerateType(typeBindingInfo); + } + } + catch (Exception exception) + { + Error($"bind failed {typeBindingInfo.type.FullName}: {exception.Message}\n{exception.StackTrace}"); + } + } + + if (_bindingCallback != null) + { + try + { + var exportedDelegatesArray = new DelegateBridgeBindingInfo[this._exportedDelegates.Count]; + this._exportedDelegates.Values.CopyTo(exportedDelegatesArray, 0); + for (var i = 0; i < exportedDelegatesArray.Length; i++) + { + _bindingCallback.AddDelegate(exportedDelegatesArray[i]); + } + } + catch (Exception exception) + { + Error($"bind delegates failed: {exception.Message}"); + } + + try + { + var modules = from t in _collectedTypes + where t.genBindingCode + orderby t.tsTypeNaming.jsDepth + group t by t.tsTypeNaming.jsModule; + + _bindingCallback.BindRawTypes(_collectedRawTypes.Values); + foreach (var module in modules) + { + var count = module.Count(); + + if (count > 0) + { + var moduleName = string.IsNullOrEmpty(module.Key) ? this.prefs.defaultJSModule : module.Key; + _bindingCallback.BeginStaticModule(moduleName, count); + foreach (var type in module) + { + _bindingCallback.AddTypeReference(moduleName, type); + } + _bindingCallback.EndStaticModule(moduleName); + } + } + } + catch (Exception exception) + { + Error($"bind static modules failed: {exception.Message}"); + } + } + + _bindingCallback?.OnBindingEnd(); + SubmitLog(); + } + + private void SubmitLog() + { + try + { + var logText = _logWriter?.Submit(); + if (!string.IsNullOrEmpty(logText) && !string.IsNullOrEmpty(prefs.logPath)) + { + var logPath = prefs.logPath; + var logDir = Path.GetDirectoryName(logPath); + if (!Directory.Exists(logDir)) + { + Directory.CreateDirectory(logDir); + } + File.WriteAllText(logPath, logText); + } + } + catch (Exception) + { + } + } + public void Generate(TypeBindingFlags typeBindingFlags) { var cg = new CodeGenerator(this, typeBindingFlags); @@ -2197,25 +2292,7 @@ orderby t.tsTypeNaming.jsDepth _bindingCallback?.OnBindingEnd(); _codegenCallback?.OnCodeGenEnd(); - - try - { - var logText = _logWriter?.Submit(); - if (!string.IsNullOrEmpty(logText) && !string.IsNullOrEmpty(prefs.logPath)) - { - var logPath = prefs.logPath; - var logDir = Path.GetDirectoryName(logPath); - if (!Directory.Exists(logDir)) - { - Directory.CreateDirectory(logDir); - } - File.WriteAllText(logPath, logText); - } - } - catch (Exception) - { - } - + SubmitLog(); _codegenCallback?.OnGenerateFinish(); } From 94fda65095ff6d315f42d1e2ce003af37b81d407 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 18:47:22 +0300 Subject: [PATCH 10/58] feat(quickjs): build the engine from quickjs-ng, Windows x64 Gate 0. The repo had no way to reproduce any of the twelve shipped binaries -- they are unity-jsb prebuilts. This builds one of them from source. CMake fetches quickjs-ng pinned to a commit (a fork, since the async module loader is not upstream), builds it static with BUILDING_QJS_SHARED so JS_EXTERN becomes dllexport, and links it into a single `quickjs` shared library that re-exports ng's whole JS_* API alongside the JSB_*/jsb_* shim. The shim is vendored from unity-jsb (MIT) and ported in four changes -- the JS_BOOL alias, JS_NewClassID gaining a JSRuntime*, JS_FreeRuntime becoming void, and JSB_Init losing the runtime it needed -- plus two additions. All of them, and the one deliberate behaviour regression (the "gc object leaks" diagnostic, which ng reports by asserting instead of by return value), are written up in the README. Measured against the C# layer rather than assumed: of the 105 P/Invoke names live in `Runtime/Source/Native`, this DLL satisfies 99. The 6 gaps are all C#-side work for phase 3 and all enumerated in MIGRATION.md. It exports the four async-loader entry points and does not export JS_NewBigDecimal -- the exact inverse of the fingerprint that identified the old binary as Bellard-era. Windows x64 / MSVC only. unity-jsb built Windows with MinGW; both follow the Win64 ABI for the 16-byte JSValue return, but the other eleven artifacts are untested and there is no CI matrix yet. --- native/quickjs/.gitignore | 2 + native/quickjs/CMakeLists.txt | 74 ++++++ native/quickjs/README.md | 75 ++++++ native/quickjs/src/unity_ext.c | 420 +++++++++++++++++++++++++++++++++ native/quickjs/src/unity_qjs.c | 294 +++++++++++++++++++++++ 5 files changed, 865 insertions(+) create mode 100644 native/quickjs/.gitignore create mode 100644 native/quickjs/CMakeLists.txt create mode 100644 native/quickjs/README.md create mode 100644 native/quickjs/src/unity_ext.c create mode 100644 native/quickjs/src/unity_qjs.c diff --git a/native/quickjs/.gitignore b/native/quickjs/.gitignore new file mode 100644 index 00000000..a0e92a2a --- /dev/null +++ b/native/quickjs/.gitignore @@ -0,0 +1,2 @@ +# CMake build tree, including the fetched quickjs-ng checkout under _deps. +build/ diff --git a/native/quickjs/CMakeLists.txt b/native/quickjs/CMakeLists.txt new file mode 100644 index 00000000..b4e0cdc8 --- /dev/null +++ b/native/quickjs/CMakeLists.txt @@ -0,0 +1,74 @@ +# Builds `quickjs` -- the native library com.reactunity.quickjs P/Invokes into. +# +# One shared library exporting two things: quickjs-ng's own JS_* API, and the +# JSB_*/jsb_* shim in src/ that the C# layer needs because most of what it wants +# is either `static inline` in quickjs.h or variadic, and neither is reachable +# from P/Invoke. +# +# quickjs-ng is fetched, never vendored, and pinned to a commit rather than a +# branch. The pin is a fork because the async module loader is not upstream yet +# -- see MIGRATION.md. +# +# cmake -B build -S . -G "Visual Studio 17 2022" -A x64 +# cmake --build build --config Release --target quickjs +# +# Build only the `quickjs` target: quickjs-ng adds its own test executables +# unconditionally and a default build would compile all of them. + +cmake_minimum_required(VERSION 3.20) +project(reactunity-quickjs LANGUAGES C) + +set(QJS_REPOSITORY "https://github.com/gkurt/quickjs.git" CACHE STRING "quickjs-ng remote") +set(QJS_COMMIT "ebd53d9542090e027f6c73bae8c3fd8c2ae9f1d5" CACHE STRING "pinned quickjs-ng commit") + +include(FetchContent) + +# Static: the JS_* symbols are re-exported from our DLL instead, so there is one +# binary to ship per platform rather than two. +set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) +set(QJS_ENABLE_INSTALL OFF CACHE BOOL "" FORCE) +set(QJS_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) +set(QJS_BUILD_LIBC OFF CACHE BOOL "" FORCE) + +FetchContent_Declare(quickjs + GIT_REPOSITORY ${QJS_REPOSITORY} + GIT_TAG ${QJS_COMMIT} + GIT_SHALLOW FALSE +) +FetchContent_MakeAvailable(quickjs) + +# `BUILDING_QJS_SHARED` on a static target is deliberate. It turns JS_EXTERN into +# dllexport / visibility("default"), and both survive into the DLL that links the +# archive -- which is what re-exports quickjs-ng's API under our single library. +target_compile_definitions(qjs PUBLIC BUILDING_QJS_SHARED) +set_property(TARGET qjs PROPERTY POSITION_INDEPENDENT_CODE ON) + +if(IOS) + add_library(quickjs STATIC src/unity_qjs.c) +elseif(APPLE) + add_library(quickjs MODULE src/unity_qjs.c) + set_target_properties(quickjs PROPERTIES BUNDLE TRUE MACOSX_BUNDLE TRUE) +else() + add_library(quickjs SHARED src/unity_qjs.c) +endif() + +# Unity loads these by file name, so the name is part of the contract: +# JSApi.JSBDLL is "quickjs". +set_target_properties(quickjs PROPERTIES OUTPUT_NAME quickjs C_VISIBILITY_PRESET default) + +target_link_libraries(quickjs PRIVATE qjs) + +# quickjs-atom.h is not an installed header -- the shim includes it to get the +# predefined atom enum, so it needs the source tree, not just the public API. +target_include_directories(quickjs PRIVATE ${quickjs_SOURCE_DIR} src) + +if(WIN32) + target_compile_definitions(quickjs PRIVATE JS_EXPORT=__declspec\(dllexport\)) +else() + target_compile_definitions(quickjs PRIVATE "JS_EXPORT=__attribute__((visibility(\"default\")))") +endif() + +if(MSVC) + target_compile_options(quickjs PRIVATE /wd4146 /wd4703) + target_compile_definitions(quickjs PRIVATE _CRT_SECURE_NO_WARNINGS) +endif() diff --git a/native/quickjs/README.md b/native/quickjs/README.md new file mode 100644 index 00000000..33b447e8 --- /dev/null +++ b/native/quickjs/README.md @@ -0,0 +1,75 @@ +# `native/quickjs` — building the engine binary + +Builds `quickjs.dll` / `libquickjs.so` / `quickjs.bundle` / `libquickjs.a`, the native library +`com.reactunity.quickjs` P/Invokes into. Artifacts are copied into +[unity/quickjs/Plugins/QuickJS](../../unity/quickjs/Plugins/QuickJS) by hand for now. + +This exists because the shipped binaries are unity-jsb prebuilts and this repo had no way to +reproduce them. See [MIGRATION.md](../../unity/quickjs/MIGRATION.md) for why we are moving off +Bellard-era QuickJS at all. + +```bash +cmake -B build -S . -G "Visual Studio 17 2022" -A x64 +``` + +```bash +cmake --build build --config Release --target quickjs +``` + +**Always name the target.** quickjs-ng registers `run-test262`, `api-test`, `lre-test` and friends +unconditionally, so a default build compiles all of them. + +## What it links + +quickjs-ng is fetched by CMake, never vendored, and pinned to a **commit** — `QJS_COMMIT` in +[CMakeLists.txt](CMakeLists.txt). It points at a fork because the asynchronous module loader +(`JS_SetModuleLoaderFuncAsync`, `JS_FulfillModuleLoad`, `JS_RejectModuleLoad`, +`JS_EvalModuleAsync`) is not upstream yet. Override `QJS_REPOSITORY`/`QJS_COMMIT` to build against +plain upstream. + +ng is built **static** and linked into one shared library, so there is a single binary to ship per +platform. `BUILDING_QJS_SHARED` is defined on the static target on purpose: it turns `JS_EXTERN` +into `dllexport`, which survives into the DLL that links the archive and re-exports ng's whole +`JS_*` API under our name. + +## `src/` — the shim + +`unity_qjs.c` and `unity_ext.c` come from unity-jsb (`jsb_build/quickjs/`, MIT). They exist because +most of what the C# layer wants is either `static inline` in `quickjs.h` or variadic, and P/Invoke +can reach neither; plus the bridge class and payload, which are genuinely unity-jsb's own. + +Ported to ng with four changes, all in `unity_qjs.c`: + +- **`JS_BOOL`** — ng dropped the alias for C `bool`. Redefined here as `int`, deliberately: it keeps + the shim's ABI where it was, so the C# `JS_BOOL = Int32` declarations for these 25 functions stay + correct and the `bool`-width problem is confined to ng's own exports. +- **`JS_NewClassID`** — gained a `JSRuntime *` and now allocates from `rt->js_class_id_alloc`. + Allocated through a zeroed local so each runtime bumps its own counter and actually reserves the + id, rather than reusing a process-global one it never claimed. +- **`JSB_FreeRuntime`** — unity-jsb had patched Bellard's `JS_FreeRuntime` to return whether the GC + object list came out empty, and `ScriptRuntime` logs "gc object leaks" on 0. ng's is `void` and + reports leaks by asserting in debug builds, so this now returns 1 unconditionally. **That + diagnostic is lost** — the only deliberate behaviour regression in the port. +- **`JSB_Init`** — ran from a C# static initialiser, before any runtime exists, so it can no longer + allocate class ids. `JSB_NewRuntime` already did it, and nothing in C# declares `JSB_GetClassID`. + +Two functions were added: + +- **`JSB_ThrowError`** — present in the shipped DLL but **not in unity-jsb's source tree**, which is + a commit behind the binary. Reconstructed from its only caller, `JSNative.ThrowInternalError`, + which passes an explicit length because the message is not null-terminated: despite the name it + raises an InternalError. Worth re-checking against upstream if it ever turns up. +- **`JSB_ATOM_Operators` / `JSB_ATOM_Symbol_operatorSet`** — ng removed operator overloading, so the + atom table has no entry to generate an accessor from. They return `JS_ATOM_NULL`, which is + load-bearing rather than a stub: `JSAtom.IsValid` is `_value != 0` and every call site is already + guarded by it. + +The shim still defines ~27 functions the C# layer no longer declares, including the struct fast +paths. They cost two unused exports each and nothing else; prune them once the DLL is proven in the +Editor, not before. + +## Where it does not build yet + +Windows x64 with MSVC only. unity-jsb built Windows with MinGW and only WSA with MSVC; both follow +the Win64 ABI for the 16-byte `JSValue` return, so the switch is safe, but it is untested for the +other eleven artifacts (3 Android ABIs, iOS, macOS, 4 WSA, Linux x64, Windows x86). diff --git a/native/quickjs/src/unity_ext.c b/native/quickjs/src/unity_ext.c new file mode 100644 index 00000000..513a9d47 --- /dev/null +++ b/native/quickjs/src/unity_ext.c @@ -0,0 +1,420 @@ +/* + * The JSB_ and jsb_ shim com.reactunity.quickjs P/Invokes into. + * + * Vendored from unity-jsb (jsb_build/quickjs/unity_ext.c), MIT, Copyright (c) 2019 + * huliangjie, and ported to quickjs-ng. See ../README.md for every change and why. + */ + +JS_EXPORT JSValue jsb_crossbind_constructor(JSContext *ctx, JSValue new_target) +{ + JSValue proto = JS_GetProperty(ctx, new_target, JS_ATOM_prototype); + if (!JS_IsException(proto)) + { + JSValue val = JS_NewObjectProtoClass(ctx, proto, js_bridge_class_id); + JS_FreeValue(ctx, proto); + return val; + } + + return proto; +} + +JS_EXPORT JSValue jsb_construct_bridge_object(JSContext *ctx, JSValue proto, int32_t object_id) +{ + JSValue obj = JS_CallConstructor(ctx, proto, 0, NULL); + if (!JS_IsException(obj)) + { + JSPayload *sv = (JSPayload *)js_malloc(ctx, sizeof(JSPayloadHeader)); + sv->header.type_id = JS_BO_OBJECT; + sv->header.value = object_id; + JSB_SetOpaque(ctx, obj, sv); + } + + return obj; +} + +JS_EXPORT JSValue jsb_new_bridge_object(JSContext *ctx, JSValue proto, int32_t object_id/*, int32_t type_id = JS_BO_OBJECT */) +{ + JSValue obj = JS_NewObjectProtoClass(ctx, proto, js_bridge_class_id); + if (!JS_IsException(obj)) + { + JSPayload *sv = (JSPayload *)js_malloc(ctx, sizeof(JSPayloadHeader)); + sv->header.type_id = JS_BO_OBJECT; + sv->header.value = object_id; + JSB_SetOpaque(ctx, obj, sv); + } + + return obj; +} + +// for constructor new_target +JS_EXPORT JSValue JSB_NewBridgeClassObject(JSContext *ctx, JSValue new_target, int32_t object_id/*, int32_t type_id = JS_BO_OBJECT */) +{ + JSValue proto = JS_GetProperty(ctx, new_target, JS_ATOM_prototype); + if (!JS_IsException(proto)) + { + JSValue obj = jsb_new_bridge_object(ctx, proto, object_id/*, type_id*/); + JS_FreeValue(ctx, proto); + return obj; + } + + return proto; +} + +JS_EXPORT JSValue jsb_new_bridge_value(JSContext *ctx, JSValue proto, int32_t size) +{ + JSValue obj = JS_NewObjectProtoClass(ctx, proto, js_bridge_class_id); + if (!JS_IsException(obj)) + { + JSPayload *sv = (JSPayload *)js_mallocz(ctx, sizeof(JSPayloadHeader) + size); + sv->header.type_id = JS_BO_VALUE; + sv->header.value = size; + JSB_SetOpaque(ctx, obj, sv); + } + + return obj; +} + +JS_EXPORT JSValue JSB_NewBridgeClassValue(JSContext *ctx, JSValue new_target, int32_t size) +{ + JSValue proto = JS_GetProperty(ctx, new_target, JS_ATOM_prototype); + if (!JS_IsException(proto)) + { + JSValue obj = jsb_new_bridge_value(ctx, proto, size); + JS_FreeValue(ctx, proto); + return obj; + } + + return proto; +} + +JS_EXPORT JSPayloadHeader jsb_get_payload_header(JSContext *ctx, JSValue val) +{ + JSPayloadHeader *sv = (JSPayloadHeader *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv) + { + return *sv; + } + return _null_payload; +} + +JS_EXPORT JSPayload *jsb_get_payload(JSContext *ctx, JSValue val) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv) + { + return sv; + } + return 0; +} + +JS_EXPORT JS_BOOL jsb_get_floats(JSContext *ctx, JSValue val, int n, float *v0) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * n) + { + float *ptr = (float *)&(sv->data[0]); + for (int i = 0; i < n; ++i) + { + *(v0 + i) = ptr[i]; + } + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_floats(JSContext *ctx, JSValue val, int n, float *v0) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * n) + { + float *ptr = (float *)&(sv->data[0]); + for (int i = 0; i < n; ++i) + { + ptr[i] = *(v0 + i); + } + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_get_float_2(JSContext *ctx, JSValue val, float *v0, float *v1) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 2) + { + float *ptr = (float *)&(sv->data[0]); + *v0 = ptr[0]; + *v1 = ptr[1]; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_float_2(JSContext *ctx, JSValue val, float v0, float v1) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 2) + { + float *ptr = (float *)&(sv->data[0]); + ptr[0] = v0; + ptr[1] = v1; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_get_float_3(JSContext *ctx, JSValue val, float *v0, float *v1, float *v2) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 3) + { + float *ptr = (float *)&(sv->data[0]); + *v0 = ptr[0]; + *v1 = ptr[1]; + *v2 = ptr[2]; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_float_3(JSContext *ctx, JSValue val, float v0, float v1, float v2) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 3) + { + float *ptr = (float *)&(sv->data[0]); + ptr[0] = v0; + ptr[1] = v1; + ptr[2] = v2; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_get_float_4(JSContext *ctx, JSValue val, float *v0, float *v1, float *v2, float *v3) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 4) + { + float *ptr = (float *)&(sv->data[0]); + *v0 = ptr[0]; + *v1 = ptr[1]; + *v2 = ptr[2]; + *v3 = ptr[3]; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_float_4(JSContext *ctx, JSValue val, float v0, float v1, float v2, float v3) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 4) + { + float *ptr = (float *)&(sv->data[0]); + ptr[0] = v0; + ptr[1] = v1; + ptr[2] = v2; + ptr[3] = v3; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_get_ints(JSContext *ctx, JSValue val, int n, int *v0) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * n) + { + int *ptr = (int *)&(sv->data[0]); + for (int i = 0; i < n; ++i) + { + *(v0 + i) = ptr[i]; + } + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_ints(JSContext *ctx, JSValue val, int n, int *v0) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * n) + { + int *ptr = (int *)&(sv->data[0]); + for (int i = 0; i < n; ++i) + { + ptr[i] = *(v0 + i); + } + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_get_int_1(JSContext *ctx, JSValue val, int *v0) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int)) + { + int *ptr = (int *)&(sv->data[0]); + *v0 = ptr[0]; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_int_1(JSContext *ctx, JSValue val, int v0) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int)) + { + int *ptr = (int *)&(sv->data[0]); + ptr[0] = v0; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_get_int_2(JSContext *ctx, JSValue val, int *v0, int *v1) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 2) + { + int *ptr = (int *)&(sv->data[0]); + *v0 = ptr[0]; + *v1 = ptr[1]; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_int_2(JSContext *ctx, JSValue val, int v0, int v1) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 2) + { + int *ptr = (int *)&(sv->data[0]); + ptr[0] = v0; + ptr[1] = v1; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_get_int_3(JSContext *ctx, JSValue val, int *v0, int *v1, int *v2) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 3) + { + int *ptr = (int *)&(sv->data[0]); + *v0 = ptr[0]; + *v1 = ptr[1]; + *v2 = ptr[2]; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_int_3(JSContext *ctx, JSValue val, int v0, int v1, int v2) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 3) + { + int *ptr = (int *)&(sv->data[0]); + ptr[0] = v0; + ptr[1] = v1; + ptr[2] = v2; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_get_int_4(JSContext *ctx, JSValue val, int *v0, int *v1, int *v2, int *v3) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 4) + { + int *ptr = (int *)&(sv->data[0]); + *v0 = ptr[0]; + *v1 = ptr[1]; + *v2 = ptr[2]; + *v3 = ptr[3]; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_int_4(JSContext *ctx, JSValue val, int v0, int v1, int v2, int v3) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 4) + { + int *ptr = (int *)&(sv->data[0]); + ptr[0] = v0; + ptr[1] = v1; + ptr[2] = v2; + ptr[3] = v3; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_get_bytes(JSContext *ctx, JSValue val, int n, byte *v0) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(byte) * n) + { + byte *ptr = (byte *)&(sv->data[0]); + for (int i = 0; i < n; ++i) + { + *(v0 + i) = ptr[i]; + } + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_bytes(JSContext *ctx, JSValue val, int n, byte *v0) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(byte) * n) + { + byte *ptr = (byte *)&(sv->data[0]); + for (int i = 0; i < n; ++i) + { + ptr[i] = *(v0 + i); + } + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_get_byte_4(JSContext *ctx, JSValue val, byte *v0, byte *v1, byte *v2, byte *v3) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(byte) * 4) + { + byte *ptr = (byte *)&(sv->data[0]); + *v0 = ptr[0]; + *v1 = ptr[1]; + *v2 = ptr[2]; + *v3 = ptr[3]; + return TRUE; + } + return FALSE; +} + +JS_EXPORT JS_BOOL jsb_set_byte_4(JSContext *ctx, JSValue val, byte v0, byte v1, byte v2, byte v3) +{ + JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(byte) * 4) + { + byte *ptr = (byte *)&(sv->data[0]); + ptr[0] = v0; + ptr[1] = v1; + ptr[2] = v2; + ptr[3] = v3; + return TRUE; + } + return FALSE; +} diff --git a/native/quickjs/src/unity_qjs.c b/native/quickjs/src/unity_qjs.c new file mode 100644 index 00000000..a00a6c59 --- /dev/null +++ b/native/quickjs/src/unity_qjs.c @@ -0,0 +1,294 @@ +/* + * The JSB_ and jsb_ shim com.reactunity.quickjs P/Invokes into. + * + * Vendored from unity-jsb (jsb_build/quickjs/unity_qjs.c), MIT, Copyright (c) 2019 + * huliangjie, and ported to quickjs-ng. See ../README.md for every change and why. + */ +/* +vim /etc/apt/sources.list +deb http://us.archive.ubuntu.com/ubuntu trusty main universe +sudo apt-get update +sudo apt-get install mingw32 + sudo apt-get install mingw-w64 +./configure --host=i686-w64-mingw32 + ./configure --host=x86_64-w64-mingw32 +make +*/ + +#ifndef UNITY_WEBGL +#include "quickjs.h" +#endif + +#ifndef JS_EXPORT +#define JS_EXPORT +#endif + +#ifndef EMSCRIPTEN +#ifndef CONFIG_ATOMICS +#define CONFIG_ATOMICS +#endif +#endif + +#define byte unsigned char + +/* quickjs-ng dropped this alias; the shim keeps an int-wide ABI on purpose. */ +#ifndef JS_BOOL +#define JS_BOOL int +#endif +// #define JS_HIDDEN_PROP(s) ("\xFF" s) + +#ifndef UNITY_WEBGL + +#ifndef FALSE +enum +{ + FALSE = 0, + TRUE = 1, +}; +#endif // !FALSE + +enum +{ + __JS_ATOM_NULL = JS_ATOM_NULL, +#define DEF(name, str) JS_ATOM_##name, +#define SSR +#include "quickjs-atom.h" +#undef DEF + JS_ATOM_END, +}; + +#define DEF(name, str) \ + JS_EXPORT JSAtom JSB_ATOM_##name() { return JS_ATOM_##name; } +#include "quickjs-atom.h" +#undef DEF + +/* quickjs-ng removed operator overloading, so these two atoms do not exist. + Returning 0 is not a placeholder: JSAtom.IsValid is `_value != 0`, and every + C# call site is already guarded by it or by IsOperatorOverloadingSupported. */ +JS_EXPORT JSAtom JSB_ATOM_Operators() { return JS_ATOM_NULL; } +JS_EXPORT JSAtom JSB_ATOM_Symbol_operatorSet() { return JS_ATOM_NULL; } + +#endif // !UNITY_WEBGL + +static JSClassID js_class_id_begin = 0; +static JSClassID js_bridge_class_id = 0; + +// quickjs 内置 class id 之后的第一个可用 id +JS_EXPORT JSClassID JSB_GetClassID() +{ + return js_class_id_begin; +} + +JS_EXPORT JSClassID JSB_GetBridgeClassID() +{ + return js_bridge_class_id; +} + +#define JS_BO_TYPE 1 +#define JS_BO_OBJECT 2 +#define JS_BO_VALUE 3 +// #define JS_BO_STRICT_OBJECT 4 + +typedef struct JSPayloadHeader +{ + int32_t type_id; // JS_BO_* + int32_t value; +} JSPayloadHeader; + +static JSPayloadHeader _null_payload = {.type_id = 0, .value = 0}; + +typedef struct JSPayload +{ + JSPayloadHeader header; + char data[1]; +} JSPayload; + +JS_EXPORT JSValue JSB_NewEmptyString(JSContext *ctx) +{ + return JS_NewStringLen(ctx, "", 0); +} + +JS_EXPORT JSValue JSB_NewInt64(JSContext *ctx, int64_t val) +{ + return JS_NewInt64(ctx, val); +} + +/* return 0 for success, otherwise -1 in case of exception */ +JS_EXPORT int JSB_ToUint32(JSContext *ctx, uint32_t *pres, JSValueConst val) +{ + return JS_ToInt32(ctx, (int32_t *)pres, val); +} + +JS_EXPORT JSValue JSB_NewFloat64(JSContext *ctx, double d) +{ + return JS_NewFloat64(ctx, d); +} + +JS_EXPORT JSValue JSB_ThrowError(JSContext *ctx, const char *buf, size_t buf_len) +{ + return JS_ThrowInternalError(ctx, "%.*s", (int)buf_len, buf); +} + +JS_EXPORT JSValue JSB_ThrowTypeError(JSContext *ctx, const char *msg) +{ + return JS_ThrowTypeError(ctx, "%s", msg); +} + +JS_EXPORT JSValue JSB_ThrowInternalError(JSContext *ctx, const char *msg) +{ + return JS_ThrowInternalError(ctx, "%s", msg); +} + +JS_EXPORT JSValue JSB_ThrowRangeError(JSContext *ctx, const char *msg) +{ + return JS_ThrowRangeError(ctx, "%s", msg); +} + +JS_EXPORT JSValue JSB_ThrowReferenceError(JSContext *ctx, const char *msg) +{ + return JS_ThrowReferenceError(ctx, "%s", msg); +} + +JS_EXPORT void JSB_FreeValue(JSContext *ctx, JSValue v) +{ + JS_FreeValue(ctx, v); +} + +JS_EXPORT void JSB_FreeValueRT(JSRuntime *rt, JSValue v) +{ + JS_FreeValueRT(rt, v); +} + +JS_EXPORT JSValue JSB_DupValue(JSContext *ctx, JSValueConst v) +{ + return JS_DupValue(ctx, v); +} + +JS_EXPORT JSValue JSB_Eval(JSContext *ctx, const char *input, int input_len, + const char *filename, int eval_flags) +{ + return JS_Eval(ctx, input, input_len, filename, eval_flags); +} + +JS_EXPORT JSValue JSB_NewCFunction(JSContext *ctx, JSCFunction *func, JSAtom atom, int length, JSCFunctionEnum cproto, int magic) +{ + const char *name = JS_AtomToCString(ctx, atom); + if (!name) + { + return JS_ThrowInternalError(ctx, "no such atom: %d", atom); + } + JSValue funcVal = JS_NewCFunction2(ctx, func, name, length, cproto, magic); + JS_FreeCString(ctx, name); + return funcVal; +} + +JS_EXPORT JSValue JSB_NewCFunctionMagic(JSContext *ctx, JSCFunctionMagic *func, JSAtom atom, int length, JSCFunctionEnum cproto, int magic) +{ + const char *name = JS_AtomToCString(ctx, atom); + if (!name) + { + return JS_ThrowInternalError(ctx, "no such atom: %d", atom); + } + JSValue funcVal = JS_NewCFunction2(ctx, (JSCFunction *)func, name, length, cproto, magic); + JS_FreeCString(ctx, name); + return funcVal; +} + +typedef void JSGCObjectFinalizer(JSRuntime* rt, JSPayloadHeader header); + +typedef struct JSBRuntimePayload { + void* opaque; + JSGCObjectFinalizer* finalizer; +} JSBRuntimePayload; + +// 释放数据, 返回头信息副本 +JS_EXPORT JSPayloadHeader JSB_FreePayload(JSContext *ctx, JSValue val) +{ + void *sv = JS_GetOpaque(val, js_bridge_class_id); + if (sv) + { + JSPayloadHeader header = *(JSPayloadHeader *)sv; + JS_SetOpaque(val, NULL); + js_free(ctx, sv); + return header; + } + return _null_payload; +} + +static void _JSBClass_Finalizer(JSRuntime* rt, JSValue obj) +{ + void *sv = JS_GetOpaque(obj, js_bridge_class_id); + if (sv) + { + JSPayloadHeader header = *(JSPayloadHeader *)sv; + JS_SetOpaque(obj, NULL); + js_free_rt(rt, sv); + JSBRuntimePayload* rt_payload = (JSBRuntimePayload*)JS_GetRuntimeOpaque(rt); + if (rt_payload && rt_payload->finalizer) + { + rt_payload->finalizer(rt, header); + } + } +} + +JS_EXPORT JSRuntime* JSB_NewRuntime(JSGCObjectFinalizer* finalizer) +{ + JSRuntime* rt = JS_NewRuntime(); + JSBRuntimePayload* payload = js_malloc_rt(rt, sizeof(JSBRuntimePayload)); + payload->opaque = 0; + payload->finalizer = finalizer; + JS_SetRuntimeOpaque(rt, payload); + + JSClassDef cls_def; + + cls_def.class_name = "CSharpClass"; + cls_def.finalizer = _JSBClass_Finalizer; + cls_def.exotic = NULL; + cls_def.gc_mark = NULL; + cls_def.call = NULL; + + JSClassID bridge_class_id = 0; + JS_NewClassID(rt, &bridge_class_id); + js_bridge_class_id = bridge_class_id; + JS_NewClass(rt, js_bridge_class_id, &cls_def); + + return rt; +} + +JS_EXPORT int JSB_FreeRuntime(JSRuntime* rt) +{ + void* payload = JS_GetRuntimeOpaque(rt); + if (payload) + { + JS_SetRuntimeOpaque(rt, 0); + js_free_rt(rt, payload); + } + JS_FreeRuntime(rt); + /* ng reports leaks by asserting in debug builds, not by return value. */ + return 1; +} + +JS_EXPORT void* JSB_GetRuntimeOpaque(JSRuntime* rt) +{ + JSBRuntimePayload* payload = (JSBRuntimePayload*)JS_GetRuntimeOpaque(rt); + return payload ? payload->opaque : 0; +} + +JS_EXPORT void JSB_SetRuntimeOpaque(JSRuntime* rt, void* opaque) +{ + JSBRuntimePayload* payload = (JSBRuntimePayload*)JS_GetRuntimeOpaque(rt); + if (payload) + { + payload->opaque = opaque; + } +} + +#define JSB_SetOpaque(ctx, obj, opaque) JS_SetOpaque((obj), (opaque)) +#define JSB_GetOpaque(ctx, val, class_id) JS_GetOpaque((val), (class_id)) + +JS_EXPORT int JSB_Init() +{ + return 0xa; // version tag for unity_qjs.c +} + +#include "unity_ext.c" From 8173d4f32c6fb587ec53e6698ade6e84674c2355 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 18:48:59 +0300 Subject: [PATCH 11/58] docs(quickjs): record what phase 1 and gate 0 measured Most of this replaces guesses with numbers, and two sections replace claims that were wrong. The plan said `Binding/ValueTypes/` was an open question needing a build to settle, and that the shim was somewhere between 18 and 41 functions. Both were answered by noticing that JSB_UNITYLESS is defined unconditionally: 28.9% of the package was never compiled, the struct fast paths among it, and the real number is 25 functions plus 16 atoms. It also called `Binding/Editor/` pure codegen with no native dependency and treated deleting it as subtraction. It is reachable at runtime from BindingManager._EmitDelegateMethod, so that is now written up as a feature decision rather than a pending chore. New: the four atoms ng does not have and what each costs, the six names phase 3 must fix in C#, and where gate 0 stands. Plus check-exports.py, so the gate 0 claim is a command rather than a paragraph. --- native/quickjs/README.md | 12 +++ native/quickjs/check-exports.py | 171 ++++++++++++++++++++++++++++++++ unity/quickjs/MIGRATION.md | 161 +++++++++++++++++++++++------- 3 files changed, 307 insertions(+), 37 deletions(-) create mode 100644 native/quickjs/check-exports.py diff --git a/native/quickjs/README.md b/native/quickjs/README.md index 33b447e8..a54a8f6f 100644 --- a/native/quickjs/README.md +++ b/native/quickjs/README.md @@ -19,6 +19,18 @@ cmake --build build --config Release --target quickjs **Always name the target.** quickjs-ng registers `run-test262`, `api-test`, `lre-test` and friends unconditionally, so a default build compiles all of them. +Then check it against the thing that has to load it: + +```bash +python native/quickjs/check-exports.py +``` + +[check-exports.py](check-exports.py) reads the live P/Invoke set out of Unity's generated +`tests/*.csproj` — the real define set and the real source list, so a declaration inside a dead +`#if` does not count — and diffs it against `dumpbin -exports`. It exits non-zero on any gap, so it +can gate CI. Currently 99 of 105; the 6 remaining are C#-side phase 3 work, listed in +[MIGRATION.md](../../unity/quickjs/MIGRATION.md). + ## What it links quickjs-ng is fetched by CMake, never vendored, and pinned to a **commit** — `QJS_COMMIT` in diff --git a/native/quickjs/check-exports.py b/native/quickjs/check-exports.py new file mode 100644 index 00000000..1603b727 --- /dev/null +++ b/native/quickjs/check-exports.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python3 +"""Gate 0 exit check: does the built library export every name the C# layer P/Invokes? + + python check-exports.py [path-to-quickjs.dll] + +Reads the live P/Invoke set out of Unity's generated `tests/*.csproj` -- both the +real define set and the real source list -- so a declaration sitting inside a dead +`#if` block does not count as a requirement. Open `tests/` in the Editor once if the +.csproj files are missing. + +Exits non-zero if anything is missing, so it can gate CI. +""" +import glob +import io +import os +import re +import shutil +import subprocess +import sys + +HERE = os.path.dirname(os.path.abspath(__file__)) +REPO = os.path.normpath(os.path.join(HERE, "..", "..")) +TESTS = os.path.join(REPO, "tests") + +DEFAULT_DLL = os.path.join(HERE, "build", "Release", "quickjs.dll") + +DECL = re.compile( + r"\[DllImport\((?P[^\]]*)\)\]\s*" + r"(?:\[[^\]]*\]\s*)*" + r"(?:public|internal|private|protected)?\s*static\s+extern\s+(?:unsafe\s+)?" + r"[^;(]*?\b(?P[A-Za-z_][A-Za-z_0-9]*)\s*\(", + re.S, +) +DIRECTIVE = re.compile(r"^\s*#\s*(if|elif|else|endif)\b(.*)$") +TOK = re.compile(r"\(|\)|\|\||&&|!|[A-Za-z_][A-Za-z_0-9]*") + + +def evaluate(expr, defines): + """Evaluate a C# preprocessor condition. Unknown symbols are undefined.""" + toks = TOK.findall(expr) + pos = [0] + + def peek(): + return toks[pos[0]] if pos[0] < len(toks) else None + + def primary(): + t = toks[pos[0]] + pos[0] += 1 + if t == "(": + v = or_expr() + if peek() == ")": + pos[0] += 1 + return v + if t == "!": + return not primary() + if t in ("true", "false"): + return t == "true" + return t in defines + + def and_expr(): + v = primary() + while peek() == "&&": + pos[0] += 1 + v = primary() and v + return v + + def or_expr(): + v = and_expr() + while peek() == "||": + pos[0] += 1 + v = and_expr() or v + return v + + return or_expr() + + +def live_source(path, defines): + """The file with preprocessor-excluded lines blanked out.""" + text = io.open(path, encoding="utf-8-sig", newline="").read() + stack, out = [], [] + for raw in text.replace("\r\n", "\n").split("\n"): + m = DIRECTIVE.match(raw) + active = all(f[0] for f in stack) + if m: + kind, rest = m.group(1), m.group(2).split("//")[0] + if kind == "if": + val = active and evaluate(rest, defines) + stack.append([val, val, active]) + elif kind == "elif" and stack: + f = stack[-1] + val = f[2] and not f[1] and evaluate(rest, defines) + f[0], f[1] = val, f[1] or val + elif kind == "else" and stack: + f = stack[-1] + f[0], f[1] = f[2] and not f[1], True + elif kind == "endif" and stack: + stack.pop() + out.append("") + continue + out.append(raw if active else "") + return "\n".join(out) + + +def find_dumpbin(): + exe = shutil.which("dumpbin") + if exe: + return exe + pattern = r"C:\Program Files*\Microsoft Visual Studio\*\*\VC\Tools\MSVC\*\bin\Hostx64\x64\dumpbin.exe" + hits = sorted(glob.glob(pattern)) + return hits[-1] if hits else None + + +def wanted_names(): + projects = sorted(glob.glob(os.path.join(TESTS, "*.csproj"))) + if not projects: + sys.exit("no .csproj in %s -- open tests/ in the Unity Editor once to generate them" % TESTS) + wanted = {} + for proj in projects: + base = os.path.basename(proj)[:-7] + if not (base.startswith("jsb.") or base.startswith("ReactUnity")): + continue + text = io.open(proj, encoding="utf-8-sig").read() + m = re.search(r"(.*?)", text, re.S) + defines = {x.strip() for x in (m.group(1) if m else "").split(";") if x.strip()} + for rel in re.findall(r' 1 else DEFAULT_DLL + if not os.path.exists(dll): + sys.exit("no library at %s -- build it first (see README.md)" % dll) + dumpbin = find_dumpbin() + if not dumpbin: + sys.exit("dumpbin not found; run from a Visual Studio developer prompt") + + out = subprocess.run([dumpbin, "-exports", dll], capture_output=True, text=True).stdout + exports = set() + for line in out.splitlines(): + parts = line.split() + if len(parts) == 4 and parts[0].isdigit() and parts[2].isalnum(): + exports.add(parts[3]) + if not exports: + sys.exit("dumpbin reported no exports for %s" % dll) + + wanted = wanted_names() + missing = sorted(n for n in wanted if n not in exports) + + print("live P/Invoke names bound to JSBDLL: %d" % len(wanted)) + print("exports in %s: %d" % (os.path.basename(dll), len(exports))) + print("satisfied: %d, missing: %d" % (len(wanted) - len(missing), len(missing))) + if missing: + print() + for n in missing: + print(" %-32s <- %s" % (n, ", ".join(sorted(wanted[n])))) + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/unity/quickjs/MIGRATION.md b/unity/quickjs/MIGRATION.md index 63c2af74..3b3de91c 100644 --- a/unity/quickjs/MIGRATION.md +++ b/unity/quickjs/MIGRATION.md @@ -29,10 +29,14 @@ repo at `S:/Work/Unity/quickjs-ng-csharp` (23 assertions passing against a quick | Group | Count | Disposition | |---|---:|---| | `JS_*` — real QuickJS API | 72 | 60 exported by ng unchanged; 2 inline (`JS_NewFloat64`, `JS_NewString`) need a shim; 10 absent and all free — see below | -| `JSB_*` / `jsb_*` — unity-jsb C shim | 46 | None exist in ng. 43 live, 3 dead (removed on this branch). **This is the migration.** | -| `JSB_ATOM_*` | 16 | Only 16 of the ~1000 the DLL exports are used | +| `JSB_*` / `jsb_*` — unity-jsb C shim | 43 | None exist in ng. **25 live, 18 removed on this branch.** This is the migration. | +| `JSB_ATOM_*` | 16 | Only 16 of the ~1000 the DLL exports are used. **4 do not exist in ng** — see below | | `js_*` — allocator | 3 | `js_malloc`, `js_free`, `js_strdup` all exported by ng | +So phase 2 is **25 shim functions plus 16 atoms**. That number is measured, not estimated: +liveness is evaluated with Unity's real define set, so callers inside dead `#if` blocks do +not count. See "What JSB_UNITYLESS hid" below for why it dropped so far. + Every one of the 10 absent `JS_*` costs nothing except two. `JS_GetPropertyInternal` and `JS_SetPropertyInternal` are **live** — called from wrapper methods in `JSApi.cs` itself, at lines 231 and 488 — so phase 3 has to map them onto ng's `JS_GetProperty`/`JS_SetProperty`. For the rest: @@ -42,16 +46,24 @@ no-op stubs in the `#else`; `JS_SetBaseUrl` is a real P/Invoke only under under `JSB_NO_BIGNUM`, which ng makes permanent. Nothing in the QuickJS path touches BigFloat/BigDecimal either. -Where the 41 live shim functions are consumed: +## The four atoms ng does not have -| Directory | Sites | What it is | -|---|---:|---| -| `Binding/ValueTypes/` | 60 | Unity struct marshalling (`Values_Vector3`, `Values_Color`, …) — the `jsb_get/set_float_4` fast paths. **The open question.** | -| `Binding/` root | 14 | Runtime reflection binder (`DynamicType`, `DynamicMethod`, `DefaultBinder`). Used. | -| `Source/` root | 13 | `ScriptRuntime`, `ScriptContext`. Used. | -| `Source/Unity/` | 12 | Unity integration. Used. | -| `Source/Utils/`, `Source/Experimental/` | 4 | Used. | -| `Binding/Editor/` | **0** | The codegen. Pure C#, no native dependency. | +`fileName`, `lineNumber`, `Operators`, `Symbol_operatorSet` are absent from ng's +`quickjs-atom.h`. They split cleanly into a free case and a real one: + +- **`Operators` / `Symbol_operatorSet`** — dropped with operator overloading. Free: every + call site already guards on `JS_ATOM_Operators.IsValid` or + `JSApi.IsOperatorOverloadingSupported` (`ScriptContext.cs:71`, `OperatorDecl.cs:110`, + `TypeBindingInfo.cs:899`). The shim returns `JS_ATOM_NULL` and the guards do the rest. +- **`fileName` / `lineNumber`** — not free, and silent. Bellard's `build_backtrace` defines + both **on the Error object**; ng only keeps the `Function.prototype` getters. `JSContext.cs:55` + reads them off a caught exception to build the error location, so under ng it gets `undefined` + twice and every script error loses its file and line without anything failing. Phase 3 has to + re-derive the location from ng's `stack`. + +Everything else the atom machinery needs is unchanged: ng's `quickjs-atom.h` uses the same +`DEF(name, str)` shape, so unity-jsb's enum-and-accessor trick ports verbatim (241 atoms in ng +against 224 in Bellard). ## What fails silently @@ -91,27 +103,49 @@ The async loader is *easier* here: the browser has real promises and real `impor ## Phases **Gate 0 — the native build pipeline.** Twelve binaries ship (3 Android ABIs, iOS `.a`, macOS -bundle, 4 WSA architectures, Linux x64, Windows x64 + x86) and the repo has **no sources and no -build script** for any of them — they are unity-jsb prebuilts. Nothing downstream is verifiable -until this exists. Fork unity-jsb's C shim, repoint at quickjs-ng, stand up a CI matrix. ng helps: -proper CMake with real cross-compilation and a supported wasm target. +bundle, 4 WSA architectures, Linux x64, Windows x64 + x86) and **this repo** has no sources and no +build script for any of them. Upstream does: `jsb_build/quickjs/` in unity-jsb holds the whole +thing — `unity_qjs.c` (275 lines) and `unity_ext.c` (414), a `CMakeLists.txt`, and +`make_jsb_{win,linux,macos,ios,android,wsa}` scripts. Gate 0 is vendoring that and repointing it at +ng, not writing it. Note Windows is built with **MinGW** (`x86_64-w64-mingw32-gcc`) and only WSA +with MSVC. + +The port itself looks cheap: of the 28 distinct `JS_*` names the two shim files use, 27 are in ng's +public `quickjs.h` and the 28th is a macro they define themselves. `unity_qjs.c` is a normal +translation unit over the public header plus `quickjs-atom.h`, not a patch into `quickjs.c`, so +there is no merge to maintain against ng. +**Windows x64 is done** — [native/quickjs](../../native/quickjs) builds it, and the exit check +below is mechanised. Eleven artifacts and the CI matrix remain. *Exit: twelve artifacts built reproducibly in CI from a tagged ng commit, Windows x64 loading in the Editor.* -**Phase 1 — subtract, against the old DLL.** Partly done on this branch (see below). Remaining: drop -`Binding/Editor/`, which needs `BindingManager.Generate()` split first — `QuickJSEngine.cs:83` calls -`bm.Generate(TypeBindingFlags.None)`, which still constructs a `CodeGenerator` and runs the full -per-type traversal into disabled buffers because no `codegenCallback` is passed. Then run the -`ValueTypes/` experiment. All of it against the **old** DLL, one subsystem per commit, suite green -between each — never bundle subtraction with migration. +**Phase 1 — subtract, against the old DLL.** Done on this branch except for one item that turned +out not to be subtraction at all: see "The codegen is not separable" below. Everything else landed — +the dead Unity integration, the struct marshalling, the 18 uncalled shim declarations, the +`JSB_UNITYLESS` resolution, and the `BindingManager.Bind()` split that takes `CodeGenerator` out of +the reflect-binding path. *Exit: repo compiles and `pnpm unity test tests` passes against the old DLL with those subsystems gone.* -**Phase 2 — port the C shim.** Whatever survives the `ValueTypes/` experiment — 18 to 41 `JSB_*` -functions — against ng headers, plus the two inline shims and the 16 atoms. +**Phase 2 — port the C shim.** 25 `JSB_*`/`jsb_*` functions against ng headers, plus the two inline +shims and the 16 atoms (4 of which need the treatment described above). *Exit: `libquickjs` builds against ng and exports everything the C# layer names.* **Phase 3 — rewrite the C# declarations from the header.** Not by eye, not by editing in place. Generate or hand-check every declaration against `quickjs.h`, fixing `bool` widths and dropped contexts. Re-derive the tag constants. + +Six names are already known to need C# work, because the Windows DLL builds and does not export +them. This is the whole list, not a sample — everything else the C# layer P/Invokes is satisfied: + +| Name | What it needs | +|---|---| +| `JS_NewString` | `static inline` in ng. Call `JS_NewStringLen`, which is exported | +| `JS_GetPropertyInternal` / `JS_SetPropertyInternal` | remap the two `JSApi.cs` wrappers onto `JS_GetProperty` / `JS_SetProperty` | +| `JS_AddIntrinsicOperators` | stub it — the `JSB_NO_BIGNUM` path becomes permanent | +| `JSB_ATOM_fileName` / `JSB_ATOM_lineNumber` | delete the declarations and rewrite `JSContext.cs:55` against `stack` | + +Keep the check honest by re-running it rather than reasoning about it — +`python native/quickjs/check-exports.py` reads the live P/Invoke set straight out of Unity's +generated `.csproj` files and diffs it against `dumpbin -exports`, exiting non-zero on any gap. *Exit: Unity suite passes on Windows against the ng DLL **and** a desktop IL2CPP player build runs.* **Phase 4 — mirror in the jslib, then wire the async loader.** Bring `jsbplugin.ts` into agreement, @@ -120,18 +154,47 @@ then install `JS_SetModuleLoaderFuncAsync`, port `QuickJSModuleLoader` onto retire `ModuleCompat.RewriteDynamicImports` for QuickJS. *Exit: kitchen-sink loads a module graph over HTTP with no blocking frame, on desktop and in WebGL.* -## The open question: can `Binding/ValueTypes/` go? +## What JSB_UNITYLESS hid + +Every jsb asmdef carried a `versionDefines` entry defining `JSB_UNITYLESS` with an empty +expression, so it was on for every platform, always. **28.9% of the package's C# — 9,588 of +33,137 code lines — was excluded by the preprocessor**, and nothing said so. -It is 60 of the 74 shim call-sites, and grep cannot settle it. ReactUnity calls only three `Values` -members — `js_get_classvalue` (6×), `register_type_caster` (4×), `PushArray` (1×) — registers its own -type casters, and its QuickJS files contain no direct `Vector2`/`Vector3`/`Color` references. But -`Values` is a partial class spread across all sixteen `Values_*.cs`, which may register into a -generic dispatch table those calls consult. +That is what settled the `ValueTypes/` question, which this document previously proposed +settling with a build: fifteen of the sixteen `Values_*.cs` files open with `#if !JSB_UNITYLESS`, +so the Vector/Color/Matrix fast paths had never been compiled and the shim call-sites attributed +to them did not exist. `Values_DateTime.cs` was the only live file. -**Settle it empirically:** delete `Binding/ValueTypes/`, compile against the **old** DLL, run -`pnpm unity test tests`. Green means the shim drops from 41 functions to 18 and the struct fast paths -never need porting. Red gives the exact dependency list. One build, and it is the difference between -porting 18 functions and 41. +It also took the whole of `Runtime/Source/Unity/` (45 files), including two entire assemblies — +`jsb.editor.unity` and `jsb.editor.hotfix` — and 468 KB of bundled Unity.Cecil DLLs. ReactUnity +supplies its own Unity layer, so jsb's `JSBehaviour`, inspectors, editor windows and Prefs GUI +were unreachable. + +If you are auditing this, the technique matters more than the number: inject a syntax error +inside the guard and compile. A `#`-prefixed token will not do — the lexer still scans excluded +regions for directives, so it errors either way and proves nothing. + +## The codegen is not separable + +This document used to call `Binding/Editor/` "the codegen. Pure C#, no native dependency" with +zero shim call-sites, and treat dropping it as subtraction. It is not. + +`BindingManager._EmitDelegateMethod` builds C# source with `CodeGenerator`, `CSNamespaceCodeGen` +and `DelegateCodeGen` and compiles it **at runtime**, as the fallback for a delegate signature no +hand-written template covers (`GetReflectedDelegateMethod` → `GenerateReflectedDelegateMethod`). +So `Codegen/` is reachable from the reflect-binding path, not just from the editor menu. + +It also cannot currently work, and fails in a way worth fixing on its own: the two guards +disagree. `CodeGenUtils.IsCodeEmitSupported()` returns true unless `NETCOREAPP`, but +`CodeGenUtils.Compile` is `#if !(NETCOREAPP || NET_STANDARD_2_0 || NET_STANDARD_2_1 || +NET_STANDARD)` and both test projects run `apiCompatibilityLevel: 6` (.NET Standard 2.1). So the +emit path runs, builds the source, gets `null` from `Compile`, dereferences it, and swallows the +`NullReferenceException` into `Error(exception)`. + +Deleting `Codegen/` is therefore a **deliberate feature drop** — delegates with `ref`/`out` +parameters outside the template set, for users on the .NET Framework API profile — and wants a +decision rather than a commit. `BindingManager.Bind()` already removes `CodeGenerator` from the +path everything actually uses, so nothing downstream is blocked on making that call. ## Risks @@ -149,18 +212,42 @@ porting 18 functions and 41. ## Done on this branch -Phase 1 subtractions that were verifiable without touching the engine: +Against the old DLL, one subsystem per commit, `pnpm unity compile tests` green between each and +the full suite green at the end (1,029 tests, 0 failures, both before and after). - **The V8 backend.** No `v8-bridge` binary ships anywhere in `Plugins/`, so every `JSB_WITH_V8_BACKEND` path referenced a DLL that does not exist. ClearScript covers V8. - **The debug server.** All five `JS_*Debugger*` entry points sat behind `JSB_WITH_V8_BACKEND` with no-op stubs in the `#else` — `JS_OpenDebugger` was `{ }`, `JS_IsDebuggerConnected` was `return 0`. - Never functional on QuickJS, so removing it is not a regression. -- **Dead API.** Three shim declarations with no callers: `JSB_GetBridgeClassID`, `jsb_get_int_4`, - `jsb_set_int_4`. + `ScriptRuntime.Initialize` then forced `args.withDebugServer = false` before anything read it, so + the waiting branch was unreachable and `OnDebuggerConnected` had no subscribers. Three layers of + dead. `RaiseDebuggerConnectedEvent` is now `RaiseInitialized`, which is what it did. +- **The unity-jsb Unity integration** — all of `Runtime/Source/Unity/`, two assemblies, 468 KB of + Cecil. See "What JSB_UNITYLESS hid". +- **The Unity struct marshalling** — fifteen of the sixteen `Binding/ValueTypes/Values_*.cs`, plus + `Values_inject.cs`. `Values_DateTime.cs` stays. +- **`JSB_UNITYLESS` itself**, substituted and constant-folded away: 407 lines, and 22 conditionals + wrapped around the calling-convention attributes and delegate rooting in `JSApi.cs`. +- **21 dead shim declarations** — `JSB_GetBridgeClassID`, `jsb_get/set_int_4` first, then the 18 the + struct deletion orphaned. +- **`BindingManager.Bind()`**, splitting the reflect-binding path out of `Generate(TypeBindingFlags)` + so it no longer constructs a `CodeGenerator` and walks every type into buffers nobody reads. +- **Gate 0 for Windows x64** — `native/quickjs` builds `quickjs.dll` from ng plus the ported + shim, satisfying 99 of the 105 live P/Invoke names, exporting the four async-loader entry + points, and not exporting `JS_NewBigDecimal`. + +One thing the port turned up that no amount of reading would have: **unity-jsb's source tree is +a commit behind its own shipped binary.** `JSB_ThrowError` is exported by +`Plugins/QuickJS/x64/quickjs.dll` and defined nowhere in `jsb_build/`. It was the only such gap, +but only because the export diff was run — vendoring the sources and trusting them would have +shipped a DLL missing a function the C# layer calls. Two things that looked deletable and were not, both because the first caller search excluded `Runtime/Source/Native` itself — check that directory before concluding anything is dead: - `JSB_Init` is the DLL version handshake, called from `JSApi.cs:151`. - `JS_GetPropertyInternal`/`JS_SetPropertyInternal` are called from wrappers in `JSApi.cs`. + +And one process note worth keeping: `pnpm unity compile tests` is ~10 s and the suite is ~10 min. +Skipping the compile once cost a full suite run to a broken string literal. Compile after every +edit; run the suite at the subsystem boundary. From 1b926406d66ab392197ab3e6dba1b6fd5e73ab53 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 18:52:14 +0300 Subject: [PATCH 12/58] docs(quickjs): correct two stale claims about the JS_* surface The debugger paragraph still described the five JS_*Debugger* entry points and JS_SetLogFunc as living behind JSB_WITH_V8_BACKEND -- they were deleted earlier on this branch. And JS_NewFloat64 was listed as needing a shim alongside JS_NewString. It already has one: the C# declaration carries EntryPoint = "JSB_NewFloat64". Only JS_NewString is unshimmed. Noted, because an audit of this surface that ignores EntryPoint reports gaps that are not there. --- unity/quickjs/MIGRATION.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/unity/quickjs/MIGRATION.md b/unity/quickjs/MIGRATION.md index 3b3de91c..86304356 100644 --- a/unity/quickjs/MIGRATION.md +++ b/unity/quickjs/MIGRATION.md @@ -28,7 +28,7 @@ repo at `S:/Work/Unity/quickjs-ng-csharp` (23 assertions passing against a quick | Group | Count | Disposition | |---|---:|---| -| `JS_*` — real QuickJS API | 72 | 60 exported by ng unchanged; 2 inline (`JS_NewFloat64`, `JS_NewString`) need a shim; 10 absent and all free — see below | +| `JS_*` — real QuickJS API | 72 | 60 exported by ng unchanged; `JS_NewString` is `static inline` and needs a shim; 10 absent, see below | | `JSB_*` / `jsb_*` — unity-jsb C shim | 43 | None exist in ng. **25 live, 18 removed on this branch.** This is the migration. | | `JSB_ATOM_*` | 16 | Only 16 of the ~1000 the DLL exports are used. **4 do not exist in ng** — see below | | `js_*` — allocator | 3 | `js_malloc`, `js_free`, `js_strdup` all exported by ng | @@ -40,11 +40,14 @@ not count. See "What JSB_UNITYLESS hid" below for why it dropped so far. Every one of the 10 absent `JS_*` costs nothing except two. `JS_GetPropertyInternal` and `JS_SetPropertyInternal` are **live** — called from wrapper methods in `JSApi.cs` itself, at lines 231 and 488 — so phase 3 has to map them onto ng's `JS_GetProperty`/`JS_SetProperty`. For the rest: -the five `JS_*Debugger*` plus `JS_SetLogFunc` are `#if JSB_WITH_V8_BACKEND` with -no-op stubs in the `#else`; `JS_SetBaseUrl` is a real P/Invoke only under -`UNITY_WEBGL && !UNITY_EDITOR` and lives in the jslib; `JS_AddIntrinsicOperators` is already stubbed -under `JSB_NO_BIGNUM`, which ng makes permanent. Nothing in the QuickJS path touches -BigFloat/BigDecimal either. +the five `JS_*Debugger*` and `JS_SetLogFunc` are **gone**, deleted with the debug server on this +branch; `JS_SetBaseUrl` is a real P/Invoke only under `UNITY_WEBGL && !UNITY_EDITOR` and lives in +the jslib; `JS_AddIntrinsicOperators` is already stubbed under `JSB_NO_BIGNUM`, which ng makes +permanent. Nothing in the QuickJS path touches BigFloat/BigDecimal either. + +Note that some of these names already reach the shim rather than ng: `JS_NewFloat64` is declared +with `EntryPoint = "JSB_NewFloat64"`. Any audit of this surface has to honour `EntryPoint` or it +will report gaps that are not there — `check-exports.py` does. ## The four atoms ng does not have From 9798d2317d3b2ee12a604d843743bc416d7da41b Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 19:28:37 +0300 Subject: [PATCH 13/58] refactor(quickjs): finish porting the C shim to quickjs-ng Gate 0 got the shim compiling against ng. Compiling is not porting: two of the differences between ng and Bellard-era QuickJS change behaviour rather than break the build, and the vendored source handled neither. JS_SetOpaque is the important one. Bellard's wrote the pointer into whatever object it was handed; ng returns -1 for anything that is not an object of a registered class. Left unchecked, a failure leaks the payload and hands C# a bridge object whose id reads back as 0, with nothing reported anywhere. Both live constructors now go through one helper that checks it. js_malloc's return was never checked either, so an allocation failure dereferenced NULL instead of propagating the exception ng had already thrown. Same for the runtime payload in JSB_NewRuntime, where registering the class before allocating it leaves neither failure path anything to unwind. Two smaller ones: JS_NewClass's return was ignored, so a failed registration produced a runtime whose bridge objects silently had no class; and the atom accessors were declared K&R `()` rather than `(void)`, which C23 redefines. Then subtraction. 26 shim functions nothing names are gone -- JSB_Eval, JSB_FreePayload, JSB_GetClassID, JSB_GetBridgeClassID, jsb_construct_bridge_object, jsb_get_payload, and the 20 struct accessors phase 1 orphaned when it deleted the Unity value-type marshalling. The UNITY_WEBGL and EMSCRIPTEN guards go too: on WebGL JSApi.JSBDLL is "__Internal" and this library is never loaded, so they guarded a configuration that cannot occur -- and incoherently, skipping quickjs.h and then using JSAtom. JS_NewString is deleted rather than shimmed. ng made it `static inline`, so the plan was to give it a JSB_ shim the way JS_NewFloat64 already has one; grepping first showed the C# declaration has no callers at all. Suite unchanged: 340/348 EditMode, 689/701 PlayMode, 0 failed. --- native/quickjs/src/unity_ext.c | 351 ++----------------- native/quickjs/src/unity_qjs.c | 110 ++---- unity/quickjs/Runtime/Source/Native/JSApi.cs | 3 - 3 files changed, 68 insertions(+), 396 deletions(-) diff --git a/native/quickjs/src/unity_ext.c b/native/quickjs/src/unity_ext.c index 513a9d47..8f23feca 100644 --- a/native/quickjs/src/unity_ext.c +++ b/native/quickjs/src/unity_ext.c @@ -18,41 +18,48 @@ JS_EXPORT JSValue jsb_crossbind_constructor(JSContext *ctx, JSValue new_target) return proto; } -JS_EXPORT JSValue jsb_construct_bridge_object(JSContext *ctx, JSValue proto, int32_t object_id) +/* ng's JS_SetOpaque returns -1 for anything that is not an object of a registered + class, where Bellard's wrote the pointer unconditionally. Unchecked, a failure + leaks the payload and hands C# a bridge object whose id reads back as 0. */ +static JSValue jsb_attach_payload(JSContext *ctx, JSValue obj, int32_t type_id, int32_t value, size_t size) { - JSValue obj = JS_CallConstructor(ctx, proto, 0, NULL); - if (!JS_IsException(obj)) + JSPayload *sv = (JSPayload *)js_mallocz(ctx, sizeof(JSPayloadHeader) + size); + if (!sv) { - JSPayload *sv = (JSPayload *)js_malloc(ctx, sizeof(JSPayloadHeader)); - sv->header.type_id = JS_BO_OBJECT; - sv->header.value = object_id; - JSB_SetOpaque(ctx, obj, sv); + JS_FreeValue(ctx, obj); + return JS_EXCEPTION; // js_mallocz already threw + } + + sv->header.type_id = type_id; + sv->header.value = value; + if (JS_SetOpaque(obj, sv) < 0) + { + js_free(ctx, sv); + JS_FreeValue(ctx, obj); + return JS_ThrowInternalError(ctx, "cannot attach a bridge payload to this object"); } return obj; } -JS_EXPORT JSValue jsb_new_bridge_object(JSContext *ctx, JSValue proto, int32_t object_id/*, int32_t type_id = JS_BO_OBJECT */) +JS_EXPORT JSValue jsb_new_bridge_object(JSContext *ctx, JSValue proto, int32_t object_id) { JSValue obj = JS_NewObjectProtoClass(ctx, proto, js_bridge_class_id); - if (!JS_IsException(obj)) + if (JS_IsException(obj)) { - JSPayload *sv = (JSPayload *)js_malloc(ctx, sizeof(JSPayloadHeader)); - sv->header.type_id = JS_BO_OBJECT; - sv->header.value = object_id; - JSB_SetOpaque(ctx, obj, sv); + return obj; } - return obj; + return jsb_attach_payload(ctx, obj, JS_BO_OBJECT, object_id, 0); } // for constructor new_target -JS_EXPORT JSValue JSB_NewBridgeClassObject(JSContext *ctx, JSValue new_target, int32_t object_id/*, int32_t type_id = JS_BO_OBJECT */) +JS_EXPORT JSValue JSB_NewBridgeClassObject(JSContext *ctx, JSValue new_target, int32_t object_id) { JSValue proto = JS_GetProperty(ctx, new_target, JS_ATOM_prototype); if (!JS_IsException(proto)) { - JSValue obj = jsb_new_bridge_object(ctx, proto, object_id/*, type_id*/); + JSValue obj = jsb_new_bridge_object(ctx, proto, object_id); JS_FreeValue(ctx, proto); return obj; } @@ -62,16 +69,18 @@ JS_EXPORT JSValue JSB_NewBridgeClassObject(JSContext *ctx, JSValue new_target, i JS_EXPORT JSValue jsb_new_bridge_value(JSContext *ctx, JSValue proto, int32_t size) { + if (size < 0) + { + return JS_ThrowRangeError(ctx, "invalid bridge payload size: %d", (int)size); + } + JSValue obj = JS_NewObjectProtoClass(ctx, proto, js_bridge_class_id); - if (!JS_IsException(obj)) + if (JS_IsException(obj)) { - JSPayload *sv = (JSPayload *)js_mallocz(ctx, sizeof(JSPayloadHeader) + size); - sv->header.type_id = JS_BO_VALUE; - sv->header.value = size; - JSB_SetOpaque(ctx, obj, sv); + return obj; } - return obj; + return jsb_attach_payload(ctx, obj, JS_BO_VALUE, size, (size_t)size); } JS_EXPORT JSValue JSB_NewBridgeClassValue(JSContext *ctx, JSValue new_target, int32_t size) @@ -89,7 +98,7 @@ JS_EXPORT JSValue JSB_NewBridgeClassValue(JSContext *ctx, JSValue new_target, in JS_EXPORT JSPayloadHeader jsb_get_payload_header(JSContext *ctx, JSValue val) { - JSPayloadHeader *sv = (JSPayloadHeader *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + JSPayloadHeader *sv = (JSPayloadHeader *)JS_GetOpaque(val, js_bridge_class_id); if (sv) { return *sv; @@ -97,271 +106,9 @@ JS_EXPORT JSPayloadHeader jsb_get_payload_header(JSContext *ctx, JSValue val) return _null_payload; } -JS_EXPORT JSPayload *jsb_get_payload(JSContext *ctx, JSValue val) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv) - { - return sv; - } - return 0; -} - -JS_EXPORT JS_BOOL jsb_get_floats(JSContext *ctx, JSValue val, int n, float *v0) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * n) - { - float *ptr = (float *)&(sv->data[0]); - for (int i = 0; i < n; ++i) - { - *(v0 + i) = ptr[i]; - } - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_set_floats(JSContext *ctx, JSValue val, int n, float *v0) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * n) - { - float *ptr = (float *)&(sv->data[0]); - for (int i = 0; i < n; ++i) - { - ptr[i] = *(v0 + i); - } - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_get_float_2(JSContext *ctx, JSValue val, float *v0, float *v1) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 2) - { - float *ptr = (float *)&(sv->data[0]); - *v0 = ptr[0]; - *v1 = ptr[1]; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_set_float_2(JSContext *ctx, JSValue val, float v0, float v1) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 2) - { - float *ptr = (float *)&(sv->data[0]); - ptr[0] = v0; - ptr[1] = v1; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_get_float_3(JSContext *ctx, JSValue val, float *v0, float *v1, float *v2) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 3) - { - float *ptr = (float *)&(sv->data[0]); - *v0 = ptr[0]; - *v1 = ptr[1]; - *v2 = ptr[2]; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_set_float_3(JSContext *ctx, JSValue val, float v0, float v1, float v2) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 3) - { - float *ptr = (float *)&(sv->data[0]); - ptr[0] = v0; - ptr[1] = v1; - ptr[2] = v2; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_get_float_4(JSContext *ctx, JSValue val, float *v0, float *v1, float *v2, float *v3) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 4) - { - float *ptr = (float *)&(sv->data[0]); - *v0 = ptr[0]; - *v1 = ptr[1]; - *v2 = ptr[2]; - *v3 = ptr[3]; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_set_float_4(JSContext *ctx, JSValue val, float v0, float v1, float v2, float v3) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(float) * 4) - { - float *ptr = (float *)&(sv->data[0]); - ptr[0] = v0; - ptr[1] = v1; - ptr[2] = v2; - ptr[3] = v3; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_get_ints(JSContext *ctx, JSValue val, int n, int *v0) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * n) - { - int *ptr = (int *)&(sv->data[0]); - for (int i = 0; i < n; ++i) - { - *(v0 + i) = ptr[i]; - } - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_set_ints(JSContext *ctx, JSValue val, int n, int *v0) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * n) - { - int *ptr = (int *)&(sv->data[0]); - for (int i = 0; i < n; ++i) - { - ptr[i] = *(v0 + i); - } - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_get_int_1(JSContext *ctx, JSValue val, int *v0) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int)) - { - int *ptr = (int *)&(sv->data[0]); - *v0 = ptr[0]; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_set_int_1(JSContext *ctx, JSValue val, int v0) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int)) - { - int *ptr = (int *)&(sv->data[0]); - ptr[0] = v0; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_get_int_2(JSContext *ctx, JSValue val, int *v0, int *v1) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 2) - { - int *ptr = (int *)&(sv->data[0]); - *v0 = ptr[0]; - *v1 = ptr[1]; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_set_int_2(JSContext *ctx, JSValue val, int v0, int v1) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 2) - { - int *ptr = (int *)&(sv->data[0]); - ptr[0] = v0; - ptr[1] = v1; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_get_int_3(JSContext *ctx, JSValue val, int *v0, int *v1, int *v2) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 3) - { - int *ptr = (int *)&(sv->data[0]); - *v0 = ptr[0]; - *v1 = ptr[1]; - *v2 = ptr[2]; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_set_int_3(JSContext *ctx, JSValue val, int v0, int v1, int v2) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 3) - { - int *ptr = (int *)&(sv->data[0]); - ptr[0] = v0; - ptr[1] = v1; - ptr[2] = v2; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_get_int_4(JSContext *ctx, JSValue val, int *v0, int *v1, int *v2, int *v3) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 4) - { - int *ptr = (int *)&(sv->data[0]); - *v0 = ptr[0]; - *v1 = ptr[1]; - *v2 = ptr[2]; - *v3 = ptr[3]; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_set_int_4(JSContext *ctx, JSValue val, int v0, int v1, int v2, int v3) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(int) * 4) - { - int *ptr = (int *)&(sv->data[0]); - ptr[0] = v0; - ptr[1] = v1; - ptr[2] = v2; - ptr[3] = v3; - return TRUE; - } - return FALSE; -} - JS_EXPORT JS_BOOL jsb_get_bytes(JSContext *ctx, JSValue val, int n, byte *v0) { - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + JSPayload *sv = (JSPayload *)JS_GetOpaque(val, js_bridge_class_id); if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(byte) * n) { byte *ptr = (byte *)&(sv->data[0]); @@ -376,7 +123,7 @@ JS_EXPORT JS_BOOL jsb_get_bytes(JSContext *ctx, JSValue val, int n, byte *v0) JS_EXPORT JS_BOOL jsb_set_bytes(JSContext *ctx, JSValue val, int n, byte *v0) { - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); + JSPayload *sv = (JSPayload *)JS_GetOpaque(val, js_bridge_class_id); if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(byte) * n) { byte *ptr = (byte *)&(sv->data[0]); @@ -388,33 +135,3 @@ JS_EXPORT JS_BOOL jsb_set_bytes(JSContext *ctx, JSValue val, int n, byte *v0) } return FALSE; } - -JS_EXPORT JS_BOOL jsb_get_byte_4(JSContext *ctx, JSValue val, byte *v0, byte *v1, byte *v2, byte *v3) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(byte) * 4) - { - byte *ptr = (byte *)&(sv->data[0]); - *v0 = ptr[0]; - *v1 = ptr[1]; - *v2 = ptr[2]; - *v3 = ptr[3]; - return TRUE; - } - return FALSE; -} - -JS_EXPORT JS_BOOL jsb_set_byte_4(JSContext *ctx, JSValue val, byte v0, byte v1, byte v2, byte v3) -{ - JSPayload *sv = (JSPayload *)JSB_GetOpaque(ctx, val, js_bridge_class_id); - if (sv && sv->header.type_id == JS_BO_VALUE && sv->header.value == sizeof(byte) * 4) - { - byte *ptr = (byte *)&(sv->data[0]); - ptr[0] = v0; - ptr[1] = v1; - ptr[2] = v2; - ptr[3] = v3; - return TRUE; - } - return FALSE; -} diff --git a/native/quickjs/src/unity_qjs.c b/native/quickjs/src/unity_qjs.c index a00a6c59..050e3409 100644 --- a/native/quickjs/src/unity_qjs.c +++ b/native/quickjs/src/unity_qjs.c @@ -4,90 +4,53 @@ * Vendored from unity-jsb (jsb_build/quickjs/unity_qjs.c), MIT, Copyright (c) 2019 * huliangjie, and ported to quickjs-ng. See ../README.md for every change and why. */ -/* -vim /etc/apt/sources.list -deb http://us.archive.ubuntu.com/ubuntu trusty main universe -sudo apt-get update -sudo apt-get install mingw32 - sudo apt-get install mingw-w64 -./configure --host=i686-w64-mingw32 - ./configure --host=x86_64-w64-mingw32 -make -*/ - -#ifndef UNITY_WEBGL + #include "quickjs.h" -#endif #ifndef JS_EXPORT #define JS_EXPORT #endif -#ifndef EMSCRIPTEN -#ifndef CONFIG_ATOMICS -#define CONFIG_ATOMICS -#endif -#endif - #define byte unsigned char /* quickjs-ng dropped this alias; the shim keeps an int-wide ABI on purpose. */ #ifndef JS_BOOL #define JS_BOOL int #endif -// #define JS_HIDDEN_PROP(s) ("\xFF" s) -#ifndef UNITY_WEBGL - -#ifndef FALSE enum { FALSE = 0, TRUE = 1, }; -#endif // !FALSE +/* Byte-identical to the enum quickjs.c builds from the same header, which is what + makes the accessors below return ids the engine agrees with. */ enum { __JS_ATOM_NULL = JS_ATOM_NULL, #define DEF(name, str) JS_ATOM_##name, -#define SSR #include "quickjs-atom.h" #undef DEF JS_ATOM_END, }; #define DEF(name, str) \ - JS_EXPORT JSAtom JSB_ATOM_##name() { return JS_ATOM_##name; } + JS_EXPORT JSAtom JSB_ATOM_##name(void) { return JS_ATOM_##name; } #include "quickjs-atom.h" #undef DEF /* quickjs-ng removed operator overloading, so these two atoms do not exist. Returning 0 is not a placeholder: JSAtom.IsValid is `_value != 0`, and every C# call site is already guarded by it or by IsOperatorOverloadingSupported. */ -JS_EXPORT JSAtom JSB_ATOM_Operators() { return JS_ATOM_NULL; } -JS_EXPORT JSAtom JSB_ATOM_Symbol_operatorSet() { return JS_ATOM_NULL; } - -#endif // !UNITY_WEBGL +JS_EXPORT JSAtom JSB_ATOM_Operators(void) { return JS_ATOM_NULL; } +JS_EXPORT JSAtom JSB_ATOM_Symbol_operatorSet(void) { return JS_ATOM_NULL; } -static JSClassID js_class_id_begin = 0; static JSClassID js_bridge_class_id = 0; -// quickjs 内置 class id 之后的第一个可用 id -JS_EXPORT JSClassID JSB_GetClassID() -{ - return js_class_id_begin; -} - -JS_EXPORT JSClassID JSB_GetBridgeClassID() -{ - return js_bridge_class_id; -} - #define JS_BO_TYPE 1 #define JS_BO_OBJECT 2 #define JS_BO_VALUE 3 -// #define JS_BO_STRICT_OBJECT 4 typedef struct JSPayloadHeader { @@ -164,12 +127,6 @@ JS_EXPORT JSValue JSB_DupValue(JSContext *ctx, JSValueConst v) return JS_DupValue(ctx, v); } -JS_EXPORT JSValue JSB_Eval(JSContext *ctx, const char *input, int input_len, - const char *filename, int eval_flags) -{ - return JS_Eval(ctx, input, input_len, filename, eval_flags); -} - JS_EXPORT JSValue JSB_NewCFunction(JSContext *ctx, JSCFunction *func, JSAtom atom, int length, JSCFunctionEnum cproto, int magic) { const char *name = JS_AtomToCString(ctx, atom); @@ -201,21 +158,7 @@ typedef struct JSBRuntimePayload { JSGCObjectFinalizer* finalizer; } JSBRuntimePayload; -// 释放数据, 返回头信息副本 -JS_EXPORT JSPayloadHeader JSB_FreePayload(JSContext *ctx, JSValue val) -{ - void *sv = JS_GetOpaque(val, js_bridge_class_id); - if (sv) - { - JSPayloadHeader header = *(JSPayloadHeader *)sv; - JS_SetOpaque(val, NULL); - js_free(ctx, sv); - return header; - } - return _null_payload; -} - -static void _JSBClass_Finalizer(JSRuntime* rt, JSValue obj) +static void _JSBClass_Finalizer(JSRuntime* rt, JSValue obj) { void *sv = JS_GetOpaque(obj, js_bridge_class_id); if (sv) @@ -234,11 +177,11 @@ static void _JSBClass_Finalizer(JSRuntime* rt, JSValue obj) JS_EXPORT JSRuntime* JSB_NewRuntime(JSGCObjectFinalizer* finalizer) { JSRuntime* rt = JS_NewRuntime(); - JSBRuntimePayload* payload = js_malloc_rt(rt, sizeof(JSBRuntimePayload)); - payload->opaque = 0; - payload->finalizer = finalizer; - JS_SetRuntimeOpaque(rt, payload); - + if (!rt) + { + return NULL; + } + JSClassDef cls_def; cls_def.class_name = "CSharpClass"; @@ -247,10 +190,28 @@ JS_EXPORT JSRuntime* JSB_NewRuntime(JSGCObjectFinalizer* finalizer) cls_def.gc_mark = NULL; cls_def.call = NULL; + /* ng allocates class ids out of the runtime, so this must run per runtime and + through a zeroed local -- a shared static would hand back an id it never + reserved here. Registered before the payload so neither failure path has + anything to unwind. */ JSClassID bridge_class_id = 0; JS_NewClassID(rt, &bridge_class_id); + if (JS_NewClass(rt, bridge_class_id, &cls_def) < 0) + { + JS_FreeRuntime(rt); + return NULL; + } js_bridge_class_id = bridge_class_id; - JS_NewClass(rt, js_bridge_class_id, &cls_def); + + JSBRuntimePayload* payload = js_malloc_rt(rt, sizeof(JSBRuntimePayload)); + if (!payload) + { + JS_FreeRuntime(rt); + return NULL; + } + payload->opaque = 0; + payload->finalizer = finalizer; + JS_SetRuntimeOpaque(rt, payload); return rt; } @@ -277,18 +238,15 @@ JS_EXPORT void* JSB_GetRuntimeOpaque(JSRuntime* rt) JS_EXPORT void JSB_SetRuntimeOpaque(JSRuntime* rt, void* opaque) { JSBRuntimePayload* payload = (JSBRuntimePayload*)JS_GetRuntimeOpaque(rt); - if (payload) + if (payload) { payload->opaque = opaque; } } -#define JSB_SetOpaque(ctx, obj, opaque) JS_SetOpaque((obj), (opaque)) -#define JSB_GetOpaque(ctx, val, class_id) JS_GetOpaque((val), (class_id)) - -JS_EXPORT int JSB_Init() +JS_EXPORT int JSB_Init(void) { - return 0xa; // version tag for unity_qjs.c + return 0xa; // version tag, checked against JSApi.CS_JSB_VERSION } #include "unity_ext.c" diff --git a/unity/quickjs/Runtime/Source/Native/JSApi.cs b/unity/quickjs/Runtime/Source/Native/JSApi.cs index 16b783fe..da6c2567 100644 --- a/unity/quickjs/Runtime/Source/Native/JSApi.cs +++ b/unity/quickjs/Runtime/Source/Native/JSApi.cs @@ -276,9 +276,6 @@ public static int JS_DefineConstPropertyValue(JSContext ctx, JSValueConst this_o [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSValue JSB_NewEmptyString(JSContext ctx); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern unsafe JSValue JS_NewString(JSContext ctx, byte* str); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern unsafe JSValue JS_NewStringLen(JSContext ctx, byte* buf, size_t buf_len); From 351580f553d632935a3854b69cdec5ef1170b494 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 19:28:55 +0300 Subject: [PATCH 14/58] test(quickjs): check the ported shim against ng at runtime A successful link proves nothing about the atom table, which is the shim's riskiest part. The accessors are generated from ng's own quickjs-atom.h with the same DEF trick quickjs.c uses, so the numbering is right by construction -- but that is an argument, and ng went from 224 atoms to 241. Bad numbering would not crash; every atom-keyed property lookup would silently address a different name. shim-test links the shim against ng in-process, so it runs before anything is copied into Unity, and asserts all 241 ids and their strings, that ng still lacks the four atoms it is missing, and that the bridge payloads round-trip with the class finalizer firing. It is registered with CTest too. Worth running in Debug as well: ng reports a non-empty GC object list by asserting in JS_FreeRuntime rather than returning a value the way unity-jsb's patched Bellard did, so a Debug pass is what is left of the leak diagnostic this port gave up. check-exports.py now diffs both directions. It only reported names C# calls that we do not export, which let the 26 uncalled shim functions sit there unnoticed; a stale export is cheap but it is also how the surface grows back. --- native/quickjs/.gitignore | 3 + native/quickjs/CMakeLists.txt | 13 +++ native/quickjs/check-exports.py | 18 +++- native/quickjs/src/shim_test.c | 155 ++++++++++++++++++++++++++++++++ 4 files changed, 185 insertions(+), 4 deletions(-) create mode 100644 native/quickjs/src/shim_test.c diff --git a/native/quickjs/.gitignore b/native/quickjs/.gitignore index a0e92a2a..6d550a61 100644 --- a/native/quickjs/.gitignore +++ b/native/quickjs/.gitignore @@ -1,2 +1,5 @@ # CMake build tree, including the fetched quickjs-ng checkout under _deps. build/ + +# check-exports.py gets imported by ad-hoc analysis scripts +__pycache__/ diff --git a/native/quickjs/CMakeLists.txt b/native/quickjs/CMakeLists.txt index b4e0cdc8..d424d6dd 100644 --- a/native/quickjs/CMakeLists.txt +++ b/native/quickjs/CMakeLists.txt @@ -72,3 +72,16 @@ if(MSVC) target_compile_options(quickjs PRIVATE /wd4146 /wd4703) target_compile_definitions(quickjs PRIVATE _CRT_SECURE_NO_WARNINGS) endif() + +# Runs the shim against ng in-process, checking the things a successful link cannot: +# the atom ids, and the bridge payloads under ng's stricter JS_SetOpaque. It compiles +# the shim rather than loading the library, so JS_EXPORT stays empty here. +enable_testing() +add_executable(shim-test src/shim_test.c) +target_link_libraries(shim-test PRIVATE qjs) +target_include_directories(shim-test PRIVATE ${quickjs_SOURCE_DIR} src) +if(MSVC) + target_compile_options(shim-test PRIVATE /wd4146 /wd4703) + target_compile_definitions(shim-test PRIVATE _CRT_SECURE_NO_WARNINGS) +endif() +add_test(NAME shim COMMAND shim-test) diff --git a/native/quickjs/check-exports.py b/native/quickjs/check-exports.py index 1603b727..262dc26e 100644 --- a/native/quickjs/check-exports.py +++ b/native/quickjs/check-exports.py @@ -155,16 +155,26 @@ def main(): wanted = wanted_names() missing = sorted(n for n in wanted if n not in exports) + # The other direction: shim functions nothing names any more. All 241 atom + # accessors come from one macro over quickjs-atom.h, so they are exempt. + stale = sorted( + n + for n in exports + if (n.startswith("JSB_") or n.startswith("jsb_")) and not n.startswith("JSB_ATOM_") and n not in wanted + ) print("live P/Invoke names bound to JSBDLL: %d" % len(wanted)) print("exports in %s: %d" % (os.path.basename(dll), len(exports))) - print("satisfied: %d, missing: %d" % (len(wanted) - len(missing), len(missing))) + print("satisfied: %d, missing: %d, stale shim exports: %d" % (len(wanted) - len(missing), len(missing), len(stale))) if missing: - print() + print("\nnamed by C#, not exported:") for n in missing: print(" %-32s <- %s" % (n, ", ".join(sorted(wanted[n])))) - return 1 - return 0 + if stale: + print("\nexported by the shim, named by nothing -- delete from src/:") + for n in stale: + print(" %s" % n) + return 1 if (missing or stale) else 0 if __name__ == "__main__": diff --git a/native/quickjs/src/shim_test.c b/native/quickjs/src/shim_test.c new file mode 100644 index 00000000..2b9fceb6 --- /dev/null +++ b/native/quickjs/src/shim_test.c @@ -0,0 +1,155 @@ +/* + * Runtime checks on the ported shim, for the things a successful link cannot prove: + * that our atom ids are the ones the engine actually uses, and that the bridge + * object machinery survives ng's stricter JS_SetOpaque. + * + * Compiles the shim as its own translation unit rather than loading the DLL, so it + * runs before anything is copied into Unity. + */ + +#include "unity_qjs.c" + +#include +#include + +static int failures = 0; + +#define CHECK(cond, ...) \ + do { \ + if (!(cond)) { \ + printf(" FAIL: "); \ + printf(__VA_ARGS__); \ + printf("\n"); \ + ++failures; \ + } \ + } while (0) + +typedef JSAtom (*atom_accessor)(void); + +static const struct { const char *name; const char *str; atom_accessor fn; } known_atoms[] = { +#define DEF(name, str) { #name, str, JSB_ATOM_##name }, +#include "quickjs-atom.h" +#undef DEF +}; + +#define ATOM_COUNT ((int)(sizeof(known_atoms) / sizeof(known_atoms[0]))) + +/* The four the C# layer names and ng does not define. Absent here means the stubs in + unity_qjs.c are still needed; present would mean ng grew them back and the stubs + now shadow a real atom. */ +static const char *const expected_absent[] = { "fileName", "lineNumber", "Operators", "Symbol_operatorSet" }; + +static void check_atoms(JSContext *ctx) +{ + for (int i = 0; i < ATOM_COUNT; ++i) + { + JSAtom atom = known_atoms[i].fn(); + + // the enum starts one past JS_ATOM_NULL, so the nth DEF must be atom n+1 + CHECK(atom == (JSAtom)(i + 1), "atom %s is %u, expected %d", known_atoms[i].name, atom, i + 1); + + const char *str = JS_AtomToCString(ctx, atom); + CHECK(str && strcmp(str, known_atoms[i].str) == 0, + "atom %s resolves to \"%s\", expected \"%s\"", known_atoms[i].name, str ? str : "(null)", known_atoms[i].str); + JS_FreeCString(ctx, str); + } + + for (int i = 0; i < (int)(sizeof(expected_absent) / sizeof(expected_absent[0])); ++i) + { + for (int j = 0; j < ATOM_COUNT; ++j) + { + CHECK(strcmp(known_atoms[j].name, expected_absent[i]) != 0, + "ng now defines the atom %s, which unity_qjs.c stubs out", expected_absent[i]); + } + } + + CHECK(JSB_ATOM_Operators() == JS_ATOM_NULL, "JSB_ATOM_Operators must be JS_ATOM_NULL so JSAtom.IsValid is false"); + CHECK(JSB_ATOM_Symbol_operatorSet() == JS_ATOM_NULL, "JSB_ATOM_Symbol_operatorSet must be JS_ATOM_NULL"); +} + +static int finalized = 0; +static JSPayloadHeader last_finalized; + +static void on_payload_finalized(JSRuntime *rt, JSPayloadHeader header) +{ + ++finalized; + last_finalized = header; +} + +static void check_bridge_objects(JSContext *ctx) +{ + JSValue proto = JS_NewObject(ctx); + + JSValue obj = jsb_new_bridge_object(ctx, proto, 12345); + CHECK(!JS_IsException(obj), "jsb_new_bridge_object threw"); + JSPayloadHeader header = jsb_get_payload_header(ctx, obj); + CHECK(header.type_id == JS_BO_OBJECT && header.value == 12345, + "object payload reads back {%d, %d}, expected {%d, 12345}", header.type_id, header.value, JS_BO_OBJECT); + + JSValue val = jsb_new_bridge_value(ctx, proto, 8); + CHECK(!JS_IsException(val), "jsb_new_bridge_value threw"); + header = jsb_get_payload_header(ctx, val); + CHECK(header.type_id == JS_BO_VALUE && header.value == 8, + "value payload reads back {%d, %d}, expected {%d, 8}", header.type_id, header.value, JS_BO_VALUE); + + byte written[8] = { 1, 2, 3, 4, 250, 251, 252, 253 }; + byte read[8] = { 0 }; + CHECK(jsb_set_bytes(ctx, val, 8, written), "jsb_set_bytes rejected an 8-byte payload"); + CHECK(jsb_get_bytes(ctx, val, 8, read), "jsb_get_bytes rejected an 8-byte payload"); + CHECK(memcmp(written, read, 8) == 0, "payload bytes did not round-trip"); + CHECK(!jsb_get_bytes(ctx, val, 4, read), "jsb_get_bytes accepted a size the payload does not have"); + + // a plain object carries no payload, and asking must not read through a null opaque + JSValue plain = JS_NewObject(ctx); + header = jsb_get_payload_header(ctx, plain); + CHECK(header.type_id == 0 && header.value == 0, "a plain object reported a payload"); + JS_FreeValue(ctx, plain); + + JSValue bad = jsb_new_bridge_value(ctx, proto, -1); + CHECK(JS_IsException(bad), "a negative payload size was accepted"); + JS_FreeValue(ctx, JS_GetException(ctx)); + + JSValue crossbound = jsb_crossbind_constructor(ctx, proto); + CHECK(!JS_IsException(crossbound), "jsb_crossbind_constructor threw"); + JS_FreeValue(ctx, crossbound); + + finalized = 0; + JS_FreeValue(ctx, obj); + JS_FreeValue(ctx, val); + JS_FreeValue(ctx, proto); + CHECK(finalized == 2, "the class finalizer ran %d times, expected 2", finalized); +} + +static void check_misc(JSContext *ctx) +{ + CHECK(JSB_Init() == 0xa, "JSB_Init must return the version JSApi.CS_JSB_VERSION expects"); + + JSValue empty = JSB_NewEmptyString(ctx); + CHECK(JS_IsString(empty), "JSB_NewEmptyString did not produce a string"); + JS_FreeValue(ctx, empty); + + uint32_t u = 0; + CHECK(JSB_ToUint32(ctx, &u, JS_NewInt32(ctx, -1)) == 0 && u == 0xffffffffu, + "JSB_ToUint32 gave %u for -1", u); +} + +int main(void) +{ + JSRuntime *rt = JSB_NewRuntime(on_payload_finalized); + if (!rt) + { + printf("JSB_NewRuntime failed\n"); + return 1; + } + JSContext *ctx = JS_NewContext(rt); + + check_atoms(ctx); + check_bridge_objects(ctx); + check_misc(ctx); + + JS_FreeContext(ctx); + JSB_FreeRuntime(rt); + + printf("%d atoms checked, %d failure(s)\n", ATOM_COUNT, failures); + return failures ? 1 : 0; +} From a74ac580d4f1cf4bf2283ddbe60916aa1e1e3462 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 19:29:13 +0300 Subject: [PATCH 15/58] docs(quickjs): record what phase 2 measured and changed The shim is 27 functions, not the 25 this plan claimed. The old count went by C# member name, so it missed the three entry points reached through EntryPoint aliases on JS_*-named declarations -- JSB_DupValue, JSB_FreeValue and JSB_NewFloat64. The plan warned that any audit of this surface has to honour EntryPoint and then got it wrong anyway, which is the argument for re-running check-exports.py over reading the tables. Re-measured the whole surface while correcting it: 104 live entry points, 59 JS_* and 27 shim and 16 atoms and 2 allocator, against 137 declarations before phase 1 started deleting. Phase 3's list drops to five names, and its two property remaps are now verified rather than proposed: ng's JS_GetProperty and JS_SetProperty are exact identities of the wrapper bodies in JSApi.cs. Its JS_AddIntrinsicOperators entry is restated -- making the no-bignum branch permanent is the fix, and it also retires the two operator-overloading atom stubs in unity_qjs.c. --- native/quickjs/README.md | 77 ++++++++++++++++++----- unity/quickjs/MIGRATION.md | 125 +++++++++++++++++++++++++++---------- 2 files changed, 153 insertions(+), 49 deletions(-) diff --git a/native/quickjs/README.md b/native/quickjs/README.md index a54a8f6f..6147b1a8 100644 --- a/native/quickjs/README.md +++ b/native/quickjs/README.md @@ -19,7 +19,31 @@ cmake --build build --config Release --target quickjs **Always name the target.** quickjs-ng registers `run-test262`, `api-test`, `lre-test` and friends unconditionally, so a default build compiles all of them. -Then check it against the thing that has to load it: +## The two checks + +Neither is optional, and they check different things: one runs the shim, the other compares it +against the C# that has to load it. + +```bash +cmake --build build --config Release --target shim-test && ./build/Release/shim-test.exe +``` + +[shim_test.c](src/shim_test.c) links the shim against ng in-process and covers what a successful +link cannot. It asserts all **241** atom accessors return the id ng itself uses and resolve to the +string in ng's own `quickjs-atom.h`. The shim generates its enum from that header with the same +`DEF` trick `quickjs.c` uses, so the numbering is right by construction — but ng went from 224 atoms +to 241, and "by construction" is an argument rather than a check; bad numbering surfaces as every +atom-keyed property lookup silently addressing a different name. It also round-trips an object and a +value payload, checks that a plain object reports none, that a negative size is rejected, and that +the class finalizer fires. `ctest -C Release` runs it too. + +Run it in `Debug` as well as `Release`. That is where the leak check lives: ng reports a non-empty +GC object list by asserting in `JS_FreeRuntime` (`quickjs.c:2717`) instead of returning a value the +way unity-jsb's patched Bellard did, so a `Debug` pass is the only remaining signal that the shim +balanced its refcounts. + +If you extend it, sabotage it first — a test over a macro-generated table is easy to write +vacuously. Flipping the expected id to `i + 2` must give 241 failures and exit 1. ```bash python native/quickjs/check-exports.py @@ -27,9 +51,12 @@ python native/quickjs/check-exports.py [check-exports.py](check-exports.py) reads the live P/Invoke set out of Unity's generated `tests/*.csproj` — the real define set and the real source list, so a declaration inside a dead -`#if` does not count — and diffs it against `dumpbin -exports`. It exits non-zero on any gap, so it -can gate CI. Currently 99 of 105; the 6 remaining are C#-side phase 3 work, listed in -[MIGRATION.md](../../unity/quickjs/MIGRATION.md). +`#if` does not count — resolves `EntryPoint` aliases, and diffs it against `dumpbin -exports` in +**both** directions: names C# calls that we do not export, and shim functions we export that nothing +calls. Either one exits non-zero, so it can gate CI. + +Currently 99 of 104 satisfied, 0 stale. The 5 outstanding are C# declarations, listed under phase 3 +in [MIGRATION.md](../../unity/quickjs/MIGRATION.md). ## What it links @@ -50,22 +77,38 @@ into `dllexport`, which survives into the DLL that links the archive and re-expo most of what the C# layer wants is either `static inline` in `quickjs.h` or variadic, and P/Invoke can reach neither; plus the bridge class and payload, which are genuinely unity-jsb's own. -Ported to ng with four changes, all in `unity_qjs.c`: +**The shim exports exactly the 27 functions the C# layer names** — no more, no fewer — plus one atom +accessor per entry in ng's atom table. The 241 accessors come from one macro and cost nothing to +keep, so they are exempt from the "no more" half; `check-exports.py` enforces the rest. + +### Ported to ng - **`JS_BOOL`** — ng dropped the alias for C `bool`. Redefined here as `int`, deliberately: it keeps - the shim's ABI where it was, so the C# `JS_BOOL = Int32` declarations for these 25 functions stay - correct and the `bool`-width problem is confined to ng's own exports. + the shim's ABI where it was, so the C# `JS_BOOL = Int32` declarations for these functions stay + correct and the `bool`-width problem stays confined to ng's own exports. - **`JS_NewClassID`** — gained a `JSRuntime *` and now allocates from `rt->js_class_id_alloc`. - Allocated through a zeroed local so each runtime bumps its own counter and actually reserves the - id, rather than reusing a process-global one it never claimed. + Called per runtime through a zeroed local, so each runtime reserves its own id rather than + reusing a process-global one it never claimed. +- **`JS_SetOpaque`** — returns `int` in ng and rejects anything that is not an object of a + registered class, where Bellard's was `void` and wrote unconditionally. Unchecked, a failure leaks + the payload *and* hands C# a bridge object whose id reads back as 0, with no error anywhere. Both + constructors now go through one helper that checks it. - **`JSB_FreeRuntime`** — unity-jsb had patched Bellard's `JS_FreeRuntime` to return whether the GC object list came out empty, and `ScriptRuntime` logs "gc object leaks" on 0. ng's is `void` and - reports leaks by asserting in debug builds, so this now returns 1 unconditionally. **That - diagnostic is lost** — the only deliberate behaviour regression in the port. -- **`JSB_Init`** — ran from a C# static initialiser, before any runtime exists, so it can no longer + reports leaks by asserting in debug builds, so this returns 1 unconditionally. **That diagnostic + is lost** — the only deliberate behaviour regression in the port. +- **`JSB_Init`** — runs from a C# static initialiser, before any runtime exists, so it can no longer allocate class ids. `JSB_NewRuntime` already did it, and nothing in C# declares `JSB_GetClassID`. -Two functions were added: +### Fixed while porting + +`js_malloc` and `js_malloc_rt` returns were never checked, so an allocation failure dereferenced +NULL instead of propagating the exception ng had already thrown. `JS_NewClass`'s return was ignored, +so a failed registration would have produced a runtime whose bridge objects had no class. And the +atom accessors were declared K&R `()` rather than `(void)` — which C23 redefines, and which is why +they did not match a `JSAtom (*)(void)` typedef in the test. + +### Added - **`JSB_ThrowError`** — present in the shipped DLL but **not in unity-jsb's source tree**, which is a commit behind the binary. Reconstructed from its only caller, `JSNative.ThrowInternalError`, @@ -74,11 +117,11 @@ Two functions were added: - **`JSB_ATOM_Operators` / `JSB_ATOM_Symbol_operatorSet`** — ng removed operator overloading, so the atom table has no entry to generate an accessor from. They return `JS_ATOM_NULL`, which is load-bearing rather than a stub: `JSAtom.IsValid` is `_value != 0` and every call site is already - guarded by it. + guarded by it. Both go when phase 3 makes the no-bignum path permanent, and `check-exports.py` + will flag them as stale the moment it does. -The shim still defines ~27 functions the C# layer no longer declares, including the struct fast -paths. They cost two unused exports each and nothing else; prune them once the DLL is proven in the -Editor, not before. +`JS_NewString` is deliberately *not* here. ng made it `static inline`, so the plan was to shim it — +but the C# declaration turned out to have no callers at all and was deleted instead. ## Where it does not build yet diff --git a/unity/quickjs/MIGRATION.md b/unity/quickjs/MIGRATION.md index 86304356..1ebcad46 100644 --- a/unity/quickjs/MIGRATION.md +++ b/unity/quickjs/MIGRATION.md @@ -24,30 +24,32 @@ repo at `S:/Work/Unity/quickjs-ng-csharp` (23 assertions passing against a quick ## Measured surface -137 distinct P/Invoke names across `Runtime/Source/Native`: +**104 live entry points** bound to `JSBDLL`, re-measured after phase 1 and phase 2. Liveness is +evaluated with Unity's real define set, so a declaration inside a dead `#if` does not count: -| Group | Count | Disposition | +| Group | Live | Provided by the ng build | |---|---:|---| -| `JS_*` — real QuickJS API | 72 | 60 exported by ng unchanged; `JS_NewString` is `static inline` and needs a shim; 10 absent, see below | -| `JSB_*` / `jsb_*` — unity-jsb C shim | 43 | None exist in ng. **25 live, 18 removed on this branch.** This is the migration. | -| `JSB_ATOM_*` | 16 | Only 16 of the ~1000 the DLL exports are used. **4 do not exist in ng** — see below | -| `js_*` — allocator | 3 | `js_malloc`, `js_free`, `js_strdup` all exported by ng | - -So phase 2 is **25 shim functions plus 16 atoms**. That number is measured, not estimated: -liveness is evaluated with Unity's real define set, so callers inside dead `#if` blocks do -not count. See "What JSB_UNITYLESS hid" below for why it dropped so far. - -Every one of the 10 absent `JS_*` costs nothing except two. `JS_GetPropertyInternal` and -`JS_SetPropertyInternal` are **live** — called from wrapper methods in `JSApi.cs` itself, at lines -231 and 488 — so phase 3 has to map them onto ng's `JS_GetProperty`/`JS_SetProperty`. For the rest: -the five `JS_*Debugger*` and `JS_SetLogFunc` are **gone**, deleted with the debug server on this -branch; `JS_SetBaseUrl` is a real P/Invoke only under `UNITY_WEBGL && !UNITY_EDITOR` and lives in -the jslib; `JS_AddIntrinsicOperators` is already stubbed under `JSB_NO_BIGNUM`, which ng makes -permanent. Nothing in the QuickJS path touches BigFloat/BigDecimal either. - -Note that some of these names already reach the shim rather than ng: `JS_NewFloat64` is declared -with `EntryPoint = "JSB_NewFloat64"`. Any audit of this surface has to honour `EntryPoint` or it -will report gaps that are not there — `check-exports.py` does. +| `JS_*` — real QuickJS API | 59 | 56 exported by ng unchanged; 3 need C# work, see phase 3 | +| `JSB_*` / `jsb_*` — unity-jsb C shim | 27 | **all 27** — none exist in ng, so each one is ported in [native/quickjs/src](../../native/quickjs/src) | +| `JSB_ATOM_*` | 16 | 12 generated from ng's `quickjs-atom.h`, 2 stubbed where operator overloading was, **2 no shim can fake** — see below | +| `js_*` — allocator | 2 | `js_malloc` and `js_free`, both exported by ng | + +`Runtime/Source/Native` declares 105 P/Invokes in total now, against 137 before phase 1. + +The shim is **27 functions, not the 25 this document used to claim.** The old count went by C# +member name and so missed three entry points reached through `EntryPoint` aliases on declarations +named `JS_*`: `JSB_DupValue`, `JSB_FreeValue` and `JSB_NewFloat64`. An earlier version of this +document warned that any audit of this surface has to honour `EntryPoint`, and then got it wrong +anyway — so re-run `check-exports.py`, which resolves `EntryPoint`, rather than reading the surface. + +Of the `JS_*` group, three are live and unexported, all of them phase 3's problem: +`JS_GetPropertyInternal` and `JS_SetPropertyInternal` are called from wrapper methods in `JSApi.cs` +itself, and `JS_AddIntrinsicOperators` from `ScriptContext.cs:56`. The names that used to be listed +here and are no longer a cost: the five `JS_*Debugger*` and `JS_SetLogFunc` went with the debug +server; `JS_SetBaseUrl` is a real P/Invoke only under `UNITY_WEBGL && !UNITY_EDITOR` and lives in +the jslib; and `JS_NewString`, the one name this plan expected to need an inline shim, turned out to +have no callers anywhere and was deleted instead. Nothing in the QuickJS path touches +BigFloat/BigDecimal. ## The four atoms ng does not have @@ -57,7 +59,8 @@ will report gaps that are not there — `check-exports.py` does. - **`Operators` / `Symbol_operatorSet`** — dropped with operator overloading. Free: every call site already guards on `JS_ATOM_Operators.IsValid` or `JSApi.IsOperatorOverloadingSupported` (`ScriptContext.cs:71`, `OperatorDecl.cs:110`, - `TypeBindingInfo.cs:899`). The shim returns `JS_ATOM_NULL` and the guards do the rest. + `TypeBindingInfo.cs:899`). The shim returns `JS_ATOM_NULL` and the guards do the rest — done, and + `shim-test` asserts ng has not grown the atoms back underneath the stubs. - **`fileName` / `lineNumber`** — not free, and silent. Bellard's `build_backtrace` defines both **on the Error object**; ng only keeps the `Function.prototype` getters. `JSContext.cs:55` reads them off a caught exception to build the error location, so under ng it gets `undefined` @@ -100,6 +103,12 @@ P/Invoke surface — on the browser's own engine, compiled from 1,824 lines of T syntax because Emscripten requires it. There is no QuickJS on WebGL at all, so every signature change and every tag value has to land here independently. Budget it as a peer of the C# work. +Phase 2 deliberately did not touch it, so it now carries entries nothing names — `JS_NewString` +among them — to prune when phase 4 brings it back into agreement. It is also why `unity_qjs.c` no +longer has `UNITY_WEBGL` guards: on WebGL `JSApi.JSBDLL` is `__Internal` and the native library is +never loaded at all, so those guards protected a configuration that cannot occur (and were +incoherent anyway — they skipped `quickjs.h` and then used `JSAtom`). + The async loader is *easier* here: the browser has real promises and real `import()`, so `JS_EvalModuleAsync` is a thin `async function` rather than a state machine. @@ -128,23 +137,25 @@ the dead Unity integration, the struct marshalling, the 18 uncalled shim declara the reflect-binding path. *Exit: repo compiles and `pnpm unity test tests` passes against the old DLL with those subsystems gone.* -**Phase 2 — port the C shim.** 25 `JSB_*`/`jsb_*` functions against ng headers, plus the two inline -shims and the 16 atoms (4 of which need the treatment described above). -*Exit: `libquickjs` builds against ng and exports everything the C# layer names.* +**Phase 2 — port the C shim.** Done. 27 `JSB_*`/`jsb_*` functions and 16 atoms against ng's +headers, in [native/quickjs/src](../../native/quickjs/src) — see "What phase 2 changed" below for +the two defects that only ng has, and for the test that covers the atom numbering. +*Exit: `libquickjs` builds against ng and exports everything the C# layer names.* Met on the C +side: none of the 27 are missing and nothing stale is exported. The 5 names still unexported are +C# declarations, which is the phase below. **Phase 3 — rewrite the C# declarations from the header.** Not by eye, not by editing in place. Generate or hand-check every declaration against `quickjs.h`, fixing `bool` widths and dropped contexts. Re-derive the tag constants. -Six names are already known to need C# work, because the Windows DLL builds and does not export -them. This is the whole list, not a sample — everything else the C# layer P/Invokes is satisfied: +Five names are known to need C# work, because the Windows DLL builds and does not export them. +This is the whole list, not a sample — everything else the C# layer P/Invokes is satisfied: | Name | What it needs | |---|---| -| `JS_NewString` | `static inline` in ng. Call `JS_NewStringLen`, which is exported | -| `JS_GetPropertyInternal` / `JS_SetPropertyInternal` | remap the two `JSApi.cs` wrappers onto `JS_GetProperty` / `JS_SetProperty` | -| `JS_AddIntrinsicOperators` | stub it — the `JSB_NO_BIGNUM` path becomes permanent | -| `JSB_ATOM_fileName` / `JSB_ATOM_lineNumber` | delete the declarations and rewrite `JSContext.cs:55` against `stack` | +| `JS_GetPropertyInternal` / `JS_SetPropertyInternal` | delete both declarations and bind `JSApi.JS_GetProperty`/`JS_SetProperty` straight to ng's, which are **exact** identities of the current wrapper bodies: ng's `JS_GetProperty` is `JS_GetPropertyInternal(ctx, obj, prop, obj, false)` and its `JS_SetProperty` is `JS_SetPropertyInternal(…, JS_PROP_THROW)` (`quickjs.c:9266`, `:10807`) | +| `JS_AddIntrinsicOperators` | make the no-bignum branch of `JSApi.cs:60` permanent rather than stubbing one name. That also takes `JSB_ATOM_Operators` and `JSB_ATOM_Symbol_operatorSet` off the P/Invoke surface, at which point the two stubs in `unity_qjs.c` must go too — `check-exports.py` will say so | +| `JSB_ATOM_fileName` / `JSB_ATOM_lineNumber` | delete the declarations and rewrite `JSContext.cs:55` against ng's `stack` | Keep the check honest by re-running it rather than reasoning about it — `python native/quickjs/check-exports.py` reads the live P/Invoke set straight out of Unity's @@ -157,6 +168,52 @@ then install `JS_SetModuleLoaderFuncAsync`, port `QuickJSModuleLoader` onto retire `ModuleCompat.RewriteDynamicImports` for QuickJS. *Exit: kitchen-sink loads a module graph over HTTP with no blocking frame, on desktop and in WebGL.* +## What phase 2 changed + +Gate 0 got the shim compiling. Compiling is not porting, and two defects were visible only by +reading ng against Bellard: + +- **`JS_SetOpaque` can now fail.** Bellard's wrote the pointer into any object it was handed; ng + returns -1 for anything that is not an object of a registered class. Unchecked, as the vendored + source left it, a failure leaks the payload *and* hands C# a bridge object whose id reads back as + 0 — no error anywhere. Both live constructors now check it. +- **`js_malloc` was never checked**, so an allocation failure dereferenced NULL rather than + propagating the exception ng had already thrown. Same for the runtime payload in `JSB_NewRuntime`. + +Two smaller ones: the atom accessors were declared K&R `()` rather than `(void)`, which C23 +redefines; and `JS_NewClass`'s return was ignored, so a failed class registration would have +produced a runtime whose bridge objects had no class. + +**26 shim functions nothing names are gone** — `JSB_Eval`, `JSB_FreePayload`, `JSB_GetClassID`, +`JSB_GetBridgeClassID`, `jsb_construct_bridge_object`, `jsb_get_payload`, and the 20 struct +accessors phase 1 orphaned. `check-exports.py` now diffs **both** directions, so neither a missing +export nor a stale one survives a run. + +### shim-test + +A CMake target and a CTest that links the shim against ng in-process, covering what a successful +link cannot: + +- **All 241 atom ids.** The shim builds its enum from ng's own `quickjs-atom.h` with the same `DEF` + trick `quickjs.c` uses, so the numbering is correct by construction — but "by construction" is an + argument, and ng went from 224 atoms to 241. The test asserts the nth accessor returns n+1 *and* + that `JS_AtomToCString` hands back the header's own string. Bad numbering would otherwise surface + as every property lookup silently addressing a different name. +- **That ng still lacks all four of the atoms it is missing** — the two the stubs cover and the two + phase 3 has to work around — so a later ng bump cannot quietly shadow a real atom with a stub. +- **The bridge payload round-trip** — object and value payloads, `jsb_get`/`jsb_set_bytes`, a plain + object correctly reporting no payload, a negative size rejected, and the class finalizer firing + exactly twice. + +Run it in `Debug` too. Losing `JSB_FreeRuntime`'s leak return was the port's one deliberate +regression, and ng's replacement is an assert on a non-empty GC object list inside `JS_FreeRuntime` +(`quickjs.c:2717`) — only live without `NDEBUG`. A `Debug` pass is what is left of that diagnostic. + +Sabotage it before trusting it; a test over a macro-generated table is easy to write vacuously. +Flipping the expected atom id to `i + 2` must produce 241 failures and a non-zero exit. + +It does not replace the Editor, which is still gate 0's remaining exit criterion. + ## What JSB_UNITYLESS hid Every jsb asmdef carried a `versionDefines` entry defining `JSB_UNITYLESS` with an empty @@ -239,6 +296,10 @@ the full suite green at the end (1,029 tests, 0 failures, both before and after) shim, satisfying 99 of the 105 live P/Invoke names, exporting the four async-loader entry points, and not exporting `JS_NewBigDecimal`. +- **Phase 2, the C shim** — 27 functions and 16 atoms ported, 26 uncalled ones deleted, the two + ng-only defects above fixed, `shim-test` added, and `check-exports.py` taught to diff both + directions. + One thing the port turned up that no amount of reading would have: **unity-jsb's source tree is a commit behind its own shipped binary.** `JSB_ThrowError` is exported by `Plugins/QuickJS/x64/quickjs.dll` and defined nowhere in `jsb_build/`. It was the only such gap, From 05b21bbca4834ffb9073dbe2e878bd5d3b018354 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 20:31:06 +0300 Subject: [PATCH 16/58] test(quickjs): check every P/Invoke declaration against ng's header check-exports.py answers "does the symbol exist", which is the failure that throws on first call. It cannot see the failure that doesn't: a signature ng changed still links, and just returns the wrong answer. check-signatures.py parses every prototype in quickjs.h, parses every live P/Invoke, and diffs return width, arity, discarded returns and bool parameter width. Run against the tree as it stands it reports eleven mismatches -- the five MIGRATION.md predicted, plus three it did not have. The next commit fixes them. Sabotaged before being trusted, the same way shim-test was: four doctored copies of quickjs.h, one per check, each of which it caught. Its blind spot is deliberate and recorded in the docstring -- it reads DllImport declarations, so callback delegates, enums and struct layouts stay hand-checked. Both scripts now read the live P/Invoke set through pinvoke.py rather than each carrying its own copy of the C# preprocessor evaluator. They need the same two things, and duplicating them is how the two checks would come to disagree about what "live" means. --- native/quickjs/check-exports.py | 110 +++-------------- native/quickjs/check-signatures.py | 189 +++++++++++++++++++++++++++++ native/quickjs/pinvoke.py | 118 ++++++++++++++++++ 3 files changed, 322 insertions(+), 95 deletions(-) create mode 100644 native/quickjs/check-signatures.py create mode 100644 native/quickjs/pinvoke.py diff --git a/native/quickjs/check-exports.py b/native/quickjs/check-exports.py index 262dc26e..47df50a1 100644 --- a/native/quickjs/check-exports.py +++ b/native/quickjs/check-exports.py @@ -3,25 +3,26 @@ python check-exports.py [path-to-quickjs.dll] -Reads the live P/Invoke set out of Unity's generated `tests/*.csproj` -- both the -real define set and the real source list -- so a declaration sitting inside a dead -`#if` block does not count as a requirement. Open `tests/` in the Editor once if the -.csproj files are missing. +Diffs `dumpbin -exports` against the live P/Invoke set (see pinvoke.py) in both +directions -- names C# calls that we do not export, and shim functions we export +that nothing calls. The second direction is not cosmetic: 26 dead functions sat in +the vendored shim precisely because nothing looked. -Exits non-zero if anything is missing, so it can gate CI. +See `check-signatures.py` for the other half -- whether the declarations that *are* +satisfied actually match the header. + +Exits non-zero if anything is missing or stale, so it can gate CI. """ import glob -import io import os import re import shutil import subprocess import sys -HERE = os.path.dirname(os.path.abspath(__file__)) -REPO = os.path.normpath(os.path.join(HERE, "..", "..")) -TESTS = os.path.join(REPO, "tests") +import pinvoke +HERE = os.path.dirname(os.path.abspath(__file__)) DEFAULT_DLL = os.path.join(HERE, "build", "Release", "quickjs.dll") DECL = re.compile( @@ -31,74 +32,6 @@ r"[^;(]*?\b(?P[A-Za-z_][A-Za-z_0-9]*)\s*\(", re.S, ) -DIRECTIVE = re.compile(r"^\s*#\s*(if|elif|else|endif)\b(.*)$") -TOK = re.compile(r"\(|\)|\|\||&&|!|[A-Za-z_][A-Za-z_0-9]*") - - -def evaluate(expr, defines): - """Evaluate a C# preprocessor condition. Unknown symbols are undefined.""" - toks = TOK.findall(expr) - pos = [0] - - def peek(): - return toks[pos[0]] if pos[0] < len(toks) else None - - def primary(): - t = toks[pos[0]] - pos[0] += 1 - if t == "(": - v = or_expr() - if peek() == ")": - pos[0] += 1 - return v - if t == "!": - return not primary() - if t in ("true", "false"): - return t == "true" - return t in defines - - def and_expr(): - v = primary() - while peek() == "&&": - pos[0] += 1 - v = primary() and v - return v - - def or_expr(): - v = and_expr() - while peek() == "||": - pos[0] += 1 - v = and_expr() or v - return v - - return or_expr() - - -def live_source(path, defines): - """The file with preprocessor-excluded lines blanked out.""" - text = io.open(path, encoding="utf-8-sig", newline="").read() - stack, out = [], [] - for raw in text.replace("\r\n", "\n").split("\n"): - m = DIRECTIVE.match(raw) - active = all(f[0] for f in stack) - if m: - kind, rest = m.group(1), m.group(2).split("//")[0] - if kind == "if": - val = active and evaluate(rest, defines) - stack.append([val, val, active]) - elif kind == "elif" and stack: - f = stack[-1] - val = f[2] and not f[1] and evaluate(rest, defines) - f[0], f[1] = val, f[1] or val - elif kind == "else" and stack: - f = stack[-1] - f[0], f[1] = f[2] and not f[1], True - elif kind == "endif" and stack: - stack.pop() - out.append("") - continue - out.append(raw if active else "") - return "\n".join(out) def find_dumpbin(): @@ -111,28 +44,15 @@ def find_dumpbin(): def wanted_names(): - projects = sorted(glob.glob(os.path.join(TESTS, "*.csproj"))) - if not projects: - sys.exit("no .csproj in %s -- open tests/ in the Unity Editor once to generate them" % TESTS) wanted = {} - for proj in projects: - base = os.path.basename(proj)[:-7] - if not (base.startswith("jsb.") or base.startswith("ReactUnity")): - continue - text = io.open(proj, encoding="utf-8-sig").read() - m = re.search(r"(.*?)", text, re.S) - defines = {x.strip() for x in (m.group(1) if m else "").split(";") if x.strip()} - for rel in re.findall(r'[A-Za-z_][A-Za-z_0-9 \t*]*?)(?P[A-Za-z_][A-Za-z_0-9]*)\s*\(") + + +def parse_header(path): + """name -> (return type, [param types]) for every prototype in the header.""" + text = re.sub(r"//[^\n]*", "", re.sub(r"/\*.*?\*/", " ", io.open(path, encoding="utf-8").read(), flags=re.S)) + protos = {} + for m in PROTO.finditer(text): + params, _ = balanced(text, m.end() - 1) + if params is None: + continue + params = [p for p in split_params(params) if p != "void"] + protos[m.group("name")] = (" ".join(m.group("ret").split()), params) + return protos + + +CS_DECL = re.compile( + r"\[DllImport\((?P[^\]]*)\)\]\s*" + r"(?P(?:\[[^\]]*\]\s*)*)" + r"(?:public|internal|private|protected)?\s*static\s+extern\s+(?:unsafe\s+)?" + r"(?P[A-Za-z_][A-Za-z_0-9.<>\[\]* \t]*?)" + r"(?P[A-Za-z_][A-Za-z_0-9]*)\s*\(", + re.S, +) + + +def parse_csharp(): + """symbol -> [declaration facts] for every P/Invoke bound to the native library.""" + decls = {} + for _proj, defines, sources in pinvoke.unity_projects(): + for full in sources: + text = pinvoke.live_source(full, defines) + for d in CS_DECL.finditer(text): + if "JSBDLL" not in d.group("args"): + continue + params, _ = balanced(text, d.end() - 1) + if params is None: + continue + params = split_params(params) + symbol = pinvoke.entry_point(d.group("args"), d.group("name")) + decls.setdefault(symbol, []).append( + { + "file": os.path.relpath(full, pinvoke.REPO), + "member": d.group("name"), + "ret": " ".join(d.group("ret").split()), + "marshalled_u1": "UnmanagedType.U1" in d.group("attrs"), + "params": params, + } + ) + return decls + + +def compare(symbol, proto, d): + """Every way this declaration disagrees with the header.""" + ret, params = proto + out = [] + + if ret == "bool": + if not (d["ret"] == "bool" and d["marshalled_u1"]): + out.append("returns C bool; C# says %s -- needs [return: MarshalAs(UnmanagedType.U1)] bool" % d["ret"]) + elif d["ret"] == "bool": + out.append("C# returns bool but ng returns %s" % ret) + elif ret == "void" and d["ret"] != "void": + out.append("C# returns %s but ng returns void" % d["ret"]) + elif ret != "void" and d["ret"] == "void": + out.append("ng returns %s; a void declaration discards it" % ret) + + if len(d["params"]) != len(params): + out.append("arity: ng takes %d (%s), C# passes %d" % (len(params), ", ".join(params) or "void", len(d["params"]))) + else: + for i, p in enumerate(params): + if p.split()[0] == "bool" and "UnmanagedType.U1" not in d["params"][i]: + out.append( + "parameter %d (%s) is a C bool; C# has `%s` -- needs [MarshalAs(UnmanagedType.U1)] bool" + % (i + 1, p, d["params"][i]) + ) + return out + + +def main(): + header = sys.argv[1] if len(sys.argv) > 1 else DEFAULT_HEADER + if not os.path.exists(header): + sys.exit("no header at %s -- configure the build first (see README.md)" % header) + + protos = parse_header(header) + decls = parse_csharp() + + checked, shim, problems = 0, 0, [] + for symbol in sorted(decls): + if symbol.startswith("JSB_") or symbol.startswith("jsb_"): + shim += 1 + continue + if symbol not in protos: + problems.append((symbol, decls[symbol][0], ["not declared in quickjs.h"])) + continue + for d in decls[symbol]: + checked += 1 + why = compare(symbol, protos[symbol], d) + if why: + problems.append((symbol, d, why)) + + print("prototypes read from %s: %d" % (os.path.basename(header), len(protos))) + print("C# declarations checked against it: %d" % checked) + print("shim declarations skipped (see check-exports.py): %d" % shim) + print("declarations with a mismatch: %d" % len(problems)) + if problems: + print() + for symbol, d, why in problems: + print(" %s -- %s (%s)" % (symbol, d["file"], d["member"])) + for line in why: + print(" %s" % line) + return 1 if problems else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/native/quickjs/pinvoke.py b/native/quickjs/pinvoke.py new file mode 100644 index 00000000..adfd6b3b --- /dev/null +++ b/native/quickjs/pinvoke.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +"""The live P/Invoke surface, read out of Unity's generated `tests/*.csproj`. + +Shared by `check-exports.py` (does the library export it?) and `check-signatures.py` +(does the declaration match the header?). Both need the same two things, and the C# +preprocessor evaluator is too much to keep in two places: + + * the **real** define set and source list, so a declaration inside a dead `#if` + is not counted as a requirement -- `JSB_ATOM_Operators` is live or not depending + on `JSB_NO_BIGNUM`, and guessing wrong moves the answer either way; + * `EntryPoint` resolution, because a member named `JS_DupValue` can bind the + symbol `JSB_DupValue`. Three do, and an audit by member name misses all three. +""" +import glob +import io +import os +import re +import sys + +HERE = os.path.dirname(os.path.abspath(__file__)) +REPO = os.path.normpath(os.path.join(HERE, "..", "..")) +TESTS = os.path.join(REPO, "tests") + +DIRECTIVE = re.compile(r"^\s*#\s*(if|elif|else|endif)\b(.*)$") +TOK = re.compile(r"\(|\)|\|\||&&|!|[A-Za-z_][A-Za-z_0-9]*") + + +def evaluate(expr, defines): + """Evaluate a C# preprocessor condition. Unknown symbols are undefined.""" + toks = TOK.findall(expr) + pos = [0] + + def peek(): + return toks[pos[0]] if pos[0] < len(toks) else None + + def primary(): + t = toks[pos[0]] + pos[0] += 1 + if t == "(": + v = or_expr() + if peek() == ")": + pos[0] += 1 + return v + if t == "!": + return not primary() + if t in ("true", "false"): + return t == "true" + return t in defines + + def and_expr(): + v = primary() + while peek() == "&&": + pos[0] += 1 + v = primary() and v + return v + + def or_expr(): + v = and_expr() + while peek() == "||": + pos[0] += 1 + v = and_expr() or v + return v + + return or_expr() + + +def live_source(path, defines): + """The file with preprocessor-excluded lines blanked out.""" + text = io.open(path, encoding="utf-8-sig", newline="").read() + stack, out = [], [] + for raw in text.replace("\r\n", "\n").split("\n"): + m = DIRECTIVE.match(raw) + active = all(f[0] for f in stack) + if m: + kind, rest = m.group(1), m.group(2).split("//")[0] + if kind == "if": + val = active and evaluate(rest, defines) + stack.append([val, val, active]) + elif kind == "elif" and stack: + f = stack[-1] + val = f[2] and not f[1] and evaluate(rest, defines) + f[0], f[1] = val, f[1] or val + elif kind == "else" and stack: + f = stack[-1] + f[0], f[1] = f[2] and not f[1], True + elif kind == "endif" and stack: + stack.pop() + out.append("") + continue + out.append(raw if active else "") + return "\n".join(out) + + +def unity_projects(): + """(project, defines, source paths) per generated csproj that compiles quickjs C#.""" + projects = sorted(glob.glob(os.path.join(TESTS, "*.csproj"))) + if not projects: + sys.exit("no .csproj in %s -- open tests/ in the Unity Editor once to generate them" % TESTS) + for proj in projects: + base = os.path.basename(proj)[:-7] + if not (base.startswith("jsb.") or base.startswith("ReactUnity")): + continue + text = io.open(proj, encoding="utf-8-sig").read() + m = re.search(r"(.*?)", text, re.S) + defines = {x.strip() for x in (m.group(1) if m else "").split(";") if x.strip()} + sources = [] + for rel in re.findall(r' Date: Sun, 23 Aug 2026 20:31:38 +0300 Subject: [PATCH 17/58] refactor(quickjs): bind the C# declarations to quickjs-ng Every live P/Invoke now matches its prototype in quickjs.h, and check-signatures.py reports 0 mismatches across all 60. The five names MIGRATION.md predicted are resolved: - JS_GetProperty/JS_SetProperty bind straight to ng's exports. Their bodies are exact identities of the wrapper methods they replace (quickjs.c:9266, :10807), and the *Internal functions they called are no longer public. - IsOperatorOverloadingSupported is permanently false, since ng removed the engine feature. That takes JS_AddIntrinsicOperators and both Operators atoms off the surface. The cost is bounded: the only consumers are two checks in TypeBindingInfo, so what goes is codegen emitting operator overloads, on a path ReactUnity does not use. jsb.isOperatorOverloadingSupported still answers correctly. - fileName/lineNumber are gone from ng's Error objects, which keeps only the Function.prototype getters. FormatException drops both reads: ng's stack already opens with " at ::" in exactly the shape the deleted code assembled by hand (quickjs.c:8256). Verified on a real parse error from the suite, which now reports the same location plus a column and the frames above it. Three the plan had wrong or missing, all found by running the check: - JS_IsJobPending carried an `out JSContext pctx` that no QuickJS header has ever declared, Bellard's included. The callee ignored the second register; the caller read back an uninitialised local. - JS_SetConstructor returns int in ng and was declared void, discarding a failure. - JS_ToCStringLen2's cesu8 was marshalled as UnmanagedType.Bool, the four-byte Win32 BOOL, against a one-byte C bool. Two more from auditing what the check cannot see: - JSHostPromiseRejectionTracker's is_handled narrowed to a C bool. This is a reverse P/Invoke, so the managed signature decides how many bytes come off the register, and reading four where ng wrote one takes three undefined bytes with it. It guards the "Unhandled promise rejection" log, so the symptom would have been handled rejections reported as unhandled. Correct before ng: Bellard's really did pass JS_BOOL. - JS_EVAL_FLAG_STRIP is JS_EVAL_FLAG_ASYNC_LOAD in ng -- same bit, unrelated meaning. Nothing passed it, but it is bit 4 of the flag word phase 4's async loader has to set, so the old name was a trap laid in the next phase's path. Constants and layouts were re-derived rather than carried forward, all of them and not just the tags. SHORT_BIG_INT occupies 7 in ng, the slot FLOAT64 used to hold, so a stale tag block reads every double as a bigint. JSPropFlags, JSGPNFlags, JSCFunctionEnum, JSMemoryUsage and ten of the eleven delegates already agreed; JSEvalFlags and JSPropertyEnum.is_enumerable did not. The one bug here that no signature check would have caught: JSValue.IsString() tested only JS_TAG_STRING. ng represents `a + b` as an unflattened rope with its own tag and hands it out as an ordinary value -- which is why ng's own JS_IsString accepts both tags -- so every concatenated string reaching a binding was classified as a non-string. Reachable from any script, with no error to notice. Call sites follow from the declarations: 25 dropped JSContext arguments, 42 comparisons against 1/0 turned into boolean expressions, and 18 unreachable `isArray == -1` blocks removed, ng's bool having no room for the tri-state Bellard's returned for the proxy case. --- .../Runtime/Source/Binding/Values_delegate.cs | 6 +- .../Runtime/Source/Binding/Values_get.cs | 164 ++++-------------- .../Runtime/Source/Binding/Values_get_var.cs | 4 +- .../Runtime/Source/Binding/Values_match.cs | 4 +- unity/quickjs/Runtime/Source/JSNative.cs | 9 +- unity/quickjs/Runtime/Source/JSWorker.cs | 4 +- unity/quickjs/Runtime/Source/Native/JSApi.cs | 135 +++++++------- .../Runtime/Source/Native/JSContext.cs | 22 +-- .../Runtime/Source/Native/JSEvalFlags.cs | 12 +- .../Runtime/Source/Native/JSPropFlags.cs | 2 + .../Runtime/Source/Native/JSPropertyEnum.cs | 10 +- .../quickjs/Runtime/Source/Native/JSValue.cs | 7 +- unity/quickjs/Runtime/Source/ScriptContext.cs | 10 +- .../Runtime/Source/ScriptContext_funcs.cs | 8 +- unity/quickjs/Runtime/Source/ScriptPromise.cs | 2 +- .../Runtime/Source/ScriptRuntime+Module.cs | 4 +- unity/quickjs/Runtime/Source/ScriptRuntime.cs | 4 +- .../quickjs/Runtime/Source/Utils/FSWatcher.cs | 2 +- 18 files changed, 164 insertions(+), 245 deletions(-) diff --git a/unity/quickjs/Runtime/Source/Binding/Values_delegate.cs b/unity/quickjs/Runtime/Source/Binding/Values_delegate.cs index 091fe480..02315168 100644 --- a/unity/quickjs/Runtime/Source/Binding/Values_delegate.cs +++ b/unity/quickjs/Runtime/Source/Binding/Values_delegate.cs @@ -52,7 +52,7 @@ public static JSValue js_push_delegate(JSContext ctx, Delegate o) public static bool js_get_delegate(JSContext ctx, JSValue val, out T[] o) where T : class { - if (JSApi.JS_IsArray(ctx, val) == 1) + if (JSApi.JS_IsArray(val)) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -97,7 +97,7 @@ public static bool js_get_delegate_unsafe(JSContext ctx, JSValue val, out Delega return true; } - if (JSApi.JS_IsFunction(ctx, val) == 1) + if (JSApi.JS_IsFunction(ctx, val)) { ScriptDelegate fn; var cache = ScriptEngine.GetObjectCache(ctx); @@ -143,7 +143,7 @@ public static bool js_get_delegate(JSContext ctx, JSValue val, Type delegateType { return o == null || o.GetType() == delegateType; } - if (JSApi.JS_IsFunction(ctx, val) == 1) + if (JSApi.JS_IsFunction(ctx, val)) { ScriptDelegate fn; var cache = ScriptEngine.GetObjectCache(ctx); diff --git a/unity/quickjs/Runtime/Source/Binding/Values_get.cs b/unity/quickjs/Runtime/Source/Binding/Values_get.cs index 74af487a..323ce145 100644 --- a/unity/quickjs/Runtime/Source/Binding/Values_get.cs +++ b/unity/quickjs/Runtime/Source/Binding/Values_get.cs @@ -39,8 +39,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out IntPtr? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out IntPtr[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -70,11 +70,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out IntPtr[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -113,8 +108,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out bool? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out bool[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -144,11 +139,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out bool[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -175,8 +165,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out sbyte? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out sbyte[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -206,11 +196,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out sbyte[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -237,8 +222,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out byte? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out byte[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -299,11 +284,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out byte[] o) JSApi.JS_FreeValue(ctx, asBuffer); } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -330,8 +310,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out char? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out char[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -361,11 +341,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out char[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -385,8 +360,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out string o) public static bool js_get_primitive(JSContext ctx, JSValue val, out string[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -416,11 +391,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out string[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -447,8 +417,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out short? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out short[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -478,11 +448,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out short[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -509,8 +474,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out ushort? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out ushort[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -540,11 +505,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out ushort[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -571,8 +531,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out int? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out int[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -602,11 +562,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out int[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -633,8 +588,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out uint? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out uint[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -664,11 +619,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out uint[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -695,8 +645,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out long? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out long[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -726,11 +676,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out long[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -757,8 +702,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out ulong? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out ulong[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -788,11 +733,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out ulong[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -833,8 +773,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out float? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out float[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -864,11 +804,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out float[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -895,8 +830,8 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out double? o) public static bool js_get_primitive(JSContext ctx, JSValue val, out double[] o) { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -926,11 +861,6 @@ public static bool js_get_primitive(JSContext ctx, JSValue val, out double[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -961,8 +891,8 @@ public static bool js_get_structvalue(JSContext ctx, JSValue val, out T? o) public static bool js_get_structvalue(JSContext ctx, JSValue val, out T[] o) where T : struct { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -992,19 +922,14 @@ public static bool js_get_structvalue(JSContext ctx, JSValue val, out T[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } public static bool js_get_structvalue(JSContext ctx, JSValue val, out T?[] o) where T : struct { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -1034,11 +959,6 @@ public static bool js_get_structvalue(JSContext ctx, JSValue val, out T?[] o) } return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } @@ -1149,7 +1069,7 @@ public static bool js_get_classvalue(JSContext ctx, JSValue val, out ScriptValue /// public static bool js_get_classvalue(JSContext ctx, JSValue val, out ScriptFunction o) { - if (JSApi.JS_IsFunction(ctx, val) != 0) + if (JSApi.JS_IsFunction(ctx, val)) { var context = ScriptEngine.GetContext(ctx); if (context != null) @@ -1274,8 +1194,8 @@ public static bool js_get_cached_object(JSContext ctx, JSValue val, out object o public static bool js_get_classvalue(JSContext ctx, JSValue val, out T[] o) where T : class { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -1306,11 +1226,6 @@ public static bool js_get_classvalue(JSContext ctx, JSValue val, out T[] o) return true; } - if (isArray == -1) - { - o = null; - return false; - } // fallback to get_object return js_get_classvalue(ctx, val, out o); @@ -1336,8 +1251,8 @@ public static bool js_get_enumvalue(JSContext ctx, JSValue val, Type type, out o public static bool js_get_enumvalue(JSContext ctx, JSValue val, out T[] o) where T : Enum { - var isArray = JSApi.JS_IsArray(ctx, val); - if (isArray == 1) + var isArray = JSApi.JS_IsArray(val); + if (isArray) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -1368,11 +1283,6 @@ public static bool js_get_enumvalue(JSContext ctx, JSValue val, out T[] o) return true; } - if (isArray == -1) - { - o = null; - return false; - } return js_get_classvalue(ctx, val, out o); } diff --git a/unity/quickjs/Runtime/Source/Binding/Values_get_var.cs b/unity/quickjs/Runtime/Source/Binding/Values_get_var.cs index 83cd8529..304f2c4d 100644 --- a/unity/quickjs/Runtime/Source/Binding/Values_get_var.cs +++ b/unity/quickjs/Runtime/Source/Binding/Values_get_var.cs @@ -188,7 +188,7 @@ public static bool js_get_var(JSContext ctx, JSValue val, out object o) public static bool js_get_var(JSContext ctx, JSValue val, out object[] o) { - if (JSApi.JS_IsArray(ctx, val) == 1) + if (JSApi.JS_IsArray(val)) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) @@ -264,7 +264,7 @@ public static bool js_get_var(JSContext ctx, JSValue val, Type type, out object if (type.IsArray) { - if (type.GetArrayRank() == 1 && JSApi.JS_IsArray(ctx, val) == 1) + if (type.GetArrayRank() == 1 && JSApi.JS_IsArray(val)) { var lengthVal = JSApi.JS_GetProperty(ctx, val, JSApi.JS_ATOM_length); if (JSApi.JS_IsException(lengthVal)) diff --git a/unity/quickjs/Runtime/Source/Binding/Values_match.cs b/unity/quickjs/Runtime/Source/Binding/Values_match.cs index 494e61cb..8b83e5d1 100644 --- a/unity/quickjs/Runtime/Source/Binding/Values_match.cs +++ b/unity/quickjs/Runtime/Source/Binding/Values_match.cs @@ -75,7 +75,7 @@ public static bool js_match_type(JSContext ctx, JSValue jsValue, Type type) { if (type == typeof(ScriptFunction) || type.BaseType == typeof(MulticastDelegate)) { - return JSApi.JS_IsFunction(ctx, jsValue) == 1; + return JSApi.JS_IsFunction(ctx, jsValue); } var context = ScriptEngine.GetContext(ctx); @@ -124,7 +124,7 @@ public static bool js_match_type(JSContext ctx, JSValue jsValue, Type type) if (type.IsArray) { - return JSApi.JS_IsArray(ctx, jsValue) == 1; + return JSApi.JS_IsArray(jsValue); } return type.IsSubclassOf(typeof(ScriptValue)); diff --git a/unity/quickjs/Runtime/Source/JSNative.cs b/unity/quickjs/Runtime/Source/JSNative.cs index c978d717..a73502c6 100644 --- a/unity/quickjs/Runtime/Source/JSNative.cs +++ b/unity/quickjs/Runtime/Source/JSNative.cs @@ -1,10 +1,10 @@ using System; +using System.Runtime.InteropServices; namespace QuickJS { using Native; using JSValueConst = Native.JSValue; - using JS_BOOL = Int32; /// /// A thin layer wrapping the raw JSApi which depends on some methods from jsb.core module. @@ -27,7 +27,7 @@ public static bool CheckFuncProperty(this JSValue self, ScriptContext context, s var ctx = (JSContext)context; var prop = JSApi.JS_GetProperty(ctx, self, context.GetAtom(name)); - var res = JSApi.JS_IsFunction(context, prop) == 1; + var res = JSApi.JS_IsFunction(context, prop); JSApi.JS_FreeValue(ctx, prop); return res; @@ -137,9 +137,10 @@ public static unsafe JSValue ThrowReferenceError(this JSContext ctx, string mess } [MonoPInvokeCallback(typeof(JSHostPromiseRejectionTracker))] - public static void PromiseRejectionTracker(JSContext ctx, JSValueConst promise, JSValueConst reason, JS_BOOL is_handled, IntPtr opaque) + public static void PromiseRejectionTracker(JSContext ctx, JSValueConst promise, JSValueConst reason, + [MarshalAs(UnmanagedType.U1)] bool is_handled, IntPtr opaque) { - if (is_handled != 1) + if (!is_handled) { var logger = ScriptEngine.GetLogger(ctx); if (logger != null) diff --git a/unity/quickjs/Runtime/Source/JSWorker.cs b/unity/quickjs/Runtime/Source/JSWorker.cs index 01b41da2..432fbf96 100644 --- a/unity/quickjs/Runtime/Source/JSWorker.cs +++ b/unity/quickjs/Runtime/Source/JSWorker.cs @@ -142,7 +142,7 @@ private void Run() JSContext ctx = context; var globalObject = context.GetGlobalObject(); var onmessage = JSApi.JS_GetPropertyStr(context, globalObject, "onmessage"); - var callable = JSApi.JS_IsFunction(ctx, onmessage) == 1; + var callable = JSApi.JS_IsFunction(ctx, onmessage); for (int i = 0, count = list.Count; i < count; i++) { @@ -235,7 +235,7 @@ private static unsafe void _MasterOnMessage(ScriptRuntime runtime, object cbArgs } else { - if (JSApi.JS_IsFunction(ctx, onmessage) == 1) + if (JSApi.JS_IsFunction(ctx, onmessage)) { // read object => jsvalue JSValue data; diff --git a/unity/quickjs/Runtime/Source/Native/JSApi.cs b/unity/quickjs/Runtime/Source/Native/JSApi.cs index da6c2567..191016a2 100644 --- a/unity/quickjs/Runtime/Source/Native/JSApi.cs +++ b/unity/quickjs/Runtime/Source/Native/JSApi.cs @@ -20,9 +20,14 @@ namespace QuickJS.Native [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int JSInterruptHandler(JSRuntime rt, IntPtr opaque); - /* is_handled = TRUE means that the rejection is handled */ + /// Called with is_handled true when the rejection is already handled. + // Bellard's passed JS_BOOL here, so declaring it Int32 was right; ng passes a C bool, + // one byte, and this is a reverse P/Invoke -- reading four would take three undefined + // bytes off the register and report handled rejections as unhandled. check-signatures.py + // reads DllImports only, so callback parameters like this one are checked by hand. [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void JSHostPromiseRejectionTracker(JSContext ctx, JSValueConst promise, JSValueConst reason, JS_BOOL is_handled, IntPtr opaque); + public delegate void JSHostPromiseRejectionTracker(JSContext ctx, JSValueConst promise, JSValueConst reason, + [MarshalAs(UnmanagedType.U1)] bool is_handled, IntPtr opaque); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public unsafe delegate IntPtr JSModuleNormalizeFunc(JSContext ctx, [MarshalAs(UnmanagedType.LPStr)] string module_base_name, [MarshalAs(UnmanagedType.LPStr)] string module_name, IntPtr opaque); @@ -57,11 +62,11 @@ public partial class JSApi public const int CS_JSB_VERSION = 0xa; // expected dll version public static readonly int SO_JSB_VERSION; // actual dll version -#if JSB_NO_BIGNUM || ((UNITY_WSA || UNITY_WEBGL) && !UNITY_EDITOR) + // quickjs-ng removed operator overloading outright, so this is no longer a build + // choice. Every guard on it now resolves at compile time and the branches behind + // them are unreachable, which is what lets JS_AddIntrinsicOperators and the + // Operators atoms leave the P/Invoke surface entirely. public const bool IsOperatorOverloadingSupported = false; -#else - public const bool IsOperatorOverloadingSupported = true; -#endif #if (UNITY_IPHONE || UNITY_WEBGL) && !UNITY_EDITOR public const string JSBDLL = "__Internal"; @@ -69,12 +74,15 @@ public partial class JSApi public const string JSBDLL = "quickjs"; #endif - public const int JS_TAG_FIRST = -11; /* first negative tag */ - public const int JS_TAG_BIG_DECIMAL = -11; - public const int JS_TAG_BIG_INT = -10; - public const int JS_TAG_BIG_FLOAT = -9; + // Transcribed from quickjs-ng's own enum, not carried over: ng dropped BigDecimal + // and BigFloat and added STRING_ROPE and SHORT_BIG_INT, which moved five of these. + // SHORT_BIG_INT took 7 -- the slot FLOAT64 used to hold -- so a stale copy of this + // block reads every double as a bigint. + public const int JS_TAG_FIRST = -9; /* first negative tag */ + public const int JS_TAG_BIG_INT = -9; public const int JS_TAG_SYMBOL = -8; public const int JS_TAG_STRING = -7; + public const int JS_TAG_STRING_ROPE = -6; /* lazily concatenated string */ public const int JS_TAG_MODULE = -3; /* used internally */ public const int JS_TAG_FUNCTION_BYTECODE = -2; /* used internally */ public const int JS_TAG_OBJECT = -1; @@ -83,18 +91,23 @@ public partial class JSApi public const int JS_TAG_BOOL = 1; public const int JS_TAG_NULL = 2; public const int JS_TAG_UNDEFINED = 3; + public const int JS_TAG_UNINITIALIZED = 4; + public const int JS_TAG_CATCH_OFFSET = 5; public const int JS_TAG_EXCEPTION = 6; - public const int JS_TAG_FLOAT64 = 7; + public const int JS_TAG_SHORT_BIG_INT = 7; + public const int JS_TAG_FLOAT64 = 8; - // #define JS_WRITE_OBJ_BYTECODE (1 << 0) /* allow function/module */ public const int JS_WRITE_OBJ_BYTECODE = 1 << 0; /* allow function/module */ - public const int JS_WRITE_OBJ_BSWAP = 1 << 1; /* byte swapped output */ + public const int JS_WRITE_OBJ_BSWAP = 0; /* obsolete in ng, handled transparently */ public const int JS_WRITE_OBJ_SAB = 1 << 2; /* allow SharedArrayBuffer */ public const int JS_WRITE_OBJ_REFERENCE = 1 << 3; /* allow object references to encode arbitrary object graph */ + public const int JS_WRITE_OBJ_STRIP_SOURCE = 1 << 4; /* do not write source code information */ + public const int JS_WRITE_OBJ_STRIP_DEBUG = 1 << 5; /* do not write debug information */ + public const int JS_READ_OBJ_BYTECODE = 1 << 0; /* allow function/module */ - public const int JS_READ_OBJ_ROM_DATA = 1 << 1; /* avoid duplicating 'buf' data */ + public const int JS_READ_OBJ_ROM_DATA = 0; /* obsolete in ng, broken by ICs */ public const int JS_READ_OBJ_SAB = 1 << 2; /* allow SharedArrayBuffer */ public const int JS_READ_OBJ_REFERENCE = 1 << 3; /* allow object references */ @@ -195,15 +208,13 @@ public static unsafe JSValue JS_NewPromiseCapability(JSContext ctx, out JSValue [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSValue JS_GetPropertyUint32(JSContext ctx, JSValueConst this_obj, uint32_t idx); + /// Adds a reference; caller must FreeValue. + // ng exports JS_GetProperty itself, and its body is exactly what the wrapper this + // replaced spelled out: JS_GetPropertyInternal(ctx, obj, prop, obj, false) + // (quickjs.c:9266). JS_GetPropertyInternal is no longer public, so this is the + // binding, not a convenience over one. [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JSValue JS_GetPropertyInternal(JSContext ctx, JSValueConst obj, JSAtom prop, - JSValueConst receiver, JS_BOOL throw_ref_error); - - // 增引用, 需要 FreeValue - public static JSValue JS_GetProperty(JSContext ctx, JSValueConst this_obj, JSAtom prop) - { - return JS_GetPropertyInternal(ctx, this_obj, prop, this_obj, 0); - } + public static extern JSValue JS_GetProperty(JSContext ctx, JSValueConst this_obj, JSAtom prop); [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSValue JS_GetPropertyStr(JSContext ctx, JSValueConst this_obj, @@ -251,8 +262,11 @@ public static int JS_DefineConstPropertyValue(JSContext ctx, JSValueConst this_o [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSValue JS_GetException(JSContext ctx); + // ng also dropped the JSContext parameter, which shifts the JSValue into the + // wrong register slot -- an arity change that links clean and answers wrong. [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL JS_IsError(JSContext ctx, JSValueConst val); + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool JS_IsError(JSValueConst val); [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern unsafe JSValue JSB_ThrowError(JSContext ctx, byte* buf, size_t buf_len); @@ -343,22 +357,23 @@ public static JSValue JS_NewUint32(JSContext ctx, uint32_t val) public static extern JSValue JS_NewObject(JSContext ctx); [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL JS_IsFunction(JSContext ctx, JSValueConst val); + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool JS_IsFunction(JSContext ctx, JSValueConst val); - /// - /// return 1:true 0:false - /// [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JS_BOOL JS_IsConstructor(JSContext ctx, JSValueConst val); + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool JS_IsConstructor(JSContext ctx, JSValueConst val); [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSValue JS_NewArray(JSContext ctx); /// - /// return -1 if exception (proxy case) or TRUE/FALSE + /// True for a real Array. Unlike Bellard's, ng never reports the proxy exception + /// case, so there is no -1 to test for any more. /// [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern int JS_IsArray(JSContext ctx, JSValueConst val); + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool JS_IsArray(JSValueConst val); [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr JS_GetContextOpaque(JSContext ctx); @@ -430,20 +445,18 @@ public static JSValue JSB_NewCFunction(JSContext ctx, JSCFunction func, JSAtom a return JSB_NewCFunction(ctx, fn, atom, length, JSCFunctionEnum.JS_CFUNC_generic, 0); } + /// Returns -1 on exception. [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern void JS_SetConstructor(JSContext ctx, JSValueConst func_obj, JSValueConst proto); + public static extern int JS_SetConstructor(JSContext ctx, JSValueConst func_obj, JSValueConst proto); - /* return -1 in case of exception or TRUE or FALSE. Warning: 'val' is - freed by the function. 'flags' is a bitmask of JS_PROP_NO_ADD, - JS_PROP_THROW or JS_PROP_THROW_STRICT. If JS_PROP_NO_ADD is set, - the new property is not added and an error is raised. */ + /// + /// Returns -1 on exception, else TRUE/FALSE. Frees . + /// + // Same story as JS_GetProperty: ng's JS_SetProperty is + // JS_SetPropertyInternal(..., JS_PROP_THROW) (quickjs.c:10807), which is what the + // wrapper this replaced passed. [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern int JS_SetPropertyInternal(JSContext ctx, JSValueConst this_obj, JSAtom prop, JSValue val, int flags); - - public static int JS_SetProperty(JSContext ctx, JSValueConst this_obj, JSAtom prop, JSValue val) - { - return JS_SetPropertyInternal(ctx, this_obj, prop, val, (int)JSPropFlags.JS_PROP_THROW); - } + public static extern int JS_SetProperty(JSContext ctx, JSValueConst this_obj, JSAtom prop, JSValue val); public static bool IsDebugMode() { @@ -515,8 +528,12 @@ public static unsafe JSValue JS_Invoke(JSContext ctx, JSValueConst this_val, JSA [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern int JS_ExecutePendingJob(JSRuntime rt, out JSContext pctx); + // The `out JSContext pctx` this used to declare was never in any QuickJS header, + // Bellard's included -- the callee ignored the second register and the caller read + // back whatever the uninitialised local held. [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern int JS_IsJobPending(JSRuntime rt, out JSContext pctx); + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool JS_IsJobPending(JSRuntime rt); [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern int JS_ToBool(JSContext ctx, JSValueConst val); @@ -718,25 +735,13 @@ public static unsafe void JS_FreeValue(JSContext ctx, int count, JSValue* vs) public static readonly JSAtom JS_ATOM_Error = JSB_ATOM_Error(); -#if JSB_NO_BIGNUM || ((UNITY_WSA || UNITY_WEBGL) && !UNITY_EDITOR) + // No-ops rather than deletions: the call sites are guarded by + // IsOperatorOverloadingSupported and reading unreachable-but-compiled code is + // cheaper than threading the guard through every one. Both atoms stay default, + // i.e. JS_ATOM_NULL, which is what JSAtom.IsValid tests. public static void JS_AddIntrinsicOperators(JSContext ctx) {} public static readonly JSAtom JS_ATOM_Operators; public static readonly JSAtom JS_ATOM_Symbol_operatorSet; -#else - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern void JS_AddIntrinsicOperators(JSContext ctx); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JSAtom JSB_ATOM_Operators(); - - public static readonly JSAtom JS_ATOM_Operators = JSB_ATOM_Operators(); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JSAtom JSB_ATOM_Symbol_operatorSet(); - - // only available CONFIG_BIGNUM - public static readonly JSAtom JS_ATOM_Symbol_operatorSet = JSB_ATOM_Symbol_operatorSet(); -#endif [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSAtom JSB_ATOM_name(); @@ -748,15 +753,9 @@ public static void JS_AddIntrinsicOperators(JSContext ctx) {} public static readonly JSAtom JS_ATOM_message = JSB_ATOM_message(); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JSAtom JSB_ATOM_fileName(); - - public static readonly JSAtom JS_ATOM_fileName = JSB_ATOM_fileName(); - - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JSAtom JSB_ATOM_lineNumber(); - - public static readonly JSAtom JS_ATOM_lineNumber = JSB_ATOM_lineNumber(); + // fileName and lineNumber are gone: Bellard's build_backtrace defined both on the + // Error object, ng keeps only the Function.prototype getters (quickjs.c:43389). + // The location lives in the `stack` string now -- see JSContext.FormatException. [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSAtom JSB_ATOM_length(); @@ -796,7 +795,7 @@ public static void JS_AddIntrinsicOperators(JSContext ctx) {} #region string [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr JS_ToCStringLen2(JSContext ctx, out size_t len, [In] JSValue val, [MarshalAs(UnmanagedType.Bool)] bool cesu8); + public static extern IntPtr JS_ToCStringLen2(JSContext ctx, out size_t len, [In] JSValue val, [MarshalAs(UnmanagedType.U1)] bool cesu8); public static IntPtr JS_ToCStringLen(JSContext ctx, out size_t len, JSValue val) { diff --git a/unity/quickjs/Runtime/Source/Native/JSContext.cs b/unity/quickjs/Runtime/Source/Native/JSContext.cs index 1dad64a1..aa397b6f 100644 --- a/unity/quickjs/Runtime/Source/Native/JSContext.cs +++ b/unity/quickjs/Runtime/Source/Native/JSContext.cs @@ -39,7 +39,7 @@ public string GetExceptionString() } /// - /// Name, message, throw site and stack of a thrown value. Caller keeps ownership of ex. + /// Name, message and stack of a thrown value. Caller keeps ownership of ex. /// Every part is optional -- engine-thrown errors have only a stack -- so nothing is /// assumed present and the stack is always appended. /// @@ -48,20 +48,16 @@ public string FormatException(JSValue ex) // `throw 'oops'` is legal; then there is only the value. if (!ex.IsObject()) return ToStringSafe(ex) ?? "(unprintable value)"; - var isError = JSApi.JS_IsError(this, ex) == 1; + var isError = JSApi.JS_IsError(ex); var err_name = JSApi.JS_GetProperty(this, ex, JSApi.JS_ATOM_name); var err_message = JSApi.JS_GetProperty(this, ex, JSApi.JS_ATOM_message); - var err_fileName = JSApi.JS_GetProperty(this, ex, JSApi.JS_ATOM_fileName); - var err_lineNumber = JSApi.JS_GetProperty(this, ex, JSApi.JS_ATOM_lineNumber); var err_stack = JSApi.JS_GetProperty(this, ex, JSApi.JS_ATOM_stack); try { var name = GetStringIfPresent(err_name); var message = GetStringIfPresent(err_message); - var fileName = GetStringIfPresent(err_fileName); - var lineNumber = GetStringIfPresent(err_lineNumber); var stack = GetStringIfPresent(err_stack); string header; @@ -72,13 +68,11 @@ public string FormatException(JSValue ex) var sb = new StringBuilder(header); - // Only set for parse and module errors, never for runtime throws. - if (!string.IsNullOrEmpty(fileName)) - { - sb.Append("\n at ").Append(fileName); - if (!string.IsNullOrEmpty(lineNumber)) sb.Append(':').Append(lineNumber); - } - + // The throw site used to come from fileName/lineNumber, which ng no longer + // defines on the Error object. Nothing is lost: ng's stack already opens + // with " at ::" for parse and module errors + // (quickjs.c:8256) and carries the same location per frame otherwise, so + // appending the stack is now the whole job. if (!string.IsNullOrEmpty(stack)) sb.Append('\n').Append(stack.TrimEnd()); return sb.ToString(); @@ -87,8 +81,6 @@ public string FormatException(JSValue ex) { JSApi.JS_FreeValue(this, err_name); JSApi.JS_FreeValue(this, err_message); - JSApi.JS_FreeValue(this, err_fileName); - JSApi.JS_FreeValue(this, err_lineNumber); JSApi.JS_FreeValue(this, err_stack); } } diff --git a/unity/quickjs/Runtime/Source/Native/JSEvalFlags.cs b/unity/quickjs/Runtime/Source/Native/JSEvalFlags.cs index 05dadc7a..f8c602f5 100644 --- a/unity/quickjs/Runtime/Source/Native/JSEvalFlags.cs +++ b/unity/quickjs/Runtime/Source/Native/JSEvalFlags.cs @@ -13,7 +13,13 @@ internal enum JSEvalFlags JS_EVAL_TYPE_MASK = (3 << 0), JS_EVAL_FLAG_STRICT = (1 << 3) /* force 'strict' mode */, - JS_EVAL_FLAG_STRIP = (1 << 4) /* force 'strip' mode */, + + /* Bit 4 was 'strip' mode in Bellard's. In ng it asks for the module to come back + with its dependencies unresolved, for JS_LoadModuleAsync to load the graph -- + implying COMPILE_ONLY and TYPE_MODULE. Nothing passed STRIP, so renaming it is + free; leaving the old name would have handed phase 4's async loader a flag that + reads as the opposite of what it says. */ + JS_EVAL_FLAG_ASYNC_LOAD = (1 << 4), /* compile but do not run. The result is an object with a JS_TAG_FUNCTION_BYTECODE or JS_TAG_MODULE tag. It can be executed @@ -22,5 +28,9 @@ with JS_EvalFunction(). */ /* don't include the stack frames before this eval in the Error() backtraces */ JS_EVAL_FLAG_BACKTRACE_BARRIER = (1 << 6), + + /* allow top-level await in a normal script; JS_Eval then returns a promise. + Only valid with JS_EVAL_TYPE_GLOBAL. */ + JS_EVAL_FLAG_ASYNC = (1 << 7), } } diff --git a/unity/quickjs/Runtime/Source/Native/JSPropFlags.cs b/unity/quickjs/Runtime/Source/Native/JSPropFlags.cs index 16c15782..d6fb3ad6 100644 --- a/unity/quickjs/Runtime/Source/Native/JSPropFlags.cs +++ b/unity/quickjs/Runtime/Source/Native/JSPropFlags.cs @@ -37,6 +37,8 @@ internal enum JSPropFlags JS_PROP_NO_ADD = (1 << 16) /* internal use */, JS_PROP_NO_EXOTIC = (1 << 17) /* internal use */, + JS_PROP_DEFINE_PROPERTY = (1 << 18) /* internal use */, + JS_PROP_REFLECT_DEFINE_PROPERTY = (1 << 19) /* internal use */, // custom values CONST_VALUE = JS_PROP_HAS_VALUE | JS_PROP_ENUMERABLE, diff --git a/unity/quickjs/Runtime/Source/Native/JSPropertyEnum.cs b/unity/quickjs/Runtime/Source/Native/JSPropertyEnum.cs index 33d77e75..3deb9ff3 100644 --- a/unity/quickjs/Runtime/Source/Native/JSPropertyEnum.cs +++ b/unity/quickjs/Runtime/Source/Native/JSPropertyEnum.cs @@ -2,18 +2,20 @@ namespace QuickJS.Native { - using JS_BOOL = System.Int32; - /* typedef struct JSPropertyEnum { - JS_BOOL is_enumerable; + bool is_enumerable; JSAtom atom; } JSPropertyEnum; */ + // is_enumerable was JS_BOOL in Bellard's and is a one-byte C bool in ng. `atom` sits at + // offset 4 either way, so only the flag was at risk -- read four bytes wide it picks up + // three bytes of padding C does not promise to zero. Nothing references this struct yet; + // it is corrected so that whatever does first is not wrong. [StructLayout(LayoutKind.Sequential)] public struct JSPropertyEnum { - public JS_BOOL is_enumerable; + [MarshalAs(UnmanagedType.U1)] public bool is_enumerable; public JSAtom atom; } } \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Native/JSValue.cs b/unity/quickjs/Runtime/Source/Native/JSValue.cs index 7fb45acb..8b39b472 100644 --- a/unity/quickjs/Runtime/Source/Native/JSValue.cs +++ b/unity/quickjs/Runtime/Source/Native/JSValue.cs @@ -58,7 +58,11 @@ public bool IsBoolean() public bool IsString() { - return tag == JSApi.JS_TAG_STRING; + // A rope is a string whose concatenation ng has not performed yet, and `a + b` + // produces one, so this is reachable from any script. ng's own JS_IsString + // tests both tags (quickjs.h:819); testing only JS_TAG_STRING silently + // classifies every concatenated string as a non-string. + return tag == JSApi.JS_TAG_STRING || tag == JSApi.JS_TAG_STRING_ROPE; } public bool IsSymbol() @@ -117,6 +121,7 @@ public override string ToString() { case JSApi.JS_TAG_SYMBOL: return string.Format("Symbol:{0:X}", (ulong)u.ptr); case JSApi.JS_TAG_STRING: return string.Format("String:{0:X}", (ulong)u.ptr); + case JSApi.JS_TAG_STRING_ROPE: return string.Format("StringRope:{0:X}", (ulong)u.ptr); default: return string.Format("Reference:{0:X}", (ulong)u.ptr); } } diff --git a/unity/quickjs/Runtime/Source/ScriptContext.cs b/unity/quickjs/Runtime/Source/ScriptContext.cs index db51ca3f..20fd1c70 100644 --- a/unity/quickjs/Runtime/Source/ScriptContext.cs +++ b/unity/quickjs/Runtime/Source/ScriptContext.cs @@ -87,7 +87,7 @@ public ScriptContext(ScriptRuntime runtime, int contextId, Experimental.IJSApiBr } else { - if (JSApi.JS_IsFunction(_ctx, create) == 1) + if (JSApi.JS_IsFunction(_ctx, create)) { _operatorCreate = create; @@ -356,7 +356,7 @@ public JSValue _new_commonjs_module_entry(string parent_module_id, string module if (LoadModuleCache(parent_module_id, out parent_mod_obj)) { var children_obj = JSApi.JS_GetProperty(_ctx, parent_mod_obj, GetAtom("children")); - if (JSApi.JS_IsArray(_ctx, children_obj) == 1) + if (JSApi.JS_IsArray(children_obj)) { var lengthVal = JSApi.JS_GetProperty(_ctx, children_obj, JSApi.JS_ATOM_length); if (lengthVal.IsNumber()) @@ -495,7 +495,7 @@ public static unsafe JSValue module_require(JSContext ctx, JSValue this_obj, int // callee is the function <'require'> of current module var callee = JSApi.JS_GetActiveFunction(ctx); - if (JSApi.JS_IsFunction(ctx, callee) != 1) + if (!JSApi.JS_IsFunction(ctx, callee)) { return ctx.ThrowInternalError("require != function"); } @@ -587,7 +587,7 @@ public unsafe JSValue LoadModuleFromSource(byte[] source, string resolved_id, st if (bytecodeFunc.IsFunctionByteCode()) { var func_val = JSApi.JS_EvalFunction(ctx, bytecodeFunc); // it's CallFree (bytecodeFunc) - if (JSApi.JS_IsFunction(ctx, func_val) != 1) + if (!JSApi.JS_IsFunction(ctx, func_val)) { JSApi.JS_FreeValue(ctx, func_val); JSApi.JS_FreeValue(ctx, RequireArgNum, require_argv); @@ -637,7 +637,7 @@ public unsafe JSValue LoadModuleFromSource(byte[] source, string resolved_id, st return func_val; } - if (JSApi.JS_IsFunction(ctx, func_val) == 1) + if (JSApi.JS_IsFunction(ctx, func_val)) { var rval = JSApi.JS_Call(ctx, func_val, JSApi.JS_UNDEFINED, RequireArgNum, require_argv); if (rval.IsException()) diff --git a/unity/quickjs/Runtime/Source/ScriptContext_funcs.cs b/unity/quickjs/Runtime/Source/ScriptContext_funcs.cs index 4a12d77f..88057b45 100644 --- a/unity/quickjs/Runtime/Source/ScriptContext_funcs.cs +++ b/unity/quickjs/Runtime/Source/ScriptContext_funcs.cs @@ -246,7 +246,7 @@ public static unsafe JSValue to_js_function(JSContext ctx, JSValue this_obj, int { var make_dynamic = argc >= 2 && JSApi.JS_ToBool(ctx, argv[1]) == 1; - if (JSApi.JS_IsFunction(ctx, argv[0]) == 1) + if (JSApi.JS_IsFunction(ctx, argv[0])) { return JSApi.JS_DupValue(ctx, argv[0]); } @@ -356,7 +356,7 @@ public static JSValue to_js_array(JSContext ctx, JSValue this_obj, int argc, JSV { return ctx.ThrowInternalError("array expected"); } - if (JSApi.JS_IsArray(ctx, argv[0]) == 1) + if (JSApi.JS_IsArray(argv[0])) { return JSApi.JS_DupValue(ctx, argv[0]); } @@ -545,7 +545,7 @@ public static JSValue hotfix_replace_single(JSContext ctx, JSValue this_obj, int { return ctx.ThrowInternalError("type_name, func_name, func expected"); } - if (!argv[0].IsString() || !argv[1].IsString() || JSApi.JS_IsFunction(ctx, argv[2]) != 1) + if (!argv[0].IsString() || !argv[1].IsString() || !JSApi.JS_IsFunction(ctx, argv[2])) { return ctx.ThrowInternalError("type_name, func_name expected"); } @@ -595,7 +595,7 @@ public static JSValue hotfix_before_single(JSContext ctx, JSValue this_obj, int { return ctx.ThrowInternalError("type_name, func_name, func expected"); } - if (!argv[0].IsString() || !argv[1].IsString() || JSApi.JS_IsFunction(ctx, argv[2]) != 1) + if (!argv[0].IsString() || !argv[1].IsString() || !JSApi.JS_IsFunction(ctx, argv[2])) { return ctx.ThrowInternalError("type_name, func_name expected"); } diff --git a/unity/quickjs/Runtime/Source/ScriptPromise.cs b/unity/quickjs/Runtime/Source/ScriptPromise.cs index b704a722..cf82b74b 100644 --- a/unity/quickjs/Runtime/Source/ScriptPromise.cs +++ b/unity/quickjs/Runtime/Source/ScriptPromise.cs @@ -75,7 +75,7 @@ protected unsafe void Invoke(JSValue callback, object value) throw new NullReferenceException("already released"); } - if (JSApi.JS_IsFunction(ctx, callback) != 1) + if (!JSApi.JS_IsFunction(ctx, callback)) { Dispose(); return; diff --git a/unity/quickjs/Runtime/Source/ScriptRuntime+Module.cs b/unity/quickjs/Runtime/Source/ScriptRuntime+Module.cs index c5c91ef0..d639a3fe 100644 --- a/unity/quickjs/Runtime/Source/ScriptRuntime+Module.cs +++ b/unity/quickjs/Runtime/Source/ScriptRuntime+Module.cs @@ -29,7 +29,7 @@ public static uint TryReadByteCodeTagValue(byte[] bytes) [MonoPInvokeCallback(typeof(JSCFunction))] public static unsafe JSValue module_define(JSContext ctx, JSValue this_obj, int argc, JSValue[] argv) { - if (argc != 3 || !argv[0].IsString() || JSApi.JS_IsArray(ctx, argv[1]) != 1 || JSApi.JS_IsFunction(ctx, argv[2]) != 1) + if (argc != 3 || !argv[0].IsString() || !JSApi.JS_IsArray(argv[1]) || !JSApi.JS_IsFunction(ctx, argv[2])) { return ctx.ThrowInternalError("unsupported 'define' invocation"); } @@ -88,7 +88,7 @@ public static unsafe JSValue EvalSource(JSContext ctx, byte[] source, string fil if (bytecodeFunc.IsFunctionByteCode()) { var func_val = JSApi.JS_EvalFunction(ctx, bytecodeFunc); // it's CallFree (bytecodeFunc) - if (JSApi.JS_IsFunction(ctx, func_val) != 1) + if (!JSApi.JS_IsFunction(ctx, func_val)) { JSApi.JS_FreeValue(ctx, func_val); return ctx.ThrowInternalError("failed to eval bytecode module"); diff --git a/unity/quickjs/Runtime/Source/ScriptRuntime.cs b/unity/quickjs/Runtime/Source/ScriptRuntime.cs index 6280c524..5147fd2d 100644 --- a/unity/quickjs/Runtime/Source/ScriptRuntime.cs +++ b/unity/quickjs/Runtime/Source/ScriptRuntime.cs @@ -837,9 +837,7 @@ public void ExecutePendingJob() if (err >= 0) { - var hasPending = JSApi.JS_IsJobPending(_rt, out ctx); - - if (hasPending == 0) + if (!JSApi.JS_IsJobPending(_rt)) { break; } diff --git a/unity/quickjs/Runtime/Source/Utils/FSWatcher.cs b/unity/quickjs/Runtime/Source/Utils/FSWatcher.cs index 95afd82a..81e263bd 100644 --- a/unity/quickjs/Runtime/Source/Utils/FSWatcher.cs +++ b/unity/quickjs/Runtime/Source/Utils/FSWatcher.cs @@ -86,7 +86,7 @@ private void _JSActionCallback(ScriptRuntime runtime, object cbArgs, JSValue cbV private unsafe void Call(JSValue func, string name, string fullPath) { - if (!_jsContext.IsValid() || JSApi.JS_IsFunction(_jsContext, func) != 1) + if (!_jsContext.IsValid() || !JSApi.JS_IsFunction(_jsContext, func)) { return; } From cd75eaae479bd4b21b87ebcfec67adc031543588 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 20:31:55 +0300 Subject: [PATCH 18/58] chore(quickjs): drop the two atom stubs the C# no longer names Phase 2 hand-wrote JSB_ATOM_Operators and JSB_ATOM_Symbol_operatorSet to return JS_ATOM_NULL, because ng removed operator overloading and the atom table has no entry to generate an accessor from. It also predicted they would go once the C# stopped asking, and that check-exports.py would say so. It did, reporting both as stale. Every atom accessor the shim exports now comes from the one macro over quickjs-atom.h. shim-test keeps asserting ng defines none of the four atoms unity-jsb named, so the reasoning written against their absence fails loudly if a future ng brings one back -- the two CHECKs it loses here covered the stubs specifically, which no longer exist. shim-test still passes in Release and Debug; Debug is the one that runs ng's assert on a non-empty GC object list. --- native/quickjs/src/shim_test.c | 9 +++------ native/quickjs/src/unity_qjs.c | 6 ------ 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/native/quickjs/src/shim_test.c b/native/quickjs/src/shim_test.c index 2b9fceb6..bc448515 100644 --- a/native/quickjs/src/shim_test.c +++ b/native/quickjs/src/shim_test.c @@ -34,9 +34,9 @@ static const struct { const char *name; const char *str; atom_accessor fn; } kno #define ATOM_COUNT ((int)(sizeof(known_atoms) / sizeof(known_atoms[0]))) -/* The four the C# layer names and ng does not define. Absent here means the stubs in - unity_qjs.c are still needed; present would mean ng grew them back and the stubs - now shadow a real atom. */ +/* The four atoms unity-jsb named and ng does not define. Phase 3 rewrote the C# so it + no longer asks for any of them, so this now guards the reasoning rather than a stub: + if ng grows one back, the workaround written against its absence needs revisiting. */ static const char *const expected_absent[] = { "fileName", "lineNumber", "Operators", "Symbol_operatorSet" }; static void check_atoms(JSContext *ctx) @@ -62,9 +62,6 @@ static void check_atoms(JSContext *ctx) "ng now defines the atom %s, which unity_qjs.c stubs out", expected_absent[i]); } } - - CHECK(JSB_ATOM_Operators() == JS_ATOM_NULL, "JSB_ATOM_Operators must be JS_ATOM_NULL so JSAtom.IsValid is false"); - CHECK(JSB_ATOM_Symbol_operatorSet() == JS_ATOM_NULL, "JSB_ATOM_Symbol_operatorSet must be JS_ATOM_NULL"); } static int finalized = 0; diff --git a/native/quickjs/src/unity_qjs.c b/native/quickjs/src/unity_qjs.c index 050e3409..3f59877b 100644 --- a/native/quickjs/src/unity_qjs.c +++ b/native/quickjs/src/unity_qjs.c @@ -40,12 +40,6 @@ enum #include "quickjs-atom.h" #undef DEF -/* quickjs-ng removed operator overloading, so these two atoms do not exist. - Returning 0 is not a placeholder: JSAtom.IsValid is `_value != 0`, and every - C# call site is already guarded by it or by IsOperatorOverloadingSupported. */ -JS_EXPORT JSAtom JSB_ATOM_Operators(void) { return JS_ATOM_NULL; } -JS_EXPORT JSAtom JSB_ATOM_Symbol_operatorSet(void) { return JS_ATOM_NULL; } - static JSClassID js_bridge_class_id = 0; #define JS_BO_TYPE 1 From 16a72448f4c6107bb69f894745d39676640eb987 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 20:38:52 +0300 Subject: [PATCH 19/58] fix(quickjs): stop ignoring the shipped plugin directories unity/quickjs/.gitignore is a Visual Studio template inherited from the merged quickjs repo, and two of its build-output rules, [Xx]64/ and [Xx]86/, also match Plugins/QuickJS/x64 and x86 -- the directories the native binaries actually ship from. The four files already in x64 and the two in x86 are tracked, so they survive the rule and everything looked fine. What does not work is adding a new one: it is silently untracked, and `git add` on it fails outright, which takes lint-staged and the pre-commit hook down with it. That is how this surfaced -- installing the quickjs-ng build could not be committed at all. Negates the two paths rather than deleting the rules, so a genuine Debug/Release/x64 build directory elsewhere in the package is still ignored. Verified both ways: a new file under Plugins/QuickJS/x64 and x86 now shows up, and unity/quickjs/x64/junk.obj is still matched by line 18. Gate 0 has eleven more binaries to install, two of them in these two directories. --- unity/quickjs/.gitignore | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/unity/quickjs/.gitignore b/unity/quickjs/.gitignore index 02b08909..37ab32a8 100644 --- a/unity/quickjs/.gitignore +++ b/unity/quickjs/.gitignore @@ -17,6 +17,14 @@ [Rr]eleases/ [Xx]64/ [Xx]86/ + +# ...but Plugins/QuickJS/x64 and x86 are shipped plugin directories, not build output. +# The binaries already there are tracked and so survive the rule, which is why this went +# unnoticed; a newly built artifact is silently dropped, and `git add` on one fails +# outright, which takes lint-staged and the pre-commit hook with it. Gate 0 still has +# eleven binaries to install, two of them here. +!Plugins/QuickJS/[Xx]64/ +!Plugins/QuickJS/[Xx]86/ [Bb]uild/ bld/ [Bb]in/ From 319974b7f8957cc954f389f89d3f255075072341 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 20:39:05 +0300 Subject: [PATCH 20/58] build(quickjs): install the quickjs-ng build for Windows x64 Replaces the unity-jsb prebuilt with what native/quickjs produces: ng plus the ported shim. First time the engine this migration is about has actually been loaded by Unity. A passing suite would not on its own prove ng is what ran, so the evidence is structural: ng exports JS_GetProperty and JS_SetProperty, which are static inline in Bellard's and absent from the old DLL's exports, and the C# commit binds both directly. The old binary would have thrown EntryPointNotFoundException on the first property read. The suite is unchanged from the pre-migration baseline -- EditMode 340/348, PlayMode 689/701, 0 failed in both. This pairs with the C# commit and only works with it: either half alone is a broken tree, because ng and Bellard do not export the same names. That is inherent to the change rather than sloppy sequencing. The other eleven artifacts are still unity-jsb prebuilts of Bellard-era QuickJS, so every platform other than Windows x64 is now inconsistent with this C#. Gate 0 already tracks them. Nothing regressed, but nothing outside Windows x64 works on this branch either. Copied by hand, as gate 0 does for now. --- unity/quickjs/Plugins/QuickJS/x64/quickjs.dll | Bin 975872 -> 1045504 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/unity/quickjs/Plugins/QuickJS/x64/quickjs.dll b/unity/quickjs/Plugins/QuickJS/x64/quickjs.dll index f028fe80ad2a0177de0b6aeda786500c7d439216..9700205f261bbfb877f0ce99d511ff43dd3edb95 100644 GIT binary patch literal 1045504 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�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

-95<*svV8b^V7oP2Mm@f_4X0hTK&UOf_9oqO@ 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

j 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

spz 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

vw%;TTUbW0zK_8D@1D?_#4Og%81wdyDI3 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

{A{(%op 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 IfAxR=3z}pmfdBvi From e0cc29798c03463f9113c9614700f9a8dd7a6017 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 20:40:51 +0300 Subject: [PATCH 21/58] docs(quickjs): record what phase 3 measured and changed Phase 3 marked done, with its exit criterion split honestly: the Unity suite passes against the ng DLL on Windows, and the IL2CPP player build the criterion also asks for cannot run here at all -- no installed editor has the IL2CPP player variation, so it needs a Hub module and a batch-mode build entry point scripts/unity does not have. Recorded as open rather than waved through, along with what it would have covered that the Editor run does not. The measured surface is re-counted at 99 live entry points, down from 104 by subtraction: seven declarations deleted, two added. Both checks now exit 0. "What fails silently" is rewritten around the seven rows phase 3 fixed, three of which are corrections to what this document claimed. The JS_IsJobPending row said width-only; the parameter it actually carried was in no QuickJS header ever. That is the second time an audit of this surface has been wrong in a way running the check would have caught, so the table now says where it comes from. New sections cover what phase 3 found -- the string-rope IsString bug, the is_handled callback width, the JS_EVAL_FLAG_STRIP bit that now means ASYNC_LOAD -- and what check-signatures.py does and cannot see. Also notes the gitignore trap in gate 0, since two of the eleven remaining artifacts land in the directories it silently swallowed, and records that operator overloading is now permanently unsupported, with the cost bounded to codegen emitting operator overloads. --- native/quickjs/README.md | 53 +++++--- unity/quickjs/MIGRATION.md | 250 +++++++++++++++++++++++++++++-------- 2 files changed, 235 insertions(+), 68 deletions(-) diff --git a/native/quickjs/README.md b/native/quickjs/README.md index 6147b1a8..d891215f 100644 --- a/native/quickjs/README.md +++ b/native/quickjs/README.md @@ -19,10 +19,11 @@ cmake --build build --config Release --target quickjs **Always name the target.** quickjs-ng registers `run-test262`, `api-test`, `lre-test` and friends unconditionally, so a default build compiles all of them. -## The two checks +## The three checks -Neither is optional, and they check different things: one runs the shim, the other compares it -against the C# that has to load it. +None is optional, and they check different things: one runs the shim, one asks whether the library +exports what the C# names, and one asks whether those names are *declared right* — which is the +failure mode that does not throw. ```bash cmake --build build --config Release --target shim-test && ./build/Release/shim-test.exe @@ -49,14 +50,39 @@ vacuously. Flipping the expected id to `i + 2` must give 241 failures and exit 1 python native/quickjs/check-exports.py ``` -[check-exports.py](check-exports.py) reads the live P/Invoke set out of Unity's generated -`tests/*.csproj` — the real define set and the real source list, so a declaration inside a dead -`#if` does not count — resolves `EntryPoint` aliases, and diffs it against `dumpbin -exports` in +[check-exports.py](check-exports.py) diffs the live P/Invoke set against `dumpbin -exports` in **both** directions: names C# calls that we do not export, and shim functions we export that nothing -calls. Either one exits non-zero, so it can gate CI. +calls. The second direction is not cosmetic — 26 dead functions sat in the vendored shim precisely +because nothing looked. Either direction exits non-zero, so it can gate CI. -Currently 99 of 104 satisfied, 0 stale. The 5 outstanding are C# declarations, listed under phase 3 -in [MIGRATION.md](../../unity/quickjs/MIGRATION.md). +Currently 99 of 99 satisfied, 0 stale, exit 0. The live set shrank from 104 because phase 3 removed +declarations rather than adding exports: the four atoms ng does not have, the two `*Internal` +property functions, and `JS_AddIntrinsicOperators`. + +```bash +python native/quickjs/check-signatures.py +``` + +[check-signatures.py](check-signatures.py) compares each of those declarations against its prototype +in `quickjs.h` — return width, arity, a discarded return, and `bool` parameters marshalled wider than +one byte. A wrong signature links and runs, it just answers wrongly, so this covers exactly what a +green `check-exports.py` cannot. It found three mismatches the migration plan had missed, including a +parameter on `JS_IsJobPending` that no QuickJS header has ever declared. + +It reads `DllImport` declarations only, so the eleven callback delegates ng invokes *into* managed +code stay hand-checked, as do the enums and struct layouts that cross by value. That is not +hypothetical: `JSHostPromiseRejectionTracker`'s `is_handled` narrowed to a C `bool` in ng, and +`JS_EVAL_FLAG_STRIP`'s bit became `JS_EVAL_FLAG_ASYNC_LOAD`. Both had to be found by reading the +header. + +Sabotage this one too: patch a copy of `quickjs.h`, pass it as the argument, and confirm the check +fires. All four have been shown to. + +Both scripts get "the live P/Invoke set" from [pinvoke.py](pinvoke.py), which parses Unity's +generated `tests/*.csproj` for the real define set and source list — so a declaration inside a dead +`#if` is not counted as a requirement — and resolves `EntryPoint` aliases. Three declarations named +`JS_*` bind `JSB_*` symbols, so an audit by member name undercounts. Open `tests/` in the Editor once +if the `.csproj` files are missing. ## What it links @@ -114,11 +140,10 @@ they did not match a `JSAtom (*)(void)` typedef in the test. a commit behind the binary. Reconstructed from its only caller, `JSNative.ThrowInternalError`, which passes an explicit length because the message is not null-terminated: despite the name it raises an InternalError. Worth re-checking against upstream if it ever turns up. -- **`JSB_ATOM_Operators` / `JSB_ATOM_Symbol_operatorSet`** — ng removed operator overloading, so the - atom table has no entry to generate an accessor from. They return `JS_ATOM_NULL`, which is - load-bearing rather than a stub: `JSAtom.IsValid` is `_value != 0` and every call site is already - guarded by it. Both go when phase 3 makes the no-bignum path permanent, and `check-exports.py` - will flag them as stale the moment it does. +Two hand-written atom stubs, `JSB_ATOM_Operators` and `JSB_ATOM_Symbol_operatorSet`, lived here +between phases 2 and 3. Phase 3 made `IsOperatorOverloadingSupported` permanently false, which took +both off the P/Invoke surface; `check-exports.py` reported them stale exactly as predicted, and they +are gone. Every atom accessor the shim exports now comes from the one macro over `quickjs-atom.h`. `JS_NewString` is deliberately *not* here. ng made it `static inline`, so the plan was to shim it — but the C# declaration turned out to have no callers at all and was deleted instead. diff --git a/unity/quickjs/MIGRATION.md b/unity/quickjs/MIGRATION.md index 1ebcad46..b21d9236 100644 --- a/unity/quickjs/MIGRATION.md +++ b/unity/quickjs/MIGRATION.md @@ -24,17 +24,24 @@ repo at `S:/Work/Unity/quickjs-ng-csharp` (23 assertions passing against a quick ## Measured surface -**104 live entry points** bound to `JSBDLL`, re-measured after phase 1 and phase 2. Liveness is -evaluated with Unity's real define set, so a declaration inside a dead `#if` does not count: +**99 live entry points** bound to `JSBDLL`, re-measured after phase 3. Liveness is evaluated with +Unity's real define set, so a declaration inside a dead `#if` does not count: | Group | Live | Provided by the ng build | |---|---:|---| -| `JS_*` — real QuickJS API | 59 | 56 exported by ng unchanged; 3 need C# work, see phase 3 | +| `JS_*` — real QuickJS API | 60 | all exported by ng | | `JSB_*` / `jsb_*` — unity-jsb C shim | 27 | **all 27** — none exist in ng, so each one is ported in [native/quickjs/src](../../native/quickjs/src) | -| `JSB_ATOM_*` | 16 | 12 generated from ng's `quickjs-atom.h`, 2 stubbed where operator overloading was, **2 no shim can fake** — see below | +| `JSB_ATOM_*` | 12 | all generated from ng's `quickjs-atom.h` | | `js_*` — allocator | 2 | `js_malloc` and `js_free`, both exported by ng | -`Runtime/Source/Native` declares 105 P/Invokes in total now, against 137 before phase 1. +Nothing is unaccounted for any more: `check-exports.py` reports 99 of 99 satisfied with no stale +export, and `check-signatures.py` reports every one of those declarations matching its prototype in +`quickjs.h`. Both exit 0. + +104 became 99 by subtraction, not by adding exports. Phase 3 deleted seven declarations — the four +atoms ng does not have, `JS_GetPropertyInternal`, `JS_SetPropertyInternal` and +`JS_AddIntrinsicOperators` — and added two, `JS_GetProperty` and `JS_SetProperty`, which ng exports +itself. The shim is **27 functions, not the 25 this document used to claim.** The old count went by C# member name and so missed three entry points reached through `EntryPoint` aliases on declarations @@ -42,30 +49,40 @@ named `JS_*`: `JSB_DupValue`, `JSB_FreeValue` and `JSB_NewFloat64`. An earlier v document warned that any audit of this surface has to honour `EntryPoint`, and then got it wrong anyway — so re-run `check-exports.py`, which resolves `EntryPoint`, rather than reading the surface. -Of the `JS_*` group, three are live and unexported, all of them phase 3's problem: -`JS_GetPropertyInternal` and `JS_SetPropertyInternal` are called from wrapper methods in `JSApi.cs` -itself, and `JS_AddIntrinsicOperators` from `ScriptContext.cs:56`. The names that used to be listed -here and are no longer a cost: the five `JS_*Debugger*` and `JS_SetLogFunc` went with the debug -server; `JS_SetBaseUrl` is a real P/Invoke only under `UNITY_WEBGL && !UNITY_EDITOR` and lives in +The names that used to be listed here and are no longer a cost: the five `JS_*Debugger*` and +`JS_SetLogFunc` went with the debug server; `JS_SetBaseUrl` is a real P/Invoke only under +`UNITY_WEBGL && !UNITY_EDITOR` and lives in the jslib; and `JS_NewString`, the one name this plan expected to need an inline shim, turned out to have no callers anywhere and was deleted instead. Nothing in the QuickJS path touches BigFloat/BigDecimal. -## The four atoms ng does not have +## The four atoms ng does not have — resolved in phase 3 `fileName`, `lineNumber`, `Operators`, `Symbol_operatorSet` are absent from ng's `quickjs-atom.h`. They split cleanly into a free case and a real one: - **`Operators` / `Symbol_operatorSet`** — dropped with operator overloading. Free: every - call site already guards on `JS_ATOM_Operators.IsValid` or + call site already guarded on `JS_ATOM_Operators.IsValid` or `JSApi.IsOperatorOverloadingSupported` (`ScriptContext.cs:71`, `OperatorDecl.cs:110`, - `TypeBindingInfo.cs:899`). The shim returns `JS_ATOM_NULL` and the guards do the rest — done, and - `shim-test` asserts ng has not grown the atoms back underneath the stubs. + `TypeBindingInfo.cs:899`). Phase 2 stubbed the accessors; phase 3 made + `IsOperatorOverloadingSupported` permanently `false`, which took both atoms and + `JS_AddIntrinsicOperators` off the P/Invoke surface and let the stubs go with them. That is a + capability drop, and a bounded one: the only consumers are two checks in `TypeBindingInfo`, so + what is lost is generated bindings emitting operator overloads for C# types — a codegen feature, + on a path ReactUnity does not use and whose deletion is already an open question. Scripts that + gate on `jsb.isOperatorOverloadingSupported` still get a correct answer, now `false`. - **`fileName` / `lineNumber`** — not free, and silent. Bellard's `build_backtrace` defines - both **on the Error object**; ng only keeps the `Function.prototype` getters. `JSContext.cs:55` - reads them off a caught exception to build the error location, so under ng it gets `undefined` - twice and every script error loses its file and line without anything failing. Phase 3 has to - re-derive the location from ng's `stack`. + both **on the Error object**; ng only keeps the `Function.prototype` getters + (`quickjs.c:43389`). `JSContext.FormatException` read them off a caught exception to build the + error location, so under ng it would have got `undefined` twice and every script error would have + lost its file and line without anything failing. Phase 3 deleted both reads: ng's `stack` already + opens with ` at ::` in exactly that shape (`quickjs.c:8256`), so appending the + stack is now the whole job. Confirmed on a real parse error out of the suite, which now reports + `SyntaxError: ... / at ReactUnity/scripts/anonymous:1:16` followed by the call chain — the same + location the deleted code produced, plus a column and the frames above it. + +`shim-test` still asserts ng defines none of the four, so the reasoning written against their +absence fails loudly if a future ng brings one back. Everything else the atom machinery needs is unchanged: ng's `quickjs-atom.h` uses the same `DEF(name, str)` shape, so unity-jsb's enum-and-accessor trick ports verbatim (241 atoms in ng @@ -73,28 +90,61 @@ against 224 in Bellard). ## What fails silently -Missing symbols throw on first call. **Changed** symbols keep working and return nonsense. Seven of -those, in two patterns — do not port a declaration by eye: +Missing symbols throw on first call. **Changed** symbols keep working and return nonsense. This is +the list phase 3 fixed. Three of its seven rows are corrections to what this document said, all of +them from an earlier by-eye reading — `check-signatures.py` now derives the whole table from the +header instead: -| Symbol | Current C# | quickjs-ng | Failure | +| Symbol | C# before phase 3 | quickjs-ng | Failure | |---|---|---|---| | `JS_IsArray` | `int (ctx, val)` | `bool (val)` | arity + width | | `JS_IsError` | `JS_BOOL (ctx, val)` | `bool (val)` | arity + width | | `JS_IsFunction` | `JS_BOOL (ctx, val)` | `bool (ctx, val)` | width | | `JS_IsConstructor` | `JS_BOOL (ctx, val)` | `bool (ctx, val)` | width | -| `JS_IsJobPending` | `int (rt)` | `bool (rt)` | width | +| `JS_IsJobPending` | `int (rt, out pctx)` | `bool (rt)` | arity + width | +| `JS_SetConstructor` | `void (ctx, func, proto)` | `int (...)` | discarded error | +| `JS_ToCStringLen2` | `bool cesu8` as `UnmanagedType.Bool` | `bool` (1 byte) | 4-byte `BOOL` | +| `JSHostPromiseRejectionTracker` | `JS_BOOL is_handled` | `bool is_handled` | width, **into** managed | + +The last row is the same width bug in the other direction, and the only one of these that was +correct before ng: Bellard's `is_handled` really was `JS_BOOL`. It is a **reverse** P/Invoke — ng +calls into managed code — so the managed signature decides how many bytes are read off the register, +and reading four where ng wrote one takes three undefined bytes with it. The handler is +`if (is_handled != 1)` guarding the "Unhandled promise rejection" log, so the visible symptom would +have been handled rejections reported as unhandled. `check-signatures.py` reads `DllImport` +declarations only and never sees a delegate, so this one was found by hand and the delegates are +still a hand-checked surface. + +`JS_IsJobPending` was listed here as width-only. Its C# declaration actually carried a second +parameter, `out JSContext pctx`, that **no QuickJS header has ever had** — Bellard's included; the +callee ignored the register and the caller read back an uninitialised local. `JS_SetConstructor` and +`JS_ToCStringLen2` were not on the list at all. All three came from running the check, not from +re-reading the header, which is the argument for having built it. `JS_BOOL` is `Int32` here; ng returns C `bool`. On x64 a `bool` return sets only `AL` and the upper three bytes of `EAX` are undefined — usually truthy, occasionally not. Every one needs -`[return: MarshalAs(UnmanagedType.U1)] bool`. ng's header has 26 `bool`-returning functions, so this -recurs as the surface grows. +`[return: MarshalAs(UnmanagedType.U1)] bool`. ng's header has 26 `bool`-returning functions, of which +this surface declares five, so this recurs as the surface grows. + +`JS_IsArray` losing its tri-state is a behaviour change, not just an ABI one. Bellard's returned -1 +for the proxy case; ng's `bool` cannot, so the 18 `if (isArray == -1)` early-returns in +`Values_get.cs` were unreachable and are gone. `JS_IsArray` and `JS_IsError` also **lost their `JSContext*`**, which shifts the `JSValue` into the wrong register slot. `JS_IsPromise` is a third instance, hit while writing the reference binding: it compiled clean and returned the wrong answer. Also silent: **`JS_TAG_FLOAT64` is 8 in ng and 7 in Bellard** — the enum gained `STRING_ROPE` and -`SHORT_BIG_INT`. Re-derive every tag from the new header rather than copying it forward. +`SHORT_BIG_INT`. Re-derive every tag from the new header rather than copying it forward. Phase 3 did, +and `SHORT_BIG_INT` turns out to occupy 7, the slot `FLOAT64` used to hold, so a stale copy of that +block reads every double as a bigint. `BIG_DECIMAL` and `BIG_FLOAT` are gone and `BIG_INT` moved from +-10 to -9; the `JS_WRITE_OBJ_BSWAP` and `JS_READ_OBJ_ROM_DATA` flags are now 0, both obsolete. + +**`JS_TAG_STRING_ROPE` was the real find in that enum.** ng represents `a + b` as an unflattened +rope and hands it out as an ordinary `JSValue` (`quickjs.c:5532`), so ng's own `JS_IsString` tests +both tags (`quickjs.h:819`). `JSValue.IsString()` tested only `JS_TAG_STRING`, which would have +silently classified every concatenated string reaching a C# binding as a non-string — no error, just +a wrong answer, on an input any script can produce. ## The second implementation @@ -103,8 +153,13 @@ P/Invoke surface — on the browser's own engine, compiled from 1,824 lines of T syntax because Emscripten requires it. There is no QuickJS on WebGL at all, so every signature change and every tag value has to land here independently. Budget it as a peer of the C# work. -Phase 2 deliberately did not touch it, so it now carries entries nothing names — `JS_NewString` -among them — to prune when phase 4 brings it back into agreement. It is also why `unity_qjs.c` no +Phases 2 and 3 deliberately did not touch it, so it now carries entries nothing names — +`JS_NewString`, `JS_GetPropertyInternal`, `JS_SetPropertyInternal` and `JS_AddIntrinsicOperators` +among them — to prune when phase 4 brings it back into agreement. Phase 3 also widened what phase 4 +owes it: `JS_IsArray`, `JS_IsError` and `JS_IsJobPending` changed arity, `JS_IsArray` lost its -1, +the tag constants moved, and `IsString` has to accept a rope. The jslib is hand-written JS against +the browser engine, so none of that follows automatically and none of it is caught by +`check-signatures.py`, which only reads the native declarations. It is also why `unity_qjs.c` no longer has `UNITY_WEBGL` guards: on WebGL `JSApi.JSBDLL` is `__Internal` and the native library is never loaded at all, so those guards protected a configuration that cannot occur (and were incoherent anyway — they skipped `quickjs.h` and then used `JSAtom`). @@ -126,8 +181,17 @@ The port itself looks cheap: of the 28 distinct `JS_*` names the two shim files public `quickjs.h` and the 28th is a macro they define themselves. `unity_qjs.c` is a normal translation unit over the public header plus `quickjs-atom.h`, not a patch into `quickjs.c`, so there is no merge to maintain against ng. -**Windows x64 is done** — [native/quickjs](../../native/quickjs) builds it, and the exit check -below is mechanised. Eleven artifacts and the CI matrix remain. +**Windows x64 is done and installed** — [native/quickjs](../../native/quickjs) builds it, phase 3 +committed it to `Plugins/QuickJS/x64`, and the exit checks are mechanised. Eleven artifacts and the +CI matrix remain. + +One thing to know before installing any of those eleven: `unity/quickjs/.gitignore` is a Visual +Studio template inherited from the merged repo, and its `[Xx]64/` and `[Xx]86/` build-output rules +**also matched `Plugins/QuickJS/x64` and `x86`**, the directories the binaries ship from. The files +already there are tracked and so survived, which is why nobody noticed; a newly built one was +silently untracked, and `git add` on it failed outright and took the pre-commit hook with it. Phase 3 +hit this trying to commit the ng DLL and negated the two paths. Two of the eleven land in those +directories. *Exit: twelve artifacts built reproducibly in CI from a tagged ng commit, Windows x64 loading in the Editor.* **Phase 1 — subtract, against the old DLL.** Done on this branch except for one item that turned @@ -140,27 +204,30 @@ the reflect-binding path. **Phase 2 — port the C shim.** Done. 27 `JSB_*`/`jsb_*` functions and 16 atoms against ng's headers, in [native/quickjs/src](../../native/quickjs/src) — see "What phase 2 changed" below for the two defects that only ng has, and for the test that covers the atom numbering. -*Exit: `libquickjs` builds against ng and exports everything the C# layer names.* Met on the C -side: none of the 27 are missing and nothing stale is exported. The 5 names still unexported are -C# declarations, which is the phase below. - -**Phase 3 — rewrite the C# declarations from the header.** Not by eye, not by editing in place. -Generate or hand-check every declaration against `quickjs.h`, fixing `bool` widths and dropped -contexts. Re-derive the tag constants. - -Five names are known to need C# work, because the Windows DLL builds and does not export them. -This is the whole list, not a sample — everything else the C# layer P/Invokes is satisfied: - -| Name | What it needs | -|---|---| -| `JS_GetPropertyInternal` / `JS_SetPropertyInternal` | delete both declarations and bind `JSApi.JS_GetProperty`/`JS_SetProperty` straight to ng's, which are **exact** identities of the current wrapper bodies: ng's `JS_GetProperty` is `JS_GetPropertyInternal(ctx, obj, prop, obj, false)` and its `JS_SetProperty` is `JS_SetPropertyInternal(…, JS_PROP_THROW)` (`quickjs.c:9266`, `:10807`) | -| `JS_AddIntrinsicOperators` | make the no-bignum branch of `JSApi.cs:60` permanent rather than stubbing one name. That also takes `JSB_ATOM_Operators` and `JSB_ATOM_Symbol_operatorSet` off the P/Invoke surface, at which point the two stubs in `unity_qjs.c` must go too — `check-exports.py` will say so | -| `JSB_ATOM_fileName` / `JSB_ATOM_lineNumber` | delete the declarations and rewrite `JSContext.cs:55` against ng's `stack` | - -Keep the check honest by re-running it rather than reasoning about it — -`python native/quickjs/check-exports.py` reads the live P/Invoke set straight out of Unity's -generated `.csproj` files and diffs it against `dumpbin -exports`, exiting non-zero on any gap. +*Exit: `libquickjs` builds against ng and exports everything the C# layer names.* Met. + +**Phase 3 — rewrite the C# declarations from the header.** Done, and done from the header rather +than by eye: [check-signatures.py](../../native/quickjs/check-signatures.py) parses every prototype +in `quickjs.h`, parses every live P/Invoke, and diffs them. All five known names are resolved; the +check found three further mismatches this document had wrong or missing, and a hand audit of what it +cannot see — delegates, enums, struct layouts — found two more. See "What fails silently" above and +"What phase 3 changed" below. + *Exit: Unity suite passes on Windows against the ng DLL **and** a desktop IL2CPP player build runs.* +**First half met, second half blocked on tooling.** The ng DLL is installed at +`Plugins/QuickJS/x64/quickjs.dll` and the suite passes on it unchanged from the pre-migration +baseline: EditMode 340/348, PlayMode 689/701, 0 failed. That the *ng* build is what ran is not +inferred from the pass — ng exports `JS_GetProperty` and `JS_SetProperty`, which are `static inline` +in Bellard's and absent from the old DLL's exports, and the C# now binds both directly, so the old +binary would have thrown `EntryPointNotFoundException` on the first property read. + +The IL2CPP half cannot run here: none of the six installed editors has the IL2CPP player variation +(`PlaybackEngines/windowsstandalonesupport/Variations` has only `*_mono`), so it needs the "Windows +Build Support (IL2CPP)" module from the Hub, plus a batch-mode build entry point, which +`scripts/unity` does not have. What it would cover that the Editor run does not is specifically +AOT: managed stripping against the `[Preserve]` set, and reverse-P/Invoke marshalling of the +delegates. Nothing in phase 3 added a JS-reachable entry point — it removed seven — so no new +stripping surface was introduced, but that is an argument, not a test. **Phase 4 — mirror in the jslib, then wire the async loader.** Bring `jsbplugin.ts` into agreement, then install `JS_SetModuleLoaderFuncAsync`, port `QuickJSModuleLoader` onto @@ -168,6 +235,69 @@ then install `JS_SetModuleLoaderFuncAsync`, port `QuickJSModuleLoader` onto retire `ModuleCompat.RewriteDynamicImports` for QuickJS. *Exit: kitchen-sink loads a module graph over HTTP with no blocking frame, on desktop and in WebGL.* +## What phase 3 changed + +Phase 3's instruction to itself was "not by eye". That mattered. The by-eye list in this document +was wrong about one of its entries and missing two others, and none of the four findings below would +have come out of re-reading that list at all. + +- **`JSValue.IsString()` was wrong for concatenated strings.** ng represents `a + b` as an + unflattened rope with its own tag and hands it out as an ordinary value, which is why ng's own + `JS_IsString` accepts both tags. Testing only `JS_TAG_STRING` classified every concatenated string + reaching a binding as a non-string — reachable from any script, with no error to notice. +- **`JS_IsJobPending` had a parameter no QuickJS ever declared.** `out JSContext pctx`, present in + the C# and in the jslib, absent from Bellard's header and ng's. This document listed the symbol as + needing a width fix only. +- **The promise-rejection callback read `is_handled` four bytes wide.** ng narrowed it to C `bool`, + and this is the one direction a P/Invoke audit does not cover: native calling managed. It decides + whether an unhandled promise rejection is logged. +- **`JS_EVAL_FLAG_STRIP` is `JS_EVAL_FLAG_ASYNC_LOAD` in ng.** Same bit, unrelated meaning: ng asks + for a module returned with its dependencies unresolved. Nothing passed the flag, so this was + latent — but it is bit 4 of the flag word phase 4's async loader has to set, so the old name + was a trap laid directly in the next phase's path. + +Two smaller ones the list did not have either: `JS_SetConstructor` returns `int` in ng and was +declared `void`, discarding a failure; and `JS_ToCStringLen2`'s `cesu8` was marshalled as +`UnmanagedType.Bool`, the four-byte Win32 `BOOL`, against a one-byte C `bool`. + +### Everything that crosses by value, not just the tags + +"Re-derive the tag constants" was taken to mean every constant and layout that crosses the boundary +by value. `JSPropFlags`, `JSGPNFlags`, `JSCFunctionEnum` and the `JSMemoryUsage` layout all agree +with ng field for field; `JSEvalFlags` did not, per above. The eleven callback delegates were +checked the same way, and `is_handled` was the only mismatch — every getter/setter/magic shape +matches ng's `JSCFunctionType` union exactly. `JSPropertyEnum.is_enumerable` is the same one-byte +`bool` narrowing again, this time inside a struct; `atom` sits at offset 4 either way so only the +flag was at risk, and nothing references the struct yet, but it was corrected rather than left for +whatever uses it first. + +### The mechanical half + +The five `bool`/arity fixes from the table above, the tag block re-derived from ng's enum, the +`JS_WRITE_OBJ`/`JS_READ_OBJ` flags corrected, `JS_GetProperty`/`JS_SetProperty` bound straight to +ng's exports, operator overloading made permanently unsupported, and the `fileName`/`lineNumber` +reads replaced by ng's `stack`. On the call-site side that is 25 dropped `JSContext` arguments, 42 +comparisons against `1`/`0` turned into boolean expressions, and 18 unreachable `isArray == -1` +blocks removed. `JSB_NO_BIGNUM` is now referenced nowhere and was left to lapse rather than removed +from anything — nothing declares or documents it. + +### check-signatures.py + +`check-exports.py` answers "does the symbol exist", which is the failure that throws. +[check-signatures.py](../../native/quickjs/check-signatures.py) answers "is the declaration right", +which is the failure that does not: it compares return width, arity, discarded returns and `bool` +parameter width against the prototypes in `quickjs.h`, and reports 0 mismatches across 60 +declarations. Like `shim-test`, it was sabotaged before being trusted — four doctored copies of +`quickjs.h`, one per check, each of which it caught. + +Its blind spot is deliberate and worth remembering: it reads `DllImport` declarations, so the +callback delegates are outside it, and that is exactly where `is_handled` was hiding. Delegates, +enums and struct layouts stay a hand-checked surface. + +Both scripts now share [pinvoke.py](../../native/quickjs/pinvoke.py) for reading the live P/Invoke +set, because duplicating the C# preprocessor evaluator to answer the same question twice is how the +two checks would drift apart. + ## What phase 2 changed Gate 0 got the shim compiling. Compiling is not porting, and two defects were visible only by @@ -260,12 +390,16 @@ path everything actually uses, so nothing downstream is blocked on making that c - **IL2CPP diverges from CoreCLR.** The reference binding runs on .NET 8; struct-by-value and reverse P/Invoke are exactly where Mono and IL2CPP differ. Made a phase 3 exit criterion, not a - phase 4 discovery. + phase 4 discovery — and **still open**: no installed editor has the IL2CPP player variation, so + phase 3 met the Editor half of that criterion and not this one. It needs the Hub's "Windows Build + Support (IL2CPP)" module and a batch-mode build entry point in `scripts/unity`. - **No sanitizer off desktop.** ASan and GC-stress cover x64 only. Test every new interop behaviour on desktop under ASan first; mobile is validation, never discovery. - **Two implementations drifting.** C# and the jslib must agree on 122 signatures and every tag, and - nothing enforces it — WebGL just misbehaves. Generate both from one description if possible; - failing that, a test asserting tags and arities match across backends. + nothing enforces it — WebGL just misbehaves. `check-signatures.py` closed this for the native side + only; the jslib is hand-written JS with no header to check against, and phases 2 and 3 have now + moved arities, tags and `IsString` out from under it. Generate both from one description if + possible; failing that, a test asserting tags and arities match across backends. - **The async loader is not upstream yet.** Pin a tagged commit of `gkurt/quickjs`, not a branch, and pursue the upstream PR in parallel. Coordinate with quickjs-ng#1522, whose author proposed a dynamic-import-only version of the same feature. @@ -293,12 +427,20 @@ the full suite green at the end (1,029 tests, 0 failures, both before and after) - **`BindingManager.Bind()`**, splitting the reflect-binding path out of `Generate(TypeBindingFlags)` so it no longer constructs a `CodeGenerator` and walks every type into buffers nobody reads. - **Gate 0 for Windows x64** — `native/quickjs` builds `quickjs.dll` from ng plus the ported - shim, satisfying 99 of the 105 live P/Invoke names, exporting the four async-loader entry - points, and not exporting `JS_NewBigDecimal`. + shim, exporting the four async-loader entry points, and not exporting `JS_NewBigDecimal`. It + satisfied 99 of the 105 live P/Invoke names at the time; phase 3 closed the gap from the C# side + and it is now 99 of 99. - **Phase 2, the C shim** — 27 functions and 16 atoms ported, 26 uncalled ones deleted, the two ng-only defects above fixed, `shim-test` added, and `check-exports.py` taught to diff both directions. +- **Phase 3, the C# declarations** — all 99 live P/Invokes checked against `quickjs.h` by + `check-signatures.py` and every mismatch fixed, including two silent bugs the plan did not have; + the ng DLL installed for Windows x64 and the suite passing on it at the pre-migration baseline. + The IL2CPP player build the exit criterion also asks for is blocked on a missing Hub module. +- **The plugin directories were gitignored** — `[Xx]64/`/`[Xx]86/` in `unity/quickjs/.gitignore` + matched `Plugins/QuickJS/x64` and `x86`. Found by being unable to commit the ng DLL; fixed by + negating those two paths, which the next eleven artifacts need. One thing the port turned up that no amount of reading would have: **unity-jsb's source tree is a commit behind its own shipped binary.** `JSB_ThrowError` is exported by From ee1fdd0dc68e801362d7c9d041f2550ca478535c Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 22:15:27 +0300 Subject: [PATCH 22/58] refactor(quickjs): remove operator overloading quickjs-ng has no operator overloading -- the engine feature is gone, not disabled -- so phase 3 pinned IsOperatorOverloadingSupported to false and left the machinery behind the guard. This deletes it. Gone from the runtime: OperatorDecl and its two defs, TypeRegister's six RegisterOperator overloads with SubmitOperators and GetOperatorDecl, ClassDecl's Add{Self,Left,Right}Operator, ScriptContext's Operators.create lookup and CreateDefaultOperators, and JS_AddIntrinsicOperators with both atoms. Gone from the binding generator: Prefs.enableOperatorOverloading and alwaysEmitOperatorMethod, TypeTransform.EnableOperatorOverloading, OperatorBindingInfo, the op_* switch in AddMethod, CodeGenHelper_Operator, and the two places codegen emitted an AddSelfOperator call. `op_*` methods still bind as ordinary static methods under those names, which is what they already did with the guard false -- IsSupportedOperators survives as IsOperatorMethod, whose one remaining caller is the special-name filter in CollectMethods and has nothing to do with overloading. Three consequences worth naming: - `jsb.isOperatorOverloadingSupported` is no longer defined. It read false, and reads undefined now, so anything gating on it still takes the same branch. - TypeBindingInfo.preload was `operators.Count != 0` and nothing else ever set it, so both call sites now pass false. ScriptRuntime.AddTypeReference keeps the parameter: generated bindings pass it and eager binding is not an operator concept. - JSB_ATOM_Function went with _functionConstructor, whose only reader was TypeRegister.GetConstructor(typeof(JSFunction)) on the operator path. check-exports.py is 98 of 98 now, still 0 stale. The WebGL jslib loses the same three entry points. Its build instructions now pin typescript@5: TS 7 removed every option this tsconfig needs and has no ES5 emit at all, so `npx -p typescript tsc` fails on the config rather than emitting anything. Compiles clean and the suite is unmoved -- EditMode 340/348, PlayMode 689/701, 0 failed. --- .../QuickJS/WebGL/.source/jsbplugin.ts | 23 +-- .../QuickJS/WebGL/.source/typings/jsapi.d.ts | 4 - .../Plugins/QuickJS/WebGL/jsbplugin.jslib | 19 +-- .../Runtime/Source/Binding/ClassDecl.cs | 55 ------- .../Runtime/Source/Binding/DynamicType.cs | 30 ---- .../BindingCallback/ReflectBindingCallback.cs | 2 +- .../BindingInfo/MethodBaseBindingInfo.cs | 28 ---- .../Editor/BindingInfo/TypeBindingInfo.cs | 154 +----------------- .../Editor/Codegen/CodeGenHelper_Class.cs | 53 ------ .../Editor/Codegen/CodeGenHelper_Method.cs | 6 - .../Editor/Codegen/CodeGenHelper_Operator.cs | 80 --------- .../Codegen/CodeGenHelper_Operator.cs.meta | 11 -- .../Codegen/CodeGenHelper_PlainMethod.cs | 6 +- .../Runtime/Source/Binding/Editor/Prefs.cs | 11 -- .../Source/Binding/Editor/TypeTransform.cs | 9 - .../Runtime/Source/Binding/OperatorDecl.cs | 120 -------------- .../Source/Binding/OperatorDecl.cs.meta | 3 - .../Runtime/Source/Binding/TypeRegister.cs | 118 -------------- unity/quickjs/Runtime/Source/Native/JSApi.cs | 19 --- unity/quickjs/Runtime/Source/ScriptContext.cs | 73 --------- 20 files changed, 22 insertions(+), 802 deletions(-) delete mode 100644 unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Operator.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Operator.cs.meta delete mode 100644 unity/quickjs/Runtime/Source/Binding/OperatorDecl.cs delete mode 100644 unity/quickjs/Runtime/Source/Binding/OperatorDecl.cs.meta diff --git a/unity/quickjs/Plugins/QuickJS/WebGL/.source/jsbplugin.ts b/unity/quickjs/Plugins/QuickJS/WebGL/.source/jsbplugin.ts index 1c904d4e..a485f520 100644 --- a/unity/quickjs/Plugins/QuickJS/WebGL/.source/jsbplugin.ts +++ b/unity/quickjs/Plugins/QuickJS/WebGL/.source/jsbplugin.ts @@ -1,6 +1,11 @@ /** * Build with the following command: - * npx -p typescript tsc && node postbuild.mjs + * npx -p typescript@5 tsc && node postbuild.mjs + * + * The version is pinned because TypeScript 7 removed every option this build + * needs -- target ES5, outFile, module none, baseUrl, moduleResolution node -- + * and has no ES5 emit at all, which Emscripten still requires. A bare + * `npx -p typescript tsc` fails on the config rather than producing anything. * * BEWARE: Using some syntaxes will make Emscripten fail while building * Such known syntaxes: Object spread (...), BigInt literals @@ -1013,10 +1018,6 @@ const UnityJSBPlugin: PluginType = { return unityJsbState.atoms.push('fileName'); }, - JSB_ATOM_Function() { - return unityJsbState.atoms.push('Function'); - }, - JSB_ATOM_length() { return unityJsbState.atoms.push('length'); }, @@ -1057,14 +1058,6 @@ const UnityJSBPlugin: PluginType = { return unityJsbState.atoms.push('Object'); }, - JSB_ATOM_Operators() { - return unityJsbState.atoms.push('Operators'); - }, - - JSB_ATOM_Symbol_operatorSet() { - return unityJsbState.atoms.push('operatorSet'); - }, - // #endregion // #region Is @@ -1802,10 +1795,6 @@ const UnityJSBPlugin: PluginType = { return 0; }, - JS_AddIntrinsicOperators(ctx) { - console.warn('Operator overloading is not supported in WebGL Backend'); - }, - JS_ExecutePendingJob(rt, pctx) { // Automatically handled by browsers return false; diff --git a/unity/quickjs/Plugins/QuickJS/WebGL/.source/typings/jsapi.d.ts b/unity/quickjs/Plugins/QuickJS/WebGL/.source/typings/jsapi.d.ts index 383c27cd..008143ad 100644 --- a/unity/quickjs/Plugins/QuickJS/WebGL/.source/typings/jsapi.d.ts +++ b/unity/quickjs/Plugins/QuickJS/WebGL/.source/typings/jsapi.d.ts @@ -113,16 +113,12 @@ declare global { static JSB_DupValue(returnValue: JSValue, ctx: JSContext, v: JSValue); static JSB_FreeValue(ctx: JSContext, v: JSValue): void; static JSB_FreeValueRT(rt: JSRuntime, v: JSValue): void; - static JS_AddIntrinsicOperators(ctx: JSContext): void; static JSB_ATOM_Proxy(): JSAtom; static JSB_ATOM_constructor(): JSAtom; static JSB_ATOM_Number(): JSAtom; static JSB_ATOM_Object(): JSAtom; static JSB_ATOM_String(): JSAtom; - static JSB_ATOM_Function(): JSAtom; static JSB_ATOM_Error(): JSAtom; - static JSB_ATOM_Operators(): JSAtom; - static JSB_ATOM_Symbol_operatorSet(): JSAtom; static JSB_ATOM_name(): JSAtom; static JSB_ATOM_message(): JSAtom; static JSB_ATOM_fileName(): JSAtom; diff --git a/unity/quickjs/Plugins/QuickJS/WebGL/jsbplugin.jslib b/unity/quickjs/Plugins/QuickJS/WebGL/jsbplugin.jslib index 14f072fc..7b27f175 100644 --- a/unity/quickjs/Plugins/QuickJS/WebGL/jsbplugin.jslib +++ b/unity/quickjs/Plugins/QuickJS/WebGL/jsbplugin.jslib @@ -1,6 +1,11 @@ /** * Build with the following command: - * npx -p typescript tsc && node postbuild.mjs + * npx -p typescript@5 tsc && node postbuild.mjs + * + * The version is pinned because TypeScript 7 removed every option this build + * needs -- target ES5, outFile, module none, baseUrl, moduleResolution node -- + * and has no ES5 emit at all, which Emscripten still requires. A bare + * `npx -p typescript tsc` fails on the config rather than producing anything. * * BEWARE: Using some syntaxes will make Emscripten fail while building * Such known syntaxes: Object spread (...), BigInt literals @@ -846,9 +851,6 @@ var UnityJSBPlugin = { JSB_ATOM_fileName: function () { return unityJsbState.atoms.push('fileName'); }, - JSB_ATOM_Function: function () { - return unityJsbState.atoms.push('Function'); - }, JSB_ATOM_length: function () { return unityJsbState.atoms.push('length'); }, @@ -879,12 +881,6 @@ var UnityJSBPlugin = { JSB_ATOM_Object: function () { return unityJsbState.atoms.push('Object'); }, - JSB_ATOM_Operators: function () { - return unityJsbState.atoms.push('Operators'); - }, - JSB_ATOM_Symbol_operatorSet: function () { - return unityJsbState.atoms.push('operatorSet'); - }, // #endregion // #region Is JS_IsArray: function (ctx, val) { @@ -1476,9 +1472,6 @@ var UnityJSBPlugin = { // TODO: return 0; }, - JS_AddIntrinsicOperators: function (ctx) { - console.warn('Operator overloading is not supported in WebGL Backend'); - }, JS_ExecutePendingJob: function (rt, pctx) { // Automatically handled by browsers return false; diff --git a/unity/quickjs/Runtime/Source/Binding/ClassDecl.cs b/unity/quickjs/Runtime/Source/Binding/ClassDecl.cs index 46b8965e..ddc89bf5 100644 --- a/unity/quickjs/Runtime/Source/Binding/ClassDecl.cs +++ b/unity/quickjs/Runtime/Source/Binding/ClassDecl.cs @@ -1,34 +1,9 @@ using System; -using System.Collections.Generic; using QuickJS.Native; using System.Runtime.CompilerServices; namespace QuickJS.Binding { - public struct OperatorDef - { - public string op; - public JSValue value; - - public OperatorDef(string op, JSValue value) - { - this.op = op; - this.value = value; - } - } - - public struct CrossOperatorDef - { - public Type type; - public List operators; - - public CrossOperatorDef(Type type) - { - this.type = type; - this.operators = new List(); - } - } - public struct ClassDecl { private TypeRegister _register; @@ -69,36 +44,6 @@ public void Close() } } - public void AddSelfOperator(string op, IDynamicMethod func) - { - _register.RegisterOperator(_type, op, func); - } - - public void AddLeftOperator(string op, IDynamicMethod func, Type type) - { - _register.RegisterOperator(_type, op, func, true, type); - } - - public void AddRightOperator(string op, IDynamicMethod func, Type type) - { - _register.RegisterOperator(_type, op, func, false, type); - } - - public void AddSelfOperator(string op, JSCFunction func, int length) - { - _register.RegisterOperator(_type, op, func, length); - } - - public void AddLeftOperator(string op, JSCFunction func, int length, Type type) - { - _register.RegisterOperator(_type, op, func, length, true, type); - } - - public void AddRightOperator(string op, JSCFunction func, int length, Type type) - { - _register.RegisterOperator(_type, op, func, length, false, type); - } - public void AddFunction(string name, JSCFunctionMagic func, int length, int magic) { AddMethod(true, name, func, length, magic); diff --git a/unity/quickjs/Runtime/Source/Binding/DynamicType.cs b/unity/quickjs/Runtime/Source/Binding/DynamicType.cs index 9122d750..9789d716 100644 --- a/unity/quickjs/Runtime/Source/Binding/DynamicType.cs +++ b/unity/quickjs/Runtime/Source/Binding/DynamicType.cs @@ -84,36 +84,6 @@ private void CollectMethod(ref ClassDecl cls, MethodInfo[] methodInfos, Dictiona var methodInfo = methodInfos[i]; var name = methodInfo.Name; - if (methodInfo.IsSpecialName) - { - var enableOperatorOverloading = false; - - //TODO: 反射方式的运算符重载注册 - if (name.StartsWith("op_")) - { - switch (name) - { - case "op_Addition": - case "op_Subtraction": - case "op_Equality": - case "op_Multiply": - case "op_Division": - case "op_UnaryNegation": - //TODO: add operators - // var op = new DynamicMethod(this, methodInfo); - // cls.AddSelfOperator() - // cls.AddLeftOperator() - // cls.AddRightOperator() - break; - } - } - - if (enableOperatorOverloading) - { - continue; - } - } - var map = methodInfo.IsStatic ? staticMap : instMap; List list; if (!map.TryGetValue(name, out list)) diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/ReflectBindingCallback.cs b/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/ReflectBindingCallback.cs index 92a55a1c..1fef6ef4 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/ReflectBindingCallback.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/BindingCallback/ReflectBindingCallback.cs @@ -229,7 +229,7 @@ public void BeginStaticModule(string moduleName, int capacity) public void AddTypeReference(string moduleName, TypeBindingInfo typeBindingInfo) { - _runtime.AddTypeReference(_moduleReg, typeBindingInfo.type, register => typeBindingInfo.DoReflectBind(register, _moduleReg), typeBindingInfo.preload, typeBindingInfo.tsTypeNaming.jsFullNameForReflectBind); + _runtime.AddTypeReference(_moduleReg, typeBindingInfo.type, register => typeBindingInfo.DoReflectBind(register, _moduleReg), false, typeBindingInfo.tsTypeNaming.jsFullNameForReflectBind); } public void EndStaticModule(string moduleName) diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/BindingInfo/MethodBaseBindingInfo.cs b/unity/quickjs/Runtime/Source/Binding/Editor/BindingInfo/MethodBaseBindingInfo.cs index 3f2baad5..750bc3e6 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/BindingInfo/MethodBaseBindingInfo.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/BindingInfo/MethodBaseBindingInfo.cs @@ -2,7 +2,6 @@ using System.IO; using System.Collections.Generic; using System.Reflection; -using System.Linq; using System.Runtime.CompilerServices; namespace QuickJS.Binding @@ -84,33 +83,6 @@ public MethodBindingInfo(BindingManager bindingManager, bool bStatic, string csN } } - public class OperatorBindingInfo : MethodBaseBindingInfo - { - public int length; // 参数数 - public string csName; // CS原始方法名 (op_xxx) - public string cs_op; // 绑定代码中的运算符 - public MethodInfo methodInfo; - public bool isExtension; - - // regName: js 中的重载运算符 - public OperatorBindingInfo(BindingManager bindingManager, MethodInfo methodInfo, bool isExtension, bool bStatic, string csName, string jsName, string cs_op, int length) - { - this.methodInfo = methodInfo; - this.isExtension = isExtension; - this.length = length; - this.csName = csName; - this.jsName = jsName; - this.cs_op = cs_op; - this.csBindName = bindingManager.GetBindName(bStatic, csName + "_qjs"); - if (methodInfo.DeclaringType.GetMethods().Count(m => m.IsSpecialName && m.Name.StartsWith("op_") && m.Name == methodInfo.Name) > 1) - { - this.csBindName += "_m"; - } - - this.Add(methodInfo, isExtension); //NOTE: 旧代码, 待更替 - } - } - public class ConstructorBindingInfo : MethodBaseBindingInfo { public Type decalringType; diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/BindingInfo/TypeBindingInfo.cs b/unity/quickjs/Runtime/Source/Binding/Editor/BindingInfo/TypeBindingInfo.cs index 63a008d5..5f295b49 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/BindingInfo/TypeBindingInfo.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/BindingInfo/TypeBindingInfo.cs @@ -17,8 +17,6 @@ public class TypeBindingInfo ///

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

teM#c?ETrcsl!(o?T%u)%29!xz@^-Lvr?)K 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 z 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 literal 975872 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�Nhk#AVEYDh~q+DcxPxta^wWaIfB3+mDtM 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�&q@P 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

public readonly TypeTransform transform; - public bool preload => operators.Count != 0; - public TypeBindingFlags bindingFlags => transform.bindingFlags; /// @@ -70,8 +68,6 @@ public class TypeBindingInfo /// public string csBindingName => _csBindingName; - public List operators = new List(); - public Dictionary methods = new Dictionary(); public Dictionary staticMethods = new Dictionary(); @@ -208,23 +204,12 @@ public void AddProperty(PropertyInfo propInfo) } } - public bool IsSupportedOperators(MethodInfo methodInfo) - { - if (methodInfo.IsSpecialName && methodInfo.Name.StartsWith("op_")) - { - // do not support overloaded operators at present - // if (methodInfo.DeclaringType.GetMethods().Count(m => m.IsSpecialName && m.Name.StartsWith("op_") && m.Name == methodInfo.Name) == 1) - // { - // return true; - // } - return true; - } - return false; - } - - public bool IsOperatorOverloadingEnabled(MethodInfo methodInfo) + /// An `op_*` method. It is bound as an ordinary static method under that name -- ng has + /// no operator overloading, so there is nothing else to do with one, but it is still + /// callable and must not be dropped with the other special-named members. + public bool IsOperatorMethod(MethodInfo methodInfo) { - return Native.JSApi.IsOperatorOverloadingSupported && bindingManager.prefs.enableOperatorOverloading && transform.enableOperatorOverloading && IsSupportedOperators(methodInfo); + return methodInfo.IsSpecialName && methodInfo.Name.StartsWith("op_"); } public void AddMethod(MethodInfo methodInfo, bool asExtensionAnyway) @@ -263,94 +248,6 @@ public void AddMethod(MethodInfo methodInfo, bool asExtensionAnyway) var methodCSName = methodInfo.Name; var methodJSName = this.bindingManager.GetNamingAttribute(this.transform, methodInfo); - if (IsOperatorOverloadingEnabled(methodInfo)) - { - var parameters = methodInfo.GetParameters(); - var declaringType = methodInfo.DeclaringType; - OperatorBindingInfo operatorBindingInfo = null; - switch (methodCSName) - { - case "op_LessThan": - if (parameters.Length == 2) - { - if (parameters[0].ParameterType == declaringType && parameters[1].ParameterType == declaringType) - { - operatorBindingInfo = new OperatorBindingInfo(bindingManager, methodInfo, isExtension, isStatic, methodCSName, "<", "<", 2); - } - } - break; - case "op_Addition": - if (parameters.Length == 2) - { - if (parameters[0].ParameterType == declaringType && parameters[1].ParameterType == declaringType) - { - operatorBindingInfo = new OperatorBindingInfo(bindingManager, methodInfo, isExtension, isStatic, methodCSName, "+", "+", 2); - } - } - break; - case "op_Subtraction": - if (parameters.Length == 2) - { - if (parameters[0].ParameterType == declaringType && parameters[1].ParameterType == declaringType) - { - operatorBindingInfo = new OperatorBindingInfo(bindingManager, methodInfo, isExtension, isStatic, methodCSName, "-", "-", 2); - } - } - break; - case "op_Equality": - if (parameters.Length == 2) - { - if (parameters[0].ParameterType == declaringType && parameters[1].ParameterType == declaringType) - { - operatorBindingInfo = new OperatorBindingInfo(bindingManager, methodInfo, isExtension, isStatic, methodCSName, "==", "==", 2); - } - } - break; - case "op_Multiply": - if (parameters.Length == 2) - { - var op0 = bindingManager.GetExportedType(parameters[0].ParameterType); - var op1 = bindingManager.GetExportedType(parameters[1].ParameterType); - if (op0 != null && op1 != null) - { - var bindingName = methodCSName + "_" + op0.csBindingName + "_" + op1.csBindingName; - operatorBindingInfo = new OperatorBindingInfo(bindingManager, methodInfo, isExtension, isStatic, bindingName, "*", "*", 2); - } - } - break; - case "op_Division": - if (parameters.Length == 2) - { - var op0 = bindingManager.GetExportedType(parameters[0].ParameterType); - var op1 = bindingManager.GetExportedType(parameters[1].ParameterType); - if (op0 != null && op1 != null) - { - var bindingName = methodCSName + "_" + op0.csBindingName + "_" + op1.csBindingName; - operatorBindingInfo = new OperatorBindingInfo(bindingManager, methodInfo, isExtension, isStatic, bindingName, "/", "/", 2); - } - } - break; - case "op_UnaryNegation": - { - operatorBindingInfo = new OperatorBindingInfo(bindingManager, methodInfo, isExtension, isStatic, methodCSName, "neg", "-", 1); - } - break; - } - - if (operatorBindingInfo != null) - { - operators.Add(operatorBindingInfo); - CollectDelegate(methodInfo); - bindingManager.Info("[AddOperator] {0}.{1}", type, methodInfo); - if (!bindingManager.prefs.alwaysEmitOperatorMethod) - { - return; - } - } - - // fallback to normal method binding - } - var group = isStatic ? staticMethods : methods; MethodBindingInfo methodBindingInfo; if (!group.TryGetValue(methodJSName, out methodBindingInfo)) @@ -676,7 +573,7 @@ private void CollectMethods(IEnumerable methods, bool asExtensionAny if (method.IsSpecialName) { - if (!IsSupportedOperators(method)) + if (!IsOperatorMethod(method)) { bindingManager.Info("skip special method: {0}", method); continue; @@ -895,45 +792,6 @@ public Binding.ClassDecl DoReflectBind(Binding.TypeRegister register, Module.Pro cls.AddMethod(delegateBindingInfo.isStatic, tsDelegateVar, dynamicMethod); } - // 注册运算符 - if (Native.JSApi.JS_ATOM_Operators.IsValid) - { - if (operators.Count > 0) - { - //TODO: 目前运算符必须在同一个 TypeRegister 实例中注册 - // proxyModuleRegister.MarkAsCritical(); - } - - foreach (var operatorBindingInfo in operators) - { - var dynamicMethod = Binding.DynamicMethodFactory.CreateMethod(dynamicType, operatorBindingInfo.methodInfo, operatorBindingInfo.isExtension); - var regName = operatorBindingInfo.jsName; - var parameters = operatorBindingInfo.methodInfo.GetParameters(); - var declaringType = operatorBindingInfo.methodInfo.DeclaringType; - - do - { - if (parameters.Length == 2) - { - if (parameters[0].ParameterType != declaringType) - { - var leftType = parameters[0].ParameterType; - cls.AddLeftOperator(regName, dynamicMethod, leftType); - break; - } - else if (parameters[1].ParameterType != declaringType) - { - var rightType = parameters[1].ParameterType; - cls.AddRightOperator(regName, dynamicMethod, rightType); - break; - } - } - - cls.AddSelfOperator(regName, dynamicMethod); - } while (false); - } - } - return cls; } } diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Class.cs b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Class.cs index 4d7f0270..7879124d 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Class.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Class.cs @@ -214,29 +214,6 @@ public ClassCodeGen(CodeGenerator cg, TypeBindingInfo typeBindingInfo) } } - if (!typeBindingInfo.type.IsGenericTypeDefinition) - { - foreach (var operatorBindingInfo in this.typeBindingInfo.operators) - { - using (new PInvokeGuardCodeGen(cg, typeof(QuickJS.Native.JSCFunction))) - { - using (new BindingFuncDeclareCodeGen(cg, typeof(QuickJS.Native.JSCFunction), operatorBindingInfo.csBindName)) - { - using (new TryCatchGuradCodeGen(cg)) - { - using (new OperatorCodeGen(cg, this.typeBindingInfo, operatorBindingInfo)) - { - } - } - } - } - - using (new TSOperatorCodeGen(cg, typeBindingInfo, operatorBindingInfo)) - { - } - } - } - // 所有附加方法 transform.ForEachAdditionalTSMethodDeclaration(decl => this.cg.tsDeclare.AppendLine(decl)); @@ -443,36 +420,6 @@ public override void Dispose() this.cg.bindingManager.GetCSTypeFullName(typeBindingInfo.type), constructor); - // 运算符 - foreach (var operatorBindingInfo in typeBindingInfo.operators) - { - var regName = operatorBindingInfo.jsName; - var funcName = operatorBindingInfo.csBindName; - var parameters = operatorBindingInfo.methodInfo.GetParameters(); - var declaringType = operatorBindingInfo.methodInfo.DeclaringType; - - do - { - if (parameters.Length == 2) - { - if (parameters[0].ParameterType != declaringType) - { - var leftType = typeBindingInfo.bindingManager.GetCSTypeFullName(parameters[0].ParameterType); - cg.cs.AppendLine("cls.AddLeftOperator(\"{0}\", {1}, {2}, typeof({3}));", regName, funcName, operatorBindingInfo.length, leftType); - break; - } - else if (parameters[1].ParameterType != declaringType) - { - var rightType = typeBindingInfo.bindingManager.GetCSTypeFullName(parameters[1].ParameterType); - cg.cs.AppendLine("cls.AddRightOperator(\"{0}\", {1}, {2}, typeof({3}));", regName, funcName, operatorBindingInfo.length, rightType); - break; - } - } - - cg.cs.AppendLine("cls.AddSelfOperator(\"{0}\", {1}, {2});", regName, funcName, operatorBindingInfo.length); - } while (false); - } - // 非静态方法 foreach (var kv in typeBindingInfo.methods) { diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Method.cs b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Method.cs index 0a3a74ec..f10470a7 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Method.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Method.cs @@ -413,12 +413,6 @@ protected List WriteTSDeclaration(TypeBindingInfo typeBindingInfo //TODO: 需要处理参数类型归并问题, 因为如果类型没有导入 ts 中, 可能会在声明中出现相同参数列表的定义 // 在 MethodVariant 中创建每个方法对应的TS类型名参数列表, 完全相同的不再输出 var prefix = ""; - // if (method.Name.StartsWith("op_")) - if (bindingInfo is OperatorBindingInfo) - { - prefix += "// js_op_overloading: "; - } - if (method.IsStatic && !isExtension) { prefix += "static "; diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Operator.cs b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Operator.cs deleted file mode 100644 index 131081d8..00000000 --- a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Operator.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; - -namespace QuickJS.Binding -{ - // 生成成员方法绑定代码 - public class OperatorCodeGen : MethodBaseCodeGen - { - protected TypeBindingInfo typeBindingInfo; - protected OperatorBindingInfo operatorBindingInfo; - - protected override Type GetReturnType(MethodInfo method) - { - return method.ReturnType; - } - - private string OpArgsConcat(List args, string sp = ", ") - { - if (args.Count == 1) - { - return sp + args[0]; - } - var len = args.Count; - var res = ""; - for (var i = 0; i < len; i++) - { - res += args[i]; - if (i != len - 1) - { - res += sp; - } - } - - return res; - } - - protected override string GetInvokeBinding(string caller, MethodInfo method, bool hasParams, bool isExtension, string nargs, ParameterInfo[] parameters) - { - var arglist = OpArgsConcat(AppendGetParameters(hasParams, nargs, method, parameters), " " + operatorBindingInfo.cs_op + " "); - // var transform = cg.bindingManager.GetTypeTransform(method.DeclaringType); - // if (transform == null || !transform.OnBinding(BindingPoints.METHOD_BINDING_BEFORE_INVOKE, method, cg)) - // { - // } - - return arglist; - } - - public OperatorCodeGen(CodeGenerator cg, TypeBindingInfo typeBindingInfo, OperatorBindingInfo bindingInfo) - : base(cg) - { - this.typeBindingInfo = typeBindingInfo; - this.operatorBindingInfo = bindingInfo; - WriteCSAllVariants(this.typeBindingInfo, this.operatorBindingInfo); - // WriteTSAllVariants(this.bindingInfo); - } - } - - public class TSOperatorCodeGen : MethodBaseCodeGen - { - protected OperatorBindingInfo bindingInfo; - - protected override Type GetReturnType(MethodInfo method) - { - return method.ReturnType; - } - - protected override string GetInvokeBinding(string caller, MethodInfo method, bool hasParams, bool isExtension, string nargs, ParameterInfo[] parameters) - { - return null; - } - - public TSOperatorCodeGen(CodeGenerator cg, TypeBindingInfo typeBindingInfo, OperatorBindingInfo bindingInfo) - : base(cg) - { - this.bindingInfo = bindingInfo; - WriteTSAllVariants(typeBindingInfo, this.bindingInfo); - } - } -} \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Operator.cs.meta b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Operator.cs.meta deleted file mode 100644 index d8dbc205..00000000 --- a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_Operator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f588afad6badbfc43a2ede6b28758f07 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_PlainMethod.cs b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_PlainMethod.cs index 444aef23..59523844 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_PlainMethod.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/Codegen/CodeGenHelper_PlainMethod.cs @@ -35,9 +35,9 @@ public void AddModuleEntry(string moduleName, string runtimeVarName, string modu var csNamespace = this.cg.bindingManager.prefs.ns; var csBindingName = typeBindingInfo.csBindingName; var jsNamespace = CodeGenUtils.Concat(", ", CodeGenUtils.ConcatAsLiteral(", ", typeBindingInfo.tsTypeNaming.jsNamespaceSlice), $"\"{typeBindingInfo.tsTypeNaming.jsNameNormalized}\""); - var preload = typeBindingInfo.preload ? "true" : "false"; - - AddStatement($"{runtimeVarName}.AddTypeReference({moduleVarName}, typeof({csType}), {csNamespace}.{csBindingName}.Bind, {preload}, {jsNamespace});"); + // preload is always false now: declaring operators was the only thing that ever + // set it, and ng has no operator overloading to register in one pass. + AddStatement($"{runtimeVarName}.AddTypeReference({moduleVarName}, typeof({csType}), {csNamespace}.{csBindingName}.Bind, false, {jsNamespace});"); } } } diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/Prefs.cs b/unity/quickjs/Runtime/Source/Binding/Editor/Prefs.cs index b455de65..801e65b4 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/Prefs.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/Prefs.cs @@ -80,17 +80,6 @@ public class Prefs /// public string preferredBindingMethod = "Reflect Bind"; - /// - /// generate binding code for operator overloading support in QuickJS (not fully supported). - /// operators will be generated as ordinary method (op_XXX) if disabled - /// - public bool enableOperatorOverloading = true; - - /// - /// emit binding code for operator methods even if operator overlaoding enabled - /// - public bool alwaysEmitOperatorMethod = true; - /// /// optional entry point for editor scripting /// diff --git a/unity/quickjs/Runtime/Source/Binding/Editor/TypeTransform.cs b/unity/quickjs/Runtime/Source/Binding/Editor/TypeTransform.cs index feca1708..341bdf7f 100644 --- a/unity/quickjs/Runtime/Source/Binding/Editor/TypeTransform.cs +++ b/unity/quickjs/Runtime/Source/Binding/Editor/TypeTransform.cs @@ -18,7 +18,6 @@ public class TypeTransform private Type _type; private JSHotfixAttribute _hotfix; private string _typeNaming; - private bool _enableOperatorOverloading = true; private bool _disposable; private Native.JSCFunctionMagic _csConstructorOverride = null; @@ -68,8 +67,6 @@ public class TypeTransform private Dictionary _memberNameAlias = new Dictionary(); - public bool enableOperatorOverloading => _enableOperatorOverloading; - public Type type => _type; public Native.JSCFunctionMagic csConstructorOverride => _csConstructorOverride; @@ -83,12 +80,6 @@ public TypeTransform(Type type) } } - public TypeTransform EnableOperatorOverloading(bool value) - { - _enableOperatorOverloading = value; - return this; - } - /// /// let the lifetime of this type totally managed by JS. /// it means the underlying C# object will be automatically disposed after JS object's releasing. diff --git a/unity/quickjs/Runtime/Source/Binding/OperatorDecl.cs b/unity/quickjs/Runtime/Source/Binding/OperatorDecl.cs deleted file mode 100644 index 491ecc9e..00000000 --- a/unity/quickjs/Runtime/Source/Binding/OperatorDecl.cs +++ /dev/null @@ -1,120 +0,0 @@ -using System; -using System.Collections.Generic; -using QuickJS.Native; - -namespace QuickJS.Binding -{ - public class OperatorDecl - { - private Type type; - private List self; - private List left; - private List right; - - private int _count; - - public int count { get { return _count; } } - - public OperatorDecl(Type type) - { - this.type = type; - self = new List(); - left = new List(); - right = new List(); - _count = 1; - } - - public void AddOperator(string op, JSValue value) - { - self.Add(new OperatorDef(op, value)); - } - - public void AddCrossOperator(string op, JSValue value, bool bLeft, Type sideType) - { - var list = bLeft ? left : right; - var count = list.Count; - for (var i = 0; i < count; i++) - { - if (list[i].type == sideType) - { - list[i].operators.Add(new OperatorDef(op, value)); - return; - } - } - var newCrossDef = new CrossOperatorDef(sideType); - newCrossDef.operators.Add(new OperatorDef(op, value)); - list.Add(newCrossDef); - _count++; - } - - /// - /// 实际定义运算符重载 (请保证 create 本身有效) - /// - public unsafe void Register(TypeRegister register, JSContext ctx, JSValue create) - { - var proto = register.FindChainedPrototypeOf(type); - var argv = new JSValue[_count]; - - argv[0] = JSApi.JS_NewObject(ctx); - for (int i = 0, len = self.Count; i < len; i++) - { - var def = self[i]; - // var funcVal = JSApi.JS_NewCFunction(ctx, def.func, def.op, def.length); - JSApi.JS_DefinePropertyValue(ctx, argv[0], register.GetAtom(def.op), def.value); - // UnityEngine.Debug.LogFormat("{0} operator {1}", type, def.op); - } - - for (int i = 0, len = left.Count; i < len; i++) - { - var cross = left[i]; - var sideCtor = register.GetConstructor(cross.type); - var operator_ = JSApi.JS_NewObject(ctx); - var side = "left"; - JSApi.JS_SetProperty(ctx, operator_, register.GetAtom(side), sideCtor); - for (int opIndex = 0, opCount = cross.operators.Count; opIndex < opCount; opIndex++) - { - var def = cross.operators[opIndex]; - // var funcVal = JSApi.JS_NewCFunction(ctx, def.func, def.op, def.length); - JSApi.JS_DefinePropertyValue(ctx, operator_, register.GetAtom(def.op), def.value); - argv[i + 1] = operator_; - // UnityEngine.Debug.LogFormat("{0} {1} operator {2} {3} ({4})", type, side, def.op, cross.type, sideCtor); - } - } - - for (int i = 0, len = right.Count; i < len; i++) - { - var cross = right[i]; - var sideCtor = register.GetConstructor(cross.type); - var operator_ = JSApi.JS_NewObject(ctx); - var side = "right"; - JSApi.JS_SetProperty(ctx, operator_, register.GetAtom(side), sideCtor); - for (int opIndex = 0, opCount = cross.operators.Count; opIndex < opCount; opIndex++) - { - var def = cross.operators[opIndex]; - // var funcVal = JSApi.JS_NewCFunction(ctx, def.func, def.op, def.length); - JSApi.JS_DefinePropertyValue(ctx, operator_, register.GetAtom(def.op), def.value); - argv[i + 1 + left.Count] = operator_; - // UnityEngine.Debug.LogFormat("{0} {1} operator {2} {3} ({4})", type, side, def.op, cross.type, sideCtor); - } - } - - fixed (JSValue* ptr = argv) - { - var rval = JSApi.JS_Call(ctx, create, JSApi.JS_UNDEFINED, argv.Length, ptr); - if (rval.IsException()) - { - ctx.print_exception(Utils.LogLevel.Warn, string.Format("[{0} operators failed]", type)); - } - else - { - JSApi.JS_DefinePropertyValue(ctx, proto, JSApi.JS_ATOM_Symbol_operatorSet, rval); - } - } - - for (int i = 0, len = argv.Length; i < len; i++) - { - JSApi.JS_FreeValue(ctx, argv[i]); - } - } - } -} diff --git a/unity/quickjs/Runtime/Source/Binding/OperatorDecl.cs.meta b/unity/quickjs/Runtime/Source/Binding/OperatorDecl.cs.meta deleted file mode 100644 index dc47f016..00000000 --- a/unity/quickjs/Runtime/Source/Binding/OperatorDecl.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 7fca01a6fda646108fac38e7ceb1adad -timeCreated: 1591936629 \ No newline at end of file diff --git a/unity/quickjs/Runtime/Source/Binding/TypeRegister.cs b/unity/quickjs/Runtime/Source/Binding/TypeRegister.cs index 3331487a..6eb69377 100644 --- a/unity/quickjs/Runtime/Source/Binding/TypeRegister.cs +++ b/unity/quickjs/Runtime/Source/Binding/TypeRegister.cs @@ -16,9 +16,6 @@ public class TypeRegister private AtomCache _atoms; private List _pendingTypes = new List(); private List _pendingClasses = new List(); - - private List _operatorDecls = new List(); - private Dictionary _operatorDeclIndex = new Dictionary(); public static implicit operator JSContext(TypeRegister register) { @@ -195,120 +192,6 @@ public int RegisterType(Type type, JSValue proto) return _db.AddType(type, proto); } - private void SubmitOperators() - { - // 提交运算符重载 - var ctx = (JSContext)_context; - var operatorCreate = _context.GetOperatorCreate(); - - if (!operatorCreate.IsUndefined()) - { - var count = _operatorDecls.Count; - for (var i = 0; i < count; i++) - { - _operatorDecls[i].Register(this, ctx, operatorCreate); - } - } - - JSApi.JS_FreeValue(ctx, operatorCreate); - _operatorDeclIndex.Clear(); - _operatorDecls.Clear(); - } - - private OperatorDecl GetOperatorDecl(Type type, out int index) - { - if (_operatorDeclIndex.TryGetValue(type, out index)) - { - return _operatorDecls[index]; - } - var decl = new OperatorDecl(type); - index = _operatorDecls.Count; - _operatorDeclIndex[type] = index; - _operatorDecls.Add(decl); - return decl; - } - - public void RegisterOperator(Type type, string op, JSCFunction func, int length) - { - RegisterOperator(type, op, JSApi.JSB_NewCFunction(_context, func, GetAtom(op), length)); - } - - public void RegisterOperator(Type type, string op, IDynamicMethod func) - { - RegisterOperator(type, op, _db.NewDynamicMethod(GetAtom(op), func)); - } - - public void RegisterOperator(Type type, string op, JSCFunction func, int length, bool left, Type sideType) - { - RegisterOperator(type, op, JSApi.JSB_NewCFunction(_context, func, GetAtom(op), length), left, sideType); - } - - public void RegisterOperator(Type type, string op, IDynamicMethod func, bool left, Type sideType) - { - RegisterOperator(type, op, _db.NewDynamicMethod(GetAtom(op), func), left, sideType); - } - - // self operator for type - public void RegisterOperator(Type type, string op, JSValue value) - { - int index; - var decl = GetOperatorDecl(type, out index); - decl.AddOperator(op, value); - } - - // left/right operator for type - public void RegisterOperator(Type type, string op, JSValue value, bool left, Type sideType) - { - if (sideType == typeof(string) || sideType == typeof(void) || (sideType.IsValueType && (sideType.IsPrimitive || sideType.IsEnum))) - { - int index; - var decl = GetOperatorDecl(type, out index); - decl.AddCrossOperator(op, value, left, sideType); - } - else - { - int index1, index2; - var decl1 = GetOperatorDecl(type, out index1); - var decl2 = GetOperatorDecl(sideType, out index2); - if (index2 > index1) - { - decl2.AddCrossOperator(op, value, !left, type); - } - else - { - decl1.AddCrossOperator(op, value, left, sideType); - } - } - } - - // 返回值已经过 DupValue - public JSValue GetConstructor(Type type) - { - if (type == typeof(JSFunction)) - { - return _context.GetFunctionConstructor(); - } - - if (type == typeof(string) || type == typeof(char)) - { - return _context.GetStringConstructor(); - } - - if (type.IsValueType && (type.IsPrimitive || type.IsEnum)) - { - return _context.GetNumberConstructor(); - } - - var val = _db.FindChainedPrototypeOf(type); - return JSApi.JS_GetProperty(_context, val, JSApi.JS_ATOM_constructor); - } - - public JSValue FindChainedPrototypeOf(Type type) - { - var val = _db.FindChainedPrototypeOf(type); - return val; - } - public void Finish() { _refCount--; @@ -316,7 +199,6 @@ public void Finish() if (_refCount == 0) { _context.ReleaseTypeRegister(this); - SubmitOperators(); _atoms.Clear(); var ctx = (JSContext)_context; diff --git a/unity/quickjs/Runtime/Source/Native/JSApi.cs b/unity/quickjs/Runtime/Source/Native/JSApi.cs index 191016a2..42c90206 100644 --- a/unity/quickjs/Runtime/Source/Native/JSApi.cs +++ b/unity/quickjs/Runtime/Source/Native/JSApi.cs @@ -62,12 +62,6 @@ public partial class JSApi public const int CS_JSB_VERSION = 0xa; // expected dll version public static readonly int SO_JSB_VERSION; // actual dll version - // quickjs-ng removed operator overloading outright, so this is no longer a build - // choice. Every guard on it now resolves at compile time and the branches behind - // them are unreachable, which is what lets JS_AddIntrinsicOperators and the - // Operators atoms leave the P/Invoke surface entirely. - public const bool IsOperatorOverloadingSupported = false; - #if (UNITY_IPHONE || UNITY_WEBGL) && !UNITY_EDITOR public const string JSBDLL = "__Internal"; #else @@ -725,24 +719,11 @@ public static unsafe void JS_FreeValue(JSContext ctx, int count, JSValue* vs) public static readonly JSAtom JS_ATOM_String = JSB_ATOM_String(); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] - public static extern JSAtom JSB_ATOM_Function(); - - public static readonly JSAtom JS_ATOM_Function = JSB_ATOM_Function(); - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSAtom JSB_ATOM_Error(); public static readonly JSAtom JS_ATOM_Error = JSB_ATOM_Error(); - // No-ops rather than deletions: the call sites are guarded by - // IsOperatorOverloadingSupported and reading unreachable-but-compiled code is - // cheaper than threading the guard through every one. Both atoms stay default, - // i.e. JS_ATOM_NULL, which is what JSAtom.IsValid tests. - public static void JS_AddIntrinsicOperators(JSContext ctx) {} - public static readonly JSAtom JS_ATOM_Operators; - public static readonly JSAtom JS_ATOM_Symbol_operatorSet; - [DllImport(JSBDLL, CallingConvention = CallingConvention.Cdecl)] public static extern JSAtom JSB_ATOM_name(); diff --git a/unity/quickjs/Runtime/Source/ScriptContext.cs b/unity/quickjs/Runtime/Source/ScriptContext.cs index 20fd1c70..e996e9ed 100644 --- a/unity/quickjs/Runtime/Source/ScriptContext.cs +++ b/unity/quickjs/Runtime/Source/ScriptContext.cs @@ -29,12 +29,10 @@ public partial class ScriptContext private Regex _stRegex; private JSValue _globalObject; - private JSValue _operatorCreate; private JSValue _proxyConstructor; private JSValue _objectConstructor; private JSValue _numberConstructor; private JSValue _stringConstructor; - private JSValue _functionConstructor; private bool _isReloading; private List _waitForReloadModules; @@ -53,7 +51,6 @@ public ScriptContext(ScriptRuntime runtime, int contextId, Experimental.IJSApiBr _contextId = contextId; _ctx = JSApi.JS_NewContext(_runtime); JSApi.JS_SetContextOpaque(_ctx, (IntPtr)_contextId); - JSApi.JS_AddIntrinsicOperators(_ctx); _atoms = new AtomCache(_ctx); _moduleIdList = new List(); _stringCache = new JSStringCache(_ctx); @@ -65,43 +62,6 @@ public ScriptContext(ScriptRuntime runtime, int contextId, Experimental.IJSApiBr _numberConstructor = JSApi.JS_GetProperty(_ctx, _globalObject, JSApi.JS_ATOM_Number); _proxyConstructor = JSApi.JS_GetProperty(_ctx, _globalObject, JSApi.JS_ATOM_Proxy); _stringConstructor = JSApi.JS_GetProperty(_ctx, _globalObject, JSApi.JS_ATOM_String); - _functionConstructor = JSApi.JS_GetProperty(_ctx, _globalObject, JSApi.JS_ATOM_Function); - _operatorCreate = JSApi.JS_UNDEFINED; - - if (JSApi.IsOperatorOverloadingSupported && JSApi.JS_ATOM_Operators.IsValid) - { - var operators = JSApi.JS_GetProperty(_ctx, _globalObject, JSApi.JS_ATOM_Operators); - if (!operators.IsNullish()) - { - if (operators.IsException()) - { - _ctx.print_exception(); - } - else - { - var create = JSApi.JS_GetProperty(_ctx, operators, GetAtom("create")); - JSApi.JS_FreeValue(_ctx, operators); - if (create.IsException()) - { - _ctx.print_exception(); - } - else - { - if (JSApi.JS_IsFunction(_ctx, create)) - { - _operatorCreate = create; - - // Function.prototype[Symbol.operatorSet] = Operators.create(); - CreateDefaultOperators(_functionConstructor); - } - else - { - JSApi.JS_FreeValue(_ctx, create); - } - } - } - } - } } public void ReleaseTypeRegister(TypeRegister register) @@ -123,23 +83,6 @@ public TypeRegister CreateTypeRegister() return _currentTypeRegister; } - private unsafe void CreateDefaultOperators(JSValue constructor) - { - if (!_operatorCreate.IsNullish()) - { - var rval = JSApi.JS_Call(_ctx, _operatorCreate); - if (rval.IsException()) - { - var ex = _ctx.GetExceptionString(); - GetLogger()?.Write(LogLevel.Error, ex); - } - else - { - JSApi.JS_DefinePropertyValue(_ctx, constructor, JSApi.JS_ATOM_Symbol_operatorSet, rval); - } - } - } - public bool IsValid() { lock (this) @@ -213,9 +156,7 @@ public void Destroy() JSApi.JS_FreeValue(_ctx, _objectConstructor); JSApi.JS_FreeValue(_ctx, _numberConstructor); JSApi.JS_FreeValue(_ctx, _stringConstructor); - JSApi.JS_FreeValue(_ctx, _functionConstructor); JSApi.JS_FreeValue(_ctx, _globalObject); - JSApi.JS_FreeValue(_ctx, _operatorCreate); JSApi.JS_FreeValue(_ctx, _moduleCache); JSApi.JS_FreeValue(_ctx, _mainModule); @@ -257,11 +198,6 @@ public JSValue GetStringConstructor() return JSApi.JS_DupValue(_ctx, _stringConstructor); } - public JSValue GetFunctionConstructor() - { - return JSApi.JS_DupValue(_ctx, _functionConstructor); - } - /// /// 获取 number.constructor (增加引用计数) /// @@ -302,14 +238,6 @@ public bool CheckStringType(JSValue jsValue) return false; } - /// - /// 获取 operator.create (增加引用计数) - /// - public JSValue GetOperatorCreate() - { - return JSApi.JS_DupValue(_ctx, _operatorCreate); - } - //TODO: 改为消耗 exports_obj 计数 // for special resolver (json/static) use // no specified parent module assignment @@ -708,7 +636,6 @@ public static ClassDecl Bind(TypeRegister register) ns_jsb.AddFunction("AddModule", _add_module, 2); ns_jsb.AddFunction("Now", _now, 0); ns_jsb.AddFunction("IsStaticBinding", _IsStaticBinding, 0); - ns_jsb.AddConstValue("isOperatorOverloadingSupported", JSApi.IsOperatorOverloadingSupported); ns_jsb.AddConstValue("engine", JSApi.JSBDLL); ns_jsb.AddConstValue("version", JSApi.SO_JSB_VERSION); ns_jsb.AddConstValue("pluginVersion", JSApi.VERSION); From af76e4249c93303f86cdf6b1c672b9522a929501 Mon Sep 17 00:00:00 2001 From: Gokhan Kurt Date: Sun, 23 Aug 2026 22:18:50 +0300 Subject: [PATCH 23/58] build(quickjs): re-pin ng for the import.meta hook gkurt/quickjs 30ceffe adds JS_SetModuleMetaFunc -- ECMA-262's HostGetImportMetaProperties -- and implements the JS_LoadModuleAsync that quickjs.h already named twice without declaring. The async loader is handed source text and compiles it itself, so unlike the synchronous loaders it never gives the host a JSModuleDef, and populating import.meta has always been host policy. Without the hook every module loaded asynchronously reports `import.meta.url` as undefined, which two tests assert on for every engine. Measured, not assumed: with the hook's call removed the fork's own suite reports 'undefined|undefined'. shim-test passes 241/241 in both configurations, ctest passes, and the DLL exports all seven module entry points. --- native/quickjs/CMakeLists.txt | 2 +- unity/quickjs/Plugins/QuickJS/x64/quickjs.dll | Bin 1045504 -> 1046016 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/native/quickjs/CMakeLists.txt b/native/quickjs/CMakeLists.txt index d424d6dd..43b32927 100644 --- a/native/quickjs/CMakeLists.txt +++ b/native/quickjs/CMakeLists.txt @@ -19,7 +19,7 @@ cmake_minimum_required(VERSION 3.20) project(reactunity-quickjs LANGUAGES C) set(QJS_REPOSITORY "https://github.com/gkurt/quickjs.git" CACHE STRING "quickjs-ng remote") -set(QJS_COMMIT "ebd53d9542090e027f6c73bae8c3fd8c2ae9f1d5" CACHE STRING "pinned quickjs-ng commit") +set(QJS_COMMIT "30ceffed2c653d2a25b90a955a76422f6c8d796c" CACHE STRING "pinned quickjs-ng commit") include(FetchContent) diff --git a/unity/quickjs/Plugins/QuickJS/x64/quickjs.dll b/unity/quickjs/Plugins/QuickJS/x64/quickjs.dll index 9700205f261bbfb877f0ce99d511ff43dd3edb95..a7dd2bcedfbcffe4b823aeffe1962aca48ef1833 100644 GIT binary patch delta 225353 zcmZ@h2V4}#*Ee(Yb|AeUy?0THQWW$+P%MB26bp8&fS{ltpx}vZ)Uk^tu`8B{T~t)8 zV6Ra$mPIrYHMT_g-t69C`RB{;H*))?zj=M$ZVI^Yf|ubH$R2lxMI%k(EIBANW7tfV^AIN+*G zet{cXrwWi;?B`%R4fuJ18}%#6GV}_3u?^Z5)dZco$o`WRy$q7*V_A70N2$au%2CSw zPrWPm;SX}lFaa;QLEMbIQ5NZIWQPq)$uuK#{BbK;YUI~`$sScvNp)_ZV#=Emn34@S zTrwlmQOaiDuvJAASFZYGy$&qqnyfs|(U)r>UyUqq=2l{1oPh#Ksc}bqb_+RcJOv#i z;U>OD`SxrRH)QfUiM~i;5ak%b^(RFpUBuU9s?@GrY(yGN=Am(9ylKz0Bkrmqc^}7- zapkZHHld{}TT)J>Jj!w8A$BkTEK@a(mx#FLnXo*-m6J?fFDvtf3Rzi>26yf}n=aEa zO(s7jlczXN05l~Gf}a<-W9x|2%pK2sNaDu-P1qhMwq$2i$Nlp=xn`b%%j<}rg}dp* z_Rv6q#yqwwz=JPmNhVng!L|FzO^ZpW4~entkKNjlUo6|>$^!Dh(i|_@Kt5TzwGY{* zJd6&F z%bs5oTW-dBVrT8vzRgzUO#EhgtN%1p9VcDS&op=io9UJ?QywX_?u~2rlAG28sNYg? zI|Jh#+M*cwwc_ebJs=fHmM+a%Dh^P&(i@BDuBBotUAGasfRH$#gAvzNX*m|#)6YxA zrhENtypUc;s1qnFf_rn7jJ37EUDlFPTTd^uwJIWse)IyFyqi8-djzBO2o3?b6%-}F zUacXIY;*C|b0kGNJ{Yaxm))teuBdU=*Or#n@q^SR zxbv%tid|1k>q)Ymok^e7{2;%Fez(5*dNR+>0z0lITkX2y&|31=E*{@+Bz5){B*nh1 z#>=rPjChlXw!NR4tmQ1%gVlxL-p`1(gC&0Ug19=k<2fFrkHbRTekOVDV2x{65H&|X z{C5orc3fd?en~8nxJDQ7`(-PHBZN&e0(!8VG&^=c5yZ)zR~hHGW0>d9^a1Zus~ZR|JZU0t9=K$L>R06%gp7Z^bJJBY+JYDq$FkJH@P|EFJLrOiZ+&5o*C3JTIF#E^GNGtK$$(-OL@s+C@f*e?@iuq9MimGfMmr@j5QDUmMW#lk z3`ji{BfrG`xk_6EoTLK_Xc|Tidv(N5ZjsMkJutaNx_J*o0c5MUyLs(OzEwMDb$X~S zaNl(}o!i{RQ{65*62RbAT*FZyVkrT+$+)^cAL6KTKzJoqZf518EU9_HCb1;dnTVjT$mEU-_4xLHI$(n8HL8^rBx;u~p-=Zzo*;U>7<46-a-iZ@Omhr%b} z1zE&9qBq{Qg%m{uVwDl(P=qCZKAa6}`sUt$40|-67(|-mUYW!*($eB|I+NxydHid| z-1&7fd5k`nkxvFkc0ti(b7Vh!&wz+K+2iD4#HCZ7wy~~=d%8zU)M6~zyR(xw!qv9q zL1!0DQ0^e}j&nVTUX(4ijUql#Q*iccvN_5VbtX5WR_V(}X^T2Zjv2Y|?ea&F!f3Bv zonW}p>2T1%KM_U$49av+CBk|=hKgrLa-8Ym<4oh9nnJX@23u(i&;gqu4-DJFnq@G1`pP=Pj=^SP~f6+^9^F9_x%x zB$M*kIDE>C+>0H7w_YJp-7aA3HN+s!2X!Ekaqf8VB$5&5hrK6}iZ~;^+J3Nkd9AE0 zx`JEPNKVGtM~rM_p!kZiD90SG8$6U$Pq&f{tp}4=cH*&^TNVe#XjybM9FwHj1&|Gm zBjo4=XImD%nCstj@mH*Ui>PON4fIH#xTq9}=Lv12nhlgtWmC3m`qI0p9yvMj9e z1z{OE2<(Ye@L?`4lO^jTRyYYya_iBsl7Lgvkq{xd*==ITIWM3Uo98fnf3@lyk zo(j-<13SVapP3ncf$Q3r$a_yjQu3vD3`!zh``F^)qshoV)9@#E@)VwGM-l5Jdt97K z+!MPXPckvl7Izp$79~!!xZ|b*Jfa6IQozVYR+d^IE6XqCc8}z{WTcSDq!`?01DTsN z)%2#TqA~al^4mQ9MsT}F5bNYX{34X}Ne;$6g30{kPWZw)axHnV>1LPz=ukAAbnEMd z+x90@`?}%fA>^07>r9tA|3}M-=_Iw^2vf74>+-;3c{_~U>*r&95(t!EKP*YHpk2d= zZGTVO$T`gNEMLIW`AslI)+0Vo65I0|_`Yl9?S~RIsd6bwWx1 z)H6tj*bPj>9%-a#po3QS;+B?3d2zw8@uYHKAM75tS8Y%>(yai&CaJ28l2kQwQG3hM zP9aTuwnA8d21y*^vJpnk$`kpyfB5Nrn}*1-AQS>tyy#mlPS5@(E-(mvVnVt$4RDN;e1la@$_WV>|p`} zH86@+PWx9i@fz-n$M+=@M>%0Y?5yE2s3WN#9*XUXi0+7XW?Oz^ivR)?4iJu(N$JVS zWWb2wc-vrdYD6@4oJsP_?A3CZG1`szk95ZqlE}c3Zl=*mAfBug-F^A<_vL(($eNKp zcziOc8(C@*IG8OfC#kg&@0j{>sfqlOZpM;jqXHsPqS9sSpPztG$KCoF zm;%6)eTdFzg1!2Xb)!AqTY9s8{FeB!ShuF1V64}z-sHpR)#e(5cp|g~B2)$YIEHy; z@te5av&fDygYkn(qCeIPhlh~xv3_z zXIM!3_JnnpCq9P;x41DKNKr;7E0;6sN*%gMb~gGoOv)l4S(~_53FJ|Rt)?kYvbVTC zL~~q!-C&>)@U$ebmv)Y1!Z=?&2gX)B5lXqrBC>Ow2j0+)+#4swC%TX?Em2PY}G<34+J2_5wHxoY^#P@pN*2vW>};*l!e~6hHN` zyZ@z;W zbTF{|*5T+>vTlkmzR-(Yo6;Q*=tLZHiZSsgTXJ$uZ2WaZO$VVvBd9Uu3{E5{Hvzw! zLgwTKjhs4=$B%2AJav4_nb5a+a~m}TwHegfrywhg<-0pW0pPF~e?r0e622nK|_re0m*m zo7NUT98LyJ>xdVOBWtEPo4T%RwTBBB9TqS%`)wz3Z`uI-ej*9V>xio|$do)s{76n# z=Q&}mPNXK!$?T6vK)SVHpnp5&OOXWSmw|eh=X-))Kag*QYc0vmd?)-@XYwWA%U9x{U?yea zE^vGqPIg5~4Ai)?j?DVn=U4#y zKb+VU`&+D9rc^1dNCtHx<%Wfj(Z!xPsUuldY-JYI@h7Z;9(lyscO(~!**>>7_DUtFyaV1f zpM;m2;3bPxF$+dDve8ZP~Dt9oc^!?wJukt1S^Ew)& zLKQE*%YB*Iv}PG8nAZ-QU~*tyAP(gsWoLltL5?fLh#x*OP%Xv53Xj{;lSf>fZ?O$T9J}Nf7x<}4SBzcN4^r1%)uV& z0eCZ$$rJfuzVA_HNJ>a#n=Y(lc_MTyXWE)GF(J1}SA1zLv0H59nG9T@Br;!SbBu+1 zpqcK>o)svM2Sx!f!<`IXY?#vb=Q?(A)ER)_WWhXr9DP|&I04qjLx3mz3^)9FkQ8YA z)s56Io`kh@Nz@XV+F2bDcQJ)5T9S(&%_6!>L-CW|BzCDEHh4(#mv+F{0?6T|E_jYL zd9pMdYxX8i)E#$xKzdRmml0s`D`etpwkPn;`+N@q(f69`66p@nXLR@#6*k2+4ZQIXjch%NA?Z2!bnuGbLS?Kfxzw63-Rw z@tv+DeMJPG-Ggje;cj6$Q>jsy>Bq!N0*EX#?hgmjw8GWwjx#T-q^%kNWYrz+lr!;I z>8iV2sO%^!S3UWPq^&fObg_gfS!jdZ%rssmB`f>k?!8FEN^|5uKCkSFCypfXs|Mg2 zQ?hkcuGT0ofyd8_>EJkQi09goPOI&a21#Gt1DD#9{j0-pP#o~ER3ou~`Fd%iiOm`Z zESHkbYaC35OMwC{ztcgWGI~i#-kR=sk{!9Y#vMQVi+o(u7AG_l@3n35)LmrQ+5o&H zhAdy3Z2oWFx1BTVMPYlNwjr7oov`0)5?|2+M>LZ)6~1`qpQOGb1fR4fI_q4MmRT!L zg^77M=3%hgqMw0K$Bp|Lm;%6lKLc4*Aj+D|S=a2=%o_n`xw}31cs^5QjlgGs)H+Vh zl{ax%h)CQ_Hmo15b4Ulcg+-Una#6&5L!TMDdhov1OdYtijuD@1X@H{{Q>F%{nC`~e zYNEz|D(z3@DbJ%h8LdRlm1Q%rm}nu2dB+h~hRtjMU1 zp6DG}x^boNwjwoAS+r^70YC?ABKjdS*&wz9j=Ple=Cnk?sm~=PlR;3kOOK9DWbiKm zHX85LA$q{>!zIP;P!%VS9t8R@MxGeN%~2(LemT=7vs@j}8$E*AqH>u&H>{k@`88oi z8vr-Kjb4u+Hdnm7Mwm$cjGriTDZ~oEvO5)1W}~ztnrMshc0C~^^zZMAgADBkrpCR- z=6_mRCRU0>1EH|L#ZVSQ*$8DHlo}}4p*(@|4vLC+w@5@%GN<6Of5?qZU^bfot@CE{ zea2!+vpMEFvw3rpcs3{%Zu3a1f5Ghor$-*4QS?zQGX`$Bb&5V}WE!>@_tGI_x9o!` zh}~9m=}c`{?QqHT+ToIMwQnWQ&PiNPaGFR*6mV`hU~CPIutbhz`qlz1@2|`eI?p+O zAR5~|b@wpByDB&?RwQ!UBxFwZZTk%uZ6ss1_r#U@Uv~sE$Y~O>xp$;#z5gXXz1Hr3+5gBNHp7ct8aqm1!o8 zm)U-J`?H1LPksw`T9;_<_6+R0N)u8Q+BZcMr0IWQKiUK1p1iF%y?6=NB|?=Mtoabd z5(eOg>5|dAH|p@70Ds>Z!TW^HBw~-Zc0Hpgrt_YLliWSQD1_|Y<88I_IJ+OtgnSFZ zN>pfQ?wYoWh%{u{?zP(68~Hq7=XFImuSXqu(b9TV=sVyPEX=S$7+%Vq=*Um%LoV$* z<^yEh+VOOU|LXVw#uf(trGsL%4Zpc-ZBjyGh|zv0?9h>f?%#^1EGN(Rdl>$zBWk=4 zT>QSXKF(tD%zP7Zs_KZf4v}G10oYibEU)Tm0mWM-P8Onn8BJouVz=3n~cj zETh7+Ts|T_k9xzR3yzxMwur1aDmSk>(MsPRqU0Z0!w=jdk&1{$oYAtR`u#N2aojsH z^0f~j0jB8a0JN`@+|Eo=S4+6=5JUVECMy4^Kl}QHy5tI{=)Dt$k-!1!$ z7b!jAftNRs-%dE`@5w3VcY)(ndy4&$* z2a<-ln>j4Uh4oV>NvCYwKVKG!SiyBdk-}eAdMOHn3(sWDsZj0ZtTUtdsovztsR0PQ zqMA_LQ%<+JaWb&D8{PqCPu11k1WBq~b zK5J~Q1}&iW_)oR3-;;-DE%3GXtdY-=_y5`G7XY{R17c#K?1ca$)wT8}-Cq1y$voZU z_hd@#7?bmj|66tQZ}PFWCq5NLx}BSX-3>_1Ie+|q7WsItr`J#p+83SDkQM!jvM$F# zgcqXZ5L)EsjAD8W?2W_%-aaqj`o1IC=bdq-l&m>F9M`@jY8SGM2k#Rrn+a0AfD3y| z7F_5PR{QMxk(tzG!@e28YzSUiDaSqjhAsIU2m&12-w^wY75Kacskt~9yL2Wlm%3pK z4U&1O3a|S@ye>CjTT3FT^T9g{Nkm-?CLM^pt{yM6BdPV#_IJVD1QFd1zgxGvfxSz z_6;F_Uh%^_UJ|>jhIrXa((dYpq_<7V0Ti|_Ggcq`3}keA?q?t~fcO0jWCrlsCVqxF zO(g1?y>1y}MP|g-b4@m6^0oJn^EdjsFMb?AR$aGCn#VK{%SCD6iY?&YDiYEeZoV4p8!P%7((v3fhGXXzebYdYFMYEWX|=zv#oW&0dUfj^?`hnuQY(;I^62_Vc?3UkN0@ln zG3CU~+%hw=|7JI=^L(%PR$q+gJ}0Sn3jMx9c)szw z0ZI~-eo)3i*$V}(1<&7=;ytD0<=xpK=9;bXVJ7cZu#6QDS!rCoi9+zJH=bf*zFc)F zpUuKst!dnD6SCu;53XKD9^C8O=DmR!uJqty64E;_Gt1A3$nHDgho{N-``xt*gfXSu zQe#qkKLoFcCMv&&;q$&E>UXKx$E!?<36_sk&H;sIf-}(T5y|`A8{->f`|lgISRM;6 zNX4Z8gK(B{`5*~*&?avlIOE0Fh{eM(Sp7Yj{jjq(By_NrQm(8Gx$!U%FX}{e8vO7e za}wU*gk@LB@P;C7mS({>8f`${HDuzNQDpR^g<8`Da01tts6GzB!y-t?09YB7<8(>(lLOd$4Do$B8ef%@RZj!( z@3+a7rzu)fl--?4`)8Bz+fcIYSvayMP0zgW;tRy$xg(zUfaBQ3AmnI%tWsyNG4Ku%%{tSPI7E37B+e>xlWt5;%8S<$tg z%>HvX+CYL|`yxX!`n8V>Z|gF1qn_K`07Vne=Q9#+@#cxy_^DcKk!LTbsG3;N~^? z9L&-1M$)&Id-;g?{}m7Sk_CSm`w~c3aK)S*32VC_yNpvkV8nZwkzz8mwIKFkl z0sTq0x2}5g`8EQd{{EE|zKylGa#M?4rm>5`%imY$ekD)eI^sW`?bUu4iwr+}W*Gs| z$&djGvB>${hmPvBXRfL_Dg1k*_v~8U3~6DE5CJWO)ZU2#^x==t0kx#}`&_JFMlQd1 z!|5H!r}wKYAhm|u`vErCCMqb~E>i}J*|!K_yFQa$A4Xu4H^l6t%&!B2lZpqS-WvP5 z`v$kB1)B>BxQ}BRoC(W$>3D`L{Fp9&{}I!L@z~Hz#2q`$NQ0?qrey`YXzOV@-W3^> z;7>+)EharaokVbJ`FXT?LJhyE+SU%ju7YbQQb)$vzJ_f79F8Ls$g9t`Xg<;X#|sY` zNjm&9RDCe4e9K!EQt_`bIsA{F8t7JT{(DjfEqwnZU;jzBIS1B(;Hxyo1KR@sKsq#J zm4FoIF8xUg|FyzCC&}7>OY!M!$n7e_pGBf0*ilXdnKO?I|vU`LiJ<+sAhTv<&MOp&ogaWz{BOUh8lcSZf!YBJ=j z4-OTYMLPaJ&2#|X+LOn71o!bcPt<;Mm8`y*%X&*1zsBQV)ksjwF=^OuJZB7-c-KzF znXYiyt7a+MGPTfki3zI0ws(K4LtY3a&@TwJH_NGniFi}Fd1(2R2q+`_J0y^VwTBwGk*y94-poSu?H;?1b zbP$~Bveu3QXH1pa}9AKig-=>ct&>T0WK_9jl^ zS>0kB!MDvaZ!!M!S8Y+peSim+Fju&RcGN+x8g(#Ni}9UbX@(Ap&?#jH8DGh5dJ18M zg*wQHUeZC6@Q%(jQWs@ln`5+67j?yf_vt5H6p0^yp&j&)43~DGv-D5`PP#{L>!Eh| zYbe#1!1Kksbch6nnf}{`*@j>mfJl`$D=64>7p;<@C^IyJQMXVT#n&=6IJ}b@>LYv0 zDeJ*>fTWVC$|lTLWO8l#PMV+(b1nUcmg*zVP_vz45d;~9fhGv8CU6*_O)3106Pm!Y z8KmEI7mj&a93ui|Vl;5$AJNzPAU$h$uyqL1lkXqrIDy-{gIXG(MR>+-y2}8K@V)sE zw>C=PhfQF1&f4wY`Z6$F-EeXSquxboW_a9on$`wcdiMOG8EhmD+I9FD$TD(VwpVRx zgG`WF3b%LyL*2~HyvwAJl>Tdq zDo`$6ZH7GY-q-Yk8S=Ji&CYJ-WH$k`b)a390%pWIYHAJ?o&S;!Hb+jn%$MLj;%4sf z4NA;WoJC?RlLP4>2YN4OT&&wRMvqPJ6hl9mqX|}T;dKd_d;p|5Mc)S3II9r^LKQS= zF+Q=3mRO*6wz6-7&bqF!*#71{5^z0>Z_&FJCEm1?{d1UHJJEU#9n zui(Xg>ljIVGkO>YMz5n~)@YRY^EF-(8GD?p_^}a-814K4reMwG6*SNWxf#y;odv|R z%q54O>+$K-)){o74YI=_d+A~uIQU_n^gR4Um#KjrGBK}O%hTG=I;mnU^|nPps0$ro ziw5B{iL}-h^~YP+@S4n%tohGgc>o3sC5{1Pm&YGqs_D}enl43tcz+>XCI#`ew-3E1 zMS=LpYC$Ldvid(qnzx!p*r8xdUeamsSG@U(n6C2^8)3AXUa~{4@Om$L#2$GVhC(d; zB}n7|jYp50=wrM-+>C(NHI3WvcpLZPJ$0aZbqI zxWjVg8G@Gv#}!@8xhi9A$aYlPA+5z#+t`$u0>2{et0I#J(0akQ@ z-g8Fd@E<2>Hy0G!c?#%jMG}LgxIGx*5KQ2c7}%ZZ)>2jQ4w{t`LurAFDUhtT(3Z=VG7e*&*wO#R&9{o%p1r#l#If%LXJ^2SR)Y|`*R2t`p%Pn6-A zw1^+lRN>!&D-&JEMGC+VKL9-!(e<8axYfoIw(cX2)j%D}2Ecl7t?TVC12e z78Yqr`xqyQYG^W&?C%QiG8>EN7he>Pt2JquA4)RvfHx&dx3R2qA>Xf(%dVoE{Xiv$TA);2a^1flu(mt3kDjQsshY!!AF2P;bN{cT#!gP;Uv zLD=&9UB{JMFQk5^OJPyyKh8;jtMbnWT z&_onK?{)y5S^Si0bp%0pOl;e z{)m$E*TmA{F_P)cAn0zfY!mIp^i)SQ-BVt`;}AA4j0CK=iOUv%4}Sm-E}$7<$ivDg zQ(!%gXT9&{=PU~7zA#WE-JPg@I5HQLY;798OU;sY4M(;fv);iSIH-P*T+{fUke&o@ zb4uae^Rg62jbvHj%L0B#RUNu89JSS;j$odLp2(sJGm#1XBOHZTj^BuZ4?w<01@2K;QnED2`DnsQ%v(X>uz3`TkMQYRqGCl%D9GqQ0uVoh#v@q5?_ zPniS^AZzLFD)TtaHdodKmUfw|cuxm*M$fEouU8epn~8Ahq0=KKJ!S9P`?4%WNa84e zO$SGT%e^m`T12BRx-vP26b)Zl$vH_$GqvuD60ue;&Fl&y%4r?l(iK@*-Fn5c2>Lim zWpL{+g+XMHcIyfWw=LW%`lu^^tvLC(6L{!$h3-$-Ep(6ngO7aI+yhoVt;b0Z*FxPpcq@pB3hCMowNi`sQT z#wO3Q*gaDB1TJF?`@y60%?ldW1uW!!S#)$46oJ>Tpxe73YnLKO9brh*-p-~D9LpoE zhk&%3va+s#v^s8JGi~mI?C6OY^vK+ur!qz@3~3QSD87Rl0~^&u^l&$niuX;X7IDZL zFPTh(<500d1$bc~Ff%1Gc{1?Tyh?gG4mjv8b%;mK>YcZ+X)|a-Ja_<0>4FHpB46w4#)Y9M6XA8lgbp1p(>-P!QmK7SpZ0&Wzl!GRWhN45E{+O$`DyjBsEhJ=Yt^LqzD;-pJNjO*r0> ze5*yncpP_gjqy0c^g&r?!0`p{Fjv*N53)w~b04X}!o)uwZSvSwoQ!=$XC|U_v!`&l z3N(FgU<|A{3>v-+TTsm&s1JUP=%5}Dk?8S7Oc(S(wzy*#y1NIm_ePpJqBFCYMuJzU z*ezHK=ez_Wnx)4WOd(ueGqwGiJ35-81mq%K{Er4*7^@K~VXr*C1|ObZ_Q7VFm4Mod zeg75HT?r_~_=G!K7B75Sc(bd8TQiDEd!mH6l<%wf7hVXX(RyRdafyC-R^R`XPVQk?b_PnEi;gtdaCiKje!>Qmy_dPV8K+ zO^@$Vv(;09WFv0=8g^y}2Wr!T$7)9S@#Csh{gFQEJe(&r>5n7H1?W!%m?c1eV#7hh z>FWW=-vuh=-4aU9&A4$Wf)}4~+XOsgWXSp5YZbW8_o`$mC<6Hm`!5RL1yIEq*WCH; zj0c^f>Pet+qBN;{68Z&~ThJ>>s6FlwLbZ}nkcEW>9~EO!Y;~}}`6v{#y{|5%Dak0s zbYDm2r1BqZaXMtiFYYq8wj-@eMke^yE&4ne^~6u2X-Hq>Drv(^bdVyv^?q~-o!A%6 z#*6#X&wWvnh0bgy_v6<>1DLFx2%7TkY8KPc{g5j?nTp2IhJmPEoBdjF{mGw7SMrXkhMR0$DHw-T-idl?!7%**9{u=hEmGhzrn&& zJmyZ+(H&#ZHCj0YEk;c=dMGN#Qv>Mrp=gox*Y|8JCKw)aE8t@X3O0PmteJ=0$KnGNDC0k*c+ z+%ys0Fao9clpFs%C1eZ}l{~C*u#ZhLO!s}HTJ?Y>K zQ2(wBP&<|0$U0N_OE?p2(8@C2sJt!?uU?j|s@lcC)e4Y_8|t z%~ZNIiHiHUUeseEgo!!2WFm^i9sAKo6VY;fvLDTxgv=Ot66!`5WPrlE(Il)*${jAC z;&Et(Zfq;Ww?Kt`i^YhRf5kd<*EkgEop)UgjM!@4(gU)Bw}==u2OZQ0e8RyoTS%}_ zbb>kkIBGKaJLWzTRGiYfRa#xFmPaeoQI(Vy!8LiJkozxDQf&6Ty`2#fU z@U<`+nvIswhDnIx-x_J|WQgB2WYS}kQM(?u!GwXyz~5sAXoQkZcJr1ESd1+4So7|C zHUm|e19nT=AeMtz_8gYNEKAmIZk`G)v=$pKZNUo3s1i8}b7mGm6~cbyVcI(f z?UXRfGXX5mtCEt2yQ(5ua0eSx)m&t+W&DKA2<)jt{c=$ci@EUD9K<8oefI&Lnt?so ziPTJ>D{@gM(`NVrk`Mq$6u6lAB!{Eu+gu3RTpv$Eroz>Z?e~pX$mAh&up2wm(^KJ^ z<9KKKdMfJd;0(qC&$r)mWn!oTi(pE8`jaM318c*TquJAdvQFe7LwbE0O0^jIgOiZ{ zNQt$#S%Q;r$cZ@#R@C>USRdV|cGDp&@jefQS@a$8L(jqnWlst1o)41ecSkxg9|dSX zRKj;<(p~vzBF=kC?WdzjRv*)U7{KmZ!^tXiLYi2L9O#wlD8~N*8v)+M44JIRpHy!= z#4f?*k&xB=DN|bX@pGmnkWGjxQ+3eLfX2;0ZOwJwYp}~jmbPifs+hur+S8Nh@)_uX zdtewNglJn}UP#mvuH@_l7~B(ogXxCRbp;TCn>3!@FF-x;;27#vh>FZSA&~$~el=(d z()+UfHn@YgxMv+`Z6U;P=RTrsW}?NG&j$anO9>?V@Vv>b9xotxm@PxF$Mf zQxEE2gl6GPa4w15(+17=*lc2CXheCZ_L$`JJdMf;+eP zg**zTuZoeq!BJLe5Z1@DiGIC2o0Onfrv(x><0g925i@6-M;)Ebt~uMpExG5kZf;%yqA;D6mX%1-LloAM|N$0AA zur7tZw@YZdQi#NiX-9{aqGFxvO3aNN1yZkEY)$pckR!fbtY{WUhnAsHSQJPvm!Vj# zYs%)K)P4>M*S;z|CqRxK9Xkhn)W4hP!8vfAi*HjcIeKApR2!D4>kogJjuEmH9KkFF zqS?fCqiyDb%lt=Y8afyFXp%oonG4?gQe%2xF8DQ*!s-3FDAH^^mJnR&bzAAt1?Yfo(zp0P-Zh%M9<07O^U!28h<=@i`dChd&!;IO1ME09 zTvVdUZ!k}j<{$L|B46dWfGJ_Y0vf2WfEJ@@y^!^S^(2HOsMHae)7*u~3~#$a$wIVJ z@7Q_PpM?fyb0^`FdJ$THn(3uQ5FzL@kcJTC5HY9&ypRY^Xd)AV@LdPCw*jG=qNXUh zOr`JXm*VeE}EZ>)fO>URqCurI)&>h#YgCLe*{4V_t}Xqrl=TSPoNgdkQa`2 zqA|-*v;llt0r*y-J|npBa=LaI3dL_`)BDRHz_D*4bzhFwm_12iYlQ?@;dQS(NB$~t zrvq(R4m+}cN3B+%Fg$YtO<4i5Z*~TyD}dPyCefoSz#Kfdhdx~a@$P;->5`SmTl#4e zpXkS*rQ$OR5xlh#!QR2$W=H>62{F_g-KhC0BsbH5C4Tp{3b@K)s_&|l9$5u*cKVC{ zy9!kpRKojCCDoF$eVqSG>fLtgA8j#63pgkJC24ZC!*C1#6AsxW1T@WL;VeiJm zmlPlc@dD?e%`UpL0GAgyC;D;?cyo=`)M+h>v$8}mY+((X8$Own3Lj`|jSF3*@#`Q0 z8EHiG*Fj)4kk+n)i7)0Xg7DUunh$6ofwSNK8~>#0W3ugFj$24_bmhbw3H(sRZa`e-BUp!^s$_yrBOG*%7* zEDD2!9Z(K(F^(?!1+3QuH~Qcgu>L&$r4GNMrFxUQ0tIRU!%4Wl1!BQKz4t2w%a%9N zz)dI@Kd`5jn;=}QVM@`HpB$MCf4jzL~OO}lVE1!isfoWRKsL&5Pk(Ws=ykMsc{`>O0>B}va(2!jy z8FbB}U8ofAv7}a&=r#@trtd3(+Us6WpWSc=QqiAI-;L_<+Hl%q56Z;-tm)}J;FJyZ zW9TpEwFFNabKu$l&OMDYr%`)>S}P{g>3iYwzfp@m-3#J*#z89ChpbH2X)%>29LWS& z3w(fzE7zit`@qP_(V|KFz=_UCrn~ncU(+VdZ*BR60SKybH#OMT1`X4HeoX(&<+p- zcWEl^c@QYN%fB?|AnIg4B=~E~@CESs4VJ4q*7(oe#s3fQ}VybZ%5wnTC7;2(nAs z;vIbBYR;YRJq-5j;yC)^FzAEnIaSgl$PnRkLuueqFvW6)(pg7QaNt=5!$9)uOg}LC zUGu@qX7^T#>|XArh^fd{2n>B!MBg0+n|Vfb`7RcHh0ji$ z{}+p*B?i%uJqF+Eik|;{b@VQ78&rP}f*#BMrR`2aAmeid-FOleo7a@{z9oEZ);Dty zYkNovqJlemlSZCGHUW?t^8M$ynEKo5q@sYq*aL;=6)y#(OucpZhb}q=SSx)%&zwT( z7K5dNB#say>l~JA!fR188eN0Jz}_paK~pRi+6v9!o`&g{LoE3Onn^hsH9n2DA}?Bf z8Zxnte57s8FkAK>9eDg2 z4~@J}>uW(X<<6wW=U7i$8h#E<$3ABC_&GGge_ox2sBtQEX*HKFLX5C+BtSr|EMUi# zS`i1ju{^PY-MY+6q7%-eDvQ(3|CJ%2!Ii(Ikr$A&)^9FfTiE=o?$e1EkSQMKOXplb z?IALL@&d@yj8oL$A~^Zav}xaqU>xN5(CmxIJ;<{L?4p*_VDyxFgM-^-+?pT2R>HK0 z7Niq@0}68P{a^Ij$Bq7|3W5Q`TMKemOm8c1W%;Py0AtIOa;j&G)e zE+e!4iSVhorZhGK%WUfkPtg+BlRwYm1MqJ!Xv}1z1rLm_jFK3Lnx?^FmCa*JzzqL- zt{mL=%gEZ}!RzmP3Tr<9157d6Z?CC&9dgH-*JyMdME$F7AW{39NOTVVhQZ%Mir?&+ zmGA4XL!HYlBpD0IG(d+bi@_#o2?$vMORQ8^SWFY{pab}cDb>0Q%ITSe z%I*SI7WvV+cOj9(;cxoSU5IJ#{)1ZI1LNYXFN0gsN%ug4T=t?1?x7Dp>BeC1x<*&< zZXIJ+z)O_i+POc5eJH#=$Pi`XtUcX-AN2`8`RE&iCa@iXOUUi`0m!&Efm{9)j3t_u zJfbnb!*VXv(4ybbK+D4~dD>_XJ3PSbclH@KrV)l3sn9e_v6NapK%RP4-_?B7r%4Zx zN5INNb`io%+^jY%Vw@l=6Z1X_V7Cb(N0+!eXW2)LAlc`ACVTTPR*mj^fI8UB1#qV` zD!!1m?7=!PtGAJT?HSrE+eh^tqFD2N-aHZ3Gc&o>AgSjv#?y%p!Q8KLrH39udeK-{ z+NJ^ZMVO9h07?vdKo>Nih>kKjuyDPs#cAa=EtUZQ&+xERcxZi|_x-cbegJ^zr3U1y z)dH^+0IfA}CRF_qWFmF3qOwOQ#UqDL*kls3fg7tYM1*6?yK=C~21vthfUnJQY(w1f z`?T&6@_lg9&(>#B(u z))VW2-T(QjMQa`-@3AXX7}9w|szD}ijw{RhHskbr@TNe%uPD=nwP5cZ%uQfMq3ToS zXz^0MfpgPS2p(~hV;nV?#3`zL4yT0pCwpbqx^hVwCi66OfS$u9sk=T|ekQmJF^h^g^Y zCN=5>snI8sC!r2fXx)uM{xITQq>gI_^#&b!tLhW+8K0 zF<1|6vg!eYgScVW=;$WEVE8pUzX_OJ^%_0b1ZLuutMp3~%GKuGJ!W104qtqDiF|b| z;nN%n9=4|m=dlUB_7Wub>g^N~Zk+KiSE$=7FnrehPA9xV*2&>lfWnSA7Qo^}?Ek$1 zCkSD{m@Yh(9b!6JaGT*q53Z>}Z!~$vK_(BgMB`Xm(k(82ra)xS531S!5yY3%q)%Q! zAo#egfSH^$I{Z%%u(jrN|DR|x_MS!4UV~%QwT{kyjZ*Bl3=mMn-e&+r{||~j`BK$p z}nTZi=s%Z+hbo-jY zv)(<4zG_B;EyCXNhYQTWRKiHe^$}F(dl4P^7sRM@^XPAXp<40y7DNl)fY`|RKu^2@ zE5g{EYQ9DNr3ddT7X_LXm>tdz>^#uvk&-26xo#I|(OU@q4K$~63FTNW`_k1e)q=VFVAwStM=s}HiSx@#BT zf1Z0U#{0d$-@bU~nLKmm^qjFY8fBScF0;T6T5V}`ykOxUpn-Q^YZ5ITm#N5mUHR)X zN4(L5Th3gmFIfATN4|mRS76F(-)P!fyGiD#Qkd(Cmgl?$i|cZlx4qRkG?CUWoD>ldS@*!~l)JwlE^)G2bc?8i1N=5^~`Tmk`z0df>+PCmF+{=;O zds#m(v@l9YZ-8V!CJ&$S?YAHU6JN5`JB_DnmmEnCt4T7Bf%B6qqpJ%m5SIXJ$2(1B zyXDAWbQWcgW%u&Ugn1u1{T+f`hxFyY-@*3!n*&#W4>}Xul3Tvl+<_KV`2*ZI^WO2M z51OGg^BsGAgdKRGhHHP+I678^I-rwpbT(SaZp)tFz8`U--W=yeA2pHm$8nzUNn_`* z5|OylxxODr49G}sJyZ9IMjmH}Pnr;$vz_ItrI&uTa^Wo}e$u!(dZXF*L&$d4`gZS+ z@q$kX(Ot)fKWXZ4=vRUR99vD*dUB7?nyxO#pQ_0F5}jhz&y&};FQf;KLtkpJ z7tLYW)IW$&52mJ$JWE5ZDf|K#Xvp0@=ODW7DZ553b_SwQW*_8QM8VYMAonBc zMeh&rHI!Gse82!UUHXU?sY>=wMWFOszApl{rYdkEhY6}i50-O(LH<dV7S1i`IUMhE<^8{mZGY*Aw zlwX}Rb>b{z@}Y{S_>M7ox?S8SvDZr-NMdgwnzxt>?4ABMJDQNc-PYN_-zzBXV3-ap zo+i|o`kC=66KYA7AM-~Ono99|d147lbA0d&uvPC|%eb_$YQDNHS?p~}no|v`xSTW0u`tW!yvv-TUEY_HJV&Yl%?-~>Ngw&q-E3_^Ayj7* z*R-HAv=xz^7U-?nZXRtxWqr%Z=0(`ST|Wa&!Ab{WP}K|MawM7gw~Tg)VhTX9>f`fjW8V#GP#Aa~*zYNj>S^ za&Blvm1)auo?u0l>|MH%bb3s=j&oe-0Fg)Od7E>r$d{7R_#Z2p;_QOkR-kEm>y#Q# zGB!`CyMxoM$<^L(hhbHQFAh6+pEY%-aV^-(h6d5nPCVBJaLJg*M{Q^)jeN){TB=1O zZ}J{3z-u*w|J71AI`xSIN|GB7wWa3eTO0wK(S?kv-a5&qn;bTix<;!0cH@3*Hu zF3Niu!!IS#@1lRQm6Z`3=|Jld`1+RvknW8In>$i~raFf?QaSo>JhyYC(sXG&k8uQj z`Ew_)bfoI`uhtu8-r~OGYxk9V>-mKvwWVf=-*TcP*9Ygn7Zfb(%h^c&yyzyMbfRC# zqa~Mg#xA#9$0M96mTFGoW6so>0(P;l3-zbA*ZDUW9KbeteAR`b$n;-!a-|M#8}^uC z88G}{SXFS4p~=#bFl!IbawR9nsk^@uFm#oaQfv62E4c){TaEpSQk$!UGgs-pIH6;K)Eluu^UyS_|-hojmic2p#8TElUyrFvHhV;uWo-@B?S&Y{^&;DRB}duw-MV zPzT;-@^v_3X>bgOcv5HAuP0ToXX=o^A8E%W*asg))Q}PW6T!`|(153X_W{?WRLCX4{%B0g|-cqhnhN{xd@th2u5C+%#WssNlNf5s;LzQqT zE2u0@puESt70PT?2mm^JQI66b_q3$#dA;6Wtxx@Rc(JrQsm7=rNfU8PebZtt>qDt@ z;}Ng*p-hkU2Q`K&jG3jd!Je~T>9>fx_|jR*?8D{DQGJ^Jk%yH7C3u~{8_Q9Kj5G10 zb`%lE^Zh{cCJo?oe$-aefXn&QG`hEvxA~JZnJnNl{xsa>{A1nz!VU(qp;r{Ml_|d5 zCIA@x=q@h_04PV?1zK=Twcnbg5Q1!Sf}l>XThxw$Z^b^J{(E&+_f;6{l5 zjVA_D1u8Vp+7(D%8chIS38I0t?={B+(*&3L57a5ZY9ObecVpx!Mc#Zb80+eLi|s-P zq4k^;LLKPHO+FGrNwlR7dzS~(n=_ju%hN-8ewV!~kQ1#b&DAT=+}a_SsVax%D^rfC zlSQ0@YR1Y}VVLu2_j0 z_)YF9?FYJqnJ;jZ3esVbhH!8&P|jW-dVJ&vuc$i#_ z(s8f2Nq=in4olW5#eptgq^aUZmrVKToLPmgm-m7kV+(#%m-9Y9QiS zpSWr@oF>72s!@GSd)`rvD&VF|=Lm9en*xq>OFQL=I+n>xe?4@NqduNXMvy&ay=K1% z@@jDM$~TuyP27~$UroHAd>&T(c1Nh5VumWM)P7TBW~=1lK36DtdwFIA1jn}{cy9y+ zSQq)GjZ!UAGW>w=MgS={XLG6Q)WY&FWN`-V%TsP=@sR4|N0+U53I0}mc1Q-ns%KoP z`eXCp%XU#7PXf%-#(E)1{r7garpmcV{9kpDn2CotxCYhZ)EYF*%G*FmUMTGt^lgsw z$crjkz0euh#_Q1P1u|7^sww5acbrp`meQg}+&vN);WmMHMN+7JL25C*(aDfXek#9< zq^>mNAh)kYTWRM$wyI6FtUV=QRUdkyQi5C6rn;I+yree$PDn;kKZ@$vxECX4lyYhZ zFN^|W9xcOnqG*su?bVWwXUOy=I&GzgtPN5grM%wGeWEGB(#=q?bUPo5hQM`l5*I{M z{|XDXX<&MYNixWoAOkR2Nnc5OdEE4pC$6T0e=2cf`1&I94Jw0Ag<60Y!7Yjdene~i z--F(Q9Z5wUjqpwO@nLipl8u!jjR`CD=yU~l1UhSNO~30_)+&KgHP-OkXtMal2)-9X zCp2-qrarZB7R^dvK5CNpXqCcbY{!BXcP`lgh`4?@`!%2dIxn~>?nKh6FT51l6dJp! zesY;OsG3Y1WEPwLp+KUuoWlMn*@1b};(lxE`puKYW!6aBi%#%PRF|5lY#qj4u>f8^ zaf4V;gms^JVJ!JqvKj{ZmEIrAm!7nSwpdJzlmRo9e^b<@#n|e)YLTgy-cI3vV`(OB z&g6-4kbf*TNL}OGSkQ%4XV#@;{v1cu9Ty~j+X};6CMK)8G4)U8&cDz&BtW_U3k3&d z5B*kEiam0NHvdqjN*z%O59O*2Da@q{KH^@IeuCIO-R?IW%99#WLSS&CV(8S;(e)%H zHuD>33}ajw!XFz_IWfk>gd>*$Mz7y9p1KO8)zvE%VCgc(;( zq#BwIJSdSm$GX8QufKtv44XN;(mKzXv&5E;cxyqAoZ-a`Bw&ezlR*hn!_$>L{n@1n z4VUrSO=zV1#JO@7s`4dmWSbC_B@eEb5|Jr5aV!h~rin5t$c2-dLJ+=$kesIEs424_ z(c!T7_@z%)!)PYGFG_Z+(I9H5qa-6B?tS9tLTL4Wx&> zn);qqiZ{k|Hv7?^ju`JqzTceo5JK>{1zn}ok366yMRfN?ICXS-edD4W?f#dgYrG$V zp(OXZrUc!AH!iJvr?~VJacQP;ISte&CkkaEsX-;MB-MZTLP;(Lh(0J>xzrN|Md_nP z&6cRCG-0b&w1Gy<K@?@ywT&5WtTO_w|M-OQZ3M+^K)1Fj>m80=8DR;=A zEFX?&t?DFQTT>tEG>3CrLuxs+kSn&K(m`XoOD~m)iLqf)TIGX!IbSyfsDvt{6e-QR z^XN8U45McA?lx4>+4LO@47wL^ldGxm2olUIYx9>jRMUPQ6x$!BsZ8j`32kY-1*y}@ zSEe&xYfIfKKIAW|^Za!`v=C>D9>A0s9v&%cnJkC&5i_OeUv0^hR`Ka$hsS1wFA3zn z?ZDnPuIJy{QKjG~tu2gTh&-kJ)dSe4o#KT5m&V8^HKc*E!YS>vXFx~%E4+P8{tSOLqp;e)9P4Q=9qt1Q&)8mmDJ;*t-MSYn-@B2dY@^uPqQG4QakpEM!6+3oN(L9kVth z{I1xVGdfU&Rdq|F;dPMTyU5{oOTN^BYFnxDg>Lvz_UK6IG&!9&cBIgHrM_h^OZMBJ z1h`3)+~(@V1TR2OwDTqA5KhtGh~)0whm1`6{{MgF_n=-}D~SRvKg-VLU6H~$ zSwoY^K|^b%^RJzuf&AT!FLef0FxtqTUFckdm?aO3bQFP%>uA4JUzBt0a9;dlvi01# zv3wr(6y}tTI+D?D;*#Cr%&68Cd^B?*H|h!nWab8*-4#0Ay0yHwD>Wj=4Q$qpu2i+n zFpQz5$ry|12#j#EjbQ|70r_D77(x!VAs*z9j7NUm@%+KuHe9ni==Az^JiI&Tc$;;6 zvOAskZI=#7M4hG1p@d21$VtipFj1HsU0Un=K?>Va&bGi9kh9LZ6~k1CElE{wwvxRE zvS&}Sp_glLzl(xhX_d4)jYNt%9dIN&koM-btvIF*zR#0I1u)yGK)BVAZUzvGfo*u zyJ+_q4jcrveMLBT8bq_HeblLdK`b9g;hI+=$IrchqhhkPw#UZ|x-O3lf9sSh+}CugqEm)vDKgM_}Yc-@TQ z$$crZL_?5=;iEb4ChTEIUm8ItMzL!@3aatcQPMBDm?CAgxshRhxVs1@7_xc zWIt3pr62f|zM761DIXJfGR#lG%M%QHq9(mWdi)tEQKtZ#FW`lCatcL?@j|v300U)A z0!Ivh0djXT#n~2Z#3E$CN&QzAMhem^Sf`LDy;{N{DO86t?(*Oia)_SlS4^37*^s4g za^=WxvX~dM zScUyYQ8ewI!+l24Q93$|Lq@|wGQBR>AB}zORhN5=hGbl`F3%lJk(4l-FOH_N5!dTT z_!uaZD)lBR$599(QKjHF;HZ3Cc2HqWAWHB91GUIgLOEm%`A3;%eBWG0;JW_Yr6eGY zelCPRN{Oh$^T$woYUj)UjiEIq?g7w8lX=-#_#z4$@bR&;>cz8;_|uT+ zze}YI>Xpk=Cs1AIFy~?vudnu%Aq5E-8y-vm=eS;z-%fyEWy5AJHxY)c^~abeQXFLI z2NTIF_>*IC<9fQr*|M>HZ+Sv&zGI5Y${HLp2^|gI#2qHVpgHm=pPU5U#6-&xlc@ak8NG?k)hH|aZ6XOO6P;TtHNEbfP5aD9Bs zRTfR;lT&FS&FaIQum);gl}Am3pRZh1-Y^YjSTT-oO#_R+c$z(?Q!ml#oo3$3LOWhE z9Yoln3h$dvqn-Eml7`R(h#u%w?k@}giOR%qj!&bIU?xo-V#nvhdHHD zD(9s`ksKn}Y6exSaDBXi_M4^5(o+v<^hnVv{VN&HS_@e+R;#qD#6xG$PWPUXQYz6- z_xi>w^ffXna&!i@u*g-}-x1|-H_ptUh8hk3odIu2!e}lz6K2G!&fH)o^yOvkc+N~1 zm%Kw|xdR`YNu|YT4|A?Do4nX~77XDumfdGjd8eJFb^b-0Z~nz=$`&W?Jc~T2qYJ0b zBF|EXN6IPVT6;Pk|CBGAMdBtNIolgokmag1_J~}{5#`_Ve0vs1!Efcc`fT`fH;(4y z+2rS4vHZ_9OUn}Zn2mh3vXToQoJ~n4=K^%pndQxR>G>3kr=B@eW9FXb}5!`Yv zDC7KAyl5_{LF7n&0K+KF>d2kuK@v#_;tBJpAJuNjFXq9`y}Sb_{zeY&Jp<*)dcjs+ z+EhaoD{()DE<2;De{Nth%S56x4~ zb8$Ja^d`n8-duGdO`$}=i$o`sp2YBZ~5b7bPf;+5u>u-CX=Y6I?v1SgC*n}e5y?G zWD=Eq_@Og9f|TkvQEzulRF;n_mGfQ zx2PY=K*S`;5Ax#G%c-fD)=(pF`8u=h3JNhltdfNLiWApgK{0hS*G#2xM_%pz<1dN1 zGWz04OUUIbH&Er@CsgH6|br(x7_&hD$vKt+3dO+-0|;Rp12y!`oA;0 zX*G3q9~Y&Xn^RSxS<3lq_vuh>kP^m$Yp9aVLpc}7=MubdkM&tY=@x#CbcPS-Y%W>@ ziQq;Lj#&#jSKEbWt%Y>7*n~H%1sxo`h5uX&t>ATc4qQk64x^l5AsU8Y^!W6l*k{>g zRx0;ghuvLXp0n3UAUql9<8U@v$3fuvz2%!GD_%Llz``y z%W6wUN$I?Vp$2evwh|;OWDK*7n}i(K5BTB^k~jFMjiZ~eFe+SWsH^L3kt2t1pm?Vs zA9*)4w9q|1y`gS;SUK)BF5EyP9S=B=J|)kU*z{&mvIiySSN8iI)b-4Jp7J|Ts7e=B zeh1?{ZOC}QPP}n5<#>#)SFF0HO6nDps!{;S9-~U~%q^Hi znUcJD3tU{`HTlC9Op@zLvza~j-Aa~`Ep1h!&%Les-A!n%T&^q6jwH-2&{?RiS0w}$ z4W*bGf zX2rX9!ZkI#B|qIs4J-VL`#$GqKS8KU@*iYmn@vVdvvhyU?$iDCKcxHn=V3B>!ku^F zjHQ(4GrQ;&ygmnZle?eqU&ZF+8oJ|uM2SWUg4lGeRKDeY!(C?1Uw6ahu{MnZ_CS8g zo5ch60IucCdBYy4n5`;v{vPTues2xA@3P@G*-$z~mC0r*H_FwQ1OK-vgLGw(5Y)PA zS$mX0{it17XVNE4iai+E4^1NR+0Zq>g}YoqvLq*FAczCL#0-o}<6VCcmz`*;ZlP+M z@=}#y_$-xvD3x9XNUambaQ`fNKpm|)aW5Ss*NSYvk2-kt{lR{sih?>OvtEfZ;hFoW zk4NQDm>(nX=v6;_(X#?I#|b3KXm;374JfYyciazIFU**i?1%RuU+}yA^h^Av`Eml% zJro*U%yM zN#K_Upkiz#_Bu$8E(=Hnc#Z){^=_8&#ElPck+;p?97)D6FUa2ddui=P8Pyyz-^XNn1YX=(g z>O*k*y7J{iRJ}r;;lxZ+)?~_lt4Z*tl!@NwfNjN@n!5a3jft6D^DuR?k3L#VUZ!DE zW2Y&ljd;<)ZJjNq0ZXST@4u>r`c>)+AAN;neT4S9Z}{aq`*HFw-&u{nzUJ&~ z%B4ebJm)AmJK4Q9|KFD)7Z-5$QJ9Taw&jFlG!!24qsQn^npux$AEydt=PZoU^OW9C zIp;VnC)0P_^8|T&SAK7%yGLCXX7x_EHB)Gcf7Hi6AcJ>O_FUxOPf!~D@_;L!q;Pk; z2QsoKA*V-L%|UyMV5RR-_Ii&A=ZtPEAMW#%ljP-F#EQ z9%`h;QzhaVpF9aP&wkG~rzo`iIJ~HhdmJg9Fz7K=_`RT5dn+_lZa zr8WdJqDj*WY;~6QS{?v^z~jA?S$>>*7WS3>O}O$o#323F3zrP(tv>`xSlKt+)g=h9 zjfja&af8)9rlrdAZB=+=E5q*dhVwXm3;x0FLF$PZmZ(3;DHwhqw4U%VTMJvt{%6)l zpCP|ZLbmeU7|E3%)zb?T{vZiYk0 zqxyY~#6RSPwuIC2-8D4^CsQJPrm{&!=%y!RW9yJ68Cuu=?p*l-xJQ}!Jmvy*v&_;h zI8+&0mJ2Vys4=k$x6dW_GV+7&dQqryy0oM>vfpnn9aVn8i*rF5GA{AaT&m*ai_Dhs z>3Dnw$G*5>=qI+xqadV1s-6d3u=`)!CJ%(3Hf0?#5Vc%*&W5k5jbLUFLL|dtRpFmOBlL4)BzV_U36{$&-_>kay{< zD)O)vKmR6gc6@hWaXI@6MFtmw{zA!~l7_DcS{*d$W4GbW!tk!^DQ$C;ug5Kn_QH__ zG^=3JceqB6oP!^m z;Wej}l%Vt$NAz#;V*Wk;;@0_yNW!BdY5BB(I$U7y>j>&PewAxnM?65CCp_ai`8rtM z0Z{O?LW-YM3SbOZ0@~@%&F$;t?|6Nb3Y&Os%zG6!GH|EcpX_>r@+>zSVAI=K2OGzm zR1xtLu{W`St!{D8o7lMWyzM3ppxkKAyAJ_)2>NTSej!F!>Lqbd#TY4`a*^;(hl( z1D;;x{CgBbKc+C2By3V5TkQmRoPmvl=&b<$6 zbNUWHxsL#=p6=Z90fj=jTlfH;+UKqL;seO8n2YB_2+T8QanwVqhRot4A5tru&#v+e z$&fERm72zbYmq}K9F%0A*2v5jh1A2?gMuS$@(5PT)iXIr{vCUZn>?a^maBC$!Sif3 zeEJbg@U;WC$nT{+Oa%#$3bY3~g4nA^oI^ab8OJQ#St#zNnSf zyyY+IsM(oi^@RFpY~EfrGYY$e1A@rZXP0^MQwp^hDbJ$37FdA~KSgl%=Q;TUt1K zc+0@7(?wCA3!T7tY>JcA;(JBt@Tqj5BO1iKbOQTxY~lL~REd=2=* zJ^?T7Kj2T%`>b@kWV(je<2juY0FlyXFW38Ag8Cs*CRVz^|;}7=!hf*{vng4;g=-wXA z{fAuev)~_cudp6*!i7QqYJ>4GMtsmG*|r{Lo?-GeQ=KX1jz0bCA*qs=GHMT3enCy0 z|G1@METrQSaWVoI!PK}RyL~4we*qU$;%)xt1trqmx*YYAT1g~*Nu%9*W2D%w=ZcP} zb+{fiy|P)Mr>fkaR*((7{41(x*WrZZE$Ip17TA6;j4^e1$SZ1w_~28osJ3H%X9HOU z>3A#2YOd0CH@p2y7by|fz5fMv{vE}Y{-ZU>6`21Y^nvFuxa4ab@zvbmHC3^mizTUp z<|-#X@~^L99~kDy*IxsBPG|Gm*VKi4c5vG_6e8YiH{+81OdKO`Z#OfF&gi6pZ-01N zhZjB4l1ETsy$N59pmq&)lo!DFqlSKAFVuyVQ^&Zcc<<*sZ-DZhu?rSOrVuMCANeL$ z+^2pudEz_p3-|U0nh1XJJVh%z-LRFfy`xN8SA$2q$IT&MR^9{YOT1$L59I57#9rpf zP<>Q7l}PnP_ddzpKTt4o-pu^~Z({csd2YZ-p|0n{Vs1e<ZGq3$bWgGZ-g9^zW^^rs=rpn5F7%5&2n8XP6 z(k;}%6xSbyF@#R4gB&@=+RrczKibGapDDyC`IsSSS&9d$+8U~KI>rM(Q!G+6?fr}` zJ=T)lzW@w1e&@PhsBu7bNb5S-eb>fU72)O5z*S?_v7nHCp)IzPJ@p>SbKS6yPyXWx zF~X5&ex-VD7N(M#%fvl86~hbQkRHc}M>K}imeF=W2Xz!tt{srdSDu~c=0%XuemTNR zjD;`%UIZKURlIzm@+h3c9@>G{CX4t+5lyjV3%o85t`#|-=l2%PX_m$OBf^~??4Ex| zR3cnPDX9^)DC0M7q7gMHJCkQ>#3nTzZml_B0W3t|^E=!<++kUfJT?KuW?so?s%X z(}ewe$V616yLmGZA3hALmL1-0rrRL~a4kG7~N6dRu;CCdS)Nv(taQ&<0-%l&lnU;jEzwn|PK5 zVC9ZS4lG17+ovV<)ygAeNr`)^TS<_mXc}C!7}qk8*Gb|+z4UVu9X=nHTJ{eJB+V4Q zyRv?_6el&*Xaf(j7R_z_wfbHMwm`4HKGya6%v!|KejBcABf8V-*Sy3=OrY$y?5P#a zX!J%Nsug}AO*hITnQ}L+Lr;Bj9lZkNf)Lp6N)YK|x{Y(RBG~@M)}O!RY~}3Q!iBwT z#Y)>CEB$1KG{s~xU^287Bk0j}Zdg)y(xhkHx1y@vYIj^MXNqa0fqLdg4>2*sf(VCvFV^cd(hK{e}AUok|KW)>`4O2F8 z8#~~@Tvwi9C$cQ!FgBpN9(61Yqa7L4x$>}{lrlY zVu{1xH&X96(>=qSqQ&8}UNDhgItY8(yMjwNin>-^kER`gcM@gkPzn!rLi+~md76{x@AUqL!Dgq%Q;p4+8b8)%>5MfV zG3E-+qM`LbIYme)2~U-*ojlE1H1cS5^@nyT`I79*oEz(v+iUq>XW>sf*Rs2dSW3xx zyx&E%Yn`9}Qxl0?tMFv24(Bkww1?tWKZ^8*2-TP%4H5auNLgC4M!`kgJAhD7r@ve# zCiE(w`@4#n4o#3K<|kMU8!KVupjpi2+(dcHWCLJ|u1UbGr}{5A(o=YHId{>7uKvR# z-GzG-zeV8vJ+$NUdT0ma{il6$2^x%p#TW~?RA6C}ey=F4ZS5gtgt9z4Zkr>_dlP$fKbG(T|{VVYg6Ee(_n^APUVLnJu$_Zu|a-b1)p$|89Z zmAh9s)k7T6l;oP8Vi0Bi&09S|W&d5k=RHLoI=n)PkRjHCio1wX?D!WH`Gg~NxjK3_ zru1@%BStrA0%X9iQ^PQq*5O@8@RHJ^ozu1D5|m+up@8EkxwjZOQAuQLFENJ(Jm*X= zQ5h+yu6hZio9AF};Xy-x1C{sVA>P6pde3j(!p~ddBU3fwFh>@rsW}xQrzH_3S9w^I zZ+n9#;ToN{XlD92M_PxfacX4~ch*Llm{RrGxKJccIqk$l^?D4*#a55S)xA(<>=JHL zR@j%8yR3G2PxF zFY>{e>~fON`-o{Si_XhI<#8`|=*eNbEaHB?BF=67R9rl?6)|CFZ~5LU0N#)Jgyj=BmXyM zQ|Ug7dsh%cf?mxuAeRKSewDX>DAWa)oSw-gLPZ(#R_cOgE5TebR7|lS&p~46A=N}A zg|x;+D`DqtHdQ5v@;wFwcO?}r(JM6DB|U;qZwmiaO?0&s^-lrR8Py~jt z=DY~ej&_{mkm|x;GmW=b1C#ACnfp~2ji}UQK3H7@)8k3F(zTByxR_Om!g?skQs(wE)2l{$xkT~$pB`++OF3|= zcHM3Ls-Ks^s?E4Xl;}*Sa(Hi)Xae)9MYM23ie#NGI1`JRRHR99)2%sl6kG(Ljv!rF zqVk|OCqxUMq$S-^`_}lU1`;RFq*SNsj+Ju;A&@OXmFB(FSxf6fVS)@0ER?xFYSotr zujlV`wtQm*hF-pm;fv8?y6wE1`gz~{sy{^w9$ilaxm1ZaSh{rP<|)Ofb5A1EJ>^}pz67RjOT0?0 zq8b#Kq5^&qC!#qtLF^^tGW;w73YDoRJ2euK)@}y0&QrduF5 z(WKhO+Q|oi9Xh;iWv1M7=h}@$X*%rANsS?U1rFggjYX0(&IeF5Pf1)WB~Iy?H7#(1 zRLa4>pmt|RPWVMswI7iSsLQwNk2t9H*DKf7@WNk2HyYHDzy2bsN7@eo?p=>u4N#}} zz>bt$I=uzM09kZaX)|1XSHLDG<^`_r8tuhFH7c}`@1)^{2be!b&gPVc&{(gx;y)US zAh%7eti*nM&=18BFr|M$KQf?=4rFhX;+iqa-VO*~a zXv?$X!CU7v(T2!~QDkguF6tQyvC()V=1_kw z*+jIWZkxGJ6ETqf>&Lg62rv7K{Z!UMRSc}-kG1({xM8(>P~onv=AAWeYyk7DOXvA>U{#>S~PGqn#K)bC@&Q z2|xR4NA(9|ys3IH@|6V(bU1UjozU9d>!KnXCWQCKq&4rK`~~g7W~y}JYVDzuQgd$K zUL@hEoI~wJI~y?kxUOf@j7w^>OpJoKTn90B{Eb*Mqp0aMor_}L>3wETm6$|;JKePC zlzMCKZzw zx}w?sT80mQqhqi!*=Q`@rbg8k`+vb$s`m@D`vYVJwfMKTs3_h7{_hO%pOWwcM2Dcp zw~l|)b^H{K^OfNZd3ZfbP{g-xufv12s2_B)GXuDaI5T5LV|a&`!nH zytzEH6F|4L4$nz~zMI!c*m8Cf1d-33L~HkIlYeN}`HP|5i#eoTf7Be}9i2pJ-j*av zYHstz&cc;%C5a4IpGiNoO!#bQd5e#Bff%%kXD8tvS$1bU>~fwZs{!Iqif(P?S$83sB3LGUxx)=8T>4R--Cekp_zzlgVI@xQE?&~bH9WQlR9~nTJ;X4L zPgX!r+~%UkA9;T-(a1vGNO}74Qb%u5U*p4VdJ9jR514^eQRSC2Q*hr%1bF(xCv6j* z3e_#SG`377^Bv`ijfYV;|u7iC{b!CCbx@9z3d#DB~=v$bJhD#b~s@ znnXEJj%Ve0cOOx~`%EZq*{9XFg*Qz*`3_h_TtqMrzExUgIC6UoWV;wIp16^++UosFpj4tBBy(jK9eGJfKZDvuPe3Y+K{ zfV|CGbZVZrhXWh;ht|HnD_89=0_}V(j0)PL$6`83={ZxxjA8#97 zElWOVm{JBKx*!H4`qVW2qleNm!SZ5le<+r3FZ28UqN7WdVRCMgyUA0Nga&G@7n6A4 z08vNo`f+JWu?)yMFhEq)P|_0qXP^jkTN0x)6upF@=p_tAZ>3mS5#bb<{JG{JF`niu z=0k%p`yTc9<%fKjX z?i8peM%5aaC7WY{>me%^Zi(&M*f{;@QKd9ORAp(jH{Tg7s#%r()^{*_4*?Z74dn(y zM1A{b=0k7ShJs0=LqtDt5VIUdes-3x*1R=Wc^l&>-`_ zyq-N1T>vyWuz^Gk6~5M4%_03}ordSuzn~ot845M)Id0Jmg^_gLYz|5m?KKWOJz4a% zhTN$ah?9_tHU&q~gI!W^(kgJH6fu+z%;n=LViXni<=Vp_mz@dXDZ|9cN)NF$1`#|7 z1Qub}k{$PL0R07F4tYPa>|*OOqVZgr0vOcoW)>sM5r)OC{h<$B><507z#$}G|G8R4!ojgesT zlzg58FKnU2`uauKh6C_mCx9G&wDP`~=)D{;dq!p(Wzw~tG{ecYbSxeR7J7-Q4PTKih23#Jv_};(}kB!-a&+A zVlFSSj)m8_`gBpIbrM38p%h^uRigLlcF-gVAwGtML|yy;7BXrba?Q(D$#r43Rxvb6 z)flC@0t@~1AiJfDa&##`T_W8MXRlvjdb3Cq%M{C`Mva?=<7$ z8G8K5ozq0Qs^JH}o1wW5)DO;oo1w$iZ!>IL4C=;wI8Bs6?B;_sn9$ew>*lewvYbaC z5@I*}Rg?=Ded_<839?HkDqo5Wu&Q^37o&RB&qzgC3@d$Ltl5=sGr4{F|C@;;zxx$4 zDa)?um`Pth-Aq!#HBXKYlM*_S5f8Kl~n#x8{7~{J!e|zbpRq+vTUV({>tVpz zgKo_b-3$uxQfa`Bb3|bI9ZQALdi*E<9>9Mm@n0_f`xpOBUM7ro;lJwmuLb@axQqwP z5y`Z87(bpP29)?X0-CfR4}O5lA^qkGE$!$j6=^5_ZLV++`n#&SmQXz}mOeAw?Jg0l za<%*-iN#VLzNbv;#JA?cWir5zZRd%K9-kr&B7C(JUB>JT)#HZNgMzr@Jh;X7;jVmq z`gQ%iW1|$+QUWblKZr#T&am#+SeznUxOpGQ*XD^Pi78doNwxTKQnLb!B?Q%hhYROp zzAu7movZXg2>@6_s*v0DwFTB^Q7}s9US9A*-KKlW)%Kh=U(6uCQtY$Zu*D((5eXd@ z!@Kan87hP5p-E%=C8Dh6FRr!(oNQJScUl5VvMEnpA_h5KgD4XARv++`T&<`97^n4v zFKoS31Zy5~^`&AVJ$uAgmO^@;{fNsigG%Vw@(V;(RY1(t@#;)uTN}Mhcxcw}qGh7C zFs^072R8_33&aXZ6jwCNUzQ2?((}Ak(V~|WEnr7Bjx?8&Mv@tRLa?yrYRe&som|dM zjssm&mkX_?KhIt+%A46h_y8-+=Tpl?bxk5`RtV{iSm?NCRD7nw@4Y}j+vJV9p3c6#=ct7LG}3gLuUtPv|E=5g*t5G*b9FJ%33q5uY*8wy;j|fVrq@7*KnJXJtaIiQx^IBE^2iJ!wXk_qJPP zN?goT#(HwamBP=Zaw(7oM+oV&Y*UERSeg|BxxH-l2FHXNI&7<)?ol@*J{ zL#JQISu62sZ46&WXY{-cYgUPJ?%hjjWXdA#6c2#A=v3UKQ(lw48jqO+IG*LYt3>0{ zc!CXcHONl78#cE9NF5sd%{x|!%KqofW$=2oR1aZg=siQDbMGS?u?_`vD_QBz)~iJg zab=Y;kFRXv1FAS^wdgAITCNs8o+ofq@W%$L+#vTA!8GRZz8^cT5tXdFMF7Zqqvb{h zbmtapguhi|HTx7%#U>v~j)`6Yq#EsU8JvH`y3z*UEEpA%aD)XE*M$$PPlUZN^ zMNgT8-^I<?0_N#pD6y>q7JaXr?Fol<0#s@aQ{N+7^ z?`%M~joI^e5$1CsT4EH4-L%ty<)kBd_$DMTQ{|@#+h8Hs zs~T;JCv2=vSiBBUsYz+1fr=lXPxR=goZgN9Ej{FHA z{=#K9fq)ip^G(86Gl@rS!d~MJ=q6whUJ=+N9R17n)Xl82uEne;Kg~>%FwATPf8B)j z#NOmrw;&+b+APd8e{h4%=r5MLZx%5Q$6RzXT7pDedY~QY_Z`qa^MlQxtGR5mMYw3* zu>TgoX;~u`PMFh(EuxYJn=VUTb)_`dgg+cr+b{&_2SEu9Rn7ls(m9?7kH&56N2gEHNya(Q&EDL_OTa47it3M^k_F%g2_}U&( z$$5<(W|I~Zim4{Y$7V!E;S@ooie|4rU>;BAxIaXUr{{N->Z8)JwrZuz_@gbI%E5nN zPhayHS#^1-Z~fIl)wa5-eZQ}YUb6tVuRK0WL}*U%zAVT-8~AFLC}*{!H5Au)pI+GY zVQjirl(nyelDM?G+v76oUdP`JK>uxAYcF5z!E8XRA|FBdrfkSOc$5KhCN_NBBRYYzi# zXNPgOy|B(EY9P{O!?P%@>-y(`v3(;s`LJlM+0K6+MwqdY3ws{HLETuB>m9*>Wx3B0 zk>*kW;}MwXsvvWtFqkNPZ{Q!;$xFA{DqE~aw%6U+5RNW?!E`D8$%3@$ z)8)T1tY6QTw}E5AB%+g;u;*A-y~^;FNj4AM^iQWyfP+V;UquA9;f7l7q!G?V zvD$ixw#tnXyyv*6;bDbHDA-|R5y%@|<3x%%j0;%>yVU_B5q5b(xJn*z0>b-B9(Pjs zg}S`JvZoZKI2RqqF5Rl67j-_-n7OiTp{HRUQYOn+EO_+^kW8?U3a3PP;JInv52u~H zQa4g%NKDb`cM{Uy>Cfo#Qatk%_`<*{JpQC87xMJEZd7}9)H78Kqlz(ee;)Dn2flO? z0Z*L}A&emd7Rm^!;uRJTIibc+L(b-mQ&=YMd7MHt_->e)^XG5FflhWi8RvwVe)(;N1qW+4X#Z5M$zm6eI;zHo}zV*-X{y7$Zkg+o&NAt zv0os;r!!4{Q&<}D3Uo$q-|*fuP?y5TNP^}|;|kdJEYSb`1g>&c1UEQ4;itg@kPKQi zAGRzWY#r(t2D6x7d?LQnj_UF6XCX8yuldwjG0s_Mg_Y^fx>J5&7BjQXtofcbbB(?6)=S?%h3ELj*`Nhl z+ezg$Yo@09#G|GWBgN=ZZ=sHWqdx(qUgCGC49 z*Pte5dM6k8PFep7a>50%#nE)3^Z5p;1*9&1K@~xs#tU8 zB}hrH3uHu=p%rl9^53|cEJCTI30q&rr1tuAmCN8i6}kOoQQg_`EzIU=F+HVV)Ci#% zXP?SPLc-7S*2^#jKjs^kMIE;}Z@yKEL!|^=r5^ahe_V#H){Wa-L0n_VSYCMrJgE-f zx`Lsem1ESg?k&gQ)^oT)C8jY8K=8+K^i@F3BZ)g-6*1ato#Y_HTNh^GoB12w zb5*qP+o_k3r8EM5Bjo8(b*}Ue;1!8_1*AP!yaqvOJ-56jN=HoVXy6s&exNwBL2+g) zE(J!?WgwN*!}W9|Os^j?Z@mW7!7$FbhQpn@l>fN~75^XB=0gQaRk(aU#6DzLmEeWh0mo_#t;O8LdeLP+rkdSfA4Lel1FQPa2ugaJCHH@wrH;HlnW3cU zooCDJ?Ck99gvGExI0VfK>eG1*Ex4yETk%PPnbirs)F{Wiu&`gT!G!PN346rY7CYNd zl%sU#9u}Y<=4IHm%f(ZnIi1*acc=M} zu$+BP`Hvun54lZYk9Bb+Hjfl_bxwJWBbSeLWvqtdw{qn$?SHKEvKlOYY(Gr*9_y-D zwGclh9VW*=b%CY5k64M07jC>LW^ts?%%#?U!iwc>77h4QcT}2uld3(@9kU;N7$
  • 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

    vVWd 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 IHy<7JKl=TIumAu6 delta 224466 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 z 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

    ?B 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%0AOyoh-bS<}oDBNK!Z|FSfG1{xekL)}91?^tT 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