summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
Commit message (Collapse)AuthorAgeFilesLines
* Give more detailed error message when the argument count isn't right.Guido van Rossum1997-11-191-4/+6
|
* Fix memory leak in exec statement with code object -- the None returnedGuido van Rossum1997-11-111-2/+4
| | | | | | by PyEval_EvalCode() on success was never DECREF'ed. Fix by Bernhard Herzog.
* Change PyEval_SaveThread() and PyEval_RestoreThread() to always do theGuido van Rossum1997-09-301-12/+9
| | | | | | tstate swapping. Only the acquiring and releasing of the lock is conditional (twice, under ``#ifdef WITH_THREAD'' and inside ``if (interpreter_lock)'').
* First part of package support.Guido van Rossum1997-09-051-10/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This doesn't yet support "import a.b.c" or "from a.b.c import x", but it does recognize directories. When importing a directory, it initializes __path__ to a list containing the directory name, and loads the __init__ module if found. The (internal) find_module() and load_module() functions are restructured so that they both also handle built-in and frozen modules and Mac resources (and directories of course). The imp module's find_module() and (new) load_module() also have this functionality. Moreover, imp unconditionally defines constants for all module types, and has two more new functions: find_module_in_package() and find_module_in_directory(). There's also a new API function, PyImport_ImportModuleEx(), which takes all four __import__ arguments (name, globals, locals, fromlist). The last three may be NULL. This is currently the same as PyImport_ImportModule() but in the future it will be able to do relative dotted-path imports. Other changes: - bltinmodule.c: in __import__, call PyImport_ImportModuleEx(). - ceval.c: always pass the fromlist to __import__, even if it is a C function, so PyImport_ImportModuleEx() is useful. - getmtime.c: the function has a second argument, the FILE*, on which it applies fstat(). According to Sjoerd this is much faster. The first (pathname) argument is ignored, but remains for backward compatibility (so the Mac version still works without changes). By cleverly combining the new imp functionality, the full support for dotted names in Python (mini.py, not checked in) is now about 7K, lavishly commented (vs. 14K for ni plus 11K for ihooks, also lavishly commented). Good night!
* Inline PyObject_CallObject (Marc-Andre Lemburg).Guido van Rossum1997-08-301-0/+5
|
* eval_code2(), set_exc_info(): Call PyErr_NormalizeException() theBarry Warsaw1997-08-281-2/+2
| | | | | | former rather than the latter, since PyErr_NormalizeException takes PyObject** and I didn't want to change the interface for set_exc_info (but I did want the changes propagated to eval_code2!).
* unpack_sequence(): In finally clause, watch out for Py_DECREFBarry Warsaw1997-08-251-2/+2
| | | | evaluating its arguments twice.
* eval_code2(): collapsed the implementations of UNPACK_TUPLE andBarry Warsaw1997-08-251-33/+74
| | | | | | | | | | | | | | UNPACK_LIST byte codes and added a third code path that allows generalized sequence unpacking. Now both syntaxes: a, b, c = seq [a, b, c] = seq can be used to unpack any sequence with the exact right number of items. unpack_sequence(): out-lined implementation of generalized sequence unpacking. tuple and list unpacking are still inlined.
* cmp_exception gets promoted (essentially) to the C API functionBarry Warsaw1997-08-221-59/+10
| | | | | | | | | | | PyErr_GivenExceptionMatches(). set_exc_info(): make sure to normalize exceptions. do_raise(): Use PyErr_NormalizeException() if type is a class. loop_subscript(): Use PyErr_ExceptionMatches() instead of raw pointer compare for PyExc_IndexError.
* Reverse the search order for the Don Beaudry hook so that the firstGuido van Rossum1997-08-221-4/+3
| | | | class wins. Makes more sense.
* Renamed a local label that was accidentally grandly renamed toGuido van Rossum1997-08-051-3/+3
| | | | 'Py_Cleanup' back to 'cleanup'.
* The last of the mass checkins for separate (sub)interpreters.Guido van Rossum1997-08-021-9/+20
| | | | | | | Everything should now work again. See the comments for the .h files mass checkin (e.g. pystate.h) for more detail.
* Extend the "Don Beaudry hack" with "Guido's corollary" -- if the baseGuido van Rossum1997-07-311-10/+27
| | | | | class has a __class__ attribute, call that to create the new class. This allows us to write metaclasses purely in C!
* Moved PyEval_{Acquire,Release}Thread() to within the same #ifdefGuido van Rossum1997-07-191-21/+23
| | | | | | WITH_THREAD as PyEval_InitThreads(). Removed use of Py_SuppressPrintingFlag.
* PyEval_SaveThread() and PyEval_RestoreThread() now return/take aGuido van Rossum1997-07-181-6/+28
| | | | | | | | | | | | | | | | 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. Much saner.
* Huge speedup by inlining some common integer operations:Guido van Rossum1997-07-171-5/+75
| | | | | | | 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.
* PyObject_Compare can raise an exception now.Guido van Rossum1997-05-231-0/+7
|
* Py_FlushLine and PyFile_WriteString now return error indicatorsGuido van Rossum1997-05-221-12/+24
| | | | instead of calling PyErr_Clear(). Add checking of those errors.
* Plug leak of stack frame object in exception handling code.Guido van Rossum1997-05-201-9/+26
| | | | | Also delay DECREF calls until after the structures have been updated (for reentrancy awareness).
* Logic for enabling mac-specific signal handling fixed (Jack)Guido van Rossum1997-05-201-1/+1
|
* (int) cast for strlen() to keep picky compilers happy.Guido van Rossum1997-05-131-1/+1
|
* Instead of importing graminit.h whenever one of the three grammar 'root'Guido van Rossum1997-05-071-3/+3
| | | | symbols is needed, define these in Python.h with a Py_ prefix.
* Used operators from abstract.h where possible (arithmetic operators,Guido van Rossum1997-05-061-420/+30
| | | | | | get/set/del item). This removes a pile of duplication. There's no abstract operator for 'not' but I removed the function call for it anyway -- it's a little faster in-line.
* Massive changes for separate thread state management.Guido van Rossum1997-05-051-151/+263
| | | | | All per-thread globals are moved into a struct which is manipulated separately.
* Quickly renamed.Guido van Rossum1997-04-291-799/+798
|
* Clarify error message for unexpected keyword parameter.Guido van Rossum1997-03-101-1/+4
|
* *Don't* kill all local variables on function exit. This will be doneGuido van Rossum1997-02-141-12/+0
| | | | | | | | by the frameobject dealloc when it is time for the locals to go. When there's still a traceback object referencing this stack frame, we don't want the local variables to disappear yet. (Hmm... Shouldn't they be copied to the f_locals dictionary?)
* Two small changes:Guido van Rossum1997-01-271-5/+3
| | | | | | | | | - Use co->... instead of f->f_code->...; save an extra lookup of what we already have in a local variable). - Remove test for nlocals > 0 before setting fastlocals to f->f_localsplus; 0 is a rare case and the assignment is safe even then.
* Plug a leak with calling something other than a function or method isGuido van Rossum1997-01-271-4/+3
| | | | | | | called with keyword arguments -- the keyword and value were leaked. This affected for instance with a __call__() method. Bug reported and fix supplied by Jim Fulton.
* Patches for (two forms of) optional dynamic execution profiling --Guido van Rossum1997-01-241-0/+68
| | | | | | i.e., counting opcode frequencies, or (with DXPAIRS defined) opcode pair frequencies. Define DYNAMIC_EXECUTION_PROFILE on the command line (for this file and for sysmodule.c) to enable.
* Change the control flow for error handling in the function prelude toGuido van Rossum1997-01-241-23/+17
| | | | | jump to the "Kill locals" section at the end. Add #ifdef macintosh bandaid to make sure we call sigcheck() on the Mac.
* Kill all local variables on function return. This closes a giganticGuido van Rossum1997-01-211-0/+12
| | | | | leak of memory and file descriptors (thanks for Roj for reporting that!). Alas, the speed goes down by 5%. :-(
* Only call sigcheck() at the ticker code if we don't have true signals.Guido van Rossum1997-01-211-2/+6
| | | | | | | This is safe now that both intrcheck() and signalmodule.c schedule a sigcheck() call via Py_AddPendingCall(). This gives another 7% speedup (never run such a test twice ;-).
* Cleanup:Guido van Rossum1997-01-211-222/+10
| | | | | | | | | | - fix bug in Py_MakePendingCalls() with threading - fix return type of do_raise - remove build_slice (same as PySlice_New) - remove code inside #if 0 - remove code inside #ifdef CHECK_STACK - remove code inside #ifdef SUPPORT_OBSOLETE_ACCESS - comment about newimp.py should refer to ni.py
* Changes for frame object speedup:Guido van Rossum1997-01-201-14/+2
| | | | | | - get fastlocals differently - call newframeobject() with fewer arguments - toss getowner(), which was unused anyway
* Add "if (x != NULL) continue;" (or similar for err==0) before theGuido van Rossum1997-01-181-18/+60
| | | | | break to most cases, as suggested by Tim Peters. This gives another 8-10% speedup.
* Use the stack size from the code object and the CO_MAXBLOCKS constantGuido van Rossum1997-01-171-2/+10
| | | | from compile.h. Remove all eval stack overflow checks.
* Rename DEBUG macro to Py_DEBUGGuido van Rossum1996-12-301-3/+3
|
* Moved the raise logic out of the main interpreter loop to a separate function.Guido van Rossum1996-12-101-60/+127
| | | | | | | | | | | | | | | The raise logic has one additional feature: if you raise <class>, <value> where <value> is not an instance, it will construct an instance using <value> as argument. If <value> is None, <class> is instantiated without arguments. If <value> is a tuple, it is used as the argument list. This feature is intended to make it easier to upgrade code from using string exceptions to using class exceptions; without this feature, you'd have to change every raise statement from ``raise X'' to ``raise X()'' and from ``raise X, y'' to ``raise X(y)''. The latter is still the recommended form (because it has no ambiguities about the number of arguments), but this change makes the transition less painful.
* Change the Don Beaudry hack into the Don B + Jim F hack; now, if *any*Guido van Rossum1996-12-051-28/+26
| | | | | | base class is special it gets invoked. Make gcc -Wall happy.
* New permission notice, includes CNRI.Guido van Rossum1996-10-251-13/+20
|
* Raise TypeError, not KeyError, on unknown keyword argument.Guido van Rossum1996-08-191-2/+1
|
* Don't test here for negative number to float power; that belongs inGuido van Rossum1996-08-161-9/+0
| | | | floatobject.c.
* Disable support for access statementGuido van Rossum1996-08-121-0/+28
|
* Better error message if stride used on normal sequence objectGuido van Rossum1996-07-301-2/+10
|
* Changes for slice and ellipsesGuido van Rossum1996-07-301-13/+67
|
* Renamed static pow() to powerop() to avoid name conflict in some compilers.Guido van Rossum1996-06-191-4/+4
|
* Removed some done "to do" items.Guido van Rossum1996-05-241-9/+3
| | | | Changed #ifdef DEBUG slightly.
* removed sime redundant header includes and decls.Guido van Rossum1996-05-231-8/+0
|
* changes for complex and power (**) operatorGuido van Rossum1996-01-121-0/+38
|