diff options
author | John Camelon | 2003-09-26 19:21:12 +0000 |
---|---|---|
committer | John Camelon | 2003-09-26 19:21:12 +0000 |
commit | a3a827cf923126be62a941826f9258b99d1e4f19 (patch) | |
tree | af7a3280b29c02e5a619c1d7b78d40ef1209d30d /core/org.eclipse.cdt.core/parser | |
parent | 3b2b1c6a42922fe18fc34a30691c5ba496ae6692 (diff) | |
download | org.eclipse.cdt-a3a827cf923126be62a941826f9258b99d1e4f19.tar.gz org.eclipse.cdt-a3a827cf923126be62a941826f9258b99d1e4f19.tar.xz org.eclipse.cdt-a3a827cf923126be62a941826f9258b99d1e4f19.zip |
CORE
Fixed Bug 43644 : 6 triangle icons appearing in outline viewer when typing an error
Fixed Bug 43062 : Outline is confused on operator methods containing spaces
Fixed Bug 39531 : Problems with type conversion operators
TEST
Added QuickParseASTTests::testBug43644() & testBug43062().
Moved ASTFailedTests::testBug39531() to QuickParseASTTests.
Diffstat (limited to 'core/org.eclipse.cdt.core/parser')
3 files changed, 54 insertions, 17 deletions
diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog b/core/org.eclipse.cdt.core/parser/ChangeLog index cdcf2a744c4..feda4bf46e8 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog +++ b/core/org.eclipse.cdt.core/parser/ChangeLog @@ -1,3 +1,8 @@ +2003-09-26 John Camelon + Fixed Bug 43644 : 6 triangle icons appearing in outline viewer when typing an error + Fixed Bug 43062 : Outline is confused on operator methods containing spaces + Fixed Bug 39531 : Problems with type conversion operators + 2003-09-25 Hoda Amer - Last part of solution to bug#42453: Expression result types not computed Added the handling of POSTFIX_TYPENAME_IDENTIFIER diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index 31945673e4a..f44faa3f116 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -846,8 +846,9 @@ public class Parser implements IParser IASTTemplate ownerTemplate) throws Backtrack { + IToken firstToken = LA(1); DeclarationWrapper sdw = - new DeclarationWrapper(scope, LA(1).getOffset(), ownerTemplate); + new DeclarationWrapper(scope, firstToken.getOffset(), ownerTemplate); declSpecifierSeq(false, strategy == SimpleDeclarationStrategy.TRY_CONSTRUCTOR, sdw, forKR ); try @@ -893,6 +894,8 @@ public class Parser implements IParser case IToken.tLBRACE : if (forKR) throw backtrack; + if( firstToken == LA(1) ) + throw backtrack; declarator.setHasFunctionBody(true); hasFunctionBody = true; break; @@ -2202,7 +2205,7 @@ public class Parser implements IParser else { // must be a conversion function - typeId(d.getDeclarationWrapper().getScope(), false ); + typeId(d.getDeclarationWrapper().getScope(), true ); toSend = lastToken; } ITokenDuple duple = @@ -3553,7 +3556,7 @@ public class Parser implements IParser /** * @throws Backtrack */ - protected IASTTypeId typeId(IASTScope scope, boolean forNewExpression ) throws Backtrack + protected IASTTypeId typeId(IASTScope scope, boolean skipArrayModifiers ) throws Backtrack { IToken mark = mark(); ITokenDuple name = null; @@ -3576,6 +3579,7 @@ public class Parser implements IParser // do nothing } + boolean encounteredType = false; simpleMods : for (;;) { switch (LT(1)) @@ -3611,45 +3615,61 @@ public class Parser implements IParser break; case IToken.tIDENTIFIER : + if( encounteredType ) break simpleMods; + encounteredType = true; name = name(); kind = IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME; - break simpleMods; + break; case IToken.t_int : + if( encounteredType ) break simpleMods; + encounteredType = true; kind = IASTSimpleTypeSpecifier.Type.INT; consume(); - break simpleMods; + break; case IToken.t_char : + if( encounteredType ) break simpleMods; + encounteredType = true; kind = IASTSimpleTypeSpecifier.Type.CHAR; consume(); - break simpleMods; + break; case IToken.t_bool : + if( encounteredType ) break simpleMods; + encounteredType = true; kind = IASTSimpleTypeSpecifier.Type.BOOL; consume(); - break simpleMods; + break; case IToken.t_double : + if( encounteredType ) break simpleMods; + encounteredType = true; kind = IASTSimpleTypeSpecifier.Type.DOUBLE; consume(); - break simpleMods; + break; case IToken.t_float : + if( encounteredType ) break simpleMods; + encounteredType = true; kind = IASTSimpleTypeSpecifier.Type.FLOAT; consume(); - break simpleMods; + break; case IToken.t_wchar_t : + if( encounteredType ) break simpleMods; + encounteredType = true; kind = IASTSimpleTypeSpecifier.Type.WCHAR_T; consume(); - break simpleMods; + break; case IToken.t_void : + if( encounteredType ) break simpleMods; + encounteredType = true; kind = IASTSimpleTypeSpecifier.Type.VOID; consume(); - break simpleMods; + break; default : @@ -3690,13 +3710,13 @@ public class Parser implements IParser throw backtrack; TypeId id = new TypeId(); - IToken last = mark(); + IToken last = lastToken; consumePointerOperators( id ); if( lastToken == null ) lastToken = last; - if( ! forNewExpression ) + if( ! skipArrayModifiers ) { - last = mark(); + last = lastToken; consumeArrayModifiers( id, scope ); if( lastToken == null ) lastToken = last; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/TokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/TokenDuple.java index 02204063791..1cf3b5ed72c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/TokenDuple.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/TokenDuple.java @@ -84,16 +84,28 @@ public class TokenDuple implements ITokenDuple { public String toString() { StringBuffer buff = new StringBuffer(); + IToken prev = null; IToken iter = firstToken; for( ; ; ) { - buff.append( iter.getImage() ); - if( iter.getType() == IToken.t_operator ) + if( prev != null && + prev.getType() != IToken.tCOLONCOLON && + prev.getType() != IToken.tIDENTIFIER && + prev.getType() != IToken.tLT && + prev.getType() != IToken.tCOMPL && + iter.getType() != IToken.tGT && + prev.getType() != IToken.tLBRACKET && + iter.getType() != IToken.tRBRACKET && + iter.getType() != IToken.tCOLONCOLON ) buff.append( ' '); + + + buff.append( iter.getImage() ); if( iter == lastToken ) break; + prev = iter; iter = iter.getNext(); } - return buff.toString(); + return buff.toString().trim(); } public boolean isIdentifier() |