[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