protected bool TryRewriteLocal(LocalSymbol local, out LocalSymbol newLocal) { if (NeedsProxy(local)) { // no longer a local symbol newLocal = null; return(false); } if (localMap.TryGetValue(local, out newLocal)) { return(true); } var newType = VisitType(local.Type); if (TypeSymbol.Equals(newType, local.Type, TypeCompareKind.ConsiderEverything2)) { newLocal = local; } else { newLocal = new TypeSubstitutedLocalSymbol(local, TypeWithAnnotations.Create(newType), CurrentMethod); localMap.Add(local, newLocal); } return(true); }
protected bool TryRewriteLocal(LocalSymbol local, out LocalSymbol newLocal) { if (NeedsProxy(local)) { // no longer a local symbol newLocal = null; return false; } if (localMap.TryGetValue(local, out newLocal)) { return true; } var newType = VisitType(local.Type); if (newType == local.Type) { newLocal = local; } else { newLocal = new TypeSubstitutedLocalSymbol(local, newType, CurrentMethod); localMap.Add(local, newLocal); } return true; }