AccessBridge
Bootstrap methods for invokedynamic call sites emitted by the access-widening bytecode transform in ScriptWeave. Each bootstrap resolves a private/protected/package-private member via privateLookupIn and returns a ConstantCallSite, which the JIT can inline.
This class lives on the game loader (not impl/), so script classes loaded by the masking loader can resolve it via parent delegation — same cross-loader pattern as ReplBridge and PatchEnterCallback.
The call-site MethodType is not the real signature. Widening a member's access is only half the job: a call site whose descriptor names an inaccessible class is rejected while the JVM resolves that descriptor, before any bootstrap here runs (e.g. a descriptor naming package-private kotlin.collections.EmptyMap is rejected). So the transform erases every inaccessible reference type in the call-site descriptor to Object and passes the real names through as string bootstrap arguments instead.
Two consequences for every bootstrap below:
Functions
private val has a backing field and no accessor, yet the metadata flip makes the frontend emit getXxx() against it — resolve such a call to the field instead.URL and _options keep their head.GETFIELD call site.PUTFIELD call site.ref's hierarchy that declares method with mt's parameter types — the method analogue of findField.JvmAbi.getterName: an is-prefixed property is already its own getter.JvmAbi.startsWithIsPrefix: is followed by anything that is not a lower-case letter.cls, or caller where its module refuses to open — java.base being the one that does.JvmAbi.setterName: the is is dropped rather than kept — isEmpty sets via setEmpty.INVOKESTATIC call site; the real signature is in desc, the declaring class resolved via findMethodOwner.GETSTATIC call site.PUTSTATIC call site.INVOKEVIRTUAL/INVOKEINTERFACE call site; the real signature is in desc, the declaring class resolved via findMethodOwner.