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__IOBase_seek__doc__,
      12  "seek($self, offset, whence=os.SEEK_SET, /)\n"
      13  "--\n"
      14  "\n"
      15  "Change the stream position to the given byte offset.\n"
      16  "\n"
      17  "  offset\n"
      18  "    The stream position, relative to \'whence\'.\n"
      19  "  whence\n"
      20  "    The relative position to seek from.\n"
      21  "\n"
      22  "The offset is interpreted relative to the position indicated by whence.\n"
      23  "Values for whence are:\n"
      24  "\n"
      25  "* os.SEEK_SET or 0 -- start of stream (the default); offset should be zero or positive\n"
      26  "* os.SEEK_CUR or 1 -- current stream position; offset may be negative\n"
      27  "* os.SEEK_END or 2 -- end of stream; offset is usually negative\n"
      28  "\n"
      29  "Return the new absolute position.");
      30  
      31  #define _IO__IOBASE_SEEK_METHODDEF    \
      32      {"seek", _PyCFunction_CAST(_io__IOBase_seek), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__IOBase_seek__doc__},
      33  
      34  static PyObject *
      35  _io__IOBase_seek_impl(PyObject *self, PyTypeObject *cls,
      36                        int Py_UNUSED(offset), int Py_UNUSED(whence));
      37  
      38  static PyObject *
      39  _io__IOBase_seek(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
      40  {
      41      PyObject *return_value = NULL;
      42      #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
      43      #  define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
      44      #else
      45      #  define KWTUPLE NULL
      46      #endif
      47  
      48      static const char * const _keywords[] = {"", "", NULL};
      49      static _PyArg_Parser _parser = {
      50          .keywords = _keywords,
      51          .fname = "seek",
      52          .kwtuple = KWTUPLE,
      53      };
      54      #undef KWTUPLE
      55      PyObject *argsbuf[2];
      56      int offset;
      57      int whence = 0;
      58  
      59      args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
      60      if (!args) {
      61          goto exit;
      62      }
      63      offset = _PyLong_AsInt(args[0]);
      64      if (offset == -1 && PyErr_Occurred()) {
      65          goto exit;
      66      }
      67      if (nargs < 2) {
      68          goto skip_optional_posonly;
      69      }
      70      whence = _PyLong_AsInt(args[1]);
      71      if (whence == -1 && PyErr_Occurred()) {
      72          goto exit;
      73      }
      74  skip_optional_posonly:
      75      return_value = _io__IOBase_seek_impl(self, cls, offset, whence);
      76  
      77  exit:
      78      return return_value;
      79  }
      80  
      81  PyDoc_STRVAR(_io__IOBase_tell__doc__,
      82  "tell($self, /)\n"
      83  "--\n"
      84  "\n"
      85  "Return current stream position.");
      86  
      87  #define _IO__IOBASE_TELL_METHODDEF    \
      88      {"tell", (PyCFunction)_io__IOBase_tell, METH_NOARGS, _io__IOBase_tell__doc__},
      89  
      90  static PyObject *
      91  _io__IOBase_tell_impl(PyObject *self);
      92  
      93  static PyObject *
      94  _io__IOBase_tell(PyObject *self, PyObject *Py_UNUSED(ignored))
      95  {
      96      return _io__IOBase_tell_impl(self);
      97  }
      98  
      99  PyDoc_STRVAR(_io__IOBase_truncate__doc__,
     100  "truncate($self, size=None, /)\n"
     101  "--\n"
     102  "\n"
     103  "Truncate file to size bytes.\n"
     104  "\n"
     105  "File pointer is left unchanged. Size defaults to the current IO position\n"
     106  "as reported by tell(). Return the new size.");
     107  
     108  #define _IO__IOBASE_TRUNCATE_METHODDEF    \
     109      {"truncate", _PyCFunction_CAST(_io__IOBase_truncate), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__IOBase_truncate__doc__},
     110  
     111  static PyObject *
     112  _io__IOBase_truncate_impl(PyObject *self, PyTypeObject *cls,
     113                            PyObject *Py_UNUSED(size));
     114  
     115  static PyObject *
     116  _io__IOBase_truncate(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     117  {
     118      PyObject *return_value = NULL;
     119      #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
     120      #  define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
     121      #else
     122      #  define KWTUPLE NULL
     123      #endif
     124  
     125      static const char * const _keywords[] = {"", NULL};
     126      static _PyArg_Parser _parser = {
     127          .keywords = _keywords,
     128          .fname = "truncate",
     129          .kwtuple = KWTUPLE,
     130      };
     131      #undef KWTUPLE
     132      PyObject *argsbuf[1];
     133      PyObject *size = Py_None;
     134  
     135      args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
     136      if (!args) {
     137          goto exit;
     138      }
     139      if (nargs < 1) {
     140          goto skip_optional_posonly;
     141      }
     142      size = args[0];
     143  skip_optional_posonly:
     144      return_value = _io__IOBase_truncate_impl(self, cls, size);
     145  
     146  exit:
     147      return return_value;
     148  }
     149  
     150  PyDoc_STRVAR(_io__IOBase_flush__doc__,
     151  "flush($self, /)\n"
     152  "--\n"
     153  "\n"
     154  "Flush write buffers, if applicable.\n"
     155  "\n"
     156  "This is not implemented for read-only and non-blocking streams.");
     157  
     158  #define _IO__IOBASE_FLUSH_METHODDEF    \
     159      {"flush", (PyCFunction)_io__IOBase_flush, METH_NOARGS, _io__IOBase_flush__doc__},
     160  
     161  static PyObject *
     162  _io__IOBase_flush_impl(PyObject *self);
     163  
     164  static PyObject *
     165  _io__IOBase_flush(PyObject *self, PyObject *Py_UNUSED(ignored))
     166  {
     167      return _io__IOBase_flush_impl(self);
     168  }
     169  
     170  PyDoc_STRVAR(_io__IOBase_close__doc__,
     171  "close($self, /)\n"
     172  "--\n"
     173  "\n"
     174  "Flush and close the IO object.\n"
     175  "\n"
     176  "This method has no effect if the file is already closed.");
     177  
     178  #define _IO__IOBASE_CLOSE_METHODDEF    \
     179      {"close", (PyCFunction)_io__IOBase_close, METH_NOARGS, _io__IOBase_close__doc__},
     180  
     181  static PyObject *
     182  _io__IOBase_close_impl(PyObject *self);
     183  
     184  static PyObject *
     185  _io__IOBase_close(PyObject *self, PyObject *Py_UNUSED(ignored))
     186  {
     187      return _io__IOBase_close_impl(self);
     188  }
     189  
     190  PyDoc_STRVAR(_io__IOBase_seekable__doc__,
     191  "seekable($self, /)\n"
     192  "--\n"
     193  "\n"
     194  "Return whether object supports random access.\n"
     195  "\n"
     196  "If False, seek(), tell() and truncate() will raise OSError.\n"
     197  "This method may need to do a test seek().");
     198  
     199  #define _IO__IOBASE_SEEKABLE_METHODDEF    \
     200      {"seekable", (PyCFunction)_io__IOBase_seekable, METH_NOARGS, _io__IOBase_seekable__doc__},
     201  
     202  static PyObject *
     203  _io__IOBase_seekable_impl(PyObject *self);
     204  
     205  static PyObject *
     206  _io__IOBase_seekable(PyObject *self, PyObject *Py_UNUSED(ignored))
     207  {
     208      return _io__IOBase_seekable_impl(self);
     209  }
     210  
     211  PyDoc_STRVAR(_io__IOBase_readable__doc__,
     212  "readable($self, /)\n"
     213  "--\n"
     214  "\n"
     215  "Return whether object was opened for reading.\n"
     216  "\n"
     217  "If False, read() will raise OSError.");
     218  
     219  #define _IO__IOBASE_READABLE_METHODDEF    \
     220      {"readable", (PyCFunction)_io__IOBase_readable, METH_NOARGS, _io__IOBase_readable__doc__},
     221  
     222  static PyObject *
     223  _io__IOBase_readable_impl(PyObject *self);
     224  
     225  static PyObject *
     226  _io__IOBase_readable(PyObject *self, PyObject *Py_UNUSED(ignored))
     227  {
     228      return _io__IOBase_readable_impl(self);
     229  }
     230  
     231  PyDoc_STRVAR(_io__IOBase_writable__doc__,
     232  "writable($self, /)\n"
     233  "--\n"
     234  "\n"
     235  "Return whether object was opened for writing.\n"
     236  "\n"
     237  "If False, write() will raise OSError.");
     238  
     239  #define _IO__IOBASE_WRITABLE_METHODDEF    \
     240      {"writable", (PyCFunction)_io__IOBase_writable, METH_NOARGS, _io__IOBase_writable__doc__},
     241  
     242  static PyObject *
     243  _io__IOBase_writable_impl(PyObject *self);
     244  
     245  static PyObject *
     246  _io__IOBase_writable(PyObject *self, PyObject *Py_UNUSED(ignored))
     247  {
     248      return _io__IOBase_writable_impl(self);
     249  }
     250  
     251  PyDoc_STRVAR(_io__IOBase_fileno__doc__,
     252  "fileno($self, /)\n"
     253  "--\n"
     254  "\n"
     255  "Return underlying file descriptor if one exists.\n"
     256  "\n"
     257  "Raise OSError if the IO object does not use a file descriptor.");
     258  
     259  #define _IO__IOBASE_FILENO_METHODDEF    \
     260      {"fileno", _PyCFunction_CAST(_io__IOBase_fileno), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__IOBase_fileno__doc__},
     261  
     262  static PyObject *
     263  _io__IOBase_fileno_impl(PyObject *self, PyTypeObject *cls);
     264  
     265  static PyObject *
     266  _io__IOBase_fileno(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     267  {
     268      if (nargs) {
     269          PyErr_SetString(PyExc_TypeError, "fileno() takes no arguments");
     270          return NULL;
     271      }
     272      return _io__IOBase_fileno_impl(self, cls);
     273  }
     274  
     275  PyDoc_STRVAR(_io__IOBase_isatty__doc__,
     276  "isatty($self, /)\n"
     277  "--\n"
     278  "\n"
     279  "Return whether this is an \'interactive\' stream.\n"
     280  "\n"
     281  "Return False if it can\'t be determined.");
     282  
     283  #define _IO__IOBASE_ISATTY_METHODDEF    \
     284      {"isatty", (PyCFunction)_io__IOBase_isatty, METH_NOARGS, _io__IOBase_isatty__doc__},
     285  
     286  static PyObject *
     287  _io__IOBase_isatty_impl(PyObject *self);
     288  
     289  static PyObject *
     290  _io__IOBase_isatty(PyObject *self, PyObject *Py_UNUSED(ignored))
     291  {
     292      return _io__IOBase_isatty_impl(self);
     293  }
     294  
     295  PyDoc_STRVAR(_io__IOBase_readline__doc__,
     296  "readline($self, size=-1, /)\n"
     297  "--\n"
     298  "\n"
     299  "Read and return a line from the stream.\n"
     300  "\n"
     301  "If size is specified, at most size bytes will be read.\n"
     302  "\n"
     303  "The line terminator is always b\'\\n\' for binary files; for text\n"
     304  "files, the newlines argument to open can be used to select the line\n"
     305  "terminator(s) recognized.");
     306  
     307  #define _IO__IOBASE_READLINE_METHODDEF    \
     308      {"readline", _PyCFunction_CAST(_io__IOBase_readline), METH_FASTCALL, _io__IOBase_readline__doc__},
     309  
     310  static PyObject *
     311  _io__IOBase_readline_impl(PyObject *self, Py_ssize_t limit);
     312  
     313  static PyObject *
     314  _io__IOBase_readline(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
     315  {
     316      PyObject *return_value = NULL;
     317      Py_ssize_t limit = -1;
     318  
     319      if (!_PyArg_CheckPositional("readline", nargs, 0, 1)) {
     320          goto exit;
     321      }
     322      if (nargs < 1) {
     323          goto skip_optional;
     324      }
     325      if (!_Py_convert_optional_to_ssize_t(args[0], &limit)) {
     326          goto exit;
     327      }
     328  skip_optional:
     329      return_value = _io__IOBase_readline_impl(self, limit);
     330  
     331  exit:
     332      return return_value;
     333  }
     334  
     335  PyDoc_STRVAR(_io__IOBase_readlines__doc__,
     336  "readlines($self, hint=-1, /)\n"
     337  "--\n"
     338  "\n"
     339  "Return a list of lines from the stream.\n"
     340  "\n"
     341  "hint can be specified to control the number of lines read: no more\n"
     342  "lines will be read if the total size (in bytes/characters) of all\n"
     343  "lines so far exceeds hint.");
     344  
     345  #define _IO__IOBASE_READLINES_METHODDEF    \
     346      {"readlines", _PyCFunction_CAST(_io__IOBase_readlines), METH_FASTCALL, _io__IOBase_readlines__doc__},
     347  
     348  static PyObject *
     349  _io__IOBase_readlines_impl(PyObject *self, Py_ssize_t hint);
     350  
     351  static PyObject *
     352  _io__IOBase_readlines(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
     353  {
     354      PyObject *return_value = NULL;
     355      Py_ssize_t hint = -1;
     356  
     357      if (!_PyArg_CheckPositional("readlines", nargs, 0, 1)) {
     358          goto exit;
     359      }
     360      if (nargs < 1) {
     361          goto skip_optional;
     362      }
     363      if (!_Py_convert_optional_to_ssize_t(args[0], &hint)) {
     364          goto exit;
     365      }
     366  skip_optional:
     367      return_value = _io__IOBase_readlines_impl(self, hint);
     368  
     369  exit:
     370      return return_value;
     371  }
     372  
     373  PyDoc_STRVAR(_io__IOBase_writelines__doc__,
     374  "writelines($self, lines, /)\n"
     375  "--\n"
     376  "\n"
     377  "Write a list of lines to stream.\n"
     378  "\n"
     379  "Line separators are not added, so it is usual for each of the\n"
     380  "lines provided to have a line separator at the end.");
     381  
     382  #define _IO__IOBASE_WRITELINES_METHODDEF    \
     383      {"writelines", (PyCFunction)_io__IOBase_writelines, METH_O, _io__IOBase_writelines__doc__},
     384  
     385  PyDoc_STRVAR(_io__RawIOBase_read__doc__,
     386  "read($self, size=-1, /)\n"
     387  "--\n"
     388  "\n");
     389  
     390  #define _IO__RAWIOBASE_READ_METHODDEF    \
     391      {"read", _PyCFunction_CAST(_io__RawIOBase_read), METH_FASTCALL, _io__RawIOBase_read__doc__},
     392  
     393  static PyObject *
     394  _io__RawIOBase_read_impl(PyObject *self, Py_ssize_t n);
     395  
     396  static PyObject *
     397  _io__RawIOBase_read(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
     398  {
     399      PyObject *return_value = NULL;
     400      Py_ssize_t n = -1;
     401  
     402      if (!_PyArg_CheckPositional("read", nargs, 0, 1)) {
     403          goto exit;
     404      }
     405      if (nargs < 1) {
     406          goto skip_optional;
     407      }
     408      {
     409          Py_ssize_t ival = -1;
     410          PyObject *iobj = _PyNumber_Index(args[0]);
     411          if (iobj != NULL) {
     412              ival = PyLong_AsSsize_t(iobj);
     413              Py_DECREF(iobj);
     414          }
     415          if (ival == -1 && PyErr_Occurred()) {
     416              goto exit;
     417          }
     418          n = ival;
     419      }
     420  skip_optional:
     421      return_value = _io__RawIOBase_read_impl(self, n);
     422  
     423  exit:
     424      return return_value;
     425  }
     426  
     427  PyDoc_STRVAR(_io__RawIOBase_readall__doc__,
     428  "readall($self, /)\n"
     429  "--\n"
     430  "\n"
     431  "Read until EOF, using multiple read() call.");
     432  
     433  #define _IO__RAWIOBASE_READALL_METHODDEF    \
     434      {"readall", (PyCFunction)_io__RawIOBase_readall, METH_NOARGS, _io__RawIOBase_readall__doc__},
     435  
     436  static PyObject *
     437  _io__RawIOBase_readall_impl(PyObject *self);
     438  
     439  static PyObject *
     440  _io__RawIOBase_readall(PyObject *self, PyObject *Py_UNUSED(ignored))
     441  {
     442      return _io__RawIOBase_readall_impl(self);
     443  }
     444  /*[clinic end generated code: output=7c2df7a330be8b5b input=a9049054013a1b77]*/