Skip to content

Fix parser and language compatibility gaps - #1883

Merged
fglock merged 30 commits into
masterfrom
fix/parser-language-compatibility-issues
Oct 26, 2026
Merged

fglock merged 30 commits into
masterfrom
fix/parser-language-compatibility-issues

Conversation

@fglock

@fglock fglock commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

Summary

Validation

  • Full nice -n 19 timeout 3600 make: passed at commit 2962c4465 in 20m 55s.
  • make check-links: 567 links passed.
  • function_parameters_metadata_and_strict.t: all 107 assertions pass under system Perl, JVM, and interpreter.
  • Added prototype_underscore_warning_diagnostics.t and signature_named_validation_regressions.t. The named-signature test passes all 4 assertions on JVM and interpreter; the prototype diagnostic oracle passes under system Perl, and the focused PerlOnJava gate passes.
  • The reported core tests now pass on both backends: comp/proto.t 216/216 and op/signatures.t 1222/1222. Comparing master showed both passed there, while the PR parent reproduced 213/216 and 1220/1222. The fixes preserve complete malformed-underscore warnings, report unknown named keys before missing required keys, and allow native @ slurpy signatures to accept an odd positional tail.
  • Function::Parameters upstream follow-up files pass on both backends: types_custom_2.t (4), types_caller.t (20), types_inline.t (14), and types_moose.t, _2, _3 (49 each); gorn.t (4), precedence.t (11), and types_parse.t (2) also pass.
  • The last serialized 56-file upstream run reported 45 passing files, 4 errors, and 7 incomplete files. Remaining gaps include composite auto type expressions, runtime errors in elsewhere.t and lineno-torture.t, a warning-category difference in stringy_h.t, and incomplete upstream files. The design document records this classification and the exact incomplete cases.
  • Perl core op/write.t: 636/636 assertions passed. Text::YAWikiFormater 0.51: all seven test programs passed on PerlOnJava and system Perl; format.t and urls.t were explicitly rechecked on the current build.
  • The focused Object::Pad BUILD diagnostic test passes on PerlOnJava. The format argument execution and lexical-scope regressions pass on system Perl, JVM, and interpreter.
  • GraphQL compile and request-handler checks pass. Two WebSocket ordering assertions remain timing-sensitive on this busy host; isolated probes pass on both implementations and the timing difference still needs a less-contended runner.

Remaining work

This remains a draft while the remaining upstream compatibility gaps and GraphQL WebSocket timing difference are investigated. Issues #1808, #1596, #1361, and #1234 remain open on GitHub pending review and merge.

fglock and others added 26 commits October 26, 2026 12:38
Report malformed Object::Pad BUILD declarations during parsing and preserve
multiline regex searches constrained by positive lookaheads. Add regression
coverage for those cases and executable nested-hash format arguments.

Generated with [Codex](https://openai.com/codex)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Add scoped parser keyword providers for named fun and explicit-invocant
method declarations, backed by the existing signature implementation. Carry
provider registrations through lexical blocks and eval sites on both backends.

Add coverage for defaults, slurpy arguments, methods, nested eval, and lexical
removal. Record the initial supported subset and remaining work.

Generated with [Codex](https://openai.com/codex)

Co-Authored-By: Codex <223556219+codex[bot]@users.noreply.github.com>
Refresh active lexical cells after assignments in code that declares a
FORMAT, so deferred format arguments observe the current scalar value.
Add a regression test covering reassignment before write().

Generated with Codex (https://openai.com/codex)

Co-Authored-By: Codex <codex@openai.com>
Preserve the in-progress fixes and regression tests before further changes.

Generated with [OpenAI Codex](https://openai.com/codex)

Co-Authored-By: OpenAI Codex <2238690+openai-codex[bot]@users.noreply.github.com>
Compile format argument expressions for write-time execution, retain literal-only
picture lines, and recognize anonymous Function::Parameters fun expressions.
Document the implemented subset and the remaining core format lexical edge case.

Generated with OpenAI Codex (https://openai.com/codex)

Co-Authored-By: OpenAI Codex <codex@openai.com>
Compile format argument expressions in a child lexical scope so a my/state
binding is shared by later expressions on its line without leaking into or
being captured by the surrounding format declaration. Strengthen BUILD
diagnostic coverage and extend Function::Parameters signature tests.

Generated with OpenAI Codex (https://openai.com/codex)

Co-Authored-By: OpenAI Codex <codex@openai.com>
Provide the default $self invocant for Function::Parameters method
signatures while preserving explicit invocants, including empty signatures.

Generated with [OpenAI Codex](https://openai.com/codex)

Co-Authored-By: OpenAI Codex <codex@openai.com>
Preserve positional, named, invocant, and slurpy parameter metadata on
runtime code objects and expose it through Function::Parameters::info.
Document the lexical parser keyword-plugin API and add focused API coverage.

Generated with [OpenAI Codex](https://openai.com/codex)

Co-Authored-By: OpenAI Codex <codex@openai.com>
Support selective fun/method imports, anonymous methods, upstream-compatible
signature info layout, and scalar type constraint checks. Document the current
GraphQL implicit-keyword compatibility gap and cover the supported behavior on
both execution backends.

Generated with Codex (https://openai.com/codex)
Co-Authored-By: Codex <codex@openai.com>
Model GraphQL::MaybeTypeCheck's delegated keyword import, parse Type::Tiny
signature expressions and post-signature attributes, and remove bound method
invocants from @_ after signature binding so forwarding preserves call arity.
Add backend-parity coverage for delegated imports, typed parameters, and goto
forwarding.

Generated with Codex (https://openai.com/codex)
Co-Authored-By: Codex <codex@openai.com>
Record post-fix GraphQL test coverage and the two remaining websocket message
ordering mismatches pending comparison with system Perl.

Generated with Codex (https://openai.com/codex)
Co-Authored-By: Codex <codex@openai.com>
Record that native Function::Parameters passes the GraphQL WebSocket tests
while PerlOnJava reproduces timing-dependent message-order differences.

Generated with Codex (https://openai.com/codex)

Co-Authored-By: Codex <codex@openai.com>
Parse hash-configured function aliases, class methods, and methods with
multiple configured or explicit invocants. Preserve keyword and invocant
metadata through both runtime backends and add upstream-validated coverage.

Generated with Codex (https://openai.com/codex)

Co-Authored-By: Codex <codex@openai.com>
Honor Function::Parameters invocant and strict configuration for aliases,
including optional explicit invocants and lax argument handling.

Generated with [Codex](https://openai.com/codex)

Co-Authored-By: Codex <codex@openai.com>
Read check_argument_types from configured keyword definitions and apply
constraint coercions before checking typed parameters.

Generated with [Codex](https://openai.com/codex)

Co-Authored-By: Codex <codex@openai.com>
Turn simple quoted type names in signatures into type-function calls before
parameter validation so coercion and checks match Function::Parameters.

Generated with [Codex](https://openai.com/codex)

Co-Authored-By: Codex <codex@openai.com>
Add eager Function::Parameters signature metadata, configured attributes and
strict argument diagnostics, and complete prototype validation behavior. Add
focused regression coverage and update the compatibility design and changelog.

Generated with Codex (https://openai.com/codex)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Include join in core ambiguity handling and report conflicts with fully
implemented package subs. Cover the Function::Parameters collision and record
that the upstream attributes suite now passes.

Generated with Codex (https://openai.com/codex)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Implement runtime-installed Function::Parameters functions and methods with
stable declared names. Keep method dispatch synchronized across whole-glob
aliases when the canonical sub is redefined, with JVM and interpreter coverage.

Generated with Codex (https://openai.com/codex/)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Support configured install_sub callbacks, runtime installation, and standard
method modifier keyword registrations. Add shared-backend regression coverage
and preserve the expected diagnostic for unnamed modifiers.

Generated with Codex (https://openai.com/codex/)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Carry simple named type constraints through signature metadata and resolve
Function::Parameters::Param->type during introspection. Add a regression that
checks the Type::Tiny object before the function has run.

Generated with Codex (https://openai.com/codex/)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Recognize custom and multiple invocants, reject duplicate or invalid
invocants with focused diagnostics, and report Function::Parameters method
argument counts in the keyword-specific format. Preserve named-parameter
colons while scanning invocant separators.

Generated with Codex (https://openai.com/codex/)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Honor :strict and :lax imports, validate configured name policies and
argument defaults, and report invalid direct imports. Add regression coverage
for required and prohibited names, disabled defaults, and import diagnostics.

Generated with Codex (https://openai.com/codex/)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Treat the method keyword as method defaults when its configuration omits an
explicit defaults option. Cover the configured invocant behavior and retain
TODO coverage for the separate same-named outer lexical default gap.

Generated with Codex (https://openai.com/codex/)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Bind named parameters from the argument tail after positional parameters,
handle omitted positional defaults, validate required names with slurpy arrays,
and align diagnostics for malformed and incomplete named calls. Add regression
coverage and record current upstream compatibility status.

Generated with Codex (https://openai.com/codex/)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Support callback and Moose type reification, retain type objects and names
for anonymous code objects, and report malformed declaration diagnostics
with the expected source context. Add 107 assertions covering the metadata,
strictness, and malformed type behavior.

Generated with [Codex](https://openai.com/codex)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
fglock and others added 2 commits October 26, 2026 12:38
Keep malformed underscore prototype diagnostics complete and emit the paired
warning without misclassifying escaped prototype classes. Validate unknown
named parameters before reporting missing required keys, and preserve native
@ slurpy handling for odd positional tails.

Add focused project tests for both regression groups.

Generated with [Codex](https://openai.com/codex)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
Function::Parameters::info must compile a deferred named subroutine before
checking its signature metadata. This keeps introspection reliable before a
function's first invocation on all supported platforms.

Generated with [Codex](https://openai.com/codex)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
@fglock
fglock force-pushed the fix/parser-language-compatibility-issues branch from be49aee to 485de8d Compare October 26, 2026 11:55
fglock and others added 2 commits October 26, 2026 13:47
When a named code reference lacks signature metadata, inspect its current
package CV before treating it as an ordinary subroutine. This handles stale
or deferred CV references while preserving undef for non-Function::Parameters
subroutines.

Generated with Codex (https://openai.com/codex)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
The Function::Parameters metadata test needs a Type::Tiny-shaped object, but
Types::Standard is not installed on clean CI runners. Provide the minimal test
fixture locally so the tracked regression runs consistently without host CPAN
modules.

Generated with Codex (https://openai.com/codex)

Co-Authored-By: Codex <158243242+openai-codex[bot]@users.noreply.github.com>
@fglock
fglock marked this pull request as ready for review October 26, 2026 14:23
@fglock
fglock merged commit 9ce6897 into master Oct 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant