1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 17:05:26 +02:00

Correct determination of default template arguments, bug 281781.

This commit is contained in:
Markus Schorn 2009-07-01 16:53:45 +00:00
parent aa1e4bd52c
commit be997b5279
4 changed files with 28 additions and 22 deletions

View file

@ -43,13 +43,15 @@ public class CPPTemplateNonTypeParameter extends CPPTemplateParameter implements
return null;
for (IASTName name : nds) {
IASTNode parent = name.getParent();
assert parent instanceof IASTDeclarator;
if (parent instanceof IASTDeclarator) {
IASTDeclarator dtor = (IASTDeclarator) parent;
IASTInitializer initializer = dtor.getInitializer();
if (initializer instanceof IASTInitializerExpression)
return ((IASTInitializerExpression) initializer).getExpression();
if (name != null) {
IASTNode parent = name.getParent();
assert parent instanceof IASTDeclarator;
if (parent instanceof IASTDeclarator) {
IASTDeclarator dtor = (IASTDeclarator) parent;
IASTInitializer initializer = dtor.getInitializer();
if (initializer instanceof IASTInitializerExpression)
return ((IASTInitializerExpression) initializer).getExpression();
}
}
}
return null;

View file

@ -95,13 +95,15 @@ public class CPPTemplateTemplateParameter extends CPPTemplateParameter implement
if (nds == null || nds.length == 0)
return null;
for (IASTName nd : nds) {
IASTNode parent = nd.getParent();
assert parent instanceof ICPPASTTemplatedTypeTemplateParameter;
if (parent instanceof ICPPASTTemplatedTypeTemplateParameter) {
ICPPASTTemplatedTypeTemplateParameter param = (ICPPASTTemplatedTypeTemplateParameter) parent;
IASTExpression value = param.getDefaultValue();
if (value != null)
return CPPVisitor.createType(value);
if (nd != null) {
IASTNode parent = nd.getParent();
assert parent instanceof ICPPASTTemplatedTypeTemplateParameter;
if (parent instanceof ICPPASTTemplatedTypeTemplateParameter) {
ICPPASTTemplatedTypeTemplateParameter param = (ICPPASTTemplatedTypeTemplateParameter) parent;
IASTExpression value = param.getDefaultValue();
if (value != null)
return CPPVisitor.createType(value);
}
}
}
return null;

View file

@ -50,13 +50,15 @@ public class CPPTemplateTypeParameter extends CPPTemplateParameter implements
if (nds == null || nds.length == 0)
return null;
for (IASTName nd : nds) {
IASTNode parent = nd.getParent();
assert parent instanceof ICPPASTSimpleTypeTemplateParameter;
if (parent instanceof ICPPASTSimpleTypeTemplateParameter) {
ICPPASTSimpleTypeTemplateParameter simple = (ICPPASTSimpleTypeTemplateParameter) parent;
IASTTypeId typeId = simple.getDefaultType();
if (typeId != null)
return CPPVisitor.createType(typeId);
if (nd != null) {
IASTNode parent = nd.getParent();
assert parent instanceof ICPPASTSimpleTypeTemplateParameter;
if (parent instanceof ICPPASTSimpleTypeTemplateParameter) {
ICPPASTSimpleTypeTemplateParameter simple = (ICPPASTSimpleTypeTemplateParameter) parent;
IASTTypeId typeId = simple.getDefaultType();
if (typeId != null)
return CPPVisitor.createType(typeId);
}
}
}
return null;

View file

@ -212,7 +212,7 @@ abstract public class PDOMWriter {
th= e;
}
if (th != null) {
stati.add(createStatus(NLS.bind(Messages.PDOMWriter_errorWhileParsing, ifl.getURI().getPath(), th)));
stati.add(createStatus(NLS.bind(Messages.PDOMWriter_errorWhileParsing, ifl.getURI().getPath()), th));
}
if (i<ifls.length-1) {
updateFileCount(0, 0, 1); // update header count