[ruby/bigdecimal] Move RB_GC_GUARD() at the end, like in BigMath_s_exp()

https://github.com/ruby/bigdecimal/commit/b66ef9fbb5
This commit is contained in:
Benoit Daloze 2023-02-21 14:16:45 +01:00 коммит произвёл git
Родитель 5077cc2be6
Коммит 7b768e4335
1 изменённых файлов: 7 добавлений и 6 удалений

Просмотреть файл

@ -4144,12 +4144,9 @@ get_vp_value:
one = VpCheckGetValue(NewOneWrapLimited(1, 1)); one = VpCheckGetValue(NewOneWrapLimited(1, 1));
two = VpCheckGetValue(VpCreateRbObject(1, "2", true)); two = VpCheckGetValue(VpCreateRbObject(1, "2", true));
RB_GC_GUARD(one);
RB_GC_GUARD(two);
n = prec + BIGDECIMAL_DOUBLE_FIGURES; n = prec + BIGDECIMAL_DOUBLE_FIGURES;
vn = SSIZET2NUM(n); vn = SSIZET2NUM(n);
RB_GC_GUARD(vn);
expo = VpExponent10(vx); expo = VpExponent10(vx);
if (expo < 0 || expo >= 3) { if (expo < 0 || expo >= 3) {
char buf[DECIMAL_SIZE_OF_BITS(SIZEOF_VALUE * CHAR_BIT) + 4]; char buf[DECIMAL_SIZE_OF_BITS(SIZEOF_VALUE * CHAR_BIT) + 4];
@ -4164,9 +4161,6 @@ get_vp_value:
x2 = BigDecimal_mult2(x, x, vn); x2 = BigDecimal_mult2(x, x, vn);
y = x; y = x;
d = y; d = y;
RB_GC_GUARD(x2);
RB_GC_GUARD(y);
RB_GC_GUARD(d);
i = 1; i = 1;
while (!VpIsZero((Real*)DATA_PTR(d))) { while (!VpIsZero((Real*)DATA_PTR(d))) {
SIGNED_VALUE const ey = VpExponent10(DATA_PTR(y)); SIGNED_VALUE const ey = VpExponent10(DATA_PTR(y));
@ -4194,6 +4188,13 @@ get_vp_value:
y = BigDecimal_add(y, dy); y = BigDecimal_add(y, dy);
} }
RB_GC_GUARD(one);
RB_GC_GUARD(two);
RB_GC_GUARD(vn);
RB_GC_GUARD(x2);
RB_GC_GUARD(y);
RB_GC_GUARD(d);
return y; return y;
} }