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.
Reduce usage of GUARD_OBJ and replace to RB_GC_GUARD.
BigDecimal couldn't use RB_GC_GUARD due to the structure before #344. Now we can reduce it.
GUARD_OBJ to retval is not needed
{ ... - GUARD_OBJ(retval, foo()); + retval = foo(); .... return CheckGetValue(retval); }Remove GUARD_OBJ of self and arg, add RB_GC_GUARD before return.
In most case,
selfis stored in stack, but some function (example: BigDecimal_to_i) calls self with non-self ruby object that needs RB_GC_GUARD.static VALUE BigDecimal_foobar(VALUE self, VALUE arg) { - GUARD_OBJ(a, foo(self)); - GUARD_OBJ(b, bar(arg)); + a = foo(self); + b = bar(arg); ... + RB_GC_GUARD(a.bigdecimal) + RB_GC_GUARD(b.bigdecimal) return z; }Remaining GUARD_OBJ and ENTER macro is in BigDecimal_div2 and in BigDecimal_DoDivmod.