[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