From 4c4e8cd402efafafcdcff354b8a6b277efca71f6 Mon Sep 17 00:00:00 2001 From: sbrandt Date: Tue, 5 Mar 2013 14:27:42 +0000 Subject: Make support for inf more explicit, and add support for nan. git-svn-id: http://svn.cactuscode.org/flesh/trunk@4977 17b73243-c579-4c4c-a9d2-2d5706c11dac --- src/piraha/Call.cc | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/piraha/Call.cc b/src/piraha/Call.cc index ef981fd6..f5082487 100644 --- a/src/piraha/Call.cc +++ b/src/piraha/Call.cc @@ -9,6 +9,7 @@ #include #include #include +#include namespace piraha { @@ -272,12 +273,21 @@ smart_ptr meval(smart_ptr gr) { smart_ptr ret = new Value(gr); if(pn == "num") { std::string s = gr->substring(); - ret->ddata = atof(s.c_str()); - ret->idata = ret->ddata; - if(ret->idata == ret->ddata && (s.find('.') == std::string::npos)) - ret->type = PIR_INT; - else + s = mklower(s); + if(s == "nan") { + ret->ddata = NAN; + ret->type = PIR_REAL; + } else if(s == "inf") { + ret->ddata = INFINITY; ret->type = PIR_REAL; + } else { + ret->ddata = atof(s.c_str()); + ret->idata = ret->ddata; + if(ret->idata == ret->ddata && (s.find('.') == std::string::npos)) + ret->type = PIR_INT; + else + ret->type = PIR_REAL; + } } else if(pn == "paren" || pn == "parindex") { return meval(gr->group(0)); } else if(pn == "func") { @@ -690,7 +700,7 @@ extern "C" int cctk_PirahaParser(const char *buffer,unsigned long buffersize,int "inquot = ({var}|\\\\.|[^\\\\\"])*\n" "fname = \\.?/[-\\./0-9a-zA-Z_]+\n" "quot = \"{inquot}\"|{fname}\n" - "num = (inf|([0-9]+(\\.[0-9]*|)|\\.[0-9]+)(e[+-]?[0-9]+|))\n" + "num = (inf|nan|([0-9]+(\\.[0-9]*|)|\\.[0-9]+)(e[+-]?[0-9]+|))\n" "env = ENV\\{{name}\\}\n" "var = \\$({env}|{name}|\\{{name}\\})\n" -- cgit v1.2.3