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;
}