From: Neal Norwitz Date: Wed, 16 Nov 2005 05:49:04 +0000 (+0000) Subject: add more doc X-Git-Tag: v2.5a0~1155 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a3fd07d524dc37d7f3b2b0d1e6086109547b2ba6;p=thirdparty%2FPython%2Fcpython.git add more doc --- diff --git a/Python/ast.c b/Python/ast.c index e5df90627ac9..87a9a4b3a096 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -34,11 +34,32 @@ for (i = 0; i < asdl_seq_LEN(seq); i++) free_***(asdl_seq_GET(seq, i)); - asdl_seq_free(seq); + asdl_seq_free(seq); / * ok * / Almost all of the ast functions return a seq of expr, so you should use asdl_expr_seq_free(). The exception is ast_for_suite() which returns a seq of stmt's, so use asdl_stmt_seq_free() to free it. + + If asdl_seq_free is appropriate, you should mark it with an ok comment. + + There are still many memory problems in this file even though + it runs clean in valgrind, save one problem that may have existed + before the AST. + + Any code which does something like this: + + return ASTconstruct(local, LINENO(n)); + + will leak memory. The problem is if ASTconstruct (e.g., TryFinally) + cannot allocate memory, local will be leaked. + + There was discussion on python-dev to replace the entire allocation + scheme in this file with arenas. Basically rather than allocate + memory in little blocks with malloc(), we allocate one big honking + hunk and deref everything into this block. We would still need + another block or technique to handle the PyObject*s. + + http://mail.python.org/pipermail/python-dev/2005-November/058138.html */ /* Data structure used internally */