Пример #1
0
        protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
        {
            var compare = _id.CompareTo(((ReadyToRunHelperNode)other)._id);

            if (compare != 0)
            {
                return(compare);
            }

            switch (_id)
            {
            case ReadyToRunHelperId.NewHelper:
            case ReadyToRunHelperId.NewArr1:
            case ReadyToRunHelperId.IsInstanceOf:
            case ReadyToRunHelperId.CastClass:
            case ReadyToRunHelperId.GetNonGCStaticBase:
            case ReadyToRunHelperId.GetGCStaticBase:
            case ReadyToRunHelperId.GetThreadStaticBase:
                return(comparer.Compare((TypeDesc)_target, (TypeDesc)((ReadyToRunHelperNode)other)._target));

            case ReadyToRunHelperId.VirtualCall:
            case ReadyToRunHelperId.ResolveVirtualFunction:
                return(comparer.Compare((MethodDesc)_target, (MethodDesc)((ReadyToRunHelperNode)other)._target));

            case ReadyToRunHelperId.DelegateCtor:
                return(((DelegateCreationInfo)_target).CompareTo((DelegateCreationInfo)((ReadyToRunHelperNode)other)._target, comparer));

            default:
                throw new NotImplementedException();
            }
        }
Пример #2
0
        public static int CompareImpl(SortableDependencyNode x, SortableDependencyNode y, CompilerComparer comparer)
        {
            int phaseX = x.Phase;
            int phaseY = y.Phase;

            if (phaseX == phaseY)
            {
                int codeX = x.ClassCode;
                int codeY = y.ClassCode;
                if (codeX == codeY)
                {
                    Debug.Assert(x.GetType() == y.GetType() ||
                                 (x.GetType().IsConstructedGenericType&& y.GetType().IsConstructedGenericType &&
                                  x.GetType().GetGenericTypeDefinition() == y.GetType().GetGenericTypeDefinition()));

                    int result = x.CompareToImpl(y, comparer);

                    // We did a reference equality check above so an "Equal" result is not expected
                    Debug.Assert(result != 0 || x == y);

                    return(result);
                }
                else
                {
                    Debug.Assert(x.GetType() != y.GetType());
                    return(codeY > codeX ? -1 : 1);
                }
            }
            else
            {
                return(phaseX - phaseY);
            }
        }
Пример #3
0
        protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
        {
            NonExternMethodSymbolNode otherMethod = (NonExternMethodSymbolNode)other;
            var result = _isUnboxing.CompareTo(otherMethod._isUnboxing);

            return(result != 0 ? result : comparer.Compare(_method, otherMethod._method));
        }
        protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
        {
            var compare = _id.CompareTo(((ReadyToRunGenericHelperNode)other)._id);

            if (compare != 0)
            {
                return(compare);
            }

            if (_dictionaryOwner is MethodDesc)
            {
                if (((ReadyToRunGenericHelperNode)other)._dictionaryOwner is TypeDesc)
                {
                    return(-1);
                }

                compare = comparer.Compare((MethodDesc)_dictionaryOwner, (MethodDesc)((ReadyToRunGenericHelperNode)other)._dictionaryOwner);
            }
            else
            {
                if (((ReadyToRunGenericHelperNode)other)._dictionaryOwner is MethodDesc)
                {
                    return(1);
                }

                compare = comparer.Compare((TypeDesc)_dictionaryOwner, (TypeDesc)((ReadyToRunGenericHelperNode)other)._dictionaryOwner);
            }

            if (compare != 0)
            {
                return(compare);
            }

            switch (_id)
            {
            case ReadyToRunHelperId.TypeHandle:
            case ReadyToRunHelperId.GetGCStaticBase:
            case ReadyToRunHelperId.GetNonGCStaticBase:
            case ReadyToRunHelperId.GetThreadStaticBase:
            case ReadyToRunHelperId.DefaultConstructor:
                return(comparer.Compare((TypeDesc)_target, (TypeDesc)((ReadyToRunGenericHelperNode)other)._target));

            case ReadyToRunHelperId.MethodHandle:
            case ReadyToRunHelperId.MethodDictionary:
            case ReadyToRunHelperId.VirtualDispatchCell:
            case ReadyToRunHelperId.MethodEntry:
                return(comparer.Compare((MethodDesc)_target, (MethodDesc)((ReadyToRunGenericHelperNode)other)._target));

            case ReadyToRunHelperId.FieldHandle:
                return(comparer.Compare((FieldDesc)_target, (FieldDesc)((ReadyToRunGenericHelperNode)other)._target));

            case ReadyToRunHelperId.DelegateCtor:
                return(((DelegateCreationInfo)_target).CompareTo((DelegateCreationInfo)((ReadyToRunGenericHelperNode)other)._target, comparer));

            default:
                throw new NotImplementedException();
            }
        }
        protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
        {
            var compare = string.Compare(_moduleName, ((PInvokeMethodFixupNode)other)._moduleName);

            if (compare != 0)
            {
                return(compare);
            }

            return(string.Compare(_entryPointName, ((PInvokeMethodFixupNode)other)._entryPointName));
        }
Пример #6
0
        protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
        {
            var compare = _isUnboxingStub.CompareTo(((FatFunctionPointerNode)other)._isUnboxingStub);

            if (compare != 0)
            {
                return(compare);
            }

            return(comparer.Compare(Method, ((FatFunctionPointerNode)other).Method));
        }
Пример #7
0
        protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
        {
            MrtImportNode otherImportNode = (MrtImportNode)other;

            int result = string.CompareOrdinal(_importTable.ExportTableToImportSymbol, otherImportNode._importTable.ExportTableToImportSymbol);

            if (result != 0)
            {
                return(result);
            }

            return(Ordinal - otherImportNode.Ordinal);
        }
        protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
        {
            NativeLayoutSignatureNode otherSignature = (NativeLayoutSignatureNode)other;

            if (_identity is MethodDesc)
            {
                if (otherSignature._identity is TypeDesc || otherSignature._identity is FieldDesc)
                {
                    return(-1);
                }
                return(comparer.Compare((MethodDesc)_identity, (MethodDesc)((NativeLayoutSignatureNode)other)._identity));
            }
            else if (_identity is TypeDesc)
            {
                if (otherSignature._identity is MethodDesc)
                {
                    return(1);
                }

                if (otherSignature._identity is FieldDesc)
                {
                    return(-1);
                }

                return(comparer.Compare((TypeDesc)_identity, (TypeDesc)((NativeLayoutSignatureNode)other)._identity));
            }
            else if (_identity is FieldDesc)
            {
                if (otherSignature._identity is MethodDesc || otherSignature._identity is TypeDesc)
                {
                    return(1);
                }
                return(comparer.Compare((FieldDesc)_identity, (FieldDesc)((NativeLayoutSignatureNode)other)._identity));
            }
            else
            {
                throw new NotSupportedException("New type system entity needs a comparison");
            }
        }
Пример #9
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(_isEndSymbol.CompareTo(((WindowsUnboxingStubsRegionNode)other)._isEndSymbol));
 }
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(comparer.Compare(WrappedMethodIndirectionCellNode, ((RuntimeDecodableJumpStubNode)other).WrappedMethodIndirectionCellNode));
 }
Пример #11
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(_gcMap.CompareTo(((GCStaticEETypeNode)other)._gcMap));
 }
Пример #12
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(CompareTo((GCStaticDescNode)other, comparer));
 }
Пример #13
0
 // Note to implementers: the type of `other` is actually the same as the type of `this`.
 protected internal virtual int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     throw new NotImplementedException("Multiple nodes of this type are not supported");
 }
Пример #14
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(string.Compare(_prefix, ((ThreadStaticsIndexNode)other)._prefix));
 }
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(string.Compare(_blobName, ((ExternalReferencesTableNode)other)._blobName));
 }
Пример #16
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(_standaloneGCStaticDesc.CompareTo(((StandaloneGCStaticDescRegionNode)other)._standaloneGCStaticDesc, comparer));
 }
Пример #17
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(comparer.Compare(_method, ((RuntimeImportMethodNode)other)._method));
 }
Пример #18
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(comparer.Compare(_type, ((UtcThreadStaticsNode)other)._type));
 }
Пример #19
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(comparer.Compare(Method, ((UnboxingStubNode)other).Method));
 }
 protected override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(comparer.Compare(_targetMethod, ((WebAssemblyVTableSlotNode)other)._targetMethod));
 }
Пример #21
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(comparer.Compare(_type, ((InterfaceDispatchMapNode)other)._type));
 }
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(comparer.Compare(_type, ((GCStaticsPreInitDataNode)other)._type));
 }
Пример #23
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(comparer.Compare(_methodNode, ((MethodAssociatedDataNode)other)._methodNode));
 }
 static partial void ApplyCustomSort(SortableDependencyNode x, SortableDependencyNode y, ref int result);
Пример #25
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     Debug.Assert(Object.ReferenceEquals(other, this));
     return(0); // There should only ever be one of these per dependency graph
 }
Пример #26
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(comparer.Compare(this._indirectedNode, ((IndirectionNode)other)._indirectedNode));
 }
Пример #27
0
        protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
        {
            var compare = comparer.Compare(_targetMethod, ((InterfaceDispatchCellNode)other)._targetMethod);

            return(compare != 0 ? compare : string.Compare(_callSiteIdentifier, ((InterfaceDispatchCellNode)other)._callSiteIdentifier));
        }
Пример #28
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(_name.CompareTo(((ExternSymbolNode)other)._name));
 }
Пример #29
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(SortableDependencyNode.CompareImpl(_owner, ((EETypeOptionalFieldsNode)other)._owner, comparer));
 }
Пример #30
0
 protected internal override int CompareToImpl(SortableDependencyNode other, CompilerComparer comparer)
 {
     return(comparer.Compare(_targetField, ((RuntimeFieldHandleNode)other)._targetField));
 }