[pypy-svn] r46185 - pypy/branch/pypy-more-rtti-inprogress/rpython/module
fijal at codespeak.net
fijal at codespeak.net
Thu Aug 30 12:15:03 CEST 2007
Author: fijal
Date: Thu Aug 30 12:15:02 2007
New Revision: 46185
Modified:
pypy/branch/pypy-more-rtti-inprogress/rpython/module/ll_os.py
Log:
Use cool helpers
Modified: pypy/branch/pypy-more-rtti-inprogress/rpython/module/ll_os.py
==============================================================================
--- pypy/branch/pypy-more-rtti-inprogress/rpython/module/ll_os.py (original)
+++ pypy/branch/pypy-more-rtti-inprogress/rpython/module/ll_os.py Thu Aug 30 12:15:02 2007
@@ -15,21 +15,48 @@
from pypy.annotation.model import SomeInteger, SomeString, SomeTuple, SomeFloat
from pypy.annotation.model import s_ImpossibleValue, s_None, s_Bool
from pypy.rpython.lltypesystem import rffi
-from pypy.rpython.lltypesystem.rffi import platform
from pypy.rpython.lltypesystem import lltype
-from pypy.rpython.tool import rffi_platform
+from pypy.rpython.tool import rffi_platform as platform
posix = __import__(os.name)
+class CConfig:
+ """
+ Definitions for platform integration.
+
+ Note: this must be processed through platform.configure() to provide
+ usable objects. For example::
+
+ CLOCK_T = platform.configure(CConfig)['CLOCK_T']
+ register(function, [CLOCK_T], ...)
+
+ """
+ _includes_ = ['sys/times.h', 'utime.h', 'sys/types.h', 'unistd.h',
+ 'signal.h', 'wait.h']
+ if not sys.platform.startswith('win'):
+ _includes_ += ['dirent.h', 'sys/stat.h']
+
+ CLOCK_T = platform.SimpleType('clock_t', rffi.INT)
+
+ NAME_MAX = platform.DefinedConstantInteger('NAME_MAX')
+
+ SEEK_SET = platform.DefinedConstantInteger('SEEK_SET')
+ SEEK_CUR = platform.DefinedConstantInteger('SEEK_CUR')
+ SEEK_END = platform.DefinedConstantInteger('SEEK_END')
+
+ TMS = platform.Struct(
+ 'struct tms', [('tms_utime', rffi.INT),
+ ('tms_stime', rffi.INT),
+ ('tms_cutime', rffi.INT),
+ ('tms_cstime', rffi.INT)])
-class RegisterOs(BaseLazyRegistering):
- UNISTD_INCL = ['unistd.h', 'sys/types.h']
+class RegisterOs(BaseLazyRegistering):
def __init__(self):
- pass
+ self.configure(CConfig)
# a simple, yet usefull factory
def extdef_for_os_function_returning_int(self, name, **kwds):
- c_func = rffi.llexternal(name, [], rffi.INT, **kwds)
+ c_func = self.llexternal(name, [], rffi.INT, **kwds)
def c_func_llimpl():
res = c_func()
if res == -1:
@@ -42,7 +69,7 @@
@registering_if(os, 'execv')
def register_os_execv(self):
- os_execv = rffi.llexternal('execv', [rffi.CCHARP, rffi.CCHARPP],
+ os_execv = self.llexternal('execv', [rffi.CCHARP, rffi.CCHARPP],
rffi.INT)
def execv_llimpl(path, args):
@@ -58,7 +85,7 @@
@registering_if(posix, 'spawnv')
def register_os_spawnv(self):
- os_spawnv = rffi.llexternal('spawnv',
+ os_spawnv = self.llexternal('spawnv',
[rffi.INT, rffi.CCHARP, rffi.CCHARPP],
rffi.INT)
@@ -78,7 +105,7 @@
@registering(os.dup)
def register_os_dup(self):
- os_dup = rffi.llexternal('dup', [rffi.INT], rffi.INT)
+ os_dup = self.llexternal('dup', [rffi.INT], rffi.INT)
def dup_llimpl(fd):
newfd = rffi.cast(lltype.Signed, os_dup(rffi.cast(rffi.INT, fd)))
@@ -91,7 +118,7 @@
@registering(os.dup2)
def register_os_dup2(self):
- os_dup2 = rffi.llexternal('dup2', [rffi.INT, rffi.INT], rffi.INT)
+ os_dup2 = self.llexternal('dup2', [rffi.INT, rffi.INT], rffi.INT)
def dup2_llimpl(fd, newfd):
error = rffi.cast(lltype.Signed, os_dup2(rffi.cast(rffi.INT, fd),
@@ -104,17 +131,12 @@
@registering(os.utime)
def register_os_utime(self):
- #START
- #print rffi.platform.has('utimes'), rffi.platform.has('utime')
- #STOP
TIME_T = rffi.INT # XXX do the right thing
UTIMEBUFP = rffi.CStructPtr('utimbuf', ('actime', TIME_T),
('modtime', TIME_T))
# XXX sys/types.h is not portable at all
- os_utime = rffi.llexternal('utime', [rffi.CCHARP, UTIMEBUFP],
- rffi.INT,
- includes=['utime.h', 'sys/types.h'])
+ os_utime = self.llexternal('utime', [rffi.CCHARP, UTIMEBUFP], rffi.INT)
def os_utime_llimpl(path, tp):
# XXX right now they're all ints, might change in future
@@ -167,56 +189,26 @@
@registering(os.times)
def register_os_times(self):
- # XXX sys/times.h isn't portable
- class CConfig:
- """
- Definitions for platform integration.
-
- Note: this must be processed through rffi_platform.configure() to
- provide usable objects. For example::
-
- CLOCK_T = rffi_platform.configure(CConfig)['CLOCK_T']
- register(function, [CLOCK_T], ...)
-
- """
- includes = ['sys/times.h']
- # XXX argh, argh, argh, should be automatic
- _header_ = "\n".join(["#include <%s>" % name for name in includes])
-
- CLOCK_T = rffi_platform.SimpleType('clock_t', rffi.INT)
-
- TMS = rffi_platform.Struct(
- 'struct tms', [('tms_utime', rffi.INT),
- ('tms_stime', rffi.INT),
- ('tms_cutime', rffi.INT),
- ('tms_cstime', rffi.INT)])
-
- # Grab all of the platform type definitions
- config = rffi_platform.configure(CConfig)
- CLOCK_T = config['CLOCK_T']
- TMS = config['TMS']
- # Make some pointer types too
- TMSP = lltype.Ptr(TMS)
+ self.TMSP = lltype.Ptr(self.TMS)
+ os_times = self.llexternal('times', [self.TMSP], self.CLOCK_T)
+
# Here is a random extra platform parameter which is important.
# Strictly speaking, this should probably be retrieved at runtime, not
# at translation time.
- CLOCK_TICKS_PER_SECOND = float(os.sysconf('SC_CLK_TCK'))
-
- os_times = rffi.llexternal('times', [TMSP], CLOCK_T,
- includes=['sys/times.h'])
+ self.CLOCK_TICKS_PER_SECOND = float(os.sysconf('SC_CLK_TCK'))
def times_lltypeimpl():
- l_tmsbuf = lltype.malloc(TMSP.TO, flavor='raw')
+ l_tmsbuf = lltype.malloc(self.TMSP.TO, flavor='raw')
try:
result = os_times(l_tmsbuf)
if result == -1:
raise OSError(rffi.get_errno(), "times failed")
return (
- l_tmsbuf.c_tms_utime / CLOCK_TICKS_PER_SECOND,
- l_tmsbuf.c_tms_stime / CLOCK_TICKS_PER_SECOND,
- l_tmsbuf.c_tms_cutime / CLOCK_TICKS_PER_SECOND,
- l_tmsbuf.c_tms_cstime / CLOCK_TICKS_PER_SECOND,
- result / CLOCK_TICKS_PER_SECOND)
+ l_tmsbuf.c_tms_utime / self.CLOCK_TICKS_PER_SECOND,
+ l_tmsbuf.c_tms_stime / self.CLOCK_TICKS_PER_SECOND,
+ l_tmsbuf.c_tms_cutime / self.CLOCK_TICKS_PER_SECOND,
+ l_tmsbuf.c_tms_cstime / self.CLOCK_TICKS_PER_SECOND,
+ result / self.CLOCK_TICKS_PER_SECOND)
finally:
lltype.free(l_tmsbuf, flavor='raw')
self.register(os.times, [], (float, float, float, float, float),
@@ -225,8 +217,7 @@
@registering_if(os, 'setsid')
def register_os_setsid(self):
- os_setsid = rffi.llexternal('setsid', [], rffi.PID_T,
- includes=['unistd.h'])
+ os_setsid = self.llexternal('setsid', [], rffi.PID_T)
def setsid_llimpl():
result = rffi.cast(lltype.Signed, os_setsid())
if result == -1:
@@ -250,7 +241,7 @@
('domainname', UTCHARP)]
UTSNAMEP = rffi.CStructPtr('utsname', *fields)
- os_uname = rffi.llexternal('uname', [UTSNAMEP], rffi.INT,
+ os_uname = self.llexternal('uname', [UTSNAMEP], rffi.INT,
includes=['sys/utsname.h'])
def utcharp2str(cp):
@@ -277,20 +268,17 @@
return extdef([], (str, str, str, str, str),
"ll_os.ll_uname", llimpl=uname_llimpl)
- @registering_if(os, 'getuid')
+ @registering(os.getuid)
def register_os_getuid(self):
- return self.extdef_for_os_function_returning_int('getuid',
- includes=self.UNISTD_INCL)
+ return self.extdef_for_os_function_returning_int('getuid')
- @registering_if(os, 'geteuid')
+ @registering(os.geteuid)
def register_os_geteuid(self):
- return self.extdef_for_os_function_returning_int('geteuid',
- includes=self.UNISTD_INCL)
+ return self.extdef_for_os_function_returning_int('geteuid')
@registering_if(os, 'getpid')
def register_os_getpid(self):
- return self.extdef_for_os_function_returning_int('getpid',
- includes=self.UNISTD_INCL)
+ return self.extdef_for_os_function_returning_int('getpid')
@registering(os.open)
def register_os_open(self):
@@ -298,7 +286,7 @@
mode_t = rffi.INT
else:
mode_t = rffi.MODE_T
- os_open = rffi.llexternal('open', [rffi.CCHARP, rffi.INT, mode_t],
+ os_open = self.llexternal('open', [rffi.CCHARP, rffi.INT, mode_t],
rffi.INT)
def os_open_llimpl(path, flags, mode):
@@ -321,7 +309,7 @@
@registering(os.read)
def register_os_read(self):
- os_read = rffi.llexternal('read', [rffi.INT, rffi.VOIDP, rffi.SIZE_T],
+ os_read = self.llexternal('read', [rffi.INT, rffi.VOIDP, rffi.SIZE_T],
rffi.SIZE_T)
def os_read_llimpl(fd, count):
@@ -347,7 +335,7 @@
@registering(os.write)
def register_os_write(self):
- os_write = rffi.llexternal('write', [rffi.INT, rffi.VOIDP,
+ os_write = self.llexternal('write', [rffi.INT, rffi.VOIDP,
rffi.SIZE_T], rffi.SIZE_T)
def os_write_llimpl(fd, data):
@@ -374,7 +362,7 @@
@registering(os.close)
def register_os_close(self):
- os_close = rffi.llexternal('close', [rffi.INT], rffi.INT)
+ os_close = self.llexternal('close', [rffi.INT], rffi.INT)
def close_llimpl(fd):
error = rffi.cast(lltype.Signed, os_close(rffi.cast(rffi.INT, fd)))
@@ -388,14 +376,12 @@
def register_os_lseek(self):
if sys.platform.startswith('win'):
funcname = '_lseeki64'
- INCLUDES = []
else:
funcname = 'lseek'
- INCLUDES = self.UNISTD_INCL
- if platform.defined('SEEK_SET', includes=INCLUDES):
- SEEK_SET = platform.intdefined('SEEK_SET', includes=INCLUDES)
- SEEK_CUR = platform.intdefined('SEEK_CUR', includes=INCLUDES)
- SEEK_END = platform.intdefined('SEEK_END', includes=INCLUDES)
+ if self.SEEK_SET is not None:
+ SEEK_SET = self.SEEK_SET
+ SEEK_CUR = self.SEEK_CUR
+ SEEK_END = self.SEEK_END
else:
SEEK_SET, SEEK_CUR, SEEK_END = 0, 1, 2
if (SEEK_SET, SEEK_CUR, SEEK_END) != (0, 1, 2):
@@ -409,7 +395,7 @@
def fix_seek_arg(n):
return n
- os_lseek = rffi.llexternal(funcname,
+ os_lseek = self.llexternal(funcname,
[rffi.INT, rffi.LONGLONG, rffi.INT],
rffi.LONGLONG)
@@ -435,7 +421,7 @@
@registering_if(os, 'ftruncate')
def register_os_ftruncate(self):
- os_ftruncate = rffi.llexternal('ftruncate',
+ os_ftruncate = self.llexternal('ftruncate',
[rffi.INT, rffi.LONGLONG], rffi.INT)
def ftruncate_llimpl(fd, length):
@@ -450,7 +436,7 @@
@registering(os.access)
def register_os_access(self):
- os_access = rffi.llexternal('access',
+ os_access = self.llexternal('access',
[rffi.CCHARP, rffi.INT],
rffi.INT)
@@ -470,7 +456,7 @@
@registering(os.getcwd)
def register_os_getcwd(self):
- os_getcwd = rffi.llexternal('getcwd',
+ os_getcwd = self.llexternal('getcwd',
[rffi.CCHARP, rffi.SIZE_T],
rffi.CCHARP)
@@ -506,20 +492,15 @@
if sys.platform.startswith('win'):
XXX # FindFirstFile, FindNextFile
else:
- INCL = ['sys/types.h', 'dirent.h']
- DIRP = rffi.COpaquePtr('DIR', includes=INCL)
- NAME_MAX = platform.intdefined('NAME_MAX', includes=INCL)
+ DIRP = rffi.COpaquePtr('DIR')
DIRENTP = rffi.CStructPtr('dirent',
- ('d_name', lltype.FixedSizeArray(lltype.Char, NAME_MAX+1)),
+ ('d_name', lltype.FixedSizeArray(lltype.Char, self.NAME_MAX+1)),
)
# XXX so far, DIRENTP cannot be handled by ll2ctypes because
# it contains other fields before 'd_name', at least on Linux
- os_opendir = rffi.llexternal('opendir', [rffi.CCHARP], DIRP,
- includes = INCL)
- os_readdir = rffi.llexternal('readdir', [DIRP], DIRENTP,
- includes = INCL)
- os_closedir = rffi.llexternal('closedir', [DIRP], rffi.INT,
- includes = INCL)
+ os_opendir = self.llexternal('opendir', [rffi.CCHARP], DIRP)
+ os_readdir = self.llexternal('readdir', [DIRP], DIRENTP)
+ os_closedir = self.llexternal('closedir', [DIRP], rffi.INT)
def os_listdir_llimpl(path):
path = rffi.str2charp(path)
@@ -555,8 +536,7 @@
XXX # CreatePipe, _open_osfhandle
else:
INT_ARRAY_P = lltype.Ptr(lltype.FixedSizeArray(rffi.INT, 2))
- os_pipe = rffi.llexternal('pipe', [INT_ARRAY_P], rffi.INT,
- includes=['unistd.h'])
+ os_pipe = self.llexternal('pipe', [INT_ARRAY_P], rffi.INT)
def os_pipe_llimpl():
filedes = lltype.malloc(INT_ARRAY_P.TO, flavor='raw')
@@ -574,7 +554,7 @@
@registering_if(os, 'readlink')
def register_os_readlink(self):
- os_readlink = rffi.llexternal('readlink',
+ os_readlink = self.llexternal('readlink',
[rffi.CCHARP, rffi.CCHARP, rffi.SIZE_T],
rffi.INT) # XXX SSIZE_T in POSIX.1-2001
@@ -614,7 +594,7 @@
def register_os_waitpid(self):
if sys.platform.startswith('win'):
# emulate waitpid() with the _cwait() of Microsoft's compiler
- os__cwait = rffi.llexternal('_cwait',
+ os__cwait = self.llexternal('_cwait',
[rffi.INTP, rffi.PID_T, rffi.INT],
rffi.PID_T)
def os_waitpid(pid, status_p, options):
@@ -625,7 +605,7 @@
return result
else:
# Posix
- os_waitpid = rffi.llexternal('waitpid',
+ os_waitpid = self.llexternal('waitpid',
[rffi.PID_T, rffi.INTP, rffi.INT],
rffi.PID_T)
@@ -648,7 +628,7 @@
@registering(os.isatty)
def register_os_isatty(self):
- os_isatty = rffi.llexternal('isatty', [rffi.INT], rffi.INT)
+ os_isatty = self.llexternal('isatty', [rffi.INT], rffi.INT)
def isatty_llimpl(fd):
res = os_isatty(rffi.cast(rffi.INT, fd))
@@ -659,7 +639,7 @@
@registering(os.strerror)
def register_os_strerror(self):
- os_strerror = rffi.llexternal('strerror', [rffi.INT], rffi.CCHARP)
+ os_strerror = self.llexternal('strerror', [rffi.INT], rffi.CCHARP)
def strerror_llimpl(errnum):
res = os_strerror(rffi.cast(rffi.INT, errnum))
@@ -672,7 +652,7 @@
@registering(os.system)
def register_os_system(self):
- os_system = rffi.llexternal('system', [rffi.CCHARP], rffi.INT)
+ os_system = self.llexternal('system', [rffi.CCHARP], rffi.INT)
def system_llimpl(command):
l_command = rffi.str2charp(command)
@@ -685,7 +665,7 @@
@registering(os.unlink)
def register_os_unlink(self):
- os_unlink = rffi.llexternal('unlink', [rffi.CCHARP], rffi.INT)
+ os_unlink = self.llexternal('unlink', [rffi.CCHARP], rffi.INT)
def unlink_llimpl(pathname):
l_pathname = rffi.str2charp(pathname)
@@ -699,12 +679,7 @@
@registering(os.chdir)
def register_os_chdir(self):
- if sys.platform.startswith('win'):
- INCLUDES = []
- else:
- INCLUDES = ['unistd.h']
- os_chdir = rffi.llexternal('chdir', [rffi.CCHARP], rffi.INT,
- includes=INCLUDES)
+ os_chdir = self.llexternal('chdir', [rffi.CCHARP], rffi.INT)
def chdir_llimpl(path):
l_path = rffi.str2charp(path)
@@ -719,15 +694,12 @@
@registering(os.mkdir)
def register_os_mkdir(self):
if os.name == 'nt':
- INCLUDES = []
ARG2 = [] # no 'mode' argument on Windows
arg2 = []
else:
- INCLUDES = ['sys/stat.h', 'sys/types.h']
ARG2 = [rffi.MODE_T]
arg2 = [int]
- os_mkdir = rffi.llexternal('mkdir', [rffi.CCHARP]+ARG2, rffi.INT,
- includes=INCLUDES)
+ os_mkdir = self.llexternal('mkdir', [rffi.CCHARP]+ARG2, rffi.INT)
def mkdir_llimpl(pathname, *opt_mode):
l_pathname = rffi.str2charp(pathname)
@@ -743,12 +715,7 @@
@registering(os.rmdir)
def register_os_rmdir(self):
- if sys.platform.startswith('win'):
- INCLUDES = []
- else:
- INCLUDES = ['unistd.h']
- os_rmdir = rffi.llexternal('rmdir', [rffi.CCHARP], rffi.INT,
- includes=INCLUDES)
+ os_rmdir = self.llexternal('rmdir', [rffi.CCHARP], rffi.INT)
def rmdir_llimpl(pathname):
l_pathname = rffi.str2charp(pathname)
@@ -763,13 +730,10 @@
@registering(os.chmod)
def register_os_chmod(self):
if os.name == 'nt':
- INCLUDES = []
MODE_T = rffi.INT
else:
- INCLUDES = ['sys/stat.h', 'sys/types.h']
MODE_T = rffi.MODE_T
- os_chmod = rffi.llexternal('chmod', [rffi.CCHARP, MODE_T], rffi.INT,
- includes=INCLUDES)
+ os_chmod = self.llexternal('chmod', [rffi.CCHARP, MODE_T], rffi.INT)
def chmod_llimpl(path, mode):
l_path = rffi.str2charp(path)
@@ -783,7 +747,7 @@
@registering(os.rename)
def register_os_rename(self):
- os_rename = rffi.llexternal('rename', [rffi.CCHARP, rffi.CCHARP],
+ os_rename = self.llexternal('rename', [rffi.CCHARP, rffi.CCHARP],
rffi.INT)
def rename_llimpl(oldpath, newpath):
@@ -804,7 +768,7 @@
mode_t = rffi.INT
else:
mode_t = rffi.MODE_T
- os_umask = rffi.llexternal('umask', [mode_t], mode_t)
+ os_umask = self.llexternal('umask', [mode_t], mode_t)
def umask_llimpl(fd):
res = os_umask(rffi.cast(mode_t, fd))
@@ -815,9 +779,8 @@
@registering_if(os, 'kill')
def register_os_kill(self):
- os_kill = rffi.llexternal('kill', [rffi.PID_T, rffi.INT],
- rffi.INT,
- includes=['sys/types.h', 'signal.h'])
+ os_kill = self.llexternal('kill', [rffi.PID_T, rffi.INT],
+ rffi.INT)
def kill_llimpl(pid, sig):
res = os_kill(rffi.cast(rffi.PID_T, pid),
@@ -830,9 +793,8 @@
@registering_if(os, 'link')
def register_os_link(self):
- os_link = rffi.llexternal('link', [rffi.CCHARP, rffi.CCHARP],
- rffi.INT,
- includes = ['unistd.h'])
+ os_link = self.llexternal('link', [rffi.CCHARP, rffi.CCHARP],
+ rffi.INT)
def link_llimpl(oldpath, newpath):
l_oldpath = rffi.str2charp(oldpath)
@@ -848,9 +810,8 @@
@registering_if(os, 'symlink')
def register_os_symlink(self):
- os_symlink = rffi.llexternal('symlink', [rffi.CCHARP, rffi.CCHARP],
- rffi.INT,
- includes = ['unistd.h'])
+ os_symlink = self.llexternal('symlink', [rffi.CCHARP, rffi.CCHARP],
+ rffi.INT)
def symlink_llimpl(oldpath, newpath):
l_oldpath = rffi.str2charp(oldpath)
@@ -866,8 +827,7 @@
@registering_if(os, 'fork')
def register_os_fork(self):
- os_fork = rffi.llexternal('fork', [], rffi.PID_T,
- includes = ['sys/types.h', 'unistd.h'])
+ os_fork = self.llexternal('fork', [], rffi.PID_T)
def fork_llimpl():
childpid = os_fork()
@@ -880,7 +840,7 @@
@registering(os._exit)
def register_os__exit(self):
- os__exit = rffi.llexternal('_exit', [rffi.INT], lltype.Void)
+ os__exit = self.llexternal('_exit', [rffi.INT], lltype.Void)
def _exit_llimpl(status):
os__exit(rffi.cast(rffi.INT, status))
@@ -921,9 +881,8 @@
return int(getattr(os, name)(status))
fake.func_name = 'fake_' + name
- os_c_func = rffi.llexternal(name, [lltype.Signed],
- lltype.Signed, _callable=fake,
- includes=["sys/wait.h", "sys/types.h"])
+ os_c_func = self.llexternal(name, [lltype.Signed],
+ lltype.Signed, _callable=fake)
if name in self.w_star_returning_int:
def llimpl(status):
@@ -943,7 +902,7 @@
@registering_if(os, 'ttyname')
def register_os_ttyname(self):
- os_ttyname = rffi.llexternal('ttyname', [lltype.Signed], rffi.CCHARP)
+ os_ttyname = self.llexternal('ttyname', [lltype.Signed], rffi.CCHARP)
def ttyname_llimpl(fd):
l_name = os_ttyname(fd)
More information about the Pypy-commit
mailing list