From 7d50fd267d9d838ea1413e6b2cced8ba0d069864 Mon Sep 17 00:00:00 2001 From: vsc Date: Tue, 19 Jun 2001 16:31:59 +0000 Subject: [PATCH] parser should parse +inf,-inf,+nan,-nan as floating point numbers write should write inf as +inf and nan as +nan git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@92 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/parser.c | 31 +++++++++++++++++++++++++++++++ C/write.c | 2 ++ 2 files changed, 33 insertions(+) diff --git a/C/parser.c b/C/parser.c index a5d956464..198b8640a 100644 --- a/C/parser.c +++ b/C/parser.c @@ -343,6 +343,14 @@ ParseList(void) return (t); } +#ifndef INFINITY +#define INFINITY (1.0/0.0) +#endif + +#ifndef NAN +#define NAN (0.0/0.0) +#endif + static Term ParseTerm(int prio) { @@ -387,6 +395,29 @@ ParseTerm(int prio) NextToken; break; } + } else if (tokptr->Tok == Name_tok) { + Atom at = (Atom)tokptr->TokInfo; + if ((Atom)t == AtomPlus) { + if (at == AtomInf) { + t = MkFloatTerm(INFINITY); + NextToken; + break; + } else if (at == AtomNan) { + t = MkFloatTerm(NAN); + NextToken; + break; + } + } else if ((Atom)t == AtomMinus) { + if (at == AtomInf) { + t = MkFloatTerm(-INFINITY); + NextToken; + break; + } else if (at == AtomNan) { + t = MkFloatTerm(NAN); + NextToken; + break; + } + } } if (opprio <= prio) { /* try to parse as a prefix operator */ diff --git a/C/write.c b/C/write.c index b84320d99..671ffe8db 100644 --- a/C/write.c +++ b/C/write.c @@ -126,6 +126,8 @@ wrputf(Float f) /* writes a float */ sprintf(s, "%.6g", f); while (*pt == ' ') pt++; + if (*pt == 'i' || *pt == 'n') /* inf or nan */ + wrputc('+'); wrputs(pt); if (*pt == '-') pt++; while ((ch = *pt) != '\0') {