Stop freezing the static environment hashes to allow Proc memoization #1623
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.
Problem
I noticed for Shopify's storefront rendering that we are hacking around the fact that the static environments get frozen by overriding the Liquid::Context#initialize and Liquid::Context#new_isolated_subcontext to mimic the same feature. I suspect the reason for that hack is that it allows for lazy loading by assigning a Proc in the environment, which doesn't work with Liquid::Context#static_environments due to the freezing of its Hashes in Liquid::Context#initialize.
Solution
Remove the freezing of the static environments hashes in Liquid::Context#initialize. Instead, we just treat it as semantically static, so that it supports memoization. This is similar to how liquid values tend to be immutable, even though they may have internal mutations for memoizing lazy loads.