@@ -617,8 +617,6 @@ Tests are in ``tests/unit/test_c_seqobject.py``:
617
617
obj = cSeqObject.SequenceLongObject([7 , 4 , 1 , ])
618
618
assert len (obj) == 3
619
619
620
-
621
-
622
620
---------------
623
621
``sq_concat ``
624
622
---------------
@@ -650,12 +648,7 @@ In ``src/cpy/Object/cSeqObject.c``:
650
648
static PyTypeObject SequenceLongObjectType;
651
649
static int is_sequence_of_long_type(PyObject *op);
652
650
653
- /**
654
- * Returns a new SequenceLongObject composed of self + other.
655
- * @param self
656
- * @param other
657
- * @return
658
- */
651
+ /** Returns a new SequenceLongObject composed of self + other. */
659
652
static PyObject *
660
653
SequenceLongObject_sq_concat(PyObject *self, PyObject *other) {
661
654
if (!is_sequence_of_long_type(other)) {
@@ -667,24 +660,32 @@ In ``src/cpy/Object/cSeqObject.c``:
667
660
return NULL;
668
661
}
669
662
PyObject *ret = SequenceLongObject_new(&SequenceLongObjectType, NULL, NULL);
663
+ if (!ret) {
664
+ assert(PyErr_Occurred());
665
+ return NULL;
666
+ }
670
667
/* For convenience. */
671
- SequenceLongObject *sol = (SequenceLongObject *) ret;
672
- sol ->size = ((SequenceLongObject *) self)->size + ((SequenceLongObject *) other)->size;
673
- sol ->array_long = malloc(sol ->size * sizeof(long));
674
- if (!sol ->array_long) {
668
+ SequenceLongObject *ret_as_slo = (SequenceLongObject *) ret;
669
+ ret_as_slo ->size = ((SequenceLongObject *) self)->size + ((SequenceLongObject *) other)->size;
670
+ ret_as_slo ->array_long = malloc(ret_as_slo ->size * sizeof(long));
671
+ if (!ret_as_slo ->array_long) {
675
672
PyErr_Format(PyExc_MemoryError, "%s(): Can not create new object.", __FUNCTION__);
673
+ Py_DECREF(ret);
674
+ return NULL;
676
675
}
677
676
678
677
ssize_t i = 0;
679
678
ssize_t ub = ((SequenceLongObject *) self)->size;
680
679
while (i < ub) {
681
- sol ->array_long[i] = ((SequenceLongObject *) self)->array_long[i];
680
+ ret_as_slo ->array_long[i] = ((SequenceLongObject *) self)->array_long[i];
682
681
i++;
683
682
}
684
- ub += ((SequenceLongObject *) other)->size;
685
- while (i < ub) {
686
- sol->array_long[i] = ((SequenceLongObject *) other)->array_long[i];
683
+ ssize_t j = 0;
684
+ ub = ((SequenceLongObject *) other)->size;
685
+ while (j < ub) {
686
+ ret_as_slo->array_long[i] = ((SequenceLongObject *) other)->array_long[j];
687
687
i++;
688
+ j++;
688
689
}
689
690
return ret;
690
691
}
@@ -697,6 +698,17 @@ Tests are in ``tests/unit/test_c_seqobject.py``:
697
698
698
699
.. code-block :: python
699
700
701
+ def test_SequenceLongObject_concat ():
702
+ obj_a = cSeqObject.SequenceLongObject([7 , 4 , 1 , ])
703
+ obj_b = cSeqObject.SequenceLongObject([70 , 40 , 100 , ])
704
+ assert id (obj_a) != id (obj_b)
705
+ obj = obj_a + obj_b
706
+ assert id (obj) != id (obj_a)
707
+ assert id (obj) != id (obj_b)
708
+ assert len (obj) == 6
709
+ assert list (obj) == [7 , 4 , 1 , ] + [70 , 40 , 100 , ]
710
+
711
+
700
712
701
713
TOOD:
702
714
0 commit comments