Allow binding instance/internal vars to fields #8804
Draft
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.
This is an extension of the existing mechanism for reification of Ruby classes, allowing us to use normal Java fields for either instance or internal variables.
The logic here is largely unchanged from the original reification logic except for enhancements to allow actively requesting a specific binding:
The example usage here binds the "args" internal variable on NoMethodError to the "args" field on RubyNoMethodError, allowing it to be seen by marshal dumping and fixing one of the DRb issues in ruby/drb#36. The reification change was not strictly necessary to fix that issue, but the alternative converts it into a slow-path internal variable lookup which is less than ideal.
Assuming this change is safe, all other instance and internal variables used by concrete JRuby core classes can be converted with the following process:
Enhancements to this feature could include: