diff -r 6e7a872c621e Include/methodobject.h --- a/Include/methodobject.h Tue Mar 15 15:21:03 2011 -0500 +++ b/Include/methodobject.h Thu Mar 17 13:29:48 2011 -0400 @@ -81,6 +81,12 @@ PyAPI_FUNC(int) PyCFunction_ClearFreeList(void); +/* We're *not* exporting these functions, merely making it accessible in + * Objects/typeobject.c (and possibly elsewhere.) + */ +int _PyCFunction_DescrWarn(const char *, PyObject *, PyObject *); +int _PyCFunction_DescrWarn_Dict(const char *, PyObject *); + #ifdef __cplusplus } #endif diff -r 6e7a872c621e Include/pyerrors.h --- a/Include/pyerrors.h Tue Mar 15 15:21:03 2011 -0500 +++ b/Include/pyerrors.h Thu Mar 17 13:29:48 2011 -0400 @@ -183,7 +183,7 @@ PyAPI_DATA(PyObject *) PyExc_UnicodeWarning; PyAPI_DATA(PyObject *) PyExc_BytesWarning; PyAPI_DATA(PyObject *) PyExc_ResourceWarning; - +PyAPI_DATA(PyObject *) PyExc_CompatibilityWarning; /* Convenience functions */ diff -r 6e7a872c621e Lib/encodings/ascii.py --- a/Lib/encodings/ascii.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/ascii.py Thu Mar 17 13:29:48 2011 -0400 @@ -12,10 +12,10 @@ class Codec(codecs.Codec): - # Note: Binding these as C functions will result in the class not + # Note: Binding these as staticmethods will result in the class not # converting them to methods. This is intended. - encode = codecs.ascii_encode - decode = codecs.ascii_decode + encode = staticmethod(codecs.ascii_encode) + decode = staticmethod(codecs.ascii_decode) class IncrementalEncoder(codecs.IncrementalEncoder): def encode(self, input, final=False): @@ -33,8 +33,8 @@ class StreamConverter(StreamWriter,StreamReader): - encode = codecs.ascii_decode - decode = codecs.ascii_encode + encode = staticmethod(codecs.ascii_decode) + decode = staticmethod(codecs.ascii_encode) ### encodings module API diff -r 6e7a872c621e Lib/encodings/big5.py --- a/Lib/encodings/big5.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/big5.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_tw.getcodec('big5') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/big5hkscs.py --- a/Lib/encodings/big5hkscs.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/big5hkscs.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_hk.getcodec('big5hkscs') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/charmap.py --- a/Lib/encodings/charmap.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/charmap.py Thu Mar 17 13:29:48 2011 -0400 @@ -16,10 +16,10 @@ class Codec(codecs.Codec): - # Note: Binding these as C functions will result in the class not + # Note: Binding these as staticmethods will result in the class not # converting them to methods. This is intended. - encode = codecs.charmap_encode - decode = codecs.charmap_decode + encode = staticmethod(codecs.charmap_encode) + decode = staticmethod(codecs.charmap_decode) class IncrementalEncoder(codecs.IncrementalEncoder): def __init__(self, errors='strict', mapping=None): diff -r 6e7a872c621e Lib/encodings/cp932.py --- a/Lib/encodings/cp932.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/cp932.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_jp.getcodec('cp932') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/cp949.py --- a/Lib/encodings/cp949.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/cp949.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_kr.getcodec('cp949') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/cp950.py --- a/Lib/encodings/cp950.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/cp950.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_tw.getcodec('cp950') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/euc_jis_2004.py --- a/Lib/encodings/euc_jis_2004.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/euc_jis_2004.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_jp.getcodec('euc_jis_2004') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/euc_jisx0213.py --- a/Lib/encodings/euc_jisx0213.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/euc_jisx0213.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_jp.getcodec('euc_jisx0213') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/euc_jp.py --- a/Lib/encodings/euc_jp.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/euc_jp.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_jp.getcodec('euc_jp') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/euc_kr.py --- a/Lib/encodings/euc_kr.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/euc_kr.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_kr.getcodec('euc_kr') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/gb18030.py --- a/Lib/encodings/gb18030.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/gb18030.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_cn.getcodec('gb18030') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/gb2312.py --- a/Lib/encodings/gb2312.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/gb2312.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_cn.getcodec('gb2312') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/gbk.py --- a/Lib/encodings/gbk.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/gbk.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_cn.getcodec('gbk') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/hz.py --- a/Lib/encodings/hz.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/hz.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_cn.getcodec('hz') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/iso2022_jp.py --- a/Lib/encodings/iso2022_jp.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/iso2022_jp.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_iso2022.getcodec('iso2022_jp') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/iso2022_jp_1.py --- a/Lib/encodings/iso2022_jp_1.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/iso2022_jp_1.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_iso2022.getcodec('iso2022_jp_1') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/iso2022_jp_2.py --- a/Lib/encodings/iso2022_jp_2.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/iso2022_jp_2.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_iso2022.getcodec('iso2022_jp_2') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/iso2022_jp_2004.py --- a/Lib/encodings/iso2022_jp_2004.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/iso2022_jp_2004.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_iso2022.getcodec('iso2022_jp_2004') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/iso2022_jp_3.py --- a/Lib/encodings/iso2022_jp_3.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/iso2022_jp_3.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_iso2022.getcodec('iso2022_jp_3') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/iso2022_jp_ext.py --- a/Lib/encodings/iso2022_jp_ext.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/iso2022_jp_ext.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_iso2022.getcodec('iso2022_jp_ext') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/iso2022_kr.py --- a/Lib/encodings/iso2022_kr.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/iso2022_kr.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_iso2022.getcodec('iso2022_kr') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/johab.py --- a/Lib/encodings/johab.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/johab.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_kr.getcodec('johab') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/latin_1.py --- a/Lib/encodings/latin_1.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/latin_1.py Thu Mar 17 13:29:48 2011 -0400 @@ -12,10 +12,10 @@ class Codec(codecs.Codec): - # Note: Binding these as C functions will result in the class not + # Note: Binding these as staticmethods will result in the class not # converting them to methods. This is intended. - encode = codecs.latin_1_encode - decode = codecs.latin_1_decode + encode = staticmethod(codecs.latin_1_encode) + decode = staticmethod(codecs.latin_1_decode) class IncrementalEncoder(codecs.IncrementalEncoder): def encode(self, input, final=False): @@ -33,8 +33,8 @@ class StreamConverter(StreamWriter,StreamReader): - encode = codecs.latin_1_decode - decode = codecs.latin_1_encode + encode = staticmethod(codecs.latin_1_decode) + decode = staticmethod(codecs.latin_1_encode) ### encodings module API diff -r 6e7a872c621e Lib/encodings/mbcs.py --- a/Lib/encodings/mbcs.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/mbcs.py Thu Mar 17 13:29:48 2011 -0400 @@ -25,13 +25,13 @@ return mbcs_encode(input, self.errors)[0] class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = mbcs_decode + _buffer_decode = staticmethod(mbcs_decode) class StreamWriter(codecs.StreamWriter): - encode = mbcs_encode + encode = staticmethod(mbcs_encode) class StreamReader(codecs.StreamReader): - decode = mbcs_decode + decode = staticmethod(mbcs_decode) ### encodings module API diff -r 6e7a872c621e Lib/encodings/raw_unicode_escape.py --- a/Lib/encodings/raw_unicode_escape.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/raw_unicode_escape.py Thu Mar 17 13:29:48 2011 -0400 @@ -12,10 +12,10 @@ class Codec(codecs.Codec): - # Note: Binding these as C functions will result in the class not + # Note: Binding these as staticmethods will result in the class not # converting them to methods. This is intended. - encode = codecs.raw_unicode_escape_encode - decode = codecs.raw_unicode_escape_decode + encode = staticmethod(codecs.raw_unicode_escape_encode) + decode = staticmethod(codecs.raw_unicode_escape_decode) class IncrementalEncoder(codecs.IncrementalEncoder): def encode(self, input, final=False): diff -r 6e7a872c621e Lib/encodings/shift_jis.py --- a/Lib/encodings/shift_jis.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/shift_jis.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_jp.getcodec('shift_jis') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/shift_jis_2004.py --- a/Lib/encodings/shift_jis_2004.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/shift_jis_2004.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_jp.getcodec('shift_jis_2004') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/shift_jisx0213.py --- a/Lib/encodings/shift_jisx0213.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/shift_jisx0213.py Thu Mar 17 13:29:48 2011 -0400 @@ -10,8 +10,8 @@ codec = _codecs_jp.getcodec('shift_jisx0213') class Codec(codecs.Codec): - encode = codec.encode - decode = codec.decode + encode = staticmethod(codec.encode) + decode = staticmethod(codec.decode) class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, codecs.IncrementalEncoder): diff -r 6e7a872c621e Lib/encodings/unicode_escape.py --- a/Lib/encodings/unicode_escape.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/unicode_escape.py Thu Mar 17 13:29:48 2011 -0400 @@ -12,10 +12,10 @@ class Codec(codecs.Codec): - # Note: Binding these as C functions will result in the class not + # Note: Binding these as staticmethods will result in the class not # converting them to methods. This is intended. - encode = codecs.unicode_escape_encode - decode = codecs.unicode_escape_decode + encode = staticmethod(codecs.unicode_escape_encode) + decode = staticmethod(codecs.unicode_escape_decode) class IncrementalEncoder(codecs.IncrementalEncoder): def encode(self, input, final=False): diff -r 6e7a872c621e Lib/encodings/unicode_internal.py --- a/Lib/encodings/unicode_internal.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/unicode_internal.py Thu Mar 17 13:29:48 2011 -0400 @@ -12,10 +12,10 @@ class Codec(codecs.Codec): - # Note: Binding these as C functions will result in the class not + # Note: Binding these as staticmethods will result in the class not # converting them to methods. This is intended. - encode = codecs.unicode_internal_encode - decode = codecs.unicode_internal_decode + encode = staticmethod(codecs.unicode_internal_encode) + decode = staticmethod(codecs.unicode_internal_decode) class IncrementalEncoder(codecs.IncrementalEncoder): def encode(self, input, final=False): diff -r 6e7a872c621e Lib/encodings/utf_16_be.py --- a/Lib/encodings/utf_16_be.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/utf_16_be.py Thu Mar 17 13:29:48 2011 -0400 @@ -20,13 +20,13 @@ return codecs.utf_16_be_encode(input, self.errors)[0] class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_16_be_decode + _buffer_decode = staticmethod(codecs.utf_16_be_decode) class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_16_be_encode + encode = staticmethod(codecs.utf_16_be_encode) class StreamReader(codecs.StreamReader): - decode = codecs.utf_16_be_decode + decode = staticmethod(codecs.utf_16_be_decode) ### encodings module API diff -r 6e7a872c621e Lib/encodings/utf_16_le.py --- a/Lib/encodings/utf_16_le.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/utf_16_le.py Thu Mar 17 13:29:48 2011 -0400 @@ -20,13 +20,13 @@ return codecs.utf_16_le_encode(input, self.errors)[0] class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_16_le_decode + _buffer_decode = staticmethod(codecs.utf_16_le_decode) class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_16_le_encode + encode = staticmethod(codecs.utf_16_le_encode) class StreamReader(codecs.StreamReader): - decode = codecs.utf_16_le_decode + decode = staticmethod(codecs.utf_16_le_decode) ### encodings module API diff -r 6e7a872c621e Lib/encodings/utf_32_be.py --- a/Lib/encodings/utf_32_be.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/utf_32_be.py Thu Mar 17 13:29:48 2011 -0400 @@ -15,13 +15,13 @@ return codecs.utf_32_be_encode(input, self.errors)[0] class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_32_be_decode + _buffer_decode = staticmethod(codecs.utf_32_be_decode) class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_32_be_encode + encode = staticmethod(codecs.utf_32_be_encode) class StreamReader(codecs.StreamReader): - decode = codecs.utf_32_be_decode + decode = staticmethod(codecs.utf_32_be_decode) ### encodings module API diff -r 6e7a872c621e Lib/encodings/utf_32_le.py --- a/Lib/encodings/utf_32_le.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/utf_32_le.py Thu Mar 17 13:29:48 2011 -0400 @@ -15,13 +15,13 @@ return codecs.utf_32_le_encode(input, self.errors)[0] class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_32_le_decode + _buffer_decode = staticmethod(codecs.utf_32_le_decode) class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_32_le_encode + encode = staticmethod(codecs.utf_32_le_encode) class StreamReader(codecs.StreamReader): - decode = codecs.utf_32_le_decode + decode = staticmethod(codecs.utf_32_le_decode) ### encodings module API diff -r 6e7a872c621e Lib/encodings/utf_7.py --- a/Lib/encodings/utf_7.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/utf_7.py Thu Mar 17 13:29:48 2011 -0400 @@ -16,13 +16,13 @@ return codecs.utf_7_encode(input, self.errors)[0] class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_7_decode + _buffer_decode = staticmethod(codecs.utf_7_decode) class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_7_encode + encode = staticmethod(codecs.utf_7_encode) class StreamReader(codecs.StreamReader): - decode = codecs.utf_7_decode + decode = staticmethod(codecs.utf_7_decode) ### encodings module API diff -r 6e7a872c621e Lib/encodings/utf_8.py --- a/Lib/encodings/utf_8.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/encodings/utf_8.py Thu Mar 17 13:29:48 2011 -0400 @@ -20,13 +20,13 @@ return codecs.utf_8_encode(input, self.errors)[0] class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - _buffer_decode = codecs.utf_8_decode + _buffer_decode = staticmethod(codecs.utf_8_decode) class StreamWriter(codecs.StreamWriter): - encode = codecs.utf_8_encode + encode = staticmethod(codecs.utf_8_encode) class StreamReader(codecs.StreamReader): - decode = codecs.utf_8_decode + decode = staticmethod(codecs.utf_8_decode) ### encodings module API diff -r 6e7a872c621e Lib/tempfile.py --- a/Lib/tempfile.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/tempfile.py Thu Mar 17 13:29:48 2011 -0400 @@ -380,7 +380,7 @@ # that this must be referenced as self.unlink, because the # name TemporaryFileWrapper may also get None'd out before # __del__ is called. - unlink = _os.unlink + unlink = staticmethod(_os.unlink) def close(self): if not self.close_called: @@ -663,8 +663,8 @@ _isdir = staticmethod(_os.path.isdir) _remove = staticmethod(_os.remove) _rmdir = staticmethod(_os.rmdir) - _os_error = _os.error - _warn = _warnings.warn + _os_error = staticmethod(_os.error) + _warn = staticmethod(_warnings.warn) def _rmtree(self, path): # Essentially a stripped down version of shutil.rmtree. We can't diff -r 6e7a872c621e Lib/test/test_bufio.py --- a/Lib/test/test_bufio.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/test/test_bufio.py Thu Mar 17 13:29:48 2011 -0400 @@ -63,7 +63,7 @@ class CBufferSizeTest(BufferSizeTest): - open = io.open + open = staticmethod(io.open) class PyBufferSizeTest(BufferSizeTest): open = staticmethod(pyio.open) diff -r 6e7a872c621e Lib/test/test_file.py --- a/Lib/test/test_file.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/test/test_file.py Thu Mar 17 13:29:48 2011 -0400 @@ -129,7 +129,7 @@ self.assertRaises(IOError, self.f.read) class CAutoFileTests(AutoFileTests): - open = io.open + open = staticmethod(io.open) class PyAutoFileTests(AutoFileTests): open = staticmethod(pyio.open) @@ -323,7 +323,7 @@ os.unlink(TESTFN) class COtherFileTests(OtherFileTests): - open = io.open + open = staticmethod(io.open) class PyOtherFileTests(OtherFileTests): open = staticmethod(pyio.open) diff -r 6e7a872c621e Lib/test/test_functools.py --- a/Lib/test/test_functools.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/test/test_functools.py Thu Mar 17 13:29:48 2011 -0400 @@ -355,7 +355,7 @@ self.assertEqual(wrapper.dict_attr, f.dict_attr) class TestReduce(unittest.TestCase): - func = functools.reduce + func = staticmethod(functools.reduce) def test_reduce(self): class Squares: diff -r 6e7a872c621e Lib/test/test_io.py --- a/Lib/test/test_io.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/test/test_io.py Thu Mar 17 13:29:48 2011 -0400 @@ -2833,7 +2833,8 @@ c_io_ns.update((x.__name__, globs["C" + x.__name__]) for x in mocks) py_io_ns.update((x.__name__, globs["Py" + x.__name__]) for x in mocks) # Avoid turning open into a bound method. - py_io_ns["open"] = pyio.OpenWrapper + c_io_ns["open"] = staticmethod(io.open) + py_io_ns["open"] = staticmethod(pyio.open) for test in tests: if test.__name__.startswith("C"): for name, obj in c_io_ns.items(): diff -r 6e7a872c621e Lib/test/test_thread.py --- a/Lib/test/test_thread.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/test/test_thread.py Thu Mar 17 13:29:48 2011 -0400 @@ -191,7 +191,7 @@ self.done_mutex.release() class LockTests(lock_tests.LockTests): - locktype = thread.allocate_lock + locktype = staticmethod(thread.allocate_lock) class TestForkInThread(unittest.TestCase): diff -r 6e7a872c621e Lib/test/test_univnewlines.py --- a/Lib/test/test_univnewlines.py Tue Mar 15 15:21:03 2011 -0500 +++ b/Lib/test/test_univnewlines.py Thu Mar 17 13:29:48 2011 -0400 @@ -115,7 +115,7 @@ # Test the C and Python implementations. for test in base_tests: class CTest(test): - open = io.open + open = staticmethod(io.open) CTest.__name__ = "C" + test.__name__ class PyTest(test): open = staticmethod(pyio.open) diff -r 6e7a872c621e Objects/exceptions.c --- a/Objects/exceptions.c Tue Mar 15 15:21:03 2011 -0500 +++ b/Objects/exceptions.c Thu Mar 17 13:29:48 2011 -0400 @@ -1899,6 +1899,11 @@ "Base class for warnings about features which will be deprecated\n" "in the future."); +/* + * CompatibilityWarning extends Warning + */ +SimpleExtendsException(PyExc_Warning, CompatibilityWarning, + "Base class for warnings about behaviour not part of the language."); /* * SyntaxWarning extends Warning @@ -2020,6 +2025,7 @@ PRE_INIT(UserWarning) PRE_INIT(DeprecationWarning) PRE_INIT(PendingDeprecationWarning) + PRE_INIT(CompatibilityWarning) PRE_INIT(SyntaxWarning) PRE_INIT(RuntimeWarning) PRE_INIT(FutureWarning) @@ -2083,6 +2089,7 @@ POST_INIT(UserWarning) POST_INIT(DeprecationWarning) POST_INIT(PendingDeprecationWarning) + POST_INIT(CompatibilityWarning) POST_INIT(SyntaxWarning) POST_INIT(RuntimeWarning) POST_INIT(FutureWarning) diff -r 6e7a872c621e Objects/methodobject.c --- a/Objects/methodobject.c Tue Mar 15 15:21:03 2011 -0500 +++ b/Objects/methodobject.c Thu Mar 17 13:29:48 2011 -0400 @@ -316,3 +316,47 @@ { return PyCFunction_NewEx(ml, self, NULL); } + +int +_PyCFunction_DescrWarn(const char *name, PyObject *attrname, PyObject *attr) +{ + PyObject *m_self; + if (!PyCFunction_Check(attr)) + return 0; + m_self = ((PyCFunctionObject *)attr)->m_self; + if (m_self != NULL && !PyModule_CheckExact(m_self)) + return 0; + if (PyErr_WarnFormat(PyExc_CompatibilityWarning, 1, + "builtin function as class attribute " + "(%s.%S being %R) may break in other Python " + "versions and implementations", + name, attrname, attr) < 0) { + return -1; + } + return 0; +} + +int +_PyCFunction_DescrWarn_Dict(const char *name, PyObject *dict) +{ + PyObject *it; + PyObject *attrname; + /* type_new already checks for dict being a dict. */ + assert(PyDict_Check(dict)); + it = PyObject_GetIter(dict); + if (it == NULL) + return -1; + while ((attrname = PyIter_Next(it)) != NULL) { + PyObject *attr = PyDict_GetItem(dict, attrname); + if (attr == NULL) + goto error; + if (_PyCFunction_DescrWarn(name, attrname, + PyDict_GetItem(dict, attrname)) < 0) + goto error; + } + Py_DECREF(it); + return 0; +error: + Py_DECREF(it); + return -1; +} diff -r 6e7a872c621e Objects/typeobject.c --- a/Objects/typeobject.c Tue Mar 15 15:21:03 2011 -0500 +++ b/Objects/typeobject.c Thu Mar 17 13:29:48 2011 -0400 @@ -1980,6 +1980,9 @@ return winner->tp_new(winner, args, kwds); metatype = winner; } + if (_PyCFunction_DescrWarn_Dict(PyBytes_AS_STRING( + _PyUnicode_AsDefaultEncodedString(name)), dict) < 0) + return NULL; /* Adjust for empty tuple bases */ if (nbases == 0) { @@ -2508,6 +2511,9 @@ type->tp_name); return -1; } + if (value != NULL && + _PyCFunction_DescrWarn(type->tp_name, name, value) < 0) + return -1; if (PyObject_GenericSetAttr((PyObject *)type, name, value) < 0) return -1; return update_slot(type, name); diff -r 6e7a872c621e Python/_warnings.c --- a/Python/_warnings.c Tue Mar 15 15:21:03 2011 -0500 +++ b/Python/_warnings.c Thu Mar 17 13:29:48 2011 -0400 @@ -888,7 +888,7 @@ init_filters(void) { /* Don't silence DeprecationWarning if -3 was used. */ - PyObject *filters = PyList_New(5); + PyObject *filters = PyList_New(6); unsigned int pos = 0; /* Post-incremented in each use. */ unsigned int x; const char *bytes_action, *resource_action; @@ -902,6 +902,8 @@ create_filter(PyExc_PendingDeprecationWarning, "ignore")); PyList_SET_ITEM(filters, pos++, create_filter(PyExc_ImportWarning, "ignore")); + PyList_SET_ITEM(filters, pos++, + create_filter(PyExc_CompatibilityWarning, "ignore")); if (Py_BytesWarningFlag > 1) bytes_action = "error"; else if (Py_BytesWarningFlag)