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.
Moves preparation of some
Base.RefValue
s which are used on the reverse-pass to compile time.The reason for doing this is to
:new
instruction, with all other prep having been done beforehand. There is very little that can go wrong here. Conversely, we previously had calls toMooncake.__make_ref
inserted into the IR, which itself calledMooncake.zero_like_rdata_type
andMooncake.zero_like_rdata_from_type
. While there are meant to always be performant, it's hard to ensure this 100% of the time. Now, these functions get called at compile-time, and insert their results directly into the IR. Consequently, even if the performance of these functions is poor, it won't show up at runtime.Mooncake.__make_ref
, it likely wouldn't show up until the reverse-pass is run. Conversely, any error which happens should now happen during rule-compilation, which is substantially preferable.TLDR: designs-away the possibility of one source of performance error, and surfaces other errors sooner.
Todo: