Repository navigation
Add JSUniqueRef for bridging to non-copyable types - #829
Open
MaxDesiatov wants to merge 1 commit into
Open
MaxDesiatov wants to merge 1 commit into
MaxDesiatov wants to merge 1 commit into
Conversation
Member
Author
|
cc @sliemeobn |
kateinoigakukun
requested changes
Nov 13, 2026
kateinoigakukun
left a comment
Member
There was a problem hiding this comment.
Can you split PRs into series, one for adding JSUniqueRef, one for supporting @JSClass struct C: ~Copyable? I haven't checked the details of BridgeJS and TS2Swift changes but it seems like containing a lot of the new things.
Also allowing the JSObject -> JSUniqueRef conversion looks like a soundness hole? The opposite conversion (JSUniqueRef -> JSObject) should be allowed, but the "takeover" from JSObject to JSUniqueRef looks wrong because we cannot ban the further JSObject usage after the takeover?
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A
~Copyable@JSClassstruct stores a noncopyableJSUniqueRef, and generated bindings take these wrappersborrowing. In the newImported objectbenchmarks, creating or returning a noncopyable wrapper takes 15-26% less time than a copyable wrapper onmain.Median ns per iteration:
Arrays of
JSUniqueRef-values are bridged asUniqueArray, which is made conditionally available when using Swift 6.4. No dictionary counterpart is available, those either require users to manually add and bridge usingswift-collectionsdependency that hasUniqueDictionary, or bridging those as usual copyable values backed by copyableDictionary.