[Python-checkins] python/dist/src/Python symtable.c,2.10.8.5,2.10.8.6
jhylton@users.sourceforge.net
jhylton@users.sourceforge.net
Fri, 30 Aug 2002 13:04:52 -0700
Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv6715/Python
Modified Files:
Tag: ast-branch
symtable.c
Log Message:
Cleanup symbol table.
Add public PySymtable_Lookup() function that returns an entry for a
block given the address of its AST node.
Remove lookup code from PySTEntry_New() since we only call this when
the symbol table is created.
Track change in asdl_seq_ API, e.g. get -> GET.
Index: symtable.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/symtable.c,v
retrieving revision 2.10.8.5
retrieving revision 2.10.8.6
diff -C2 -d -r2.10.8.5 -r2.10.8.6
*** symtable.c 23 Aug 2002 22:51:51 -0000 2.10.8.5
--- symtable.c 30 Aug 2002 20:04:49 -0000 2.10.8.6
***************
*** 16,28 ****
if (k == NULL)
goto fail;
- /* XXX do we need the lookup code anymore? */
- v = PyDict_GetItem(st->st_symbols, k);
- if (v) {
- assert(PySTEntry_Check(v));
- Py_DECREF(k);
- Py_INCREF(v);
- return (PySTEntryObject *)v;
- }
-
ste = (PySTEntryObject *)PyObject_New(PySTEntryObject,
&PySTEntry_Type);
--- 16,19 ----
***************
*** 196,208 ****
}
- void
- PySymtable_Free(struct symtable *st)
- {
- Py_XDECREF(st->st_symbols);
- Py_XDECREF(st->st_stack);
- Py_XDECREF(st->st_cur);
- PyMem_Free((void *)st);
- }
-
struct symtable *
PySymtable_Build(mod_ty mod, const char *filename, PyFutureFeatures *future)
--- 187,190 ----
***************
*** 218,240 ****
/* Any other top-level initialization? */
switch (mod->kind) {
! case Module_kind:
! {
int i;
asdl_seq *seq = mod->v.Module.body;
for (i = 0; i < asdl_seq_LEN(seq); i++)
! if (!symtable_visit_stmt(st, asdl_seq_get(seq, i))) {
! PySymtable_Free(st);
! return NULL;
! }
}
- break;
case Expression_kind:
! symtable_visit_expr(st, mod->v.Expression.body);
break;
! default:
return NULL;
}
symtable_exit_block(st, (void *)mod);
return st;
}
--- 200,260 ----
/* Any other top-level initialization? */
switch (mod->kind) {
! case Module_kind: {
int i;
asdl_seq *seq = mod->v.Module.body;
for (i = 0; i < asdl_seq_LEN(seq); i++)
! if (!symtable_visit_stmt(st, asdl_seq_GET(seq, i)))
! goto error;
! break;
}
case Expression_kind:
! if (!symtable_visit_expr(st, mod->v.Expression.body))
! goto error;
break;
! case Interactive_kind:
! if (!symtable_visit_stmt(st, mod->v.Interactive.body))
! goto error;
! break;
! case Suite_kind:
! PyErr_SetString(PyExc_RuntimeError,
! "this compiler does not handle Suites");
return NULL;
}
symtable_exit_block(st, (void *)mod);
return st;
+ error:
+ PySymtable_Free(st);
+ return NULL;
+ }
+
+ void
+ PySymtable_Free(struct symtable *st)
+ {
+ Py_XDECREF(st->st_symbols);
+ Py_XDECREF(st->st_stack);
+ Py_XDECREF(st->st_cur);
+ PyMem_Free((void *)st);
+ }
+
+ PySTEntryObject *
+ PySymtable_Lookup(struct symtable *st, void *key)
+ {
+ PyObject *k, *v;
+
+ k = PyLong_FromVoidPtr(key);
+ if (k == NULL)
+ return NULL;
+ v = PyDict_GetItem(st->st_symbols, k);
+ if (v) {
+ assert(PySTEntry_Check(v));
+ Py_DECREF(k);
+ Py_INCREF(v);
+ return (PySTEntryObject *)v;
+ }
+ else {
+ PyErr_SetString(PyExc_KeyError,
+ "unknown symbol table entry");
+ return NULL;
+ }
}
***************
*** 579,583 ****
asdl_seq *seq = (SEQ); /* avoid variable capture */ \
for (i = 0; i < asdl_seq_LEN(seq); i++) { \
! TYPE ## _ty elt = asdl_seq_get(seq, i); \
if (!symtable_visit_ ## TYPE((ST), elt)) \
return 0; \
--- 599,603 ----
asdl_seq *seq = (SEQ); /* avoid variable capture */ \
for (i = 0; i < asdl_seq_LEN(seq); i++) { \
! TYPE ## _ty elt = asdl_seq_GET(seq, i); \
if (!symtable_visit_ ## TYPE((ST), elt)) \
return 0; \
***************
*** 692,696 ****
asdl_seq *seq = s->v.Global.names;
for (i = 0; i < asdl_seq_LEN(seq); i++)
! symtable_add_def(st, asdl_seq_get(seq, i), DEF_GLOBAL);
break;
--- 712,717 ----
asdl_seq *seq = s->v.Global.names;
for (i = 0; i < asdl_seq_LEN(seq); i++)
! symtable_add_def(st, asdl_seq_GET(seq, i),
! DEF_GLOBAL);
break;
***************
*** 800,804 ****
for (i = 0; i < asdl_seq_LEN(args); i++) {
! expr_ty arg = asdl_seq_get(args, i);
if (arg->kind == Name_kind) {
assert(arg->v.Name.ctx == Load);
--- 821,825 ----
for (i = 0; i < asdl_seq_LEN(args); i++) {
! expr_ty arg = asdl_seq_GET(args, i);
if (arg->kind == Name_kind) {
assert(arg->v.Name.ctx == Load);
***************
*** 830,835 ****
XXX should ast be different?
*/
! if (!symtable_visit_params(st, a->args, 1))
! return 0;
if (a->vararg)
--- 851,857 ----
XXX should ast be different?
*/
! if (a->args)
! if (!symtable_visit_params(st, a->args, 1))
! return 0;
if (a->vararg)
***************
*** 911,914 ****
return 1;
}
-
--- 933,935 ----