Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Camelon2003-09-26 19:21:12 +0000
committerJohn Camelon2003-09-26 19:21:12 +0000
commita3a827cf923126be62a941826f9258b99d1e4f19 (patch)
treeaf7a3280b29c02e5a619c1d7b78d40ef1209d30d /core/org.eclipse.cdt.core/parser
parent3b2b1c6a42922fe18fc34a30691c5ba496ae6692 (diff)
downloadorg.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')
-rw-r--r--core/org.eclipse.cdt.core/parser/ChangeLog5
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java48
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/TokenDuple.java18
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()

Back to the top