Commentary

This commit is contained in:
Wilson Snyder 2024-11-30 22:17:18 -05:00
parent a51e26e62d
commit 2d71d66cf5
3 changed files with 14 additions and 8 deletions

View File

@ -794,7 +794,7 @@ const AstNodeDType* AstNodeDType::skipRefIterp(bool skipConst, bool skipEnum) co
nodep = subp; nodep = subp;
continue; continue;
} else { } else {
v3fatalSrc("Typedef not linked"); nodep->v3fatalSrc(nodep->prettyTypeName() << " not linked to type");
return nullptr; return nullptr;
} }
} }

View File

@ -564,9 +564,9 @@ void v3errorEndFatal(std::ostringstream& sstr)
#define v3info(msg) v3warnCode(V3ErrorCode::EC_INFO, msg) #define v3info(msg) v3warnCode(V3ErrorCode::EC_INFO, msg)
#define v3error(msg) v3warnCode(V3ErrorCode::EC_ERROR, msg) #define v3error(msg) v3warnCode(V3ErrorCode::EC_ERROR, msg)
#define v3fatal(msg) v3warnCodeFatal(V3ErrorCode::EC_FATAL, msg) #define v3fatal(msg) v3warnCodeFatal(V3ErrorCode::EC_FATAL, msg)
// Use this instead of fatal() if message gets suppressed with --quiet-exit // Fatal exit; used instead of fatal() if message gets suppressed with --quiet-exit
#define v3fatalExit(msg) v3warnCodeFatal(V3ErrorCode::EC_FATALEXIT, msg) #define v3fatalExit(msg) v3warnCodeFatal(V3ErrorCode::EC_FATALEXIT, msg)
// Use this instead of fatal() to mention the source code line. // Fatal exit; used instead of fatal() to mention the source code line
#define v3fatalSrc(msg) \ #define v3fatalSrc(msg) \
v3errorEndFatal(v3errorBuildMessage( \ v3errorEndFatal(v3errorBuildMessage( \
V3Error::v3errorPrepFileLine(V3ErrorCode::EC_FATALSRC, __FILE__, __LINE__), msg)) V3Error::v3errorPrepFileLine(V3ErrorCode::EC_FATALSRC, __FILE__, __LINE__), msg))
@ -574,6 +574,10 @@ void v3errorEndFatal(std::ostringstream& sstr)
#define v3fatalStatic(msg) \ #define v3fatalStatic(msg) \
::v3errorEndFatal(v3errorBuildMessage(V3Error::v3errorPrep(V3ErrorCode::EC_FATAL), msg)) ::v3errorEndFatal(v3errorBuildMessage(V3Error::v3errorPrep(V3ErrorCode::EC_FATAL), msg))
/// Print a message when debug() >= level. stmsg is stream; e.g. use as '"foo=" << foo'
//
// Requires debug() function to exist in current scope, to hack this in temporarily:
// auto debug = []() -> bool { return V3Error::debugDefault(); };
#define UINFO(level, stmsg) \ #define UINFO(level, stmsg) \
do { \ do { \
if (VL_UNCOVERABLE(debug() >= (level))) { \ if (VL_UNCOVERABLE(debug() >= (level))) { \
@ -585,6 +589,7 @@ void v3errorEndFatal(std::ostringstream& sstr)
if (VL_UNCOVERABLE(debug() >= (level))) { std::cout << stmsg; } \ if (VL_UNCOVERABLE(debug() >= (level))) { std::cout << stmsg; } \
} while (false) } while (false)
/// Compile statements only when debug build
#ifdef VL_DEBUG #ifdef VL_DEBUG
#define UDEBUGONLY(stmts) \ #define UDEBUGONLY(stmts) \
do { stmts } while (false) do { stmts } while (false)
@ -595,12 +600,12 @@ void v3errorEndFatal(std::ostringstream& sstr)
} while (false) } while (false)
#endif #endif
// Assertion without object, generally UOBJASSERT preferred /// Assert without error location, generally UASSERT_OBJ preferred
#define UASSERT(condition, stmsg) \ #define UASSERT(condition, stmsg) \
do { \ do { \
if (VL_UNCOVERABLE(!(condition))) v3fatalSrc(stmsg); \ if (VL_UNCOVERABLE(!(condition))) v3fatalSrc(stmsg); \
} while (false) } while (false)
// Assertion with object /// Assert with object to provide error location
#define UASSERT_OBJ(condition, obj, stmsg) \ #define UASSERT_OBJ(condition, obj, stmsg) \
do { \ do { \
if (VL_UNCOVERABLE(!(condition))) (obj)->v3fatalSrc(stmsg); \ if (VL_UNCOVERABLE(!(condition))) (obj)->v3fatalSrc(stmsg); \
@ -614,7 +619,7 @@ void v3errorEndFatal(std::ostringstream& sstr)
V3Error::vlAbort(); \ V3Error::vlAbort(); \
} \ } \
} while (false) } while (false)
// Check self test values for expected value. Safe from side-effects. /// Check self test values for expected value. Safe from side-effects.
// Type argument can be removed when go to C++11 (use auto). // Type argument can be removed when go to C++11 (use auto).
#define UASSERT_SELFTEST(Type, got, exp) \ #define UASSERT_SELFTEST(Type, got, exp) \
do { \ do { \
@ -625,6 +630,7 @@ void v3errorEndFatal(std::ostringstream& sstr)
<< g << " expected=" << e); \ << g << " expected=" << e); \
} while (false) } while (false)
// Error that call not supported; only for some Ast functions
#define V3ERROR_NA \ #define V3ERROR_NA \
do { \ do { \
v3error("Internal: Unexpected Call"); \ v3error("Internal: Unexpected Call"); \

View File

@ -1692,7 +1692,6 @@ public:
LinkDotFindVisitor(AstNetlist* rootp, LinkDotState* statep) LinkDotFindVisitor(AstNetlist* rootp, LinkDotState* statep)
: m_statep{statep} { : m_statep{statep} {
UINFO(4, __FUNCTION__ << ": " << endl); UINFO(4, __FUNCTION__ << ": " << endl);
iterate(rootp); iterate(rootp);
} }
~LinkDotFindVisitor() override = default; ~LinkDotFindVisitor() override = default;
@ -4063,7 +4062,8 @@ class LinkDotResolveVisitor final : public VNVisitor {
const AstClass* const clsp = VN_CAST(cpackagerefp->classOrPackageNodep(), Class); const AstClass* const clsp = VN_CAST(cpackagerefp->classOrPackageNodep(), Class);
if (clsp && clsp->isParameterized()) { if (clsp && clsp->isParameterized()) {
// Unable to link before the instantiation of parameter classes. // Unable to link before the instantiation of parameter classes.
// The class reference node has to be visited to properly link parameters. // The class reference node still has to be visited now to later link
// parameters.
iterate(cpackagep); iterate(cpackagep);
return; return;
} }