Handle trampolines correctly in new FCC API + usages #9877
Merged
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.
So I finally understand what php-src calls trampolines, and they are extremely annoying to deal with.
I've taken the code to handle them from the SPL class autoloading mechanism, however I haven't yet figured out why SPL copies the function handler when
fcc->function_handler == &EG(trampoline)
.This makes me wonder if this is the reason why no FCC API was introduced previously as you would need to carry the zval callable around which would would recreate the trampoline each time.
Moreover, the refetching of the trampoline which is freed by ZPP should probably be part of some explicit API that we provide if in the end we thing providing an FCC API is sensible.