diff options
author | Andrew MacIntyre <andymac@bullseye.apana.org.au> | 2002-08-04 06:28:21 (GMT) |
---|---|---|
committer | Andrew MacIntyre <andymac@bullseye.apana.org.au> | 2002-08-04 06:28:21 (GMT) |
commit | 80d4e2acf58433fb2e84ee55d183a7995dc44d0e (patch) | |
tree | e4c33fd6d334c9f5bf5fd5260249fd650202c445 /Parser/acceler.c | |
parent | 4104db39b8c8a85b884bbba051d21b7ea1d21ee1 (diff) | |
download | cpython-80d4e2acf58433fb2e84ee55d183a7995dc44d0e.zip cpython-80d4e2acf58433fb2e84ee55d183a7995dc44d0e.tar.gz cpython-80d4e2acf58433fb2e84ee55d183a7995dc44d0e.tar.bz2 |
SF patch #578297:
Change the parser and compiler to use PyMalloc.
Only the files implementing processes that will request memory
allocations small enough for PyMalloc to be a win have been
changed, which are:-
- Python/compile.c
- Parser/acceler.c
- Parser/node.c
- Parser/parsetok.c
This augments the aggressive overallocation strategy implemented by
Tim Peters in PyNode_AddChild() [Parser/node.c], in reducing the
impact of platform malloc()/realloc()/free() corner case behaviour.
Such corner cases are known to be triggered by test_longexp and
test_import.
Jeremy Hylton, in accepting this patch, recommended this as a
bugfix candidate for 2.2. While the changes to Python/compile.c
and Parser/node.c backport easily (and could go in), the changes
to Parser/acceler.c and Parser/parsetok.c require other not
insignificant changes as a result of the differences in the memory
APIs between 2.3 and 2.2, which I'm not in a position to work
through at the moment. This is a pity, as the Parser/parsetok.c
changes are the most important after the Parser/node.c changes, due
to the size of the memory requests involved and their frequency.
Diffstat (limited to 'Parser/acceler.c')
-rw-r--r-- | Parser/acceler.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/Parser/acceler.c b/Parser/acceler.c index 6ed12c3..63919c5 100644 --- a/Parser/acceler.c +++ b/Parser/acceler.c @@ -44,7 +44,7 @@ PyGrammar_RemoveAccelerators(grammar *g) s = d->d_state; for (j = 0; j < d->d_nstates; j++, s++) { if (s->s_accel) - PyMem_DEL(s->s_accel); + PyObject_FREE(s->s_accel); s->s_accel = NULL; } } @@ -68,7 +68,7 @@ fixstate(grammar *g, state *s) int *accel; int nl = g->g_ll.ll_nlabels; s->s_accept = 0; - accel = PyMem_NEW(int, nl); + accel = (int *) PyObject_MALLOC(nl * sizeof(int)); for (k = 0; k < nl; k++) accel[k] = -1; a = s->s_arc; @@ -124,7 +124,7 @@ fixstate(grammar *g, state *s) k++; if (k < nl) { int i; - s->s_accel = PyMem_NEW(int, nl-k); + s->s_accel = (int *) PyObject_MALLOC((nl-k) * sizeof(int)); if (s->s_accel == NULL) { fprintf(stderr, "no mem to add parser accelerators\n"); exit(1); @@ -134,5 +134,5 @@ fixstate(grammar *g, state *s) for (i = 0; k < nl; i++, k++) s->s_accel[i] = accel[k]; } - PyMem_DEL(accel); + PyObject_FREE(accel); } |