mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-11 11:05:24 +02:00
Added AST2TemplateTests._testRebindPattern_214447.
This commit is contained in:
parent
01959bfd25
commit
cf2b2ce763
2 changed files with 447 additions and 402 deletions
|
@ -289,15 +289,15 @@ public class AST2BaseTest extends BaseTestCase {
|
|||
{
|
||||
shouldVisitNames = true;
|
||||
}
|
||||
public List nameList = new ArrayList();
|
||||
public int visit( IASTName name ){
|
||||
nameList.add( name );
|
||||
public List<IASTName> nameList = new ArrayList<IASTName>();
|
||||
public int visit(IASTName name) {
|
||||
nameList.add(name);
|
||||
return PROCESS_CONTINUE;
|
||||
}
|
||||
public IASTName getName( int idx ){
|
||||
if( idx < 0 || idx >= nameList.size() )
|
||||
public IASTName getName(int idx) {
|
||||
if (idx < 0 || idx >= nameList.size())
|
||||
return null;
|
||||
return (IASTName) nameList.get( idx );
|
||||
return nameList.get(idx);
|
||||
}
|
||||
public int size() { return nameList.size(); }
|
||||
}
|
||||
|
|
|
@ -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.ICPPVariable;
|
||||
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;
|
||||
|
||||
/**
|
||||
|
@ -2074,27 +2075,71 @@ public class AST2TemplateTests extends AST2BaseTest {
|
|||
assertFalse(name.resolveBinding() instanceof IProblemBinding);
|
||||
}
|
||||
|
||||
name= (IASTName) col.nameList.get(0);
|
||||
name= col.nameList.get(0);
|
||||
assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter);
|
||||
name= (IASTName) col.nameList.get(1);
|
||||
name= col.nameList.get(1);
|
||||
assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter);
|
||||
name= (IASTName) col.nameList.get(2);
|
||||
name= col.nameList.get(2);
|
||||
assertTrue(name.resolveBinding() instanceof ICPPFunction);
|
||||
name= (IASTName) col.nameList.get(3);
|
||||
name= col.nameList.get(3);
|
||||
assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter);
|
||||
name= (IASTName) col.nameList.get(4);
|
||||
name= col.nameList.get(4);
|
||||
assertTrue(name.resolveBinding() instanceof IParameter);
|
||||
name= (IASTName) col.nameList.get(5);
|
||||
name= col.nameList.get(5);
|
||||
assertTrue(name.resolveBinding() instanceof ICPPTemplateParameter);
|
||||
name= (IASTName) col.nameList.get(6);
|
||||
name= col.nameList.get(6);
|
||||
assertTrue(name.resolveBinding() instanceof IParameter);
|
||||
name= (IASTName) col.nameList.get(7);
|
||||
name= col.nameList.get(7);
|
||||
assertTrue(name.resolveBinding() instanceof IParameter);
|
||||
name= (IASTName) col.nameList.get(8);
|
||||
name= col.nameList.get(8);
|
||||
assertTrue(name.resolveBinding() instanceof IParameter);
|
||||
name= (IASTName) col.nameList.get(9);
|
||||
name= col.nameList.get(9);
|
||||
assertTrue(name.resolveBinding() instanceof IParameter);
|
||||
name= (IASTName) col.nameList.get(10);
|
||||
name= col.nameList.get(10);
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue