diff --git a/src/dfmt.d b/src/dfmt.d index d8a9769..50647e0 100644 --- a/src/dfmt.d +++ b/src/dfmt.d @@ -954,6 +954,11 @@ private: } else if (currentIs(tok!"identifier") && peekIs(tok!":")) { + while ((peekBackIs(tok!"}", true) || peekBackIs(tok!";", true)) + && indents.length && isTempIndent(indents.top())) + { + indents.pop(); + } auto l = indents.indentToMostRecent(tok!"switch"); if (l != -1) { @@ -970,6 +975,11 @@ private: } else if (currentIs(tok!"case") || currentIs(tok!"default")) { + while ((peekBackIs(tok!"}", true) || peekBackIs(tok!";", true)) + && indents.length && isTempIndent(indents.top())) + { + indents.pop(); + } auto l = indents.indentToMostRecent(tok!"switch"); if (l != -1) indentLevel = l; diff --git a/tests/issue0092.d b/tests/issue0092.d new file mode 100644 index 0000000..64f2ab6 --- /dev/null +++ b/tests/issue0092.d @@ -0,0 +1,12 @@ +unittest +{ + switch (cast(uint) sz) + { + case 3: + if (!global.params.is64bit) + goto Lmemory; + case 4: + t1 = Type.tint32; + break; + } +} diff --git a/tests/issue0092.d.ref b/tests/issue0092.d.ref new file mode 100644 index 0000000..cdbff8c --- /dev/null +++ b/tests/issue0092.d.ref @@ -0,0 +1,12 @@ +unittest +{ + switch (cast(uint) sz) + { + case 3: + if (!global.params.is64bit) + goto Lmemory; + case 4: + t1 = Type.tint32; + break; + } +}