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:
parent
01959bfd25
commit
cf2b2ce763
2 changed files with 447 additions and 402 deletions
|
@ -289,7 +289,7 @@ 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;
|
||||||
|
@ -297,7 +297,7 @@ public class AST2BaseTest extends BaseTestCase {
|
||||||
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(); }
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue