Process-global registry backing the static GDExtension class callbacks.
GDExtension callbacks are C function pointers and cannot capture Scala closures, so all per-class and per-instance state lives here and is reached from the static trampolines via opaque tokens:
class token: a small integer passed to Godot as class_userdata. The create/get-virtual callbacks use it to find the ClassDescriptor.
instance token: a small integer handed to object_set_instance as the instance pointer. The free/virtual-call callbacks use it to find the live GodotScriptClass.
Using integer tokens (rather than raw object addresses) keeps the GC from ever seeing a disguised pointer to a managed object — the Scala instances are held alive by strong references in instances until explicitly freed.
Register a freshly-bound Scala instance. objectId is the Godot instance id of the engine object it is bound to (0 if unknown), used to index the instance so instanceForObjectId can recover this exact object when the same engine node is later fetched through Gd[T].
Register a freshly-bound Scala instance. objectId is the Godot instance id of the engine object it is bound to (0 if unknown), used to index the instance so instanceForObjectId can recover this exact object when the same engine node is later fetched through Gd[T].
The Godot parent-class name registered for className, or null if unknown. Lets callers order unregistration children-before-parents (Godot refuses to unregister a class while a registered extension class still inherits it).
The Godot parent-class name registered for className, or null if unknown. Lets callers order unregistration children-before-parents (Godot refuses to unregister a class while a registered extension class still inherits it).