Internals: V3Width call refactoring. No functional change.

This commit is contained in:
Wilson Snyder 2025-03-08 12:44:30 -05:00
parent 5045bf53df
commit 24dbb0bc5c
1 changed files with 21 additions and 33 deletions

View File

@ -6934,17 +6934,17 @@ class WidthVisitor final : public VNVisitor {
= iterateCheck(nodep, "file_descriptor", underp, SELF, FINAL, expDTypep, EXTEND_EXP);
(void)underp; // cppcheck
}
void iterateCheckReal(AstNode* nodep, const char* side, AstNode* underp, Stage stage) {
// Coerce child to real if not already. Child is self-determined
// e.g. nodep=ADDD, underp=ADD in ADDD(ADD(a,b), real-CONST)
// Don't need separate PRELIM and FINAL(double) calls;
// as if resolves to double, the BOTH correctly resolved double,
// otherwise self-determined was correct
iterateCheckTypedSelfPrelim(nodep, side, underp, nodep->findDoubleDType(), stage);
}
void iterateCheckSigned32(AstNode* nodep, const char* side, AstNode* underp, Stage stage) {
// Coerce child to signed32 if not already. Child is self-determined
// underp may change as a result of replacement
if (stage & PRELIM) {
underp = userIterateSubtreeReturnEdits(underp, WidthVP{SELF, PRELIM}.p());
}
if (stage & FINAL) {
AstNodeDType* const expDTypep = nodep->findSigned32DType();
underp = iterateCheck(nodep, side, underp, SELF, FINAL, expDTypep, EXTEND_EXP);
}
(void)underp; // cppcheck
iterateCheckTypedSelfPrelim(nodep, side, underp, nodep->findSigned32DType(), stage);
}
void iterateCheckDelay(AstNode* nodep, const char* side, AstNode* underp, Stage stage) {
// Coerce child to 64-bit delay if not already. Child is self-determined
@ -6966,31 +6966,8 @@ class WidthVisitor final : public VNVisitor {
}
(void)underp; // cppcheck
}
void iterateCheckReal(AstNode* nodep, const char* side, AstNode* underp, Stage stage) {
// Coerce child to real if not already. Child is self-determined
// e.g. nodep=ADDD, underp=ADD in ADDD(ADD(a,b), real-CONST)
// Don't need separate PRELIM and FINAL(double) calls;
// as if resolves to double, the BOTH correctly resolved double,
// otherwise self-determined was correct
// underp may change as a result of replacement
if (stage & PRELIM) {
underp = userIterateSubtreeReturnEdits(underp, WidthVP{SELF, PRELIM}.p());
}
if (stage & FINAL) {
AstNodeDType* const expDTypep = nodep->findDoubleDType();
underp = iterateCheck(nodep, side, underp, SELF, FINAL, expDTypep, EXTEND_EXP);
}
(void)underp; // cppcheck
}
void iterateCheckString(AstNode* nodep, const char* side, AstNode* underp, Stage stage) {
AstNodeDType* const expDTypep = nodep->findStringDType();
if (stage & PRELIM) {
underp = userIterateSubtreeReturnEdits(underp, WidthVP{expDTypep, PRELIM}.p());
}
if (stage & FINAL) {
underp = iterateCheck(nodep, side, underp, SELF, FINAL, expDTypep, EXTEND_EXP);
}
(void)underp; // cppcheck
iterateCheckTyped(nodep, side, underp, nodep->findStringDType(), stage);
}
void iterateCheckTyped(AstNode* nodep, const char* side, AstNode* underp,
AstNodeDType* expDTypep, Stage stage) {
@ -7002,6 +6979,17 @@ class WidthVisitor final : public VNVisitor {
}
(void)underp; // cppcheck
}
void iterateCheckTypedSelfPrelim(AstNode* nodep, const char* side, AstNode* underp,
AstNodeDType* expDTypep, Stage stage) {
// underp may change as a result of replacement
if (stage & PRELIM) {
underp = userIterateSubtreeReturnEdits(underp, WidthVP{SELF, PRELIM}.p());
}
if (stage & FINAL) {
underp = iterateCheck(nodep, side, underp, SELF, FINAL, expDTypep, EXTEND_EXP);
}
(void)underp; // cppcheck
}
void iterateCheckSizedSelf(AstNode* nodep, const char* side, AstNode* underp, Determ determ,
Stage stage) {
// Coerce child to any sized-number data type; child is self-determined