From 6f19835fd82788e94e92dc340fb44a02c253c4f3 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Mon, 25 Oct 2010 13:29:50 +0200 Subject: [PATCH] C++ indenter: Ensure indent and padding are non-negative. Reviewed-by: Roberto Raggi --- src/plugins/cpptools/cppcodeformatter.cpp | 24 +++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index b733277dd41..03fe1d9096d 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -1247,6 +1247,12 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd *indentDepth = m_indentSize; break; } + + // ensure padding and indent are >= 0 + *indentDepth = qMax(0, *indentDepth); + *savedIndentDepth = qMax(0, *savedIndentDepth); + *paddingDepth = qMax(0, *paddingDepth); + *savedPaddingDepth = qMax(0, *savedPaddingDepth); } void QtStyleCodeFormatter::adjustIndent(const QList<CPlusPlus::Token> &tokens, int lexerState, int *indentDepth, int *paddingDepth) const @@ -1287,7 +1293,10 @@ void QtStyleCodeFormatter::adjustIndent(const QList<CPlusPlus::Token> &tokens, i if (topState.type == expression && previousState.type == declaration_start) { *paddingDepth = m_indentSize; } else if (topState.type == ternary_op) { - *paddingDepth -= 2; + if (*paddingDepth >= 2) + *paddingDepth -= 2; + else + *paddingDepth = 0; } break; case T_LBRACE: { @@ -1382,8 +1391,12 @@ void QtStyleCodeFormatter::adjustIndent(const QList<CPlusPlus::Token> &tokens, i break; case T_LESS_LESS: case T_GREATER_GREATER: - if (topState.type == stream_op || topState.type == stream_op_cont) - *paddingDepth -= 3; // to align << with << + if (topState.type == stream_op || topState.type == stream_op_cont) { + if (*paddingDepth >= 3) + *paddingDepth -= 3; // to align << with << + else + *paddingDepth = 0; + } break; case T_COMMENT: case T_DOXY_COMMENT: @@ -1395,7 +1408,10 @@ void QtStyleCodeFormatter::adjustIndent(const QList<CPlusPlus::Token> &tokens, i && (kind == T_COMMENT || kind == T_DOXY_COMMENT) && (lexerState == Lexer::State_Default || tokens.size() != 1)) { - *indentDepth -= m_indentSize; + if (*indentDepth >= m_indentSize) + *indentDepth -= m_indentSize; + else + *indentDepth = 0; } break; } -- GitLab