Const enum variants no longer backed by functions #507
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.
Rather than having constant enum variants backed by a function call like how container enum variants work, store them as constant
data
values instead. Constant enum variants don't contain variables or data which could vary depending on construction, so this is a pretty straightforward (if minor) performance improvement.The real main change hidden in this changeset is the solving of a sneaky and nefarious bug that's been hidden in here for a while - when storing Byte instances into a Pointer value using the intrinsic
Pointer#store
method, it would actually use astorel
qbe instruction behind the scenes which would result in 4 bytes being written to the underlying memory. This had the evil side effect of overwriting the neighboring memory segment's value, most likely to be0
. This was most apparent inArray#toString
which I had actually already noticed a while ago but never got around to actually digging in to figure out what was wrong. This solution was the result of many hours' work (unfortunately) so it's no wonder why I punted on it for so long. Oh well, it was fun.