@@ -76,39 +76,42 @@ QuadPrecision_from_object(PyObject *value, QuadBackendType backend)
76
76
self -> value .longdouble_value = (long double )val ;
77
77
}
78
78
}
79
- else if (Py_TYPE (value ) == & QuadPrecision_Type )
80
- {
81
- // todo: not working for ld backend, getting garbage value not sure why?
79
+ else if (Py_TYPE (value ) == & QuadPrecision_Type ) {
80
+ Py_DECREF (self ); // discard the default one
82
81
QuadPrecisionObject * quad_obj = (QuadPrecisionObject * )value ;
83
- // printf("%d %d\n", quad_obj->backend, backend);
84
- // printf("%Lf\n", quad_obj->value.longdouble_value);
82
+
83
+ // create a new one with the same backend
84
+ QuadPrecisionObject * self = QuadPrecision_raw_new (quad_obj -> backend );
85
85
if (quad_obj -> backend == BACKEND_SLEEF ) {
86
86
self -> value .sleef_value = quad_obj -> value .sleef_value ;
87
87
}
88
88
else {
89
89
self -> value .longdouble_value = quad_obj -> value .longdouble_value ;
90
90
}
91
+
92
+ return self ;
91
93
}
92
94
else {
93
95
PyObject * type_str = PyObject_Str ((PyObject * )Py_TYPE (value ));
94
96
if (type_str != NULL ) {
95
97
const char * type_cstr = PyUnicode_AsUTF8 (type_str );
96
98
if (type_cstr != NULL ) {
97
- PyErr_Format (
98
- PyExc_TypeError ,
99
- "QuadPrecision value must be a float, int or string, but got %s instead" ,
100
- type_cstr );
99
+ PyErr_Format (PyExc_TypeError ,
100
+ "QuadPrecision value must be a quad, float, int or string, but got %s "
101
+ " instead" ,
102
+ type_cstr );
101
103
}
102
104
else {
103
- PyErr_SetString (PyExc_TypeError ,
104
- "QuadPrecision value must be a float, int or string, but got an "
105
- "unknown type instead" );
105
+ PyErr_SetString (
106
+ PyExc_TypeError ,
107
+ "QuadPrecision value must be a quad, float, int or string, but got an "
108
+ "unknown type instead" );
106
109
}
107
110
Py_DECREF (type_str );
108
111
}
109
112
else {
110
113
PyErr_SetString (PyExc_TypeError ,
111
- "QuadPrecision value must be a float, int or string, but got an "
114
+ "QuadPrecision value must be a quad, float, int or string, but got an "
112
115
"unknown type instead" );
113
116
}
114
117
Py_DECREF (self );
0 commit comments