On Tue, Dec 29, 2015 at 3:30 PM Alan Mackenzie wrote: > Hello Andrew and Kristóf. > > On Mon, Dec 28, 2015 at 07:48:22PM -0500, Andrew Hyatt wrote: > > > I've reproduced this bug in emacs 25. > > > It seems like a real problem, thanks (belatedly) for reporting! > > Yes, it's a known problem in CC Mode, and it's seriously difficult to > fix. Parsing happens mainly in the backwards direction, and in general, > the #ifdefs in a file form a tree structure. Which is the line previous > to line 6? It could be L4, it could be L2. Typically, such "parallel" > text lines aren't nice and compatible, the way they are in this example. > Indeed, it's possible to construct an example where L6 has two > alternative syntactic contexts, depending on whether A is defined. In > fact, something like: > > #ifdef A > int foo(int a, int b) > #else > int bar(int a, int b) > { > if (a > b) > #endif > { > return a+b; > } > > would do it. > > I don't know if this problem will ever be fixed. > Perhaps the right thing to do is to mark it as "wontfix" since it's unlikely to be possible without a big rewrite. What do you think? > > > "Ralovich, "Kristóf\"" writes: > > > > Hi, > > > > I hope this letter ends up at the right maintainers! > > > > My problem is when running c-indent-command (by pressing TAB or > > > calling it directly) on the 4th line of the following small snippet > > > (same as attached file): > > > > 1: #ifdef A > > > 2: int foo(int a, int b) > > > 3: #else > > > 4: int bar(int a, int b) > > > 5: #endif > > > 6: { > > > 7: return a+b; > > > 8: } > > > > the line is getting indented falsely: > > > > 1: #ifdef A > > > 2: int foo(int a, int b) > > > 3: #else > > > 4: int bar(int a, int b) > > > 5: #endif > > > 6: { > > > 7: return a+b; > > > 8: } > > > > I think, it should not get indented, please correct me if I am wrong! > > > > I am using emacs 22.2 with it's default cc-mode. > > > > Looking forward to hearing from you! > > > > > Kristóf > > -- > Alan Mackenzie (Nuremberg, Germany). >