With --no-decoration, remove output whitespace (#3460)

Signed-off-by: Kamil Rakoczy <krakoczy@antmicro.com>
This commit is contained in:
Kamil Rakoczy 2022-06-10 13:26:33 +02:00 committed by GitHub
parent e7dc2de14b
commit 660d1059b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 987 additions and 973 deletions

View File

@ -790,6 +790,10 @@ class EmitVPrefixedFormatter final : public V3OutFormatter {
} }
} }
virtual void putsOutput(const char* strg) override {
for (const char* cp = strg; *cp; cp++) putcOutput(*cp);
}
public: public:
void prefixFl(FileLine* fl) { m_prefixFl = fl; } void prefixFl(FileLine* fl) { m_prefixFl = fl; }
FileLine* prefixFl() const { return m_prefixFl; } FileLine* prefixFl() const { return m_prefixFl; }

View File

@ -700,6 +700,10 @@ int V3OutFormatter::endLevels(const char* strg) {
} }
void V3OutFormatter::puts(const char* strg) { void V3OutFormatter::puts(const char* strg) {
if (!v3Global.opt.decoration()) {
putsOutput(strg);
return;
}
if (m_prependIndent && strg[0] != '\n') { if (m_prependIndent && strg[0] != '\n') {
putsNoTracking(indentSpaces(endLevels(strg))); putsNoTracking(indentSpaces(endLevels(strg)));
m_prependIndent = false; m_prependIndent = false;
@ -759,13 +763,8 @@ void V3OutFormatter::puts(const char* strg) {
break; break;
case '(': case '(':
indentInc(); indentInc();
if (v3Global.opt.decoration()) {
// Line up continuation with open paren, plus one indent // Line up continuation with open paren, plus one indent
m_parenVec.push(m_column); m_parenVec.push(m_column);
} else {
// Line up continuation with block+1
m_parenVec.push(m_indentLevel * m_blockIndent);
}
break; break;
case ')': case ')':
if (!m_parenVec.empty()) m_parenVec.pop(); if (!m_parenVec.empty()) m_parenVec.pop();
@ -806,6 +805,7 @@ void V3OutFormatter::putBreakExpr() {
// Add a line break if too wide // Add a line break if too wide
void V3OutFormatter::putBreak() { void V3OutFormatter::putBreak() {
if (!v3Global.opt.decoration()) return;
if (!m_nobreak) { if (!m_nobreak) {
// char s[1000]; sprintf(s, "{%d,%d}", m_column, m_parenVec.top()); putsNoTracking(s); // char s[1000]; sprintf(s, "{%d,%d}", m_column, m_parenVec.top()); putsNoTracking(s);
if (exceededWidth()) { if (exceededWidth()) {
@ -824,11 +824,19 @@ void V3OutFormatter::putsQuoted(const string& strg) {
putcNoTracking('"'); putcNoTracking('"');
} }
void V3OutFormatter::putsNoTracking(const string& strg) { void V3OutFormatter::putsNoTracking(const string& strg) {
if (!v3Global.opt.decoration()) {
putsOutput(strg.c_str());
return;
}
// Don't track {}'s, probably because it's a $display format string // Don't track {}'s, probably because it's a $display format string
for (const char c : strg) putcNoTracking(c); for (const char c : strg) putcNoTracking(c);
} }
void V3OutFormatter::putcNoTracking(char chr) { void V3OutFormatter::putcNoTracking(char chr) {
if (!v3Global.opt.decoration()) {
putcOutput(chr);
return;
}
switch (chr) { switch (chr) {
case '\n': case '\n':
m_lineno++; m_lineno++;

View File

@ -176,6 +176,7 @@ public:
// CALLBACKS - MUST OVERRIDE // CALLBACKS - MUST OVERRIDE
virtual void putcOutput(char chr) = 0; virtual void putcOutput(char chr) = 0;
virtual void putsOutput(const char* str) = 0;
}; };
//============================================================================ //============================================================================
@ -193,6 +194,7 @@ public:
private: private:
// CALLBACKS // CALLBACKS
virtual void putcOutput(char chr) override { fputc(chr, m_fp); } virtual void putcOutput(char chr) override { fputc(chr, m_fp); }
virtual void putsOutput(const char* str) override { fputs(str, m_fp); }
}; };
class V3OutCFile VL_NOT_FINAL : public V3OutFile { class V3OutCFile VL_NOT_FINAL : public V3OutFile {