Add vl_mc_scan_plusargs

This commit is contained in:
Wilson Snyder 2010-02-03 06:33:00 -05:00
parent 5d5952d354
commit 56a03e1a10
3 changed files with 10 additions and 2 deletions

View File

@ -913,6 +913,12 @@ IData VL_VALUEPLUSARGS_IW(int rbits, const char* prefixp, char fmt, WDataOutP rw
return 1;
}
const char* vl_mc_scan_plusargs(const char* prefixp) {
string match = VerilatedImp::argPlusMatch(prefixp);
if (match == "") return 0;
else return match.c_str()+strlen(prefixp)+1; // +1 to skip the "+"
}
//===========================================================================
// Heavy functions

View File

@ -303,6 +303,7 @@ extern void VL_SFORMAT_X(int obits, void* destp, const char* formatp, ...);
extern IData VL_TESTPLUSARGS_I(const char* formatp);
extern IData VL_VALUEPLUSARGS_IW(int rbits, const char* prefixp, char fmt, WDataOutP rwp);
extern const char* vl_mc_scan_plusargs(const char* prefixp); // PLIish
//=========================================================================
// Base macros

View File

@ -80,6 +80,7 @@ public: // But only for verilated*.cpp
s_s.m_argVecLoaded = true; // Can't just test later for empty vector, no arguments is ok
}
static string argPlusMatch(const char* prefixp) {
// Note prefixp does not include the leading "+"
size_t len = strlen(prefixp);
if (VL_UNLIKELY(!s_s.m_argVecLoaded)) {
s_s.m_argVecLoaded = true; // Complain only once
@ -134,7 +135,7 @@ public: // But only for verilated*.cpp
}
static inline const VerilatedScope* scopeFind(const char* namep) {
ScopeNameMap::iterator it=s_s.m_nameMap.find(namep);
if (it != s_s.m_nameMap.end()) return it->second;
if (VL_LIKELY(it != s_s.m_nameMap.end())) return it->second;
else return NULL;
}
static void scopeErase(const VerilatedScope* scopep) {
@ -174,7 +175,7 @@ public: // But only for verilated*.cpp
}
static int exportFind(const char* namep) {
ExportNameMap::iterator it=s_s.m_exportMap.find(namep);
if (it != s_s.m_exportMap.end()) return it->second;
if (VL_LIKELY(it != s_s.m_exportMap.end())) return it->second;
string msg = (string("%Error: Testbench C called ")+namep
+" but no such DPI export function name exists in ANY model");
vl_fatal("unknown",0,"", msg.c_str());