Remove very expensive unwind_protect()
in string proxy assignment and push back
#378
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.
I have determined that the
unwind_protect()
s being utilized in the string proxy assignment operator and the stringpush_back()
operator are doing much more damage than they are worth.push_back()
operator for other vector types is performing this protection. Not even for lists, which has near identical implementations betweenSET_VECTOR_ELT()
andSET_STRING_ELT()
.SET_STRING_ELT()
itself, the only thing to look at for "weirdness" would be the implicit conversion operator fromr_string
toSEXP
. But that's a no-op, it just returns the underlyingdata_
, so there is no need forunwind_protect()
for that.Because of the above 2 points, I've determined that removing the
unwind_protect()
s in the string impl would not make it any less safe than using any other vector type, which seem to have been working fine so far.