function/stdlib: ValuesFunc precise handling of marks #95
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.
Previously
ValuesFunc
was just using the safe default behavior where if any argument contains any marked values at all then the result is automatically given the same marks.That's valid but overly conservative, because it means that an unmarked map with a single marked element value will become a wholly-marked list result, rather than an unmarked list with one marked element value.
Now we'll opt in to custom mark handling within the function itself, and handle shallowly the marking of the overall collection -- propagating it to the result -- while letting the values inside retain their individual markings as needed.
We were previously lacking unit tests for the values function, I think because it's a pretty old one from when
cty
was new, so this also includes additional test cases that are not directly related to marked values but cover the other interesting cases that this function must deal with, either directly (with its own code) or indirectly (by callingcty
operation functions that handle it automatically).