[Python-checkins] python/dist/src/Python compile.c,2.319,2.320

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Wed Aug 18 07:22:09 CEST 2004


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

Modified Files:
	compile.c 
Log Message:
Move the bytecode optimizer upstream so that its results are saved in pyc
files and not re-optimized upon import.  Saves a bit of startup time while
still remaining decoupled from the rest of the compiler.

As a side benefit, handcoded bytecode is not run through the optimizer
when new code objects are created.  Hopefully, a handcoder has already
created exactly what they want to have run.

(Idea suggested by Armin Rigo and Michael Hudson.  Initially avoided 
 because of worries about compiler coupling; however, only the nexus
 point needed to be moved so there won't be a conflict when the AST
 branch is loaded.)



Index: compile.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/compile.c,v
retrieving revision 2.319
retrieving revision 2.320
diff -C2 -d -r2.319 -r2.320
*** compile.c	17 Aug 2004 17:29:15 -0000	2.319
--- compile.c	18 Aug 2004 05:22:06 -0000	2.320
***************
*** 626,630 ****
  		co->co_stacksize = stacksize;
  		co->co_flags = flags;
! 		co->co_code = optimize_code(code, consts, names);
  		Py_INCREF(consts);
  		co->co_consts = consts;
--- 626,631 ----
  		co->co_stacksize = stacksize;
  		co->co_flags = flags;
! 		Py_INCREF(code);
! 		co->co_code = code;
  		Py_INCREF(consts);
  		co->co_consts = consts;
***************
*** 4792,4796 ****
  	if (sc.c_errors == 0) {
  		PyObject *consts, *names, *varnames, *filename, *name,
! 			*freevars, *cellvars;
  		consts = PyList_AsTuple(sc.c_consts);
  		names = PyList_AsTuple(sc.c_names);
--- 4793,4797 ----
  	if (sc.c_errors == 0) {
  		PyObject *consts, *names, *varnames, *filename, *name,
! 			*freevars, *cellvars, *code;
  		consts = PyList_AsTuple(sc.c_consts);
  		names = PyList_AsTuple(sc.c_names);
***************
*** 4801,4804 ****
--- 4802,4806 ----
  		filename = PyString_InternFromString(sc.c_filename);
  		name = PyString_InternFromString(sc.c_name);
+ 		code = optimize_code(sc.c_code, consts, names);
  		if (!PyErr_Occurred())
  			co = PyCode_New(sc.c_argcount,
***************
*** 4806,4810 ****
  					sc.c_maxstacklevel,
  					sc.c_flags,
! 					sc.c_code,
  					consts,
  					names,
--- 4808,4812 ----
  					sc.c_maxstacklevel,
  					sc.c_flags,
! 					code,
  					consts,
  					names,
***************
*** 4823,4826 ****
--- 4825,4829 ----
  		Py_XDECREF(filename);
  		Py_XDECREF(name);
+ 		Py_XDECREF(code);
  	}
  	else if (!PyErr_Occurred()) {



More information about the Python-checkins mailing list