mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 548482 - Add CPPClassSpecialization.RecursionResolvingConstructor
This avoids an ArrayStoreException in specializeMembers(). Change-Id: I88a92462ef1ace4e99a0b45a9ba5975c705dab67
This commit is contained in:
parent
6b435e1faf
commit
f65e93596e
1 changed files with 23 additions and 2 deletions
|
@ -53,6 +53,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.ProblemFunctionType;
|
import org.eclipse.cdt.internal.core.dom.parser.ProblemFunctionType;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExecIncomplete;
|
||||||
import org.eclipse.core.runtime.Assert;
|
import org.eclipse.core.runtime.Assert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -65,7 +66,9 @@ public class CPPClassSpecialization extends CPPSpecialization
|
||||||
implements ICPPMember, IRecursionResolvingBinding {
|
implements ICPPMember, IRecursionResolvingBinding {
|
||||||
public static RecursionResolvingBinding createFor(IBinding original) {
|
public static RecursionResolvingBinding createFor(IBinding original) {
|
||||||
IASTNode point = CPPSemantics.getCurrentLookupPoint();
|
IASTNode point = CPPSemantics.getCurrentLookupPoint();
|
||||||
if (original instanceof ICPPMethod)
|
if (original instanceof ICPPConstructor)
|
||||||
|
return new RecursionResolvingConstructor(point, original.getNameCharArray());
|
||||||
|
else if (original instanceof ICPPMethod)
|
||||||
return new RecursionResolvingMethod(point, original.getNameCharArray());
|
return new RecursionResolvingMethod(point, original.getNameCharArray());
|
||||||
if (original instanceof ICPPField)
|
if (original instanceof ICPPField)
|
||||||
return new RecursionResolvingField(point, original.getNameCharArray());
|
return new RecursionResolvingField(point, original.getNameCharArray());
|
||||||
|
@ -104,7 +107,7 @@ public class CPPClassSpecialization extends CPPSpecialization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final static class RecursionResolvingMethod extends RecursionResolvingBinding implements ICPPMethod {
|
public static class RecursionResolvingMethod extends RecursionResolvingBinding implements ICPPMethod {
|
||||||
public RecursionResolvingMethod(IASTNode node, char[] arg) {
|
public RecursionResolvingMethod(IASTNode node, char[] arg) {
|
||||||
super(node, arg);
|
super(node, arg);
|
||||||
}
|
}
|
||||||
|
@ -160,6 +163,24 @@ public class CPPClassSpecialization extends CPPSpecialization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final static class RecursionResolvingConstructor extends RecursionResolvingMethod
|
||||||
|
implements ICPPConstructor {
|
||||||
|
public RecursionResolvingConstructor(IASTNode node, char[] arg) {
|
||||||
|
super(node, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ICPPExecution getConstructorChainExecution(IASTNode point) {
|
||||||
|
return getConstructorChainExecution();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ICPPExecution getConstructorChainExecution() {
|
||||||
|
return ExecIncomplete.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private ICPPClassSpecializationScope specScope;
|
private ICPPClassSpecializationScope specScope;
|
||||||
private ObjectMap specializationMap = ObjectMap.EMPTY_MAP;
|
private ObjectMap specializationMap = ObjectMap.EMPTY_MAP;
|
||||||
private ICPPBase[] bases;
|
private ICPPBase[] bases;
|
||||||
|
|
Loading…
Add table
Reference in a new issue