[Python-checkins] CVS: python/dist/src/Python symtable.c,2.9,2.10

Jeremy Hylton jhylton@users.sourceforge.net
2001年12月09日 16:53:20 -0800


Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv12577
Modified Files:
	symtable.c 
Log Message:
Add a comment explaining the st_symbols cache.
Index: symtable.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/symtable.c,v
retrieving revision 2.9
retrieving revision 2.10
diff -C2 -d -r2.9 -r2.10
*** symtable.c	2001年12月08日 23:40:38	2.9
--- symtable.c	2001年12月10日 00:53:18	2.10
***************
*** 5,8 ****
--- 5,22 ----
 #include "structmember.h"
 
+ /* The compiler uses this function to load a PySymtableEntry object
+ for a code block. Each block is loaded twice, once during the
+ symbol table pass and once during the code gen pass. Entries
+ created during the first pass are cached for the second pass, using
+ the st_symbols dictionary. 
+ 
+ The cache is keyed by st_nscopes. Each code block node in a
+ module's parse tree can be assigned a unique id based on the order
+ in which the nodes are visited by the compiler. This strategy
+ works so long as the symbol table and codegen passes visit the same
+ nodes in the same order.
+ */
+ 
+ 
 PyObject *
 PySymtableEntry_New(struct symtable *st, char *name, int type, int lineno)
***************
*** 15,19 ****
 		goto fail;
 	v = PyDict_GetItem(st->st_symbols, k);
! 	if (v) /* XXX could check that name, type, lineno match */ {
 		Py_DECREF(k);
 		Py_INCREF(v);
--- 29,33 ----
 		goto fail;
 	v = PyDict_GetItem(st->st_symbols, k);
! 	if (v) {
 		Py_DECREF(k);
 		Py_INCREF(v);

AltStyle によって変換されたページ (->オリジナル) /