Fix package logic var compile error.
This commit is contained in:
parent
410e6ff203
commit
385c166830
2
Changes
2
Changes
|
|
@ -18,6 +18,8 @@ indicates the contributor was also the author of the fix; Thanks!
|
||||||
|
|
||||||
**** Fix implicit one bit parameter selection, bug603. [Jeremy Bennett]
|
**** Fix implicit one bit parameter selection, bug603. [Jeremy Bennett]
|
||||||
|
|
||||||
|
**** Fix package logic var compile error.
|
||||||
|
|
||||||
|
|
||||||
* Verilator 3.844 2013/01/09
|
* Verilator 3.844 2013/01/09
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,8 +46,10 @@ private:
|
||||||
// NODE STATE
|
// NODE STATE
|
||||||
// AstVar::user1p -> AstVarScope replacement for this variable
|
// AstVar::user1p -> AstVarScope replacement for this variable
|
||||||
// AstTask::user2p -> AstTask*. Replacement task
|
// AstTask::user2p -> AstTask*. Replacement task
|
||||||
|
// AstVar::user3p -> AstVarScope for packages
|
||||||
AstUser1InUse m_inuser1;
|
AstUser1InUse m_inuser1;
|
||||||
AstUser2InUse m_inuser2;
|
AstUser2InUse m_inuser2;
|
||||||
|
AstUser3InUse m_inuser3;
|
||||||
|
|
||||||
// STATE, inside processing a single module
|
// STATE, inside processing a single module
|
||||||
AstNodeModule* m_modp; // Current module
|
AstNodeModule* m_modp; // Current module
|
||||||
|
|
@ -201,10 +203,12 @@ private:
|
||||||
}
|
}
|
||||||
virtual void visit(AstVar* nodep, AstNUser*) {
|
virtual void visit(AstVar* nodep, AstNUser*) {
|
||||||
// Make new scope variable
|
// Make new scope variable
|
||||||
if (!nodep->user1p()) {
|
if (m_modp->castPackage()
|
||||||
|
? !nodep->user3p() : !nodep->user1p()) {
|
||||||
AstVarScope* varscp = new AstVarScope(nodep->fileline(), m_scopep, nodep);
|
AstVarScope* varscp = new AstVarScope(nodep->fileline(), m_scopep, nodep);
|
||||||
UINFO(6," New scope "<<varscp<<endl);
|
UINFO(6," New scope "<<varscp<<endl);
|
||||||
nodep->user1p(varscp);
|
nodep->user1p(varscp);
|
||||||
|
if (m_modp->castPackage()) nodep->user3p(varscp);
|
||||||
m_scopep->addVarp(varscp);
|
m_scopep->addVarp(varscp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -212,7 +216,9 @@ private:
|
||||||
// VarRef needs to point to VarScope
|
// VarRef needs to point to VarScope
|
||||||
// Make sure variable has made user1p.
|
// Make sure variable has made user1p.
|
||||||
nodep->varp()->accept(*this);
|
nodep->varp()->accept(*this);
|
||||||
AstVarScope* varscp = (AstVarScope*)nodep->varp()->user1p();
|
AstVarScope* varscp = nodep->packagep()
|
||||||
|
? (AstVarScope*)nodep->varp()->user3p()
|
||||||
|
: (AstVarScope*)nodep->varp()->user1p();
|
||||||
if (!varscp) nodep->v3fatalSrc("Can't locate varref scope");
|
if (!varscp) nodep->v3fatalSrc("Can't locate varref scope");
|
||||||
nodep->varScopep(varscp);
|
nodep->varScopep(varscp);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,10 @@ module t (/*AUTOARG*/
|
||||||
$write("*-* All Finished *-*\n");
|
$write("*-* All Finished *-*\n");
|
||||||
$finish;
|
$finish;
|
||||||
end
|
end
|
||||||
|
always @ (posedge clk) begin
|
||||||
|
p::pi += 1;
|
||||||
|
if (p::pi < 124) $stop;
|
||||||
|
end
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
module t2;
|
module t2;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue