##// END OF EJS Templates
revlog: replace PyInt_AS_LONG with a more portable helper function...
Augie Fackler -
r40634:fa331960 default
parent child Browse files
Show More
@@ -24,7 +24,6
24 #define PyInt_Check PyLong_Check
24 #define PyInt_Check PyLong_Check
25 #define PyInt_FromLong PyLong_FromLong
25 #define PyInt_FromLong PyLong_FromLong
26 #define PyInt_FromSsize_t PyLong_FromSsize_t
26 #define PyInt_FromSsize_t PyLong_FromSsize_t
27 #define PyInt_AS_LONG PyLong_AS_LONG
28 #define PyInt_AsLong PyLong_AsLong
27 #define PyInt_AsLong PyLong_AsLong
29 #endif
28 #endif
30
29
@@ -161,10 +160,17 static inline int index_get_parents(inde
161 int maxrev)
160 int maxrev)
162 {
161 {
163 if (rev >= self->length) {
162 if (rev >= self->length) {
163 long tmp;
164 PyObject *tuple =
164 PyObject *tuple =
165 PyList_GET_ITEM(self->added, rev - self->length);
165 PyList_GET_ITEM(self->added, rev - self->length);
166 ps[0] = (int)PyInt_AS_LONG(PyTuple_GET_ITEM(tuple, 5));
166 if (!pylong_to_long(PyTuple_GET_ITEM(tuple, 5), &tmp)) {
167 ps[1] = (int)PyInt_AS_LONG(PyTuple_GET_ITEM(tuple, 6));
167 return -1;
168 }
169 ps[0] = (int)tmp;
170 if (!pylong_to_long(PyTuple_GET_ITEM(tuple, 6), &tmp)) {
171 return -1;
172 }
173 ps[1] = (int)tmp;
168 } else {
174 } else {
169 const char *data = index_deref(self, rev);
175 const char *data = index_deref(self, rev);
170 ps[0] = getbe32(data + 24);
176 ps[0] = getbe32(data + 24);
@@ -464,7 +470,10 static Py_ssize_t add_roots_get_min(inde
464 if (iter == NULL)
470 if (iter == NULL)
465 return -2;
471 return -2;
466 while ((iter_item = PyIter_Next(iter))) {
472 while ((iter_item = PyIter_Next(iter))) {
467 iter_item_long = PyInt_AS_LONG(iter_item);
473 if (!pylong_to_long(iter_item, &iter_item_long)) {
474 Py_DECREF(iter_item);
475 return -2;
476 }
468 Py_DECREF(iter_item);
477 Py_DECREF(iter_item);
469 if (iter_item_long < min_idx)
478 if (iter_item_long < min_idx)
470 min_idx = iter_item_long;
479 min_idx = iter_item_long;
@@ -853,7 +862,11 static inline int index_baserev(indexObj
853 if (rev >= self->length) {
862 if (rev >= self->length) {
854 PyObject *tuple =
863 PyObject *tuple =
855 PyList_GET_ITEM(self->added, rev - self->length);
864 PyList_GET_ITEM(self->added, rev - self->length);
856 return (int)PyInt_AS_LONG(PyTuple_GET_ITEM(tuple, 3));
865 long ret;
866 if (!pylong_to_long(PyTuple_GET_ITEM(tuple, 3), &ret)) {
867 return -2;
868 }
869 return (int)ret;
857 } else {
870 } else {
858 data = index_deref(self, rev);
871 data = index_deref(self, rev);
859 if (data == NULL) {
872 if (data == NULL) {
@@ -1384,8 +1397,13 static PyObject *index_getitem(indexObje
1384 char *node;
1397 char *node;
1385 int rev;
1398 int rev;
1386
1399
1387 if (PyInt_Check(value))
1400 if (PyInt_Check(value)) {
1388 return index_get(self, PyInt_AS_LONG(value));
1401 long idx;
1402 if (!pylong_to_long(value, &idx)) {
1403 return NULL;
1404 }
1405 return index_get(self, idx);
1406 }
1389
1407
1390 if (node_check(value, &node) == -1)
1408 if (node_check(value, &node) == -1)
1391 return NULL;
1409 return NULL;
@@ -1516,7 +1534,10 static int index_contains(indexObject *s
1516 char *node;
1534 char *node;
1517
1535
1518 if (PyInt_Check(value)) {
1536 if (PyInt_Check(value)) {
1519 long rev = PyInt_AS_LONG(value);
1537 long rev;
1538 if (!pylong_to_long(value, &rev)) {
1539 return -1;
1540 }
1520 return rev >= -1 && rev < index_length(self);
1541 return rev >= -1 && rev < index_length(self);
1521 }
1542 }
1522
1543
@@ -2404,10 +2425,12 static PyObject *rustla_next(rustlazyanc
2404
2425
2405 static int rustla_contains(rustlazyancestorsObject *self, PyObject *rev)
2426 static int rustla_contains(rustlazyancestorsObject *self, PyObject *rev)
2406 {
2427 {
2407 if (!(PyInt_Check(rev))) {
2428 long lrev;
2429 if (!pylong_to_long(rev, &lrev)) {
2430 PyErr_Clear();
2408 return 0;
2431 return 0;
2409 }
2432 }
2410 return rustlazyancestors_contains(self->iter, PyInt_AS_LONG(rev));
2433 return rustlazyancestors_contains(self->iter, lrev);
2411 }
2434 }
2412
2435
2413 static PySequenceMethods rustla_sequence_methods = {
2436 static PySequenceMethods rustla_sequence_methods = {
@@ -58,4 +58,17 static inline PyObject *_dict_new_presiz
58 return _PyDict_NewPresized(((1 + expected_size) / 2) * 3);
58 return _PyDict_NewPresized(((1 + expected_size) / 2) * 3);
59 }
59 }
60
60
61 /* Convert a PyInt or PyLong to a long. Returns false if there is an
62 error, in which case an exception will already have been set. */
63 static inline bool pylong_to_long(PyObject *pylong, long *out)
64 {
65 *out = PyLong_AsLong(pylong);
66 /* Fast path to avoid hitting PyErr_Occurred if the value was obviously
67 * not an error. */
68 if (*out != -1) {
69 return true;
70 }
71 return PyErr_Occurred() == NULL;
72 }
73
61 #endif /* _HG_UTIL_H_ */
74 #endif /* _HG_UTIL_H_ */
General Comments 0
You need to be logged in to leave comments. Login now