[Python-checkins] python/dist/src/Python newcompile.c, 1.1.2.73, 1.1.2.74

jhylton at users.sourceforge.net jhylton at users.sourceforge.net
Sun Feb 15 23:07:27 EST 2004


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

Modified Files:
      Tag: ast-branch
	newcompile.c 
Log Message:
Extend compute_code_flags() to set CO_NOFREE.


Index: newcompile.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/Attic/newcompile.c,v
retrieving revision 1.1.2.73
retrieving revision 1.1.2.74
diff -C2 -d -r1.1.2.73 -r1.1.2.74
*** newcompile.c	15 Feb 2004 04:19:28 -0000	1.1.2.73
--- newcompile.c	16 Feb 2004 04:07:24 -0000	1.1.2.74
***************
*** 2616,2620 ****
  {
  	PySTEntryObject *ste = c->u->u_ste;
! 	int flags = 0;
  	if (ste->ste_type != ModuleBlock)
  		flags |= CO_NEWLOCALS;
--- 2616,2620 ----
  {
  	PySTEntryObject *ste = c->u->u_ste;
! 	int flags = 0, n;
  	if (ste->ste_type != ModuleBlock)
  		flags |= CO_NEWLOCALS;
***************
*** 2631,2634 ****
--- 2631,2646 ----
  	if (ste->ste_varkeywords)
  		flags |= CO_VARKEYWORDS;
+ 	n = PyDict_Size(c->u->u_freevars);
+ 	if (n < 0)
+ 	    return -1;
+ 	if (n == 0) {
+ 	    n = PyDict_Size(c->u->u_cellvars);
+ 	    if (n < 0)
+ 		return -1;
+ 	    if (n == 0) {
+ 		flags |= CO_NOFREE;
+ 	    }
+ 	}
+ 
  	return flags;
  }
***************
*** 2645,2649 ****
  	PyObject *freevars = NULL;
  	PyObject *cellvars = NULL;
! 	int nlocals;
  
  	consts = dict_keys_inorder(c->u->u_consts, 0);
--- 2657,2661 ----
  	PyObject *freevars = NULL;
  	PyObject *cellvars = NULL;
! 	int nlocals, flags;
  
  	consts = dict_keys_inorder(c->u->u_consts, 0);
***************
*** 2662,2667 ****
  
          nlocals = PyDict_Size(c->u->u_varnames);
  	co = PyCode_New(c->u->u_argcount, nlocals, stackdepth(c),
! 			compute_code_flags(c),
  			a->a_bytecode, consts, names, varnames,
  			freevars, cellvars,
--- 2674,2682 ----
  
          nlocals = PyDict_Size(c->u->u_varnames);
+ 	flags = compute_code_flags(c);
+ 	if (flags < 0)
+ 	    goto error;
  	co = PyCode_New(c->u->u_argcount, nlocals, stackdepth(c),
! 			flags,
  			a->a_bytecode, consts, names, varnames,
  			freevars, cellvars,




More information about the Python-checkins mailing list