internal GenerateName(IContext context, INsMember nameScope, IMemberDef source, NameGenerator options) : base(context) { NameScope = nameScope; Source = source; Options = options; }
public override string Generate(IMetadataMangler mangler, INsMember scope, IMemberDef member, string old, int iteration) { if (iteration > 0) { old += iteration; } return(Encode(Hasher.ComputeHash(Encoding.UTF8.GetBytes(old)))); }
string NameGenerator(INsMember scope, IMemberDef member, string old, Func <string, bool> isBadName) { var options = _options.Generator.Clone(); if (member != null && options is NameGenerator.Encoded enc && member.IsTypeDef && ((TypeDef)member).Interfaces.Any(i => i.Interface.FullName == typeof(System.Runtime.InteropServices.ICustomMarshaler).FullName)) { enc.Dictionary = ManglerCharsets.Latin; } var ev = Context.Fire(new NameManglerEvent.GenerateName(Context, scope, member, options)); options = ev.Options; string postfix = null; if (options.PreserveGenericCount && member != null && (member.IsType || member.IsMethod)) { var i = old.IndexOf('`'); if (i != -1) { postfix = old.Substring(i + 1); old = old.Substring(0, i); } } var iteration = 0; string name; while (true) { if (iteration > options.MaxIterations) { throw Context.Error($"too many attempts to generate unique name for {member?.FullName ?? old}"); } name = options.Generate(this, scope, member, old, iteration++); if (isBadName != null && isBadName(name)) { continue; } if (ev.AvoidNames != null && ev.AvoidNames.Contains(name)) { continue; } break; } if (postfix != null) { name += '`' + postfix; } return(name); }
public override string Generate(IMetadataMangler mangler, INsMember scope, IMemberDef member, string old, int iteration) { var name = old.Replace('.', '_') + "_"; if (iteration > 0) { name += iteration; } return(name); }
/// <summary> /// Generate new name for a given metadata member /// </summary> /// <param name="mangler">instance of the mangler plugin</param> /// <param name="scope">naming scope</param> /// <param name="member">the member to rename</param> /// <param name="old">old name</param> /// <param name="iteration">number of current iteration (increments with each unsuccessful attemt to generate new name)</param> /// <returns>new name</returns> public abstract string Generate(IMetadataMangler mangler, INsMember scope, IMemberDef member, string old, int iteration);
public override string Generate(IMetadataMangler mangler, INsMember scope, IMemberDef member, string old, int iteration) { return(Encode(mangler.Rng.NextBytes((MaxSignificantBits + 7) >> 3))); }
public override string Generate(IMetadataMangler mangler, INsMember scope, IMemberDef member, string old, int iteration) { return(Encode(ToBytes(NextSequence(scope), MaxSignificantBits))); }
private long NextSequence(INsMember scope) => _sequences.GetOrAdd(scope, s => new Seq()).Next();