S X 10.6.7).
>
> Should I open a bug on the pypy tracker?
Yes please !
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
2011/5/2 Roger Binns :
> There is no way you could have called a
> function provided by the module if the module itself had been freed.
Are you sure?
from mymodule import func
del sys.modules['mymodule']
func()
--
Amaury Forgeot d'Arc
___
adState_Get() and PyTraceback_here. As
> long as the signature of AddTraceBackHere can remain the same then I don't
> care what the body inside is for pypy.
Yes, we've implemented PyTraceback_here so that it works exactly for this usage.
Can you check whether pypy does the r
ThreadState creation and suppression
- PyInterpreter creation and suppression
- Py_Initialize and Py_Finalize (to embed a python interpreter inside
an application)
- Some trace and Traceback management functions that are not even
documented (but used by Cython :-))
--
Amaury Fo
provide a RPython implementation of
the associative container, I'd be happy to test it.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
py/module/cpyext/pyobject.py; the main functions are
create_ref() and from_ref().
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
2011/3/23 Laura Creighton :
> I guess the question is, do we want to refer to 'default' or to 'tip' ?
"tip" refers to the last committed change, and may belongs to any
development branch
--
Amaury Forgeot d'Arc
_
ced the rev number with "default":
https://bitbucket.org/pypy/pypy/src/default/pypy/doc/
Another branch name should work equally.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
/rdict.py#cl-712
And probably many more...
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
d, and true if it worked. Using cas you
> can build mutexes, shared objects, etc.
In pypy/module/thread/ll_thread.py, allocate_lock() creates a Lock object,
similar to the Python's thread.Lock.
Careful though with threads: most of PyPy's garbage collectors are not
thread-s
bage collectors are
not (yet) thread-safe.
See better explanations about the GIL in CPython:
http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock
http://effbot.org/pyfaq/can-t-we-get-rid-of-the-global-interpreter-lock.htm
--
Amaury Forgeot d'Arc
i = PyTuple_GetItem(t, 0);
> + PyTuple_GetItem(t, 0);
> + Py_DECREF(t);
> + return PyInt_FromLong(PyInt_AsLong(i));
> + """),
This example is wrong: you don't own the reference to int(42);
after the tuple is r
2011/2/3 Maciej Fijalkowski :
> You should make PyPy print warnings
>> when it encounters mixed-type classes :)
>>
> That's not a bad idea actually. Maybe with something like some -X option?
If we use the warnings module to emit JitWarnings, the option could be
-Wd::JitWarn
rding to a
comment in rffi.py, ensures that the GIL won't be released.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
ch of the regular floating point code
> seems to be slower in PyPy as well.
The standard operations, or the math module?
It seems that every function in the math module releases the GIL.
This may explain some slowness.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
, though.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
ion module for the host Python
(the one which runs the tests).
You should check that the link command finds the correct Python27.lib,
corresponding to your
installation of Python.
btw, are you really running a 64bit Python?
--
Amaury Forgeot d'Arc
___
2011/2/1 Maciej Fijalkowski :
> Anyone feeling like looking into this:
>
> http://speed.pypy.org/changes/?tre=10&rev=41510:77f94f44989a&exe=3&env=tannit
This show benchmarks for pypy *without* JIT.
the pypy-c-jit figures are more positive.
--
t work;
pypy's compilation tools implicitly assume that sizeof(long)==sizeof(void*)
Before running a translation, could you run the tests in pypy/translator/c ?
in the pypy directory, run:
python test_all.py translator/c
I'd like at least the files "test_genc" and "test
nnot
be processed.
I'll try to fix it, in the meantime I suggest you to skip this module:
python translate.py targetpypystandalone --withoutmod-_hashlib
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
fter that the translation operation stops and the debugger kicks in.
But these are *warnings*. Which error do you get exactly? do you have
a (red) traceback?
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
ll might fail. Since
# there's nothing we can do about such failures and they annoy
# the end users, we suppress the traceback.
try:
self.close()
except:
pass
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
sion of pypy are you using, what are you trying to do,
are there some kind of subprocesses, etc etc.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
ion modules, but I don't have the time nor
the interest
to do it currently.
Would you like to do these experiments yourself, and report us the real
status of threads in pypy extensions?
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
I function will
grab the GIL for the duration of the call (yes, even Py_INCREF)
cpyext is maybe already thread-safe, only awfully slow...
But this is just a guess, from looking at the source code.
I'd be grateful if you could write a custom module and do some tests
in this area,
with and wit
g like::
./translate.py -Ojit targetpypystandalone.py
--with-external-module=/path/to/my/psycopg2
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
Hi,
2010/12/23 Maciej Fijalkowski
> CDLL(None) (or LoadLibrary(None)) is supposed to return to you the
> whole namespace (all loaded libraries). It's unsupported as far as I
> can tell.
It should work by now (on Unix platforms of course).
--
Amaury
ems that all changes are listed, even those who happen to be in another
branch.
Is it possible to filter the list and only display the "default" branch?
Cheers,
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
Hi
2010/12/9 Dan Stromberg
> Is there a known problem with pypy's ctypes?
Yes, several of them have already been fixed in trunk, especially
about memory chunks being freed too early.
--
Amaury Forgeot d'Arc
___
pypy-dev@codes
o pythonapi.PyString_AsString could be removed in
OpenGL/arrays/strings.py:
def dataPointer(value):
return ctypes.cast(ctypes.c_char_p(value), ctypes.c_void_p).value
I don't know about the other function, though.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
are present, the translation should build the
pyexpat module:
Python 2.5.2 (79656, Nov 29 2010, 21:05:28)
[PyPy 1.4.0] on linux2
>>>> import pyexpat
>>>> pyexpat
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
karound such issues?
>
As usual:
import gc
gc.collect()
Calling gc.collect() is indeed a good idea if the code does not explicitly
close the files.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
les with it, someone is debugging now.
> Besides I don't think there are any working (unless someone wrote a
> pure-python one)
>
PyExpat is now a built-in module, implemented in RPython,
and should have reasonable performance.
--
Amaury Forgeot d'Arc
_
ok it over.
I don't know exactly what gdbm is, but it looks very similar to dbm.py
already in pypy:
http://codespeak.net/svn/pypy/trunk/lib_pypy/dbm.py
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
t; 1 year
> < 2 years
I will certainly give up before this delay.
At the moment, 1/3 of the files in the test suite pass without error,
they were zero yesterday.
We need volunteers to help us and implement the failing/missing parts!
--
Amaury Forgeot d'Arc
de there could be
applied to static code.
Bottom line: if you want to generate efficient C code from python, use (and
improve) Shedskin. If you want python code to run faster, don't translate
anything, and use the PyPy interpreter.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
2010/9/9 Andy :
> Thanks Antonio.
>
> So right now there's no way to run PyPy JIT on Linux 64 bit?
Yes there is!
Armin merged the asmgcc-64 branch yesterday.
You have to use trunk version of PyPy, and build it yourself.
--
Amaury
Django directory, run "pypy setup.py install"
And tell us how it behaves!
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
mplates, for example,
except that it's written in Python :-) )
Shedskin on the other hand performs a more direct translation of
Python code (it uses the ast)
Both projects don't have the same goals.
--
Amaury Forgeot d'Arc
___
pypy-dev@cod
written in plain full Python,
and it's as fast as a C or RPython implementation.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
ort_callback().
Why are you passing _callable=stream_callback?
It should be enough to pass stream_callback directly as a function argument.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
tform.
Or just skip the test: for what I know, --shared is not really needed
on Unix platforms.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
to make
> them
> useful to JIT most easily?
If efficient python code needs this, I'd better write the loop in C
and explicitly choose the types.
The C code could be inlined in the python script, and compiled on demand.
At least you'll know what you get.
--
Amaury Forgeot d'Arc
ndard on unix; moreover, if we install
> pypy in say /opt/pypy1.2, it would be hard to put a binary in /usr/bin without
> hardcoding the path to pypy1.2 somewhere.
Is it possible to just put a symlink, or a small script in /usr/bin?
--
Amaury Forgeot d'Arc
___
h
> FIXME or XXX, so there's not much more to say about that... I'd really
> appreciate anyone who's willing to take a look.
All this looks quite good, except for the second cast - it should be
pbyteorder[0] = rffi.cast(rffi.INT, byteorder)
And I s
atch in your CPython checkout
4. Run make text again with PyPy in your Python path.
5. Voila, the stubs.py file will be updated.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
PyDict_ and PyComplex_ functions are probably the
most easy to implement, and a good way to enter the code of the cpyext
module.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
out, I'd also like to be on autonosy.
>
> me too :-)
What about a mailing list, similar to Python-bugs-list?
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
generate a makefile (gen_makefile() in
http://codespeak.net/svn/pypy/trunk/pypy/translator/c/genc.py )
but it is not used in all configurations:
In the same file, see the call to execute_makefile().
-Ojit uses the makefile, though.
--
Amaury Forgeot d'Arc
__
__repr__... which are implemented as MultiMethods:
float__Int in intobject.py, for example.
The magic that converts these functions to type methods is in
pypy.objspace.std.register_all()
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
ommand line warning D9024 : unrecognized source file
> type
> 'Wang\\pypy-trunk\\pypy\\translator\\c', object file assumed
> [platform:ERROR] cl : Command line warning D9027 : source file
> 'Wang\\pypy-trunk
> \\pypy\\translator\\c' ignored
I sugge
you can access items by their position in the tuple, the index
value must be known at translation time (for type inference to
succeed).
It is very similar to the C++ boost::tuple template class.
Yet another reason why it would be difficult to rewrite the python
standard library in RPython...
ge, even if types are
not explicit in the code, but determined by the translator. For example,
os.open() accepts a string for its first argument, so it cannot accept
unicode.
A RPython library would be quite different from the CPython standard
library.
--
Amaury Forgeot d'Arc
_
-
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
m still trying to understand the control flow of this function
(there are 68 jumps...)
and why trackgcroot fails to find the value at the origin of some register.
--
Amaury Forgeot d'Arc
function.s
Description: Binary data
___
pypy-dev
ste.pocoo and posted it
> here: http://paste.pocoo.org/show/151706/
> (I've also attached it)
Unfortunately, the file you sent has been truncated (before the point
where it fails)
Can you please run
rm implement_9.s
make implement_9.s
to regenera
gt; Here is the full run log: http://paste.pocoo.org/show/151639/
Unfortunately, the log does not show all compilation output.
Again you should do it manually:
cd /var/folders/S+/S+mQx368HdO8O9qxkcyoQk+++TI/-Tmp-/usession-trunk-0/testing_1
make
--
Amaur
pu).
>
> the pypy-dist version compiles fine ...
>
> and/all guidance would be appreciated
Could you try the compilation step manually:
cd /tmp/usession-trunk-1/testing_1
make
and report the error you see there?
--
Amaury Forgeot d'Arc
_
do you use trunk version, or some release branch?
Recent development is done on trunk...
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
romp
> which I exited by typing "exit".
Err... no exception type, no message...
maybe some kind of out-of-memory condition?
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
ation:ERROR] File "C:\Dokumente und Einstellungen\Jan
> Wedel\Eigene Dat
> eien\repo\trunk\rialto\tools\pypy-1.1.0\pypy\translator\goal\translate.p
> y", line
> 273, in main
The first warnings are normal, they come from conditional code that
detects the
; What’s happening?
I'm afraid you will need a C compiler to translate pypy: the jvm
backend starts with the C implementation of functions, and ultimately
replaces system calls with java methods.
If you have the mingw32 compiler installed (and in your PATH), you may
try with the --cc=mingw32 opti
x27;
def dump_object(x):
import pickle
pickle.dump(x, open('data.pickle', 'w'))
''', filename =__file__).interphook('dump_object')
then you should be able to call it this way:
dump_object(space, w_instanceObject)
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
is could become a translation option, --objspace.std.unicodedb=4.1.0
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
differently when one argument is negative:
(-5 % 3) returns -2 in C, but 1 with python.
Now, I don't know whether RPython should absolutely implement python
semantics here.
RPython does not check for overflow for example.
--
Amaury Forgeot d'Arc
__
nerating comtypes.gen.Excel
>>>> xl.Workbooks.Add()
>>>> xl.Range("E1").Formula = "=SUM(A1:D1)"
>>>> print xl.Range("E1").Value
0.0
>>>> xl.Range("A1", "D1").Value = ("Data", 10, 20, 30)
>>>
On Wed, Jan 21, 2009 at 02:42, Vetoshkin Nikita wrote:
> I've got this now: http://pastebin.com/d4f3dfefd
Oh, and did you reset the /MD option? /MT is wrong now.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mai
execute] mt.exe..."
and which contain the manifest file name
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
On Wed, Jan 21, 2009 at 00:12, Vetoshkin Nikita wrote:
> Any ideas about building manifest file to proper msvcrt.dll linking?
I just changed the compilation tools in windows.py to build and embed
this manifest.
Can you try again?
--
Amaury Forgeot d&
I am currently trying to to it, borrowing ideas from cpython's code:
http://svn.python.org/view/python/trunk/Lib/distutils/msvc9compiler.py?rev=68081&view=markup
look for "manifest"
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
ig = SPLIT_CRITERIA * 4
else:
split_criteria_big = SPLIT_CRITERIA
Old versions of Visual Studio had problems with large files.
Even today, debug information is wrong when lineno>65536.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
s (during the "configure" phase) and /MD (=shared C runtime)
when building the pypy-c executable.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
12Kb is enough (this is the default
value in src/stack.h)
For debug build stacksize=4Mb works on win32.
I don't know the gcc options very well.
What do you think of adding these two:
"-DMAX_STACK_SIZE=%d" % (stacksize - 1024)
"-Wl,--stack,%d" %
Hello Antonio,
> revert r54745, as it breaks translation on linux
You were right to revert the change, but I am still surprised.
What kind of error did you get?
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/
ody objects, I will add (a slightly modified version of) the
needed files in
translator/c/src/libffi_msvc.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
ctypes/libffi_msvc/ffi.c',
'c:/afa/python/trunk/Modules/_ctypes/libffi_msvc/prep_cif.c',
'c:/afa/python/trunk/Modules/_ctypes/libffi_msvc/win32.c',
],
separate_module_sources = [c_source],
export_symbols = ['ffi_cal
ython/Modules/_ctypes/libffi_msvc directory,
do you have other ideas?
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
by one.
I am currently working on the _socket and select modules, with good
progress so far.
Cheers,
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
[c_int,c_int],
doc='glutInitWindowPosition( c_int(x), c_int(y) ) -> None',
argNames=('x', 'y'),
)
which is more pypy-friendly.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
same representation and have the same wrapper generated. Of
course I have something like rffi in mind...
I don't think that Swig itself can be used by pypy, I just wanted to
show that automatic wrapping of C++ is possible and can be used by
pypy, without the help of ctypes.
Cheers,
--
ntly, for example by quickly compiling an
extension module for each function we need.
It could be useful in some cases when ctypes cannot be used. For
example when the C "function" is actually a macro, or a C++ function.
Should we extend rffi to handle C++?
--
Amaury Forgeot d'Arc
ode and byte strings and it makes some part of the
> implementation less messy.
+1. Python3.0 takes the same direction, and RPython is supposed to be
a subset of CPython.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
(dst, src))
dst = src
src, typename = dest2src.pop(dst)
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
eds to know the precise sizeof and offsets
of each member.
I tried to modify the _socket module to also use rffi, and had the same problem.
I think that we will need a tool similar to
pypy.rpython.rctypes.tool.ctypes_platform, which generates and
compiles C code to get the different sizes and offsets.
(We
.wrap(msg))
> utime.unwrap_spec = [ObjSpace, str, W_Root]
>
> +def xxx(space):
> +"""xxx() -> pid
> +
> +Stuff
> + """
> +return 3
> +xxx.unwrap_spec = [ObjSpace]
> +
The function seems to return an unwrapped object.
does it behave better if you replace the return value with
something like space.wrap(3) ?
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
select.select([readend], [], [], 0)
assert iwtd == owtd == ewtd == []
writeend.send('X')
iwtd, owtd, ewtd = select.select([readend], [], [])
assert iwtd == [readend]
assert owtd == ewtd == []
print "Test OK&quo
e python 2.5 to debug pypy.
(A strange interaction between generator destructors, the sys.settrace
function and the current thread state. www.python.org/sf/1733973 shows
a simple case, filed by the pydev developer)
Python 2.4 seems to work correctly.
Hope this helps,
--
Amaury Forgeot d'Arc
__
eone could add this one, thanks.
>
> -Scott
I have seen the same behaviour, and my diffs are the same.
I just commited them.
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
low the results of the
nightly tests.
Of course your comments are most welcome... there were some rough
parts and I am sure I took the wrong way sometimes.
Cheers,
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
e: casting pointers looses track
of reference counting).
Anyway, I'll be happy to share my changes, to have another eye on the stuff...
If you agree, I will try to resurrect my work and send you a patch
later tonight.
> I could give a try..
You're welc
res = VirtualAlloc(LPVOID(), map_size, MEM_COMMIT|MEM_RESERVE,
+res = VirtualAlloc(PTR(), map_size, MEM_COMMIT|MEM_RESERVE,
PAGE_EXECUTE_READWRITE)
if not res:
raise MemoryError
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
g
translate.py standalone --usemodules=_demo
after I added your code in demo.py)
Unfortunately the complete translation takes too much memory for the
machine I'm currently working on, so I could not test completely.
And since its a Windows box, I had to remove the libc.pipe call completely...
Hope this helps.
It seems that many people are interested in the new rctypes way to
create modules...
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
.interpreter.baseobjspace import ObjSpace
> from ctypes import *
>
> libtcc = CDLL('/u/jiwon/proj/less-bus/libLESS.so')
> myprint0 = libtcc.TCC_Print
> myprint0.argtypes = [c_char_p]
> myprint0.restype = c_int
>
> def tcc_print0(sp
one, [name])
The first call is supposed to be the good one, but if it fails with an
ImportError, you get the error from the second call.
Is the ctypes module correctly installed?
--
Amaury Forgeot d'Arc
___
pypy-dev@codespeak.net
http://codespeak.net/mailman/listinfo/pypy-dev
94 matches
Mail list logo