Author: Amaury Forgeot d'Arc <[email protected]>
Branch: const-correctness
Changeset: r66933:eece652b55e2
Date: 2013-09-11 17:22 +0200
http://bitbucket.org/pypy/pypy/changeset/eece652b55e2/

Log:    Progress

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
@@ -70,16 +70,8 @@
     _compilation_info_ = CConfig._compilation_info_
 
 VA_LIST_P = rffi.VOIDP # rffi.COpaquePtr('va_list')
-CONST_STRING = lltype.Ptr(lltype.Array(lltype.Char,
-                                       hints={'nolength': True}),
-                          use_cache=False)
-CONST_WSTRING = lltype.Ptr(lltype.Array(lltype.UniChar,
-                                        hints={'nolength': True}),
-                           use_cache=False)
-assert CONST_STRING is not rffi.CCHARP
-assert CONST_STRING == rffi.CCHARP
-assert CONST_WSTRING is not rffi.CWCHARP
-assert CONST_WSTRING == rffi.CWCHARP
+CONST_STRING = rffi.CONST_CCHARP
+CONST_WSTRING = rffi.CONST_CWCHARP
 
 # FILE* interface
 FILEP = rffi.COpaquePtr('FILE')
diff --git a/pypy/module/cpyext/methodobject.py 
b/pypy/module/cpyext/methodobject.py
--- a/pypy/module/cpyext/methodobject.py
+++ b/pypy/module/cpyext/methodobject.py
@@ -20,10 +20,10 @@
 
 PyMethodDef = cpython_struct(
     'PyMethodDef',
-    [('ml_name', rffi.CCHARP),
+    [('ml_name', rffi.CONST_CCHARP),
      ('ml_meth', PyCFunction_typedef),
      ('ml_flags', rffi.INT_real),
-     ('ml_doc', rffi.CCHARP),
+     ('ml_doc', rffi.CONST_CCHARP),
      ])
 
 PyCFunctionObjectStruct = cpython_struct(
diff --git a/pypy/module/cpyext/stringobject.py 
b/pypy/module/cpyext/stringobject.py
--- a/pypy/module/cpyext/stringobject.py
+++ b/pypy/module/cpyext/stringobject.py
@@ -140,7 +140,8 @@
         # copy string buffer
         w_str = from_ref(space, ref)
         s = space.str_w(w_str)
-        ref_str.c_buffer = rffi.str2charp(s)
+        # remove 'const' modifier
+        ref_str.c_buffer = rffi.cast(rffi.CCHARP, rffi.str2charp(s))
     return ref_str.c_buffer
 
 @cpython_api([PyObject, rffi.CCHARPP, rffi.CArrayPtr(Py_ssize_t)], 
rffi.INT_real, error=-1)
@@ -153,7 +154,8 @@
         # copy string buffer
         w_str = from_ref(space, ref)
         s = space.str_w(w_str)
-        ref_str.c_buffer = rffi.str2charp(s)
+        # remove 'const' modifier
+        ref_str.c_buffer = rffi.cast(rffi.CCHARP, rffi.str2charp(s))
     buffer[0] = ref_str.c_buffer
     if length:
         length[0] = ref_str.c_size
diff --git a/pypy/module/cpyext/typeobjectdefs.py 
b/pypy/module/cpyext/typeobjectdefs.py
--- a/pypy/module/cpyext/typeobjectdefs.py
+++ b/pypy/module/cpyext/typeobjectdefs.py
@@ -160,7 +160,7 @@
 PyTypeObjectFields = []
 PyTypeObjectFields.extend(PyVarObjectFields)
 PyTypeObjectFields.extend([
-    ("tp_name", rffi.CCHARP), #E For printing, in format "<module>.<name>"
+    ("tp_name", rffi.CONST_CCHARP), #E For printing, in format 
"<module>.<name>"
     ("tp_basicsize", Py_ssize_t), #E  For allocation
     ("tp_itemsize", Py_ssize_t),  #E       "
 
diff --git a/pypy/module/crypt/interp_crypt.py 
b/pypy/module/crypt/interp_crypt.py
--- a/pypy/module/crypt/interp_crypt.py
+++ b/pypy/module/crypt/interp_crypt.py
@@ -7,7 +7,7 @@
     eci = ExternalCompilationInfo()
 else:
     eci = ExternalCompilationInfo(libraries=['crypt'])
-c_crypt = rffi.llexternal('crypt', [rffi.CCHARP, rffi.CCHARP], rffi.CCHARP,
+c_crypt = rffi.llexternal('crypt', [rffi.CONST_CCHARP, rffi.CONST_CCHARP], 
rffi.CCHARP,
                           compilation_info=eci, threadsafe=False)
 
 @unwrap_spec(word=str, salt=str)
diff --git a/rpython/rlib/_rsocket_rffi.py b/rpython/rlib/_rsocket_rffi.py
--- a/rpython/rlib/_rsocket_rffi.py
+++ b/rpython/rlib/_rsocket_rffi.py
@@ -2,7 +2,7 @@
 from rpython.rtyper.lltypesystem import rffi
 from rpython.rtyper.lltypesystem import lltype
 from rpython.rtyper.tool import rffi_platform as platform
-from rpython.rtyper.lltypesystem.rffi import CCHARP
+from rpython.rtyper.lltypesystem.rffi import CCHARP, CONST_CCHARP
 from rpython.translator.tool.cbuild import ExternalCompilationInfo
 from rpython.translator.platform import platform as target_platform
 
@@ -487,7 +487,7 @@
 
 socketconnect = external('connect', [socketfd_type, sockaddr_ptr, socklen_t], 
rffi.INT)
 
-getaddrinfo = external('getaddrinfo', [CCHARP, CCHARP,
+getaddrinfo = external('getaddrinfo', [CONST_CCHARP, CONST_CCHARP,
                         addrinfo_ptr,
                         lltype.Ptr(rffi.CArray(addrinfo_ptr))], rffi.INT)
 freeaddrinfo = external('freeaddrinfo', [addrinfo_ptr], lltype.Void)
@@ -500,13 +500,13 @@
 ntohs = external('ntohs', [rffi.USHORT], rffi.USHORT, threadsafe=False)
 
 if _POSIX:
-    inet_aton = external('inet_aton', [CCHARP, lltype.Ptr(in_addr)],
+    inet_aton = external('inet_aton', [CONST_CCHARP, lltype.Ptr(in_addr)],
                                 rffi.INT)
 
 inet_ntoa = external('inet_ntoa', [in_addr], rffi.CCHARP)
 
 if _POSIX:
-    inet_pton = external('inet_pton', [rffi.INT, rffi.CCHARP,
+    inet_pton = external('inet_pton', [rffi.INT, rffi.CONST_CCHARP,
                                               rffi.VOIDP], rffi.INT)
 
     inet_ntop = external('inet_ntop', [rffi.INT, rffi.VOIDP, CCHARP,
@@ -537,12 +537,12 @@
                                     sockaddr_ptr, socklen_t], ssize_t)
 socketshutdown = external('shutdown', [socketfd_type, rffi.INT], rffi.INT)
 gethostname = external('gethostname', [rffi.CCHARP, rffi.INT], rffi.INT)
-gethostbyname = external('gethostbyname', [rffi.CCHARP],
+gethostbyname = external('gethostbyname', [rffi.CONST_CCHARP],
                                 lltype.Ptr(cConfig.hostent))
 gethostbyaddr = external('gethostbyaddr', [rffi.VOIDP, rffi.INT, rffi.INT], 
lltype.Ptr(cConfig.hostent))
-getservbyname = external('getservbyname', [rffi.CCHARP, rffi.CCHARP], 
lltype.Ptr(cConfig.servent))
-getservbyport = external('getservbyport', [rffi.INT, rffi.CCHARP], 
lltype.Ptr(cConfig.servent))
-getprotobyname = external('getprotobyname', [rffi.CCHARP], 
lltype.Ptr(cConfig.protoent))
+getservbyname = external('getservbyname', [rffi.CONST_CCHARP, 
rffi.CONST_CCHARP], lltype.Ptr(cConfig.servent))
+getservbyport = external('getservbyport', [rffi.INT, rffi.CONST_CCHARP], 
lltype.Ptr(cConfig.servent))
+getprotobyname = external('getprotobyname', [rffi.CONST_CCHARP], 
lltype.Ptr(cConfig.protoent))
 
 if _POSIX:
     fcntl = external('fcntl', [socketfd_type, rffi.INT, rffi.INT], rffi.INT)
diff --git a/rpython/rlib/rdynload.py b/rpython/rlib/rdynload.py
--- a/rpython/rlib/rdynload.py
+++ b/rpython/rlib/rdynload.py
@@ -67,10 +67,10 @@
 
 
 if not _WIN32:
-    c_dlopen = external('dlopen', [rffi.CCHARP, rffi.INT], rffi.VOIDP)
+    c_dlopen = external('dlopen', [rffi.CONST_CCHARP, rffi.INT], rffi.VOIDP)
     c_dlclose = external('dlclose', [rffi.VOIDP], rffi.INT, threadsafe=False)
     c_dlerror = external('dlerror', [], rffi.CCHARP)
-    c_dlsym = external('dlsym', [rffi.VOIDP, rffi.CCHARP], rffi.VOIDP)
+    c_dlsym = external('dlsym', [rffi.VOIDP, rffi.CONST_CCHARP], rffi.VOIDP)
 
     DLLHANDLE = rffi.VOIDP
 
diff --git a/rpython/rlib/rlocale.py b/rpython/rlib/rlocale.py
--- a/rpython/rlib/rlocale.py
+++ b/rpython/rlib/rlocale.py
@@ -182,7 +182,7 @@
                   sandboxsafe=True)
 
 
-_setlocale = external('setlocale', [rffi.INT, rffi.CCHARP], rffi.CCHARP)
+_setlocale = external('setlocale', [rffi.INT, rffi.CONST_CCHARP], rffi.CCHARP)
 
 def setlocale(category, locale):
     if cConfig.LC_MAX is not None:
diff --git a/rpython/rlib/ropenssl.py b/rpython/rlib/ropenssl.py
--- a/rpython/rlib/ropenssl.py
+++ b/rpython/rlib/ropenssl.py
@@ -185,9 +185,9 @@
              lltype.Void)
 
 if HAVE_OPENSSL_RAND:
-    ssl_external('RAND_add', [rffi.CCHARP, rffi.INT, rffi.DOUBLE], lltype.Void)
+    ssl_external('RAND_add', [rffi.CONST_CCHARP, rffi.INT, rffi.DOUBLE], 
lltype.Void)
     ssl_external('RAND_status', [], rffi.INT)
-    ssl_external('RAND_egd', [rffi.CCHARP], rffi.INT)
+    ssl_external('RAND_egd', [rffi.CONST_CCHARP], rffi.INT)
 ssl_external('SSL_CTX_new', [SSL_METHOD], SSL_CTX)
 ssl_external('SSL_get_SSL_CTX', [SSL], SSL_CTX)
 ssl_external('TLSv1_method', [], SSL_METHOD)
@@ -289,7 +289,7 @@
 ssl_external('CRYPTO_free', [rffi.VOIDP], lltype.Void)
 libssl_OPENSSL_free = libssl_CRYPTO_free
 
-ssl_external('SSL_write', [SSL, rffi.CCHARP, rffi.INT], rffi.INT)
+ssl_external('SSL_write', [SSL, rffi.CONST_CCHARP, rffi.INT], rffi.INT)
 ssl_external('SSL_pending', [SSL], rffi.INT)
 ssl_external('SSL_read', [SSL, rffi.CCHARP, rffi.INT], rffi.INT)
 
@@ -312,7 +312,7 @@
     'OpenSSL_add_all_digests', [], lltype.Void)
 EVP_get_digestbyname = external(
     'EVP_get_digestbyname',
-    [rffi.CCHARP], EVP_MD)
+    [rffi.CONST_CCHARP], EVP_MD)
 EVP_DigestInit = external(
     'EVP_DigestInit',
     [EVP_MD_CTX, EVP_MD], rffi.INT)
diff --git a/rpython/rlib/rzlib.py b/rpython/rlib/rzlib.py
--- a/rpython/rlib/rzlib.py
+++ b/rpython/rlib/rzlib.py
@@ -128,7 +128,7 @@
      rffi.INT, # window bits
      rffi.INT, # mem level
      rffi.INT, # strategy
-     rffi.CCHARP, # version
+     rffi.CONST_CCHARP, # version
      rffi.INT], # stream size
     rffi.INT)
 _deflate = zlib_external('deflate', [z_stream_p, rffi.INT], rffi.INT)
@@ -147,7 +147,7 @@
     'inflateInit2_',
     [z_stream_p, # stream
      rffi.INT, # window bits
-     rffi.CCHARP, # version
+     rffi.CONST_CCHARP, # version
      rffi.INT], # stream size
     rffi.INT)
 _inflate = zlib_external('inflate', [z_stream_p, rffi.INT], rffi.INT)
diff --git a/rpython/rtyper/lltypesystem/ll2ctypes.py 
b/rpython/rtyper/lltypesystem/ll2ctypes.py
--- a/rpython/rtyper/lltypesystem/ll2ctypes.py
+++ b/rpython/rtyper/lltypesystem/ll2ctypes.py
@@ -326,6 +326,7 @@
         return get_ctypes_type(FIELDTYPE)
 
 def get_ctypes_type(T, delayed_builders=None, cannot_delay=False):
+    T = lltype.remove_const(T)  # XXX Do we care?
     # Check delayed builders
     if cannot_delay and delayed_builders:
         for T2, builder in delayed_builders:
diff --git a/rpython/rtyper/lltypesystem/lltype.py 
b/rpython/rtyper/lltypesystem/lltype.py
--- a/rpython/rtyper/lltypesystem/lltype.py
+++ b/rpython/rtyper/lltypesystem/lltype.py
@@ -1212,7 +1212,7 @@
             if field_name in self._T._flds:
                 T1 = self._T._flds[field_name]
                 T2 = typeOf(val)
-                if T1 == T2:
+                if isConvertibleFrom(T1, T2):
                     setattr(self._obj, field_name, val)
                 else:
                     raise TypeError("%r instance field %r:\n"
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to