internal void MustHaveADefinition(QualifiedMemberName name) { if (mustHaveADefinitionCache == null) { mustHaveADefinitionCache = new Set <QualifiedMemberName>(); } mustHaveADefinitionCache.Add(name); }
internal void UsedBy(QualifiedMemberName name) { if (usedByMembers == null) { usedByMembers = new Set <QualifiedMemberName>(); } usedByMembers.Add(name); }
internal void ImplementedBy(QualifiedMemberName name) { if (implementors == null) { implementors = new Seq <QualifiedMemberName>(); } implementors.Add(name); }
public bool ExtraUsedMethod(QualifiedMemberName name) { var assemblyDef = default(AssemblyDef); var typeDef = default(TypeDef); var memberDef = default(MemberDef); if (name.PrimTryResolve(Global, out assemblyDef, out typeDef, out memberDef)) { return(memberDef.MarkAsUsed(this, assemblyDef, typeDef)); } return(false); }
private static void FriendlyMemberName(StringBuilder sb, CST.QualifiedMemberName name) { var types = name.DefiningType.Type.Types; JST.Lexemes.AppendStringToFriendlyIdentifier(sb, types[types.Count - 1], 15); sb.Append('_'); var i = name.Signature.Name.LastIndexOf('.'); var nm = i >= 0 && i < name.Signature.Name.Length - 1 ? name.Signature.Name.Substring(i + 1) : name.Signature.Name; JST.Lexemes.AppendStringToFriendlyIdentifier(sb, nm, 15); }
private int MethodBodySize(CST.QualifiedMemberName name) { var s = default(int); if (bodySizeCache.TryGetValue(name, out s)) { // Already determined return(s); } var assemblyDef = default(CST.AssemblyDef); var typeDef = default(CST.TypeDef); var memberDef = default(CST.MemberDef); if (name.PrimTryResolve(env.Global, out assemblyDef, out typeDef, out memberDef)) { var methodDef = (CST.MethodDef)memberDef; if (PrimIsInlinable(assemblyDef, typeDef, methodDef)) { // Local method size, ignoring inlining var instructions = methodDef.Instructions(env.Global); s = instructions.Size; // Collect calls foreach (var call in methodDef.UsedMembers.Where(n => n.Signature.Flavor == CST.MemberDefFlavor.Method)) { var t = MethodBodySize(call); if (t >= 0) { // Inlinable method, replace call with body s += t - 1; } } } else { // Obviously non-inlinable method s = -1; } } else { s = -1; } bodySizeCache.Add(name, s); return(s); }
public bool FirstOccuranceOfMethod(MessageContext ctxt, CST.QualifiedMemberName name, Trace trace) { var prev = default(Trace); if (MethodToTrace.TryGetValue(name, out prev)) { Env.Log(new DuplicateTraceEntryMessage(ctxt, prev.Name, trace.Name)); return(false); } else { MethodToTrace.Add(name, trace); return(true); } }
public bool IsMustHaveADefinition(QualifiedMemberName name) { return(mustHaveADefinitionCache == null ? false : mustHaveADefinitionCache.Contains(name)); }
public InvalidMemberName(MessageContext ctxt, QualifiedMemberName name, string message) : base(ctxt, Severity.Warning, "1021") { Name = name; Message = message; }
public string ResolvePropertyToSlot(CST.QualifiedMemberName name) { return(propSlots.For(ctxt, name)); }
public string ResolveEventToSlot(CST.QualifiedMemberName name) { return(eventSlots.For(ctxt, name)); }
public string ResolveFieldToSlot(CST.QualifiedMemberName name) { return(fieldSlots.For(ctxt, name)); }
public string ResolveMethodToSlot(CST.QualifiedMemberName name) { return(methodSlots.For(ctxt, name)); }