(root)/
Python-3.12.0/
Modules/
_io/
clinic/
stringio.c.h
       1  /*[clinic input]
       2  preserve
       3  [clinic start generated code]*/
       4  
       5  #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
       6  #  include "pycore_gc.h"            // PyGC_Head
       7  #  include "pycore_runtime.h"       // _Py_ID()
       8  #endif
       9  
      10  
      11  PyDoc_STRVAR(_io_StringIO_getvalue__doc__,
      12  "getvalue($self, /)\n"
      13  "--\n"
      14  "\n"
      15  "Retrieve the entire contents of the object.");
      16  
      17  #define _IO_STRINGIO_GETVALUE_METHODDEF    \
      18      {"getvalue", (PyCFunction)_io_StringIO_getvalue, METH_NOARGS, _io_StringIO_getvalue__doc__},
      19  
      20  static PyObject *
      21  _io_StringIO_getvalue_impl(stringio *self);
      22  
      23  static PyObject *
      24  _io_StringIO_getvalue(stringio *self, PyObject *Py_UNUSED(ignored))
      25  {
      26      return _io_StringIO_getvalue_impl(self);
      27  }
      28  
      29  PyDoc_STRVAR(_io_StringIO_tell__doc__,
      30  "tell($self, /)\n"
      31  "--\n"
      32  "\n"
      33  "Tell the current file position.");
      34  
      35  #define _IO_STRINGIO_TELL_METHODDEF    \
      36      {"tell", (PyCFunction)_io_StringIO_tell, METH_NOARGS, _io_StringIO_tell__doc__},
      37  
      38  static PyObject *
      39  _io_StringIO_tell_impl(stringio *self);
      40  
      41  static PyObject *
      42  _io_StringIO_tell(stringio *self, PyObject *Py_UNUSED(ignored))
      43  {
      44      return _io_StringIO_tell_impl(self);
      45  }
      46  
      47  PyDoc_STRVAR(_io_StringIO_read__doc__,
      48  "read($self, size=-1, /)\n"
      49  "--\n"
      50  "\n"
      51  "Read at most size characters, returned as a string.\n"
      52  "\n"
      53  "If the argument is negative or omitted, read until EOF\n"
      54  "is reached. Return an empty string at EOF.");
      55  
      56  #define _IO_STRINGIO_READ_METHODDEF    \
      57      {"read", _PyCFunction_CAST(_io_StringIO_read), METH_FASTCALL, _io_StringIO_read__doc__},
      58  
      59  static PyObject *
      60  _io_StringIO_read_impl(stringio *self, Py_ssize_t size);
      61  
      62  static PyObject *
      63  _io_StringIO_read(stringio *self, PyObject *const *args, Py_ssize_t nargs)
      64  {
      65      PyObject *return_value = NULL;
      66      Py_ssize_t size = -1;
      67  
      68      if (!_PyArg_CheckPositional("read", nargs, 0, 1)) {
      69          goto exit;
      70      }
      71      if (nargs < 1) {
      72          goto skip_optional;
      73      }
      74      if (!_Py_convert_optional_to_ssize_t(args[0], &size)) {
      75          goto exit;
      76      }
      77  skip_optional:
      78      return_value = _io_StringIO_read_impl(self, size);
      79  
      80  exit:
      81      return return_value;
      82  }
      83  
      84  PyDoc_STRVAR(_io_StringIO_readline__doc__,
      85  "readline($self, size=-1, /)\n"
      86  "--\n"
      87  "\n"
      88  "Read until newline or EOF.\n"
      89  "\n"
      90  "Returns an empty string if EOF is hit immediately.");
      91  
      92  #define _IO_STRINGIO_READLINE_METHODDEF    \
      93      {"readline", _PyCFunction_CAST(_io_StringIO_readline), METH_FASTCALL, _io_StringIO_readline__doc__},
      94  
      95  static PyObject *
      96  _io_StringIO_readline_impl(stringio *self, Py_ssize_t size);
      97  
      98  static PyObject *
      99  _io_StringIO_readline(stringio *self, PyObject *const *args, Py_ssize_t nargs)
     100  {
     101      PyObject *return_value = NULL;
     102      Py_ssize_t size = -1;
     103  
     104      if (!_PyArg_CheckPositional("readline", nargs, 0, 1)) {
     105          goto exit;
     106      }
     107      if (nargs < 1) {
     108          goto skip_optional;
     109      }
     110      if (!_Py_convert_optional_to_ssize_t(args[0], &size)) {
     111          goto exit;
     112      }
     113  skip_optional:
     114      return_value = _io_StringIO_readline_impl(self, size);
     115  
     116  exit:
     117      return return_value;
     118  }
     119  
     120  PyDoc_STRVAR(_io_StringIO_truncate__doc__,
     121  "truncate($self, pos=None, /)\n"
     122  "--\n"
     123  "\n"
     124  "Truncate size to pos.\n"
     125  "\n"
     126  "The pos argument defaults to the current file position, as\n"
     127  "returned by tell().  The current file position is unchanged.\n"
     128  "Returns the new absolute position.");
     129  
     130  #define _IO_STRINGIO_TRUNCATE_METHODDEF    \
     131      {"truncate", _PyCFunction_CAST(_io_StringIO_truncate), METH_FASTCALL, _io_StringIO_truncate__doc__},
     132  
     133  static PyObject *
     134  _io_StringIO_truncate_impl(stringio *self, Py_ssize_t size);
     135  
     136  static PyObject *
     137  _io_StringIO_truncate(stringio *self, PyObject *const *args, Py_ssize_t nargs)
     138  {
     139      PyObject *return_value = NULL;
     140      Py_ssize_t size = self->pos;
     141  
     142      if (!_PyArg_CheckPositional("truncate", nargs, 0, 1)) {
     143          goto exit;
     144      }
     145      if (nargs < 1) {
     146          goto skip_optional;
     147      }
     148      if (!_Py_convert_optional_to_ssize_t(args[0], &size)) {
     149          goto exit;
     150      }
     151  skip_optional:
     152      return_value = _io_StringIO_truncate_impl(self, size);
     153  
     154  exit:
     155      return return_value;
     156  }
     157  
     158  PyDoc_STRVAR(_io_StringIO_seek__doc__,
     159  "seek($self, pos, whence=0, /)\n"
     160  "--\n"
     161  "\n"
     162  "Change stream position.\n"
     163  "\n"
     164  "Seek to character offset pos relative to position indicated by whence:\n"
     165  "    0  Start of stream (the default).  pos should be >= 0;\n"
     166  "    1  Current position - pos must be 0;\n"
     167  "    2  End of stream - pos must be 0.\n"
     168  "Returns the new absolute position.");
     169  
     170  #define _IO_STRINGIO_SEEK_METHODDEF    \
     171      {"seek", _PyCFunction_CAST(_io_StringIO_seek), METH_FASTCALL, _io_StringIO_seek__doc__},
     172  
     173  static PyObject *
     174  _io_StringIO_seek_impl(stringio *self, Py_ssize_t pos, int whence);
     175  
     176  static PyObject *
     177  _io_StringIO_seek(stringio *self, PyObject *const *args, Py_ssize_t nargs)
     178  {
     179      PyObject *return_value = NULL;
     180      Py_ssize_t pos;
     181      int whence = 0;
     182  
     183      if (!_PyArg_CheckPositional("seek", nargs, 1, 2)) {
     184          goto exit;
     185      }
     186      {
     187          Py_ssize_t ival = -1;
     188          PyObject *iobj = _PyNumber_Index(args[0]);
     189          if (iobj != NULL) {
     190              ival = PyLong_AsSsize_t(iobj);
     191              Py_DECREF(iobj);
     192          }
     193          if (ival == -1 && PyErr_Occurred()) {
     194              goto exit;
     195          }
     196          pos = ival;
     197      }
     198      if (nargs < 2) {
     199          goto skip_optional;
     200      }
     201      whence = _PyLong_AsInt(args[1]);
     202      if (whence == -1 && PyErr_Occurred()) {
     203          goto exit;
     204      }
     205  skip_optional:
     206      return_value = _io_StringIO_seek_impl(self, pos, whence);
     207  
     208  exit:
     209      return return_value;
     210  }
     211  
     212  PyDoc_STRVAR(_io_StringIO_write__doc__,
     213  "write($self, s, /)\n"
     214  "--\n"
     215  "\n"
     216  "Write string to file.\n"
     217  "\n"
     218  "Returns the number of characters written, which is always equal to\n"
     219  "the length of the string.");
     220  
     221  #define _IO_STRINGIO_WRITE_METHODDEF    \
     222      {"write", (PyCFunction)_io_StringIO_write, METH_O, _io_StringIO_write__doc__},
     223  
     224  PyDoc_STRVAR(_io_StringIO_close__doc__,
     225  "close($self, /)\n"
     226  "--\n"
     227  "\n"
     228  "Close the IO object.\n"
     229  "\n"
     230  "Attempting any further operation after the object is closed\n"
     231  "will raise a ValueError.\n"
     232  "\n"
     233  "This method has no effect if the file is already closed.");
     234  
     235  #define _IO_STRINGIO_CLOSE_METHODDEF    \
     236      {"close", (PyCFunction)_io_StringIO_close, METH_NOARGS, _io_StringIO_close__doc__},
     237  
     238  static PyObject *
     239  _io_StringIO_close_impl(stringio *self);
     240  
     241  static PyObject *
     242  _io_StringIO_close(stringio *self, PyObject *Py_UNUSED(ignored))
     243  {
     244      return _io_StringIO_close_impl(self);
     245  }
     246  
     247  PyDoc_STRVAR(_io_StringIO___init____doc__,
     248  "StringIO(initial_value=\'\', newline=\'\\n\')\n"
     249  "--\n"
     250  "\n"
     251  "Text I/O implementation using an in-memory buffer.\n"
     252  "\n"
     253  "The initial_value argument sets the value of object.  The newline\n"
     254  "argument is like the one of TextIOWrapper\'s constructor.");
     255  
     256  static int
     257  _io_StringIO___init___impl(stringio *self, PyObject *value,
     258                             PyObject *newline_obj);
     259  
     260  static int
     261  _io_StringIO___init__(PyObject *self, PyObject *args, PyObject *kwargs)
     262  {
     263      int return_value = -1;
     264      #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
     265  
     266      #define NUM_KEYWORDS 2
     267      static struct {
     268          PyGC_Head _this_is_not_used;
     269          PyObject_VAR_HEAD
     270          PyObject *ob_item[NUM_KEYWORDS];
     271      } _kwtuple = {
     272          .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
     273          .ob_item = { &_Py_ID(initial_value), &_Py_ID(newline), },
     274      };
     275      #undef NUM_KEYWORDS
     276      #define KWTUPLE (&_kwtuple.ob_base.ob_base)
     277  
     278      #else  // !Py_BUILD_CORE
     279      #  define KWTUPLE NULL
     280      #endif  // !Py_BUILD_CORE
     281  
     282      static const char * const _keywords[] = {"initial_value", "newline", NULL};
     283      static _PyArg_Parser _parser = {
     284          .keywords = _keywords,
     285          .fname = "StringIO",
     286          .kwtuple = KWTUPLE,
     287      };
     288      #undef KWTUPLE
     289      PyObject *argsbuf[2];
     290      PyObject * const *fastargs;
     291      Py_ssize_t nargs = PyTuple_GET_SIZE(args);
     292      Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
     293      PyObject *value = NULL;
     294      PyObject *newline_obj = NULL;
     295  
     296      fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 2, 0, argsbuf);
     297      if (!fastargs) {
     298          goto exit;
     299      }
     300      if (!noptargs) {
     301          goto skip_optional_pos;
     302      }
     303      if (fastargs[0]) {
     304          value = fastargs[0];
     305          if (!--noptargs) {
     306              goto skip_optional_pos;
     307          }
     308      }
     309      newline_obj = fastargs[1];
     310  skip_optional_pos:
     311      return_value = _io_StringIO___init___impl((stringio *)self, value, newline_obj);
     312  
     313  exit:
     314      return return_value;
     315  }
     316  
     317  PyDoc_STRVAR(_io_StringIO_readable__doc__,
     318  "readable($self, /)\n"
     319  "--\n"
     320  "\n"
     321  "Returns True if the IO object can be read.");
     322  
     323  #define _IO_STRINGIO_READABLE_METHODDEF    \
     324      {"readable", (PyCFunction)_io_StringIO_readable, METH_NOARGS, _io_StringIO_readable__doc__},
     325  
     326  static PyObject *
     327  _io_StringIO_readable_impl(stringio *self);
     328  
     329  static PyObject *
     330  _io_StringIO_readable(stringio *self, PyObject *Py_UNUSED(ignored))
     331  {
     332      return _io_StringIO_readable_impl(self);
     333  }
     334  
     335  PyDoc_STRVAR(_io_StringIO_writable__doc__,
     336  "writable($self, /)\n"
     337  "--\n"
     338  "\n"
     339  "Returns True if the IO object can be written.");
     340  
     341  #define _IO_STRINGIO_WRITABLE_METHODDEF    \
     342      {"writable", (PyCFunction)_io_StringIO_writable, METH_NOARGS, _io_StringIO_writable__doc__},
     343  
     344  static PyObject *
     345  _io_StringIO_writable_impl(stringio *self);
     346  
     347  static PyObject *
     348  _io_StringIO_writable(stringio *self, PyObject *Py_UNUSED(ignored))
     349  {
     350      return _io_StringIO_writable_impl(self);
     351  }
     352  
     353  PyDoc_STRVAR(_io_StringIO_seekable__doc__,
     354  "seekable($self, /)\n"
     355  "--\n"
     356  "\n"
     357  "Returns True if the IO object can be seeked.");
     358  
     359  #define _IO_STRINGIO_SEEKABLE_METHODDEF    \
     360      {"seekable", (PyCFunction)_io_StringIO_seekable, METH_NOARGS, _io_StringIO_seekable__doc__},
     361  
     362  static PyObject *
     363  _io_StringIO_seekable_impl(stringio *self);
     364  
     365  static PyObject *
     366  _io_StringIO_seekable(stringio *self, PyObject *Py_UNUSED(ignored))
     367  {
     368      return _io_StringIO_seekable_impl(self);
     369  }
     370  /*[clinic end generated code: output=533f20ae9b773126 input=a9049054013a1b77]*/