Fix JSON output case statements (#6733).
This commit is contained in:
parent
7a2b20cff3
commit
2318adabd3
1
Changes
1
Changes
|
|
@ -95,6 +95,7 @@ Verilator 5.043 devel
|
|||
* Fix X handling in UDPs (#6722) (#6723). [Michael Bikovitsky]
|
||||
* Fix `--prof-exec` using `--lib-create`. [Geza Lore]
|
||||
* Fix fork scheduling semantics (#6730). [Artur Bieniek, Antmicro Ltd.]
|
||||
* Fix JSON output case statements (#6733).
|
||||
* Fix internal fault when cross-class calling with DPI (#6735) (#6742). [Matthew Ballance]
|
||||
* Fix write variable placement for global constraints (#6740) (#6750) (#6797). [Yilou Wang]
|
||||
* Fix JSON dump missing output ports (#6751) (#6831). [Oleh Maksymenko]
|
||||
|
|
|
|||
|
|
@ -949,6 +949,7 @@ protected:
|
|||
|
||||
static void dumpJsonNum(std::ostream& os, const std::string& name, int64_t val);
|
||||
static void dumpJsonBool(std::ostream& os, const std::string& name, bool val);
|
||||
static void dumpJsonBoolIf(std::ostream& os, const std::string& name, bool val);
|
||||
static void dumpJsonStr(std::ostream& os, const std::string& name, const std::string& val);
|
||||
static void dumpJsonPtr(std::ostream& os, const std::string& name, const AstNode* const valp);
|
||||
|
||||
|
|
|
|||
|
|
@ -381,6 +381,8 @@ public:
|
|||
addItemsp(itemsp);
|
||||
}
|
||||
ASTGEN_MEMBERS_AstCase;
|
||||
void dump(std::ostream& str) const override;
|
||||
void dumpJson(std::ostream& str) const override;
|
||||
int instrCount() const override { return INSTR_COUNT_BRANCH; }
|
||||
string verilogKwd() const override { return casez() ? "casez" : casex() ? "casex" : "case"; }
|
||||
bool sameNode(const AstNode* samep) const override {
|
||||
|
|
|
|||
|
|
@ -41,6 +41,9 @@ void AstNode::dumpJsonNum(std::ostream& os, const std::string& name, int64_t val
|
|||
void AstNode::dumpJsonBool(std::ostream& os, const std::string& name, bool val) {
|
||||
os << ",\"" << name << "\":" << (val ? "true" : "false");
|
||||
}
|
||||
void AstNode::dumpJsonBoolIf(std::ostream& os, const std::string& name, bool val) {
|
||||
if (val) dumpJsonBool(os, name, val);
|
||||
}
|
||||
void AstNode::dumpJsonStr(std::ostream& os, const std::string& name, const std::string& val) {
|
||||
os << ",\"" << name << "\":\"" << V3OutFormatter::quoteNameControls(val) << '"';
|
||||
}
|
||||
|
|
@ -54,6 +57,7 @@ void AstNode::dumpJsonPtr(std::ostream& os, const std::string& name, const AstNo
|
|||
// Shorthands for dumping fields that use func name as key
|
||||
#define dumpJsonNumFunc(os, func) dumpJsonNum(os, #func, func())
|
||||
#define dumpJsonBoolFunc(os, func) dumpJsonBool(os, #func, func())
|
||||
#define dumpJsonBoolFuncIf(os, func) dumpJsonBoolIf(os, #func, func())
|
||||
#define dumpJsonStrFunc(os, func) dumpJsonStr(os, #func, func())
|
||||
#define dumpJsonPtrFunc(os, func) dumpJsonPtr(os, #func, func())
|
||||
|
||||
|
|
@ -374,6 +378,20 @@ void AstCReset::dumpJson(std::ostream& str) const {
|
|||
dumpJsonGen(str);
|
||||
}
|
||||
|
||||
void AstCase::dump(std::ostream& str) const {
|
||||
this->AstNode::dump(str);
|
||||
str << " " << verilogKwd();
|
||||
}
|
||||
void AstCase::dumpJson(std::ostream& str) const {
|
||||
dumpJsonStr(str, "kwd", verilogKwd());
|
||||
dumpJsonBoolIf(str, "full", fullPragma());
|
||||
dumpJsonBoolIf(str, "parallel", parallelPragma());
|
||||
dumpJsonBoolIf(str, "unique", uniquePragma());
|
||||
dumpJsonBoolIf(str, "unique0", unique0Pragma());
|
||||
dumpJsonBoolIf(str, "priority", priorityPragma());
|
||||
dumpJsonGen(str);
|
||||
}
|
||||
|
||||
AstVar* AstClocking::ensureEventp(bool childDType) {
|
||||
if (!eventp()) {
|
||||
AstVar* const evp
|
||||
|
|
@ -1797,7 +1815,7 @@ void AstClass::dump(std::ostream& str) const {
|
|||
}
|
||||
void AstClass::dumpJson(std::ostream& str) const {
|
||||
// dumpJsonNumFunc(str, declTokenNum); // Not dumped as adding token changes whole file
|
||||
if (isCovergroup()) dumpJsonBoolFunc(str, isCovergroup);
|
||||
dumpJsonBoolFuncIf(str, isCovergroup);
|
||||
dumpJsonBoolFunc(str, isExtended);
|
||||
dumpJsonBoolFunc(str, isInterfaceClass);
|
||||
dumpJsonBoolFunc(str, isVirtual);
|
||||
|
|
@ -2539,8 +2557,8 @@ void AstPatMember::dump(std::ostream& str) const {
|
|||
if (isDefault()) str << " [DEFAULT]";
|
||||
}
|
||||
void AstPatMember::dumpJson(std::ostream& str) const {
|
||||
if (isConcat()) dumpJsonBoolFunc(str, isConcat);
|
||||
if (isDefault()) dumpJsonBoolFunc(str, isDefault);
|
||||
dumpJsonBoolFuncIf(str, isConcat);
|
||||
dumpJsonBoolFuncIf(str, isDefault);
|
||||
dumpJsonGen(str);
|
||||
}
|
||||
void AstNodeTriop::dump(std::ostream& str) const { this->AstNodeExpr::dump(str); }
|
||||
|
|
@ -2996,8 +3014,8 @@ void AstNodeFTask::dumpJson(std::ostream& str) const {
|
|||
dumpJsonBoolFunc(str, dpiOpenParent);
|
||||
dumpJsonBoolFunc(str, isExternDef);
|
||||
dumpJsonBoolFunc(str, isExternProto);
|
||||
if (isVirtual()) dumpJsonBoolFunc(str, isVirtual);
|
||||
if (needProcess()) dumpJsonBoolFunc(str, needProcess);
|
||||
dumpJsonBoolFuncIf(str, isVirtual);
|
||||
dumpJsonBoolFuncIf(str, needProcess);
|
||||
dumpJsonBoolFunc(str, prototype);
|
||||
dumpJsonBoolFunc(str, recursive);
|
||||
dumpJsonBoolFunc(str, taskPublic);
|
||||
|
|
|
|||
|
|
@ -141,4 +141,16 @@ module Test(/*AUTOARG*/
|
|||
cover_concurrent_stmt: cover property(prop) $display("pass");
|
||||
|
||||
restrict property (prop);
|
||||
|
||||
always_ff @(posedge clk) begin
|
||||
unique0 casez(in)
|
||||
1: $display("1a");
|
||||
default: $display("1b");
|
||||
endcase
|
||||
priority casez(1'b1)
|
||||
in[0]: $display("2a");
|
||||
default: $display("2b");
|
||||
endcase
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue