static ResolveResult MapToNewContext(ResolveResult rr, ITypeResolveContext newContext)
{
if (rr is TypeOfResolveResult) {
return new TypeOfResolveResult(
rr.Type.ToTypeReference().Resolve(newContext),
((TypeOfResolveResult)rr).ReferencedType.ToTypeReference().Resolve(newContext));
} else if (rr is ArrayCreateResolveResult) {
ArrayCreateResolveResult acrr = (ArrayCreateResolveResult)rr;
return new ArrayCreateResolveResult(
acrr.Type.ToTypeReference().Resolve(newContext),
MapToNewContext(acrr.SizeArguments, newContext),
MapToNewContext(acrr.InitializerElements, newContext));
} else if (rr.IsCompileTimeConstant) {
return new ConstantResolveResult(
rr.Type.ToTypeReference().Resolve(newContext),
rr.ConstantValue
);
} else {
return new ErrorResolveResult(rr.Type.ToTypeReference().Resolve(newContext));
}
}