Fixup global method on realm and add reborrow variant #657
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.
In #650 I did implemented global wrongly and cast hide the problem (
*const!=*const *mut). To fix things properly I addedJSObject *const * JS::CurrentGlobal(JSContext* cx)to jsapi which returnsJSObject *const *(CurrentGlobalOrNullalready deref the handle to return the object directly, which makes it harder to return handle again).Also existing code made use of Handle very hard as we cannot use &mut realm as it's already borrowed by handle, but the only reason we bound the lifetime to handle is to not outlive the realm. So by creating
global_and_reborrow(&'_ mut self) -> (Handle<'_, *mut JSObject>, &'_ mut Self)we return "reborrowed" realm, handle will not outlive original realm borrow and we can still use &mut realm.The callback test is using these new global_and_reborrow so we know it's working now.