bpo-20185: Convert list object implementation to Argument Clinic. (#542) · python/cpython@fdd42c4 (original) (raw)

``

1

`+

/*[clinic input]

`

``

2

`+

preserve

`

``

3

`+

[clinic start generated code]*/

`

``

4

+

``

5

`+

PyDoc_STRVAR(list_insert__doc__,

`

``

6

`+

"insert($self, index, object, /)\n"

`

``

7

`+

"--\n"

`

``

8

`+

"\n"

`

``

9

`+

"Insert object before index.");

`

``

10

+

``

11

`+

#define LIST_INSERT_METHODDEF \

`

``

12

`+

{"insert", (PyCFunction)list_insert, METH_FASTCALL, list_insert__doc__},

`

``

13

+

``

14

`+

static PyObject *

`

``

15

`+

list_insert_impl(PyListObject *self, Py_ssize_t index, PyObject *object);

`

``

16

+

``

17

`+

static PyObject *

`

``

18

`+

list_insert(PyListObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)

`

``

19

`+

{

`

``

20

`+

PyObject *return_value = NULL;

`

``

21

`+

Py_ssize_t index;

`

``

22

`+

PyObject *object;

`

``

23

+

``

24

`+

if (!_PyArg_ParseStack(args, nargs, "nO:insert",

`

``

25

`+

&index, &object)) {

`

``

26

`+

goto exit;

`

``

27

`+

}

`

``

28

+

``

29

`+

if (!_PyArg_NoStackKeywords("insert", kwnames)) {

`

``

30

`+

goto exit;

`

``

31

`+

}

`

``

32

`+

return_value = list_insert_impl(self, index, object);

`

``

33

+

``

34

`+

exit:

`

``

35

`+

return return_value;

`

``

36

`+

}

`

``

37

+

``

38

`+

PyDoc_STRVAR(list_clear__doc__,

`

``

39

`+

"clear($self, /)\n"

`

``

40

`+

"--\n"

`

``

41

`+

"\n"

`

``

42

`+

"Remove all items from list.");

`

``

43

+

``

44

`+

#define LIST_CLEAR_METHODDEF \

`

``

45

`+

{"clear", (PyCFunction)list_clear, METH_NOARGS, list_clear__doc__},

`

``

46

+

``

47

`+

static PyObject *

`

``

48

`+

list_clear_impl(PyListObject *self);

`

``

49

+

``

50

`+

static PyObject *

`

``

51

`+

list_clear(PyListObject *self, PyObject *Py_UNUSED(ignored))

`

``

52

`+

{

`

``

53

`+

return list_clear_impl(self);

`

``

54

`+

}

`

``

55

+

``

56

`+

PyDoc_STRVAR(list_copy__doc__,

`

``

57

`+

"copy($self, /)\n"

`

``

58

`+

"--\n"

`

``

59

`+

"\n"

`

``

60

`+

"Return a shallow copy of the list.");

`

``

61

+

``

62

`+

#define LIST_COPY_METHODDEF \

`

``

63

`+

{"copy", (PyCFunction)list_copy, METH_NOARGS, list_copy__doc__},

`

``

64

+

``

65

`+

static PyObject *

`

``

66

`+

list_copy_impl(PyListObject *self);

`

``

67

+

``

68

`+

static PyObject *

`

``

69

`+

list_copy(PyListObject *self, PyObject *Py_UNUSED(ignored))

`

``

70

`+

{

`

``

71

`+

return list_copy_impl(self);

`

``

72

`+

}

`

``

73

+

``

74

`+

PyDoc_STRVAR(list_append__doc__,

`

``

75

`+

"append($self, object, /)\n"

`

``

76

`+

"--\n"

`

``

77

`+

"\n"

`

``

78

`+

"Append object to the end of the list.");

`

``

79

+

``

80

`+

#define LIST_APPEND_METHODDEF \

`

``

81

`+

{"append", (PyCFunction)list_append, METH_O, list_append__doc__},

`

``

82

+

``

83

`+

PyDoc_STRVAR(list_extend__doc__,

`

``

84

`+

"extend($self, iterable, /)\n"

`

``

85

`+

"--\n"

`

``

86

`+

"\n"

`

``

87

`+

"Extend list by appending elements from the iterable.");

`

``

88

+

``

89

`+

#define LIST_EXTEND_METHODDEF \

`

``

90

`+

{"extend", (PyCFunction)list_extend, METH_O, list_extend__doc__},

`

``

91

+

``

92

`+

PyDoc_STRVAR(list_pop__doc__,

`

``

93

`+

"pop($self, index=-1, /)\n"

`

``

94

`+

"--\n"

`

``

95

`+

"\n"

`

``

96

`+

"Remove and return item at index (default last).\n"

`

``

97

`+

"\n"

`

``

98

`+

"Raises IndexError if list is empty or index is out of range.");

`

``

99

+

``

100

`+

#define LIST_POP_METHODDEF \

`

``

101

`+

{"pop", (PyCFunction)list_pop, METH_FASTCALL, list_pop__doc__},

`

``

102

+

``

103

`+

static PyObject *

`

``

104

`+

list_pop_impl(PyListObject *self, Py_ssize_t index);

`

``

105

+

``

106

`+

static PyObject *

`

``

107

`+

list_pop(PyListObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)

`

``

108

`+

{

`

``

109

`+

PyObject *return_value = NULL;

`

``

110

`+

Py_ssize_t index = -1;

`

``

111

+

``

112

`+

if (!_PyArg_ParseStack(args, nargs, "|n:pop",

`

``

113

`+

&index)) {

`

``

114

`+

goto exit;

`

``

115

`+

}

`

``

116

+

``

117

`+

if (!_PyArg_NoStackKeywords("pop", kwnames)) {

`

``

118

`+

goto exit;

`

``

119

`+

}

`

``

120

`+

return_value = list_pop_impl(self, index);

`

``

121

+

``

122

`+

exit:

`

``

123

`+

return return_value;

`

``

124

`+

}

`

``

125

+

``

126

`+

PyDoc_STRVAR(list_sort__doc__,

`

``

127

`+

"sort($self, /, *, key=None, reverse=False)\n"

`

``

128

`+

"--\n"

`

``

129

`+

"\n"

`

``

130

`+

"Stable sort IN PLACE.");

`

``

131

+

``

132

`+

#define LIST_SORT_METHODDEF \

`

``

133

`+

{"sort", (PyCFunction)list_sort, METH_FASTCALL, list_sort__doc__},

`

``

134

+

``

135

`+

static PyObject *

`

``

136

`+

list_sort_impl(PyListObject *self, PyObject *keyfunc, int reverse);

`

``

137

+

``

138

`+

static PyObject *

`

``

139

`+

list_sort(PyListObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)

`

``

140

`+

{

`

``

141

`+

PyObject *return_value = NULL;

`

``

142

`+

static const char * const _keywords[] = {"key", "reverse", NULL};

`

``

143

`+

static _PyArg_Parser _parser = {"|$Oi:sort", _keywords, 0};

`

``

144

`+

PyObject *keyfunc = Py_None;

`

``

145

`+

int reverse = 0;

`

``

146

+

``

147

`+

if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,

`

``

148

`+

&keyfunc, &reverse)) {

`

``

149

`+

goto exit;

`

``

150

`+

}

`

``

151

`+

return_value = list_sort_impl(self, keyfunc, reverse);

`

``

152

+

``

153

`+

exit:

`

``

154

`+

return return_value;

`

``

155

`+

}

`

``

156

+

``

157

`+

PyDoc_STRVAR(list_reverse__doc__,

`

``

158

`+

"reverse($self, /)\n"

`

``

159

`+

"--\n"

`

``

160

`+

"\n"

`

``

161

`+

"Reverse IN PLACE.");

`

``

162

+

``

163

`+

#define LIST_REVERSE_METHODDEF \

`

``

164

`+

{"reverse", (PyCFunction)list_reverse, METH_NOARGS, list_reverse__doc__},

`

``

165

+

``

166

`+

static PyObject *

`

``

167

`+

list_reverse_impl(PyListObject *self);

`

``

168

+

``

169

`+

static PyObject *

`

``

170

`+

list_reverse(PyListObject *self, PyObject *Py_UNUSED(ignored))

`

``

171

`+

{

`

``

172

`+

return list_reverse_impl(self);

`

``

173

`+

}

`

``

174

+

``

175

`+

PyDoc_STRVAR(list_index__doc__,

`

``

176

`+

"index($self, value, start=0, stop=sys.maxsize, /)\n"

`

``

177

`+

"--\n"

`

``

178

`+

"\n"

`

``

179

`+

"Return first index of value.\n"

`

``

180

`+

"\n"

`

``

181

`+

"Raises ValueError if the value is not present.");

`

``

182

+

``

183

`+

#define LIST_INDEX_METHODDEF \

`

``

184

`+

{"index", (PyCFunction)list_index, METH_FASTCALL, list_index__doc__},

`

``

185

+

``

186

`+

static PyObject *

`

``

187

`+

list_index_impl(PyListObject *self, PyObject *value, Py_ssize_t start,

`

``

188

`+

Py_ssize_t stop);

`

``

189

+

``

190

`+

static PyObject *

`

``

191

`+

list_index(PyListObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)

`

``

192

`+

{

`

``

193

`+

PyObject *return_value = NULL;

`

``

194

`+

PyObject *value;

`

``

195

`+

Py_ssize_t start = 0;

`

``

196

`+

Py_ssize_t stop = PY_SSIZE_T_MAX;

`

``

197

+

``

198

`+

if (!_PyArg_ParseStack(args, nargs, "O|O&O&:index",

`

``

199

`+

&value, _PyEval_SliceIndex, &start, _PyEval_SliceIndex, &stop)) {

`

``

200

`+

goto exit;

`

``

201

`+

}

`

``

202

+

``

203

`+

if (!_PyArg_NoStackKeywords("index", kwnames)) {

`

``

204

`+

goto exit;

`

``

205

`+

}

`

``

206

`+

return_value = list_index_impl(self, value, start, stop);

`

``

207

+

``

208

`+

exit:

`

``

209

`+

return return_value;

`

``

210

`+

}

`

``

211

+

``

212

`+

PyDoc_STRVAR(list_count__doc__,

`

``

213

`+

"count($self, value, /)\n"

`

``

214

`+

"--\n"

`

``

215

`+

"\n"

`

``

216

`+

"Return number of occurrences of value.");

`

``

217

+

``

218

`+

#define LIST_COUNT_METHODDEF \

`

``

219

`+

{"count", (PyCFunction)list_count, METH_O, list_count__doc__},

`

``

220

+

``

221

`+

PyDoc_STRVAR(list_remove__doc__,

`

``

222

`+

"remove($self, value, /)\n"

`

``

223

`+

"--\n"

`

``

224

`+

"\n"

`

``

225

`+

"Remove first occurrence of value.\n"

`

``

226

`+

"\n"

`

``

227

`+

"Raises ValueError if the value is not present.");

`

``

228

+

``

229

`+

#define LIST_REMOVE_METHODDEF \

`

``

230

`+

{"remove", (PyCFunction)list_remove, METH_O, list_remove__doc__},

`

``

231

+

``

232

`+

PyDoc_STRVAR(list___init____doc__,

`

``

233

`+

"list(iterable=(), /)\n"

`

``

234

`+

"--\n"

`

``

235

`+

"\n"

`

``

236

`+

"Built-in mutable sequence.\n"

`

``

237

`+

"\n"

`

``

238

`+

"If no argument is given, the constructor creates a new empty list.\n"

`

``

239

`+

"The argument must be an iterable if specified.");

`

``

240

+

``

241

`+

static int

`

``

242

`+

list___init___impl(PyListObject *self, PyObject *iterable);

`

``

243

+

``

244

`+

static int

`

``

245

`+

list___init__(PyObject *self, PyObject *args, PyObject *kwargs)

`

``

246

`+

{

`

``

247

`+

int return_value = -1;

`

``

248

`+

PyObject *iterable = NULL;

`

``

249

+

``

250

`+

if ((Py_TYPE(self) == &PyList_Type) &&

`

``

251

`+

!_PyArg_NoKeywords("list", kwargs)) {

`

``

252

`+

goto exit;

`

``

253

`+

}

`

``

254

`+

if (!PyArg_UnpackTuple(args, "list",

`

``

255

`+

0, 1,

`

``

256

`+

&iterable)) {

`

``

257

`+

goto exit;

`

``

258

`+

}

`

``

259

`+

return_value = list___init___impl((PyListObject *)self, iterable);

`

``

260

+

``

261

`+

exit:

`

``

262

`+

return return_value;

`

``

263

`+

}

`

``

264

+

``

265

`+

PyDoc_STRVAR(list___sizeof____doc__,

`

``

266

`+

"sizeof($self, /)\n"

`

``

267

`+

"--\n"

`

``

268

`+

"\n"

`

``

269

`+

"Return the size of the list in memory, in bytes.");

`

``

270

+

``

271

`+

#define LIST___SIZEOF___METHODDEF \

`

``

272

`+

{"sizeof", (PyCFunction)list___sizeof__, METH_NOARGS, list___sizeof____doc__},

`

``

273

+

``

274

`+

static PyObject *

`

``

275

`+

list___sizeof___impl(PyListObject *self);

`

``

276

+

``

277

`+

static PyObject *

`

``

278

`+

list___sizeof__(PyListObject *self, PyObject *Py_UNUSED(ignored))

`

``

279

`+

{

`

``

280

`+

return list___sizeof___impl(self);

`

``

281

`+

}

`

``

282

+

``

283

`+

PyDoc_STRVAR(list___reversed____doc__,

`

``

284

`+

"reversed($self, /)\n"

`

``

285

`+

"--\n"

`

``

286

`+

"\n"

`

``

287

`+

"Return a reverse iterator over the list.");

`

``

288

+

``

289

`+

#define LIST___REVERSED___METHODDEF \

`

``

290

`+

{"reversed", (PyCFunction)list___reversed__, METH_NOARGS, list___reversed____doc__},

`

``

291

+

``

292

`+

static PyObject *

`

``

293

`+

list___reversed___impl(PyListObject *self);

`

``

294

+

``

295

`+

static PyObject *

`

``

296

`+

list___reversed__(PyListObject *self, PyObject *Py_UNUSED(ignored))

`

``

297

`+

{

`

``

298

`+

return list___reversed___impl(self);

`

``

299

`+

}

`

``

300

`+

/[clinic end generated code: output=2a3b75efcf858ed5 input=a9049054013a1b77]/

`