Author: Philip Jenvey <pjen...@underboss.org> Branch: py3.3 Changeset: r81415:223e23e2bfd3 Date: 2015-12-21 13:16 -0800 http://bitbucket.org/pypy/pypy/changeset/223e23e2bfd3/
Log: fix translation on OSX diff --git a/pypy/module/time/__init__.py b/pypy/module/time/__init__.py --- a/pypy/module/time/__init__.py +++ b/pypy/module/time/__init__.py @@ -1,6 +1,6 @@ from pypy.interpreter.mixedmodule import MixedModule -from .interp_time import CLOCK_CONSTANTS, cConfig +from .interp_time import CLOCK_CONSTANTS, HAS_CLOCK_GETTIME, cConfig import os _WIN = os.name == "nt" @@ -24,10 +24,11 @@ 'process_time': 'interp_time.process_time', } - if os.name == "posix": + if HAS_CLOCK_GETTIME: interpleveldefs['clock_gettime'] = 'interp_time.clock_gettime' interpleveldefs['clock_settime'] = 'interp_time.clock_settime' interpleveldefs['clock_getres'] = 'interp_time.clock_getres' + if os.name == "posix": interpleveldefs['tzset'] = 'interp_time.tzset' for constant in CLOCK_CONSTANTS: diff --git a/pypy/module/time/interp_time.py b/pypy/module/time/interp_time.py --- a/pypy/module/time/interp_time.py +++ b/pypy/module/time/interp_time.py @@ -14,6 +14,7 @@ _POSIX = os.name == "posix" _WIN = os.name == "nt" +_MACOSX = sys.platform == "darwin" _CYGWIN = sys.platform == "cygwin" _time_zones = [] @@ -106,6 +107,8 @@ _includes = ["time.h"] if _POSIX: _includes.append('sys/time.h') +if _MACOSX: + _includes.append('mach/mach_time.h') class CConfig: _compilation_info_ = ExternalCompilationInfo( @@ -147,7 +150,7 @@ ("tm_mon", rffi.INT), ("tm_year", rffi.INT), ("tm_wday", rffi.INT), ("tm_yday", rffi.INT), ("tm_isdst", rffi.INT)]) -if sys.platform == 'darwin': +if _MACOSX: CConfig.TIMEBASE_INFO = platform.Struct("struct mach_timebase_info", [ ("numer", rffi.UINT), ("denom", rffi.UINT), @@ -181,6 +184,7 @@ timeval = cConfig.timeval CLOCKS_PER_SEC = cConfig.CLOCKS_PER_SEC +HAS_CLOCK_GETTIME = cConfig.has_clock_gettime clock_t = cConfig.clock_t tm = cConfig.tm glob_buf = lltype.malloc(tm, flavor='raw', zero=True, immortal=True) @@ -194,7 +198,7 @@ c_mktime = external('mktime', [TM_P], rffi.TIME_T) c_localtime = external('localtime', [rffi.TIME_TP], TM_P, save_err=rffi.RFFI_SAVE_ERRNO) -if cConfig.has_clock_gettime: +if HAS_CLOCK_GETTIME: from rpython.rlib.rtime import TIMESPEC, c_clock_gettime c_clock_settime = external('clock_settime', [lltype.Signed, lltype.Ptr(TIMESPEC)], rffi.INT, @@ -619,7 +623,7 @@ return space.wrap(float(tt)) -if cConfig.has_clock_gettime: +if HAS_CLOCK_GETTIME: def _timespec_to_seconds(timespec): return int(timespec.c_tv_sec) + int(timespec.c_tv_nsec) * 1e-9 @@ -728,20 +732,22 @@ def monotonic(space): return space.wrap(_GetTickCount64() * 1e-3) -elif sys.platform == 'darwin': - # untested so far +elif _MACOSX: c_mach_timebase_info = external('mach_timebase_info', - [lltype.Ptr(TIMEBASE_INFO)], lltype.Void) - c_mach_absolute_time = external('mach_absolute_time', [], lltype.ULONGLONG) + [lltype.Ptr(cConfig.TIMEBASE_INFO)], + lltype.Void) + c_mach_absolute_time = external('mach_absolute_time', [], rffi.ULONGLONG) - timebase_info = lltype.malloc(TIMEBASE_INFO, flavor='raw', zero=True, - immortal=True) + timebase_info = lltype.malloc(cConfig.TIMEBASE_INFO, flavor='raw', + zero=True, immortal=True) - def monotonic(): - if timebase_info.denom == 0: - mach_timebase_info(timebase_info) - time = mach_absolute_time() - nanosecs = time * timebase_info.numer / timebase_info.denom + def monotonic(space): + if rffi.getintfield(timebase_info, 'c_denom') == 0: + c_mach_timebase_info(timebase_info) + time = rffi.cast(lltype.Signed, c_mach_absolute_time()) + numer = rffi.getintfield(timebase_info, 'c_numer') + denom = rffi.getintfield(timebase_info, 'c_denom') + nanosecs = time * numer / denom secs = nanosecs / 10**9 rest = nanosecs % 10**9 return space.wrap(float(secs) + float(rest) * 1e-9) @@ -789,7 +795,7 @@ have_times = hasattr(rposix, 'c_times') def process_time(space): - if cConfig.has_clock_gettime and ( + if HAS_CLOCK_GETTIME and ( cConfig.CLOCK_PROF is not None or cConfig.CLOCK_PROCESS_CPUTIME_ID is not None): if cConfig.CLOCK_PROF is not None: @@ -811,7 +817,7 @@ if have_times: with lltype.scoped_alloc(rposix.TMS) as tms: ret = rposix.c_times(tms) - if ret != -1: - cpu_time = tms.c_tms_utime + tms.c_tms_stime + if rffi.cast(lltype.Signed, ret) != -1: + cpu_time = float(tms.c_tms_utime + tms.c_tms_stime) return space.wrap(cpu_time / rposix.CLOCK_TICKS_PER_SECOND) return clock(space) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit