1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-01 14:15:23 +02:00

188274: apply fix

This commit is contained in:
Andrew Ferguson 2007-05-31 11:43:46 +00:00
parent 3840ecf156
commit 6410925da8
14 changed files with 168 additions and 58 deletions

View file

@ -69,7 +69,7 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas
// B<C> b;
// void foo() {C c; B<int> b;}
public void _testBug188274() throws Exception {
public void testBug188274() throws Exception {
IBinding b0= getBindingFromASTName("C", 1);
IBinding b1= getBindingFromASTName("B", 1);
assertInstance(b0, ICPPClassType.class);
@ -84,8 +84,6 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas
ICPPBase[] bases= c2t.getBases();
assertEquals(1, bases.length);
assertInstance(bases[0].getBaseClass(), ICPPClassType.class);
fakeFailForSingle();
}
// namespace ns {class A{};}

View file

@ -278,7 +278,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
// B<long>::foo(); // instance not in the referenced pdom
// X<int> x;
// }
public void _testClassImplicitInstantiations_188274() throws Exception {
public void testClassImplicitInstantiations_188274() throws Exception {
IBinding b2= getBindingFromASTName("X<int>", 6, true);
assertInstance(b2, ICPPClassType.class);
assertInstance(b2, ICPPTemplateInstance.class);
@ -302,8 +302,6 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
ICPPBase[] bss1= ct1.getBases();
assertEquals(1, bss1.length);
assertInstance(bss1[0].getBaseClass(), ICPPClassType.class);
fakeFailForSingle();
}
// class B {};

View file

@ -149,6 +149,14 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC
namespaces[i] = (ICPPNamespace) ibs[i];
return namespaces;
}
IIndex getContext() {
return index;
}
protected IIndexFragmentBinding findOneDefinition(IBinding binding) {
return super.findOneDefinition(binding);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.index.composite.cpp.ICompositesFactory#getCompositeBinding(org.eclipse.cdt.core.index.IIndex, org.eclipse.cdt.core.dom.ast.IBinding)
@ -159,18 +167,6 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC
try {
if(binding==null) {
result = null;
} else if (binding instanceof ICPPTemplateDefinition) {
if(binding instanceof ICPPClassTemplate) {
return new CompositeCPPClassTemplate(this, (ICPPClassType) findOneDefinition(binding));
} else if (binding instanceof ICPPConstructor) {
return new CompositeCPPConstructorTemplate(this, (ICPPConstructor) binding);
} else if (binding instanceof ICPPMethod) {
return new CompositeCPPMethodTemplate(this, (ICPPMethod) binding);
} else if (binding instanceof ICPPFunctionTemplate) {
return new CompositeCPPFunctionTemplate(this, (ICPPFunction) binding);
} else {
throw new CompositingNotImplementedError("composite binding unavailable for "+binding+" "+binding.getClass()); //$NON-NLS-1$ //$NON-NLS-2$
}
} else if(binding instanceof ICPPSpecialization) {
if(binding instanceof ICPPTemplateInstance) {
if(binding instanceof ICPPDeferredTemplateInstance) {
@ -184,19 +180,33 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC
} else {
if(binding instanceof ICPPClassType) {
return new CompositeCPPClassInstance(this, (ICPPClassType) findOneDefinition(binding));
} if(binding instanceof ICPPFunction) {
} else if(binding instanceof ICPPConstructor) {
return new CompositeCPPConstructorInstance(this, (ICPPConstructor) binding);
} else if(binding instanceof ICPPMethod) {
return new CompositeCPPMethodInstance(this, (ICPPMethod) binding);
} else if(binding instanceof ICPPFunction) {
return new CompositeCPPFunctionInstance(this, (ICPPFunction) binding);
} else {
throw new CompositingNotImplementedError("composite binding unavailable for "+binding+" "+binding.getClass()); //$NON-NLS-1$ //$NON-NLS-2$
}
}
} else if (binding instanceof ICPPTemplateDefinition) {
if(binding instanceof ICPPClassTemplatePartialSpecialization) {
return new CompositeCPPClassTemplatePartialSpecialization(this, (ICPPClassTemplatePartialSpecialization) binding);
} else if(binding instanceof ICPPClassType) {
return new CompositeCPPClassTemplateSpecialization(this, (ICPPClassType) binding);
} else if(binding instanceof ICPPConstructor) {
return new CompositeCPPConstructorTemplateSpecialization(this, (ICPPConstructor) binding);
} else if(binding instanceof ICPPMethod) {
return new CompositeCPPMethodTemplateSpecialization(this, (ICPPMethod) binding);
} else if(binding instanceof ICPPFunctionType) {
return new CompositeCPPFunctionTemplateSpecialization(this, (ICPPFunction) binding);
} else {
throw new CompositingNotImplementedError("composite binding unavailable for "+binding+" "+binding.getClass()); //$NON-NLS-1$ //$NON-NLS-2$
}
} else {
if(binding instanceof ICPPClassType) {
if(binding instanceof ICPPClassTemplatePartialSpecialization) {
return new CompositeCPPClassTemplatePartialSpecialization(this, (ICPPClassTemplatePartialSpecialization) binding);
} else {
return new CompositeCPPClassSpecialization(this, (ICPPClassType) findOneDefinition(binding));
}
return new CompositeCPPClassSpecialization(this, (ICPPClassType) findOneDefinition(binding));
} if(binding instanceof ICPPConstructor) {
return new CompositeCPPConstructorSpecialization(this, (ICPPConstructor) binding);
} if(binding instanceof ICPPMethod) {
@ -213,6 +223,18 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC
throw new CompositingNotImplementedError("composite binding unavailable for "+binding+" "+binding.getClass()); //$NON-NLS-1$ //$NON-NLS-2$
}
}
} else if (binding instanceof ICPPTemplateDefinition) {
if(binding instanceof ICPPClassTemplate) {
return new CompositeCPPClassTemplate(this, (ICPPClassType) findOneDefinition(binding));
} else if (binding instanceof ICPPConstructor) {
return new CompositeCPPConstructorTemplate(this, (ICPPConstructor) binding);
} else if (binding instanceof ICPPMethod) {
return new CompositeCPPMethodTemplate(this, (ICPPMethod) binding);
} else if (binding instanceof ICPPFunctionTemplate) {
return new CompositeCPPFunctionTemplate(this, (ICPPFunction) binding);
} else {
throw new CompositingNotImplementedError("composite binding unavailable for "+binding+" "+binding.getClass()); //$NON-NLS-1$ //$NON-NLS-2$
}
} else if(binding instanceof ICPPParameter) {
result = new CompositeCPPParameter(this, (ICPPParameter) binding);
} else if(binding instanceof ICPPField) {

View file

@ -10,13 +10,16 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.index.composite.cpp;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
import org.eclipse.cdt.core.parser.util.ObjectMap;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplates;
import org.eclipse.cdt.internal.core.index.IIndexType;
import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory;
@ -29,6 +32,7 @@ ICPPClassType, IIndexType, ICPPTemplateInstance, ICPPSpecialization {
public ObjectMap getArgumentMap() { return TemplateInstanceUtil.getArgumentMap(cf, rbinding); }
public IBinding getSpecializedBinding() { return TemplateInstanceUtil.getSpecializedBinding(cf, rbinding); }
public IType[] getArguments() { return TemplateInstanceUtil.getArguments(cf, rbinding); }
public IType[] getArguments() { return TemplateInstanceUtil.getArguments(cf, (ICPPTemplateInstance) rbinding); }
public ICPPTemplateDefinition getTemplateDefinition() { return TemplateInstanceUtil.getTemplateDefinition(cf, rbinding); }
public ICPPBase[] getBases() throws DOMException { return CPPTemplates.getBases(this); }
}

View file

@ -10,17 +10,24 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.index.composite.cpp;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplatePartialSpecialization;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplates;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalTemplateInstantiator;
import org.eclipse.cdt.internal.core.index.CIndex;
import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding;
import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory;
import org.eclipse.core.runtime.CoreException;
public class CompositeCPPClassTemplate extends CompositeCPPClassType implements
ICPPClassTemplate, ICPPInternalTemplateInstantiator{
@ -30,12 +37,22 @@ ICPPClassTemplate, ICPPInternalTemplateInstantiator{
}
public ICPPClassTemplatePartialSpecialization[] getPartialSpecializations()
throws DOMException {
ICPPClassTemplatePartialSpecialization[] result= ((ICPPClassTemplate)rbinding).getPartialSpecializations();
for(int i=0; i<result.length; i++) {
result[i]= (ICPPClassTemplatePartialSpecialization) cf.getCompositeBinding((IIndexFragmentBinding)result[i]);
throws DOMException {
try {
IIndexFragmentBinding[] bindings= ((CIndex)((CPPCompositesFactory)cf).getContext()).findEquivalentBindings(rbinding);
IIndexFragmentBinding[][] preresult= new IIndexFragmentBinding[bindings.length][];
for(int i=0; i<bindings.length; i++) {
ICPPClassTemplatePartialSpecialization[] ss= ((ICPPClassTemplate)bindings[i]).getPartialSpecializations();
preresult[i]= new IIndexFragmentBinding[ss.length];
System.arraycopy(ss, 0, preresult[i], 0, ss.length);
}
return (ICPPClassTemplatePartialSpecialization[]) ArrayUtil.addAll(ICPPClassTemplatePartialSpecialization.class, null, cf.getCompositeBindings(preresult));
} catch(CoreException ce) {
CCorePlugin.log(ce);
return ICPPClassTemplatePartialSpecialization.EMPTY_PARTIAL_SPECIALIZATION_ARRAY;
}
return result;
}
public ICPPTemplateParameter[] getTemplateParameters() throws DOMException {
@ -51,11 +68,24 @@ ICPPClassTemplate, ICPPInternalTemplateInstantiator{
}
public ICPPSpecialization getInstance(IType[] arguments) {
return InternalTemplateInstantiatorUtil.getInstance(arguments, cf, rbinding);
return InternalTemplateInstantiatorUtil.getInstance(arguments, cf, this);
}
public IBinding instantiate(IType[] arguments) {
return InternalTemplateInstantiatorUtil.instantiate(arguments, cf, rbinding);
ICPPTemplateDefinition template = null;
try {
template = CPPTemplates.matchTemplatePartialSpecialization(this, arguments);
} catch (DOMException e) {
return e.getProblem();
}
if( template instanceof IProblemBinding )
return template;
if( template != null && template instanceof ICPPClassTemplatePartialSpecialization ){
return ((ICPPInternalTemplateInstantiator)template).instantiate( arguments );
}
return CPPTemplates.instantiateTemplate(this, arguments, null);
}
}

View file

@ -33,7 +33,7 @@ public class CompositeCPPClassTemplatePartialSpecialization extends CompositeCPP
return (ICPPClassTemplate) cf.getCompositeBinding((IIndexFragmentBinding)preresult);
}
public IType[] getArguments() { return TemplateInstanceUtil.getArguments(cf, rbinding); }
public IType[] getArguments() { return TemplateInstanceUtil.getArguments(cf, (ICPPClassTemplatePartialSpecialization) rbinding); }
public ObjectMap getArgumentMap() { return TemplateInstanceUtil.getArgumentMap(cf, rbinding); }
public IBinding getSpecializedBinding() { return TemplateInstanceUtil.getSpecializedBinding(cf, rbinding); }
public int getSignatureMemento() throws CoreException { return ((IPDOMOverloader) rbinding).getSignatureMemento(); }

View file

@ -51,7 +51,7 @@ CompositeCPPClassSpecialization implements ICPPClassTemplate, ICPPInternalTempla
}
public ICPPSpecialization getInstance(IType[] arguments) {
return InternalTemplateInstantiatorUtil.getInstance(arguments, cf, rbinding);
return InternalTemplateInstantiatorUtil.getInstance(arguments, cf, this);
}
public IBinding instantiate(IType[] arguments) {

View file

@ -50,13 +50,24 @@ class CompositeCPPClassType extends CompositeCPPBinding implements ICPPClassType
private class CPPBaseDelegate implements ICPPBase, ICPPInternalBase {
private ICPPBase base;
private IBinding baseClass;
private boolean writable;
CPPBaseDelegate(ICPPBase b) {
this.base = b;
this(b, false);
}
CPPBaseDelegate(ICPPBase b, boolean writable) {
this.base= b;
this.writable= writable;
}
public IBinding getBaseClass() throws DOMException {
return cf.getCompositeBinding((IIndexFragmentBinding)base.getBaseClass());
if(baseClass!=null) {
return baseClass;
} else {
return cf.getCompositeBinding((IIndexFragmentBinding)base.getBaseClass());
}
}
public IName getBaseClassSpecifierName() {
@ -72,11 +83,15 @@ class CompositeCPPClassType extends CompositeCPPBinding implements ICPPClassType
}
public void setBaseClass(IBinding binding) throws DOMException {
((ICPPInternalBase)base).setBaseClass(binding);
if(writable) {
baseClass= binding;
} else {
((ICPPInternalBase)base).setBaseClass(binding);
}
}
public Object clone(){
return ((ICPPInternalBase)base).clone();
return new CPPBaseDelegate(base, true);
}
}

View file

@ -51,7 +51,7 @@ public class CompositeCPPDeferredClassInstance extends CompositeCPPClassType imp
return (IBinding) cf.getCompositeBinding((IIndexFragmentBinding)ins);
}
public IType[] getArguments() { return TemplateInstanceUtil.getArguments(cf, rbinding); }
public IType[] getArguments() { return TemplateInstanceUtil.getArguments(cf, (ICPPTemplateInstance) rbinding); }
public ObjectMap getArgumentMap() { return TemplateInstanceUtil.getArgumentMap(cf, rbinding); }
public IBinding getSpecializedBinding() { return TemplateInstanceUtil.getSpecializedBinding(cf, rbinding); }
}

View file

@ -15,6 +15,7 @@ import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDeferredTemplateInstance;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
import org.eclipse.cdt.core.parser.util.ObjectMap;
import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory;
@ -25,7 +26,7 @@ public class CompositeCPPDeferredFunctionInstance extends CompositeCPPFunction
super(cf, rbinding);
}
public IType[] getArguments() { return TemplateInstanceUtil.getArguments(cf, rbinding); }
public IType[] getArguments() { return TemplateInstanceUtil.getArguments(cf, (ICPPTemplateInstance) rbinding); }
public ICPPTemplateDefinition getTemplateDefinition() { return TemplateInstanceUtil.getTemplateDefinition(cf, rbinding); }
public ObjectMap getArgumentMap() { return TemplateInstanceUtil.getArgumentMap(cf, rbinding); }
public IBinding getSpecializedBinding() { return TemplateInstanceUtil.getSpecializedBinding(cf, rbinding); }

View file

@ -25,7 +25,7 @@ public class CompositeCPPFunctionInstance extends CompositeCPPFunction implement
super(cf, rbinding);
}
public IType[] getArguments() { return TemplateInstanceUtil.getArguments(cf, rbinding); }
public IType[] getArguments() { return TemplateInstanceUtil.getArguments(cf, (ICPPTemplateInstance) rbinding); }
public ICPPTemplateDefinition getTemplateDefinition() { return TemplateInstanceUtil.getTemplateDefinition(cf, rbinding); }
public ObjectMap getArgumentMap() { return TemplateInstanceUtil.getArgumentMap(cf, rbinding); }
public IBinding getSpecializedBinding() { return TemplateInstanceUtil.getSpecializedBinding(cf, rbinding); }

View file

@ -40,7 +40,7 @@ public class CompositeCPPFunctionTemplate extends CompositeCPPFunction implement
}
public ICPPSpecialization getInstance(IType[] arguments) {
return InternalTemplateInstantiatorUtil.getInstance(arguments, cf, rbinding);
return InternalTemplateInstantiatorUtil.getInstance(arguments, cf, this);
}
public IBinding instantiate(IType[] arguments) {

View file

@ -11,13 +11,16 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.index.composite.cpp;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
import org.eclipse.cdt.core.index.IIndexBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalTemplateInstantiator;
import org.eclipse.cdt.internal.core.index.CIndex;
import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding;
import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory;
import org.eclipse.core.runtime.CoreException;
public class InternalTemplateInstantiatorUtil {
public static ICPPSpecialization deferredInstance(IType[] arguments, ICompositesFactory cf, IIndexBinding rbinding) {
@ -30,9 +33,25 @@ public class InternalTemplateInstantiatorUtil {
}
}
public static ICPPSpecialization getInstance(IType[] arguments, ICompositesFactory cf, IIndexBinding rbinding) {
ICPPSpecialization ins= ((ICPPInternalTemplateInstantiator)rbinding).getInstance(arguments);
return (ICPPSpecialization) cf.getCompositeBinding((IIndexFragmentBinding)ins);
public static ICPPSpecialization getInstance(IType[] arguments, ICompositesFactory cf, CompositeCPPBinding cbinding) {
ICPPSpecialization preferredInstance= null;
try {
IIndexFragmentBinding[] bindings= ((CIndex)((CPPCompositesFactory)cf).getContext()).findEquivalentBindings(cbinding);
for(int i=0; i<bindings.length && !(preferredInstance instanceof IIndexFragmentBinding); i++) {
ICPPInternalTemplateInstantiator instantiator= (ICPPInternalTemplateInstantiator) bindings[i];
preferredInstance= instantiator.getInstance(arguments);
}
} catch(CoreException ce) {
CCorePlugin.log(ce);
}
if(preferredInstance instanceof IIndexFragmentBinding) {
return (ICPPSpecialization) cf.getCompositeBinding((IIndexFragmentBinding)preferredInstance);
} else {
// can result in a non-index binding
return preferredInstance;
}
}
public static IBinding instantiate(IType[] arguments, ICompositesFactory cf, IIndexBinding rbinding) {
@ -40,7 +59,7 @@ public class InternalTemplateInstantiatorUtil {
if (ins instanceof IIndexFragmentBinding) {
return (IBinding) cf.getCompositeBinding((IIndexFragmentBinding)ins);
} else {
//can result in a non-index binding
// can result in a non-index binding
return ins;
}
}

View file

@ -15,6 +15,7 @@ import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplatePartialSpecialization;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
@ -29,20 +30,30 @@ import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory;
*/
public class TemplateInstanceUtil {
public static ObjectMap getArgumentMap(ICompositesFactory cf, IIndexBinding rbinding) {
ObjectMap preresult= ((ICPPSpecialization)rbinding).getArgumentMap();
ICPPSpecialization specn= (ICPPSpecialization) rbinding;
IBinding specd= ((CPPCompositesFactory)cf).findOneDefinition(specn.getSpecializedBinding());
if(specd == null)
specd= specn.getSpecializedBinding();
ObjectMap preresult= specn.getArgumentMap();
ObjectMap result= new ObjectMap(preresult.size());
Object[] keys= preresult.keyArray();
for(int i=0; i<keys.length; i++) {
IType type= (IType) preresult.get(keys[i]);
try {
result.put(
cf.getCompositeBinding((IIndexFragmentBinding)keys[i]),
cf.getCompositeType((IIndexType)type));
} catch(DOMException de) {
result.put(keys[i], type);
CCorePlugin.log(de);
Object[] keysToAdapt= keys;
try {
if(specd instanceof ICPPTemplateDefinition) {
keysToAdapt= ((ICPPTemplateDefinition)specd).getTemplateParameters();
}
for(int i=0; i<keys.length; i++) {
IType type= (IType) preresult.get(keys[i]);
result.put(
cf.getCompositeBinding((IIndexFragmentBinding)keysToAdapt[i]),
cf.getCompositeType((IIndexType)type));
}
} catch(DOMException de) {
CCorePlugin.log(de);
}
return result;
}
@ -52,8 +63,20 @@ public class TemplateInstanceUtil {
}
public static IType[] getArguments(ICompositesFactory cf, IIndexBinding rbinding) {
IType[] result = ((ICPPTemplateInstance)rbinding).getArguments();
public static IType[] getArguments(ICompositesFactory cf, ICPPTemplateInstance rbinding) {
return getArguments(cf, rbinding.getArguments());
}
public static IType[] getArguments(ICompositesFactory cf, ICPPClassTemplatePartialSpecialization rbinding) {
try {
return getArguments(cf, rbinding.getArguments());
} catch(DOMException de) {
CCorePlugin.log(de);
return IType.EMPTY_TYPE_ARRAY;
}
}
private static IType[] getArguments(ICompositesFactory cf, IType[] result) {
try {
for(int i=0; i<result.length; i++) {
result[i] = cf.getCompositeType((IIndexType)result[i]);