From 41be66af952028f9c722e7fe6dc3d3d8fbd0c732 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Sun, 7 Oct 2018 21:23:45 -0400 Subject: [PATCH] Indent output C code '= {' blocks. --- src/V3File.cpp | 23 ++++++++++++++++++++++- src/V3File.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/V3File.cpp b/src/V3File.cpp index 89d741fa4..191426806 100644 --- a/src/V3File.cpp +++ b/src/V3File.cpp @@ -576,7 +576,7 @@ bool V3InFilter::readWholefile(const string& filename, V3InFilter::StrList& outl V3OutFormatter::V3OutFormatter(const string& filename, V3OutFormatter::Language lang) : m_filename(filename), m_lang(lang) , m_lineno(1), m_column(0) - , m_nobreak(false), m_prependIndent(true), m_indentLevel(0) { + , m_nobreak(false), m_prependIndent(true), m_indentLevel(0), m_bracketLevel(0) { m_blockIndent = v3Global.opt.decoration() ? 4 : 1; m_commaWidth = v3Global.opt.decoration() ? 50 : 150; } @@ -680,6 +680,7 @@ void V3OutFormatter::puts(const char *strg) { m_prependIndent = false; } bool wordstart = true; + bool equalsForBracket = false; // Looking for "= {" for (const char* cp=strg; *cp; cp++) { putcNoTracking(*cp); switch (*cp) { @@ -700,9 +701,18 @@ void V3OutFormatter::puts(const char *strg) { wordstart = true; break; case '{': + if (m_lang==LA_C && (equalsForBracket || m_bracketLevel)) { + // Break up large code inside "= { ..." + m_parenVec.push(m_indentLevel*m_blockIndent); // Line up continuation with block+1 + ++m_bracketLevel; + } indentInc(); break; case '}': + if (m_bracketLevel>0) { + m_parenVec.pop(); + --m_bracketLevel; + } indentDec(); break; case '(': @@ -761,6 +771,17 @@ void V3OutFormatter::puts(const char *strg) { wordstart = false; break; } + + switch (*cp) { + case '=': + equalsForBracket = true; + break; + case ' ': + break; + default: + equalsForBracket = false; + break; + } } } diff --git a/src/V3File.h b/src/V3File.h index 77b043360..5ba70e04a 100644 --- a/src/V3File.h +++ b/src/V3File.h @@ -124,6 +124,7 @@ private: bool m_prependIndent; int m_indentLevel; // Current {} indentation std::stack m_parenVec; // Stack of columns where last ( was + int m_bracketLevel; // Intenting = { block, indicates number of {'s seen. int endLevels(const char* strg); const char* indentStr(int levels);