From b2623b98412d8e30983c5f952e8311a194a05778 Mon Sep 17 00:00:00 2001 From: Stefan Wallentowitz Date: Wed, 23 Mar 2016 07:48:32 -0400 Subject: [PATCH] Internals: Add success parameter to parseDouble. No functional change intended. Signed-off-by: Wilson Snyder --- src/V3ParseImp.h | 2 +- src/verilog.l | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/V3ParseImp.h b/src/V3ParseImp.h index 72d3aa80a..dc52c72e7 100644 --- a/src/V3ParseImp.h +++ b/src/V3ParseImp.h @@ -140,7 +140,7 @@ public: void verilatorCmtLintSave(); void verilatorCmtLintRestore(); void verilatorCmtBad(const char* text); - double parseDouble(const char* text, size_t length); + static double parseDouble(const char* text, size_t length, bool* successp = NULL); void pushBeginKeywords(int state) { m_inBeginKwd++; m_lastVerilogState=state; } bool popBeginKeywords() { if (m_inBeginKwd) { m_inBeginKwd--; return true; } else return false; } int lastVerilogState() const { return m_lastVerilogState; } diff --git a/src/verilog.l b/src/verilog.l index 80ab93596..0386245df 100644 --- a/src/verilog.l +++ b/src/verilog.l @@ -975,9 +975,10 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} %% int V3ParseImp::stateVerilogRecent() { return STATE_VERILOG_RECENT; } -double V3ParseImp::parseDouble(const char* textp, size_t length) { +double V3ParseImp::parseDouble(const char* textp, size_t length, bool* successp) { char* strgp = new char[length+1]; char* dp=strgp; + if (successp) *successp = true; for (const char* sp=textp; sp<(textp+length); ++sp) { if (*sp != '_') *dp++ = *sp; } @@ -985,7 +986,10 @@ double V3ParseImp::parseDouble(const char* textp, size_t length) { char* endp = strgp; double d = strtod(strgp, &endp); size_t parsed_len = endp-strgp; - if (parsed_len != strlen(strgp)) { yyerrorf("Syntax error parsing real: %s",strgp); } + if (parsed_len != strlen(strgp)) { + if (successp) *successp = false; + else yyerrorf("Syntax error parsing real: %s",strgp); + } delete[] strgp; return d; }