[pypy-svn] r27681 - in pypy/dist/pypy/translator: c/test c/winproj/extension tool
tismer at codespeak.net
tismer at codespeak.net
Thu May 25 20:26:41 CEST 2006
Author: tismer
Date: Thu May 25 20:26:39 2006
New Revision: 27681
Modified:
pypy/dist/pypy/translator/c/test/test_wrapping.py
pypy/dist/pypy/translator/c/winproj/extension/extension.vcproj
pypy/dist/pypy/translator/tool/raymond.py
Log:
enhanced heuristics for which method to automatically wrap and which not.
The rule is: if a method is not special and starts with an underscore,
we ignore it.
Modified: pypy/dist/pypy/translator/c/test/test_wrapping.py
==============================================================================
--- pypy/dist/pypy/translator/c/test/test_wrapping.py (original)
+++ pypy/dist/pypy/translator/c/test/test_wrapping.py Thu May 25 20:26:39 2006
@@ -156,6 +156,7 @@
assert res == DemoClass(2, 3).demo()
assert (obj + obj).demo() == 10
assert hasattr(m, '__init__')
+ assert m.zweiundvierzig == 42
if __name__=='__main__':
test_expose_classes()
Modified: pypy/dist/pypy/translator/c/winproj/extension/extension.vcproj
==============================================================================
--- pypy/dist/pypy/translator/c/winproj/extension/extension.vcproj (original)
+++ pypy/dist/pypy/translator/c/winproj/extension/extension.vcproj Thu May 25 20:26:39 2006
@@ -208,7 +208,7 @@
</File>
</Filter>
<File
- RelativePath="F:\tmp\usession-485\testing_1\testing_1.c">
+ RelativePath="F:\tmp\usession-502\testing_1\testing_1.c">
</File>
</Files>
<Globals>
Modified: pypy/dist/pypy/translator/tool/raymond.py
==============================================================================
--- pypy/dist/pypy/translator/tool/raymond.py (original)
+++ pypy/dist/pypy/translator/tool/raymond.py Thu May 25 20:26:39 2006
@@ -30,6 +30,8 @@
if arity == 3 and '_set' in fname:
ann[-1] = object
SPECIAL_METHODS[fname] = ann
+ # __init__ is not in the table.
+ SPECIAL_METHODS['__init__'] = [None]
setup_special_methods()
def get_annotation(func, pre=[]):
@@ -49,6 +51,11 @@
ret = [thetype or cls for thetype in pattern]
return ret
+def should_expose_method(func):
+ # expose all special methods but hide those starting with _
+ name = func.__name__
+ return name in SPECIAL_METHODS or not name.startswith('_')
+
def get_compiled_module(func, view=conftest.option.view, inline_threshold=1,
use_boehm=False, exports=None):
from pypy.translator.translator import TranslationContext
@@ -78,9 +85,10 @@
rtyper.add_wrapper(clsdef)
for obj in cls.__dict__.values():
if isinstance(obj, types.FunctionType):
- if not ann.bookkeeper.getdesc(obj).querycallfamily():
- # not annotated, so enforce it
- ann.build_types(obj, get_annotation(obj, [cls]), complete_now=False)
+ if should_expose_method(obj):
+ if not ann.bookkeeper.getdesc(obj).querycallfamily():
+ # not annotated, so enforce it
+ ann.build_types(obj, get_annotation(obj, [cls]), complete_now=False)
elif isinstance(obj, property):
for obj in obj.fget, obj.fset, obj.fdel:
if obj and not ann.bookkeeper.getdesc(obj).querycallfamily():
More information about the Pypy-commit
mailing list