diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java index 129435975cd..56bb4b2890c 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java @@ -1274,6 +1274,10 @@ public class CodeFormatterVisitor extends CPPASTVisitor { scribe.printNextToken(Token.tIDENTIFIER, false); scribe.printNextToken(Token.tCOLONCOLON); } + if (peekNextToken() == Token.tCOMPL) { + // destructor + scribe.printNextToken(Token.tCOMPL, false); + } scribe.printNextToken(Token.tIDENTIFIER, false); return PROCESS_SKIP; } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/Scribe.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/Scribe.java index c216dba8b6d..f828910f45f 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/Scribe.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/Scribe.java @@ -603,6 +603,10 @@ public class Scribe { } public void printRaw(int startOffset, int length) { + if (startOffset + length < scanner.getCurrentPosition()) { + // safeguard: don't move backwards + return; + } boolean savedPreserveWS= preserveWhitespace; boolean savedPreserveNL= preserveNewlines; boolean savedSkipOverInactive= skipOverInactive; @@ -1353,10 +1357,10 @@ public class Scribe { boolean hasWhitespaces= false; boolean hasComment= false; boolean hasLineComment= false; + int count= 0; while ((currentToken= scanner.nextToken()) != null) { switch (currentToken.type) { case Token.tWHITESPACE: - int count= 0; char[] whiteSpaces= scanner.getCurrentTokenSource(); for (int i= 0, max= whiteSpaces.length; i < max; i++) { switch (whiteSpaces[i]) { diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/scanner/SimpleScanner.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/scanner/SimpleScanner.java index a8961095df4..18088896d2d 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/scanner/SimpleScanner.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/scanner/SimpleScanner.java @@ -729,7 +729,9 @@ public class SimpleScanner { while (c != '\n' && c != EOFCHAR) { c = getChar(); } - ungetChar(c); + if (c == EOFCHAR) { + ungetChar(c); + } } private boolean matchMultilineComment() {