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

Reply via email to