[pypy-dev] Re: [pypy-svn] r13653 - pypy/dist/pypy/rpython[POSSIBLE SPAM]

Samuele Pedroni pedronis at strakt.com
Tue Jun 21 16:25:33 CEST 2005


Ben.Young at risk.sungard.com wrote:

>Hi Armin,
>
>Not sure if it was this changelist, but you are new generating c with 
>nested comments, which doesn't seem to be allowed by all compilers.
>
>e.g.
>
>        /* /* nothing */ = v106238->z_cls_my_method; */
>
>  
>
this has just been fixed. Some tests failure were indeed provoked by it.


>Cheers,
>Ben
>
>pypy-svn-bounces at codespeak.net wrote on 21/06/2005 12:48:42:
>
>  
>
>>Author: arigo
>>Date: Tue Jun 21 13:48:41 2005
>>New Revision: 13653
>>
>>Modified:
>>   pypy/dist/pypy/rpython/rpbc.py
>>   pypy/dist/pypy/rpython/rtyper.py
>>Log:
>>- Method calls sanitization, by falling back to function calls code.
>>- Nicer error message for hop.inputarg() argument count mismatch.
>>
>>
>>Modified: pypy/dist/pypy/rpython/rpbc.py
>>
>>    
>>
>==============================================================================
>  
>
>>--- pypy/dist/pypy/rpython/rpbc.py   (original)
>>+++ pypy/dist/pypy/rpython/rpbc.py   Tue Jun 21 13:48:41 2005
>>@@ -355,30 +355,26 @@
>>                              "methods can be found: %r" % (
>>                 s_pbc.prebuiltinstances,))
>>         # the low-level representation is just the bound 'self' 
>>    
>>
>argument.
>  
>
>>-        self.r_instance = rclass.getinstancerepr(rtyper, self.classdef)
>>-        self.lowleveltype = self.r_instance.lowleveltype
>>+        self.s_im_self = annmodel.SomeInstance(self.classdef)
>>+        self.r_im_self = rclass.getinstancerepr(rtyper, self.classdef)
>>+        self.lowleveltype = self.r_im_self.lowleveltype
>>
>>     def rtype_simple_call(self, hop):
>>-        # XXX the graph of functions used as methods may need to be 
>>    
>>
>hacked
>  
>
>>-        # XXX so that its 'self' argument accepts a pointer to an 
>>    
>>
>instance of
>  
>
>>-        # XXX the common base class.  This is needed to make the 
>>    
>>
>direct_call
>  
>
>>-        # XXX below well-typed.
>>-        r_class = self.r_instance.rclass
>>+        r_class = self.r_im_self.rclass
>>         mangled_name, r_func = r_class.clsfields[self.methodname]
>>         assert isinstance(r_func, FunctionsPBCRepr)
>>-        #
>>-        # XXX try to unify with FunctionsPBCRepr.rtype_simple_call()
>>-        f, rinputs, rresult = 
>>    
>>
>r_func.function_signatures.itervalues().next()
>  
>
>>-        vlist = hop.inputargs(self, *rinputs[1:])  # ignore the 
>>self from r_func
>>-        if r_func.lowleveltype == Void:
>>-            assert len(r_func.function_signatures) == 1
>>-            vfunc = hop.inputconst(typeOf(f), f)
>>-        else:
>>-            vinst = vlist[0]
>>-            vcls = self.r_instance.getfield(vinst, '__class__', 
>>    
>>
>hop.llops)
>  
>
>>-            vfunc = r_class.getclsfield(vcls, self.methodname, 
>>    
>>
>hop.llops)
>  
>
>>-        vlist.insert(0, vfunc)
>>-        return hop.genop('direct_call', vlist, resulttype = rresult)
>>+        s_func = r_func.s_pbc
>>+
>>+        hop2 = hop.copy()
>>+        hop2.args_s[0] = self.s_im_self   # make the 1st arg stand 
>>for 'im_self'
>>+        hop2.args_r[0] = self.r_im_self   # (same lowleveltype as 
>>    
>>
>'self')
>  
>
>>+
>>+        v_im_self = hop.inputarg(self, arg=0)
>>+        v_cls = self.r_im_self.getfield(v_im_self, '__class__', 
>>    
>>
>hop.llops)
>  
>
>>+        v_func = r_class.getclsfield(v_cls, self.methodname, hop.llops)
>>+        hop2.v_s_insertfirstarg(v_func, s_func)   # insert 'function'
>>+        # now hop2 looks like simple_call(function, self, args...)
>>+        return hop2.dispatch()
>>
>>
>> # ____________________________________________________________
>>
>>Modified: pypy/dist/pypy/rpython/rtyper.py
>>
>>    
>>
>==============================================================================
>  
>
>>--- pypy/dist/pypy/rpython/rtyper.py   (original)
>>+++ pypy/dist/pypy/rpython/rtyper.py   Tue Jun 21 13:48:41 2005
>>@@ -417,9 +417,10 @@
>>     inputconst = staticmethod(inputconst)    # export via the 
>>HighLevelOp class
>>
>>     def inputargs(self, *converted_to):
>>-        assert len(converted_to) == self.nb_args, (
>>-            "operation argument count mismatch: '%s' has %d arguments" 
>>    
>>
>% (
>  
>
>>-            self.spaceop.opname, self.nb_args))
>>+        if len(converted_to) != self.nb_args:
>>+            raise TyperError("operation argument count mismatch:\n"
>>+                             "'%s' has %d arguments, rtyper wants %d" % 
>>    
>>
>(
>  
>
>>+                self.spaceop.opname, self.nb_args, len(converted_to)))
>>         vars = []
>>         for i in range(len(converted_to)):
>>             vars.append(self.inputarg(converted_to[i], i))
>>_______________________________________________
>>pypy-svn mailing list
>>pypy-svn at codespeak.net
>>http://codespeak.net/mailman/listinfo/pypy-svn
>>
>>    
>>
>
>_______________________________________________
>pypy-dev at codespeak.net
>http://codespeak.net/mailman/listinfo/pypy-dev
>  
>




More information about the Pypy-dev mailing list