8000 Add function _PyPegen_seq_concat · python/cpython@df69b40 · GitHub
[go: up one dir, main page]

Skip to content

Commit df69b40

Browse files
committed
Add function _PyPegen_seq_concat
1 parent 7bcf184 commit df69b40

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

Parser/action_helpers.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,33 @@ _PyPegen_seq_append_to_end(Parser *p, asdl_seq *seq, void *a)
6565
return new_seq;
6666
}
6767

68+
/* Creates a new sequence that concats seq1 and seq2 */
69+
asdl_seq *
70+
_PyPegen_seq_concat(Parser *p, asdl_seq *seq1, asdl_seq *seq2)
71+
{
72+
if (!seq1) {
73+
return seq2;
74+
}
75+
76+
if (!seq2) {
77+
return seq1;
78+
}
79+
80+
Py_ssize_t size1 = asdl_seq_LEN(seq1), size2 = asdl_seq_LEN(seq2);
81+
asdl_seq *new_seq = (asdl_seq*)_Py_asdl_generic_seq_new(size1 + size2, p->arena);
82+
if (!new_seq) {
83+
return NULL;
84+
}
85+
86+
for (Py_ssize_t i = 0; i < size1; i++) {
87+
asdl_seq_SET_UNTYPED(new_seq, i, asdl_seq_GET_UNTYPED(seq1, i));
88+
}
89+
for (Py_ssize_t i = 0; i < size2; i++) {
90+
asdl_seq_SET_UNTYPED(new_seq, i + size1, asdl_seq_GET_UNTYPED(seq2, i));
91+
}
92+
return new_seq;
93+
}
94+
6895
static Py_ssize_t
6996
_get_flattened_seq_size(asdl_seq *seqs)
7097
{

Parser/pegen.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ PyObject *_PyPegen_new_identifier(Parser *, const char *);
295295
asdl_seq *_PyPegen_singleton_seq(Parser *, void *);
296296
asdl_seq *_PyPegen_seq_insert_in_front(Parser *, void *, asdl_seq *);
297297
asdl_seq *_PyPegen_seq_append_to_end(Parser *, asdl_seq *, void *);
298+
asdl_seq *_PyPegen_seq_concat(Parser *, asdl_seq *, asdl_seq *);
298299
asdl_seq *_PyPegen_seq_flatten(Parser *, asdl_seq *);
299300
expr_ty _PyPegen_join_names_with_dot(Parser *, expr_ty, expr_ty);
300301
int _PyPegen_seq_count_dots(asdl_seq *);

0 commit comments

Comments
 (0)
0