public void AddMethod(MessageContext ctxt, CST.MethodDef methodDef) { var trace = Parent.Parent; var name = methodDef.QualifiedMemberName(trace.Parent.Env.Global, Parent.Assembly, Type); if (trace.Parent.FirstOccuranceOfMethod(ctxt, name, trace)) Methods.Add(methodDef.MethodSignature); }
public bool CouldBeInlinableBasedOnHeaderAlone(CST.AssemblyDef assemblyDef, CST.TypeDef typeDef, CST.MethodDef methodDef) { if (methodDef.IsVirtualOrAbstract || typeDef.Style is CST.InterfaceTypeStyle) // No virtuals or interface methods return false; if (typeDef.Style is CST.MultiDimArrayTypeStyle) // Implemented by runtime return false; if (typeDef.IsAttributeType(env.Global, assemblyDef)) // Don't inline attribute property methods since we invoke them directly when building attributes return false; var level = default(ReflectionLevel); env.AttributeHelper.GetValueFromType (assemblyDef, typeDef, env.AttributeHelper.ReflectionAttributeRef, env.AttributeHelper.TheReflectionLevelProperty, true, true, ref level); if (level >= ReflectionLevel.Full) // No inlining in classes needing full reflection since need to support dynamic invokes return false; // NOTE: Method may be used in a delegate, in which case it's fine to inline but we'll still // need to emit the definition if (assemblyDef.EntryPoint != null && assemblyDef.EntryPoint.QualifiedMemberName.Equals (methodDef.QualifiedMemberName(env.Global, assemblyDef, typeDef))) // Entry points are called directly by startup code return false; return true; }
public bool IsInlinable(CST.AssemblyDef assemblyDef, CST.TypeDef typeDef, CST.MethodDef methodDef) { var s = MethodBodySize(methodDef.QualifiedMemberName(env.Global, assemblyDef, typeDef)); return s >= 0 && s <= env.InlineThreshold; }
public string ResolveEventDefToSlot(CST.AssemblyDef assemblyDef, CST.TypeDef typeDef, CST.EventDef eventDef) { return TypeMappingFor(assemblyDef, typeDef).ResolveEventToSlot (eventDef.QualifiedMemberName(env.Global, assemblyDef, typeDef)); }
public string ResolveFieldDefToSlot(CST.AssemblyDef assemblyDef, CST.TypeDef typeDef, CST.FieldDef fieldDef) { return TypeMappingFor(assemblyDef, typeDef).ResolveFieldToSlot (fieldDef.QualifiedMemberName(env.Global, assemblyDef, typeDef)); }
public string ResolvePropertyDefToSlot(CST.AssemblyDef assemblyDef, CST.TypeDef typeDef, CST.PropertyDef propDef) { return TypeMappingFor(assemblyDef, typeDef).ResolvePropertyToSlot (propDef.QualifiedMemberName(env.Global, assemblyDef, typeDef)); }