mirror of
https://github.com/verilator/verilator.git
synced 2024-12-29 10:47:34 +00:00
Commentary
This commit is contained in:
parent
a51e26e62d
commit
2d71d66cf5
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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"); \
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user