Issue #7051: Clarify behaviour of 'g' and 'G'-style formatting.
[python.git] / Python / asdl.c
blob1105d3aa57b3cabf6b9964a791055dda74e25510
1 #include "Python.h"
2 #include "asdl.h"
4 asdl_seq *
5 asdl_seq_new(int size, PyArena *arena)
7 asdl_seq *seq = NULL;
8 size_t n = (size ? (sizeof(void *) * (size - 1)) : 0);
10 /* check size is sane */
11 if (size < 0 || size == INT_MIN ||
12 (size && ((size - 1) > (PY_SIZE_MAX / sizeof(void *))))) {
13 PyErr_NoMemory();
14 return NULL;
17 /* check if size can be added safely */
18 if (n > PY_SIZE_MAX - sizeof(asdl_seq)) {
19 PyErr_NoMemory();
20 return NULL;
23 n += sizeof(asdl_seq);
25 seq = (asdl_seq *)PyArena_Malloc(arena, n);
26 if (!seq) {
27 PyErr_NoMemory();
28 return NULL;
30 memset(seq, 0, n);
31 seq->size = size;
32 return seq;
35 asdl_int_seq *
36 asdl_int_seq_new(int size, PyArena *arena)
38 asdl_int_seq *seq = NULL;
39 size_t n = (size ? (sizeof(void *) * (size - 1)) : 0);
41 /* check size is sane */
42 if (size < 0 || size == INT_MIN ||
43 (size && ((size - 1) > (PY_SIZE_MAX / sizeof(void *))))) {
44 PyErr_NoMemory();
45 return NULL;
48 /* check if size can be added safely */
49 if (n > PY_SIZE_MAX - sizeof(asdl_seq)) {
50 PyErr_NoMemory();
51 return NULL;
54 n += sizeof(asdl_seq);
56 seq = (asdl_int_seq *)PyArena_Malloc(arena, n);
57 if (!seq) {
58 PyErr_NoMemory();
59 return NULL;
61 memset(seq, 0, n);
62 seq->size = size;
63 return seq;