Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: 
Changeset: r73903:25d7d69e6a1c
Date: 2014-10-11 15:51 +0100
http://bitbucket.org/pypy/pypy/changeset/25d7d69e6a1c/

Log:    create @typer_for decorator, similar to @analyzer_for

diff --git a/rpython/rtyper/rbuiltin.py b/rpython/rtyper/rbuiltin.py
--- a/rpython/rtyper/rbuiltin.py
+++ b/rpython/rtyper/rbuiltin.py
@@ -10,6 +10,15 @@
 from rpython.tool.pairtype import pairtype
 
 
+BUILTIN_TYPER = {}
+
+def typer_for(func):
+    def wrapped(rtyper_func):
+        BUILTIN_TYPER[func] = rtyper_func
+        return func
+    return wrapped
+
+
 class __extend__(annmodel.SomeBuiltin):
     def rtyper_makerepr(self, rtyper):
         if not self.is_constant():
@@ -182,11 +191,13 @@
 
 # ____________________________________________________________
 
+@typer_for(bool)
 def rtype_builtin_bool(hop):
     # not called any more?
     assert hop.nb_args == 1
     return hop.args_r[0].rtype_bool(hop)
 
+@typer_for(int)
 def rtype_builtin_int(hop):
     if isinstance(hop.args_s[0], annmodel.SomeString):
         assert 1 <= hop.nb_args <= 2
@@ -194,24 +205,30 @@
     assert hop.nb_args == 1
     return hop.args_r[0].rtype_int(hop)
 
+@typer_for(float)
 def rtype_builtin_float(hop):
     assert hop.nb_args == 1
     return hop.args_r[0].rtype_float(hop)
 
+@typer_for(chr)
 def rtype_builtin_chr(hop):
     assert hop.nb_args == 1
     return hop.args_r[0].rtype_chr(hop)
 
+@typer_for(unichr)
 def rtype_builtin_unichr(hop):
     assert hop.nb_args == 1
     return hop.args_r[0].rtype_unichr(hop)
 
+@typer_for(unicode)
 def rtype_builtin_unicode(hop):
     return hop.args_r[0].rtype_unicode(hop)
 
+@typer_for(bytearray)
 def rtype_builtin_bytearray(hop):
     return hop.args_r[0].rtype_bytearray(hop)
 
+@typer_for(list)
 def rtype_builtin_list(hop):
     return hop.args_r[0].rtype_bltn_list(hop)
 
@@ -233,6 +250,8 @@
     vlist = hop.inputargs(lltype.SignedLongLong)
     return vlist[0]
 
+
+@typer_for(min)
 def rtype_builtin_min(hop):
     v1, v2 = hop.inputargs(hop.r_result, hop.r_result)
     hop.exception_cannot_occur()
@@ -243,22 +262,25 @@
         return i1
     return i2
 
+
+@typer_for(max)
 def rtype_builtin_max(hop):
     v1, v2 = hop.inputargs(hop.r_result, hop.r_result)
     hop.exception_cannot_occur()
     return hop.gendirectcall(ll_max, v1, v2)
 
+def ll_max(i1, i2):
+    if i1 > i2:
+        return i1
+    return i2
 
+
+@typer_for(reversed)
 def rtype_builtin_reversed(hop):
     hop.exception_cannot_occur()
     return hop.r_result.newiter(hop)
 
 
-def ll_max(i1, i2):
-    if i1 > i2:
-        return i1
-    return i2
-
 def rtype_object__init__(hop):
     hop.exception_cannot_occur()
 
@@ -325,19 +347,11 @@
 
     return hop.dispatch()
 
-rtype_builtin_range = rrange.rtype_builtin_range
-rtype_builtin_xrange = rrange.rtype_builtin_xrange
-rtype_builtin_enumerate = rrange.rtype_builtin_enumerate
+typer_for(range)(rrange.rtype_builtin_range)
+typer_for(xrange)(rrange.rtype_builtin_xrange)
+typer_for(enumerate)(rrange.rtype_builtin_enumerate)
 
 
-# collect all functions
-import __builtin__
-BUILTIN_TYPER = {}
-for name, value in globals().items():
-    if name.startswith('rtype_builtin_'):
-        original = getattr(__builtin__, name[14:])
-        BUILTIN_TYPER[original] = value
-
 BUILTIN_TYPER[getattr(object.__init__, 'im_func', object.__init__)] = (
     rtype_object__init__)
 
@@ -684,6 +698,8 @@
 BUILTIN_TYPER[llmemory.cast_adr_to_int] = rtype_cast_adr_to_int
 BUILTIN_TYPER[llmemory.cast_int_to_adr] = rtype_cast_int_to_adr
 
+
+@typer_for(isinstance)
 def rtype_builtin_isinstance(hop):
     hop.exception_cannot_occur()
     if hop.s_result.is_constant():
@@ -714,6 +730,8 @@
     classdef = s_class.any_description().getuniqueclassdef()
     return rclass.rtype_new_instance(hop.rtyper, classdef, hop.llops)
 
+
+@typer_for(hasattr)
 def rtype_builtin_hasattr(hop):
     hop.exception_cannot_occur()
     if hop.s_result.is_constant():
@@ -740,8 +758,6 @@
     return v_result
 
 BUILTIN_TYPER[objectmodel.instantiate] = rtype_instantiate
-BUILTIN_TYPER[isinstance] = rtype_builtin_isinstance
-BUILTIN_TYPER[hasattr] = rtype_builtin_hasattr
 BUILTIN_TYPER[objectmodel.r_dict] = rtype_r_dict
 BUILTIN_TYPER[annmodel.SomeOrderedDict.knowntype] = rtype_ordered_dict
 BUILTIN_TYPER[objectmodel.r_ordereddict] = rtype_ordered_dict
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to