Issue #19273: The marker comments Argument Clinic uses have been changed

to improve readability.
This commit is contained in:
Larry Hastings 2014-01-07 12:41:53 -08:00
parent 9026113fd4
commit 61272b77b0
14 changed files with 220 additions and 216 deletions

View File

@ -35,12 +35,12 @@ If you run that script, specifying a C file as an argument::
Argument Clinic will scan over the file looking for lines that
look exactly like this::
/*[clinic]
/*[clinic input]
When it finds one, it reads everything up to a line that looks
like this::
exactly like this::
[clinic]*/
[clinic start generated code]*/
Everything in between these two lines is input for Argument Clinic.
All of these lines, including the beginning and ending comment
@ -51,11 +51,11 @@ generates output. This output is rewritten into the C file
immediately after the block, followed by a comment containing a checksum.
The Argument Clinic block now looks like this::
/*[clinic]
/*[clinic input]
... clinic input goes here ...
[clinic]*/
[clinic start generated code]*/
... clinic output goes here ...
/*[clinic checksum:...]*/
/*[clinic end generated code: checksum=...]*/
If you run Argument Clinic on the same file a second time, Argument Clinic
will discard the old output and write out the new output with a fresh checksum
@ -68,9 +68,9 @@ the next time Argument Clinic writes out fresh output.)
For the sake of clarity, here's the terminology we'll use with Argument Clinic:
* The first line of the comment (``/*[clinic]``) is the *start line*.
* The last line of the initial comment (``[clinic]*/``) is the *end line*.
* The last line (``/*[clinic checksum:...]*/``) is the *checksum line*.
* The first line of the comment (``/*[clinic input]``) is the *start line*.
* The last line of the initial comment (``[clinic start generated code]*/``) is the *end line*.
* The last line (``/*[clinic end generated code: checksum=...]*/``) is the *checksum line*.
* In between the start line and the end line is the *input*.
* In between the end line and the checksum line is the *output*.
* All the text collectively, from the start line to the checksum line inclusively,
@ -111,8 +111,8 @@ convert a function to work with it. Let's dive in!
3. Add the following boilerplate above the function, creating our block::
/*[clinic]
[clinic]*/
/*[clinic input]
[clinic start generated code]*/
4. Cut the docstring and paste it in between the ``[clinic]`` lines,
removing all the junk that makes it a properly quoted C string.
@ -122,9 +122,9 @@ convert a function to work with it. Let's dive in!
Sample::
/*[clinic]
/*[clinic input]
Write a pickled representation of obj to the open file.
[clinic]*/
[clinic start generated code]*/
5. If your docstring doesn't have a "summary" line, Argument Clinic will
complain. So let's make sure it has one. The "summary" line should
@ -143,11 +143,11 @@ convert a function to work with it. Let's dive in!
Sample::
/*[clinic]
/*[clinic input]
pickle.Pickler.dump
Write a pickled representation of obj to the open file.
[clinic]*/
[clinic start generated code]*/
7. If this is the first time that module or class has been used with Argument
Clinic in this C file,
@ -159,16 +159,16 @@ convert a function to work with it. Let's dive in!
Sample::
/*[clinic]
/*[clinic input]
module pickle
class pickle.Pickler
[clinic]*/
[clinic start generated code]*/
/*[clinic]
/*[clinic input]
pickle.Pickler.dump
Write a pickled representation of obj to the open file.
[clinic]*/
[clinic start generated code]*/
8. Declare each of the parameters to the function. Each parameter
@ -207,18 +207,18 @@ convert a function to work with it. Let's dive in!
Sample::
/*[clinic]
/*[clinic input]
module pickle
class pickle.Pickler
[clinic]*/
[clinic start generated code]*/
/*[clinic]
/*[clinic input]
pickle.Pickler.dump
obj: 'O'
Write a pickled representation of obj to the open file.
[clinic]*/
[clinic start generated code]*/
9. If your function has ``|`` in the format string, meaning some
parameters have default values, you can ignore it. Argument
@ -247,19 +247,19 @@ convert a function to work with it. Let's dive in!
Sample::
/*[clinic]
/*[clinic input]
module pickle
class pickle.Pickler
[clinic]*/
[clinic start generated code]*/
/*[clinic]
/*[clinic input]
pickle.Pickler.dump
obj: 'O'
/
Write a pickled representation of obj to the open file.
[clinic]*/
[clinic start generated code]*/
11. It's helpful to write a per-parameter docstring for each parameter.
But per-parameter docstrings are optional; you can skip this step
@ -274,12 +274,12 @@ convert a function to work with it. Let's dive in!
Sample::
/*[clinic]
/*[clinic input]
module pickle
class pickle.Pickler
[clinic]*/
[clinic start generated code]*/
/*[clinic]
/*[clinic input]
pickle.Pickler.dump
obj: 'O'
@ -287,19 +287,19 @@ convert a function to work with it. Let's dive in!
/
Write a pickled representation of obj to the open file.
[clinic]*/
[clinic start generated code]*/
12. Save and close the file, then run ``Tools/clinic/clinic.py`` on it.
With luck everything worked and your block now has output! Reopen
the file in your text editor to see::
/*[clinic]
/*[clinic input]
module pickle
class pickle.Pickler
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/*[clinic]
/*[clinic input]
pickle.Pickler.dump
obj: 'O'
@ -307,7 +307,7 @@ convert a function to work with it. Let's dive in!
/
Write a pickled representation of obj to the open file.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(pickle_Pickler_dump__doc__,
"Write a pickled representation of obj to the open file.\n"
@ -315,7 +315,7 @@ convert a function to work with it. Let's dive in!
...
static PyObject *
pickle_Pickler_dump_impl(PyObject *self, PyObject *obj)
/*[clinic checksum: 3bd30745bf206a48f8b576a1da3d90f55a0a4187]*/
/*[clinic end generated code: checksum=3bd30745bf206a48f8b576a1da3d90f55a0a4187]*/
Obviously, if Argument Clinic didn't produce any output, it's because
it found an error in your input. Keep fixing your errors and retrying
@ -373,7 +373,7 @@ convert a function to work with it. Let's dive in!
static return_type
your_function_impl(...)
/*[clinic checksum: ...]*/
/*[clinic end generated code: checksum=...]*/
{
...
@ -383,13 +383,13 @@ convert a function to work with it. Let's dive in!
Sample::
/*[clinic]
/*[clinic input]
module pickle
class pickle.Pickler
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/*[clinic]
/*[clinic input]
pickle.Pickler.dump
obj: 'O'
@ -397,7 +397,7 @@ convert a function to work with it. Let's dive in!
/
Write a pickled representation of obj to the open file.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(pickle_Pickler_dump__doc__,
"Write a pickled representation of obj to the open file.\n"
@ -405,7 +405,7 @@ convert a function to work with it. Let's dive in!
...
static PyObject *
pickle_Pickler_dump_impl(PyObject *self, PyObject *obj)
/*[clinic checksum: 3bd30745bf206a48f8b576a1da3d90f55a0a4187]*/
/*[clinic end generated code: checksum=3bd30745bf206a48f8b576a1da3d90f55a0a4187]*/
{
/* Check whether the Pickler was initialized correctly (issue3664).
Developers often forget to call __init__() in their subclasses, which
@ -470,7 +470,7 @@ then add ``"_impl"`` to the end and use that for the name of the impl function.
For example, if we wanted to rename the C function names generated for
``pickle.Pickler.dump``, it'd look like this::
/*[clinic]
/*[clinic input]
pickle.Pickler.dump as pickler_dumper
...
@ -515,7 +515,7 @@ after these parameters. As an example, here's how ``curses.window.addch``
uses optional groups to make the first two parameters and the last
parameter optional::
/*[clinic]
/*[clinic input]
curses.window.addch
@ -666,7 +666,7 @@ on the right is the text you'd replace it with.
As an example, here's our sample ``pickle.Pickler.dump`` using the proper
converter::
/*[clinic]
/*[clinic input]
pickle.Pickler.dump
obj: object
@ -674,7 +674,7 @@ converter::
/
Write a pickled representation of obj to the open file.
[clinic]*/
[clinic start generated code]*/
Argument Clinic will show you all the converters it has
available. For each converter it'll show you all the parameters
@ -769,9 +769,9 @@ runtime state. This is simple: you simply define a Python block.
A Python block uses different delimiter lines than an Argument
Clinic function block. It looks like this::
/*[python]
/*[python input]
# python code goes here
[python]*/
[python start generated code]*/
All the code inside the Python block is executed at the
time it's parsed. All text written to stdout inside the block
@ -780,9 +780,9 @@ is redirected into the "output" after the block.
As an example, here's a Python block that adds a static integer
variable to the C code::
/*[python]
/*[python input]
print('static int __ignored_unused_variable__ = 0;')
[python]*/
[python start generated code]*/
static int __ignored_unused_variable__ = 0;
/*[python checksum:...]*/
@ -806,7 +806,7 @@ If you only have one or two functions with the same type for ``self``,
you can directly use Argument Clinic's existing ``self`` converter,
passing in the type you want to use as the ``type`` parameter::
/*[clinic]
/*[clinic input]
_pickle.Pickler.dump
@ -815,18 +815,18 @@ passing in the type you want to use as the ``type`` parameter::
/
Write a pickled representation of the given object to the open file.
[clinic]*/
[clinic start generated code]*/
On the other hand, if you have a lot of functions that will use the same
type for ``self``, it's best to create your own converter, subclassing
``self_converter`` but overwriting the ``type`` member::
/*[clinic]
/*[clinic input]
class PicklerObject_converter(self_converter):
type = "PicklerObject *"
[clinic]*/
[clinic start generated code]*/
/*[clinic]
/*[clinic input]
_pickle.Pickler.dump
@ -835,7 +835,7 @@ type for ``self``, it's best to create your own converter, subclassing
/
Write a pickled representation of the given object to the open file.
[clinic]*/
[clinic start generated code]*/
@ -917,14 +917,14 @@ to specify in your subclass. Here's the current list:
Here's the simplest example of a custom converter, from ``Modules/zlibmodule.c``::
/*[python]
/*[python input]
class uint_converter(CConverter):
type = 'unsigned int'
converter = 'uint_converter'
[python]*/
/*[python checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[python start generated code]*/
/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
This block adds a converter to Argument Clinic named ``uint``. Parameters
declared as ``uint`` will be declared as type ``unsigned int``, and will
@ -963,8 +963,8 @@ to run Python blocks lets you use Python as a Python preprocessor!
Since Python comments are different from C comments, Argument Clinic
blocks embedded in Python files look slightly different. They look like this::
#/*[python]
#/*[python input]
#print("def foo(): pass")
#[python]*/
#[python start generated code]*/
def foo(): pass
#/*[python checksum:...]*/

View File

@ -21,6 +21,9 @@ Library
Tools/Demos
-----------
- Issue #19273: The marker comments Argument Clinic uses have been changed
to improve readability.
- Issue #20157: When Argument Clinic renames a parameter because its name
collides with a C keyword, it no longer exposes that rename to PyArg_Parse.

View File

@ -134,11 +134,11 @@ typedef chtype attr_t; /* No attr_t type is available */
#define STRICT_SYSV_CURSES
#endif
/*[clinic]
/*[clinic input]
module curses
class curses.window
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/* Definition of exception curses.error */
@ -555,7 +555,7 @@ PyCursesWindow_Dealloc(PyCursesWindowObject *wo)
/* Addch, Addstr, Addnstr */
/*[clinic]
/*[clinic input]
curses.window.addch
@ -581,7 +581,7 @@ Paint character ch at (y, x) with attributes attr,
overwriting any character previously painted at that location.
By default, the character position and attributes are the
current settings for the window object.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(curses_window_addch__doc__,
"addch([x, y,] ch, [attr])\n"
@ -650,7 +650,7 @@ curses_window_addch(PyObject *self, PyObject *args)
static PyObject *
curses_window_addch_impl(PyObject *self, int group_left_1, int x, int y, PyObject *ch, int group_right_1, long attr)
/*[clinic checksum: 44ed958b891cde91205e584c766e048f3999714f]*/
/*[clinic end generated code: checksum=44ed958b891cde91205e584c766e048f3999714f]*/
{
PyCursesWindowObject *cwself = (PyCursesWindowObject *)self;
int coordinates_group = group_left_1;

View File

@ -16,11 +16,11 @@
#include "datetime.h"
#undef Py_BUILD_CORE
/*[clinic]
/*[clinic input]
module datetime
class datetime.datetime
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/* 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
@ -4145,7 +4145,7 @@ datetime_best_possible(PyObject *cls, TM_FUNC f, PyObject *tzinfo)
tzinfo);
}
/*[clinic]
/*[clinic input]
@classmethod
datetime.datetime.now
@ -4156,7 +4156,7 @@ datetime.datetime.now
Returns new datetime object representing current time local to tz.
If no tz is specified, uses local timezone.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(datetime_datetime_now__doc__,
"now(tz=None)\n"
@ -4192,7 +4192,7 @@ exit:
static PyObject *
datetime_datetime_now_impl(PyTypeObject *cls, PyObject *tz)
/*[clinic checksum: ca3d26a423b3f633b260c7622e303f0915a96f7c]*/
/*[clinic end generated code: checksum=ca3d26a423b3f633b260c7622e303f0915a96f7c]*/
{
PyObject *self;

View File

@ -28,11 +28,11 @@ static char *which_dbm = "Berkeley DB";
#error "No ndbm.h available!"
#endif
/*[clinic]
/*[clinic input]
module dbm
class dbm.dbm
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
typedef struct {
PyObject_HEAD
@ -49,13 +49,13 @@ static PyTypeObject Dbmtype;
static PyObject *DbmError;
/*[python]
/*[python input]
class dbmobject_converter(self_converter):
type = "dbmobject *"
def converter_init(self):
self.name = 'dp'
[python]*/
/*[python checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[python start generated code]*/
/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
static PyObject *
newdbmobject(const char *file, int flags, int mode)
@ -263,7 +263,7 @@ static PySequenceMethods dbm_as_sequence = {
0, /* sq_inplace_repeat */
};
/*[clinic]
/*[clinic input]
dbm.dbm.get
@ -276,7 +276,7 @@ dbm.dbm.get
/
Return the value for key if present, otherwise default.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(dbm_dbm_get__doc__,
"get(key, [default])\n"
@ -318,7 +318,7 @@ dbm_dbm_get(PyObject *self, PyObject *args)
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 checksum: 28cf8928811bde51e535d67ae98ea039d79df717]*/
/*[clinic end generated code: checksum=28cf8928811bde51e535d67ae98ea039d79df717]*/
{
datum dbm_key, val;
@ -440,7 +440,7 @@ static PyTypeObject Dbmtype = {
/* ----------------------------------------------------------------- */
/*[clinic]
/*[clinic input]
dbm.open as dbmopen
@ -458,7 +458,7 @@ dbm.open as dbmopen
Return a database object.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(dbmopen__doc__,
"open(filename, flags=\'r\', mode=0o666)\n"
@ -498,7 +498,7 @@ exit:
static PyObject *
dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode)
/*[clinic checksum: fb265f75641553ccd963f84c143b35c11f9121fc]*/
/*[clinic end generated code: checksum=fb265f75641553ccd963f84c143b35c11f9121fc]*/
{
int iflags;

View File

@ -1,12 +1,12 @@
#include "Python.h"
#include "opcode.h"
/*[clinic]
/*[clinic input]
module _opcode
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/*[clinic]
/*[clinic input]
_opcode.stack_effect -> int
@ -18,7 +18,7 @@ _opcode.stack_effect -> int
/
Compute the stack effect of the opcode.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_opcode_stack_effect__doc__,
"stack_effect(opcode, [oparg])\n"
@ -64,7 +64,7 @@ exit:
static int
_opcode_stack_effect_impl(PyModuleDef *module, int opcode, int group_right_1, int oparg)
/*[clinic checksum: e880e62dc7b0de73403026eaf4f8074aa106358b]*/
/*[clinic end generated code: checksum=e880e62dc7b0de73403026eaf4f8074aa106358b]*/
{
int effect;
if (HAS_ARG(opcode)) {

View File

@ -4,16 +4,16 @@
PyDoc_STRVAR(pickle_module_doc,
"Optimized C implementation for the Python pickle module.");
/*[clinic]
/*[clinic input]
module _pickle
class _pickle.Pickler
class _pickle.PicklerMemoProxy
class _pickle.Unpickler
class _pickle.UnpicklerMemoProxy
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/*[python]
/*[python input]
class PicklerObject_converter(self_converter):
type = "PicklerObject *"
@ -25,8 +25,8 @@ class UnpicklerObject_converter(self_converter):
class UnpicklerMemoProxyObject_converter(self_converter):
type = "UnpicklerMemoProxyObject *"
[python]*/
/*[python checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[python start generated code]*/
/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/* Bump this when new opcodes are added to the pickle protocol. */
enum {
@ -3874,7 +3874,7 @@ dump(PicklerObject *self, PyObject *obj)
return 0;
}
/*[clinic]
/*[clinic input]
_pickle.Pickler.clear_memo
@ -3886,7 +3886,7 @@ The memo is the data structure that remembers which objects the
pickler has already seen, so that shared or recursive objects are
pickled by reference and not by value. This method is useful when
re-using picklers.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_Pickler_clear_memo__doc__,
"clear_memo()\n"
@ -3915,7 +3915,7 @@ _pickle_Pickler_clear_memo(PyObject *self, PyObject *Py_UNUSED(ignored))
static PyObject *
_pickle_Pickler_clear_memo_impl(PicklerObject *self)
/*[clinic checksum: 0574593b102fffb8e781d7bb9b536ceffc525ac1]*/
/*[clinic end generated code: checksum=0574593b102fffb8e781d7bb9b536ceffc525ac1]*/
{
if (self->memo)
PyMemoTable_Clear(self->memo);
@ -3923,7 +3923,7 @@ _pickle_Pickler_clear_memo_impl(PicklerObject *self)
Py_RETURN_NONE;
}
/*[clinic]
/*[clinic input]
_pickle.Pickler.dump
@ -3932,7 +3932,7 @@ _pickle.Pickler.dump
/
Write a pickled representation of the given object to the open file.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_Pickler_dump__doc__,
"dump(obj)\n"
@ -3943,7 +3943,7 @@ PyDoc_STRVAR(_pickle_Pickler_dump__doc__,
static PyObject *
_pickle_Pickler_dump(PicklerObject *self, PyObject *obj)
/*[clinic checksum: b72a69ec98737fabf66dae7c5a3210178bdbd3e6]*/
/*[clinic end generated code: checksum=b72a69ec98737fabf66dae7c5a3210178bdbd3e6]*/
{
/* Check whether the Pickler was initialized correctly (issue3664).
Developers often forget to call __init__() in their subclasses, which
@ -4018,7 +4018,7 @@ Pickler_clear(PicklerObject *self)
}
/*[clinic]
/*[clinic input]
_pickle.Pickler.__init__
@ -4045,7 +4045,7 @@ this interface.
If *fix_imports* is True and protocol is less than 3, pickle will try
to map the new Python 3 names to the old module names used in Python
2, so that the pickle data stream is readable with Python 2.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_Pickler___init____doc__,
"__init__(file, protocol=None, fix_imports=True)\n"
@ -4095,7 +4095,7 @@ exit:
static PyObject *
_pickle_Pickler___init___impl(PicklerObject *self, PyObject *file, PyObject *protocol, int fix_imports)
/*[clinic checksum: 2b5ce6452544600478cf9f4b701ab9d9b5efbab9]*/
/*[clinic end generated code: checksum=2b5ce6452544600478cf9f4b701ab9d9b5efbab9]*/
{
_Py_IDENTIFIER(persistent_id);
_Py_IDENTIFIER(dispatch_table);
@ -4173,13 +4173,13 @@ typedef struct {
PicklerObject *pickler; /* Pickler whose memo table we're proxying. */
} PicklerMemoProxyObject;
/*[clinic]
/*[clinic input]
_pickle.PicklerMemoProxy.clear
self: PicklerMemoProxyObject
Remove all items from memo.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_PicklerMemoProxy_clear__doc__,
"clear()\n"
@ -4203,20 +4203,20 @@ _pickle_PicklerMemoProxy_clear(PyObject *self, PyObject *Py_UNUSED(ignored))
static PyObject *
_pickle_PicklerMemoProxy_clear_impl(PicklerMemoProxyObject *self)
/*[clinic checksum: c6ca252530ccb3ea2f4b33507b51b183f23b24c7]*/
/*[clinic end generated code: checksum=c6ca252530ccb3ea2f4b33507b51b183f23b24c7]*/
{
if (self->pickler->memo)
PyMemoTable_Clear(self->pickler->memo);
Py_RETURN_NONE;
}
/*[clinic]
/*[clinic input]
_pickle.PicklerMemoProxy.copy
self: PicklerMemoProxyObject
Copy the memo to a new object.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_PicklerMemoProxy_copy__doc__,
"copy()\n"
@ -4240,7 +4240,7 @@ _pickle_PicklerMemoProxy_copy(PyObject *self, PyObject *Py_UNUSED(ignored))
static PyObject *
_pickle_PicklerMemoProxy_copy_impl(PicklerMemoProxyObject *self)
/*[clinic checksum: 808c4d5a37359ed5fb2efe81dbe5ff480719f470]*/
/*[clinic end generated code: checksum=808c4d5a37359ed5fb2efe81dbe5ff480719f470]*/
{
Py_ssize_t i;
PyMemoTable *memo;
@ -4277,13 +4277,13 @@ _pickle_PicklerMemoProxy_copy_impl(PicklerMemoProxyObject *self)
return NULL;
}
/*[clinic]
/*[clinic input]
_pickle.PicklerMemoProxy.__reduce__
self: PicklerMemoProxyObject
Implement pickle support.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_PicklerMemoProxy___reduce____doc__,
"__reduce__()\n"
@ -4307,7 +4307,7 @@ _pickle_PicklerMemoProxy___reduce__(PyObject *self, PyObject *Py_UNUSED(ignored)
static PyObject *
_pickle_PicklerMemoProxy___reduce___impl(PicklerMemoProxyObject *self)
/*[clinic checksum: 2293152bdf53951a012d430767b608f5fb4213b5]*/
/*[clinic end generated code: checksum=2293152bdf53951a012d430767b608f5fb4213b5]*/
{
PyObject *reduce_value, *dict_args;
PyObject *contents = _pickle_PicklerMemoProxy_copy_impl(self);
@ -6317,7 +6317,7 @@ load(UnpicklerObject *self)
return value;
}
/*[clinic]
/*[clinic input]
_pickle.Unpickler.load
@ -6326,7 +6326,7 @@ Load a pickle.
Read a pickled object representation from the open file object given
in the constructor, and return the reconstituted object hierarchy
specified therein.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_Unpickler_load__doc__,
"load()\n"
@ -6354,7 +6354,7 @@ _pickle_Unpickler_load(PyObject *self, PyObject *Py_UNUSED(ignored))
static PyObject *
_pickle_Unpickler_load_impl(PyObject *self)
/*[clinic checksum: 55f35fcaf034817e75c355ec50b7878577355899]*/
/*[clinic end generated code: checksum=55f35fcaf034817e75c355ec50b7878577355899]*/
{
UnpicklerObject *unpickler = (UnpicklerObject*)self;
@ -6377,7 +6377,7 @@ _pickle_Unpickler_load_impl(PyObject *self)
function is used for loading any global (i.e., functions), not just
classes. The name is kept only for backward compatibility. */
/*[clinic]
/*[clinic input]
_pickle.Unpickler.find_class
@ -6394,7 +6394,7 @@ functions).
This method is called whenever a class or a function object is
needed. Both arguments passed are str objects.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_Unpickler_find_class__doc__,
"find_class(module_name, global_name)\n"
@ -6432,7 +6432,7 @@ exit:
static PyObject *
_pickle_Unpickler_find_class_impl(UnpicklerObject *self, PyObject *module_name, PyObject *global_name)
/*[clinic checksum: 1f353d13a32c9d94feb1466b3c2d0529a7e5650e]*/
/*[clinic end generated code: checksum=1f353d13a32c9d94feb1466b3c2d0529a7e5650e]*/
{
PyObject *global;
PyObject *modules_dict;
@ -6581,7 +6581,7 @@ Unpickler_clear(UnpicklerObject *self)
return 0;
}
/*[clinic]
/*[clinic input]
_pickle.Unpickler.__init__
@ -6612,7 +6612,7 @@ map the old Python 2 names to the new names used in Python 3. The
instances pickled by Python 2; these default to 'ASCII' and 'strict',
respectively. The *encoding* can be 'bytes' to read these 8-bit
string instances as bytes objects.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_Unpickler___init____doc__,
"__init__(file, *, fix_imports=True, encoding=\'ASCII\', errors=\'strict\')\n"
@ -6665,7 +6665,7 @@ exit:
static PyObject *
_pickle_Unpickler___init___impl(UnpicklerObject *self, PyObject *file, int fix_imports, const char *encoding, const char *errors)
/*[clinic checksum: 9ce6783224e220573d42a94fe1bb7199d6f1c5a6]*/
/*[clinic end generated code: checksum=9ce6783224e220573d42a94fe1bb7199d6f1c5a6]*/
{
_Py_IDENTIFIER(persistent_load);
@ -6737,13 +6737,13 @@ typedef struct {
UnpicklerObject *unpickler;
} UnpicklerMemoProxyObject;
/*[clinic]
/*[clinic input]
_pickle.UnpicklerMemoProxy.clear
self: UnpicklerMemoProxyObject
Remove all items from memo.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_UnpicklerMemoProxy_clear__doc__,
"clear()\n"
@ -6767,7 +6767,7 @@ _pickle_UnpicklerMemoProxy_clear(PyObject *self, PyObject *Py_UNUSED(ignored))
static PyObject *
_pickle_UnpicklerMemoProxy_clear_impl(UnpicklerMemoProxyObject *self)
/*[clinic checksum: e0f99c26d48444a3f58f598bec3190c66595fce7]*/
/*[clinic end generated code: checksum=e0f99c26d48444a3f58f598bec3190c66595fce7]*/
{
_Unpickler_MemoCleanup(self->unpickler);
self->unpickler->memo = _Unpickler_NewMemo(self->unpickler->memo_size);
@ -6776,13 +6776,13 @@ _pickle_UnpicklerMemoProxy_clear_impl(UnpicklerMemoProxyObject *self)
Py_RETURN_NONE;
}
/*[clinic]
/*[clinic input]
_pickle.UnpicklerMemoProxy.copy
self: UnpicklerMemoProxyObject
Copy the memo to a new object.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_UnpicklerMemoProxy_copy__doc__,
"copy()\n"
@ -6806,7 +6806,7 @@ _pickle_UnpicklerMemoProxy_copy(PyObject *self, PyObject *Py_UNUSED(ignored))
static PyObject *
_pickle_UnpicklerMemoProxy_copy_impl(UnpicklerMemoProxyObject *self)
/*[clinic checksum: 8c0ab91c0b694ea71a1774650898a760d1ab4765]*/
/*[clinic end generated code: checksum=8c0ab91c0b694ea71a1774650898a760d1ab4765]*/
{
Py_ssize_t i;
PyObject *new_memo = PyDict_New();
@ -6836,13 +6836,13 @@ error:
return NULL;
}
/*[clinic]
/*[clinic input]
_pickle.UnpicklerMemoProxy.__reduce__
self: UnpicklerMemoProxyObject
Implement pickling support.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_UnpicklerMemoProxy___reduce____doc__,
"__reduce__()\n"
@ -6866,7 +6866,7 @@ _pickle_UnpicklerMemoProxy___reduce__(PyObject *self, PyObject *Py_UNUSED(ignore
static PyObject *
_pickle_UnpicklerMemoProxy___reduce___impl(UnpicklerMemoProxyObject *self)
/*[clinic checksum: 4ee76a65511291f0de2e9e63db395d2e5d6d8df6]*/
/*[clinic end generated code: checksum=4ee76a65511291f0de2e9e63db395d2e5d6d8df6]*/
{
PyObject *reduce_value;
PyObject *constructor_args;
@ -7141,7 +7141,7 @@ static PyTypeObject Unpickler_Type = {
0, /*tp_is_gc*/
};
/*[clinic]
/*[clinic input]
_pickle.dump
@ -7172,7 +7172,7 @@ this interface.
If *fix_imports* is True and protocol is less than 3, pickle will try
to map the new Python 3 names to the old module names used in Python
2, so that the pickle data stream is readable with Python 2.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_dump__doc__,
"dump(obj, file, protocol=None, *, fix_imports=True)\n"
@ -7226,7 +7226,7 @@ exit:
static PyObject *
_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports)
/*[clinic checksum: eb5c23e64da34477178230b704d2cc9c6b6650ea]*/
/*[clinic end generated code: checksum=eb5c23e64da34477178230b704d2cc9c6b6650ea]*/
{
PicklerObject *pickler = _Pickler_New();
@ -7253,7 +7253,7 @@ _pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, PyObject *
return NULL;
}
/*[clinic]
/*[clinic input]
_pickle.dumps
@ -7275,7 +7275,7 @@ version of Python needed to read the pickle produced.
If *fix_imports* is True and *protocol* is less than 3, pickle will
try to map the new Python 3 names to the old module names used in
Python 2, so that the pickle data stream is readable with Python 2.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_dumps__doc__,
"dumps(obj, protocol=None, *, fix_imports=True)\n"
@ -7320,7 +7320,7 @@ exit:
static PyObject *
_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, int fix_imports)
/*[clinic checksum: e9b915d61202a9692cb6c6718db74fe54fc9c4d1]*/
/*[clinic end generated code: checksum=e9b915d61202a9692cb6c6718db74fe54fc9c4d1]*/
{
PyObject *result;
PicklerObject *pickler = _Pickler_New();
@ -7343,7 +7343,7 @@ _pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, int f
return NULL;
}
/*[clinic]
/*[clinic input]
_pickle.load
@ -7376,7 +7376,7 @@ map the old Python 2 names to the new names used in Python 3. The
instances pickled by Python 2; these default to 'ASCII' and 'strict',
respectively. The *encoding* can be 'bytes' to read these 8-bit
string instances as bytes objects.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_load__doc__,
"load(file, *, fix_imports=True, encoding=\'ASCII\', errors=\'strict\')\n"
@ -7432,7 +7432,7 @@ exit:
static PyObject *
_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, const char *encoding, const char *errors)
/*[clinic checksum: b41f06970e57acf2fd602e4b7f88e3f3e1e53087]*/
/*[clinic end generated code: checksum=b41f06970e57acf2fd602e4b7f88e3f3e1e53087]*/
{
PyObject *result;
UnpicklerObject *unpickler = _Unpickler_New();
@ -7457,7 +7457,7 @@ _pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, const ch
return NULL;
}
/*[clinic]
/*[clinic input]
_pickle.loads
@ -7481,7 +7481,7 @@ map the old Python 2 names to the new names used in Python 3. The
instances pickled by Python 2; these default to 'ASCII' and 'strict',
respectively. The *encoding* can be 'bytes' to read these 8-bit
string instances as bytes objects.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_pickle_loads__doc__,
"loads(data, *, fix_imports=True, encoding=\'ASCII\', errors=\'strict\')\n"
@ -7528,7 +7528,7 @@ exit:
static PyObject *
_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, const char *encoding, const char *errors)
/*[clinic checksum: 0663de43aca6c21508a777e29d98c9c3a6e7f72d]*/
/*[clinic end generated code: checksum=0663de43aca6c21508a777e29d98c9c3a6e7f72d]*/
{
PyObject *result;
UnpicklerObject *unpickler = _Unpickler_New();

View File

@ -4,12 +4,12 @@
#define GET_WEAKREFS_LISTPTR(o) \
((PyWeakReference **) PyObject_GET_WEAKREFS_LISTPTR(o))
/*[clinic]
/*[clinic input]
module _weakref
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/*[clinic]
/*[clinic input]
_weakref.getweakrefcount -> Py_ssize_t
@ -17,7 +17,7 @@ _weakref.getweakrefcount -> Py_ssize_t
/
Return the number of weak references to 'object'.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(_weakref_getweakrefcount__doc__,
"getweakrefcount(object)\n"
@ -45,7 +45,7 @@ exit:
static Py_ssize_t
_weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object)
/*[clinic checksum: 436e8fbe0297434375f039d8c2d9fc3a9bbe773c]*/
/*[clinic end generated code: checksum=436e8fbe0297434375f039d8c2d9fc3a9bbe773c]*/
{
PyWeakReference **list;

View File

@ -181,10 +181,10 @@ corresponding Unix manual entries for more information on calls.");
#endif /* ! __WATCOMC__ || __QNX__ */
/*[clinic]
/*[clinic input]
module os
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
#ifndef _MSC_VER
@ -2355,7 +2355,7 @@ posix_do_stat(char *function_name, path_t *path,
#endif
/*[python]
/*[python input]
class path_t_converter(CConverter):
@ -2396,10 +2396,10 @@ class dir_fd_converter(CConverter):
self.c_default = 'DEFAULT_DIR_FD'
[python]*/
/*[python checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[python start generated code]*/
/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/*[clinic]
/*[clinic input]
os.stat -> object(doc_default='stat_result')
@ -2427,7 +2427,7 @@ dir_fd and follow_symlinks may not be implemented
It's an error to use dir_fd or follow_symlinks when specifying path as
an open file descriptor.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(os_stat__doc__,
"stat(path, *, dir_fd=None, follow_symlinks=True)\n"
@ -2481,7 +2481,7 @@ exit:
static PyObject *
os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, int follow_symlinks)
/*[clinic checksum: 85a71ad602e89f8e280118da976f70cd2f9abdf1]*/
/*[clinic end generated code: checksum=85a71ad602e89f8e280118da976f70cd2f9abdf1]*/
{
return posix_do_stat("stat", path, dir_fd, follow_symlinks);
}
@ -2522,7 +2522,7 @@ posix_lstat(PyObject *self, PyObject *args, PyObject *kwargs)
#else
#define OS_ACCESS_DIR_FD_CONVERTER dir_fd_unavailable
#endif
/*[clinic]
/*[clinic input]
os.access -> object(doc_default='True if granted, False otherwise')
path: path_t(allow_fd=True)
@ -2559,7 +2559,7 @@ Note that most operations will use the effective uid/gid, therefore this
routine can be used in a suid/sgid environment to test if the invoking user
has the specified access to the path.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(os_access__doc__,
"access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)\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 checksum: 636e835c36562a2fc11acab75314634127fdf769]*/
/*[clinic end generated code: checksum=636e835c36562a2fc11acab75314634127fdf769]*/
{
PyObject *return_value = NULL;
@ -2706,7 +2706,7 @@ exit:
#ifdef HAVE_TTYNAME
/*[clinic]
/*[clinic input]
os.ttyname -> DecodeFSDefault
fd: int
@ -2715,7 +2715,7 @@ os.ttyname -> DecodeFSDefault
/
Return the name of the terminal device connected to 'fd'.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(os_ttyname__doc__,
"ttyname(fd)\n"
@ -2752,7 +2752,7 @@ exit:
static char *
os_ttyname_impl(PyModuleDef *module, int fd)
/*[clinic checksum: 0f368134dc0a7f21f25185e2e6bacf7675fb473a]*/
/*[clinic end generated code: checksum=0f368134dc0a7f21f25185e2e6bacf7675fb473a]*/
{
char *ret;

View File

@ -17,11 +17,11 @@
#include "ucnhash.h"
#include "structmember.h"
/*[clinic]
/*[clinic input]
module unicodedata
class unicodedata.UCD
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/* character properties */
@ -113,7 +113,7 @@ static Py_UCS4 getuchar(PyUnicodeObject *obj)
/* --- Module API --------------------------------------------------------- */
/*[clinic]
/*[clinic input]
unicodedata.UCD.decimal
@ -126,7 +126,7 @@ Converts a Unicode character into its equivalent decimal value.
Returns the decimal value assigned to the Unicode character unichr
as integer. If no such value is defined, default is returned, or, if
not given, ValueError is raised.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(unicodedata_UCD_decimal__doc__,
"decimal(unichr, default=None)\n"
@ -161,7 +161,7 @@ exit:
static PyObject *
unicodedata_UCD_decimal_impl(PyObject *self, PyUnicodeObject *unichr, PyObject *default_value)
/*[clinic checksum: 73edde0e9cd5913ea174c4fa81504369761b7426]*/
/*[clinic end generated code: checksum=73edde0e9cd5913ea174c4fa81504369761b7426]*/
{
PyUnicodeObject *v = (PyUnicodeObject *)unichr;
int have_old = 0;

View File

@ -81,12 +81,12 @@ zlib_error(z_stream zst, int err, char *msg)
PyErr_Format(ZlibError, "Error %d %s: %.200s", err, msg, zmsg);
}
/*[clinic]
/*[clinic input]
module zlib
class zlib.Compress
class zlib.Decompress
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
PyDoc_STRVAR(compressobj__doc__,
"compressobj(level=-1, method=DEFLATED, wbits=15, memlevel=8,\n"
@ -164,7 +164,7 @@ PyZlib_Free(voidpf ctx, void *ptr)
PyMem_RawFree(ptr);
}
/*[clinic]
/*[clinic input]
zlib.compress
bytes: Py_buffer
@ -177,7 +177,7 @@ zlib.compress
Returns compressed string.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(zlib_compress__doc__,
"compress(bytes, [level])\n"
@ -227,7 +227,7 @@ zlib_compress(PyModuleDef *module, PyObject *args)
static PyObject *
zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int group_right_1, int level)
/*[clinic checksum: 9f055a396620bc1a8a13d74c3496249528b32b0d]*/
/*[clinic end generated code: checksum=9f055a396620bc1a8a13d74c3496249528b32b0d]*/
{
PyObject *ReturnVal = NULL;
Byte *input, *output = NULL;
@ -306,14 +306,14 @@ zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int group_right_1, int
return ReturnVal;
}
/*[python]
/*[python input]
class uint_converter(CConverter):
type = 'unsigned int'
converter = 'uint_converter'
[python]*/
/*[python checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[python start generated code]*/
/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
static int
uint_converter(PyObject *obj, void *ptr)
@ -743,7 +743,7 @@ save_unconsumed_input(compobject *self, int err)
return 0;
}
/*[clinic]
/*[clinic input]
zlib.Decompress.decompress
@ -762,7 +762,7 @@ Return a string containing the decompressed version of the data.
After calling this function, some of the input data may still be stored in
internal buffers for later processing.
Call the flush() method to clear these buffers.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(zlib_Decompress_decompress__doc__,
"decompress(data, max_length=0)\n"
@ -808,7 +808,7 @@ exit:
static PyObject *
zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, unsigned int max_length)
/*[clinic checksum: 5b1e4f9f1ef8eca55fff78356f9df0c81232ed3b]*/
/*[clinic end generated code: checksum=5b1e4f9f1ef8eca55fff78356f9df0c81232ed3b]*/
{
int err;
unsigned int old_length, length = DEFAULTALLOC;
@ -1026,13 +1026,13 @@ PyZlib_flush(compobject *self, PyObject *args)
#ifdef HAVE_ZLIB_COPY
/*[clinic]
/*[clinic input]
zlib.Compress.copy
self: self(type="compobject *")
Return a copy of the compression object.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(zlib_Compress_copy__doc__,
"copy()\n"
@ -1056,7 +1056,7 @@ zlib_Compress_copy(PyObject *self, PyObject *Py_UNUSED(ignored))
static PyObject *
zlib_Compress_copy_impl(compobject *self)
/*[clinic checksum: 2f454ee15be3bc53cfb4e845c3f891f68be4c8e4]*/
/*[clinic end generated code: checksum=2f454ee15be3bc53cfb4e845c3f891f68be4c8e4]*/
{
compobject *retval = NULL;
int err;

View File

@ -69,10 +69,10 @@ to the combined-table form.
#include "Python.h"
#include "stringlib/eq.h"
/*[clinic]
/*[clinic input]
class dict
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
typedef struct {
/* Cached hash code of me_key. */
@ -2164,7 +2164,7 @@ dict_richcompare(PyObject *v, PyObject *w, int op)
return res;
}
/*[clinic]
/*[clinic input]
@coexist
dict.__contains__
@ -2173,7 +2173,7 @@ dict.__contains__
/
True if D has a key k, else False"
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(dict___contains____doc__,
"__contains__(key)\n"
@ -2184,7 +2184,7 @@ PyDoc_STRVAR(dict___contains____doc__,
static PyObject *
dict___contains__(PyObject *self, PyObject *key)
/*[clinic checksum: 3bbac5ce898ae630d9668fa1c8b3afb645ff22e8]*/
/*[clinic end generated code: checksum=3bbac5ce898ae630d9668fa1c8b3afb645ff22e8]*/
{
register PyDictObject *mp = (PyDictObject *)self;
Py_hash_t hash;

View File

@ -47,10 +47,10 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <windows.h>
#endif
/*[clinic]
/*[clinic input]
class str
[clinic]*/
/*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
[clinic start generated code]*/
/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
/* --- Globals ------------------------------------------------------------
@ -12860,7 +12860,7 @@ unicode_swapcase(PyObject *self)
return case_operation(self, do_swapcase);
}
/*[clinic]
/*[clinic input]
@staticmethod
str.maketrans as unicode_maketrans
@ -12882,7 +12882,7 @@ If there are two arguments, they must be strings of equal length, and
in the resulting dictionary, each character in x will be mapped to the
character at the same position in y. If there is a third argument, it
must be a string, whose characters will be mapped to None in the result.
[clinic]*/
[clinic start generated code]*/
PyDoc_STRVAR(unicode_maketrans__doc__,
"maketrans(x, y=None, z=None)\n"
@ -12922,7 +12922,7 @@ exit:
static PyObject *
unicode_maketrans_impl(void *null, PyObject *x, PyObject *y, PyObject *z)
/*[clinic checksum: 7f76f414a0dfd0c614e0d4717872eeb520516da7]*/
/*[clinic end generated code: checksum=7f76f414a0dfd0c614e0d4717872eeb520516da7]*/
{
PyObject *new = NULL, *key, *value;
Py_ssize_t i = 0;

View File

@ -291,10 +291,10 @@ class Language(metaclass=abc.ABCMeta):
class PythonLanguage(Language):
language = 'Python'
start_line = "#/*[{dsl_name}]"
start_line = "#/*[{dsl_name} input]"
body_prefix = "#"
stop_line = "#[{dsl_name}]*/"
checksum_line = "#/*[{dsl_name} checksum: {checksum}]*/"
stop_line = "#[{dsl_name} start generated code]*/"
checksum_line = "#/*[{dsl_name} end generated code: checksum={checksum}]*/"
def permute_left_option_groups(l):
@ -359,11 +359,12 @@ def permute_optional_groups(left, required, right):
class CLanguage(Language):
body_prefix = "#"
language = 'C'
start_line = "/*[{dsl_name}]"
start_line = "/*[{dsl_name} input]"
body_prefix = ""
stop_line = "[{dsl_name}]*/"
checksum_line = "/*[{dsl_name} checksum: {checksum}]*/"
stop_line = "[{dsl_name} start generated code]*/"
checksum_line = "/*[{dsl_name} end generated code: checksum={checksum}]*/"
def render(self, signatures):
function = None