Conversation
When calling a function with \% or \@ prototype using +(%hash) or +(@array) syntax (commonly used for disambiguation), the prototype handler now correctly unwraps the unary + to find the underlying hash/array variable. Previously, +(%hash) would create a SCALAR reference instead of a HASH reference because the parser treated the entire +() expression as the argument instead of recognizing the hash variable inside. The new unwrapUnaryPlus() helper method checks for this pattern and extracts the hash/array variable from inside the +() construct.
When a string is assigned to a stash entry like $::{foo} = '$$',
it sets the prototype for that subroutine. This is used by code that
manipulates the symbol table directly.
Added STRING and BYTE_STRING cases to RuntimeStashEntry.set() that
create or update the RuntimeCode's prototype field.
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.
Summary
This PR fixes two issues that were causing the
comp/proto.ttest to fail:1. Fix % and @ prototypes with +() disambiguation
When calling a function with
\%or\@prototype using+(%hash)or+(@array)syntax (commonly used for disambiguation), the prototype handler now correctly unwraps the unary+to find the underlying hash/array variable.Before:
a_hash_ref +(%hash)would create a SCALAR reference instead of a HASH reference because the parser treated the entire+()expression as the argument.After: The new
unwrapUnaryPlus()helper method extracts the hash/array variable from inside the+()construct.2. Handle string assignment to stash entries for setting prototypes
When a string is assigned to a stash entry like
$::{foo} = '$$', it now correctly sets the prototype for that subroutine. This is used by code that manipulates the symbol table directly.Test Results
The remaining failures are for other unimplemented features (bad prototype warnings,
%_variable support, etc.).