# HG changeset patch # User Christian Brabandt # Date 1444745705 -7200 # Node ID d3c57e7f489a5c05e26b0281029517f3b88c2fac # Parent ef6234bef1ded2e61ce7a6031339de2f530b14b7 commit https://github.com/vim/vim/commit/d1b15dec4d00d7ed5e92ff4e0fb7fc2e0818e479 Author: Bram Moolenaar Date: Tue Oct 13 16:13:39 2015 +0200 patch 7.4.893 Problem: C indenting is wrong below a "case (foo):" because it is recognized as a C++ base class construct. Issue #38. Solution: Check for the case keyword. diff --git a/src/misc1.c b/src/misc1.c --- a/src/misc1.c +++ b/src/misc1.c @@ -6555,7 +6555,7 @@ cin_is_cpp_baseclass(cached) pos->lnum = lnum; line = ml_get(lnum); - s = cin_skipcomment(line); + s = line; for (;;) { if (*s == NUL) @@ -6564,6 +6564,13 @@ cin_is_cpp_baseclass(cached) break; /* Continue in the cursor line. */ line = ml_get(++lnum); + s = line; + } + if (s == line) + { + /* don't recognize "case (foo):" as a baseclass */ + if (cin_iscase(s, FALSE)) + break; s = cin_skipcomment(line); if (*s == NUL) continue; diff --git a/src/testdir/test3.in b/src/testdir/test3.in --- a/src/testdir/test3.in +++ b/src/testdir/test3.in @@ -932,6 +932,33 @@ if (1) a = 1; } +void func() +{ +switch (foo) +{ +case (bar): +if (baz()) +quux(); +break; +case (shmoo): +if (!bar) +{ +} +case (foo1): +switch (bar) +{ +case baz: +baz_f(); +break; +} +break; +default: +baz(); +baz(); +break; +} +} + /* end of AUTO */ STARTTEST diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok --- a/src/testdir/test3.ok +++ b/src/testdir/test3.ok @@ -920,6 +920,33 @@ void getstring() { a = 1; } +void func() +{ + switch (foo) + { + case (bar): + if (baz()) + quux(); + break; + case (shmoo): + if (!bar) + { + } + case (foo1): + switch (bar) + { + case baz: + baz_f(); + break; + } + break; + default: + baz(); + baz(); + break; + } +} + /* end of AUTO */ diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 893, +/**/ 892, /**/ 891,