Perl_newSLICEOP: Optimise '(caller)[0]' into 'scalar caller' #23369
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 subroutine can obtain just the package of its caller in a couple of ways. Both seem somewhat common.
caller
- in scaler context, as inmy $x = caller;
(caller)[0]
, as inmy $x = (caller)[0];
In the first,
caller
finds the package name, sticks it in a new SV, and puts that (orundef
) on the stack:In the second,
caller
(a) finds the package name, filename, and line (b) creates three new SVs to hold them all (c) puts those SVs on the stack (d) does a list slice to leave just the package SV on the stack.This commit checks for the second case inside
Perl_newSLICEOP
and instead of constructing alslice
OP, returns just thecaller
OP with scalar context applied.