[pypy-svn] r29148 - in pypy/dist/pypy/rpython: . ootypesystem ootypesystem/test

fijal at codespeak.net fijal at codespeak.net
Thu Jun 22 18:17:34 CEST 2006


Author: fijal
Date: Thu Jun 22 18:17:32 2006
New Revision: 29148

Modified:
   pypy/dist/pypy/rpython/ootypesystem/bltregistry.py
   pypy/dist/pypy/rpython/ootypesystem/test/test_bltann.py
   pypy/dist/pypy/rpython/rexternalobj.py
Log:
Removed unused code. Added more effective way of declaring methods.


Modified: pypy/dist/pypy/rpython/ootypesystem/bltregistry.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/bltregistry.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/bltregistry.py	Thu Jun 22 18:17:32 2006
@@ -11,6 +11,26 @@
 from pypy.rpython.lltypesystem.lltype import frozendict, isCompatibleType
 from types import MethodType
 
+class ArgDesc(object):
+    def __init__(self, name, ex_value):
+        self.name = name
+        self.example = ex_value
+
+class MethodDesc(object):
+    def __init__(self, args, retval):
+        self.num = 0
+        self.args = [self.convert_val(arg) for arg in args]
+        self.retval = self.convert_val(retval)
+    
+    def convert_val(self, val):
+        if isinstance(val, ArgDesc):
+            return val
+        elif isinstance(val, tuple):
+            return ArgDesc(*val)
+        else:
+            self.num += 1
+            return ArgDesc('v%d' % (self.num-1), val)
+
 class BasicMetaExternal(type):
     def _is_compatible(type2):
         return type(type2) is BasicMetaExternal
@@ -30,7 +50,7 @@
 class Analyzer(object):
     def __init__(self, name, value):
         self.name = name
-        self.args, self.retval = value
+        self.args, self.retval = [i.example for i in value.args], value.retval.example
     
     def __call__(self, *args):
         #for i in xrange(len(args)):
@@ -75,11 +95,9 @@
     def update_methods(self, _methods):
         _signs = {}
         for i, val in _methods.iteritems():
-            retval = getbookkeeper().annotation_from_example(val[1])
-            values = val[0]
-            if isinstance(val[0], dict):
-                values = val[0].values()
-            _signs[i] = tuple([getbookkeeper().annotation_from_example(j) for j in values]), retval
+            retval = getbookkeeper().annotation_from_example(val.retval.example)
+            values = [arg.example for arg in val.args]
+            _signs[i] = MethodDesc(tuple([getbookkeeper().annotation_from_example(j) for j in values]), retval)
             next = annmodel.SomeBuiltin(Analyzer(i, val), s_self = annmodel.SomeExternalBuiltin(self), methodname = i)
             next.const = True
             self._fields[i] = next

Modified: pypy/dist/pypy/rpython/ootypesystem/test/test_bltann.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/test/test_bltann.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/test/test_bltann.py	Thu Jun 22 18:17:32 2006
@@ -6,7 +6,7 @@
 from pypy.objspace.flow import FlowObjSpace
 from pypy.annotation.annrpython import RPythonAnnotator
 import exceptions
-from pypy.rpython.ootypesystem.bltregistry import BasicExternal, ExternalType
+from pypy.rpython.ootypesystem.bltregistry import BasicExternal, ExternalType, MethodDesc
 from pypy.rpython.ootypesystem.ootype import Signed, _static_meth, StaticMethod, Void
 from pypy.rpython.test.test_llinterp import interpret
 
@@ -55,7 +55,7 @@
     }
     
     _methods = {
-        'm' : ([1],2),
+        'm' : MethodDesc([1],2),
     }
 
 def test_bltn_method():

Modified: pypy/dist/pypy/rpython/rexternalobj.py
==============================================================================
--- pypy/dist/pypy/rpython/rexternalobj.py	(original)
+++ pypy/dist/pypy/rpython/rexternalobj.py	Thu Jun 22 18:17:32 2006
@@ -40,17 +40,6 @@
         return _external_type(self.knowntype)
     
     def rtype_getattr(self, hop):
-##        s_attr = hop.args_s[1]
-##        if s_attr.is_constant() and isinstance(s_attr.const, str):
-##            field = self.knowntype.get_field(s_attr.const)
-##            if isinstance(field, annmodel.SomeBuiltin):
-##                # we need to type it as static method
-##                return hop.args_v[0]
-##                #return hop.genop('oogetfield', hop.args_v, concretetype=self.lowleveltype)
-##            ll_type = field.rtyper_makerepr(hop.rtyper).lowleveltype
-##            return hop.genop('oogetfield', hop.args_v, ll_type)
-##        else:
-##            raise TyperError("getattr() with a non-constant attribute name")
         attr = hop.args_s[1].const
         s_inst = hop.args_s[0]
         if self.knowntype._methods.has_key(attr):
@@ -68,29 +57,8 @@
         vlist = hop.inputargs(self, ootype.Void, hop.args_r[2])
         s_attr = hop.args_s[1]
         return hop.genop('oosetfield', vlist)
-##        if s_attr.is_constant() and isinstance(s_attr.const, str):
-##            #field = self.knowntype.get_field(s_attr.const)
-##            #if isinstance(hop.args_v[2], Constant):
-##            #    hop.args_v[2] = hop.inputconst(field.rtyper_makerepr(hop.rtyper), hop.args_v[2].value)
-##            return hop.genop('oosetfield', hop.args_v, ootype.Void)
-##        else:
-##            raise TyperError("setattr() with a non-constant attribute name")
     
     def call_method(self, name, hop):
-        #args, retval = self.knowntype._methods[name]
-        #ll_args = [i.rtyper_makerepr(hop.rtyper) for i in args]
-        #if retval is None:
-        #    ll_retval = ootype.Void
-        #else:
-        #    ll_retval = retval.rtyper_makerepr(hop.rtyper)
-        #ar = hop.args_v[:]
-        #for i in xrange(1, len(ar)):
-        #    if isinstance(ar[i], Constant):
-        #        ar[i] = hop.inputconst(ll_args[i-1], ar[i].value)
-        #        ar[i].concretetype = ll_args[i-1].lowleveltype
-##        args = hop.inputargs(*hop.args_v)
-##        import pdb; pdb.set_trace()
-        #attr = hop.args_s[1].const
         vlist = hop.inputargs(self, *(hop.args_r[1:]))
         return hop.genop('oosend', [Constant(name)] + vlist, resulttype=hop.r_result)
     



More information about the Pypy-commit mailing list