Author: Matti Picus <matti.pi...@gmail.com> Branch: Changeset: r86022:3c04fe2c5184 Date: 2016-08-04 21:36 +0300 http://bitbucket.org/pypy/pypy/changeset/3c04fe2c5184/
Log: refactor - reuse externals from rfile diff --git a/pypy/module/cpyext/api.py b/pypy/module/cpyext/api.py --- a/pypy/module/cpyext/api.py +++ b/pypy/module/cpyext/api.py @@ -11,6 +11,9 @@ from rpython.rtyper.annlowlevel import llhelper from rpython.rlib.objectmodel import we_are_translated, keepalive_until_here from rpython.rlib.objectmodel import dont_inline +from rpython.rlib.rfile import (FILEP, c_fread, c_fclose, c_fwrite, + c_fdopen, c_fileno, + c_fopen)# for tests from rpython.translator import cdir from rpython.translator.tool.cbuild import ExternalCompilationInfo from rpython.translator.gensupp import NameManager @@ -85,44 +88,32 @@ assert CONST_WSTRING == rffi.CWCHARP # FILE* interface -FILEP = rffi.COpaquePtr('FILE') if sys.platform == 'win32': dash = '_' else: dash = '' -fileno = rffi.llexternal(dash + 'fileno', [FILEP], rffi.INT) -fopen = rffi.llexternal('fopen', [CONST_STRING, CONST_STRING], FILEP) -fdopen = rffi.llexternal(dash + 'fdopen', [rffi.INT, CONST_STRING], - FILEP, save_err=rffi.RFFI_SAVE_ERRNO) -_fclose = rffi.llexternal('fclose', [FILEP], rffi.INT) def fclose(fp): - if not is_valid_fd(fileno(fp)): + if not is_valid_fd(c_fileno(fp)): return -1 - return _fclose(fp) + return c_fclose(fp) -_fwrite = rffi.llexternal('fwrite', - [rffi.VOIDP, rffi.SIZE_T, rffi.SIZE_T, FILEP], - rffi.SIZE_T) def fwrite(buf, sz, n, fp): - validate_fd(fileno(fp)) - return _fwrite(buf, sz, n, fp) + validate_fd(c_fileno(fp)) + return c_fwrite(buf, sz, n, fp) -_fread = rffi.llexternal('fread', - [rffi.VOIDP, rffi.SIZE_T, rffi.SIZE_T, FILEP], - rffi.SIZE_T) def fread(buf, sz, n, fp): - validate_fd(fileno(fp)) - return _fread(buf, sz, n, fp) + validate_fd(c_fileno(fp)) + return c_fread(buf, sz, n, fp) _feof = rffi.llexternal('feof', [FILEP], rffi.INT) def feof(fp): - validate_fd(fileno(fp)) + validate_fd(c_fileno(fp)) return _feof(fp) def is_valid_fp(fp): - return is_valid_fd(fileno(fp)) + return is_valid_fd(c_fileno(fp)) pypy_decl = 'pypy_decl.h' diff --git a/pypy/module/cpyext/test/test_eval.py b/pypy/module/cpyext/test/test_eval.py --- a/pypy/module/cpyext/test/test_eval.py +++ b/pypy/module/cpyext/test/test_eval.py @@ -3,7 +3,7 @@ from pypy.module.cpyext.test.test_api import BaseApiTest from pypy.module.cpyext.eval import ( Py_single_input, Py_file_input, Py_eval_input, PyCompilerFlags) -from pypy.module.cpyext.api import fopen, fclose, fileno, Py_ssize_tP +from pypy.module.cpyext.api import c_fopen, c_fclose, c_fileno, Py_ssize_tP from pypy.interpreter.gateway import interp2app from pypy.interpreter.astcompiler import consts from rpython.tool.udir import udir @@ -130,19 +130,19 @@ def test_run_file(self, space, api): filepath = udir / "cpyext_test_runfile.py" filepath.write("raise ZeroDivisionError") - fp = fopen(str(filepath), "rb") + fp = c_fopen(str(filepath), "rb") filename = rffi.str2charp(str(filepath)) w_globals = w_locals = space.newdict() api.PyRun_File(fp, filename, Py_file_input, w_globals, w_locals) - fclose(fp) + c_fclose(fp) assert api.PyErr_Occurred() is space.w_ZeroDivisionError api.PyErr_Clear() # try again, but with a closed file - fp = fopen(str(filepath), "rb") - os.close(fileno(fp)) + fp = c_fopen(str(filepath), "rb") + os.close(c_fileno(fp)) api.PyRun_File(fp, filename, Py_file_input, w_globals, w_locals) - fclose(fp) + c_fclose(fp) assert api.PyErr_Occurred() is space.w_IOError api.PyErr_Clear() _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit