Mercurial > cpython-lru_cache-weakref
annotate Parser/node.c @ 24042:63fbbed10714 legacy-trunk
Simplify HTTPSConnection constructor.
See discussion in SF bug 458463.
| author | Jeremy Hylton <jeremy@alum.mit.edu> |
|---|---|
| date | Fri, 28 Jun 2002 23:38:14 +0000 |
| parents | fb6b51033c3b |
| children | 21bd86e00bce 76e9a14fb7c5 |
| rev | line source |
|---|---|
|
14391
1fd64b3af760
Move down the INT_MAX logic, because HAVE_LIMITS_H was always undefined
Vladimir Marangozov <vladimir.marangozov@t-online.de>
parents:
14375
diff
changeset
|
1 /* Parse tree node implementation */ |
|
1fd64b3af760
Move down the INT_MAX logic, because HAVE_LIMITS_H was always undefined
Vladimir Marangozov <vladimir.marangozov@t-online.de>
parents:
14375
diff
changeset
|
2 |
|
14871
fb6b51033c3b
More limits.h stuff in node.c.
Tim Peters <tim.peters@gmail.com>
parents:
14391
diff
changeset
|
3 #include "Python.h" |
|
14391
1fd64b3af760
Move down the INT_MAX logic, because HAVE_LIMITS_H was always undefined
Vladimir Marangozov <vladimir.marangozov@t-online.de>
parents:
14375
diff
changeset
|
4 #include "node.h" |
|
1fd64b3af760
Move down the INT_MAX logic, because HAVE_LIMITS_H was always undefined
Vladimir Marangozov <vladimir.marangozov@t-online.de>
parents:
14375
diff
changeset
|
5 #include "errcode.h" |
| 145 | 6 |
| 6 | 7 node * |
| 13659 | 8 PyNode_New(int type) |
| 6 | 9 { |
|
5379
1c9a84e0981d
Another directory quickly renamed.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
10 node *n = PyMem_NEW(node, 1); |
| 6 | 11 if (n == NULL) |
| 12 return NULL; | |
| 13 n->n_type = type; | |
| 14 n->n_str = NULL; | |
| 86 | 15 n->n_lineno = 0; |
| 6 | 16 n->n_nchildren = 0; |
| 17 n->n_child = NULL; | |
| 18 return n; | |
| 19 } | |
| 20 | |
| 21 #define XXX 3 /* Node alignment factor to speed up realloc */ | |
| 22 #define XXXROUNDUP(n) ((n) == 1 ? 1 : ((n) + XXX - 1) / XXX * XXX) | |
| 23 | |
|
12970
63436719d12e
Add new parser error code, E_OVERFLOW. This error is returned when
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
5379
diff
changeset
|
24 int |
| 13659 | 25 PyNode_AddChild(register node *n1, int type, char *str, int lineno) |
| 6 | 26 { |
| 27 register int nch = n1->n_nchildren; | |
| 28 register int nch1 = nch+1; | |
| 29 register node *n; | |
|
14147
21ec69a56228
Charles G. Waldman <cgw@fnal.gov>:
Fred Drake <fdrake@acm.org>
parents:
13659
diff
changeset
|
30 if (nch == INT_MAX || nch < 0) |
|
12970
63436719d12e
Add new parser error code, E_OVERFLOW. This error is returned when
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
5379
diff
changeset
|
31 return E_OVERFLOW; |
| 6 | 32 if (XXXROUNDUP(nch) < nch1) { |
| 33 n = n1->n_child; | |
| 34 nch1 = XXXROUNDUP(nch1); | |
|
5379
1c9a84e0981d
Another directory quickly renamed.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
35 PyMem_RESIZE(n, node, nch1); |
| 6 | 36 if (n == NULL) |
|
12970
63436719d12e
Add new parser error code, E_OVERFLOW. This error is returned when
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
5379
diff
changeset
|
37 return E_NOMEM; |
| 6 | 38 n1->n_child = n; |
| 39 } | |
| 40 n = &n1->n_child[n1->n_nchildren++]; | |
| 41 n->n_type = type; | |
| 42 n->n_str = str; | |
| 86 | 43 n->n_lineno = lineno; |
| 6 | 44 n->n_nchildren = 0; |
| 45 n->n_child = NULL; | |
|
12970
63436719d12e
Add new parser error code, E_OVERFLOW. This error is returned when
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
5379
diff
changeset
|
46 return 0; |
| 6 | 47 } |
|
76
ede86799705b
Add function to free an entire parse tree.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
48 |
| 86 | 49 /* Forward */ |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13256
diff
changeset
|
50 static void freechildren(node *); |
| 86 | 51 |
| 52 | |
| 53 void | |
| 13659 | 54 PyNode_Free(node *n) |
| 86 | 55 { |
| 56 if (n != NULL) { | |
| 57 freechildren(n); | |
|
5379
1c9a84e0981d
Another directory quickly renamed.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
58 PyMem_DEL(n); |
| 86 | 59 } |
| 60 } | |
| 61 | |
|
76
ede86799705b
Add function to free an entire parse tree.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
62 static void |
| 13659 | 63 freechildren(node *n) |
|
76
ede86799705b
Add function to free an entire parse tree.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
64 { |
|
ede86799705b
Add function to free an entire parse tree.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
65 int i; |
|
ede86799705b
Add function to free an entire parse tree.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
66 for (i = NCH(n); --i >= 0; ) |
|
ede86799705b
Add function to free an entire parse tree.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
67 freechildren(CHILD(n, i)); |
|
ede86799705b
Add function to free an entire parse tree.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
68 if (n->n_child != NULL) |
|
5379
1c9a84e0981d
Another directory quickly renamed.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
69 PyMem_DEL(n->n_child); |
|
76
ede86799705b
Add function to free an entire parse tree.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
70 if (STR(n) != NULL) |
|
5379
1c9a84e0981d
Another directory quickly renamed.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
71 PyMem_DEL(STR(n)); |
|
76
ede86799705b
Add function to free an entire parse tree.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
72 } |
