diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java index dd69716618b..b04fc179415 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java @@ -1106,8 +1106,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { literalExpression.setKind(IASTLiteralExpression.lk_char_constant); literalExpression.setValue(t.getImage()); ((ASTNode) literalExpression).setOffsetAndLength(t.getOffset(), t - .getEndOffset() - - t.getOffset()); + .getLength() ); return literalExpression; case IToken.tLPAREN: t = consume(); @@ -1891,6 +1890,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { IASTDeclarator d = null; if (numKnRCParms > 0) { ICASTKnRFunctionDeclarator functionDecltor = createKnRFunctionDeclarator(); + parmDeclarations = removeNullDeclarations( parmDeclarations ); for (int i = 0; i < parmDeclarations.length; ++i) { if (parmDeclarations[i] != null && !(parmDeclarations[i] instanceof IASTProblemDeclaration)) { @@ -1964,6 +1964,28 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { return d; } + /** + * @param parmDeclarations + * @return + */ + private IASTDeclaration[] removeNullDeclarations(IASTDeclaration[] parmDeclarations) { + int nullCount = 0; + for( int i = 0; i < parmDeclarations.length; ++i ) + { + if( parmDeclarations[i] == null ) + ++nullCount; + } + if( nullCount == 0 ) return parmDeclarations; + IASTDeclaration [] result = new IASTDeclaration[ parmDeclarations.length - nullCount ]; + int count = 0; + for( int i = 0; i < parmDeclarations.length; ++i ) + { + if( parmDeclarations[i] != null ) + result[count++] = parmDeclarations[i]; + } + return result; + } + protected IASTArrayDeclarator createArrayDeclarator() { return new CASTArrayDeclarator(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java index cb34a230654..44dbcd5403d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java @@ -50,23 +50,6 @@ public class ImagedToken extends SimpleToken { this.image = image; } - /* (non-Javadoc) - * @see org.eclipse.cdt.internal.core.parser.token.SimpleToken#getOffset() - */ - public int getOffset() { - int s_val = super.getOffset(); - switch( getType() ) - { - case IToken.tSTRING: - case IToken.tCHAR: - return s_val; - case IToken.tLSTRING: - case IToken.tLCHAR: - return s_val - 1; - default: - return s_val; - } - } public int getLength() { if( getCharImage() == null ) @@ -75,10 +58,8 @@ public class ImagedToken extends SimpleToken { switch( getType() ) { case IToken.tSTRING: - case IToken.tCHAR: return s_length + 2; case IToken.tLSTRING: - case IToken.tLCHAR: return s_length + 3; default: return s_length;