Repository navigation
Bind @JS functions and setters that return nothing through the Void overload - #81
Merged
Merged
Conversation
… `Void` overload The binding closure now declares `-> Void` and no longer returns `.undefined()`, which selects the `Void` host function overload in `expo-modules-jsi`. That overload leaves the result slot as `undefined` instead of building and writing a value.
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 synchronous
@JSfunction or setter that returns nothing now binds through theVoidFunctionClosureoverload ofsetProperty(_:function:)from expo/expo#51498. That overload leaves the result asundefinedwithout creating and writing aJavaScriptValue, which made these calls slower afterJavaScriptValuebecame non-copyable.The binding closure now declares
-> Voidand no longer ends withreturn .undefined(). The explicit-> Voidis required: a closure body with several statements and noreturnis otherwise ambiguous between the two unowned-thisoverloads. Async functions don't change, because their body still resolves the promise with.undefined().The generated code needs an
expo-modules-coreversion that includes expo/expo#51498.@JSfunction that returns nothing, no-opTest Plan
swift testinapple/: all 360 tests pass. The expected expansions of void functions and setters are updated.expo-modules-coreiOS unit tests against [ios][jsi] Specialize host functions that return nothing expo#51498: all 872 tests pass.