]> granicus.if.org Git - python/commitdiff
Issue #20326: Argument Clinic now uses a simple, unique signature to
authorLarry Hastings <larry@hastings.org>
Tue, 28 Jan 2014 13:00:08 +0000 (05:00 -0800)
committerLarry Hastings <larry@hastings.org>
Tue, 28 Jan 2014 13:00:08 +0000 (05:00 -0800)
annotate text signatures in docstrings, resulting in fewer false
positives.  "self" parameters are also explicitly marked, allowing
inspect.Signature() to authoritatively detect (and skip) said parameters.

Issue #20326: Argument Clinic now generates separate checksums for the
input and output sections of the block, allowing external tools to verify
that the input has not changed (and thus the output is not out-of-date).

37 files changed:
Include/object.h
Lib/idlelib/idle_test/test_calltips.py
Lib/inspect.py
Lib/test/test_capi.py
Lib/test/test_generators.py
Lib/test/test_genexps.py
Misc/NEWS
Modules/_bz2module.c
Modules/_cryptmodule.c
Modules/_cursesmodule.c
Modules/_datetimemodule.c
Modules/_dbmmodule.c
Modules/_lzmamodule.c
Modules/_lzmamodule.clinic.c
Modules/_opcode.c
Modules/_pickle.c
Modules/_sre.c
Modules/_testcapimodule.c
Modules/_weakref.c
Modules/audioop.c
Modules/binascii.c
Modules/clinic/_bz2module.c.h
Modules/clinic/_lzmamodule.c.h
Modules/clinic/_pickle.c.h
Modules/clinic/audioop.c.h
Modules/clinic/binascii.c.h
Modules/clinic/zlibmodule.c.h
Modules/posixmodule.c
Modules/unicodedata.c
Modules/zlibmodule.c
Objects/descrobject.c
Objects/dictobject.c
Objects/methodobject.c
Objects/typeobject.c
Objects/unicodeobject.c
Python/import.c
Tools/clinic/clinic.py

index 015d2169931f6b84733d03d2deb32a5104100d5b..05bffc9804c6c0240a841a46c927868f3df97c44 100644 (file)
@@ -493,10 +493,8 @@ PyAPI_FUNC(unsigned int) PyType_ClearCache(void);
 PyAPI_FUNC(void) PyType_Modified(PyTypeObject *);
 
 #ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *)
-_PyType_GetDocFromInternalDoc(const char *, const char *);
-PyAPI_FUNC(PyObject *)
-_PyType_GetTextSignatureFromInternalDoc(const char *, const char *);
+PyAPI_FUNC(PyObject *) _PyType_GetDocFromInternalDoc(const char *);
+PyAPI_FUNC(PyObject *) _PyType_GetTextSignatureFromInternalDoc(const char *);
 #endif
 
 /* Generic operations on objects */
index ab69bd018b1eb8ba4a8d163ec8d9aaccad61bc13..4ee15aef76bf790da3de349bebd076fa1f178b00 100644 (file)
@@ -54,9 +54,9 @@ class Get_signatureTest(unittest.TestCase):
 
         gtest(List, List.__doc__)
         gtest(list.__new__,
-               'T.__new__(S, ...) -> a new object with type S, a subtype of T')
+               'Create and return a new object.  See help(type) for accurate signature.')
         gtest(list.__init__,
-               'x.__init__(...) initializes x; see help(type(x)) for signature')
+               'Initialize self.  See help(type(self)) for accurate signature.')
         append_doc =  "L.append(object) -> None -- append object to end"
         gtest(list.append, append_doc)
         gtest([].append, append_doc)
index 2211b8d4e04cbb4526e9a78b7abd157dc5cdca0a..5f37a2a6dd53eee3739eb07903b997b0148352b7 100644 (file)
@@ -1998,6 +1998,10 @@ class Signature:
         else:
             kind = Parameter.POSITIONAL_OR_KEYWORD
 
+        first_parameter_is_self = s.startswith("($")
+        if first_parameter_is_self:
+            s = '(' + s[2:]
+
         s = "def foo" + s + ": pass"
 
         try:
@@ -2102,18 +2106,11 @@ class Signature:
             kind = Parameter.VAR_KEYWORD
             p(f.args.kwarg, empty)
 
-        if parameters and (hasattr(func, '__self__') or
-            isinstance(func, _WrapperDescriptor,) or
-            ismethoddescriptor(func)
-            ):
-            name = parameters[0].name
-            if name not in ('self', 'module', 'type'):
-                pass
-            elif getattr(func, '__self__', None):
-                # strip off self (it's already been bound)
-                p = parameters.pop(0)
-                if not p.name in ('self', 'module', 'type'):
-                    raise ValueError('Unexpected name ' + repr(p.name) + ', expected self/module/cls/type')
+        if first_parameter_is_self:
+            assert parameters
+            if getattr(func, '__self__', None):
+                # strip off self, it's already been bound
+                parameters.pop(0)
             else:
                 # for builtins, self parameter is always positional-only!
                 p = parameters[0].replace(kind=Parameter.POSITIONAL_ONLY)
index 444feb6314bcf17267fdaeaf887d11426fd59da0..0ec3ca3eebb1faa765d63f51d4b6cc89c57fb358 100644 (file)
@@ -125,7 +125,7 @@ class CAPITest(unittest.TestCase):
         self.assertEqual(_testcapi.docstring_no_signature.__text_signature__, None)
 
         self.assertEqual(_testcapi.docstring_with_invalid_signature.__doc__,
-            "docstring_with_invalid_signature (module, boo)\n"
+            "sig= (module, boo)\n"
             "\n"
             "This docstring has an invalid signature."
             )
index 5b7424bcf884f473c812a8dd8775e9f0f48e5def..91afe477994e83c44680098939601a363e82c31e 100644 (file)
@@ -436,8 +436,8 @@ From the Iterators list, about the types of these things.
 >>> [s for s in dir(i) if not s.startswith('_')]
 ['close', 'gi_code', 'gi_frame', 'gi_running', 'send', 'throw']
 >>> from test.support import HAVE_DOCSTRINGS
->>> print(i.__next__.__doc__ if HAVE_DOCSTRINGS else 'Implements next(self).')
-Implements next(self).
+>>> print(i.__next__.__doc__ if HAVE_DOCSTRINGS else 'Implement next(self).')
+Implement next(self).
 >>> iter(i) is i
 True
 >>> import types
index 74957cb8f4649bf959c7851de03b0683b91e7bd7..fb531d6d472b6f05829b9fda75779e24d1048ae1 100644 (file)
@@ -222,8 +222,8 @@ Check that generator attributes are present
     True
 
     >>> from test.support import HAVE_DOCSTRINGS
-    >>> print(g.__next__.__doc__ if HAVE_DOCSTRINGS else 'Implements next(self).')
-    Implements next(self).
+    >>> print(g.__next__.__doc__ if HAVE_DOCSTRINGS else 'Implement next(self).')
+    Implement next(self).
     >>> import types
     >>> isinstance(g, types.GeneratorType)
     True
index d88194883005dcc4c92e01682d4720a955cb74fc..a4aca4d53d324815598f328a48bd266f3ee58d81 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -203,6 +203,15 @@ Tests
 Tools/Demos
 -----------
 
+- Issue #20326: Argument Clinic now uses a simple, unique signature to
+  annotate text signatures in docstrings, resulting in fewer false
+  positives.  "self" parameters are also explicitly marked, allowing
+  inspect.Signature() to authoritatively detect (and skip) said parameters.
+
+- Issue #20326: Argument Clinic now generates separate checksums for the
+  input and output sections of the block, allowing external tools to verify
+  that the input has not changed (and thus the output is not out-of-date).
+
 - Issue #20390: Argument Clinic's "file" output preset now defaults to
   "{dirname}/clinic/{basename}.h".
 
index 2a0abe1b574998a743ce9441adf498061a368f0d..e652f4dfcd81edc1972314bf36a817d88d1d199f 100644 (file)
@@ -204,7 +204,7 @@ module _bz2
 class _bz2.BZ2Compressor "BZ2Compressor *" "&BZ2Compressor_Type"
 class _bz2.BZ2Decompressor "BZ2Decompressor *" "&BZ2Decompressor_Type"
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=e3b139924f5e18cc]*/
 
 #include "clinic/_bz2module.c.h"
 
@@ -224,7 +224,7 @@ flush() method to finish the compression process.
 
 static PyObject *
 _bz2_BZ2Compressor_compress_impl(BZ2Compressor *self, Py_buffer *data)
-/*[clinic end generated code: checksum=59365426e941fbcc4c7a4d0eef85ca7e19196eaa]*/
+/*[clinic end generated code: output=59365426e941fbcc input=85c963218070fc4c]*/
 {
     PyObject *result = NULL;
 
@@ -249,7 +249,7 @@ The compressor object may not be used after this method is called.
 
 static PyObject *
 _bz2_BZ2Compressor_flush_impl(BZ2Compressor *self)
-/*[clinic end generated code: checksum=3ef03fc1b092a701b382b97096c7fd50db87190b]*/
+/*[clinic end generated code: output=3ef03fc1b092a701 input=d64405d3c6f76691]*/
 {
     PyObject *result = NULL;
 
@@ -304,7 +304,7 @@ For one-shot compression, use the compress() function instead.
 
 static int
 _bz2_BZ2Compressor___init___impl(BZ2Compressor *self, int compresslevel)
-/*[clinic end generated code: checksum=c4e6adfd02963827075a1cc9309dc6df184b1246]*/
+/*[clinic end generated code: output=c4e6adfd02963827 input=4e1ff7b8394b6e9a]*/
 {
     int bzerror;
 
@@ -484,7 +484,7 @@ is ignored and saved in the unused_data attribute.
 
 static PyObject *
 _bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data)
-/*[clinic end generated code: checksum=086e4b99e60cb3f67c0481959591eae0735320bc]*/
+/*[clinic end generated code: output=086e4b99e60cb3f6 input=616c2a6db5269961]*/
 {
     PyObject *result = NULL;
 
@@ -515,7 +515,7 @@ For one-shot decompression, use the decompress() function instead.
 
 static int
 _bz2_BZ2Decompressor___init___impl(BZ2Decompressor *self)
-/*[clinic end generated code: checksum=e4d2b9bb866ab8f1f4a8bb786ddb5b614ce323c0]*/
+/*[clinic end generated code: output=e4d2b9bb866ab8f1 input=95f6500dcda60088]*/
 {
     int bzerror;
 
index 9154babf5e8ae28762a25941e7bc54380a441f56..7531c2fc991a9cfa23729fb90c557a3c78ca8f72 100644 (file)
@@ -10,7 +10,7 @@
 /*[clinic input]
 module crypt
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=c6252cf4f2f2ae81]*/
 
 
 /*[clinic input]
@@ -30,7 +30,7 @@ results for a given *word*.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(crypt_crypt__doc__,
-"crypt(module, word, salt)\n"
+"sig=($module, word, salt)\n"
 "Hash a *word* with the given *salt* and return the hashed password.\n"
 "\n"
 "*word* will usually be a user\'s password.  *salt* (either a random 2 or 16\n"
@@ -63,7 +63,7 @@ exit:
 
 static PyObject *
 crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt)
-/*[clinic end generated code: checksum=dbfe26a21eb335abefe6a0bbd0a682ea22b9adc0]*/
+/*[clinic end generated code: output=c7443257e03fca92 input=4d93b6d0f41fbf58]*/
 {
     /* On some platforms (AtheOS) crypt returns NULL for an invalid
        salt. Return None in that case. XXX Maybe raise an exception?  */
index 534dcff681791579043d7e9c3468f58c74c546b7..915a7809eb9449bc345596eb08af56a7d18d934a 100644 (file)
@@ -138,7 +138,7 @@ typedef chtype attr_t;           /* No attr_t type is available */
 module curses
 class curses.window "PyCursesWindowObject *" "&PyCursesWindow_Type"
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=88c860abdbb50e0c]*/
 
 /* Definition of exception curses.error */
 
@@ -651,7 +651,7 @@ exit:
 
 static PyObject *
 curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int x, int y, PyObject *ch, int group_right_1, long attr)
-/*[clinic end generated code: checksum=e1cdbd4f4e42fc6b36fd4755d7e4bd5b58751ea1]*/
+/*[clinic end generated code: output=e1cdbd4f4e42fc6b input=fe7e3711d5bbf1f6]*/
 {
     PyCursesWindowObject *cwself = (PyCursesWindowObject *)self;
     int coordinates_group = group_left_1;
index b78725e3bb1f36cb5b378b8a9467d6d4b0066059..80fa497631168d8d016bcdfa91a51472b67bbe87 100644 (file)
@@ -20,7 +20,7 @@
 module datetime
 class datetime.datetime "PyDateTime_DateTime *" "&PyDateTime_DateTimeType"
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=78142cb64b9e98bc]*/
 
 /* We require that C int be at least 32 bits, and use int virtually
  * everywhere.  In just a few cases we use a temp long, where a Python
@@ -4159,7 +4159,7 @@ If no tz is specified, uses local timezone.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(datetime_datetime_now__doc__,
-"now(type, tz=None)\n"
+"sig=($type, tz=None)\n"
 "Returns new datetime object representing current time local to tz.\n"
 "\n"
 "  tz\n"
@@ -4192,7 +4192,7 @@ exit:
 
 static PyObject *
 datetime_datetime_now_impl(PyTypeObject *type, PyObject *tz)
-/*[clinic end generated code: checksum=a6d3ad2c0ab6389075289af3467f7b8eb13f5f5c]*/
+/*[clinic end generated code: output=c8a47308483e579a input=80d09869c5267d00]*/
 {
     PyObject *self;
 
index 88dae165602ff3de6d7790cf998f713732d86425..9f63c8a4eb47d7787f3e073fe587c66a2797c18a 100644 (file)
@@ -32,7 +32,7 @@ static char *which_dbm = "Berkeley DB";
 module dbm
 class dbm.dbm "dbmobject *" "&Dbmtype"
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=92450564684a69a3]*/
 
 typedef struct {
     PyObject_HEAD
@@ -55,7 +55,7 @@ class dbmobject_converter(self_converter):
     def converter_init(self):
         self.name = 'dp'
 [python start generated code]*/
-/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=8a69ac1827811128]*/
 
 static PyObject *
 newdbmobject(const char *file, int flags, int mode)
@@ -319,7 +319,7 @@ exit:
 
 static PyObject *
 dbm_dbm_get_impl(dbmobject *dp, const char *key, Py_ssize_clean_t key_length, int group_right_1, PyObject *default_value)
-/*[clinic end generated code: checksum=31d5180d6b36f1eafea78ec4391adf3559916379]*/
+/*[clinic end generated code: output=31d5180d6b36f1ea input=43a561dc2bd1db3b]*/
 {
     datum dbm_key, val;
 
@@ -462,7 +462,7 @@ Return a database object.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(dbmopen__doc__,
-"open(module, filename, flags=\'r\', mode=0o666)\n"
+"sig=($module, filename, flags=\'r\', mode=0o666)\n"
 "Return a database object.\n"
 "\n"
 "  filename\n"
@@ -499,7 +499,7 @@ exit:
 
 static PyObject *
 dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode)
-/*[clinic end generated code: checksum=9efae7d3c3b67a365011bf4e463e918901ba6c79]*/
+/*[clinic end generated code: output=a1da6a481d9d332b input=6499ab0fab1333ac]*/
 {
     int iflags;
 
index 56a3942c7630b1a167cddd535fb18f3b1e335c65..c43676ab75f1aea1e961fb17d070e45d3c481b3a 100644 (file)
@@ -475,7 +475,7 @@ module _lzma
 class _lzma.LZMACompressor "Compressor *" "&Compressor_type"
 class _lzma.LZMADecompressor "Decompressor *" "&Decompressor_type"
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=f17afc786525d6c2]*/
 
 #include "clinic/_lzmamodule.c.h"
 
@@ -496,7 +496,7 @@ class lzma_filter_converter(CConverter):
                 '   PyMem_Free(%(name)s.options);\n') % {'name': name}
 
 [python start generated code]*/
-/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=74fe7631ce377a94]*/
 
 
 /* LZMACompressor class. */
@@ -560,7 +560,7 @@ flush() method to finish the compression process.
 
 static PyObject *
 _lzma_LZMACompressor_compress_impl(Compressor *self, Py_buffer *data)
-/*[clinic end generated code: checksum=31f615136963e00f26f8be33440ec1e3604565ba]*/
+/*[clinic end generated code: output=31f615136963e00f input=8b60cb13e0ce6420]*/
 {
     PyObject *result = NULL;
 
@@ -587,7 +587,7 @@ The compressor object may not be used after this method is called.
 
 static PyObject *
 _lzma_LZMACompressor_flush_impl(Compressor *self)
-/*[clinic end generated code: checksum=fec21f3e22504f500606ba60e1ba70d79eb22188]*/
+/*[clinic end generated code: output=fec21f3e22504f50 input=3060fb26f9b4042c]*/
 {
     PyObject *result = NULL;
 
@@ -959,7 +959,7 @@ is ignored and saved in the unused_data attribute.
 
 static PyObject *
 _lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data)
-/*[clinic end generated code: checksum=d86e78da7ff0ff219d511275b16b79476da8922e]*/
+/*[clinic end generated code: output=d86e78da7ff0ff21 input=50c4768b821bf0ef]*/
 {
     PyObject *result = NULL;
 
@@ -1024,7 +1024,7 @@ For one-shot decompression, use the decompress() function instead.
 
 static int
 _lzma_LZMADecompressor___init___impl(Decompressor *self, int format, PyObject *memlimit, PyObject *filters)
-/*[clinic end generated code: checksum=9b119f6f2cc2d7a8e5be41c164a6c080ee82d0c2]*/
+/*[clinic end generated code: output=9b119f6f2cc2d7a8 input=458ca6132ef29801]*/
 {
     const uint32_t decoder_flags = LZMA_TELL_ANY_CHECK | LZMA_TELL_NO_CHECK;
     uint64_t memlimit_ = UINT64_MAX;
@@ -1203,7 +1203,7 @@ Always returns True for CHECK_NONE and CHECK_CRC32.
 
 static PyObject *
 _lzma_is_check_supported_impl(PyModuleDef *module, int check_id)
-/*[clinic end generated code: checksum=bb828e90e00ad96ed61f66719c2fca7fde637418]*/
+/*[clinic end generated code: output=bb828e90e00ad96e input=5518297b97b2318f]*/
 {
     return PyBool_FromLong(lzma_check_is_supported(check_id));
 }
@@ -1221,7 +1221,7 @@ The result does not include the filter ID itself, only the options.
 
 static PyObject *
 _lzma__encode_filter_properties_impl(PyModuleDef *module, lzma_filter filter)
-/*[clinic end generated code: checksum=b5fe690acd6b61d1abfc32f522ada5bdcf9b13da]*/
+/*[clinic end generated code: output=b5fe690acd6b61d1 input=d4c64f1b557c77d4]*/
 {
     lzma_ret lzret;
     uint32_t encoded_size;
@@ -1261,7 +1261,7 @@ The result does not include the filter ID itself, only the options.
 
 static PyObject *
 _lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, Py_buffer *encoded_props)
-/*[clinic end generated code: checksum=235f7f5345d48744dcd21f781dafbbf05a717538]*/
+/*[clinic end generated code: output=235f7f5345d48744 input=246410800782160c]*/
 {
     lzma_filter filter;
     lzma_ret lzret;
index 171354b91e0e47fd4f631045466ee25f74e3ced3..269576c968c363e56df21108fa4c88fbd2e3f5e9 100644 (file)
@@ -228,4 +228,4 @@ exit:
 
     return return_value;
 }
-/*[clinic end generated code: checksum=b4b90dcbd0c9c349c3a94e26a7eecf71aab179a0]*/
+/*[clinic end generated code: output=b4b90dcbd0c9c349 input=a9049054013a1b77]*/
index a5c546e064e5a86afbc39b228fd4facf121c6a1e..1597e3d37229825080033d13de43c34e83cfa2d6 100644 (file)
@@ -4,7 +4,7 @@
 /*[clinic input]
 module _opcode
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=117442e66eb376e6]*/
 
 /*[clinic input]
 
@@ -64,7 +64,7 @@ exit:
 
 static int
 _opcode_stack_effect_impl(PyModuleDef *module, int opcode, int group_right_1, int oparg)
-/*[clinic end generated code: checksum=4689140ffda2494a123ea2593fb63445fb039774]*/
+/*[clinic end generated code: output=4689140ffda2494a input=056816407c3d4284]*/
 {
     int effect;
     if (HAS_ARG(opcode)) {
index 5486524259de9698fcbdcb21d165c670472b845f..7faf96dd93c21319d756d4cb16e57927d8e08d0f 100644 (file)
@@ -12,7 +12,7 @@ class _pickle.PicklerMemoProxy "PicklerMemoProxyObject *" "&PicklerMemoProxyType
 class _pickle.Unpickler "UnpicklerObject *" "&Unpickler_Type"
 class _pickle.UnpicklerMemoProxy "UnpicklerMemoProxyObject *" "&UnpicklerMemoProxyType"
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=11c45248a41dd3fc]*/
 
 /* Bump this when new opcodes are added to the pickle protocol. */
 enum {
@@ -3885,7 +3885,7 @@ re-using picklers.
 
 static PyObject *
 _pickle_Pickler_clear_memo_impl(PicklerObject *self)
-/*[clinic end generated code: checksum=8665c8658aaa094ba9b424d3d7fe0add5e8142ab]*/
+/*[clinic end generated code: output=8665c8658aaa094b input=01bdad52f3d93e56]*/
 {
     if (self->memo)
         PyMemoTable_Clear(self->memo);
@@ -3905,7 +3905,7 @@ Write a pickled representation of the given object to the open file.
 
 static PyObject *
 _pickle_Pickler_dump(PicklerObject *self, PyObject *obj)
-/*[clinic end generated code: checksum=87ecad1261e02ac7ad0b051467b61bb058ae55b3]*/
+/*[clinic end generated code: output=87ecad1261e02ac7 input=552eb1c0f52260d9]*/
 {
     /* Check whether the Pickler was initialized correctly (issue3664).
        Developers often forget to call __init__() in their subclasses, which
@@ -4010,7 +4010,7 @@ to map the new Python 3 names to the old module names used in Python
 
 static int
 _pickle_Pickler___init___impl(PicklerObject *self, PyObject *file, PyObject *protocol, int fix_imports)
-/*[clinic end generated code: checksum=56e229f3b1f4332fbfe28a33e43dae836a8dab43]*/
+/*[clinic end generated code: output=56e229f3b1f4332f input=b8cdeb7e3f5ee674]*/
 {
     _Py_IDENTIFIER(persistent_id);
     _Py_IDENTIFIER(dispatch_table);
@@ -4080,7 +4080,7 @@ Remove all items from memo.
 
 static PyObject *
 _pickle_PicklerMemoProxy_clear_impl(PicklerMemoProxyObject *self)
-/*[clinic end generated code: checksum=5fb9370d48ae8b055fc72518a2b12d1714338078]*/
+/*[clinic end generated code: output=5fb9370d48ae8b05 input=ccc186dacd0f1405]*/
 {
     if (self->pickler->memo)
         PyMemoTable_Clear(self->pickler->memo);
@@ -4095,7 +4095,7 @@ Copy the memo to a new object.
 
 static PyObject *
 _pickle_PicklerMemoProxy_copy_impl(PicklerMemoProxyObject *self)
-/*[clinic end generated code: checksum=bb83a919d29225ef55ba0ecfca002369ea4eb8ea]*/
+/*[clinic end generated code: output=bb83a919d29225ef input=b73043485ac30b36]*/
 {
     Py_ssize_t i;
     PyMemoTable *memo;
@@ -4140,7 +4140,7 @@ Implement pickle support.
 
 static PyObject *
 _pickle_PicklerMemoProxy___reduce___impl(PicklerMemoProxyObject *self)
-/*[clinic end generated code: checksum=bebba1168863ab1d6560ad707d0f4ab41deb722d]*/
+/*[clinic end generated code: output=bebba1168863ab1d input=2f7c540e24b7aae4]*/
 {
     PyObject *reduce_value, *dict_args;
     PyObject *contents = _pickle_PicklerMemoProxy_copy_impl(self);
@@ -6163,7 +6163,7 @@ specified therein.
 
 static PyObject *
 _pickle_Unpickler_load_impl(UnpicklerObject *self)
-/*[clinic end generated code: checksum=fdcc488aad675b1458b5644180d092b99e6e4fe4]*/
+/*[clinic end generated code: output=fdcc488aad675b14 input=acbb91a42fa9b7b9]*/
 {
     UnpicklerObject *unpickler = (UnpicklerObject*)self;
 
@@ -6206,7 +6206,7 @@ needed.  Both arguments passed are str objects.
 
 static PyObject *
 _pickle_Unpickler_find_class_impl(UnpicklerObject *self, PyObject *module_name, PyObject *global_name)
-/*[clinic end generated code: checksum=64c77437e088e188fa0b022a0402d5b2964da8c9]*/
+/*[clinic end generated code: output=64c77437e088e188 input=e2e6a865de093ef4]*/
 {
     PyObject *global;
     PyObject *modules_dict;
@@ -6389,7 +6389,7 @@ string instances as bytes objects.
 
 static int
 _pickle_Unpickler___init___impl(UnpicklerObject *self, PyObject *file, int fix_imports, const char *encoding, const char *errors)
-/*[clinic end generated code: checksum=b9ed1d84d315f3b57f91b878cdd88024ccc2ae89]*/
+/*[clinic end generated code: output=b9ed1d84d315f3b5 input=30b4dc9e976b890c]*/
 {
     _Py_IDENTIFIER(persistent_load);
 
@@ -6453,7 +6453,7 @@ Remove all items from memo.
 
 static PyObject *
 _pickle_UnpicklerMemoProxy_clear_impl(UnpicklerMemoProxyObject *self)
-/*[clinic end generated code: checksum=d20cd43f4ba1fb1f1ba1677fae3ff69b8cc41582]*/
+/*[clinic end generated code: output=d20cd43f4ba1fb1f input=b1df7c52e7afd9bd]*/
 {
     _Unpickler_MemoCleanup(self->unpickler);
     self->unpickler->memo = _Unpickler_NewMemo(self->unpickler->memo_size);
@@ -6470,7 +6470,7 @@ Copy the memo to a new object.
 
 static PyObject *
 _pickle_UnpicklerMemoProxy_copy_impl(UnpicklerMemoProxyObject *self)
-/*[clinic end generated code: checksum=e12af7e9bc1e4c77df97c1e657d6b8e026a022b7]*/
+/*[clinic end generated code: output=e12af7e9bc1e4c77 input=97769247ce032c1d]*/
 {
     Py_ssize_t i;
     PyObject *new_memo = PyDict_New();
@@ -6508,7 +6508,7 @@ Implement pickling support.
 
 static PyObject *
 _pickle_UnpicklerMemoProxy___reduce___impl(UnpicklerMemoProxyObject *self)
-/*[clinic end generated code: checksum=6da34ac048d94cca7604faa72d45992e730882f1]*/
+/*[clinic end generated code: output=6da34ac048d94cca input=6920862413407199]*/
 {
     PyObject *reduce_value;
     PyObject *constructor_args;
@@ -6818,7 +6818,7 @@ to map the new Python 3 names to the old module names used in Python
 
 static PyObject *
 _pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports)
-/*[clinic end generated code: checksum=a606e626d553850d96c286e909a139552d5d4096]*/
+/*[clinic end generated code: output=a606e626d553850d input=e9e5fdd48de92eae]*/
 {
     PicklerObject *pickler = _Pickler_New();
 
@@ -6871,7 +6871,7 @@ Python 2, so that the pickle data stream is readable with Python 2.
 
 static PyObject *
 _pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, int fix_imports)
-/*[clinic end generated code: checksum=777f0deefe5b88ee324d43ab31b2579da7bbf22a]*/
+/*[clinic end generated code: output=777f0deefe5b88ee input=293dbeda181580b7]*/
 {
     PyObject *result;
     PicklerObject *pickler = _Pickler_New();
@@ -6931,7 +6931,7 @@ string instances as bytes objects.
 
 static PyObject *
 _pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, const char *encoding, const char *errors)
-/*[clinic end generated code: checksum=568c61356c172654a23cf4edb4afffa1dc2a55d9]*/
+/*[clinic end generated code: output=568c61356c172654 input=da97372e38e510a6]*/
 {
     PyObject *result;
     UnpicklerObject *unpickler = _Unpickler_New();
@@ -6984,7 +6984,7 @@ string instances as bytes objects.
 
 static PyObject *
 _pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, const char *encoding, const char *errors)
-/*[clinic end generated code: checksum=0b3845ad110b25220ab613e9a1e573194271a337]*/
+/*[clinic end generated code: output=0b3845ad110b2522 input=f57f0fdaa2b4cb8b]*/
 {
     PyObject *result;
     UnpicklerObject *unpickler = _Unpickler_New();
index 41dca7d97d976eeb53141cdbe364af0ab603f894..4dcaec1c31f56f2bc1ad0efc5871a655bc39b853 100644 (file)
@@ -540,7 +540,7 @@ Matches zero or more characters at the beginning of the string.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(pattern_match__doc__,
-"match(self, pattern, pos=0, endpos=sys.maxsize)\n"
+"sig=($self, pattern, pos=0, endpos=sys.maxsize)\n"
 "Matches zero or more characters at the beginning of the string.");
 
 #define PATTERN_MATCH_METHODDEF    \
@@ -570,7 +570,7 @@ exit:
 
 static PyObject *
 pattern_match_impl(PatternObject *self, PyObject *pattern, Py_ssize_t pos, Py_ssize_t endpos)
-/*[clinic end generated code: checksum=4a3865d13638cb7c13dcae1fe58c1a9c35071998]*/
+/*[clinic end generated code: output=9f5b785661677848 input=26f9fd31befe46b9]*/
 {
     SRE_STATE state;
     Py_ssize_t status;
index 35eb21dc98e6d3ad470e82d48350b1c5abaa5bdd..260e53d637fdad670211eb989873c8a3b5e85af9 100644 (file)
@@ -2851,18 +2851,18 @@ PyDoc_STRVAR(docstring_no_signature,
 );
 
 PyDoc_STRVAR(docstring_with_invalid_signature,
-"docstring_with_invalid_signature (module, boo)\n"
+"sig= (module, boo)\n"
 "\n"
 "This docstring has an invalid signature."
 );
 
 PyDoc_STRVAR(docstring_with_signature,
-"docstring_with_signature(module, sig)\n"
+"sig=(module, sig)\n"
 "This docstring has a valid signature."
 );
 
 PyDoc_STRVAR(docstring_with_signature_and_extra_newlines,
-"docstring_with_signature_and_extra_newlines(module, parameter)\n"
+"sig=(module, parameter)\n"
 "\n"
 "\n"
 "\n"
@@ -2870,7 +2870,7 @@ PyDoc_STRVAR(docstring_with_signature_and_extra_newlines,
 );
 
 PyDoc_STRVAR(docstring_with_signature_with_defaults,
-"docstring_with_signature_with_defaults(module, s='avocado', b=b'bytes', d=3.14, i=35, n=None, t=True, f=False, local=the_number_three, sys=sys.maxsize, exp=sys.maxsize - 1)\n"
+"sig=(module, s='avocado', b=b'bytes', d=3.14, i=35, n=None, t=True, f=False, local=the_number_three, sys=sys.maxsize, exp=sys.maxsize - 1)\n"
 "\n"
 "\n"
 "\n"
index 1cc6246b2fb9c9789e111a952a0c482255ebe8dc..6451dba2245d1688bb00f31a4c9e151a84f608bb 100644 (file)
@@ -7,7 +7,7 @@
 /*[clinic input]
 module _weakref
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=ffec73b85846596d]*/
 
 /*[clinic input]
 
@@ -20,7 +20,7 @@ Return the number of weak references to 'object'.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_weakref_getweakrefcount__doc__,
-"getweakrefcount(module, object)\n"
+"sig=($module, object)\n"
 "Return the number of weak references to \'object\'.");
 
 #define _WEAKREF_GETWEAKREFCOUNT_METHODDEF    \
@@ -46,7 +46,7 @@ exit:
 
 static Py_ssize_t
 _weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object)
-/*[clinic end generated code: checksum=dd8ba0730babf263d3db78d260ea7eacf6eb3735]*/
+/*[clinic end generated code: output=ef51baac56180816 input=cedb69711b6a2507]*/
 {
     PyWeakReference **list;
 
index 159b2fbdc81a499bfe49395a01d3b8764593c69b..2d287f249b4afd4569899ba8a8483f0e310153e6 100644 (file)
@@ -394,7 +394,7 @@ audioop_check_parameters(Py_ssize_t len, int size)
 output preset file
 module audioop
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=5619f935f269199a]*/
 
 /*[clinic input]
 audioop.getsample
@@ -409,7 +409,7 @@ Return the value of sample index from the fragment.
 
 static PyObject *
 audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, Py_ssize_t index)
-/*[clinic end generated code: checksum=f4482497e6f6e78fe88451c19a288837099d6eef]*/
+/*[clinic end generated code: output=f4482497e6f6e78f input=88edbe2871393549]*/
 {
     int val;
 
@@ -435,7 +435,7 @@ Return the maximum of the absolute value of all samples in a fragment.
 
 static PyObject *
 audioop_max_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=85047ee1001f230518386b16148955ba9be4874f]*/
+/*[clinic end generated code: output=85047ee1001f2305 input=32bea5ea0ac8c223]*/
 {
     Py_ssize_t i;
     unsigned int absval, max = 0;
@@ -463,7 +463,7 @@ Return the minimum and maximum values of all samples in the sound fragment.
 
 static PyObject *
 audioop_minmax_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=ae8f5513c64fd569849adbbcc5fcd4d8f399da1b]*/
+/*[clinic end generated code: output=ae8f5513c64fd569 input=89848e9b927a0696]*/
 {
     Py_ssize_t i;
     /* -1 trick below is needed on Windows to support -0x80000000 without
@@ -492,7 +492,7 @@ Return the average over all samples in the fragment.
 
 static PyObject *
 audioop_avg_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=7fccd645c95f4860899f6b3aaab269e3e58806e1]*/
+/*[clinic end generated code: output=7fccd645c95f4860 input=1114493c7611334d]*/
 {
     Py_ssize_t i;
     int avg;
@@ -521,7 +521,7 @@ Return the root-mean-square of the fragment, i.e. sqrt(sum(S_i^2)/n).
 
 static PyObject *
 audioop_rms_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=7b398702c81b709d87aba3f0635eeb3fc1b0a1a4]*/
+/*[clinic end generated code: output=7b398702c81b709d input=4cc57c6c94219d78]*/
 {
     Py_ssize_t i;
     unsigned int res;
@@ -595,7 +595,7 @@ Try to match reference as well as possible to a portion of fragment.
 
 static PyObject *
 audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, Py_buffer *reference)
-/*[clinic end generated code: checksum=505fd04d4244db31044abb5c114a5e8f9c45b171]*/
+/*[clinic end generated code: output=505fd04d4244db31 input=62c305605e183c9a]*/
 {
     const short *cp1, *cp2;
     Py_ssize_t len1, len2;
@@ -663,7 +663,7 @@ Return a factor F such that rms(add(fragment, mul(reference, -F))) is minimal.
 
 static PyObject *
 audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, Py_buffer *reference)
-/*[clinic end generated code: checksum=ddf35a1e57575ce4acbc000104810d9fdde8eba5]*/
+/*[clinic end generated code: output=ddf35a1e57575ce4 input=816680301d012b21]*/
 {
     const short *cp1, *cp2;
     Py_ssize_t len;
@@ -704,7 +704,7 @@ Search fragment for a slice of specified number of samples with maximum energy.
 
 static PyObject *
 audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, Py_ssize_t length)
-/*[clinic end generated code: checksum=21d0c2a1e5655134f7460b7fd49ee4ba1e5fdb13]*/
+/*[clinic end generated code: output=21d0c2a1e5655134 input=2f304801ed42383c]*/
 {
     const short *cp1;
     Py_ssize_t len1;
@@ -757,7 +757,7 @@ Return the average peak-peak value over all samples in the fragment.
 
 static PyObject *
 audioop_avgpp_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=06c8380fd6e34207f4b58d6c3d4b5ebc7afe138d]*/
+/*[clinic end generated code: output=06c8380fd6e34207 input=0b3cceeae420a7d9]*/
 {
     Py_ssize_t i;
     int prevval, prevextremevalid = 0, prevextreme = 0;
@@ -814,7 +814,7 @@ Return the maximum peak-peak value in the sound fragment.
 
 static PyObject *
 audioop_maxpp_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=c300c0bd7e8535c07e128bbaac211c69744f750b]*/
+/*[clinic end generated code: output=c300c0bd7e8535c0 input=671a13e1518f80a1]*/
 {
     Py_ssize_t i;
     int prevval, prevextremevalid = 0, prevextreme = 0;
@@ -867,7 +867,7 @@ Return the number of zero crossings in the fragment passed as an argument.
 
 static PyObject *
 audioop_cross_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=99e6572d7d7cdbf1b5372090308201c62d518a43]*/
+/*[clinic end generated code: output=99e6572d7d7cdbf1 input=b1b3f15b83f6b41a]*/
 {
     Py_ssize_t i;
     int prevval;
@@ -898,7 +898,7 @@ Return a fragment that has all samples in the original fragment multiplied by th
 
 static PyObject *
 audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, double factor)
-/*[clinic end generated code: checksum=a697ebbd5852d38f941d52127a5b38e4f8cd5540]*/
+/*[clinic end generated code: output=a697ebbd5852d38f input=c726667baa157d3c]*/
 {
     signed char *ncp;
     Py_ssize_t i;
@@ -939,7 +939,7 @@ Convert a stereo fragment to a mono fragment.
 
 static PyObject *
 audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, double lfactor, double rfactor)
-/*[clinic end generated code: checksum=436e7710521661dd541ec177ee53e6b0ee340182]*/
+/*[clinic end generated code: output=436e7710521661dd input=c4ec949b3f4dddfa]*/
 {
     signed char *cp, *ncp;
     Py_ssize_t len, i;
@@ -987,7 +987,7 @@ Generate a stereo fragment from a mono fragment.
 
 static PyObject *
 audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, double lfactor, double rfactor)
-/*[clinic end generated code: checksum=6ff50681c87f4c1cbe4c394c4186ae8ae91b5c0d]*/
+/*[clinic end generated code: output=6ff50681c87f4c1c input=27b6395ebfdff37a]*/
 {
     signed char *ncp;
     Py_ssize_t i;
@@ -1034,7 +1034,7 @@ Return a fragment which is the addition of the two samples passed as parameters.
 
 static PyObject *
 audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, Py_buffer *fragment2, int width)
-/*[clinic end generated code: checksum=f9218bf9ea75c3f1e4b2ed5ffdfd631354e8fdfe]*/
+/*[clinic end generated code: output=f9218bf9ea75c3f1 input=4a8d4bae4c1605c7]*/
 {
     signed char *ncp;
     Py_ssize_t i;
@@ -1092,7 +1092,7 @@ Return a fragment that is the original fragment with a bias added to each sample
 
 static PyObject *
 audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, int bias)
-/*[clinic end generated code: checksum=8ec80b3f5d510a51a85e89e8c0a73070697f2ab4]*/
+/*[clinic end generated code: output=8ec80b3f5d510a51 input=2b5cce5c3bb4838c]*/
 {
     signed char *ncp;
     Py_ssize_t i;
@@ -1151,7 +1151,7 @@ Reverse the samples in a fragment and returns the modified fragment.
 
 static PyObject *
 audioop_reverse_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=6ec3c91337f5925eaf17a7b8b907120102b6fb72]*/
+/*[clinic end generated code: output=6ec3c91337f5925e input=668f890cf9f9d225]*/
 {
     unsigned char *ncp;
     Py_ssize_t i;
@@ -1184,7 +1184,7 @@ Convert big-endian samples to little-endian and vice versa.
 
 static PyObject *
 audioop_byteswap_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=bfe4aa584b7a3f5bd818cf79f83fa73e612cc9b8]*/
+/*[clinic end generated code: output=bfe4aa584b7a3f5b input=fae7611ceffa5c82]*/
 {
     unsigned char *ncp;
     Py_ssize_t i;
@@ -1219,7 +1219,7 @@ Convert samples between 1-, 2-, 3- and 4-byte formats.
 
 static PyObject *
 audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, int newwidth)
-/*[clinic end generated code: checksum=3f9468a74472a93e2054a9da0ea1bbc39fe23e84]*/
+/*[clinic end generated code: output=3f9468a74472a93e input=5ce08c8aa2f24d96]*/
 {
     unsigned char *ncp;
     Py_ssize_t i, j;
@@ -1276,7 +1276,7 @@ Convert the frame rate of the input fragment.
 
 static PyObject *
 audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, int nchannels, int inrate, int outrate, PyObject *state, int weightA, int weightB)
-/*[clinic end generated code: checksum=5585dddc4b5ff2363877076f4c6616df8d3e6f14]*/
+/*[clinic end generated code: output=5585dddc4b5ff236 input=aff3acdc94476191]*/
 {
     char *cp, *ncp;
     Py_ssize_t len;
@@ -1455,7 +1455,7 @@ Convert samples in the audio fragment to u-LAW encoding.
 
 static PyObject *
 audioop_lin2ulaw_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=26263cc877c5e1bc84fede972fb59499a82d949c]*/
+/*[clinic end generated code: output=26263cc877c5e1bc input=2450d1b870b6bac2]*/
 {
     unsigned char *ncp;
     Py_ssize_t i;
@@ -1488,7 +1488,7 @@ Convert sound fragments in u-LAW encoding to linearly encoded sound fragments.
 
 static PyObject *
 audioop_ulaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=9864cb34e3a1d87689f830d4c95cdcaae9a44561]*/
+/*[clinic end generated code: output=9864cb34e3a1d876 input=45d53ddce5be7d06]*/
 {
     unsigned char *cp;
     signed char *ncp;
@@ -1528,7 +1528,7 @@ Convert samples in the audio fragment to a-LAW encoding.
 
 static PyObject *
 audioop_lin2alaw_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=d5bf14bd0fe6fdcd4b0d604ccdf257097eb2419e]*/
+/*[clinic end generated code: output=d5bf14bd0fe6fdcd input=ffb1ef8bb39da945]*/
 {
     unsigned char *ncp;
     Py_ssize_t i;
@@ -1561,7 +1561,7 @@ Convert sound fragments in a-LAW encoding to linearly encoded sound fragments.
 
 static PyObject *
 audioop_alaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width)
-/*[clinic end generated code: checksum=d2b604ddd036e1cd4bb95b5553626b44302db48a]*/
+/*[clinic end generated code: output=d2b604ddd036e1cd input=4140626046cd1772]*/
 {
     unsigned char *cp;
     signed char *ncp;
@@ -1603,7 +1603,7 @@ Convert samples to 4 bit Intel/DVI ADPCM encoding.
 
 static PyObject *
 audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, PyObject *state)
-/*[clinic end generated code: checksum=4654c29d2731fafe35e7aa1e3d261361dbbbcc3b]*/
+/*[clinic end generated code: output=4654c29d2731fafe input=12919d549b90c90a]*/
 {
     signed char *ncp;
     Py_ssize_t i;
@@ -1725,7 +1725,7 @@ Decode an Intel/DVI ADPCM coded fragment to a linear fragment.
 
 static PyObject *
 audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, PyObject *state)
-/*[clinic end generated code: checksum=371965cdcc0aa69ba970e8bc5662b30d45bcc38d]*/
+/*[clinic end generated code: output=371965cdcc0aa69b input=f5221144f5ca9ef0]*/
 {
     signed char *cp;
     signed char *ncp;
index d38182e43286fa23d14efeea3bf79365c21476e5..42d08de373f507cd4992c8323769e4e62c7fe587 100644 (file)
@@ -187,7 +187,7 @@ static unsigned short crctab_hqx[256] = {
 output preset file
 module binascii
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=44c6f840ce708f0c]*/
 
 /*[python input]
 
@@ -202,7 +202,7 @@ class ascii_buffer_converter(CConverter):
         return "".join(["if (", name, ".obj)\n   PyBuffer_Release(&", name, ");\n"])
 
 [python start generated code]*/
-/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=3eb7b63610da92cd]*/
 
 static int
 ascii_buffer_converter(PyObject *arg, Py_buffer *buf)
@@ -254,7 +254,7 @@ Decode a line of uuencoded data.
 
 static PyObject *
 binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data)
-/*[clinic end generated code: checksum=5779f39b0b48459ff0f7a365d7e69b57422e2a4a]*/
+/*[clinic end generated code: output=5779f39b0b48459f input=7cafeaf73df63d1c]*/
 {
     unsigned char *ascii_data, *bin_data;
     int leftbits = 0;
@@ -340,7 +340,7 @@ Uuencode line of data.
 
 static PyObject *
 binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data)
-/*[clinic end generated code: checksum=181021b69bb9a4149fffa98aa3ed57b59ffa38cb]*/
+/*[clinic end generated code: output=181021b69bb9a414 input=00fdf458ce8b465b]*/
 {
     unsigned char *ascii_data, *bin_data;
     int leftbits = 0;
@@ -427,7 +427,7 @@ Decode a line of base64 data.
 
 static PyObject *
 binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data)
-/*[clinic end generated code: checksum=3e351b702bed56d249caa4aa0f1bb3fae7546025]*/
+/*[clinic end generated code: output=3e351b702bed56d2 input=5872acf6e1cac243]*/
 {
     unsigned char *ascii_data, *bin_data;
     int leftbits = 0;
@@ -535,7 +535,7 @@ Base64-code line of data.
 
 static PyObject *
 binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data)
-/*[clinic end generated code: checksum=3cd61fbee2913285e253bc5415c9d052b0c5dd96]*/
+/*[clinic end generated code: output=3cd61fbee2913285 input=14ec4e47371174a9]*/
 {
     unsigned char *ascii_data, *bin_data;
     int leftbits = 0;
@@ -602,7 +602,7 @@ Decode .hqx coding.
 
 static PyObject *
 binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data)
-/*[clinic end generated code: checksum=60bcdbbd28b105cd7091d98e70a6e458f8039e9e]*/
+/*[clinic end generated code: output=60bcdbbd28b105cd input=0d914c680e0eed55]*/
 {
     unsigned char *ascii_data, *bin_data;
     int leftbits = 0;
@@ -685,7 +685,7 @@ Binhex RLE-code binary data.
 
 static PyObject *
 binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data)
-/*[clinic end generated code: checksum=0905da344dbf064855925c3a0fb83ec11ca33e8b]*/
+/*[clinic end generated code: output=0905da344dbf0648 input=e1f1712447a82b09]*/
 {
     unsigned char *in_data, *out_data;
     PyObject *rv;
@@ -749,7 +749,7 @@ Encode .hqx data.
 
 static PyObject *
 binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data)
-/*[clinic end generated code: checksum=5a987810d5e3cdbb0eb415eba8907c022342fe15]*/
+/*[clinic end generated code: output=5a987810d5e3cdbb input=9596ebe019fe12ba]*/
 {
     unsigned char *ascii_data, *bin_data;
     int leftbits = 0;
@@ -806,7 +806,7 @@ Decode hexbin RLE-coded string.
 
 static PyObject *
 binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data)
-/*[clinic end generated code: checksum=f7afd89b789946ab50e31d595c695d5cad7e27e3]*/
+/*[clinic end generated code: output=f7afd89b789946ab input=54cdd49fc014402c]*/
 {
     unsigned char *in_data, *out_data;
     unsigned char in_byte, in_repeat;
@@ -920,7 +920,7 @@ Compute hqx CRC incrementally.
 
 static int
 binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, int crc)
-/*[clinic end generated code: checksum=634dac18dfa863d738833b5a0886eca93c034c0c]*/
+/*[clinic end generated code: output=634dac18dfa863d7 input=68060931b2f51c8a]*/
 {
     unsigned char *bin_data;
     unsigned int ucrc = (unsigned int)crc;
@@ -1068,7 +1068,7 @@ Compute CRC-32 incrementally.
 
 static unsigned int
 binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc)
-/*[clinic end generated code: checksum=620a961643393c4f2a1fb273fda2acb43970c3f5]*/
+/*[clinic end generated code: output=620a961643393c4f input=bbe340bc99d25aa8]*/
 
 #ifdef USE_ZLIB_CRC32
 /* This was taken from zlibmodule.c PyZlib_crc32 (but is PY_SSIZE_T_CLEAN) */
@@ -1116,7 +1116,7 @@ available as "hexlify()".
 
 static PyObject *
 binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data)
-/*[clinic end generated code: checksum=179318922c2f8fdaee0d4d3283758aec8e8741a5]*/
+/*[clinic end generated code: output=179318922c2f8fda input=96423cfa299ff3b1]*/
 {
     char* argbuf;
     Py_ssize_t arglen;
@@ -1177,7 +1177,7 @@ This function is also available as "unhexlify()".
 
 static PyObject *
 binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr)
-/*[clinic end generated code: checksum=d61da452b5c6d2903c32c3e90e6a97221b25989b]*/
+/*[clinic end generated code: output=d61da452b5c6d290 input=9e1e7f2f94db24fd]*/
 {
     char* argbuf;
     Py_ssize_t arglen;
@@ -1248,7 +1248,7 @@ Decode a string of qp-encoded data.
 
 static PyObject *
 binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header)
-/*[clinic end generated code: checksum=a44ef8827035211431d0906a76dbfe97e59a5079]*/
+/*[clinic end generated code: output=a44ef88270352114 input=5187a0d3d8e54f3b]*/
 {
     Py_ssize_t in, out;
     char ch;
@@ -1354,7 +1354,7 @@ are both encoded.  When quotetabs is set, space and tabs are encoded.
 
 static PyObject *
 binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, int istext, int header)
-/*[clinic end generated code: checksum=ff2991ba640fff3e67ac63205801c7173a0366cd]*/
+/*[clinic end generated code: output=ff2991ba640fff3e input=7f2a9aaa008e92b2]*/
 {
     Py_ssize_t in, out;
     unsigned char *databuf, *odata;
index 161100234cf48e9b8668b7d84ec2f749de64c795..98f9a1b88d7c44cc4af81f8557b3d78bb9fa3674 100644 (file)
@@ -3,7 +3,7 @@ preserve
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_bz2_BZ2Compressor_compress__doc__,
-"compress(self, data)\n"
+"sig=($self, data)\n"
 "Provide data to the compressor object.\n"
 "\n"
 "Returns a chunk of compressed data if possible, or b\'\' otherwise.\n"
@@ -38,7 +38,7 @@ exit:
 }
 
 PyDoc_STRVAR(_bz2_BZ2Compressor_flush__doc__,
-"flush(self)\n"
+"sig=($self)\n"
 "Finish the compression process.\n"
 "\n"
 "Returns the compressed data left in internal buffers.\n"
@@ -58,7 +58,7 @@ _bz2_BZ2Compressor_flush(BZ2Compressor *self, PyObject *Py_UNUSED(ignored))
 }
 
 PyDoc_STRVAR(_bz2_BZ2Compressor___init____doc__,
-"BZ2Compressor(compresslevel=9)\n"
+"sig=(compresslevel=9)\n"
 "Create a compressor object for compressing data incrementally.\n"
 "\n"
 "  compresslevel\n"
@@ -89,7 +89,7 @@ exit:
 }
 
 PyDoc_STRVAR(_bz2_BZ2Decompressor_decompress__doc__,
-"decompress(self, data)\n"
+"sig=($self, data)\n"
 "Provide data to the decompressor object.\n"
 "\n"
 "Returns a chunk of decompressed data if possible, or b\'\' otherwise.\n"
@@ -125,7 +125,7 @@ exit:
 }
 
 PyDoc_STRVAR(_bz2_BZ2Decompressor___init____doc__,
-"BZ2Decompressor()\n"
+"sig=()\n"
 "Create a decompressor object for decompressing data incrementally.\n"
 "\n"
 "For one-shot decompression, use the decompress() function instead.");
@@ -149,4 +149,4 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs)
 exit:
     return return_value;
 }
-/*[clinic end generated code: checksum=4ade1dba3921a8bd8a614e5417f7654d8fb10be5]*/
+/*[clinic end generated code: output=aca4f6329c1c773a input=a9049054013a1b77]*/
index 171354b91e0e47fd4f631045466ee25f74e3ced3..184889185cfb4e4d8214ee7d076ed2c650ee56d0 100644 (file)
@@ -3,7 +3,7 @@ preserve
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_lzma_LZMACompressor_compress__doc__,
-"compress(self, data)\n"
+"sig=($self, data)\n"
 "Provide data to the compressor object.\n"
 "\n"
 "Returns a chunk of compressed data if possible, or b\'\' otherwise.\n"
@@ -38,7 +38,7 @@ exit:
 }
 
 PyDoc_STRVAR(_lzma_LZMACompressor_flush__doc__,
-"flush(self)\n"
+"sig=($self)\n"
 "Finish the compression process.\n"
 "\n"
 "Returns the compressed data left in internal buffers.\n"
@@ -58,7 +58,7 @@ _lzma_LZMACompressor_flush(Compressor *self, PyObject *Py_UNUSED(ignored))
 }
 
 PyDoc_STRVAR(_lzma_LZMADecompressor_decompress__doc__,
-"decompress(self, data)\n"
+"sig=($self, data)\n"
 "Provide data to the decompressor object.\n"
 "\n"
 "Returns a chunk of decompressed data if possible, or b\'\' otherwise.\n"
@@ -94,7 +94,7 @@ exit:
 }
 
 PyDoc_STRVAR(_lzma_LZMADecompressor___init____doc__,
-"LZMADecompressor(format=FORMAT_AUTO, memlimit=None, filters=None)\n"
+"sig=(format=FORMAT_AUTO, memlimit=None, filters=None)\n"
 "Create a decompressor object for decompressing data incrementally.\n"
 "\n"
 "  format\n"
@@ -137,7 +137,7 @@ exit:
 }
 
 PyDoc_STRVAR(_lzma_is_check_supported__doc__,
-"is_check_supported(module, check_id)\n"
+"sig=($module, check_id)\n"
 "Test whether the given integrity check is supported.\n"
 "\n"
 "Always returns True for CHECK_NONE and CHECK_CRC32.");
@@ -165,7 +165,7 @@ exit:
 }
 
 PyDoc_STRVAR(_lzma__encode_filter_properties__doc__,
-"_encode_filter_properties(module, filter)\n"
+"sig=($module, filter)\n"
 "Return a bytes object encoding the options (properties) of the filter specified by *filter* (a dict).\n"
 "\n"
 "The result does not include the filter ID itself, only the options.");
@@ -197,7 +197,7 @@ exit:
 }
 
 PyDoc_STRVAR(_lzma__decode_filter_properties__doc__,
-"_decode_filter_properties(module, filter_id, encoded_props)\n"
+"sig=($module, filter_id, encoded_props)\n"
 "Return a bytes object encoding the options (properties) of the filter specified by *filter* (a dict).\n"
 "\n"
 "The result does not include the filter ID itself, only the options.");
@@ -228,4 +228,4 @@ exit:
 
     return return_value;
 }
-/*[clinic end generated code: checksum=b4b90dcbd0c9c349c3a94e26a7eecf71aab179a0]*/
+/*[clinic end generated code: output=fe63bc798a5c5c55 input=a9049054013a1b77]*/
index 12dc2ed3dde5d6debe8fd0a876fe6b5c964e7fd9..9ef469dc400685015f34701c8b1f5db9916574bd 100644 (file)
@@ -3,7 +3,7 @@ preserve
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_pickle_Pickler_clear_memo__doc__,
-"clear_memo(self)\n"
+"sig=($self)\n"
 "Clears the pickler\'s \"memo\".\n"
 "\n"
 "The memo is the data structure that remembers which objects the\n"
@@ -24,14 +24,14 @@ _pickle_Pickler_clear_memo(PicklerObject *self, PyObject *Py_UNUSED(ignored))
 }
 
 PyDoc_STRVAR(_pickle_Pickler_dump__doc__,
-"dump(self, obj)\n"
+"sig=($self, obj)\n"
 "Write a pickled representation of the given object to the open file.");
 
 #define _PICKLE_PICKLER_DUMP_METHODDEF    \
     {"dump", (PyCFunction)_pickle_Pickler_dump, METH_O, _pickle_Pickler_dump__doc__},
 
 PyDoc_STRVAR(_pickle_Pickler___init____doc__,
-"Pickler(file, protocol=None, fix_imports=True)\n"
+"sig=(file, protocol=None, fix_imports=True)\n"
 "This takes a binary file for writing a pickle data stream.\n"
 "\n"
 "The optional *protocol* argument tells the pickler to use the given\n"
@@ -74,7 +74,7 @@ exit:
 }
 
 PyDoc_STRVAR(_pickle_PicklerMemoProxy_clear__doc__,
-"clear(self)\n"
+"sig=($self)\n"
 "Remove all items from memo.");
 
 #define _PICKLE_PICKLERMEMOPROXY_CLEAR_METHODDEF    \
@@ -90,7 +90,7 @@ _pickle_PicklerMemoProxy_clear(PicklerMemoProxyObject *self, PyObject *Py_UNUSED
 }
 
 PyDoc_STRVAR(_pickle_PicklerMemoProxy_copy__doc__,
-"copy(self)\n"
+"sig=($self)\n"
 "Copy the memo to a new object.");
 
 #define _PICKLE_PICKLERMEMOPROXY_COPY_METHODDEF    \
@@ -106,7 +106,7 @@ _pickle_PicklerMemoProxy_copy(PicklerMemoProxyObject *self, PyObject *Py_UNUSED(
 }
 
 PyDoc_STRVAR(_pickle_PicklerMemoProxy___reduce____doc__,
-"__reduce__(self)\n"
+"sig=($self)\n"
 "Implement pickle support.");
 
 #define _PICKLE_PICKLERMEMOPROXY___REDUCE___METHODDEF    \
@@ -122,7 +122,7 @@ _pickle_PicklerMemoProxy___reduce__(PicklerMemoProxyObject *self, PyObject *Py_U
 }
 
 PyDoc_STRVAR(_pickle_Unpickler_load__doc__,
-"load(self)\n"
+"sig=($self)\n"
 "Load a pickle.\n"
 "\n"
 "Read a pickled object representation from the open file object given\n"
@@ -142,7 +142,7 @@ _pickle_Unpickler_load(UnpicklerObject *self, PyObject *Py_UNUSED(ignored))
 }
 
 PyDoc_STRVAR(_pickle_Unpickler_find_class__doc__,
-"find_class(self, module_name, global_name)\n"
+"sig=($self, module_name, global_name)\n"
 "Return an object from a specified module.\n"
 "\n"
 "If necessary, the module will be imported. Subclasses may override\n"
@@ -176,7 +176,7 @@ exit:
 }
 
 PyDoc_STRVAR(_pickle_Unpickler___init____doc__,
-"Unpickler(file, *, fix_imports=True, encoding=\'ASCII\', errors=\'strict\')\n"
+"sig=(file, *, fix_imports=True, encoding=\'ASCII\', errors=\'strict\')\n"
 "This takes a binary file for reading a pickle data stream.\n"
 "\n"
 "The protocol version of the pickle is detected automatically, so no\n"
@@ -222,7 +222,7 @@ exit:
 }
 
 PyDoc_STRVAR(_pickle_UnpicklerMemoProxy_clear__doc__,
-"clear(self)\n"
+"sig=($self)\n"
 "Remove all items from memo.");
 
 #define _PICKLE_UNPICKLERMEMOPROXY_CLEAR_METHODDEF    \
@@ -238,7 +238,7 @@ _pickle_UnpicklerMemoProxy_clear(UnpicklerMemoProxyObject *self, PyObject *Py_UN
 }
 
 PyDoc_STRVAR(_pickle_UnpicklerMemoProxy_copy__doc__,
-"copy(self)\n"
+"sig=($self)\n"
 "Copy the memo to a new object.");
 
 #define _PICKLE_UNPICKLERMEMOPROXY_COPY_METHODDEF    \
@@ -254,7 +254,7 @@ _pickle_UnpicklerMemoProxy_copy(UnpicklerMemoProxyObject *self, PyObject *Py_UNU
 }
 
 PyDoc_STRVAR(_pickle_UnpicklerMemoProxy___reduce____doc__,
-"__reduce__(self)\n"
+"sig=($self)\n"
 "Implement pickling support.");
 
 #define _PICKLE_UNPICKLERMEMOPROXY___REDUCE___METHODDEF    \
@@ -270,7 +270,7 @@ _pickle_UnpicklerMemoProxy___reduce__(UnpicklerMemoProxyObject *self, PyObject *
 }
 
 PyDoc_STRVAR(_pickle_dump__doc__,
-"dump(module, obj, file, protocol=None, *, fix_imports=True)\n"
+"sig=($module, obj, file, protocol=None, *, fix_imports=True)\n"
 "Write a pickled representation of obj to the open file object file.\n"
 "\n"
 "This is equivalent to ``Pickler(file, protocol).dump(obj)``, but may\n"
@@ -320,7 +320,7 @@ exit:
 }
 
 PyDoc_STRVAR(_pickle_dumps__doc__,
-"dumps(module, obj, protocol=None, *, fix_imports=True)\n"
+"sig=($module, obj, protocol=None, *, fix_imports=True)\n"
 "Return the pickled representation of the object as a bytes object.\n"
 "\n"
 "The optional *protocol* argument tells the pickler to use the given\n"
@@ -361,7 +361,7 @@ exit:
 }
 
 PyDoc_STRVAR(_pickle_load__doc__,
-"load(module, file, *, fix_imports=True, encoding=\'ASCII\', errors=\'strict\')\n"
+"sig=($module, file, *, fix_imports=True, encoding=\'ASCII\', errors=\'strict\')\n"
 "Read and return an object from the pickle data stored in a file.\n"
 "\n"
 "This is equivalent to ``Unpickler(file).load()``, but may be more\n"
@@ -413,7 +413,7 @@ exit:
 }
 
 PyDoc_STRVAR(_pickle_loads__doc__,
-"loads(module, data, *, fix_imports=True, encoding=\'ASCII\', errors=\'strict\')\n"
+"sig=($module, data, *, fix_imports=True, encoding=\'ASCII\', errors=\'strict\')\n"
 "Read and return an object from the given pickle data.\n"
 "\n"
 "The protocol version of the pickle is detected automatically, so no\n"
@@ -454,4 +454,4 @@ _pickle_loads(PyModuleDef *module, PyObject *args, PyObject *kwargs)
 exit:
     return return_value;
 }
-/*[clinic end generated code: checksum=b7a2e1df72bdbc87da3cd0e43a3caa1a879892bb]*/
+/*[clinic end generated code: output=c59d4dafc2646f11 input=a9049054013a1b77]*/
index 974fdb1df508b2fedce67a1d6c6ed0d2dfd282fa..92d13b091df72790d402e5f728c123e0c29589fb 100644 (file)
@@ -3,7 +3,7 @@ preserve
 [clinic start generated code]*/
 
 PyDoc_STRVAR(audioop_getsample__doc__,
-"getsample(module, fragment, width, index)\n"
+"sig=($module, fragment, width, index)\n"
 "Return the value of sample index from the fragment.");
 
 #define AUDIOOP_GETSAMPLE_METHODDEF    \
@@ -35,7 +35,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_max__doc__,
-"max(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Return the maximum of the absolute value of all samples in a fragment.");
 
 #define AUDIOOP_MAX_METHODDEF    \
@@ -66,7 +66,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_minmax__doc__,
-"minmax(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Return the minimum and maximum values of all samples in the sound fragment.");
 
 #define AUDIOOP_MINMAX_METHODDEF    \
@@ -97,7 +97,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_avg__doc__,
-"avg(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Return the average over all samples in the fragment.");
 
 #define AUDIOOP_AVG_METHODDEF    \
@@ -128,7 +128,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_rms__doc__,
-"rms(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Return the root-mean-square of the fragment, i.e. sqrt(sum(S_i^2)/n).");
 
 #define AUDIOOP_RMS_METHODDEF    \
@@ -159,7 +159,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_findfit__doc__,
-"findfit(module, fragment, reference)\n"
+"sig=($module, fragment, reference)\n"
 "Try to match reference as well as possible to a portion of fragment.");
 
 #define AUDIOOP_FINDFIT_METHODDEF    \
@@ -193,7 +193,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_findfactor__doc__,
-"findfactor(module, fragment, reference)\n"
+"sig=($module, fragment, reference)\n"
 "Return a factor F such that rms(add(fragment, mul(reference, -F))) is minimal.");
 
 #define AUDIOOP_FINDFACTOR_METHODDEF    \
@@ -227,7 +227,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_findmax__doc__,
-"findmax(module, fragment, length)\n"
+"sig=($module, fragment, length)\n"
 "Search fragment for a slice of specified number of samples with maximum energy.");
 
 #define AUDIOOP_FINDMAX_METHODDEF    \
@@ -258,7 +258,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_avgpp__doc__,
-"avgpp(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Return the average peak-peak value over all samples in the fragment.");
 
 #define AUDIOOP_AVGPP_METHODDEF    \
@@ -289,7 +289,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_maxpp__doc__,
-"maxpp(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Return the maximum peak-peak value in the sound fragment.");
 
 #define AUDIOOP_MAXPP_METHODDEF    \
@@ -320,7 +320,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_cross__doc__,
-"cross(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Return the number of zero crossings in the fragment passed as an argument.");
 
 #define AUDIOOP_CROSS_METHODDEF    \
@@ -351,7 +351,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_mul__doc__,
-"mul(module, fragment, width, factor)\n"
+"sig=($module, fragment, width, factor)\n"
 "Return a fragment that has all samples in the original fragment multiplied by the floating-point value factor.");
 
 #define AUDIOOP_MUL_METHODDEF    \
@@ -383,7 +383,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_tomono__doc__,
-"tomono(module, fragment, width, lfactor, rfactor)\n"
+"sig=($module, fragment, width, lfactor, rfactor)\n"
 "Convert a stereo fragment to a mono fragment.");
 
 #define AUDIOOP_TOMONO_METHODDEF    \
@@ -416,7 +416,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_tostereo__doc__,
-"tostereo(module, fragment, width, lfactor, rfactor)\n"
+"sig=($module, fragment, width, lfactor, rfactor)\n"
 "Generate a stereo fragment from a mono fragment.");
 
 #define AUDIOOP_TOSTEREO_METHODDEF    \
@@ -449,7 +449,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_add__doc__,
-"add(module, fragment1, fragment2, width)\n"
+"sig=($module, fragment1, fragment2, width)\n"
 "Return a fragment which is the addition of the two samples passed as parameters.");
 
 #define AUDIOOP_ADD_METHODDEF    \
@@ -484,7 +484,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_bias__doc__,
-"bias(module, fragment, width, bias)\n"
+"sig=($module, fragment, width, bias)\n"
 "Return a fragment that is the original fragment with a bias added to each sample.");
 
 #define AUDIOOP_BIAS_METHODDEF    \
@@ -516,7 +516,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_reverse__doc__,
-"reverse(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Reverse the samples in a fragment and returns the modified fragment.");
 
 #define AUDIOOP_REVERSE_METHODDEF    \
@@ -547,7 +547,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_byteswap__doc__,
-"byteswap(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Convert big-endian samples to little-endian and vice versa.");
 
 #define AUDIOOP_BYTESWAP_METHODDEF    \
@@ -578,7 +578,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_lin2lin__doc__,
-"lin2lin(module, fragment, width, newwidth)\n"
+"sig=($module, fragment, width, newwidth)\n"
 "Convert samples between 1-, 2-, 3- and 4-byte formats.");
 
 #define AUDIOOP_LIN2LIN_METHODDEF    \
@@ -610,7 +610,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_ratecv__doc__,
-"ratecv(module, fragment, width, nchannels, inrate, outrate, state, weightA=1, weightB=0)\n"
+"sig=($module, fragment, width, nchannels, inrate, outrate, state, weightA=1, weightB=0)\n"
 "Convert the frame rate of the input fragment.");
 
 #define AUDIOOP_RATECV_METHODDEF    \
@@ -647,7 +647,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_lin2ulaw__doc__,
-"lin2ulaw(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Convert samples in the audio fragment to u-LAW encoding.");
 
 #define AUDIOOP_LIN2ULAW_METHODDEF    \
@@ -678,7 +678,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_ulaw2lin__doc__,
-"ulaw2lin(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Convert sound fragments in u-LAW encoding to linearly encoded sound fragments.");
 
 #define AUDIOOP_ULAW2LIN_METHODDEF    \
@@ -709,7 +709,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_lin2alaw__doc__,
-"lin2alaw(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Convert samples in the audio fragment to a-LAW encoding.");
 
 #define AUDIOOP_LIN2ALAW_METHODDEF    \
@@ -740,7 +740,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_alaw2lin__doc__,
-"alaw2lin(module, fragment, width)\n"
+"sig=($module, fragment, width)\n"
 "Convert sound fragments in a-LAW encoding to linearly encoded sound fragments.");
 
 #define AUDIOOP_ALAW2LIN_METHODDEF    \
@@ -771,7 +771,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_lin2adpcm__doc__,
-"lin2adpcm(module, fragment, width, state)\n"
+"sig=($module, fragment, width, state)\n"
 "Convert samples to 4 bit Intel/DVI ADPCM encoding.");
 
 #define AUDIOOP_LIN2ADPCM_METHODDEF    \
@@ -803,7 +803,7 @@ exit:
 }
 
 PyDoc_STRVAR(audioop_adpcm2lin__doc__,
-"adpcm2lin(module, fragment, width, state)\n"
+"sig=($module, fragment, width, state)\n"
 "Decode an Intel/DVI ADPCM coded fragment to a linear fragment.");
 
 #define AUDIOOP_ADPCM2LIN_METHODDEF    \
@@ -833,4 +833,4 @@ exit:
 
     return return_value;
 }
-/*[clinic end generated code: checksum=0d9fa2c5719e996b169f808350016cd622799562]*/
+/*[clinic end generated code: output=ee7e58cfd3d0d5a6 input=a9049054013a1b77]*/
index cbafc68efac23a44e8fe41e28f34cad960cd33f6..e4ef36c96000ac467a853355a436cf67be028417 100644 (file)
@@ -3,7 +3,7 @@ preserve
 [clinic start generated code]*/
 
 PyDoc_STRVAR(binascii_a2b_uu__doc__,
-"a2b_uu(module, data)\n"
+"sig=($module, data)\n"
 "Decode a line of uuencoded data.");
 
 #define BINASCII_A2B_UU_METHODDEF    \
@@ -33,7 +33,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_b2a_uu__doc__,
-"b2a_uu(module, data)\n"
+"sig=($module, data)\n"
 "Uuencode line of data.");
 
 #define BINASCII_B2A_UU_METHODDEF    \
@@ -63,7 +63,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_a2b_base64__doc__,
-"a2b_base64(module, data)\n"
+"sig=($module, data)\n"
 "Decode a line of base64 data.");
 
 #define BINASCII_A2B_BASE64_METHODDEF    \
@@ -93,7 +93,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_b2a_base64__doc__,
-"b2a_base64(module, data)\n"
+"sig=($module, data)\n"
 "Base64-code line of data.");
 
 #define BINASCII_B2A_BASE64_METHODDEF    \
@@ -123,7 +123,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_a2b_hqx__doc__,
-"a2b_hqx(module, data)\n"
+"sig=($module, data)\n"
 "Decode .hqx coding.");
 
 #define BINASCII_A2B_HQX_METHODDEF    \
@@ -153,7 +153,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_rlecode_hqx__doc__,
-"rlecode_hqx(module, data)\n"
+"sig=($module, data)\n"
 "Binhex RLE-code binary data.");
 
 #define BINASCII_RLECODE_HQX_METHODDEF    \
@@ -183,7 +183,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_b2a_hqx__doc__,
-"b2a_hqx(module, data)\n"
+"sig=($module, data)\n"
 "Encode .hqx data.");
 
 #define BINASCII_B2A_HQX_METHODDEF    \
@@ -213,7 +213,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_rledecode_hqx__doc__,
-"rledecode_hqx(module, data)\n"
+"sig=($module, data)\n"
 "Decode hexbin RLE-coded string.");
 
 #define BINASCII_RLEDECODE_HQX_METHODDEF    \
@@ -243,7 +243,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_crc_hqx__doc__,
-"crc_hqx(module, data, crc)\n"
+"sig=($module, data, crc)\n"
 "Compute hqx CRC incrementally.");
 
 #define BINASCII_CRC_HQX_METHODDEF    \
@@ -278,7 +278,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_crc32__doc__,
-"crc32(module, data, crc=0)\n"
+"sig=($module, data, crc=0)\n"
 "Compute CRC-32 incrementally.");
 
 #define BINASCII_CRC32_METHODDEF    \
@@ -313,7 +313,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_b2a_hex__doc__,
-"b2a_hex(module, data)\n"
+"sig=($module, data)\n"
 "Hexadecimal representation of binary data.\n"
 "\n"
 "The return value is a bytes object.  This function is also\n"
@@ -346,7 +346,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_a2b_hex__doc__,
-"a2b_hex(module, hexstr)\n"
+"sig=($module, hexstr)\n"
 "Binary data of hexadecimal representation.\n"
 "\n"
 "hexstr must contain an even number of hex digits (upper or lower case).\n"
@@ -379,7 +379,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_a2b_qp__doc__,
-"a2b_qp(module, data, header=False)\n"
+"sig=($module, data, header=False)\n"
 "Decode a string of qp-encoded data.");
 
 #define BINASCII_A2B_QP_METHODDEF    \
@@ -411,7 +411,7 @@ exit:
 }
 
 PyDoc_STRVAR(binascii_b2a_qp__doc__,
-"b2a_qp(module, data, quotetabs=False, istext=True, header=False)\n"
+"sig=($module, data, quotetabs=False, istext=True, header=False)\n"
 "Encode a string using quoted-printable encoding.\n"
 "\n"
 "On encoding, when istext is set, newlines are not encoded, and white\n"
@@ -447,4 +447,4 @@ exit:
 
     return return_value;
 }
-/*[clinic end generated code: checksum=8180e5be47a110ae8c89263a7c12a91d80754f60]*/
+/*[clinic end generated code: output=831a8ccc9f984001 input=a9049054013a1b77]*/
index 0adeb0164d1d54cbf7378825bd0c481e1edd8b83..86fd7965cc39d7463af124e8060d129fb62b6e72 100644 (file)
@@ -3,7 +3,7 @@ preserve
 [clinic start generated code]*/
 
 PyDoc_STRVAR(zlib_compress__doc__,
-"compress(module, bytes, level=Z_DEFAULT_COMPRESSION)\n"
+"sig=($module, bytes, level=Z_DEFAULT_COMPRESSION)\n"
 "Returns a bytes object containing compressed data.\n"
 "\n"
 "  bytes\n"
@@ -39,7 +39,7 @@ exit:
 }
 
 PyDoc_STRVAR(zlib_decompress__doc__,
-"decompress(module, data, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)\n"
+"sig=($module, data, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)\n"
 "Returns a bytes object containing the uncompressed data.\n"
 "\n"
 "  data\n"
@@ -78,7 +78,7 @@ exit:
 }
 
 PyDoc_STRVAR(zlib_compressobj__doc__,
-"compressobj(module, level=Z_DEFAULT_COMPRESSION, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY, zdict=None)\n"
+"sig=($module, level=Z_DEFAULT_COMPRESSION, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY, zdict=None)\n"
 "Return a compressor object.\n"
 "\n"
 "  level\n"
@@ -132,7 +132,7 @@ exit:
 }
 
 PyDoc_STRVAR(zlib_decompressobj__doc__,
-"decompressobj(module, wbits=MAX_WBITS, zdict=b\'\')\n"
+"sig=($module, wbits=MAX_WBITS, zdict=b\'\')\n"
 "Return a decompressor object.\n"
 "\n"
 "  wbits\n"
@@ -166,7 +166,7 @@ exit:
 }
 
 PyDoc_STRVAR(zlib_Compress_compress__doc__,
-"compress(self, data)\n"
+"sig=($self, data)\n"
 "Returns a bytes object containing compressed data.\n"
 "\n"
 "  data\n"
@@ -203,7 +203,7 @@ exit:
 }
 
 PyDoc_STRVAR(zlib_Decompress_decompress__doc__,
-"decompress(self, data, max_length=0)\n"
+"sig=($self, data, max_length=0)\n"
 "Return a bytes object containing the decompressed version of the data.\n"
 "\n"
 "  data\n"
@@ -245,7 +245,7 @@ exit:
 }
 
 PyDoc_STRVAR(zlib_Compress_flush__doc__,
-"flush(self, mode=Z_FINISH)\n"
+"sig=($self, mode=Z_FINISH)\n"
 "Return a bytes object containing any remaining compressed data.\n"
 "\n"
 "  mode\n"
@@ -277,7 +277,7 @@ exit:
 }
 
 PyDoc_STRVAR(zlib_Compress_copy__doc__,
-"copy(self)\n"
+"sig=($self)\n"
 "Return a copy of the compression object.");
 
 #define ZLIB_COMPRESS_COPY_METHODDEF    \
@@ -293,7 +293,7 @@ zlib_Compress_copy(compobject *self, PyObject *Py_UNUSED(ignored))
 }
 
 PyDoc_STRVAR(zlib_Decompress_copy__doc__,
-"copy(self)\n"
+"sig=($self)\n"
 "Return a copy of the decompression object.");
 
 #define ZLIB_DECOMPRESS_COPY_METHODDEF    \
@@ -309,7 +309,7 @@ zlib_Decompress_copy(compobject *self, PyObject *Py_UNUSED(ignored))
 }
 
 PyDoc_STRVAR(zlib_Decompress_flush__doc__,
-"flush(self, length=DEF_BUF_SIZE)\n"
+"sig=($self, length=DEF_BUF_SIZE)\n"
 "Return a bytes object containing any remaining decompressed data.\n"
 "\n"
 "  length\n"
@@ -338,7 +338,7 @@ exit:
 }
 
 PyDoc_STRVAR(zlib_adler32__doc__,
-"adler32(module, data, value=1)\n"
+"sig=($module, data, value=1)\n"
 "Compute an Adler-32 checksum of data.\n"
 "\n"
 "  value\n"
@@ -374,7 +374,7 @@ exit:
 }
 
 PyDoc_STRVAR(zlib_crc32__doc__,
-"crc32(module, data, value=0)\n"
+"sig=($module, data, value=0)\n"
 "Compute a CRC-32 checksum of data.\n"
 "\n"
 "  value\n"
@@ -408,4 +408,4 @@ exit:
 
     return return_value;
 }
-/*[clinic end generated code: checksum=04f94bbaf2652717753e237e4021bf6c92ddffdd]*/
+/*[clinic end generated code: output=ad23316b49faf7e6 input=a9049054013a1b77]*/
index 98897895b793bc67852cc3b1ca3545c76726d99f..fca852d8cd8f059ad040caa385aedf8511bcd918 100644 (file)
@@ -184,7 +184,7 @@ corresponding Unix manual entries for more information on calls.");
 /*[clinic input]
 module os
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=8cff096d1133288f]*/
 
 #ifndef _MSC_VER
 
@@ -2397,7 +2397,7 @@ class dir_fd_converter(CConverter):
 
 
 [python start generated code]*/
-/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=d702d58a8469cc7d]*/
 
 /*[clinic input]
 
@@ -2430,7 +2430,7 @@ It's an error to use dir_fd or follow_symlinks when specifying path as
 [clinic start generated code]*/
 
 PyDoc_STRVAR(os_stat__doc__,
-"stat(module, path, *, dir_fd=None, follow_symlinks=True)\n"
+"sig=($module, path, *, dir_fd=None, follow_symlinks=True)\n"
 "Perform a stat system call on the given path.\n"
 "\n"
 "  path\n"
@@ -2481,7 +2481,7 @@ exit:
 
 static PyObject *
 os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, int follow_symlinks)
-/*[clinic end generated code: checksum=09cc91b4947f9e3b9335c8be998bb7c56f7f8b40]*/
+/*[clinic end generated code: output=33b6ee92cd1b98de input=5ae155bd475fd20a]*/
 {
     return posix_do_stat("stat", path, dir_fd, follow_symlinks);
 }
@@ -2562,7 +2562,7 @@ Note that most operations will use the effective uid/gid, therefore this
 [clinic start generated code]*/
 
 PyDoc_STRVAR(os_access__doc__,
-"access(module, path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)\n"
+"sig=($module, path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)\n"
 "Use the real uid/gid to test for access to a path.\n"
 "\n"
 "  path\n"
@@ -2622,7 +2622,7 @@ exit:
 
 static PyObject *
 os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks)
-/*[clinic end generated code: checksum=6483a51e1fee83da4f8e41cbc8054a701cfed1c5]*/
+/*[clinic end generated code: output=33b3fafc61e778e1 input=2e2e7594371f5b7e]*/
 {
     PyObject *return_value = NULL;
 
@@ -2718,7 +2718,7 @@ Return the name of the terminal device connected to 'fd'.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(os_ttyname__doc__,
-"ttyname(module, fd)\n"
+"sig=($module, fd)\n"
 "Return the name of the terminal device connected to \'fd\'.\n"
 "\n"
 "  fd\n"
@@ -2752,7 +2752,7 @@ exit:
 
 static char *
 os_ttyname_impl(PyModuleDef *module, int fd)
-/*[clinic end generated code: checksum=11bbb8b7969155f54bb8a1ec35ac1ebdfd4b0fec]*/
+/*[clinic end generated code: output=c3083e665d4d11b9 input=5f72ca83e76b3b45]*/
 {
     char *ret;
 
index ca1620feabe91b4237e82239c88778aa846ff3e7..c6c4ba2c71d4a1f5addabbc14ebed95e61bec665 100644 (file)
@@ -21,7 +21,7 @@
 module unicodedata
 class unicodedata.UCD 'PreviousDBVersion *' '&UCD_Type'
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=6dac153082d150bc]*/
 
 /* character properties */
 
@@ -129,7 +129,7 @@ not given, ValueError is raised.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(unicodedata_UCD_decimal__doc__,
-"decimal(self, unichr, default=None)\n"
+"sig=($self, unichr, default=None)\n"
 "Converts a Unicode character into its equivalent decimal value.\n"
 "\n"
 "Returns the decimal value assigned to the Unicode character unichr\n"
@@ -161,7 +161,7 @@ exit:
 
 static PyObject *
 unicodedata_UCD_decimal_impl(PreviousDBVersion *self, PyUnicodeObject *unichr, PyObject *default_value)
-/*[clinic end generated code: checksum=e1371a1a016e19fdd3cd2c1af1d1832df095f50b]*/
+/*[clinic end generated code: output=a3ad5de9393acb2f input=c25c9d2b4de076b1]*/
 {
     int have_old = 0;
     long rc;
index a6b72bd4a873fdcb3c345b2a9ed5154e888c2362..cde16f7e450743f917f6bb4e9d4b4440fc6d20d5 100644 (file)
@@ -86,7 +86,7 @@ module zlib
 class zlib.Compress "compobject *" "&Comptype"
 class zlib.Decompress "compobject *" "&Decomptype"
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=bfd4c340573ba91d]*/
 
 static compobject *
 newcompobject(PyTypeObject *type)
@@ -148,7 +148,7 @@ Returns a bytes object containing compressed data.
 
 static PyObject *
 zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int level)
-/*[clinic end generated code: checksum=5d7dd4588788efd3516e5f4225050d6413632601]*/
+/*[clinic end generated code: output=5d7dd4588788efd3 input=be3abe9934bda4b3]*/
 {
     PyObject *ReturnVal = NULL;
     Byte *input, *output = NULL;
@@ -232,7 +232,7 @@ class uint_converter(CConverter):
     c_ignored_default = "0"
 
 [python start generated code]*/
-/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=22263855f7a3ebfd]*/
 
 static int
 uint_converter(PyObject *obj, void *ptr)
@@ -281,7 +281,7 @@ Returns a bytes object containing the uncompressed data.
 
 static PyObject *
 zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, unsigned int bufsize)
-/*[clinic end generated code: checksum=9e5464e72df9cb5fee73df662dbcaed867e01d32]*/
+/*[clinic end generated code: output=9e5464e72df9cb5f input=0f4b9abb7103f50e]*/
 {
     PyObject *result_str = NULL;
     Byte *input;
@@ -411,7 +411,7 @@ Return a compressor object.
 
 static PyObject *
 zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict)
-/*[clinic end generated code: checksum=89e5a6c1449caa9ed76f1baad066600e985151a9]*/
+/*[clinic end generated code: output=89e5a6c1449caa9e input=b034847f8821f6af]*/
 {
     compobject *self = NULL;
     int err;
@@ -483,7 +483,7 @@ Return a decompressor object.
 
 static PyObject *
 zlib_decompressobj_impl(PyModuleDef *module, int wbits, PyObject *zdict)
-/*[clinic end generated code: checksum=8ccd583fbd631798566d415933cd44440c8a74b5]*/
+/*[clinic end generated code: output=8ccd583fbd631798 input=67f05145a6920127]*/
 {
     int err;
     compobject *self;
@@ -571,7 +571,7 @@ Call the flush() method to clear these buffers.
 
 static PyObject *
 zlib_Compress_compress_impl(compobject *self, Py_buffer *data)
-/*[clinic end generated code: checksum=5d5cd791cbc6a7f4b6de4ec12c085c88d4d3e31c]*/
+/*[clinic end generated code: output=5d5cd791cbc6a7f4 input=0d95908d6e64fab8]*/
 {
     int err;
     unsigned int inplen;
@@ -705,7 +705,7 @@ Call the flush() method to clear these buffers.
 
 static PyObject *
 zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, unsigned int max_length)
-/*[clinic end generated code: checksum=755cccc9087bfe55486b7e15fa7e2ab60b4c86d6]*/
+/*[clinic end generated code: output=755cccc9087bfe55 input=02cfc047377cec86]*/
 {
     int err;
     unsigned int old_length, length = DEF_BUF_SIZE;
@@ -840,7 +840,7 @@ Return a bytes object containing any remaining compressed data.
 
 static PyObject *
 zlib_Compress_flush_impl(compobject *self, int mode)
-/*[clinic end generated code: checksum=a203f4cefc9de727aa1d2ea39d11c0a16c32041a]*/
+/*[clinic end generated code: output=a203f4cefc9de727 input=6982996afe0772d8]*/
 {
     int err;
     unsigned int length = DEF_BUF_SIZE, new_length;
@@ -933,7 +933,7 @@ Return a copy of the compression object.
 
 static PyObject *
 zlib_Compress_copy_impl(compobject *self)
-/*[clinic end generated code: checksum=5144aa153c21e805afa5c19e5b48cf8e6480b5da]*/
+/*[clinic end generated code: output=5144aa153c21e805 input=c656351f94b82718]*/
 {
     compobject *retval = NULL;
     int err;
@@ -991,7 +991,7 @@ Return a copy of the decompression object.
 
 static PyObject *
 zlib_Decompress_copy_impl(compobject *self)
-/*[clinic end generated code: checksum=02a883a2a510c8ccfeef3f89e317a275bfe8c094]*/
+/*[clinic end generated code: output=02a883a2a510c8cc input=ba6c3e96712a596b]*/
 {
     compobject *retval = NULL;
     int err;
@@ -1055,7 +1055,7 @@ Return a bytes object containing any remaining decompressed data.
 
 static PyObject *
 zlib_Decompress_flush_impl(compobject *self, unsigned int length)
-/*[clinic end generated code: checksum=db6fb753ab698e22afe3957c9da9e5e77f4bfc08]*/
+/*[clinic end generated code: output=db6fb753ab698e22 input=fe7954136712c353]*/
 {
     int err;
     unsigned int new_length;
@@ -1183,7 +1183,7 @@ The returned checksum is an integer.
 
 static PyObject *
 zlib_adler32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value)
-/*[clinic end generated code: checksum=51d6d75ee655c78af8c968fdb4c11d97e62c67d5]*/
+/*[clinic end generated code: output=51d6d75ee655c78a input=6ff4557872160e88]*/
 {
     /* Releasing the GIL for very small buffers is inefficient
        and may lower performance */
@@ -1222,7 +1222,7 @@ The returned checksum is an integer.
 
 static PyObject *
 zlib_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value)
-/*[clinic end generated code: checksum=c1e986e74fe7b62369998a71a81ebeb9b73e8d4c]*/
+/*[clinic end generated code: output=c1e986e74fe7b623 input=26c3ed430fa00b4c]*/
 {
     int signed_val;
 
index ce1c71beb2c768a1d78d910d43545a09b3eaf5a3..181cc51f0f9a03454bf84d733c148dcd8940036d 100644 (file)
@@ -353,17 +353,13 @@ wrapperdescr_call(PyWrapperDescrObject *descr, PyObject *args, PyObject *kwds)
 static PyObject *
 method_get_doc(PyMethodDescrObject *descr, void *closure)
 {
-    const char *name = descr->d_method->ml_name;
-    const char *doc = descr->d_method->ml_doc;
-    return _PyType_GetDocFromInternalDoc(name, doc);
+    return _PyType_GetDocFromInternalDoc(descr->d_method->ml_doc);
 }
 
 static PyObject *
 method_get_text_signature(PyMethodDescrObject *descr, void *closure)
 {
-    const char *name = descr->d_method->ml_name;
-    const char *doc = descr->d_method->ml_doc;
-    return _PyType_GetTextSignatureFromInternalDoc(name, doc);
+    return _PyType_GetTextSignatureFromInternalDoc(descr->d_method->ml_doc);
 }
 
 static PyObject *
@@ -470,17 +466,13 @@ static PyGetSetDef getset_getset[] = {
 static PyObject *
 wrapperdescr_get_doc(PyWrapperDescrObject *descr, void *closure)
 {
-    const char *name = descr->d_base->name;
-    const char *doc = descr->d_base->doc;
-    return _PyType_GetDocFromInternalDoc(name, doc);
+    return _PyType_GetDocFromInternalDoc(descr->d_base->doc);
 }
 
 static PyObject *
 wrapperdescr_get_text_signature(PyWrapperDescrObject *descr, void *closure)
 {
-    const char *name = descr->d_base->name;
-    const char *doc = descr->d_base->doc;
-    return _PyType_GetTextSignatureFromInternalDoc(name, doc);
+    return _PyType_GetTextSignatureFromInternalDoc(descr->d_base->doc);
 }
 
 static PyGetSetDef wrapperdescr_getset[] = {
@@ -1159,17 +1151,13 @@ wrapper_name(wrapperobject *wp)
 static PyObject *
 wrapper_doc(wrapperobject *wp, void *closure)
 {
-    const char *name = wp->descr->d_base->name;
-    const char *doc = wp->descr->d_base->doc;
-    return _PyType_GetDocFromInternalDoc(name, doc);
+    return _PyType_GetDocFromInternalDoc(wp->descr->d_base->doc);
 }
 
 static PyObject *
 wrapper_text_signature(wrapperobject *wp, void *closure)
 {
-    const char *name = wp->descr->d_base->name;
-    const char *doc = wp->descr->d_base->doc;
-    return _PyType_GetTextSignatureFromInternalDoc(name, doc);
+    return _PyType_GetTextSignatureFromInternalDoc(wp->descr->d_base->doc);
 }
 
 static PyObject *
index 2332e3fcd87097121ef121dbfd5233e7b95b4424..2673817b561b2eb91afb1bf53a2574e57ca89f4b 100644 (file)
@@ -72,7 +72,7 @@ to the combined-table form.
 /*[clinic input]
 class dict "PyDictObject *" "&PyDict_Type"
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=f157a5a0ce9589d6]*/
 
 typedef struct {
     /* Cached hash code of me_key. */
@@ -1702,7 +1702,7 @@ Returns a new dict with keys from iterable and values equal to value.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(dict_fromkeys__doc__,
-"fromkeys(type, iterable, value=None)\n"
+"sig=($type, iterable, value=None)\n"
 "Returns a new dict with keys from iterable and values equal to value.");
 
 #define DICT_FROMKEYS_METHODDEF    \
@@ -1730,7 +1730,7 @@ exit:
 
 static PyObject *
 dict_fromkeys_impl(PyTypeObject *type, PyObject *iterable, PyObject *value)
-/*[clinic end generated code: checksum=008269e1774a379b356841548c04061fd78a9542]*/
+/*[clinic end generated code: output=aff6e583703dbeba input=b85a667f9bf4669d]*/
 {
     PyObject *it;       /* iter(seq) */
     PyObject *key;
@@ -2209,7 +2209,7 @@ True if D has a key k, else False.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(dict___contains____doc__,
-"__contains__(self, key)\n"
+"sig=($self, key)\n"
 "True if D has a key k, else False.");
 
 #define DICT___CONTAINS___METHODDEF    \
@@ -2217,7 +2217,7 @@ PyDoc_STRVAR(dict___contains____doc__,
 
 static PyObject *
 dict___contains__(PyDictObject *self, PyObject *key)
-/*[clinic end generated code: checksum=744ca54369dda9815a596304087f1b37fafa5960]*/
+/*[clinic end generated code: output=c654684a6d880281 input=b852b2a19b51ab24]*/
 {
     register PyDictObject *mp = self;
     Py_hash_t hash;
index 227ad57436f15a4292c5c5d0a6b7cdf9766fac86..ead7443cba752c5816c2bddb460d99b4fb7c272b 100644 (file)
@@ -182,17 +182,13 @@ static PyMethodDef meth_methods[] = {
 static PyObject *
 meth_get__text_signature__(PyCFunctionObject *m, void *closure)
 {
-    const char *name = m->m_ml->ml_name;
-    const char *doc = m->m_ml->ml_doc;
-    return _PyType_GetTextSignatureFromInternalDoc(name, doc);
+    return _PyType_GetTextSignatureFromInternalDoc(m->m_ml->ml_doc);
 }
 
 static PyObject *
 meth_get__doc__(PyCFunctionObject *m, void *closure)
 {
-    const char *name = m->m_ml->ml_name;
-    const char *doc = m->m_ml->ml_doc;
-    return _PyType_GetDocFromInternalDoc(name, doc);
+    return _PyType_GetDocFromInternalDoc(m->m_ml->ml_doc);
 }
 
 static PyObject *
index 08da4de01687f29a1b814cca2090062153ce3ede..cbbb58a949a5933edd78ecf29c59e80ffede1548 100644 (file)
@@ -60,18 +60,11 @@ slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
  * otherwise returns NULL.
  */
 static const char *
-find_signature(const char *name, const char *doc)
+find_signature(const char *doc)
 {
-    size_t length;
-    if (!doc || !name)
-        return NULL;
-    length = strlen(name);
-    if (strncmp(doc, name, length))
-        return NULL;
-    doc += length;
-    if (*doc != '(')
-        return NULL;
-    return doc;
+    if (doc && !strncmp(doc, "sig=(", 5))
+        return doc + 4;
+    return NULL;
 }
 
 /*
@@ -94,9 +87,9 @@ skip_eols(const char *trace)
 }
 
 static const char *
-_PyType_DocWithoutSignature(const char *name, const char *internal_doc)
+_PyType_DocWithoutSignature(const char *internal_doc)
 {
-    const char *signature = find_signature(name, internal_doc);
+    const char *signature = find_signature(internal_doc);
 
     if (signature)
         return skip_eols(skip_signature(signature));
@@ -104,9 +97,9 @@ _PyType_DocWithoutSignature(const char *name, const char *internal_doc)
 }
 
 PyObject *
-_PyType_GetDocFromInternalDoc(const char *name, const char *internal_doc)
+_PyType_GetDocFromInternalDoc(const char *internal_doc)
 {
-    const char *doc = _PyType_DocWithoutSignature(name, internal_doc);
+    const char *doc = _PyType_DocWithoutSignature(internal_doc);
 
     if (!doc) {
         Py_INCREF(Py_None);
@@ -117,9 +110,9 @@ _PyType_GetDocFromInternalDoc(const char *name, const char *internal_doc)
 }
 
 PyObject *
-_PyType_GetTextSignatureFromInternalDoc(const char *name, const char *internal_doc)
+_PyType_GetTextSignatureFromInternalDoc(const char *internal_doc)
 {
-    const char *signature = find_signature(name, internal_doc);
+    const char *signature = find_signature(internal_doc);
     const char *doc;
 
     if (!signature) {
@@ -706,9 +699,7 @@ type_get_doc(PyTypeObject *type, void *context)
 {
     PyObject *result;
     if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE) && type->tp_doc != NULL) {
-        const char *name = type->tp_name;
-        const char *doc = type->tp_doc;
-        return _PyType_GetDocFromInternalDoc(name, doc);
+        return _PyType_GetDocFromInternalDoc(type->tp_doc);
     }
     result = _PyDict_GetItemId(type->tp_dict, &PyId___doc__);
     if (result == NULL) {
@@ -728,9 +719,7 @@ type_get_doc(PyTypeObject *type, void *context)
 static PyObject *
 type_get_text_signature(PyTypeObject *type, void *context)
 {
-    const char *name = type->tp_name;
-    const char *doc = type->tp_doc;
-    return _PyType_GetTextSignatureFromInternalDoc(name, doc);
+    return _PyType_GetTextSignatureFromInternalDoc(type->tp_doc);
 }
 
 static int
@@ -2608,7 +2597,7 @@ PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
         /* need to make a copy of the docstring slot, which usually
            points to a static string literal */
         if (slot->slot == Py_tp_doc) {
-            const char *old_doc = _PyType_DocWithoutSignature(spec->name, slot->pfunc);
+            const char *old_doc = _PyType_DocWithoutSignature(slot->pfunc);
             size_t len = strlen(old_doc)+1;
             char *tp_doc = PyObject_MALLOC(len);
             if (tp_doc == NULL) {
@@ -3000,7 +2989,7 @@ static PyMethodDef type_methods[] = {
 
 PyDoc_STRVAR(type_doc,
 /* this text signature cannot be accurate yet.  will fix.  --larry */
-"type(object_or_name, bases, dict)\n"
+"sig=(object_or_name, bases, dict)\n"
 "type(object) -> the object's type\n"
 "type(name, bases, dict) -> a new type");
 
@@ -4196,7 +4185,7 @@ PyTypeObject PyBaseObject_Type = {
     PyObject_GenericSetAttr,                    /* tp_setattro */
     0,                                          /* tp_as_buffer */
     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */
-    PyDoc_STR("object()\nThe most base type"),  /* tp_doc */
+    PyDoc_STR("sig=()\nThe most base type"),  /* tp_doc */
     0,                                          /* tp_traverse */
     0,                                          /* tp_clear */
     object_richcompare,                         /* tp_richcompare */
@@ -4663,7 +4652,7 @@ PyType_Ready(PyTypeObject *type)
      */
     if (_PyDict_GetItemId(type->tp_dict, &PyId___doc__) == NULL) {
         if (type->tp_doc != NULL) {
-            const char *old_doc = _PyType_DocWithoutSignature(type->tp_name, type->tp_doc);
+            const char *old_doc = _PyType_DocWithoutSignature(type->tp_doc);
             PyObject *doc = PyUnicode_FromString(old_doc);
             if (doc == NULL)
                 goto error;
@@ -5325,8 +5314,9 @@ tp_new_wrapper(PyObject *self, PyObject *args, PyObject *kwds)
 
 static struct PyMethodDef tp_new_methoddef[] = {
     {"__new__", (PyCFunction)tp_new_wrapper, METH_VARARGS|METH_KEYWORDS,
-     PyDoc_STR("T.__new__(S, ...) -> "
-               "a new object with type S, a subtype of T")},
+     PyDoc_STR("sig=($type, *args, **kwargs)\n"
+               "Create and return a new object.  "
+               "See help(type) for accurate signature.")},
     {0}
 };
 
@@ -6098,22 +6088,22 @@ typedef struct wrapperbase slotdef;
     ETSLOT(NAME, as_number.SLOT, FUNCTION, WRAPPER, DOC)
 #define UNSLOT(NAME, SLOT, FUNCTION, WRAPPER, DOC) \
     ETSLOT(NAME, as_number.SLOT, FUNCTION, WRAPPER, \
-           NAME "(self)\n" DOC)
+           "sig=($self)\n" DOC)
 #define IBSLOT(NAME, SLOT, FUNCTION, WRAPPER, DOC) \
     ETSLOT(NAME, as_number.SLOT, FUNCTION, WRAPPER, \
-           NAME "(self, value)\nReturns self" DOC "value.")
+           "sig=($self, value)\nReturn self" DOC "value.")
 #define BINSLOT(NAME, SLOT, FUNCTION, DOC) \
     ETSLOT(NAME, as_number.SLOT, FUNCTION, wrap_binaryfunc_l, \
-           NAME "(self, value)\nReturns self" DOC "value.")
+           "sig=($self, value)\nReturn self" DOC "value.")
 #define RBINSLOT(NAME, SLOT, FUNCTION, DOC) \
     ETSLOT(NAME, as_number.SLOT, FUNCTION, wrap_binaryfunc_r, \
-           NAME "(self, value)\nReturns value" DOC "self.")
+           "sig=($self, value)\nReturn value" DOC "self.")
 #define BINSLOTNOTINFIX(NAME, SLOT, FUNCTION, DOC) \
     ETSLOT(NAME, as_number.SLOT, FUNCTION, wrap_binaryfunc_l, \
-           NAME "(self, value)\n" DOC)
+           "sig=($self, value)\n" DOC)
 #define RBINSLOTNOTINFIX(NAME, SLOT, FUNCTION, DOC) \
     ETSLOT(NAME, as_number.SLOT, FUNCTION, wrap_binaryfunc_r, \
-           NAME "(self, value)\n" DOC)
+           "sig=($self, value)\n" DOC)
 
 static slotdef slotdefs[] = {
     TPSLOT("__getattribute__", tp_getattr, NULL, NULL, ""),
@@ -6121,52 +6111,52 @@ static slotdef slotdefs[] = {
     TPSLOT("__setattr__", tp_setattr, NULL, NULL, ""),
     TPSLOT("__delattr__", tp_setattr, NULL, NULL, ""),
     TPSLOT("__repr__", tp_repr, slot_tp_repr, wrap_unaryfunc,
-           "__repr__(self)\nReturns repr(self)."),
+           "sig=($self)\nReturn repr(self)."),
     TPSLOT("__hash__", tp_hash, slot_tp_hash, wrap_hashfunc,
-           "__hash__(self)\nReturns hash(self)."),
+           "sig=($self)\nReturn hash(self)."),
     FLSLOT("__call__", tp_call, slot_tp_call, (wrapperfunc)wrap_call,
-           "__call__(self, *args, **kwargs)\nCalls self as a function.",
+           "sig=($self, *args, **kwargs)\nCall self as a function.",
            PyWrapperFlag_KEYWORDS),
     TPSLOT("__str__", tp_str, slot_tp_str, wrap_unaryfunc,
-           "__str__(self)\nReturns str(self)."),
+           "sig=($self)\nReturn str(self)."),
     TPSLOT("__getattribute__", tp_getattro, slot_tp_getattr_hook,
            wrap_binaryfunc,
-           "__getattribute__(self, name)\nReturns getattr(self, name)."),
+           "sig=($self, name)\nReturn getattr(self, name)."),
     TPSLOT("__getattr__", tp_getattro, slot_tp_getattr_hook, NULL, ""),
     TPSLOT("__setattr__", tp_setattro, slot_tp_setattro, wrap_setattr,
-           "__setattr__(self, name, value)\nImplements setattr(self, name, value)."),
+           "sig=($self, name, value)\nImplement setattr(self, name, value)."),
     TPSLOT("__delattr__", tp_setattro, slot_tp_setattro, wrap_delattr,
-           "__delattr__(self, name)\nImplements delattr(self, name)."),
+           "sig=($self, name)\nImplement delattr(self, name)."),
     TPSLOT("__lt__", tp_richcompare, slot_tp_richcompare, richcmp_lt,
-           "__lt__(self, value)\nReturns self<value."),
+           "sig=($self, value)\nReturn self<value."),
     TPSLOT("__le__", tp_richcompare, slot_tp_richcompare, richcmp_le,
-           "__le__(self, value)\nReturns self<=value."),
+           "sig=($self, value)\nReturn self<=value."),
     TPSLOT("__eq__", tp_richcompare, slot_tp_richcompare, richcmp_eq,
-           "__eq__(self, value)\nReturns self==value."),
+           "sig=($self, value)\nReturn self==value."),
     TPSLOT("__ne__", tp_richcompare, slot_tp_richcompare, richcmp_ne,
-           "__ne__(self, value)\nReturns self!=value."),
+           "sig=($self, value)\nReturn self!=value."),
     TPSLOT("__gt__", tp_richcompare, slot_tp_richcompare, richcmp_gt,
-           "__gt__(self, value)\nReturns self>value."),
+           "sig=($self, value)\nReturn self>value."),
     TPSLOT("__ge__", tp_richcompare, slot_tp_richcompare, richcmp_ge,
-           "__ge__(self, value)\nReturns self>=value."),
+           "sig=($self, value)\nReturn self>=value."),
     TPSLOT("__iter__", tp_iter, slot_tp_iter, wrap_unaryfunc,
-           "__iter__(self)\nImplements iter(self)."),
+           "sig=($self)\nImplement iter(self)."),
     TPSLOT("__next__", tp_iternext, slot_tp_iternext, wrap_next,
-           "__next__(self)\nImplements next(self)."),
+           "sig=($self)\nImplement next(self)."),
     TPSLOT("__get__", tp_descr_get, slot_tp_descr_get, wrap_descr_get,
-           "__get__(self, instance, owner)\nCalled to get an attribute of instance, which is of type owner."),
+           "sig=($self, instance, owner)\nReturn an attribute of instance, which is of type owner."),
     TPSLOT("__set__", tp_descr_set, slot_tp_descr_set, wrap_descr_set,
-           "__set__(self, instance, value)\nSets an attribute of instance to value."),
+           "sig=($self, instance, value)\nSet an attribute of instance to value."),
     TPSLOT("__delete__", tp_descr_set, slot_tp_descr_set,
            wrap_descr_delete,
-           "__delete__(instance)\nDeletes an attribute of instance."),
+           "sig=(instance)\nDelete an attribute of instance."),
     FLSLOT("__init__", tp_init, slot_tp_init, (wrapperfunc)wrap_init,
-           "__init__(self, *args, **kwargs)\n"
-           "Initializes self.  See help(type(self)) for accurate signature.",
+           "sig=($self, *args, **kwargs)\n"
+           "Initialize self.  See help(type(self)) for accurate signature.",
            PyWrapperFlag_KEYWORDS),
     TPSLOT("__new__", tp_new, slot_tp_new, NULL,
-           "__new__(cls, *args, **kwargs)\n"
-           "Creates new object.  See help(cls) for accurate signature."),
+           "sig=(type, *args, **kwargs)\n"
+           "Create and return new object.  See help(type) for accurate signature."),
     TPSLOT("__del__", tp_finalize, slot_tp_finalize, (wrapperfunc)wrap_del, ""),
 
     BINSLOT("__add__", nb_add, slot_nb_add,
@@ -6186,13 +6176,13 @@ static slotdef slotdefs[] = {
     RBINSLOT("__rmod__", nb_remainder, slot_nb_remainder,
            "%"),
     BINSLOTNOTINFIX("__divmod__", nb_divmod, slot_nb_divmod,
-           "__divmod__(self, value)\nReturns divmod(self, value)."),
+           "Return divmod(self, value)."),
     RBINSLOTNOTINFIX("__rdivmod__", nb_divmod, slot_nb_divmod,
-           "__rdivmod__(self, value)\nReturns divmod(value, self)."),
+           "Return divmod(value, self)."),
     NBSLOT("__pow__", nb_power, slot_nb_power, wrap_ternaryfunc,
-           "__pow__(self, value, mod=None)\nReturns pow(self, value, mod)."),
+           "sig=($self, value, mod=None)\nReturn pow(self, value, mod)."),
     NBSLOT("__rpow__", nb_power, slot_nb_power, wrap_ternaryfunc_r,
-           "__rpow__(self, value, mod=None)\nReturns pow(value, self, mod)."),
+           "sig=($self, value, mod=None)\nReturn pow(value, self, mod)."),
     UNSLOT("__neg__", nb_negative, slot_nb_negative, wrap_unaryfunc, "-self"),
     UNSLOT("__pos__", nb_positive, slot_nb_positive, wrap_unaryfunc, "+self"),
     UNSLOT("__abs__", nb_absolute, slot_nb_absolute, wrap_unaryfunc,
@@ -6243,48 +6233,48 @@ static slotdef slotdefs[] = {
     IBSLOT("__itruediv__", nb_inplace_true_divide,
            slot_nb_inplace_true_divide, wrap_binaryfunc, "/"),
     NBSLOT("__index__", nb_index, slot_nb_index, wrap_unaryfunc,
-           "__index__(self)\n"
-           "Returns self converted to an integer, if self is suitable"
+           "sig=($self)\n"
+           "Return self converted to an integer, if self is suitable"
            "for use as an index into a list."),
     MPSLOT("__len__", mp_length, slot_mp_length, wrap_lenfunc,
-           "__len__(self)\nReturns len(self)."),
+           "sig=($self)\nReturn len(self)."),
     MPSLOT("__getitem__", mp_subscript, slot_mp_subscript,
            wrap_binaryfunc,
-           "__getitem__(self, key)\nReturns self[key]."),
+           "sig=($self, key)\nReturn self[key]."),
     MPSLOT("__setitem__", mp_ass_subscript, slot_mp_ass_subscript,
            wrap_objobjargproc,
-           "__setitem__(self, key, value)\nSets self[key] to value."),
+           "sig=($self, key, value)\nSet self[key] to value."),
     MPSLOT("__delitem__", mp_ass_subscript, slot_mp_ass_subscript,
            wrap_delitem,
-           "__delitem__(key)\nDeletes self[key]."),
+           "sig=(key)\nDelete self[key]."),
 
     SQSLOT("__len__", sq_length, slot_sq_length, wrap_lenfunc,
-           "__len__(self)\nReturns len(self)."),
+           "sig=($self)\nReturn len(self)."),
     /* Heap types defining __add__/__mul__ have sq_concat/sq_repeat == NULL.
        The logic in abstract.c always falls back to nb_add/nb_multiply in
        this case.  Defining both the nb_* and the sq_* slots to call the
        user-defined methods has unexpected side-effects, as shown by
        test_descr.notimplemented() */
     SQSLOT("__add__", sq_concat, NULL, wrap_binaryfunc,
-           "__add__(self, value)\nReturns self+value."),
+           "sig=($self, value)\nReturn self+value."),
     SQSLOT("__mul__", sq_repeat, NULL, wrap_indexargfunc,
-           "__mul__(self, value)\nReturns self*value.n"),
+           "sig=($self, value)\nReturn self*value.n"),
     SQSLOT("__rmul__", sq_repeat, NULL, wrap_indexargfunc,
-           "__rmul__(self, value)\nReturns self*value."),
+           "sig=($self, value)\nReturn self*value."),
     SQSLOT("__getitem__", sq_item, slot_sq_item, wrap_sq_item,
-           "__getitem__(self, key)\nReturns self[key]."),
+           "sig=($self, key)\nReturn self[key]."),
     SQSLOT("__setitem__", sq_ass_item, slot_sq_ass_item, wrap_sq_setitem,
-           "__setitem__(self, key, value)\nSets self[key] to value."),
+           "sig=($self, key, value)\nSet self[key] to value."),
     SQSLOT("__delitem__", sq_ass_item, slot_sq_ass_item, wrap_sq_delitem,
-           "__delitem__(self, key)\nDeletes self[key]."),
+           "sig=($self, key)\nDelete self[key]."),
     SQSLOT("__contains__", sq_contains, slot_sq_contains, wrap_objobjproc,
-           "__contains__(self, key)\nReturns key in self."),
+           "sig=($self, key)\nReturn key in self."),
     SQSLOT("__iadd__", sq_inplace_concat, NULL,
            wrap_binaryfunc,
-           "__iadd__(self, value)\nImplements self+=value."),
+           "sig=($self, value)\nImplement self+=value."),
     SQSLOT("__imul__", sq_inplace_repeat, NULL,
            wrap_indexargfunc,
-           "__imul__(self, value)\nImplements self*=value."),
+           "sig=($self, value)\nImplement self*=value."),
 
     {NULL}
 };
index 919b7333d7aee36f4ce0c38fba507af69705b071..02359e512a40788e00706a8ca38b175f0f96e21d 100644 (file)
@@ -50,7 +50,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 /*[clinic input]
 class str "PyUnicodeObject *" "&PyUnicode_Type"
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=604e916854800fa8]*/
 
 /* --- Globals ------------------------------------------------------------
 
@@ -12885,7 +12885,7 @@ must be a string, whose characters will be mapped to None in the result.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(unicode_maketrans__doc__,
-"maketrans(x, y=None, z=None)\n"
+"sig=(x, y=None, z=None)\n"
 "Return a translation table usable for str.translate().\n"
 "\n"
 "If there is only one argument, it must be a dictionary mapping Unicode\n"
@@ -12922,7 +12922,7 @@ exit:
 
 static PyObject *
 unicode_maketrans_impl(PyObject *x, PyObject *y, PyObject *z)
-/*[clinic end generated code: checksum=90a3de8c494b304687e1e0d7e5fa8ba78eac6533]*/
+/*[clinic end generated code: output=ca001ac83ed32269 input=7bfbf529a293c6c5]*/
 {
     PyObject *new = NULL, *key, *value;
     Py_ssize_t i = 0;
index ae8ff5e915eeaecc297f22bbdabbbf8a1c29d17a..2fd9b4429ba00df16e29adce58a90ebe3af525ab 100644 (file)
@@ -34,7 +34,7 @@ static PyObject *initstr = NULL;
 /*[clinic input]
 module _imp
 [clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=9c332475d8686284]*/
 
 /*[python input]
 class fs_unicode_converter(CConverter):
@@ -42,7 +42,7 @@ class fs_unicode_converter(CConverter):
     converter = 'PyUnicode_FSDecoder'
 
 [python start generated code]*/
-/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=9d6786230166006e]*/
 
 /* Initialize things */
 
@@ -232,7 +232,7 @@ On platforms without threads, return False.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_lock_held__doc__,
-"lock_held(module)\n"
+"sig=($module)\n"
 "Return True if the import lock is currently held, else False.\n"
 "\n"
 "On platforms without threads, return False.");
@@ -251,7 +251,7 @@ _imp_lock_held(PyModuleDef *module, PyObject *Py_UNUSED(ignored))
 
 static PyObject *
 _imp_lock_held_impl(PyModuleDef *module)
-/*[clinic end generated code: checksum=17172a9917d389dd1564e2108fec34d23aecb6c2]*/
+/*[clinic end generated code: output=5ce46d12a8e4c469 input=9b088f9b217d9bdf]*/
 {
 #ifdef WITH_THREAD
     return PyBool_FromLong(import_lock_thread != -1);
@@ -270,7 +270,7 @@ modules. On platforms without threads, this function does nothing.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_acquire_lock__doc__,
-"acquire_lock(module)\n"
+"sig=($module)\n"
 "Acquires the interpreter\'s import lock for the current thread.\n"
 "\n"
 "This lock should be used by import hooks to ensure thread-safety when importing\n"
@@ -290,7 +290,7 @@ _imp_acquire_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored))
 
 static PyObject *
 _imp_acquire_lock_impl(PyModuleDef *module)
-/*[clinic end generated code: checksum=20db30e18f6b8758386fe06907edb3f8e43080d7]*/
+/*[clinic end generated code: output=b0dd6a132ad25961 input=4a2d4381866d5fdc]*/
 {
 #ifdef WITH_THREAD
     _PyImport_AcquireLock();
@@ -308,7 +308,7 @@ On platforms without threads, this function does nothing.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_release_lock__doc__,
-"release_lock(module)\n"
+"sig=($module)\n"
 "Release the interpreter\'s import lock.\n"
 "\n"
 "On platforms without threads, this function does nothing.");
@@ -327,7 +327,7 @@ _imp_release_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored))
 
 static PyObject *
 _imp_release_lock_impl(PyModuleDef *module)
-/*[clinic end generated code: checksum=17749fd7752d2c392447a1f83c5d371f54d7ebd3]*/
+/*[clinic end generated code: output=b1e6e9d723cf5f89 input=934fb11516dd778b]*/
 {
 #ifdef WITH_THREAD
     if (_PyImport_ReleaseLock() < 0) {
@@ -927,7 +927,7 @@ Changes code.co_filename to specify the passed-in file path.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp__fix_co_filename__doc__,
-"_fix_co_filename(module, code, path)\n"
+"sig=($module, code, path)\n"
 "Changes code.co_filename to specify the passed-in file path.\n"
 "\n"
 "  code\n"
@@ -960,7 +960,7 @@ exit:
 
 static PyObject *
 _imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, PyObject *path)
-/*[clinic end generated code: checksum=d32cf2b2e0480c714f909921cc9e55d763b39dd5]*/
+/*[clinic end generated code: output=3fe5b5a1b0d497df input=895ba50e78b82f05]*/
 
 {
     update_compiled_module(code, path);
@@ -1823,7 +1823,7 @@ Returns the list of file suffixes used to identify extension modules.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_extension_suffixes__doc__,
-"extension_suffixes(module)\n"
+"sig=($module)\n"
 "Returns the list of file suffixes used to identify extension modules.");
 
 #define _IMP_EXTENSION_SUFFIXES_METHODDEF    \
@@ -1840,7 +1840,7 @@ _imp_extension_suffixes(PyModuleDef *module, PyObject *Py_UNUSED(ignored))
 
 static PyObject *
 _imp_extension_suffixes_impl(PyModuleDef *module)
-/*[clinic end generated code: checksum=625c8f11a5bbd4b85373f0a54f7f3ef19c55beb4]*/
+/*[clinic end generated code: output=c1bcfbddabefa00a input=ecdeeecfcb6f839e]*/
 {
     PyObject *list;
     const char *suffix;
@@ -1878,7 +1878,7 @@ Initializes a built-in module.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_init_builtin__doc__,
-"init_builtin(module, name)\n"
+"sig=($module, name)\n"
 "Initializes a built-in module.");
 
 #define _IMP_INIT_BUILTIN_METHODDEF    \
@@ -1905,7 +1905,7 @@ exit:
 
 static PyObject *
 _imp_init_builtin_impl(PyModuleDef *module, PyObject *name)
-/*[clinic end generated code: checksum=a4e4805a523757cd3ddfeec6e5b16740678fed6a]*/
+/*[clinic end generated code: output=02437efd4668f53e input=f934d2231ec52a2e]*/
 {
     int ret;
     PyObject *m;
@@ -1932,7 +1932,7 @@ Initializes a frozen module.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_init_frozen__doc__,
-"init_frozen(module, name)\n"
+"sig=($module, name)\n"
 "Initializes a frozen module.");
 
 #define _IMP_INIT_FROZEN_METHODDEF    \
@@ -1959,7 +1959,7 @@ exit:
 
 static PyObject *
 _imp_init_frozen_impl(PyModuleDef *module, PyObject *name)
-/*[clinic end generated code: checksum=2a58c119dd3e121cf5a9924f936cfd7b40253c12]*/
+/*[clinic end generated code: output=20cea421af513afe input=13019adfc04f3fb3]*/
 {
     int ret;
     PyObject *m;
@@ -1986,7 +1986,7 @@ Create a code object for a frozen module.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_get_frozen_object__doc__,
-"get_frozen_object(module, name)\n"
+"sig=($module, name)\n"
 "Create a code object for a frozen module.");
 
 #define _IMP_GET_FROZEN_OBJECT_METHODDEF    \
@@ -2013,7 +2013,7 @@ exit:
 
 static PyObject *
 _imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name)
-/*[clinic end generated code: checksum=94c9108b58dda80d187fef21275a009bd0f91e96]*/
+/*[clinic end generated code: output=f00d01ae30ec842f input=ed689bc05358fdbd]*/
 {
     return get_frozen_object(name);
 }
@@ -2028,7 +2028,7 @@ Returns True if the module name is of a frozen package.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_is_frozen_package__doc__,
-"is_frozen_package(module, name)\n"
+"sig=($module, name)\n"
 "Returns True if the module name is of a frozen package.");
 
 #define _IMP_IS_FROZEN_PACKAGE_METHODDEF    \
@@ -2055,7 +2055,7 @@ exit:
 
 static PyObject *
 _imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name)
-/*[clinic end generated code: checksum=17a342b94dbe859cdfc361bc8a6bc1b3cb163364]*/
+/*[clinic end generated code: output=35c78f2448c6fcff input=81b6cdecd080fbb8]*/
 {
     return is_frozen_package(name);
 }
@@ -2070,7 +2070,7 @@ Returns True if the module name corresponds to a built-in module.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_is_builtin__doc__,
-"is_builtin(module, name)\n"
+"sig=($module, name)\n"
 "Returns True if the module name corresponds to a built-in module.");
 
 #define _IMP_IS_BUILTIN_METHODDEF    \
@@ -2097,7 +2097,7 @@ exit:
 
 static PyObject *
 _imp_is_builtin_impl(PyModuleDef *module, PyObject *name)
-/*[clinic end generated code: checksum=51c6139dcfd9bee1f40980ea68b7797f8489d69a]*/
+/*[clinic end generated code: output=641689f833347f66 input=86befdac021dd1c7]*/
 {
     return PyLong_FromLong(is_builtin(name));
 }
@@ -2112,7 +2112,7 @@ Returns True if the module name corresponds to a frozen module.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_is_frozen__doc__,
-"is_frozen(module, name)\n"
+"sig=($module, name)\n"
 "Returns True if the module name corresponds to a frozen module.");
 
 #define _IMP_IS_FROZEN_METHODDEF    \
@@ -2139,7 +2139,7 @@ exit:
 
 static PyObject *
 _imp_is_frozen_impl(PyModuleDef *module, PyObject *name)
-/*[clinic end generated code: checksum=4b079fb45a495835056ea5604735d552d222be5c]*/
+/*[clinic end generated code: output=0f80c7a3f283a686 input=7301dbca1897d66b]*/
 {
     const struct _frozen *p;
 
@@ -2161,7 +2161,7 @@ Loads an extension module.
 [clinic start generated code]*/
 
 PyDoc_STRVAR(_imp_load_dynamic__doc__,
-"load_dynamic(module, name, path, file=None)\n"
+"sig=($module, name, path, file=None)\n"
 "Loads an extension module.");
 
 #define _IMP_LOAD_DYNAMIC_METHODDEF    \
@@ -2190,7 +2190,7 @@ exit:
 
 static PyObject *
 _imp_load_dynamic_impl(PyModuleDef *module, PyObject *name, PyObject *path, PyObject *file)
-/*[clinic end generated code: checksum=63e051fd0d0350c785bf185be41b0892f9920622]*/
+/*[clinic end generated code: output=8f33f48dc6252948 input=af64f06e4bad3526]*/
 {
     PyObject *mod;
     FILE *fp;
index f3fe3c140deb9adfbd6cd474858b37bf87663e9b..a68551f6a6d0c782b89079f488e603b46e8eaa19 100755 (executable)
@@ -19,6 +19,7 @@ import os
 import pprint
 import re
 import shlex
+import string
 import sys
 import tempfile
 import textwrap
@@ -98,7 +99,7 @@ def warn_or_fail(fail=False, *args, filename=None, line_number=None):
     if clinic:
         if filename is None:
             filename = clinic.filename
-        if clinic.block_parser and (line_number is None):
+        if getattr(clinic, 'block_parser', None) and (line_number is None):
             line_number = clinic.block_parser.line_number
     if filename is not None:
         add(' in file "' + filename + '"')
@@ -335,6 +336,22 @@ class CRenderData:
         self.cleanup = []
 
 
+class FormatCounterFormatter(string.Formatter):
+    """
+    This counts how many instances of each formatter
+    "replacement string" appear in the format string.
+
+    e.g. after evaluating "string {a}, {b}, {c}, {a}"
+         the counts dict would now look like
+         {'a': 2, 'b': 1, 'c': 1}
+    """
+    def __init__(self):
+        self.counts = collections.Counter()
+
+    def get_value(self, key, args, kwargs):
+        self.counts[key] += 1
+        return ''
+
 class Language(metaclass=abc.ABCMeta):
 
     start_line = ""
@@ -347,18 +364,59 @@ class Language(metaclass=abc.ABCMeta):
         pass
 
     def validate(self):
-        def assert_only_one(field, token='dsl_name'):
-            line = getattr(self, field)
-            token = '{' + token + '}'
-            if len(line.split(token)) != 2:
-                fail(self.__class__.__name__ + " " + field + " must contain " + token + " exactly once!")
+        def assert_only_one(attr, *additional_fields):
+            """
+            Ensures that the string found at getattr(self, attr)
+            contains exactly one formatter replacement string for
+            each valid field.  The list of valid fields is
+            ['dsl_name'] extended by additional_fields.
+
+            e.g.
+                self.fmt = "{dsl_name} {a} {b}"
+
+                # this passes
+                self.assert_only_one('fmt', 'a', 'b')
+
+                # this fails, the format string has a {b} in it
+                self.assert_only_one('fmt', 'a')
+
+                # this fails, the format string doesn't have a {c} in it
+                self.assert_only_one('fmt', 'a', 'b', 'c')
+
+                # this fails, the format string has two {a}s in it,
+                # it must contain exactly one
+                self.fmt2 = '{dsl_name} {a} {a}'
+                self.assert_only_one('fmt2', 'a')
+
+            """
+            fields = ['dsl_name']
+            fields.extend(additional_fields)
+            line = getattr(self, attr)
+            fcf = FormatCounterFormatter()
+            fcf.format(line)
+            def local_fail(should_be_there_but_isnt):
+                if should_be_there_but_isnt:
+                    fail("{} {} must contain {{{}}} exactly once!".format(
+                        self.__class__.__name__, attr, name))
+                else:
+                    fail("{} {} must not contain {{{}}}!".format(
+                        self.__class__.__name__, attr, name))
+
+            for name, count in fcf.counts.items():
+                if name in fields:
+                    if count > 1:
+                        local_fail(True)
+                else:
+                    local_fail(False)
+            for name in fields:
+                if fcf.counts.get(name) != 1:
+                    local_fail(True)
+
         assert_only_one('start_line')
         assert_only_one('stop_line')
-        assert_only_one('checksum_line')
-        assert_only_one('checksum_line', 'checksum')
 
-        if len(self.body_prefix.split('{dsl_name}')) >= 3:
-            fail(self.__class__.__name__ + " body_prefix may contain " + token + " once at most!")
+        field = "arguments" if "{arguments}" in self.checksum_line else "checksum"
+        assert_only_one('checksum_line', field)
 
 
 
@@ -368,7 +426,7 @@ class PythonLanguage(Language):
     start_line    = "#/*[{dsl_name} input]"
     body_prefix   = "#"
     stop_line     = "#[{dsl_name} start generated code]*/"
-    checksum_line = "#/*[{dsl_name} end generated code: checksum={checksum}]*/"
+    checksum_line = "#/*[{dsl_name} end generated code: {arguments}]*/"
 
 
 def permute_left_option_groups(l):
@@ -438,7 +496,7 @@ class CLanguage(Language):
     start_line    = "/*[{dsl_name} input]"
     body_prefix   = ""
     stop_line     = "[{dsl_name} start generated code]*/"
-    checksum_line = "/*[{dsl_name} end generated code: checksum={checksum}]*/"
+    checksum_line = "/*[{dsl_name} end generated code: {arguments}]*/"
 
     def render(self, clinic, signatures):
         function = None
@@ -1103,10 +1161,12 @@ def OverrideStdioWith(stdout):
         sys.stdout = saved_stdout
 
 
-def create_regex(before, after):
+def create_regex(before, after, word=True):
     """Create an re object for matching marker lines."""
-    pattern = r'^{}(\w+){}$'
-    return re.compile(pattern.format(re.escape(before), re.escape(after)))
+    group_re = "\w+" if word else ".+"
+    pattern = r'^{}({}){}$'
+    pattern = pattern.format(re.escape(before), group_re, re.escape(after))
+    return re.compile(pattern)
 
 
 class Block:
@@ -1164,6 +1224,16 @@ class Block:
         self.indent = indent
         self.preindent = preindent
 
+    def __repr__(self):
+        dsl_name = self.dsl_name or "text"
+        def summarize(s):
+            s = repr(s)
+            if len(s) > 30:
+                return s[:26] + "..." + s[0]
+            return s
+        return "".join((
+            "<Block ", dsl_name, " input=", summarize(self.input), " output=", summarize(self.output), ">"))
+
 
 class BlockParser:
     """
@@ -1264,29 +1334,43 @@ class BlockParser:
         if self.last_dsl_name == dsl_name:
             checksum_re = self.last_checksum_re
         else:
-            before, _, after = self.language.checksum_line.format(dsl_name=dsl_name, checksum='{checksum}').partition('{checksum}')
-            assert _ == '{checksum}'
-            checksum_re = create_regex(before, after)
+            before, _, after = self.language.checksum_line.format(dsl_name=dsl_name, arguments='{arguments}').partition('{arguments}')
+            assert _ == '{arguments}'
+            checksum_re = create_regex(before, after, word=False)
             self.last_dsl_name = dsl_name
             self.last_checksum_re = checksum_re
 
         # scan forward for checksum line
         output_add, output_output = text_accumulator()
-        checksum = None
+        arguments = None
         while self.input:
             line = self._line()
             match = checksum_re.match(line.lstrip())
-            checksum = match.group(1) if match else None
-            if checksum:
+            arguments = match.group(1) if match else None
+            if arguments:
                 break
             output_add(line)
             if self.is_start_line(line):
                 break
 
         output = output_output()
-        if checksum:
+        if arguments:
+            d = {}
+            for field in shlex.split(arguments):
+                name, equals, value = field.partition('=')
+                if not equals:
+                    fail("Mangled Argument Clinic marker line: {!r}".format(line))
+                d[name.strip()] = value.strip()
+
             if self.verify:
-                computed = compute_checksum(output)
+                if 'input' in d:
+                    checksum = d['output']
+                    input_checksum = d['input']
+                else:
+                    checksum = d['checksum']
+                    input_checksum = None
+
+                computed = compute_checksum(output, len(checksum))
                 if checksum != computed:
                     fail("Checksum mismatch!\nExpected: {}\nComputed: {}\n"
                          "Suggested fix: remove all generated code including "
@@ -1336,13 +1420,15 @@ class BlockPrinter:
         write(self.language.stop_line.format(dsl_name=dsl_name))
         write("\n")
 
+        input = ''.join(block.input)
         output = ''.join(block.output)
         if output:
             if not output.endswith('\n'):
                 output += '\n'
             write(output)
 
-        write(self.language.checksum_line.format(dsl_name=dsl_name, checksum=compute_checksum(output)))
+        arguments="output={} input={}".format(compute_checksum(output, 16), compute_checksum(input, 16))
+        write(self.language.checksum_line.format(dsl_name=dsl_name, arguments=arguments))
         write("\n")
 
     def write(self, text):
@@ -1468,7 +1554,7 @@ impl_definition block
 
 """
 
-    def __init__(self, language, printer=None, *, verify=True, filename=None):
+    def __init__(self, language, printer=None, *, force=False, verify=True, filename=None):
         # maps strings to Parser objects.
         # (instantiated from the "parsers" global.)
         self.parsers = {}
@@ -1477,6 +1563,7 @@ impl_definition block
             fail("Custom printers are broken right now")
         self.printer = printer or BlockPrinter(language)
         self.verify = verify
+        self.force = force
         self.filename = filename
         self.modules = collections.OrderedDict()
         self.classes = collections.OrderedDict()
@@ -1594,11 +1681,12 @@ impl_definition block
                                 fail("Can't write to destination {}, "
                                      "can't make directory {}!".format(
                                         destination.filename, dirname))
-                        with open(destination.filename, "rt") as f:
-                            parser_2 = BlockParser(f.read(), language=self.language)
-                            blocks = list(parser_2)
-                            if (len(blocks) != 1) or (blocks[0].input != 'preserve\n'):
-                                fail("Modified destination file " + repr(destination.filename) + ", not overwriting!")
+                        if self.verify:
+                            with open(destination.filename, "rt") as f:
+                                parser_2 = BlockParser(f.read(), language=self.language)
+                                blocks = list(parser_2)
+                                if (len(blocks) != 1) or (blocks[0].input != 'preserve\n'):
+                                    fail("Modified destination file " + repr(destination.filename) + ", not overwriting!")
                     except FileNotFoundError:
                         pass
 
@@ -1658,7 +1746,7 @@ impl_definition block
         return module, cls
 
 
-def parse_file(filename, *, verify=True, output=None, encoding='utf-8'):
+def parse_file(filename, *, force=False, verify=True, output=None, encoding='utf-8'):
     extension = os.path.splitext(filename)[1][1:]
     if not extension:
         fail("Can't extract file type for file " + repr(filename))
@@ -1668,13 +1756,13 @@ def parse_file(filename, *, verify=True, output=None, encoding='utf-8'):
     except KeyError:
         fail("Can't identify file type for file " + repr(filename))
 
-    clinic = Clinic(language, verify=verify, filename=filename)
+    clinic = Clinic(language, force=force, verify=verify, filename=filename)
 
     with open(filename, 'r', encoding=encoding) as f:
         raw = f.read()
 
     cooked = clinic.parse(raw)
-    if cooked == raw:
+    if (cooked == raw) and not force:
         return
 
     directory = os.path.dirname(filename) or '.'
@@ -1687,9 +1775,12 @@ def parse_file(filename, *, verify=True, output=None, encoding='utf-8'):
         os.replace(tmpfilename, output or filename)
 
 
-def compute_checksum(input):
+def compute_checksum(input, length=None):
     input = input or ''
-    return hashlib.sha1(input.encode('utf-8')).hexdigest()
+    s = hashlib.sha1(input.encode('utf-8')).hexdigest()
+    if length:
+        s = s[:length]
+    return s
 
 
 
@@ -1826,7 +1917,8 @@ class Function:
                  module, cls=None, c_basename=None,
                  full_name=None,
                  return_converter, return_annotation=_empty,
-                 docstring=None, kind=CALLABLE, coexist=False):
+                 docstring=None, kind=CALLABLE, coexist=False,
+                 suppress_signature=False):
         self.parameters = parameters or collections.OrderedDict()
         self.return_annotation = return_annotation
         self.name = name
@@ -1840,6 +1932,7 @@ class Function:
         self.kind = kind
         self.coexist = coexist
         self.self_converter = None
+        self.suppress_signature = suppress_signature
 
     @property
     def methoddef_flags(self):
@@ -3520,6 +3613,7 @@ class DSLParser:
             else:
                 fail("Function " + self.function.name + " has an unsupported group configuration. (Unexpected state " + str(self.parameter_state) + ".b)")
             self.group += 1
+            self.function.suppress_signature = True
         elif symbol == ']':
             if not self.group:
                 fail("Function " + self.function.name + " has a ] without a matching [.")
@@ -3615,11 +3709,14 @@ class DSLParser:
         ## docstring first line
         ##
 
-        if new_or_init:
-            assert f.cls
-            add(f.cls.name)
+        if not f.suppress_signature:
+            add('sig=')
         else:
-            add(f.name)
+            if new_or_init:
+                assert f.cls
+                add(f.cls.name)
+            else:
+                add(f.name)
         add('(')
 
         # populate "right_bracket_count" field for every parameter
@@ -3673,7 +3770,17 @@ class DSLParser:
                 add_comma = True
 
             name = p.converter.signature_name or p.name
-            a = [name]
+
+            a = []
+            if isinstance(p.converter, self_converter) and not f.suppress_signature:
+                # annotate first parameter as being a "self".
+                #
+                # if inspect.Signature gets this function, and it's already bound,
+                # the self parameter will be stripped off.
+                #
+                # if it's not bound, it should be marked as positional-only.
+                a.append('$')
+            a.append(name)
             if p.converter.is_optional():
                 a.append('=')
                 value = p.converter.py_default
@@ -3915,7 +4022,7 @@ def main(argv):
                 path = os.path.join(root, filename)
                 if ns.verbose:
                     print(path)
-                parse_file(path, verify=not ns.force)
+                parse_file(path, force=ns.force, verify=not ns.force)
         return
 
     if not ns.filename:
@@ -3931,7 +4038,7 @@ def main(argv):
     for filename in ns.filename:
         if ns.verbose:
             print(filename)
-        parse_file(filename, output=ns.output, verify=not ns.force)
+        parse_file(filename, output=ns.output, force=ns.force, verify=not ns.force)
 
 
 if __name__ == "__main__":