On Wed, 22 Aug 2007 15:23:40 -0700
Simon Burton <[EMAIL PROTECTED]> 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...
_______________________________________________
[email protected]
http://codespeak.net/mailman/listinfo/pypy-dev