Bill Allombert on Wed, 15 Jan 2003 19:53:08 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

GP2C 0.0.2pl4 released


Hello PARI developers,

I just released GP2C 0.0.2pl4, the GP to C translator.

You can download it at
<ftp://megrez.math.u-bordeaux.fr/pub/pari/GP2C/gp2c-0.0.2pl4.tar.gz>

GP2C is a compiler for GP-scripts that output C code to be linked with libpari
or instal'ed in GP.

It can be used to compile and run a GP script, to learn how to use the PARI library, or to check a script for mistakes. 

This is a bugfix release to fix problems reported by John Cremona.

This version also solve in part the compatibility issue with PARI CVS.  GP2C
needs a way to convert strings and GEN to t_STR GEN.  The only way I know of
with pari 2.1 is to use strtoGENstr.  Unfortunately Karim has changed this
function in the CVS to take only one argument instead of two, which breaks gp2c.

I have fixed gp2c to use the description system when doing type-casting,
by reading the file desc/gp2cfunc.desc so a new version of this file
is required with current CVS. Please find it in attachment.

We are looking for a better solution, but in the meantime sorry for
the annoyance.

Cheers,
Bill.
_avma:
 ():ulong	avma
;
_stack_lim:
 (ulong,small):ulong	 stack_lim($1, $2)
;
_maxprime:
 ():small	maxprime()
;
_badtype:
 (int):bool:parens      typ($1) != t_INT
|(real):bool:parens     typ($1) != t_REAL
|(mp):negbool           is_intreal($1)
|(vec):negbool          is_matvec_t(typ($1))
|(vecsmall):bool:parens typ($1) != t_VECSMALL
|(pol):bool:parens      typ($1) != t_POL
|(*nf):nf:parens        $1=checknf($1)
|(*bnf):bnf:parens      $1=checkbnf($1)
|(bnr):bnf              checkbnr($1)
|(prid):void            checkprimeid($1)
|(@clgp):bool:parens    lg($1) != 3 || typ($(1)[2]) != t_POLMOD
|(ell):lg               checkell($1)
|(bell):void            checkbell($1)
#checkgal is not in the PARI 2.1 headers...
#|(*gal):gal:parens      $1=checkgal($1)
;
# Use type void for inline value
_formatcode:
 (#small):void          $1
|(small):small          %ld
|(#str):void            $%1
|(str):str              %s
|(gen):gen              %Z
;

#_toGENstr:
# (str):genstr   strtoGENstr($1, 0)
#|(gen):genstr   concat(strtoGENstr("", 0), $1)
#;

_toGENstr:
(str):genstr   strtoGENstr($1)
|(gen):genstr   concat(strtoGENstr(""), $1)
;

copy:
 (small):small:parens	$1
|(int):int		icopy($1)
|(real):real		gcopy($1)
|(mp):mp		gcopy($1)
|(vecsmall):vecsmall	gcopy($1)
|(vec):vec		gcopy($1)
|(pol):pol		gcopy($1)
|(gen):gen		gcopy($1)
;
clone:
 (small):small:parens		$1
|(int):int		gclone($1)
|(real):real		gclone($1)
|(mp):mp		gclone($1)
|(vecsmall):vecsmall	gclone($1)
|(vec):vec		gclone($1)
|(pol):pol		gclone($1)
|(gen):gen		gclone($1)
;
unclone:
# avoid semi-comma trouble.
 (small):void	0 /*unclone*/
|(gen):void	gunclone($1)
;
# type0 is  not in libpari
type:
 (gen):typ	 typ($1)
;
whatnow:
 (str):void        whatnow($1, 0)
;
write:
 (gen,gen):void    geval(concat(concat(concat(concat(strtoGENstr("write("), $1), strtoGENstr(",")), $2), strtoGENstr(")")))
;
write1:
 (gen,gen):void    geval(concat(concat(concat(concat(strtoGENstr("write1("), $1), strtoGENstr(",")), $2), strtoGENstr(")")))
;
writetex:
 (gen,gen):void    geval(concat(concat(concat(concat(strtoGENstr("writetex("), $1), strtoGENstr(",")), $2), strtoGENstr(")")))
;
printp:
 (gen):void        geval(concat(concat(strtoGENstr("printp("), $1), strtoGENstr(")")))
;
printp1:
 (gen):void        geval(concat(concat(strtoGENstr("printp1("), $1), strtoGENstr(")")))
;
printtex:
 (gen):void        geval(concat(concat(strtoGENstr("printtex("), $1), strtoGENstr(")")))
;