@@ -2792,12 +2792,14 @@ rb_str_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception)
2792
2792
digs = 0 ;
2793
2793
2794
2794
const char * c_str = StringValueCStr (val );
2795
+ VALUE obj = TypedData_Wrap_Struct (rb_cBigDecimal , & BigDecimal_data_type , 0 );
2795
2796
Real * vp = VpAlloc (digs , c_str , 1 , raise_exception );
2796
2797
if (!vp )
2797
2798
return Qnil ;
2798
- vp -> obj = TypedData_Wrap_Struct (rb_cBigDecimal , & BigDecimal_data_type , vp );
2799
- RB_OBJ_FREEZE (vp -> obj );
2800
- return check_exception (vp -> obj );
2799
+ RTYPEDDATA_DATA (obj ) = vp ;
2800
+ vp -> obj = obj ;
2801
+ RB_OBJ_FREEZE (obj );
2802
+ return VpCheckGetValue (vp );
2801
2803
}
2802
2804
2803
2805
static VALUE
@@ -2822,10 +2824,13 @@ rb_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception)
2822
2824
2823
2825
Real * vp ;
2824
2826
TypedData_Get_Struct (val , Real , & BigDecimal_data_type , vp );
2827
+
2828
+ VALUE copy = TypedData_Wrap_Struct (rb_cBigDecimal , & BigDecimal_data_type , 0 );
2825
2829
vp = VpCopy (NULL , vp );
2826
- vp -> obj = TypedData_Wrap_Struct (rb_cBigDecimal , & BigDecimal_data_type , vp );
2830
+ RTYPEDDATA_DATA (copy ) = vp ;
2831
+ vp -> obj = copy ;
2827
2832
RB_OBJ_FREEZE (vp -> obj );
2828
- return check_exception (vp -> obj );
2833
+ return VpCheckGetValue (vp );
2829
2834
}
2830
2835
else if (RB_INTEGER_TYPE_P (val )) {
2831
2836
return rb_inum_convert_to_BigDecimal (val , digs , raise_exception );
@@ -2929,14 +2934,16 @@ static VALUE
2929
2934
BigDecimal_s_interpret_loosely (VALUE klass , VALUE str )
2930
2935
{
2931
2936
ENTER (1 );
2932
- char const * c_str ;
2933
- Real * pv ;
2934
2937
2935
- c_str = StringValueCStr (str );
2938
+ char const * c_str = StringValueCStr (str );
2939
+ VALUE obj = TypedData_Wrap_Struct (klass , & BigDecimal_data_type , 0 );
2940
+
2941
+ Real * pv ;
2936
2942
GUARD_OBJ (pv , VpAlloc (0 , c_str , 0 , 1 ));
2937
- pv -> obj = TypedData_Wrap_Struct (klass , & BigDecimal_data_type , pv );
2943
+ RTYPEDDATA_DATA (obj ) = pv ;
2944
+ pv -> obj = obj ;
2938
2945
RB_OBJ_FREEZE (pv -> obj );
2939
- return pv -> obj ;
2946
+ return obj ;
2940
2947
}
2941
2948
2942
2949
/* call-seq:
0 commit comments