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