public override IEnumerable <CombinedDependencyListEntry> GetConditionalStaticDependencies(NodeFactory factory) { CombinedDependencyList dependencies = null; CodeBasedDependencyAlgorithm.AddConditionalDependenciesDueToMethodCodePresence(ref dependencies, factory, _method); return(dependencies ?? (IEnumerable <CombinedDependencyListEntry>)Array.Empty <CombinedDependencyListEntry>()); }
public override IEnumerable <DependencyListEntry> GetStaticDependencies(NodeFactory factory) { DependencyList dependencies = null; CodeBasedDependencyAlgorithm.AddDependenciesDueToMethodCodePresence(ref dependencies, factory, _method); return(dependencies); }
protected override DependencyList ComputeNonRelocationBasedDependencies(NodeFactory factory) { DependencyList dependencies = null; TypeDesc owningType = _method.OwningType; if (factory.TypeSystemContext.HasEagerStaticConstructor(owningType)) { if (dependencies == null) dependencies = new DependencyList(); dependencies.Add(factory.EagerCctorIndirection(owningType.GetStaticConstructor()), "Eager .cctor"); } if (_ehInfo != null && _ehInfo.Relocs != null) { if (dependencies == null) dependencies = new DependencyList(); foreach (Relocation reloc in _ehInfo.Relocs) { dependencies.Add(reloc.Target, "reloc"); } } if (MethodAssociatedDataNode.MethodHasAssociatedData(factory, this)) { dependencies = dependencies ?? new DependencyList(); dependencies.Add(new DependencyListEntry(factory.MethodAssociatedData(this), "Method associated data")); } CodeBasedDependencyAlgorithm.AddDependenciesDueToMethodCodePresence(ref dependencies, factory, _method); return dependencies; }
public override IEnumerable <DependencyListEntry> GetStaticDependencies(NodeFactory factory) { var dependencies = new DependencyList(); foreach (Object node in _dependencies) { dependencies.Add(node, "Wasm code "); } CodeBasedDependencyAlgorithm.AddDependenciesDueToMethodCodePresence(ref dependencies, factory, _method); return(dependencies); }
public override IEnumerable <DependencyListEntry> GetStaticDependencies(NodeFactory factory) { _dependenciesQueried = true; DependencyList dependencies = null; CodeBasedDependencyAlgorithm.AddDependenciesDueToMethodCodePresence(ref dependencies, factory, _method); if (_compilationDiscoveredDependencies != null) { dependencies.AddRange(_compilationDiscoveredDependencies); } return(dependencies); }
protected override DependencyList ComputeNonRelocationBasedDependencies(NodeFactory factory) { DependencyList dependencies = null; TypeDesc owningType = _method.OwningType; if (factory.TypeSystemContext.HasEagerStaticConstructor(owningType)) { if (dependencies == null) { dependencies = new DependencyList(); } dependencies.Add(factory.EagerCctorIndirection(owningType.GetStaticConstructor()), "Eager .cctor"); } if (_ehInfo != null && _ehInfo.Relocs != null) { if (dependencies == null) { dependencies = new DependencyList(); } foreach (Relocation reloc in _ehInfo.Relocs) { dependencies.Add(reloc.Target, "reloc"); } } CodeBasedDependencyAlgorithm.AddDependenciesDueToMethodCodePresence(ref dependencies, factory, _method); if (_method.IsPInvoke) { MethodSignature methodSig = _method.Signature; if (methodSig.ReturnType.IsDelegate) { AddPInvokeDelegateParameterDependencies(ref dependencies, factory, methodSig.ReturnType); } for (int i = 0; i < methodSig.Length; i++) { if (methodSig[i].IsDelegate) { AddPInvokeDelegateParameterDependencies(ref dependencies, factory, methodSig[i]); } } } return(dependencies); }
public void InitializeDependencies(NodeFactory factory, IEnumerable <DependencyListEntry> dependencies) { _dependencies = new DependencyList(dependencies); CodeBasedDependencyAlgorithm.AddDependenciesDueToMethodCodePresence(ref _dependencies, factory, _method); if (factory.TypeSystemContext.IsSpecialUnboxingThunk(_method)) { // Special unboxing thunks reference a MethodAssociatedDataNode that points to the non-unboxing version. // This dependency is redundant with the dependency list we constructed above, with a notable // exception of special unboxing thunks for byref-like types. Those don't actually unbox anything // and their body is a dummy. We capture the dependency here. MethodDesc nonUnboxingMethod = factory.TypeSystemContext.GetTargetOfSpecialUnboxingThunk(_method); _dependencies.Add(new DependencyListEntry(factory.MethodEntrypoint(nonUnboxingMethod, false), "Non-unboxing method")); } }
public override IEnumerable <DependencyListEntry> GetStaticDependencies(NodeFactory factory) { var dependencies = new DependencyList(); foreach (Object node in _dependencies) { dependencies.Add(node, "CPP code "); } // Raw p/invoke methods are special - these wouldn't show up as method bodies for other codegens // and the rest of the system doesn't expect to see them here. if (!_method.IsRawPInvoke()) { CodeBasedDependencyAlgorithm.AddDependenciesDueToMethodCodePresence(ref dependencies, factory, _method); } return(dependencies); }
public override IEnumerable <DependencyListEntry> GetStaticDependencies(NodeFactory factory) { _dependenciesQueried = true; DependencyList dependencies = null; CodeBasedDependencyAlgorithm.AddDependenciesDueToMethodCodePresence(ref dependencies, factory, _method); if (_compilationDiscoveredDependencies != null) { dependencies = dependencies ?? new DependencyList(); dependencies.AddRange(_compilationDiscoveredDependencies); } if (MethodAssociatedDataNode.MethodHasAssociatedData(factory, this)) { dependencies = dependencies ?? new DependencyList(); dependencies.Add(new DependencyListEntry(factory.MethodAssociatedData(this), "Method associated data")); } return(dependencies); }
public void InitializeDependencies(NodeFactory factory, IEnumerable <DependencyListEntry> dependencies) { _dependencies = new DependencyList(dependencies); CodeBasedDependencyAlgorithm.AddDependenciesDueToMethodCodePresence(ref _dependencies, factory, _method); }