Author: Matti Picus <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit