Cache __builtin__ name lookups so they are performed on module load rather than at...
authorRobert Bradshaw <robertwb@math.washington.edu>
Sat, 14 Apr 2007 11:13:05 +0000 (04:13 -0700)
committerRobert Bradshaw <robertwb@math.washington.edu>
Sat, 14 Apr 2007 11:13:05 +0000 (04:13 -0700)
commit6fd9a1952f118fd9d0668f778d2e02717e25c870
tree48acdea976ac056360a62e125ceda34e9a48edf0
parenta72407b4fff57f0b8a78a08af3b70e693186247c
Cache __builtin__ name lookups so they are performed on module load rather than at every use.

The code "__Pyx_GetName(__pyx_b, __pyx_n_[string])" is performed in several
thousand places throughout the sage library, and can be quite expensive
(a dictionary lookup, possibly raising an error, etc.) This is redundant
as the result will always be the same. I perform the lookup once
(on loading the module), then have a pointer to the result for all subsequent use.

The most common examples are bool/str/int (both as function calls and
in isinstance), True/False, and raisign errors.

A side feature is that on loading a module with an illegal __builtin__ name,
it will complain at load time rather than at run time.
Cython/Compiler/ExprNodes.py
Cython/Compiler/Naming.py
Cython/Compiler/Nodes.py
Cython/Compiler/Options.py
Cython/Compiler/Symtab.py