Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJohn Camelon2004-04-05 03:50:41 +0000
committerJohn Camelon2004-04-05 03:50:41 +0000
commit91571bd2e514bb0edfa614ddbdcbab2c2d10c476 (patch)
tree5157c5a5aa44e2cb9162619f6b5d1bc395c28c30 /core
parent45cf3d9fb2081798eebc7cf87aadb33e58fd39be (diff)
downloadorg.eclipse.cdt-91571bd2e514bb0edfa614ddbdcbab2c2d10c476.tar.gz
org.eclipse.cdt-91571bd2e514bb0edfa614ddbdcbab2c2d10c476.tar.xz
org.eclipse.cdt-91571bd2e514bb0edfa614ddbdcbab2c2d10c476.zip
org.eclipse.cdt.core
Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=56516 Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=53786 org.eclipse.cdt.core.tests Added CompleteParseASTTest::testBug56516() && CompleteParseASTTests::testBug53786().
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core.tests/ChangeLog3
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java26
-rw-r--r--core/org.eclipse.cdt.core/parser/ChangeLog-parser4
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java198
4 files changed, 134 insertions, 97 deletions
diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog
index f7045331929..e8c5e0bec19 100644
--- a/core/org.eclipse.cdt.core.tests/ChangeLog
+++ b/core/org.eclipse.cdt.core.tests/ChangeLog
@@ -1,3 +1,6 @@
+2004-04-04 John Camelon
+ Added CompleteParseASTTest::testBug56516() && CompleteParseASTTests::testBug53786().
+
2004-04-02 Andrew Niefer
- created CompleteParseASTTemplateTest, added it to the ParserTestSuite and moved all the template tests from
CompleteParseASTTest to it.
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
index ccaf7864438..cf19ccdc259 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
@@ -37,8 +37,6 @@ import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTReference;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
-import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
-import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter;
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
@@ -1352,4 +1350,28 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
assertEquals( thePointer.getName(), "pA" );
assertFalse( i.hasNext() );
}
+
+ public void testBug56516() throws Exception
+ {
+ Iterator i = parse( "typedef struct blah sb;").getDeclarations();
+ IASTTypedefDeclaration sb = (IASTTypedefDeclaration) i.next();
+ assertEquals( sb.getName(), "sb");
+ assertFalse( i.hasNext() );
+ IASTElaboratedTypeSpecifier elab = ((IASTElaboratedTypeSpecifier)sb.getAbstractDeclarator().getTypeSpecifier());
+ assertEquals( elab.getName(), "blah");
+ assertEquals( elab.getClassKind(), ASTClassKind.STRUCT );
+ }
+
+ public void testBug53786() throws Exception
+ {
+ Iterator i = parse( "struct Example { struct Data * data; };").getDeclarations();
+ IASTClassSpecifier Example = (IASTClassSpecifier) ((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
+ assertFalse( i.hasNext() );
+ assertEquals( Example.getName(), "Example");
+ assertEquals( Example.getClassKind(), ASTClassKind.STRUCT );
+ Iterator j = getDeclarations( Example );
+ IASTField data = (IASTField) j.next();
+ assertFalse( j.hasNext() );
+ assertEquals( data.getName(), "data" );
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser
index 3671630e255..0ae5e0b1cd7 100644
--- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser
+++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser
@@ -1,3 +1,7 @@
+2004-04-04 John Camelon
+ Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=56516
+ Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=53786
+
2004-04-02 Andrew Niefer
- partial handling template explicit instantiations
- bug 56834 - Symbols not available until end of parameter list, fixed for templates using temporary code block
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
index 637c480ef37..65618ea8398 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
@@ -2783,119 +2783,123 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind kind, ITokenDuple name, int startingOffset, int startingLine, int endOffset, int endingLine, boolean isForewardDecl, boolean isFriend) throws ASTSemanticException
{
IContainerSymbol currentScopeSymbol = scopeToSymbol(scope);
- TypeInfo.eType pstType = classKindToTypeInfo(kind);
+ TypeInfo.eType pstType = classKindToTypeInfo(kind);
List references = new ArrayList();
-
IToken nameToken = name.getFirstToken();
-
String newSymbolName = ""; //$NON-NLS-1$
List templateIdArgList = null;
boolean isTemplateId = false;
-
- if( name.getSegmentCount() != 1 ) // qualified name
+ if (name.getSegmentCount() != 1) // qualified name
{
- ITokenDuple containerSymbolName = name.getLeadingSegments();
- currentScopeSymbol = (IContainerSymbol)lookupQualifiedName( currentScopeSymbol, containerSymbolName, references, true);
- if( currentScopeSymbol == null )
- handleProblem( IProblem.SEMANTIC_NAME_NOT_FOUND, containerSymbolName.toString(), containerSymbolName.getFirstToken().getOffset(), containerSymbolName.getLastToken().getEndOffset(), containerSymbolName.getLastToken().getLineNumber() );
-
+ ITokenDuple containerSymbolName = name.getLeadingSegments();
+ currentScopeSymbol = (IContainerSymbol) lookupQualifiedName(
+ currentScopeSymbol, containerSymbolName, references, true);
+ if (currentScopeSymbol == null)
+ handleProblem(IProblem.SEMANTIC_NAME_NOT_FOUND,
+ containerSymbolName.toString(), containerSymbolName
+ .getFirstToken().getOffset(),
+ containerSymbolName.getLastToken().getEndOffset(),
+ containerSymbolName.getLastToken().getLineNumber());
nameToken = name.getLastSegment().getFirstToken();
}
-
//template-id
- List [] array = name.getTemplateIdArgLists();
- if( array != null ){
+ List[] array = name.getTemplateIdArgLists();
+ if (array != null) {
isTemplateId = true;
- templateIdArgList = array[ array.length - 1 ];
+ templateIdArgList = array[array.length - 1];
}
-
newSymbolName = nameToken.getImage();
-
ISymbol checkSymbol = null;
- if( !isTemplateId ){
- try
- {
- if( isFriend ){
- checkSymbol = ((IDerivableContainerSymbol)currentScopeSymbol).lookupForFriendship( newSymbolName );
- } else {
- checkSymbol = currentScopeSymbol.elaboratedLookup( pstType, newSymbolName);
+ if (!isTemplateId) {
+ try {
+ if (isFriend) {
+ checkSymbol = ((IDerivableContainerSymbol) currentScopeSymbol)
+ .lookupForFriendship(newSymbolName);
+ } else {
+ checkSymbol = currentScopeSymbol.elaboratedLookup(pstType,
+ newSymbolName);
}
- }
- catch (ParserSymbolTableException e)
- {
- handleProblem(e.createProblemID(),nameToken.getImage(), nameToken.getOffset(), nameToken.getEndOffset(), nameToken.getLineNumber() );
-
+ } catch (ParserSymbolTableException e) {
+ handleProblem(e.createProblemID(), nameToken.getImage(),
+ nameToken.getOffset(), nameToken.getEndOffset(),
+ nameToken.getLineNumber());
}
}
-
List args = null;
- if( isTemplateId ){
- args = getTemplateArgList( templateIdArgList );
+ if (isTemplateId) {
+ args = getTemplateArgList(templateIdArgList);
}
-
- if( isForewardDecl )
- {
- if( scope instanceof IASTTemplateInstantiation )
- {
- if( isTemplateId ){
- checkSymbol = pst.newDerivableContainerSymbol( newSymbolName, pstType );
- try {
- currentScopeSymbol.addTemplateId( checkSymbol, args );
- } catch (ParserSymbolTableException e) {
- handleProblem(e.createProblemID(),nameToken.getImage(), nameToken.getOffset(), nameToken.getEndOffset(), nameToken.getLineNumber() );
- }
- } else {
- handleProblem( IProblem.SEMANTIC_INVALID_TEMPLATE, nameToken.getImage() );
- }
- checkSymbol = ((ASTTemplateInstantiation)scope).getInstanceSymbol();
- }
- else if( checkSymbol == null )
- {
- checkSymbol = pst.newDerivableContainerSymbol( newSymbolName, pstType );
- checkSymbol.setIsForwardDeclaration( true );
- try
- {
- if( isFriend ){
- ((IDerivableContainerSymbol)currentScopeSymbol).addFriend( checkSymbol );
- } else {
- if( !isTemplateId )
- currentScopeSymbol.addSymbol( checkSymbol );
- else
- currentScopeSymbol.addTemplateId( checkSymbol, args );
- }
- }
- catch (ParserSymbolTableException e1)
- {
- handleProblem(e1.createProblemID(),nameToken.getImage(), nameToken.getOffset(), nameToken.getEndOffset(), nameToken.getLineNumber() );
- }
-
- ASTElaboratedTypeSpecifier elab =
- new ASTElaboratedTypeSpecifier( checkSymbol, kind, startingOffset, startingLine, name.getFirstToken().getOffset(), name.getLastToken().getEndOffset(), name.getLastToken().getLineNumber(), endOffset, endingLine, references, isForewardDecl );
-
- attachSymbolExtension( checkSymbol, elab, isForewardDecl );
- } else if( isFriend ){
- ((IDerivableContainerSymbol)currentScopeSymbol).addFriend( checkSymbol );
+ if (scope instanceof IASTTemplateInstantiation) {
+ if (isTemplateId) {
+ checkSymbol = pst.newDerivableContainerSymbol(newSymbolName,
+ pstType);
+ try {
+ currentScopeSymbol.addTemplateId(checkSymbol, args);
+ } catch (ParserSymbolTableException e) {
+ handleProblem(e.createProblemID(), nameToken.getImage(),
+ nameToken.getOffset(), nameToken.getEndOffset(),
+ nameToken.getLineNumber());
+ }
+ } else {
+ handleProblem(IProblem.SEMANTIC_INVALID_TEMPLATE, nameToken
+ .getImage());
}
- }
-
- if( checkSymbol != null ){
- if( scope instanceof IASTTemplateInstantiation ){
- addReference( references, createReference( checkSymbol, newSymbolName, nameToken.getOffset() ));
- }
- if( checkSymbol.getASTExtension().getPrimaryDeclaration() instanceof IASTClassSpecifier ||
- checkSymbol.getASTExtension().getPrimaryDeclaration() instanceof IASTEnumerationSpecifier
- )
- {
- ASTElaboratedTypeSpecifier elab = new ASTElaboratedTypeSpecifier( checkSymbol, kind, startingOffset, startingLine, name.getFirstToken().getOffset(), name.getLastToken().getEndOffset(), name.getLastToken().getLineNumber(), endOffset, endingLine, references, isForewardDecl );
- attachSymbolExtension( checkSymbol, elab, isForewardDecl );
+ checkSymbol = ((ASTTemplateInstantiation) scope)
+ .getInstanceSymbol();
+ } else if (checkSymbol == null) {
+ checkSymbol = pst.newDerivableContainerSymbol(newSymbolName,
+ pstType);
+ checkSymbol.setIsForwardDeclaration(true);
+ try {
+ if (isFriend) {
+ ((IDerivableContainerSymbol) currentScopeSymbol)
+ .addFriend(checkSymbol);
+ } else {
+ if (!isTemplateId)
+ currentScopeSymbol.addSymbol(checkSymbol);
+ else
+ currentScopeSymbol.addTemplateId(checkSymbol, args);
+ }
+ } catch (ParserSymbolTableException e1) {
+ handleProblem(e1.createProblemID(), nameToken.getImage(),
+ nameToken.getOffset(), nameToken.getEndOffset(),
+ nameToken.getLineNumber());
+ }
+ ASTElaboratedTypeSpecifier elab = new ASTElaboratedTypeSpecifier(
+ checkSymbol, kind, startingOffset, startingLine, name
+ .getFirstToken().getOffset(), name.getLastToken()
+ .getEndOffset(), name.getLastToken()
+ .getLineNumber(), endOffset, endingLine,
+ references, isForewardDecl);
+ attachSymbolExtension(checkSymbol, elab, !isForewardDecl);
+ } else if (isFriend) {
+ ((IDerivableContainerSymbol) currentScopeSymbol)
+ .addFriend(checkSymbol);
+ }
+ if (checkSymbol != null) {
+ if (scope instanceof IASTTemplateInstantiation) {
+ addReference(references, createReference(checkSymbol,
+ newSymbolName, nameToken.getOffset()));
+ }
+ if (checkSymbol.getASTExtension().getPrimaryDeclaration() instanceof IASTClassSpecifier
+ || checkSymbol.getASTExtension().getPrimaryDeclaration() instanceof IASTEnumerationSpecifier) {
+ ASTElaboratedTypeSpecifier elab = new ASTElaboratedTypeSpecifier(
+ checkSymbol, kind, startingOffset, startingLine, name
+ .getFirstToken().getOffset(), name
+ .getLastToken().getEndOffset(), name
+ .getLastToken().getLineNumber(), endOffset,
+ endingLine, references, isForewardDecl);
+ attachSymbolExtension(checkSymbol, elab, !isForewardDecl);
return elab;
}
-
- if( checkSymbol.getASTExtension().getPrimaryDeclaration() instanceof IASTElaboratedTypeSpecifier )
- return (IASTElaboratedTypeSpecifier)checkSymbol.getASTExtension().getPrimaryDeclaration();
- } else {
- handleProblem(IProblem.SEMANTIC_NAME_NOT_FOUND, newSymbolName, nameToken.getOffset(), nameToken.getEndOffset(), nameToken.getLineNumber() );
- }
+ if (checkSymbol.getASTExtension().getPrimaryDeclaration() instanceof IASTElaboratedTypeSpecifier)
+ return (IASTElaboratedTypeSpecifier) checkSymbol
+ .getASTExtension().getPrimaryDeclaration();
+ } else {
+ handleProblem(IProblem.SEMANTIC_NAME_NOT_FOUND, newSymbolName,
+ nameToken.getOffset(), nameToken.getEndOffset(), nameToken
+ .getLineNumber());
+ }
// assert false : this;
@@ -2905,9 +2909,13 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
protected ParserSymbolTable pst;
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createNamespaceAlias(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ITokenDuple, int, int, int)
- */
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createNamespaceAlias(org.eclipse.cdt.core.parser.ast.IASTScope,
+ * java.lang.String, org.eclipse.cdt.core.parser.ITokenDuple, int, int,
+ * int)
+ */
public IASTNamespaceAlias createNamespaceAlias(IASTScope scope, String identifier, ITokenDuple alias, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine) throws ASTSemanticException
{
IContainerSymbol startingSymbol = scopeToSymbol(scope);

Back to the top