Repository navigation
Conversation
A meta written without parentheses, such as @:privateAccess, carries a null argument list, which Capture walked unchecked. The null ended the whole compile batch rather than the module holding the meta. ExprTools already guarded it the same way. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
A meta written without parentheses ends the whole compile batch:
parseMetaArgsanswersnullrather than[]when there are no parentheses, andCapture's two walkers (mapChildrenandrewrite) iterate the argument list unchecked. TheNull Object Referenceis not anUnsupported, so it leavesBackend.compileand takes every module of the batch with it, not just the one carrying the meta; in a host compiling several mods in one world, all of them. Interpreted, the same code runs.ExprToolsalready guards this (args == null ? null : ...);Capturenow does the same.Two corpus cases, a script's private method and a host field, both behind
@:privateAccess. Without the change both arekilledon hxcpp-cppia; with it eval-interp, hxcpp-interp, hxcpp-cppia and hxcpp-cppia-jit answer42and0, and every other row is unchanged.test/run.sh eval cpp: 421 / 421 / 453 passed. The sandbox builds against flixel 6.2.0, flixel-addons 4.0.1 and flixel-ui 2.6.5, and its four projects probe the same as before (--probe, JIT on and off). HashLink not run.🤖 Generated with Claude Code