1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-11 19:15:22 +02:00

Added AST2TemplateTests._testRebindPattern_214447.

This commit is contained in:
Sergey Prigogin 2008-01-07 04:04:05 +00:00
parent 01959bfd25
commit cf2b2ce763
2 changed files with 447 additions and 402 deletions

View file

@ -289,15 +289,15 @@ public class AST2BaseTest extends BaseTestCase {
{ {
shouldVisitNames = true; shouldVisitNames = true;
} }
public List nameList = new ArrayList(); public List<IASTName> nameList = new ArrayList<IASTName>();
public int visit( IASTName name ){ public int visit(IASTName name) {
nameList.add( name ); nameList.add(name);
return PROCESS_CONTINUE; return PROCESS_CONTINUE;
} }
public IASTName getName( int idx ){ public IASTName getName(int idx) {
if( idx < 0 || idx >= nameList.size() ) if (idx < 0 || idx >= nameList.size())
return null; return null;
return (IASTName) nameList.get( idx ); return nameList.get(idx);
} }
public int size() { return nameList.size(); } public int size() { return nameList.size(); }
} }

View file

@ -60,6 +60,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable;
import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSemantics;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor;
/** /**
@ -2074,27 +2075,71 @@ public class AST2TemplateTests extends AST2BaseTest {
assertFalse(name.resolveBinding() instanceof IProblemBinding); assertFalse(name.resolveBinding() instanceof IProblemBinding);
} }
name= (IASTName) col.nameList.get(0); name= col.nameList.get(0);
assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter); assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter);
name= (IASTName) col.nameList.get(1); name= col.nameList.get(1);
assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter); assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter);
name= (IASTName) col.nameList.get(2); name= col.nameList.get(2);
assertTrue(name.resolveBinding() instanceof ICPPFunction); assertTrue(name.resolveBinding() instanceof ICPPFunction);
name= (IASTName) col.nameList.get(3); name= col.nameList.get(3);
assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter); assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter);
name= (IASTName) col.nameList.get(4); name= col.nameList.get(4);
assertTrue(name.resolveBinding() instanceof IParameter); assertTrue(name.resolveBinding() instanceof IParameter);
name= (IASTName) col.nameList.get(5); name= col.nameList.get(5);
assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter); assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter);
name= (IASTName) col.nameList.get(6); name= col.nameList.get(6);
assertTrue(name.resolveBinding() instanceof IParameter); assertTrue(name.resolveBinding() instanceof IParameter);
name= (IASTName) col.nameList.get(7); name= col.nameList.get(7);
assertTrue(name.resolveBinding() instanceof IParameter); assertTrue(name.resolveBinding() instanceof IParameter);
name= (IASTName) col.nameList.get(8); name= col.nameList.get(8);
assertTrue(name.resolveBinding() instanceof IParameter); assertTrue(name.resolveBinding() instanceof IParameter);
name= (IASTName) col.nameList.get(9); name= col.nameList.get(9);
assertTrue(name.resolveBinding() instanceof IParameter); assertTrue(name.resolveBinding() instanceof IParameter);
name= (IASTName) col.nameList.get(10); name= col.nameList.get(10);
assertTrue(name.resolveBinding() instanceof IParameter); assertTrue(name.resolveBinding() instanceof IParameter);
} }
// template<typename _Tp>
// class Allocator {
// public:
// typedef _Tp& alloc_reference;
// template<typename _Tp1>
// struct rebind {
// typedef Allocator<_Tp1> other;
// };
// };
//
// template<typename _Tp, typename _Alloc>
// class VecBase {
// public:
// typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
// };
//
// template<typename _Tp, typename _Alloc = Allocator<_Tp> >
// class Vec : protected VecBase<_Tp, _Alloc> {
// public:
// typedef typename VecBase<_Tp, _Alloc>::_Tp_alloc_type::alloc_reference reference;
// };
//
// class A {};
//
// void f(Vec<A>::reference r) {
// }
public void _testRebindPattern_214447() throws Exception {
StringBuffer buffer = getContents(1)[0];
IASTTranslationUnit tu = parse(buffer.toString(), ParserLanguage.CPP, true, true);
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
for (IASTName name : col.nameList) {
IBinding b0 = name.resolveBinding();
System.out.println(name.toString() + ": " + b0.getClass().getName());
if ("r".equals(String.valueOf(name))) {
IType type = ((ICPPVariable) b0).getType();
type = CPPSemantics.getUltimateType(type, false);
assertInstance(type, ICPPClassType.class);
assertEquals("A", ((ICPPClassType) type).getName());
}
}
}
} }