Bill Allombert on Fri, 03 Feb 2012 20:38:53 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
C interface to t_ERROR and GP2C |
Dear PARI developers, We need to define the C interface to catch PARI errors (and eventually also the C++ interface). In particular, I need to add support for iferr and iferrname to GP2C. Probably it is better to generate code that use CATCH/TRY directly instead of using a wrapper due to the limitation of wrappers. Please see a tentative gp2c-like conversion of the ecm function in ??iferrname in attachement [ecm.c] But maybe we want to take the opportunuity to rename/tweak. CATCH/TRY/ENDCATCH/global_err_data. Finally I wonder if we should not add a new universal object gen_STACK (mkerr(e_STACK)). The problem is, when the stack overflow , it is not safe to do mkerr(e_STACK), so if we could return an universal object, this would allow us to remove lot of special-casing code. Cheers, Bill.
#include <pari/pari.h> /* GP; install("ecm","GDGD100,L,p",,"./ecm.so"); */ GEN ecm(GEN N, GEN B, long t, long prec) { if (!B) B = mpfact(1000); { long a; for(a = 1; a <= t; ++a) { CATCH(e_INTMOD) { GEN E = global_err_data; return ggcd(lift(compo(E, 1)), N); } TRY { powell(initell(gmul(mkvec2s(a,1), gmodulsg(1, N)), prec), gmul(mkvec2s(0,1), gmodulsg(1, N)), B); } ENDCATCH; } } return gnil; }