@@ -85,12 +85,13 @@ static PyMethodDef SequenceLongObject_methods[] = {
85
85
/* Sequence methods. */
86
86
static Py_ssize_t
87
87
SequenceLongObject_sq_length (PyObject * self ) {
88
- fprintf (stdout , "%s(): returns=%zd\n" , __FUNCTION__ , ((SequenceLongObject * ) self )-> size );
88
+ // fprintf(stdout, "%s(%p ): returns=%zd\n", __FUNCTION__, (void *) self , ((SequenceLongObject *) self)->size);
89
89
return ((SequenceLongObject * ) self )-> size ;
90
90
}
91
91
92
92
// Forward references
93
93
static PyTypeObject SequenceLongObjectType ;
94
+
94
95
static int is_sequence_of_long_type (PyObject * op );
95
96
96
97
/**
@@ -101,6 +102,7 @@ static int is_sequence_of_long_type(PyObject *op);
101
102
*/
102
103
static PyObject *
103
104
SequenceLongObject_sq_concat (PyObject * self , PyObject * other ) {
105
+ // fprintf(stdout, "%s(%p):\n", __FUNCTION__, (void *) self);
104
106
if (!is_sequence_of_long_type (other )) {
105
107
PyErr_Format (
106
108
PyExc_TypeError ,
@@ -110,24 +112,35 @@ SequenceLongObject_sq_concat(PyObject *self, PyObject *other) {
110
112
return NULL ;
111
113
}
112
114
PyObject * ret = SequenceLongObject_new (& SequenceLongObjectType , NULL , NULL );
115
+ if (!ret ) {
116
+ assert (PyErr_Occurred ());
117
+ return NULL ;
118
+ }
113
119
/* For convenience. */
114
120
SequenceLongObject * ret_as_slo = (SequenceLongObject * ) ret ;
115
121
ret_as_slo -> size = ((SequenceLongObject * ) self )-> size + ((SequenceLongObject * ) other )-> size ;
116
122
ret_as_slo -> array_long = malloc (ret_as_slo -> size * sizeof (long ));
117
123
if (!ret_as_slo -> array_long ) {
118
124
PyErr_Format (PyExc_MemoryError , "%s(): Can not create new object." , __FUNCTION__ );
125
+ Py_DECREF (ret );
126
+ return NULL ;
119
127
}
128
+ // fprintf(stdout, "%s(): New %p size=%zd\n", __FUNCTION__, (void *) ret_as_slo, ret_as_slo->size);
120
129
121
130
ssize_t i = 0 ;
122
131
ssize_t ub = ((SequenceLongObject * ) self )-> size ;
123
132
while (i < ub ) {
133
+ // fprintf(stdout, "%s(): Setting from %p [%zd] to [%zd]\n", __FUNCTION__, (void *) self, i, i);
124
134
ret_as_slo -> array_long [i ] = ((SequenceLongObject * ) self )-> array_long [i ];
125
135
i ++ ;
126
136
}
127
- ub += ((SequenceLongObject * ) other )-> size ;
128
- while (i < ub ) {
129
- ret_as_slo -> array_long [i ] = ((SequenceLongObject * ) other )-> array_long [i ];
137
+ ssize_t j = 0 ;
138
+ ub = ((SequenceLongObject * ) other )-> size ;
139
+ while (j < ub ) {
140
+ // fprintf(stdout, "%s(): Setting %p [%zd] to [%zd]\n", __FUNCTION__, (void *) other, j, i);
141
+ ret_as_slo -> array_long [i ] = ((SequenceLongObject * ) other )-> array_long [j ];
130
142
i ++ ;
143
+ j ++ ;
131
144
}
132
145
return ret ;
133
146
}
0 commit comments