Avoid function calls to access the current thread state and builtins
-- the thread state is passed in as an argument and the builtins are a
member thereof.
Mass checkin (more to follow for other directories).
Introduce truly separate (sub)interpreter objects. For now, these
must be used by separate threads, created from C. See Demo/pysvr for
an example of how to use this. This also rationalizes Python's
initialization and finalization behavior:
Py_Initialize() -- initialize the whole interpreter
Py_Finalize() -- finalize the whole interpreter
tstate = Py_NewInterpreter() -- create a new (sub)interpreter
Py_EndInterpreter(tstate) -- delete a new (sub)interpreter
There are also new interfaces relating to threads and the interpreter
lock, which can be used to create new threads, and sometimes have to
be used to manipulate the interpreter lock when creating or deleting
sub-interpreters. These are only defined when WITH_THREAD is defined:
PyEval_AcquireLock() -- acquire the interpreter lock
PyEval_ReleaseLock() -- release the interpreter lock
PyEval_AcquireThread(tstate) -- acquire the lock and make the thread current
PyEval_ReleaseThread(tstate) -- release the lock and make NULL current
Other administrative changes:
- The header file bltinmodule.h is deleted.
- The init functions for Import, Sys and Builtin are now internal and
declared in pythonrun.h.
- Py_Setup() and Py_Cleanup() are no longer declared.
- The interpreter state and thread state structures are now linked
together in a chain (the chain of interpreters is a static variable
in pythonrun.c).
- Some members of the interpreter and thread structures have new,
shorter, more consistent, names.
- Added declarations for _PyImport_{Find,Fixup}Extension() to import.h.
Add a simple way to enable purify; now you can set the Make variable
PURIFY (e.g. in the Setup file or on the make command line) to point
to the purify command, to run purify.
Functionality enhancement: allow other threads to use Tk commands
while one thread is blocked in mainloop(). Also, handle signals (not
just interrupts) as soon as they happen.
Cleanup: remove support for Tcl/Tk versions 7.4/4.0. (I've confirmed
that it works for 7.5/4.1 and 7.6/4.2, as well as 8.0b2.)
Coding style change: instead of ``func (args)'', write ``func(args)''
everywhere.
Minor functionality change: use PyArg_ParseTuple everywhere. This
should only affect the errors reported for bad argument lists; in
particular, deletefilehandler() is much clearer about what's going
on.
Extend the "Don Beaudry hack" with "Guido's corollary" -- if the base
class has a __class__ attribute, call that to create the new class.
This allows us to write metaclasses purely in C!
Moved the special compile of getbuildno.o to ../Makefile.in.
A dummy getbuildno.o (with a number of 0) still gets built here,
to make the library complete.
Build getbuildno.o here, to adequately update it every time a new
python executable is built. (It still won't reflect builds of the
library only, but since the default make target builds the python
executable, that's alright.)
Tweaks by Lars Wirzenius to parse some more forms of illegal dates:
the comma after the day name is optional if it is a recognized day
name; and the date and month may be swapped. Thus, the following two
test dates will now be parsed correctly:
Thu, Feb 13 12:16:57 1992
Thu Feb 13 12:16:57 1992
Fred Drake [Fri, 25 Jul 1997 13:14:35 +0000 (13:14 +0000)]
Bump up the version number. The date still needs to be set (Guido will
have to do that one!), but at least the version will match the release
version. (1.5a2 got skipped for this.)
Fred Drake [Thu, 24 Jul 1997 15:39:16 +0000 (15:39 +0000)]
A couple of grammatical nits.
Re-sequenced the function descriptions so that the formatting is described
before the assumption is made that the reader has a clue about the formatting.
Moved examples to be closer to the functions being demonstrated.
Removed some variables that are used to exchange data between import.c and
importdl.c: the MAXSUFFIXSIZE macro is now defined in importdl.h, and
the modules dictionary is now passed using PyImport_GetModuleDict().
Also undefine USE_SHLIB for AIX -- in AIX 4.2 and up, dlfcn.h exists
but we don't want to use it.
Moved some stuff here from main.c (part of a big restructuring - wait
for more!).
- The global flags that can be set from environment variables are now
set in Py_Initialize (except the silly Py_SuppressPrint, which no
longer exists). This saves duplicate code in frozenmain.c and main.c.
- Py_GetProgramName() is now here; added Py_SetProgramName(). An
embedding program should no longer provide Py_GetProgramName(),
instead it should call Py_SetProgramName() *before* calling
Py_Initialize().
Use the new functions PyEval_AcquireThread() and
PyEval_ReleaseThread() (in ceval.c) to set/reset the current thread,
and at the same time acquire/release the interpreter lock.
PyEval_SaveThread() and PyEval_RestoreThread() now return/take a
PyThreadState pointer instead of a (frame) PyObject pointer. This
makes much more sense. It is backward incompatible, but that's no
problem, because (a) the heaviest users are the Py_{BEGIN,END}_
ALLOW_THREADS macros here, which have been fixed too; (b) there are
very few direct users; (c) those who use it are there will probably
appreciate the change.
Also, added new functions PyEval_AcquireThread() and
PyEval_ReleaseThread() which allows the threads created by the thread
module as well threads created by others (!) to set/reset the current
thread, and at the same time acquire/release the interpreter lock.
Checking in new module code.py -- utilities dealing with code objects.
Currently, contains one function: compile_command(), which helps
determining whether a source string is complete, incomplete or in
error. This is useful when writing your own version of the Python
read-eval-print loop.
Huge speedup by inlining some common integer operations:
int+int, int-int, int <compareop> int, and list[int].
(Unfortunately, int*int is way too much code to inline.)
Also corrected a NULL that should have been a zero.