@@ -589,6 +589,7 @@ PyObject *node_get_text(Node *self, void *Py_UNUSED(payload)) {
589
589
}
590
590
591
591
TSPoint start_point = ts_node_start_point (self -> node );
592
+ TSPoint end_point = ts_node_end_point (self -> node );
592
593
593
594
TSPoint current_point = start_point ;
594
595
size_t current_offset = start_offset ;
@@ -619,12 +620,23 @@ PyObject *node_get_text(Node *self, void *Py_UNUSED(payload)) {
619
620
return NULL ;
620
621
}
621
622
622
- if ( PyByteArray_Concat ( collected_bytes , rv ) == NULL ) {
623
- Py_XDECREF ( rv );
623
+ PyObject * rv_bytearray = PyByteArray_FromObject ( rv );
624
+ if ( rv_bytearray == NULL ) {
624
625
Py_XDECREF (collected_bytes );
626
+ Py_XDECREF (rv );
625
627
return NULL ;
626
628
}
627
- Py_XDECREF (rv );
629
+
630
+ PyObject * new_collected_bytes = PyByteArray_Concat (collected_bytes , rv_bytearray );
631
+ Py_DECREF (rv_bytearray );
632
+ Py_DECREF (collected_bytes );
633
+
634
+ if (new_collected_bytes == NULL ) {
635
+ Py_XDECREF (rv );
636
+ return NULL ;
637
+ }
638
+
639
+ collected_bytes = new_collected_bytes ;
628
640
629
641
// Update current_point and current_offset
630
642
Py_ssize_t bytes_read = PyBytes_Size (rv );
@@ -639,7 +651,20 @@ PyObject *node_get_text(Node *self, void *Py_UNUSED(payload)) {
639
651
current_offset += bytes_read ;
640
652
}
641
653
642
- result = PyBytes_FromObject (collected_bytes );
654
+ PyObject * start_byte = PyLong_FromUnsignedLong (0 );
655
+ PyObject * end_byte = PyLong_FromUnsignedLong (end_offset - start_offset );
656
+ PyObject * slice = PySlice_New (start_byte , end_byte , NULL );
657
+ Py_XDECREF (start_byte );
658
+ Py_XDECREF (end_byte );
659
+
660
+ if (slice == NULL ) {
661
+ Py_DECREF (collected_bytes );
662
+ return NULL ;
663
+ }
664
+
665
+ result = PyObject_GetItem (collected_bytes , slice );
666
+ Py_DECREF (slice );
667
+
643
668
Py_XDECREF (collected_bytes );
644
669
}
645
670
return result ;
0 commit comments