[pypy-dev] rffi strict typing
Maciek Fijalkowski
fijal at genesilico.pl
Thu Aug 23 19:13:26 CEST 2007
Simon Burton wrote:
> On Wed, 22 Aug 2007 15:23:40 -0700
> Simon Burton <simon at arrowtheory.com> wrote:
>
>
>> Following some hints from Samuele, I am trying to wrap such functions in
>> another function that does some casting.
>>
>
> Here is the latest:
>
>
> def softwrapper(funcptr, arg_tps):
> unrolling_arg_tps = unrolling_iterable(enumerate(arg_tps))
> def softfunc(*args):
> real_args = ()
> for i, tp in unrolling_arg_tps:
> real_args = real_args + (args[i],)
> result = funcptr(*real_args)
> return result
> return softfunc
>
> When applied to llexternal's that have pointer-to-struct args
> the generated c code breaks; it decides to declare&use anonymous
> structs:
>
> long pypy_g_softfunc_star2_1(struct pypy__cairo_surface0 *l_stararg0_7, struct pypy_array3 *l_stararg1_7) {
> long l_v492;
>
> block0:
> l_v492 = cairo_surface_write_to_png(l_stararg0_7, l_stararg1_7);
> goto block1;
>
> block1:
> RPY_DEBUG_RETURN();
> return l_v492;
> }
>
> where cairo_surface_write_to_png is declared:
>
> cairo_surface_write_to_png (cairo_surface_t *surface,
> const char *filename);
>
>
> I wonder if the annotator is getting confused by the real_args tuple growing...
> _______________________________________________
> pypy-dev at codespeak.net
> http://codespeak.net/mailman/listinfo/pypy-dev
>
> :.
>
>
You need to create the structure which you push by hand. As well as
array argument.
:.
More information about the Pypy-dev
mailing list