[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