Avoid duping the String class when deep-duping #20640
Closed
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.
On Rubinius, deep_dup'ing any structure containing the String class will explode with a
TypeError
; e.g.,The cause of this is that
String.dup
cannot work in Rubinius, due to this code. Per a discussion with Rubinius' maintainer, that behavior is unlikely to change.This patch fixes the issue by simply not dup-ing the String class (which could be made Rubinius-specific, if desired). To be honest, I'd rather we re-visit #20008, since dup-ing classes seems pretty pointless and produces unexpected results:
Anyway, I've proposed this same change just for Grape in intridea/grape#1038, but it seemed like the type of thing to push upstream. Feedback welcome!