[Python-checkins] python/dist/src/Python symtable.c, 2.10.8.19, 2.10.8.20

nnorwitz at projects.sourceforge.net nnorwitz at projects.sourceforge.net
Tue Jan 27 11:36:32 EST 2004


Update of /cvsroot/python/python/dist/src/Python
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21985/Python

Modified Files:
      Tag: ast-branch
	symtable.c 
Log Message:
Cleanup a bit and add some error checking

Index: symtable.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/symtable.c,v
retrieving revision 2.10.8.19
retrieving revision 2.10.8.20
diff -C2 -d -r2.10.8.19 -r2.10.8.20
*** symtable.c	24 Jan 2004 19:43:46 -0000	2.10.8.19
--- symtable.c	27 Jan 2004 16:36:30 -0000	2.10.8.20
***************
*** 47,57 ****
  	ste->ste_lineno = lineno;
  
! 	if (st->st_cur == NULL)
! 		ste->ste_nested = 0;
! 	else if (st->st_cur->ste_nested 
! 		 || st->st_cur->ste_type == FunctionBlock)
  		ste->ste_nested = 1;
- 	else
- 		ste->ste_nested = 0;
  	ste->ste_child_free = 0;
  	ste->ste_generator = 0;
--- 47,55 ----
  	ste->ste_lineno = lineno;
  
! 	ste->ste_nested = 0;
! 	if (st->st_cur != NULL &&
! 	    (st->st_cur->ste_nested ||
! 	     st->st_cur->ste_type == FunctionBlock))
  		ste->ste_nested = 1;
  	ste->ste_child_free = 0;
  	ste->ste_generator = 0;
***************
*** 193,196 ****
--- 191,196 ----
  {
  	struct symtable *st = symtable_new();
+ 	asdl_seq *seq;
+ 	int i;
  
  	if (st == NULL)
***************
*** 203,226 ****
  	/* 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: {
! 		int i;
! 		asdl_seq *seq = mod->v.Interactive.body;
  		for (i = 0; i < asdl_seq_LEN(seq); i++)
  			if (!symtable_visit_stmt(st, asdl_seq_GET(seq, i)))
  				goto error;
  		break;
- 	}
  	case Suite_kind:
  		PyErr_SetString(PyExc_RuntimeError,
--- 203,222 ----
  	/* Any other top-level initialization? */
  	switch (mod->kind) {
! 	case Module_kind:
! 		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:
! 		seq = mod->v.Interactive.body;
  		for (i = 0; i < asdl_seq_LEN(seq); i++)
  			if (!symtable_visit_stmt(st, asdl_seq_GET(seq, i)))
  				goto error;
  		break;
  	case Suite_kind:
  		PyErr_SetString(PyExc_RuntimeError,
***************
*** 229,235 ****
  	}
  	symtable_exit_block(st, (void *)mod);
! 	if (!symtable_analyze(st))
! 	    goto error;
! 	return st;
   error:
  	PySymtable_Free(st);
--- 225,230 ----
  	}
  	symtable_exit_block(st, (void *)mod);
! 	if (symtable_analyze(st))
! 		return st;
   error:
  	PySymtable_Free(st);
***************
*** 270,283 ****
  PyST_GetScope(PySTEntryObject *ste, PyObject *name)
  {
! 	PyObject *v;
! 	int flags;
! 
! 	v = PyDict_GetItem(ste->ste_symbols, name);
  	if (!v)
  		return 0;
  	assert(PyInt_Check(v));
! 	flags = PyInt_AS_LONG(v);
! 	flags = (flags >> SCOPE_OFF) & SCOPE_MASK;
! 	return flags;
  }
  
--- 265,273 ----
  PyST_GetScope(PySTEntryObject *ste, PyObject *name)
  {
! 	PyObject *v = PyDict_GetItem(ste->ste_symbols, name);
  	if (!v)
  		return 0;
  	assert(PyInt_Check(v));
! 	return (PyInt_AS_LONG(v) >> SCOPE_OFF) & SCOPE_MASK;
  }
  
***************
*** 376,380 ****
  */
  
! int
  analyze_cells(PyObject *scope, PyObject *free)
  {
--- 366,370 ----
  */
  
! static int
  analyze_cells(PyObject *scope, PyObject *free)
  {
***************
*** 573,576 ****
--- 563,568 ----
  	    val = flag;
  	o = PyInt_FromLong(val);
+         if (o == NULL)
+             return 0;
  	if (PyDict_SetItem(dict, name, o) < 0) {
  		Py_DECREF(o);
***************
*** 585,594 ****
  		/* XXX need to update DEF_GLOBAL for other flags too;
  		   perhaps only DEF_FREE_GLOBAL */
  		if ((o = PyDict_GetItem(st->st_global, name))) {
! 			val = PyInt_AS_LONG(o);
! 			val |= flag;
! 		} else
! 			val = flag;
  		o = PyInt_FromLong(val);
  		if (PyDict_SetItem(st->st_global, name, o) < 0) {
  			Py_DECREF(o);
--- 577,587 ----
  		/* XXX need to update DEF_GLOBAL for other flags too;
  		   perhaps only DEF_FREE_GLOBAL */
+ 		val = flag;
  		if ((o = PyDict_GetItem(st->st_global, name))) {
! 			val |= PyInt_AS_LONG(o);
! 		}
  		o = PyInt_FromLong(val);
+ 		if (o == NULL)
+ 			return 0;
  		if (PyDict_SetItem(st->st_global, name, o) < 0) {
  			Py_DECREF(o);
***************
*** 899,903 ****
  	*/
  	if (a->args && !symtable_visit_params(st, a->args, 1))
! 			return 0;
  	if (a->vararg) {
  		if (!symtable_add_def(st, a->vararg, DEF_PARAM))
--- 892,896 ----
  	*/
  	if (a->args && !symtable_visit_params(st, a->args, 1))
! 		return 0;
  	if (a->vararg) {
  		if (!symtable_add_def(st, a->vararg, DEF_PARAM))
***************
*** 929,940 ****
  symtable_visit_alias(struct symtable *st, alias_ty a)
  {
! 	if (a->asname) {
! 		if (!symtable_add_def(st, a->asname, DEF_IMPORT))
! 			return 0;
! 	}
! 	else if (!symtable_add_def(st, a->name, DEF_IMPORT))
! 		return 0;
! 
! 	return 1;
  }
  
--- 922,927 ----
  symtable_visit_alias(struct symtable *st, alias_ty a)
  {
! 	PyObject *name = (a->asname == NULL) ? a->name : a->asname;
! 	return symtable_add_def(st, name, DEF_IMPORT);
  }
  




More information about the Python-checkins mailing list