Index: Include/Python.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/Python.h,v retrieving revision 2.57 diff -c -r2.57 Python.h *** Include/Python.h 12 Aug 2002 07:21:56 -0000 2.57 --- Include/Python.h 15 Aug 2002 15:14:12 -0000 *************** *** 113,118 **** --- 113,120 ---- #include "abstract.h" + #include "staticnames.h" + /* _Py_Mangle is defined in compile.c */ PyAPI_FUNC(int) _Py_Mangle(char *p, char *name, \ char *buffer, size_t maxlen); Index: Include/object.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/object.h,v retrieving revision 2.111 diff -c -r2.111 object.h *** Include/object.h 8 Aug 2002 20:55:20 -0000 2.111 --- Include/object.h 15 Aug 2002 15:14:12 -0000 *************** *** 94,99 **** --- 94,101 ---- PyObject_HEAD \ int ob_size; /* Number of items in variable part */ + #define PyObject_VAR_HEAD_INIT(type, size) PyObject_HEAD_INIT(type), (size), + /* Nothing is actually declared to be a PyObject, but every pointer to * a Python object can be cast to a PyObject*. This is inheritance built * by hand. Similarly every pointer to a variable-size Python object can, Index: Include/staticnamelist.h =================================================================== RCS file: Include/staticnamelist.h diff -N Include/staticnamelist.h *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Include/staticnamelist.h 15 Aug 2002 15:14:12 -0000 *************** *** 0 **** --- 1,433 ---- + /* List of built-in Python symbols used for static names. + This file should probably be generated automatically somehow */ + + PyDEFNAME(ArithmeticError, 15) + PyDEFNAME(AssertionError, 14) + PyDEFNAME(AttributeError, 14) + PyDEFNAME(DeprecationWarning, 18) + PyDEFNAME(EOFError, 8) + PyDEFNAME(Ellipsis, 8) + PyDEFNAME(EnvironmentError, 16) + PyDEFNAME(Exception, 9) + PyDEFNAME(False, 5) + PyDEFNAME(FloatingPointError, 18) + PyDEFNAME(IOError, 7) + PyDEFNAME(ImportError, 11) + PyDEFNAME(IndentationError, 16) + PyDEFNAME(IndexError, 10) + PyDEFNAME(KeyError, 8) + PyDEFNAME(KeyboardInterrupt, 17) + PyDEFNAME(LookupError, 11) + PyDEFNAME(MemoryError, 11) + PyDEFNAME(NSIG, 4) + PyDEFNAME(NameError, 9) + PyDEFNAME(None, 4) + PyDEFNAME(NotImplemented, 14) + PyDEFNAME(NotImplementedError, 19) + PyDEFNAME(OSError, 7) + PyDEFNAME(OverflowError, 13) + PyDEFNAME(OverflowWarning, 15) + PyDEFNAME(PendingDeprecationWarning, 25) + PyDEFNAME(ReferenceError, 14) + PyDEFNAME(RuntimeError, 12) + PyDEFNAME(RuntimeWarning, 14) + PyDEFNAME(SIGABRT, 7) + PyDEFNAME(SIGALRM, 7) + PyDEFNAME(SIGBUS, 6) + PyDEFNAME(SIGCHLD, 7) + PyDEFNAME(SIGCLD, 6) + PyDEFNAME(SIGCONT, 7) + PyDEFNAME(SIGFPE, 6) + PyDEFNAME(SIGHUP, 6) + PyDEFNAME(SIGILL, 6) + PyDEFNAME(SIGINT, 6) + PyDEFNAME(SIGIO, 5) + PyDEFNAME(SIGIOT, 6) + PyDEFNAME(SIGKILL, 7) + PyDEFNAME(SIGPIPE, 7) + PyDEFNAME(SIGPOLL, 7) + PyDEFNAME(SIGPROF, 7) + PyDEFNAME(SIGPWR, 6) + PyDEFNAME(SIGQUIT, 7) + PyDEFNAME(SIGSEGV, 7) + PyDEFNAME(SIGSTOP, 7) + PyDEFNAME(SIGSYS, 6) + PyDEFNAME(SIGTERM, 7) + PyDEFNAME(SIGTRAP, 7) + PyDEFNAME(SIGTSTP, 7) + PyDEFNAME(SIGTTIN, 7) + PyDEFNAME(SIGTTOU, 7) + PyDEFNAME(SIGURG, 6) + PyDEFNAME(SIGUSR1, 7) + PyDEFNAME(SIGUSR2, 7) + PyDEFNAME(SIGVTALRM, 9) + PyDEFNAME(SIGWINCH, 8) + PyDEFNAME(SIGXCPU, 7) + PyDEFNAME(SIGXFSZ, 7) + PyDEFNAME(SIG_DFL, 7) + PyDEFNAME(SIG_IGN, 7) + PyDEFNAME(StandardError, 13) + PyDEFNAME(StopIteration, 13) + PyDEFNAME(SyntaxError, 11) + PyDEFNAME(SyntaxWarning, 13) + PyDEFNAME(SystemError, 11) + PyDEFNAME(SystemExit, 10) + PyDEFNAME(TabError, 8) + PyDEFNAME(True, 4) + PyDEFNAME(TypeError, 9) + PyDEFNAME(UnboundLocalError, 17) + PyDEFNAME(UnicodeError, 12) + PyDEFNAME(UserWarning, 11) + PyDEFNAME(ValueError, 10) + PyDEFNAME(Warning, 7) + PyDEFNAME(ZeroDivisionError, 17) + PyDEFNAME(__abs__, 7) + PyDEFNAME(__add__, 7) + PyDEFNAME(__and__, 7) + PyDEFNAME(__base__, 8) + PyDEFNAME(__bases__, 9) + PyDEFNAME(__basicsize__, 13) + PyDEFNAME(__builtin__, 11) + PyDEFNAME(__builtins__, 12) + PyDEFNAME(__call__, 8) + PyDEFNAME(__class__, 9) + PyDEFNAME(__cmp__, 7) + PyDEFNAME(__coerce__, 10) + PyDEFNAME(__contains__, 12) + PyDEFNAME(__debug__, 9) + PyDEFNAME(__delattr__, 11) + PyDEFNAME(__delete__, 10) + PyDEFNAME(__delitem__, 11) + PyDEFNAME(__delslice__, 12) + PyDEFNAME(__dict__, 8) + PyDEFNAME(__dictoffset__, 14) + PyDEFNAME(__displayhook__, 15) + PyDEFNAME(__div__, 7) + PyDEFNAME(__divmod__, 10) + PyDEFNAME(__doc__, 7) + PyDEFNAME(__eq__, 6) + PyDEFNAME(__excepthook__, 14) + PyDEFNAME(__file__, 8) + PyDEFNAME(__flags__, 9) + PyDEFNAME(__float__, 9) + PyDEFNAME(__floordiv__, 12) + PyDEFNAME(__ge__, 6) + PyDEFNAME(__get__, 7) + PyDEFNAME(__getattribute__, 16) + PyDEFNAME(__getitem__, 11) + PyDEFNAME(__getslice__, 12) + PyDEFNAME(__gt__, 6) + PyDEFNAME(__hash__, 8) + PyDEFNAME(__hex__, 7) + PyDEFNAME(__iadd__, 8) + PyDEFNAME(__iand__, 8) + PyDEFNAME(__idiv__, 8) + PyDEFNAME(__ifloordiv__, 13) + PyDEFNAME(__ilshift__, 11) + PyDEFNAME(__imod__, 8) + PyDEFNAME(__import__, 10) + PyDEFNAME(__imul__, 8) + PyDEFNAME(__init__, 8) + PyDEFNAME(__int__, 7) + PyDEFNAME(__invert__, 10) + PyDEFNAME(__ior__, 7) + PyDEFNAME(__ipow__, 8) + PyDEFNAME(__irshift__, 11) + PyDEFNAME(__isub__, 8) + PyDEFNAME(__itemsize__, 12) + PyDEFNAME(__iter__, 8) + PyDEFNAME(__itruediv__, 12) + PyDEFNAME(__ixor__, 8) + PyDEFNAME(__le__, 6) + PyDEFNAME(__len__, 7) + PyDEFNAME(__long__, 8) + PyDEFNAME(__lshift__, 10) + PyDEFNAME(__lt__, 6) + PyDEFNAME(__main__, 8) + PyDEFNAME(__mod__, 7) + PyDEFNAME(__module__, 10) + PyDEFNAME(__mro__, 7) + PyDEFNAME(__mul__, 7) + PyDEFNAME(__name__, 8) + PyDEFNAME(__ne__, 6) + PyDEFNAME(__neg__, 7) + PyDEFNAME(__new__, 7) + PyDEFNAME(__nonzero__, 11) + PyDEFNAME(__objclass__, 12) + PyDEFNAME(__oct__, 7) + PyDEFNAME(__or__, 6) + PyDEFNAME(__pos__, 7) + PyDEFNAME(__pow__, 7) + PyDEFNAME(__radd__, 8) + PyDEFNAME(__rand__, 8) + PyDEFNAME(__rdiv__, 8) + PyDEFNAME(__rdivmod__, 11) + PyDEFNAME(__reduce__, 10) + PyDEFNAME(__repr__, 8) + PyDEFNAME(__rfloordiv__, 13) + PyDEFNAME(__rlshift__, 11) + PyDEFNAME(__rmod__, 8) + PyDEFNAME(__rmul__, 8) + PyDEFNAME(__ror__, 7) + PyDEFNAME(__rpow__, 8) + PyDEFNAME(__rrshift__, 11) + PyDEFNAME(__rshift__, 10) + PyDEFNAME(__rsub__, 8) + PyDEFNAME(__rtruediv__, 12) + PyDEFNAME(__rxor__, 8) + PyDEFNAME(__self__, 8) + PyDEFNAME(__set__, 7) + PyDEFNAME(__setattr__, 11) + PyDEFNAME(__setitem__, 11) + PyDEFNAME(__setslice__, 12) + PyDEFNAME(__stderr__, 10) + PyDEFNAME(__stdin__, 9) + PyDEFNAME(__stdout__, 10) + PyDEFNAME(__str__, 7) + PyDEFNAME(__sub__, 7) + PyDEFNAME(__subclasses__, 14) + PyDEFNAME(__thisclass__, 13) + PyDEFNAME(__truediv__, 11) + PyDEFNAME(__weakrefoffset__, 17) + PyDEFNAME(__xor__, 7) + PyDEFNAME(_getframe, 9) + PyDEFNAME(abs, 3) + PyDEFNAME(alarm, 5) + PyDEFNAME(append, 6) + PyDEFNAME(apply, 5) + PyDEFNAME(argv, 4) + PyDEFNAME(basestring, 10) + PyDEFNAME(bool, 4) + PyDEFNAME(buffer, 6) + PyDEFNAME(builtin_module_names, 20) + PyDEFNAME(byteorder, 9) + PyDEFNAME(callable, 8) + PyDEFNAME(capitalize, 10) + PyDEFNAME(center, 6) + PyDEFNAME(chr, 3) + PyDEFNAME(classmethod, 11) + PyDEFNAME(clear, 5) + PyDEFNAME(close, 5) + PyDEFNAME(closed, 6) + PyDEFNAME(cmp, 3) + PyDEFNAME(co_argcount, 11) + PyDEFNAME(co_cellvars, 11) + PyDEFNAME(co_code, 7) + PyDEFNAME(co_consts, 9) + PyDEFNAME(co_filename, 11) + PyDEFNAME(co_firstlineno, 14) + PyDEFNAME(co_flags, 8) + PyDEFNAME(co_freevars, 11) + PyDEFNAME(co_lnotab, 9) + PyDEFNAME(co_name, 7) + PyDEFNAME(co_names, 8) + PyDEFNAME(co_nlocals, 10) + PyDEFNAME(co_stacksize, 12) + PyDEFNAME(co_varnames, 11) + PyDEFNAME(coerce, 6) + PyDEFNAME(compile, 7) + PyDEFNAME(complex, 7) + PyDEFNAME(conjugate, 9) + PyDEFNAME(copy, 4) + PyDEFNAME(copyright, 9) + PyDEFNAME(count, 5) + PyDEFNAME(decode, 6) + PyDEFNAME(default_int_handler, 19) + PyDEFNAME(delattr, 7) + PyDEFNAME(dict, 4) + PyDEFNAME(dir, 3) + PyDEFNAME(displayhook, 11) + PyDEFNAME(divmod, 6) + PyDEFNAME(encode, 6) + PyDEFNAME(endswith, 8) + PyDEFNAME(enumerate, 9) + PyDEFNAME(eval, 4) + PyDEFNAME(exc_info, 8) + PyDEFNAME(exc_type, 8) + PyDEFNAME(excepthook, 10) + PyDEFNAME(exceptions, 10) + PyDEFNAME(exec_prefix, 11) + PyDEFNAME(execfile, 8) + PyDEFNAME(executable, 10) + PyDEFNAME(exit, 4) + PyDEFNAME(expandtabs, 10) + PyDEFNAME(extend, 6) + PyDEFNAME(f_back, 6) + PyDEFNAME(f_builtins, 10) + PyDEFNAME(f_code, 6) + PyDEFNAME(f_exc_traceback, 15) + PyDEFNAME(f_exc_type, 10) + PyDEFNAME(f_exc_value, 11) + PyDEFNAME(f_globals, 9) + PyDEFNAME(f_lasti, 7) + PyDEFNAME(f_lineno, 8) + PyDEFNAME(f_locals, 8) + PyDEFNAME(f_restricted, 12) + PyDEFNAME(f_trace, 7) + PyDEFNAME(fdel, 4) + PyDEFNAME(fget, 4) + PyDEFNAME(file, 4) + PyDEFNAME(filename, 8) + PyDEFNAME(fileno, 6) + PyDEFNAME(filter, 6) + PyDEFNAME(find, 4) + PyDEFNAME(float, 5) + PyDEFNAME(flush, 5) + PyDEFNAME(fset, 4) + PyDEFNAME(func_closure, 12) + PyDEFNAME(func_code, 9) + PyDEFNAME(func_defaults, 13) + PyDEFNAME(func_dict, 9) + PyDEFNAME(func_doc, 8) + PyDEFNAME(func_globals, 12) + PyDEFNAME(func_name, 9) + PyDEFNAME(get, 3) + PyDEFNAME(getattr, 7) + PyDEFNAME(getdefaultencoding, 18) + PyDEFNAME(getdlopenflags, 14) + PyDEFNAME(getobjects, 10) + PyDEFNAME(getrecursionlimit, 17) + PyDEFNAME(getrefcount, 11) + PyDEFNAME(getsignal, 9) + PyDEFNAME(gettotalrefcount, 16) + PyDEFNAME(gi_frame, 8) + PyDEFNAME(gi_running, 10) + PyDEFNAME(globals, 7) + PyDEFNAME(has_key, 7) + PyDEFNAME(hasattr, 7) + PyDEFNAME(hash, 4) + PyDEFNAME(hex, 3) + PyDEFNAME(hexversion, 10) + PyDEFNAME(id, 2) + PyDEFNAME(im_class, 8) + PyDEFNAME(im_func, 7) + PyDEFNAME(im_self, 7) + PyDEFNAME(imag, 4) + PyDEFNAME(index, 5) + PyDEFNAME(indices, 7) + PyDEFNAME(input, 5) + PyDEFNAME(insert, 6) + PyDEFNAME(int, 3) + PyDEFNAME(intern, 6) + PyDEFNAME(isalnum, 7) + PyDEFNAME(isalpha, 7) + PyDEFNAME(isatty, 6) + PyDEFNAME(isdecimal, 9) + PyDEFNAME(isdigit, 7) + PyDEFNAME(isinstance, 10) + PyDEFNAME(islower, 7) + PyDEFNAME(isnumeric, 9) + PyDEFNAME(isspace, 7) + PyDEFNAME(issubclass, 10) + PyDEFNAME(istitle, 7) + PyDEFNAME(isupper, 7) + PyDEFNAME(items, 5) + PyDEFNAME(iter, 4) + PyDEFNAME(iteritems, 9) + PyDEFNAME(iterkeys, 8) + PyDEFNAME(itervalues, 10) + PyDEFNAME(join, 4) + PyDEFNAME(keys, 4) + PyDEFNAME(len, 3) + PyDEFNAME(lineno, 6) + PyDEFNAME(list, 4) + PyDEFNAME(ljust, 5) + PyDEFNAME(locals, 6) + PyDEFNAME(long, 4) + PyDEFNAME(lower, 5) + PyDEFNAME(lstrip, 6) + PyDEFNAME(map, 3) + PyDEFNAME(max, 3) + PyDEFNAME(maxint, 6) + PyDEFNAME(maxunicode, 10) + PyDEFNAME(min, 3) + PyDEFNAME(mode, 4) + PyDEFNAME(modules, 7) + PyDEFNAME(mro, 3) + PyDEFNAME(msg, 3) + PyDEFNAME(name, 4) + PyDEFNAME(newlines, 8) + PyDEFNAME(next, 4) + PyDEFNAME(object, 6) + PyDEFNAME(oct, 3) + PyDEFNAME(offset, 6) + PyDEFNAME(open, 4) + PyDEFNAME(ord, 3) + PyDEFNAME(path, 4) + PyDEFNAME(pause, 5) + PyDEFNAME(platform, 8) + PyDEFNAME(pop, 3) + PyDEFNAME(popitem, 7) + PyDEFNAME(pow, 3) + PyDEFNAME(prefix, 6) + PyDEFNAME(print_file_and_line, 19) + PyDEFNAME(property, 8) + PyDEFNAME(range, 5) + PyDEFNAME(raw_input, 9) + PyDEFNAME(read, 4) + PyDEFNAME(readinto, 8) + PyDEFNAME(readline, 8) + PyDEFNAME(readlines, 9) + PyDEFNAME(real, 4) + PyDEFNAME(reduce, 6) + PyDEFNAME(reload, 6) + PyDEFNAME(remove, 6) + PyDEFNAME(replace, 7) + PyDEFNAME(repr, 4) + PyDEFNAME(reverse, 7) + PyDEFNAME(rfind, 5) + PyDEFNAME(rindex, 6) + PyDEFNAME(rjust, 5) + PyDEFNAME(round, 5) + PyDEFNAME(rstrip, 6) + PyDEFNAME(seek, 4) + PyDEFNAME(setattr, 7) + PyDEFNAME(setcheckinterval, 16) + PyDEFNAME(setdefault, 10) + PyDEFNAME(setdefaultencoding, 18) + PyDEFNAME(setdlopenflags, 14) + PyDEFNAME(setprofile, 10) + PyDEFNAME(setrecursionlimit, 17) + PyDEFNAME(settrace, 8) + PyDEFNAME(signal, 6) + PyDEFNAME(slice, 5) + PyDEFNAME(softspace, 9) + PyDEFNAME(sort, 4) + PyDEFNAME(split, 5) + PyDEFNAME(splitlines, 10) + PyDEFNAME(start, 5) + PyDEFNAME(startswith, 10) + PyDEFNAME(staticmethod, 12) + PyDEFNAME(stderr, 6) + PyDEFNAME(stdin, 5) + PyDEFNAME(stdout, 6) + PyDEFNAME(step, 4) + PyDEFNAME(stop, 4) + PyDEFNAME(str, 3) + PyDEFNAME(strip, 5) + PyDEFNAME(super, 5) + PyDEFNAME(swapcase, 8) + PyDEFNAME(sys, 3) + PyDEFNAME(tell, 4) + PyDEFNAME(text, 4) + PyDEFNAME(title, 5) + PyDEFNAME(translate, 9) + PyDEFNAME(truncate, 8) + PyDEFNAME(tuple, 5) + PyDEFNAME(type, 4) + PyDEFNAME(types, 5) + PyDEFNAME(unichr, 6) + PyDEFNAME(unicode, 7) + PyDEFNAME(update, 6) + PyDEFNAME(upper, 5) + PyDEFNAME(values, 6) + PyDEFNAME(vars, 4) + PyDEFNAME(version, 7) + PyDEFNAME(version_info, 12) + PyDEFNAME(warnoptions, 11) + PyDEFNAME(write, 5) + PyDEFNAME(writelines, 10) + PyDEFNAME(xrange, 6) + PyDEFNAME(xreadlines, 10) + PyDEFNAME(zfill, 5) + PyDEFNAME(zip, 3) Index: Include/staticnames.h =================================================================== RCS file: Include/staticnames.h diff -N Include/staticnames.h *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Include/staticnames.h 15 Aug 2002 15:14:12 -0000 *************** *** 0 **** --- 1,33 ---- + /* Static string object for Python built-in names */ + + #ifndef Py_STATICNAMES_H + #define Py_STATICNAMES_H + #ifdef __cplusplus + extern "C" { + #endif + + #include + + /* Intern all static names. Called once on initilization */ + extern DL_IMPORT(void) _PyStaticNames_Init(void); + + /* This macro returns a PyObject pointer to an the interned string "name" + PyName(name) is equivalent to PyString_InternFromString("name") but + the result is a constant that may be used for initializing static data */ + + #define PyNAME(name) (&PySTATICNAME##name) + + /* Returns a C string (char*) pointing into the interned string "name" */ + #define PyNAMEC(name) ((char*)PyNAME(name)+offsetof(PyStringObject,ob_sval)) + + + #define PyDEFNAME(name, size) \ + PyAPI_DATA(PyObject) PySTATICNAME##name; + #include + #undef PyDEFNAME + + + #ifdef __cplusplus + } + #endif + #endif /* !Py_STATICNAMES_H */ Index: Include/stringobject.h =================================================================== RCS file: /cvsroot/python/python/dist/src/Include/stringobject.h,v retrieving revision 2.36 diff -c -r2.36 stringobject.h *** Include/stringobject.h 14 Aug 2002 07:46:22 -0000 2.36 --- Include/stringobject.h 15 Aug 2002 15:14:12 -0000 *************** *** 32,43 **** interning of any string. Together, these sped the interpreter by up to 20%. */ typedef struct { ! PyObject_VAR_HEAD ! long ob_shash; ! PyObject *ob_sinterned; char ob_sval[1]; } PyStringObject; PyAPI_DATA(PyTypeObject) PyBaseString_Type; PyAPI_DATA(PyTypeObject) PyString_Type; --- 32,54 ---- interning of any string. Together, these sped the interpreter by up to 20%. */ + + #define PyString_HEAD \ + PyObject_VAR_HEAD \ + int ob_shash; \ + void* ob_sinterned; + typedef struct { ! PyString_HEAD char ob_sval[1]; } PyStringObject; + + + /* For initializing static strings: */ + #define PyString_HEAD_INIT(len) \ + PyObject_HEAD_INIT(&PyString_Type) \ + (len), -1, 0, + PyAPI_DATA(PyTypeObject) PyBaseString_Type; PyAPI_DATA(PyTypeObject) PyString_Type; Index: Python/bltinmodule.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v retrieving revision 2.263 diff -c -r2.263 bltinmodule.c *** Python/bltinmodule.c 14 Aug 2002 15:46:02 -0000 2.263 --- Python/bltinmodule.c 15 Aug 2002 15:14:19 -0000 *************** *** 432,439 **** else if (locals == Py_None) locals = globals; ! if (PyDict_GetItemString(globals, "__builtins__") == NULL) { ! if (PyDict_SetItemString(globals, "__builtins__", PyEval_GetBuiltins()) != 0) return NULL; } --- 432,439 ---- else if (locals == Py_None) locals = globals; ! if (PyDict_GetItem(globals, PyNAME(__builtins__)) == NULL) { ! if (PyDict_SetItem(globals, PyNAME(__builtins__), PyEval_GetBuiltins()) != 0) return NULL; } *************** *** 495,502 **** } else if (locals == Py_None) locals = globals; ! if (PyDict_GetItemString(globals, "__builtins__") == NULL) { ! if (PyDict_SetItemString(globals, "__builtins__", PyEval_GetBuiltins()) != 0) return NULL; } --- 495,502 ---- } else if (locals == Py_None) locals = globals; ! if (PyDict_GetItem(globals, PyNAME(__builtins__)) == NULL) { ! if (PyDict_SetItem(globals, PyNAME(__builtins__), PyEval_GetBuiltins()) != 0) return NULL; } *************** *** 945,952 **** str++; globals = PyEval_GetGlobals(); locals = PyEval_GetLocals(); ! if (PyDict_GetItemString(globals, "__builtins__") == NULL) { ! if (PyDict_SetItemString(globals, "__builtins__", PyEval_GetBuiltins()) != 0) return NULL; } --- 945,952 ---- str++; globals = PyEval_GetGlobals(); locals = PyEval_GetLocals(); ! if (PyDict_GetItem(globals, PyNAME(__builtins__)) == NULL) { ! if (PyDict_SetItem(globals, PyNAME(__builtins__), PyEval_GetBuiltins()) != 0) return NULL; } *************** *** 1520,1526 **** Py_INCREF(d); } else { ! d = PyObject_GetAttrString(v, "__dict__"); if (d == NULL) { PyErr_SetString(PyExc_TypeError, "vars() argument must have __dict__ attribute"); --- 1520,1526 ---- Py_INCREF(d); } else { ! d = PyObject_GetAttr(v, PyNAME(__dict__)); if (d == NULL) { PyErr_SetString(PyExc_TypeError, "vars() argument must have __dict__ attribute"); *************** *** 1697,1747 **** static PyMethodDef builtin_methods[] = { ! {"__import__", builtin___import__, METH_VARARGS, import_doc}, ! {"abs", builtin_abs, METH_O, abs_doc}, ! {"apply", builtin_apply, METH_VARARGS, apply_doc}, ! {"callable", builtin_callable, METH_O, callable_doc}, ! {"chr", builtin_chr, METH_VARARGS, chr_doc}, ! {"cmp", builtin_cmp, METH_VARARGS, cmp_doc}, ! {"coerce", builtin_coerce, METH_VARARGS, coerce_doc}, ! {"compile", builtin_compile, METH_VARARGS, compile_doc}, ! {"delattr", builtin_delattr, METH_VARARGS, delattr_doc}, ! {"dir", builtin_dir, METH_VARARGS, dir_doc}, ! {"divmod", builtin_divmod, METH_VARARGS, divmod_doc}, ! {"eval", builtin_eval, METH_VARARGS, eval_doc}, ! {"execfile", builtin_execfile, METH_VARARGS, execfile_doc}, ! {"filter", builtin_filter, METH_VARARGS, filter_doc}, ! {"getattr", builtin_getattr, METH_VARARGS, getattr_doc}, ! {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc}, ! {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc}, ! {"hash", builtin_hash, METH_O, hash_doc}, ! {"hex", builtin_hex, METH_O, hex_doc}, ! {"id", builtin_id, METH_O, id_doc}, ! {"input", builtin_input, METH_VARARGS, input_doc}, ! {"intern", builtin_intern, METH_VARARGS, intern_doc}, ! {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc}, ! {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc}, ! {"iter", builtin_iter, METH_VARARGS, iter_doc}, ! {"len", builtin_len, METH_O, len_doc}, ! {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc}, ! {"map", builtin_map, METH_VARARGS, map_doc}, ! {"max", builtin_max, METH_VARARGS, max_doc}, ! {"min", builtin_min, METH_VARARGS, min_doc}, ! {"oct", builtin_oct, METH_O, oct_doc}, ! {"ord", builtin_ord, METH_O, ord_doc}, ! {"pow", builtin_pow, METH_VARARGS, pow_doc}, ! {"range", builtin_range, METH_VARARGS, range_doc}, ! {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc}, ! {"reduce", builtin_reduce, METH_VARARGS, reduce_doc}, ! {"reload", builtin_reload, METH_O, reload_doc}, ! {"repr", builtin_repr, METH_O, repr_doc}, ! {"round", builtin_round, METH_VARARGS, round_doc}, ! {"setattr", builtin_setattr, METH_VARARGS, setattr_doc}, #ifdef Py_USING_UNICODE ! {"unichr", builtin_unichr, METH_VARARGS, unichr_doc}, #endif ! {"vars", builtin_vars, METH_VARARGS, vars_doc}, ! {"zip", builtin_zip, METH_VARARGS, zip_doc}, {NULL, NULL}, }; --- 1697,1747 ---- static PyMethodDef builtin_methods[] = { ! {PyNAMEC(__import__), builtin___import__, METH_VARARGS, import_doc}, ! {PyNAMEC(abs), builtin_abs, METH_O, abs_doc}, ! {PyNAMEC(apply), builtin_apply, METH_VARARGS, apply_doc}, ! {PyNAMEC(callable), builtin_callable, METH_O, callable_doc}, ! {PyNAMEC(chr), builtin_chr, METH_VARARGS, chr_doc}, ! {PyNAMEC(cmp), builtin_cmp, METH_VARARGS, cmp_doc}, ! {PyNAMEC(coerce), builtin_coerce, METH_VARARGS, coerce_doc}, ! {PyNAMEC(compile), builtin_compile, METH_VARARGS, compile_doc}, ! {PyNAMEC(delattr), builtin_delattr, METH_VARARGS, delattr_doc}, ! {PyNAMEC(dir), builtin_dir, METH_VARARGS, dir_doc}, ! {PyNAMEC(divmod), builtin_divmod, METH_VARARGS, divmod_doc}, ! {PyNAMEC(eval), builtin_eval, METH_VARARGS, eval_doc}, ! {PyNAMEC(execfile), builtin_execfile, METH_VARARGS, execfile_doc}, ! {PyNAMEC(filter), builtin_filter, METH_VARARGS, filter_doc}, ! {PyNAMEC(getattr), builtin_getattr, METH_VARARGS, getattr_doc}, ! {PyNAMEC(globals), (PyCFunction)builtin_globals, METH_NOARGS, globals_doc}, ! {PyNAMEC(hasattr), builtin_hasattr, METH_VARARGS, hasattr_doc}, ! {PyNAMEC(hash), builtin_hash, METH_O, hash_doc}, ! {PyNAMEC(hex), builtin_hex, METH_O, hex_doc}, ! {PyNAMEC(id), builtin_id, METH_O, id_doc}, ! {PyNAMEC(input), builtin_input, METH_VARARGS, input_doc}, ! {PyNAMEC(intern), builtin_intern, METH_VARARGS, intern_doc}, ! {PyNAMEC(isinstance), builtin_isinstance, METH_VARARGS, isinstance_doc}, ! {PyNAMEC(issubclass), builtin_issubclass, METH_VARARGS, issubclass_doc}, ! {PyNAMEC(iter), builtin_iter, METH_VARARGS, iter_doc}, ! {PyNAMEC(len), builtin_len, METH_O, len_doc}, ! {PyNAMEC(locals), (PyCFunction)builtin_locals, METH_NOARGS, locals_doc}, ! {PyNAMEC(map), builtin_map, METH_VARARGS, map_doc}, ! {PyNAMEC(max), builtin_max, METH_VARARGS, max_doc}, ! {PyNAMEC(min), builtin_min, METH_VARARGS, min_doc}, ! {PyNAMEC(oct), builtin_oct, METH_O, oct_doc}, ! {PyNAMEC(ord), builtin_ord, METH_O, ord_doc}, ! {PyNAMEC(pow), builtin_pow, METH_VARARGS, pow_doc}, ! {PyNAMEC(range), builtin_range, METH_VARARGS, range_doc}, ! {PyNAMEC(raw_input), builtin_raw_input, METH_VARARGS, raw_input_doc}, ! {PyNAMEC(reduce), builtin_reduce, METH_VARARGS, reduce_doc}, ! {PyNAMEC(reload), builtin_reload, METH_O, reload_doc}, ! {PyNAMEC(repr), builtin_repr, METH_O, repr_doc}, ! {PyNAMEC(round), builtin_round, METH_VARARGS, round_doc}, ! {PyNAMEC(setattr), builtin_setattr, METH_VARARGS, setattr_doc}, #ifdef Py_USING_UNICODE ! {PyNAMEC(unichr), builtin_unichr, METH_VARARGS, unichr_doc}, #endif ! {PyNAMEC(vars), builtin_vars, METH_VARARGS, vars_doc}, ! {PyNAMEC(zip), builtin_zip, METH_VARARGS, zip_doc}, {NULL, NULL}, }; *************** *** 1754,1806 **** _PyBuiltin_Init(void) { PyObject *mod, *dict, *debug; ! mod = Py_InitModule4("__builtin__", builtin_methods, builtin_doc, (PyObject *)NULL, PYTHON_API_VERSION); if (mod == NULL) return NULL; dict = PyModule_GetDict(mod); ! #define SETBUILTIN(NAME, OBJECT) \ ! if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0) \ return NULL ! SETBUILTIN("None", Py_None); ! SETBUILTIN("Ellipsis", Py_Ellipsis); ! SETBUILTIN("NotImplemented", Py_NotImplemented); ! SETBUILTIN("False", Py_False); ! SETBUILTIN("True", Py_True); ! SETBUILTIN("basestring", &PyBaseString_Type); ! SETBUILTIN("bool", &PyBool_Type); ! SETBUILTIN("buffer", &PyBuffer_Type); ! SETBUILTIN("classmethod", &PyClassMethod_Type); #ifndef WITHOUT_COMPLEX ! SETBUILTIN("complex", &PyComplex_Type); #endif ! SETBUILTIN("dict", &PyDict_Type); ! SETBUILTIN("enumerate", &PyEnum_Type); ! SETBUILTIN("float", &PyFloat_Type); ! SETBUILTIN("property", &PyProperty_Type); ! SETBUILTIN("int", &PyInt_Type); ! SETBUILTIN("list", &PyList_Type); ! SETBUILTIN("long", &PyLong_Type); ! SETBUILTIN("object", &PyBaseObject_Type); ! SETBUILTIN("slice", &PySlice_Type); ! SETBUILTIN("staticmethod", &PyStaticMethod_Type); ! SETBUILTIN("str", &PyString_Type); ! SETBUILTIN("super", &PySuper_Type); ! SETBUILTIN("tuple", &PyTuple_Type); ! SETBUILTIN("type", &PyType_Type); ! SETBUILTIN("xrange", &PyRange_Type); /* Note that open() is just an alias of file(). */ ! SETBUILTIN("open", &PyFile_Type); ! SETBUILTIN("file", &PyFile_Type); #ifdef Py_USING_UNICODE ! SETBUILTIN("unicode", &PyUnicode_Type); #endif debug = PyBool_FromLong(Py_OptimizeFlag == 0); ! if (PyDict_SetItemString(dict, "__debug__", debug) < 0) { Py_XDECREF(debug); return NULL; } --- 1754,1806 ---- _PyBuiltin_Init(void) { PyObject *mod, *dict, *debug; ! mod = Py_InitModule4(PyNAMEC(__builtin__), builtin_methods, builtin_doc, (PyObject *)NULL, PYTHON_API_VERSION); if (mod == NULL) return NULL; dict = PyModule_GetDict(mod); ! #define SETBUILTIN(NAMEOBJ, OBJECT) \ ! if (PyDict_SetItem(dict, NAMEOBJ, (PyObject *)OBJECT) < 0) \ return NULL ! SETBUILTIN(PyNAME(None), Py_None); ! SETBUILTIN(PyNAME(Ellipsis), Py_Ellipsis); ! SETBUILTIN(PyNAME(NotImplemented), Py_NotImplemented); ! SETBUILTIN(PyNAME(False), Py_False); ! SETBUILTIN(PyNAME(True), Py_True); ! SETBUILTIN(PyNAME(basestring), &PyBaseString_Type); ! SETBUILTIN(PyNAME(bool), &PyBool_Type); ! SETBUILTIN(PyNAME(buffer), &PyBuffer_Type); ! SETBUILTIN(PyNAME(classmethod), &PyClassMethod_Type); #ifndef WITHOUT_COMPLEX ! SETBUILTIN(PyNAME(complex), &PyComplex_Type); #endif ! SETBUILTIN(PyNAME(dict), &PyDict_Type); ! SETBUILTIN(PyNAME(enumerate), &PyEnum_Type); ! SETBUILTIN(PyNAME(float), &PyFloat_Type); ! SETBUILTIN(PyNAME(property), &PyProperty_Type); ! SETBUILTIN(PyNAME(int), &PyInt_Type); ! SETBUILTIN(PyNAME(list), &PyList_Type); ! SETBUILTIN(PyNAME(long), &PyLong_Type); ! SETBUILTIN(PyNAME(object), &PyBaseObject_Type); ! SETBUILTIN(PyNAME(slice), &PySlice_Type); ! SETBUILTIN(PyNAME(staticmethod), &PyStaticMethod_Type); ! SETBUILTIN(PyNAME(str), &PyString_Type); ! SETBUILTIN(PyNAME(super), &PySuper_Type); ! SETBUILTIN(PyNAME(tuple), &PyTuple_Type); ! SETBUILTIN(PyNAME(type), &PyType_Type); ! SETBUILTIN(PyNAME(xrange), &PyRange_Type); /* Note that open() is just an alias of file(). */ ! SETBUILTIN(PyNAME(open), &PyFile_Type); ! SETBUILTIN(PyNAME(file), &PyFile_Type); #ifdef Py_USING_UNICODE ! SETBUILTIN(PyNAME(unicode), &PyUnicode_Type); #endif debug = PyBool_FromLong(Py_OptimizeFlag == 0); ! if (PyDict_SetItem(dict, PyNAME(__debug__), debug) < 0) { Py_XDECREF(debug); return NULL; } Index: Python/pythonrun.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v retrieving revision 2.166 diff -c -r2.166 pythonrun.c *** Python/pythonrun.c 15 Aug 2002 01:20:16 -0000 2.166 --- Python/pythonrun.c 15 Aug 2002 15:14:19 -0000 *************** *** 113,118 **** --- 113,121 ---- if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0') Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p); + /* Init and intern static names */ + _PyStaticNames_Init(); + interp = PyInterpreterState_New(); if (interp == NULL) Py_FatalError("Py_Initialize: can't make first interpreter"); Index: Python/staticnames.c =================================================================== RCS file: Python/staticnames.c diff -N Python/staticnames.c *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Python/staticnames.c 15 Aug 2002 15:14:19 -0000 *************** *** 0 **** --- 1,45 ---- + /* This module defines static interned strings for all built-in names + + The file staticnamelist.h contains line of the form: + PyDEFNAME(name, len) + where name is the unquoted symbol and len is the length of the symbol. + + staticnamelist.h is #included three times: + + 1. In statinames.h to create the extern definitions for static names + 2. In this file to define the actual static name objects + 3. In this file to create the list of objects used to intern them. + + */ + + + #define Py_STATICNAMES_H /* prevent Python.h from including staticnames.h */ + #include + #include + + + #define PyDEFNAME(name, len) \ + struct { PyString_HEAD \ + char ob_sval[len+1]; \ + } PySTATICNAME##name = { \ + PyString_HEAD_INIT(len) \ + #name /* ob_sval */ \ + }; + #include + #undef PyDEFNAME + + + #define PyDEFNAME(name, len) &PySTATICNAME##name, + void* staticnames[] = { + #include + NULL /* Sentinel value */ + }; + #undef PyDEFNAME + + + void _PyStaticNames_Init(void) { + PyObject** p; + + for(p = (PyObject**)staticnames; *p != NULL; p++) + PyString_InternInPlace(p); + } Index: Makefile.pre.in =================================================================== RCS file: /cvsroot/python/python/dist/src/Makefile.pre.in,v retrieving revision 1.98 diff -c -r1.98 Makefile.pre.in *** Makefile.pre.in 9 Aug 2002 19:18:25 -0000 1.98 --- Makefile.pre.in 15 Aug 2002 15:29:47 -0000 *************** *** 236,241 **** --- 236,242 ---- Python/pyfpe.o \ Python/pystate.o \ Python/pythonrun.o \ + Python/staticnames.o \ Python/structmember.o \ Python/symtable.o \ Python/sysmodule.o \