diff Python/compile.c @ 24529:3444005b6527 legacy-trunk

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.
author Andrew MacIntyre <andymac@bullseye.apana.org.au>
date Sun, 04 Aug 2002 06:28:21 +0000
parents f79c7aae6620
children 06f1e2fd05bc
line wrap: on
line diff
--- a/Python/compile.c	Sun Aug 04 06:21:25 2002 +0000
+++ b/Python/compile.c	Sun Aug 04 06:28:21 2002 +0000
@@ -719,7 +719,7 @@
 	Py_XDECREF(c->c_cellvars);
 	Py_XDECREF(c->c_lnotab);
 	if (c->c_future)
-		PyMem_Free((void *)c->c_future);
+		PyObject_FREE((void *)c->c_future);
 }
 
 static void
@@ -2020,7 +2020,7 @@
 			return;
 		}
 		if (childtype == MINUS) {
-			char *s = PyMem_Malloc(strlen(STR(pnum)) + 2);
+			char *s = PyObject_MALLOC(strlen(STR(pnum)) + 2);
 			if (s == NULL) {
 				com_error(c, PyExc_MemoryError, "");
 				com_addbyte(c, 255);
@@ -2028,7 +2028,7 @@
 			}
 			s[0] = '-';
 			strcpy(s + 1, STR(pnum));
-			PyMem_Free(STR(pnum));
+			PyObject_FREE(STR(pnum));
 			STR(pnum) = s;
 		}
 		com_atom(c, patom);
@@ -4116,7 +4116,7 @@
 
 	st = symtable_init();
 	if (st == NULL) {
-		PyMem_Free((void *)ff);
+		PyObject_FREE((void *)ff);
 		return NULL;
 	}
 	st->st_future = ff;
@@ -4129,7 +4129,7 @@
 	
 	return st;
  fail:
-	PyMem_Free((void *)ff);
+	PyObject_FREE((void *)ff);
 	st->st_future = NULL;
 	PySymtable_Free(st);
 	return NULL;
@@ -4722,7 +4722,7 @@
 {
 	struct symtable *st;
 
-	st = (struct symtable *)PyMem_Malloc(sizeof(struct symtable));
+	st = (struct symtable *)PyObject_MALLOC(sizeof(struct symtable));
 	if (st == NULL)
 		return NULL;
 	st->st_pass = 1;
@@ -4749,7 +4749,7 @@
 	Py_XDECREF(st->st_symbols);
 	Py_XDECREF(st->st_stack);
 	Py_XDECREF(st->st_cur);
-	PyMem_Free((void *)st);
+	PyObject_FREE((void *)st);
 }
 
 /* When the compiler exits a scope, it must should update the scope's