From 573d7a0dffcb20e328c154c82219a258955f1e7b Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Wed, 6 Apr 2005 19:11:41 +0000 Subject: [PATCH] handle typedefs of functions --- .../cdt/core/parser/tests/ast2/AST2CPPTests.java | 10 ++++++++++ .../cdt/internal/core/dom/parser/cpp/CPPVisitor.java | 6 ++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index c789d008939..2e15f1a19c6 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -3308,5 +3308,15 @@ public class AST2CPPTests extends AST2BaseTest { assertNotNull( dtor.getInitializer() ); } + + public void testTypedefFunction() throws Exception { + IASTTranslationUnit tu = parse( "typedef int foo (int);", ParserLanguage.CPP ); //$NON-NLS-1$ + CPPNameCollector col = new CPPNameCollector(); + tu.accept( col ); + + IBinding binding = col.getName(0).resolveBinding(); + assertTrue( binding instanceof ITypedef ); + assertTrue( ((ITypedef)binding).getType() instanceof IFunctionType ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java index e77d7b4855c..10ecf5ece85 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java @@ -465,8 +465,10 @@ public class CPPVisitor { return function; } } - - if( scope instanceof ICPPClassScope ){ + IASTSimpleDeclaration simpleDecl = ( parent instanceof IASTSimpleDeclaration ) ? (IASTSimpleDeclaration)parent : null; + if( simpleDecl != null && simpleDecl.getDeclSpecifier().getStorageClass() == IASTDeclSpecifier.sc_typedef ){ + binding = new CPPTypedef( name ); + } else if( scope instanceof ICPPClassScope ){ if( isConstructor( scope, declarator) ) binding = template ? (ICPPConstructor) new CPPConstructorTemplate( name ) : new CPPConstructor( (ICPPASTFunctionDeclarator) declarator );