forked from github/verilator
Internals: Misc cleanups from interface branch. No functional change.
This commit is contained in:
parent
8e2617ab8d
commit
7c834ad118
@ -98,8 +98,14 @@ public:
|
|||||||
if (VL_UNLIKELY(level < 0)) level = v3Global.opt.debugSrcLevel(__FILE__);
|
if (VL_UNLIKELY(level < 0)) level = v3Global.opt.debugSrcLevel(__FILE__);
|
||||||
return level;
|
return level;
|
||||||
}
|
}
|
||||||
void dump() {
|
void dump(const string& nameComment="linkdot", bool force=false) {
|
||||||
if (debug()>=6) m_syms.dumpFilePrefixed("linkdot");
|
if (debug()>=6 || force) {
|
||||||
|
string filename = v3Global.debugFilename(nameComment)+".txt";
|
||||||
|
const auto_ptr<ofstream> logp (V3File::new_ofstream(filename));
|
||||||
|
if (logp->fail()) v3fatalSrc("Can't write "<<filename);
|
||||||
|
ostream& os = *logp;
|
||||||
|
m_syms.dump(os);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
static void preErrorDumpHandler() {
|
static void preErrorDumpHandler() {
|
||||||
if (s_errorThisp) s_errorThisp->preErrorDump();
|
if (s_errorThisp) s_errorThisp->preErrorDump();
|
||||||
@ -108,7 +114,7 @@ public:
|
|||||||
static bool diddump = false;
|
static bool diddump = false;
|
||||||
if (!diddump && v3Global.opt.dumpTree()) {
|
if (!diddump && v3Global.opt.dumpTree()) {
|
||||||
diddump = true;
|
diddump = true;
|
||||||
m_syms.dumpFilePrefixed("linkdot-preerr");
|
dump("linkdot-preerr",true);
|
||||||
v3Global.rootp()->dumpTreeFile(v3Global.debugFilename("linkdot-preerr.tree"));
|
v3Global.rootp()->dumpTreeFile(v3Global.debugFilename("linkdot-preerr.tree"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -256,7 +262,7 @@ public:
|
|||||||
UINFO(9," INSERTblk se"<<(void*)symp<<" above=se"<<(void*)abovep<<" node="<<nodep<<endl);
|
UINFO(9," INSERTblk se"<<(void*)symp<<" above=se"<<(void*)abovep<<" node="<<nodep<<endl);
|
||||||
symp->parentp(abovep);
|
symp->parentp(abovep);
|
||||||
symp->packagep(packagep);
|
symp->packagep(packagep);
|
||||||
symp->fallbackp(abovep); // Needed so can find $unit stuff
|
symp->fallbackp(abovep);
|
||||||
nodep->user1p(symp);
|
nodep->user1p(symp);
|
||||||
if (name != "") {
|
if (name != "") {
|
||||||
checkDuplicate(abovep, nodep, name);
|
checkDuplicate(abovep, nodep, name);
|
||||||
@ -414,7 +420,6 @@ LinkDotState* LinkDotState::s_errorThisp = NULL;
|
|||||||
//======================================================================
|
//======================================================================
|
||||||
|
|
||||||
class LinkDotFindVisitor : public AstNVisitor {
|
class LinkDotFindVisitor : public AstNVisitor {
|
||||||
private:
|
|
||||||
// STATE
|
// STATE
|
||||||
LinkDotState* m_statep; // State to pass between visitors, including symbol table
|
LinkDotState* m_statep; // State to pass between visitors, including symbol table
|
||||||
AstPackage* m_packagep; // Current package
|
AstPackage* m_packagep; // Current package
|
||||||
@ -772,7 +777,7 @@ private:
|
|||||||
nodep->v3error("Import object not found: "<<nodep->packagep()->prettyName()<<"::"<<nodep->prettyName());
|
nodep->v3error("Import object not found: "<<nodep->packagep()->prettyName()<<"::"<<nodep->prettyName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_curSymp->import(m_statep->symsp(), srcp, nodep->name());
|
m_curSymp->importFromPackage(m_statep->symsp(), srcp, nodep->name());
|
||||||
UINFO(9," Link Done: "<<nodep<<endl);
|
UINFO(9," Link Done: "<<nodep<<endl);
|
||||||
// No longer needed, but can't delete until any multi-instantiated modules are expanded
|
// No longer needed, but can't delete until any multi-instantiated modules are expanded
|
||||||
}
|
}
|
||||||
@ -985,13 +990,11 @@ private:
|
|||||||
virtual void visit(AstAssignAlias* nodep, AstNUser*) {
|
virtual void visit(AstAssignAlias* nodep, AstNUser*) {
|
||||||
// Track aliases created by V3Inline; if we get a VARXREF(aliased_from)
|
// Track aliases created by V3Inline; if we get a VARXREF(aliased_from)
|
||||||
// we'll need to replace it with a VARXREF(aliased_to)
|
// we'll need to replace it with a VARXREF(aliased_to)
|
||||||
if (m_statep->forScopeCreation()) {
|
if (debug()>=9) nodep->dumpTree(cout,"-\t\t\t\talias: ");
|
||||||
if (debug()>=9) nodep->dumpTree(cout,"-\t\t\t\talias: ");
|
AstVarScope* fromVscp = nodep->lhsp()->castVarRef()->varScopep();
|
||||||
AstVarScope* fromVscp = nodep->lhsp()->castVarRef()->varScopep();
|
AstVarScope* toVscp = nodep->rhsp()->castVarRef()->varScopep();
|
||||||
AstVarScope* toVscp = nodep->rhsp()->castVarRef()->varScopep();
|
if (!fromVscp || !toVscp) nodep->v3fatalSrc("Bad alias scopes");
|
||||||
if (!fromVscp || !toVscp) nodep->v3fatalSrc("Bad alias scopes");
|
fromVscp->user2p(toVscp);
|
||||||
fromVscp->user2p(toVscp);
|
|
||||||
}
|
|
||||||
nodep->iterateChildren(*this);
|
nodep->iterateChildren(*this);
|
||||||
}
|
}
|
||||||
// For speed, don't recurse things that can't have scope
|
// For speed, don't recurse things that can't have scope
|
||||||
@ -1096,7 +1099,7 @@ private:
|
|||||||
}
|
}
|
||||||
inline void checkNoDot(AstNode* nodep) {
|
inline void checkNoDot(AstNode* nodep) {
|
||||||
if (VL_UNLIKELY(m_ds.m_dotPos != DP_NONE)) {
|
if (VL_UNLIKELY(m_ds.m_dotPos != DP_NONE)) {
|
||||||
UINFO(1,"ds="<<m_ds.ascii()<<endl);
|
//UINFO(9,"ds="<<m_ds.ascii()<<endl);
|
||||||
nodep->v3error("Syntax Error: Not expecting "<<nodep->type()<<" under a "<<nodep->backp()->type()<<" in dotted expression");
|
nodep->v3error("Syntax Error: Not expecting "<<nodep->type()<<" under a "<<nodep->backp()->type()<<" in dotted expression");
|
||||||
m_ds.m_dotErr = true;
|
m_ds.m_dotErr = true;
|
||||||
}
|
}
|
||||||
@ -1138,7 +1141,7 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
virtual void visit(AstCell* nodep, AstNUser*) {
|
virtual void visit(AstCell* nodep, AstNUser*) {
|
||||||
// Cell: Resolve its filename. If necessary, parse it.
|
// Cell: Recurse inside or cleanup not founds
|
||||||
checkNoDot(nodep);
|
checkNoDot(nodep);
|
||||||
m_cellp = nodep;
|
m_cellp = nodep;
|
||||||
AstNode::user5ClearTree();
|
AstNode::user5ClearTree();
|
||||||
@ -1220,10 +1223,12 @@ private:
|
|||||||
} else {
|
} else {
|
||||||
m_ds.m_dotPos = DP_SCOPE;
|
m_ds.m_dotPos = DP_SCOPE;
|
||||||
nodep->lhsp()->iterateAndNext(*this);
|
nodep->lhsp()->iterateAndNext(*this);
|
||||||
|
//if (debug()>=9) nodep->dumpTree("-dot-lho: ");
|
||||||
}
|
}
|
||||||
if (!m_ds.m_dotErr) { // Once something wrong, give up
|
if (!m_ds.m_dotErr) { // Once something wrong, give up
|
||||||
if (start && m_ds.m_dotPos==DP_SCOPE) m_ds.m_dotPos = DP_FINAL; // Top 'final' dot RHS is final RHS, else it's a DOT(DOT(x,*here*),real-rhs) which we consider a RHS
|
if (start && m_ds.m_dotPos==DP_SCOPE) m_ds.m_dotPos = DP_FINAL; // Top 'final' dot RHS is final RHS, else it's a DOT(DOT(x,*here*),real-rhs) which we consider a RHS
|
||||||
nodep->rhsp()->iterateAndNext(*this);
|
nodep->rhsp()->iterateAndNext(*this);
|
||||||
|
//if (debug()>=9) nodep->dumpTree("-dot-rho: ");
|
||||||
}
|
}
|
||||||
if (start) {
|
if (start) {
|
||||||
AstNode* newp;
|
AstNode* newp;
|
||||||
@ -1307,7 +1312,8 @@ private:
|
|||||||
} else {
|
} else {
|
||||||
foundp = m_ds.m_dotSymp->findIdFallback(nodep->name());
|
foundp = m_ds.m_dotSymp->findIdFallback(nodep->name());
|
||||||
}
|
}
|
||||||
if (foundp) UINFO(9," found=se"<<(void*)foundp<<" n="<<foundp->nodep()<<endl);
|
if (foundp) UINFO(9," found=se"<<(void*)foundp<<" exp="<<expectWhat
|
||||||
|
<<" n="<<foundp->nodep()<<endl);
|
||||||
// What fell out?
|
// What fell out?
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
if (foundp->nodep()->castCell() || foundp->nodep()->castBegin()
|
if (foundp->nodep()->castCell() || foundp->nodep()->castBegin()
|
||||||
|
@ -336,7 +336,6 @@ void ParamVisitor::visit(AstCell* nodep, AstNUser*) {
|
|||||||
longname += "_";
|
longname += "_";
|
||||||
if (debug()>8) nodep->paramsp()->dumpTreeAndNext(cout,"-cellparams:\t");
|
if (debug()>8) nodep->paramsp()->dumpTreeAndNext(cout,"-cellparams:\t");
|
||||||
for (AstPin* pinp = nodep->paramsp(); pinp; pinp=pinp->nextp()->castPin()) {
|
for (AstPin* pinp = nodep->paramsp(); pinp; pinp=pinp->nextp()->castPin()) {
|
||||||
if (!pinp) nodep->v3fatalSrc("Non pin under cell params\n");
|
|
||||||
if (!pinp->exprp()) continue; // No-connect
|
if (!pinp->exprp()) continue; // No-connect
|
||||||
AstVar* modvarp = pinp->modVarp();
|
AstVar* modvarp = pinp->modVarp();
|
||||||
if (!modvarp) {
|
if (!modvarp) {
|
||||||
|
@ -128,7 +128,7 @@ public:
|
|||||||
}
|
}
|
||||||
// Walk old sym table and reinsert into current table
|
// Walk old sym table and reinsert into current table
|
||||||
// We let V3LinkDot report the error instead of us
|
// We let V3LinkDot report the error instead of us
|
||||||
symCurrentp()->import(&m_syms, symp, id_or_star);
|
symCurrentp()->importFromPackage(&m_syms, symp, id_or_star);
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
// CREATORS
|
// CREATORS
|
||||||
|
@ -166,7 +166,7 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
bool import(VSymGraph* graphp, const VSymEnt* srcp, const string& id_or_star) {
|
bool importFromPackage(VSymGraph* graphp, const VSymEnt* srcp, const string& id_or_star) {
|
||||||
// Import tokens from source symbol table into this symbol table
|
// Import tokens from source symbol table into this symbol table
|
||||||
// Returns true if successful
|
// Returns true if successful
|
||||||
bool any = false;
|
bool any = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user