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

Ben.Young at risk.sungard.com Ben.Young at risk.sungard.com
Tue Jun 21 15:52:06 CEST 2005


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; */

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
> 




More information about the Pypy-dev mailing list