[pypy-commit] pypy default: translation fixes

arigo pypy.commits at gmail.com
Sun Jun 11 18:06:51 EDT 2017


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r91581:617de56df11b
Date: 2017-06-11 23:43 +0200
http://bitbucket.org/pypy/pypy/changeset/617de56df11b/

Log:	translation fixes

diff --git a/rpython/rlib/rposix_stat.py b/rpython/rlib/rposix_stat.py
--- a/rpython/rlib/rposix_stat.py
+++ b/rpython/rlib/rposix_stat.py
@@ -710,7 +710,7 @@
                 return win32_attribute_data_to_stat(win32traits, data)
 
         with lltype.scoped_alloc(
-                win32traits.BY_HANDLE_FILE_INFORMATION) as data:
+                win32traits.BY_HANDLE_FILE_INFORMATION, zero=True) as data:
             res = win32traits.GetFileInformationByHandle(hFile, data)
             errcode = rwin32.GetLastError_saved()
             rwin32.CloseHandle(hFile)
diff --git a/rpython/rlib/rwin32file.py b/rpython/rlib/rwin32file.py
--- a/rpython/rlib/rwin32file.py
+++ b/rpython/rlib/rwin32file.py
@@ -8,29 +8,14 @@
 from rpython.rlib.objectmodel import specialize
 from rpython.rlib.rarithmetic import intmask
 
- at specialize.memo()
-def make_win32_traits(traits):
+
+def GetCConfigGlobal():
     from rpython.rlib import rwin32
 
-    if traits.str is unicode:
-        suffix = 'W'
-    else:
-        suffix = 'A'
-
-    class CConfig:
+    class CConfigGlobal:
         _compilation_info_ = ExternalCompilationInfo(
             includes = ['windows.h', 'winbase.h', 'sys/stat.h'],
         )
-        WIN32_FIND_DATA = platform.Struct(
-            'struct _WIN32_FIND_DATA' + suffix,
-            # Only interesting fields
-            [('dwFileAttributes', rwin32.DWORD),
-             ('nFileSizeHigh', rwin32.DWORD),
-             ('nFileSizeLow', rwin32.DWORD),
-             ('ftCreationTime', rwin32.FILETIME),
-             ('ftLastAccessTime', rwin32.FILETIME),
-             ('ftLastWriteTime', rwin32.FILETIME),
-             ('cFileName', lltype.FixedSizeArray(traits.CHAR, 250))])
         ERROR_FILE_NOT_FOUND = platform.ConstantInteger(
             'ERROR_FILE_NOT_FOUND')
         ERROR_NO_MORE_FILES = platform.ConstantInteger(
@@ -93,7 +78,40 @@
              ('nFileIndexHigh', rwin32.DWORD),
              ('nFileIndexLow', rwin32.DWORD)])
 
-    config = platform.configure(CConfig)
+    return CConfigGlobal
+
+config_global = None
+
+
+ at specialize.memo()
+def make_win32_traits(traits):
+    from rpython.rlib import rwin32
+    global config_global
+
+    if traits.str is unicode:
+        suffix = 'W'
+    else:
+        suffix = 'A'
+
+    class CConfig:
+        _compilation_info_ = ExternalCompilationInfo(
+            includes = ['windows.h', 'winbase.h', 'sys/stat.h'],
+        )
+        WIN32_FIND_DATA = platform.Struct(
+            'struct _WIN32_FIND_DATA' + suffix,
+            # Only interesting fields
+            [('dwFileAttributes', rwin32.DWORD),
+             ('nFileSizeHigh', rwin32.DWORD),
+             ('nFileSizeLow', rwin32.DWORD),
+             ('ftCreationTime', rwin32.FILETIME),
+             ('ftLastAccessTime', rwin32.FILETIME),
+             ('ftLastWriteTime', rwin32.FILETIME),
+             ('cFileName', lltype.FixedSizeArray(traits.CHAR, 250))])
+
+    if config_global is None:
+        config_global = platform.configure(GetCConfigGlobal())
+    config = config_global.copy()
+    config.update(platform.configure(CConfig))
 
     def external(*args, **kwargs):
         kwargs['compilation_info'] = CConfig._compilation_info_


More information about the pypy-commit mailing list