Exemple #1
0
        public override bool Equals(Signature other)
        {
            if (!base.Equals(other))
            {
                return(false);
            }
            var otherMeth = (MethodSignature)other;

            if (IsStatic != otherMeth.IsStatic || TypeArity != otherMeth.TypeArity ||
                Parameters.Count != otherMeth.Parameters.Count)
            {
                return(false);
            }
            for (var i = 0; i < Parameters.Count; i++)
            {
                if (!Parameters[i].Equals(otherMeth.Parameters[i]))
                {
                    return(false);
                }
            }
            if (Result == null && otherMeth.Result != null || Result != null && otherMeth.Result == null)
            {
                return(false);
            }
            return(Result == null || Result.Equals(otherMeth.Result));
        }
Exemple #2
0
        public override bool Equals(Signature other)
        {
            if (!base.Equals(other))
            {
                return(false);
            }
            var otherField = (FieldSignature)other;

            return(FieldType.Equals(otherField.FieldType));
        }
Exemple #3
0
        public override bool Equals(Signature other)
        {
            if (!base.Equals(other))
            {
                return(false);
            }
            var otherProp = (PropertySignature)other;

            if (IsStatic != otherProp.IsStatic || Parameters.Count != otherProp.Parameters.Count)
            {
                return(false);
            }
            for (var i = 0; i < Parameters.Count; i++)
            {
                if (!Parameters[i].Equals(otherProp.Parameters[i]))
                {
                    return(false);
                }
            }
            return(Result.Equals(otherProp.Result));
        }
Exemple #4
0
 public virtual bool Equals(MemberRef other)
 {
     return(Flavor == other.Flavor && DefiningType.Equals(other.DefiningType) &&
            Name.Equals(other.Name, StringComparison.Ordinal) && Signature.Equals(other.Signature));
 }
Exemple #5
0
        public override bool Equals(object obj)
        {
            var test = obj as Test;

            return(test != null && Op == test.Op && IsUnsigned == test.IsUnsigned && Type.Equals(test.Type));
        }
Exemple #6
0
        private PE.TypeSig TypeSigFromTypeRef(DllSaveContext ctxt, TypeRef typeRef)
        {
            if (typeRef.Equals(rootEnv.Global.TypedReferenceRef))
            {
                return new PE.PrimitiveTypeSig {
                           PrimitiveType = PE.PrimitiveType.TypedRef
                }
            }
            ;
            else
            {
                var tyconEnv = typeRef.EnterConstructor(rootEnv);

                switch (tyconEnv.Type.Flavor)
                {
                case TypeDefFlavor.Pointer:
                {
                    var p = (PointerTypeDef)tyconEnv.Type;
                    switch (p.PointerFlavor)
                    {
                    case PointerFlavor.Unmanaged:
                        return(new PE.UnmanagedPointerTypeSig {
                                ElementType = TypeWithCustomModsFromTypeRef(ctxt, typeRef.Arguments[0])
                            });

                    case PointerFlavor.Managed:
                        return(new PE.ManagedPointerTypeSig {
                                ElementType = TypeSigFromTypeRef(ctxt, typeRef.Arguments[0])
                            });

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }

                case TypeDefFlavor.CodePointer:
                {
                    var p = (CodePointerTypeDef)tyconEnv.Type;
                    switch (p.CodePointerFlavor)
                    {
                    case CodePointerFlavor.Function:
                        throw new NotImplementedException();

                    case CodePointerFlavor.Action:
                        throw new NotImplementedException();

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                    break;
                }

                case TypeDefFlavor.Array:
                    return(new PE.ArrayTypeSig {
                        ElementType = TypeWithCustomModsFromTypeRef(ctxt, typeRef.Arguments[0])
                    });

                case TypeDefFlavor.MultiDimArray:
                {
                    var a = (MultiDimArrayTypeDef)tyconEnv.Type;
                    return(new PE.MultiDimArrayTypeSig
                        {
                            ElementType = TypeSigFromTypeRef(ctxt, typeRef.Arguments[0]),
                            Rank = a.Rank,
                            LoBounds = a.Bounds.LoBounds(),
                            Sizes = a.Bounds.Sizes()
                        });
                }

                case TypeDefFlavor.Box:
                    throw new InvalidOperationException("unexpected box type");

                case TypeDefFlavor.Null:
                    throw new InvalidOperationException("unexpected null type");

                case TypeDefFlavor.Parameter:
                {
                    var p = (ParameterTypeDef)tyconEnv.Type;
                    switch (p.ParameterFlavor)
                    {
                    case ParameterFlavor.Type:
                        return(new PE.TypeParameterTypeSig {
                                Index = p.Index
                            });

                    case ParameterFlavor.Method:
                        return(new PE.MethodParameterTypeSig {
                                Index = p.Index
                            });

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }

                case TypeDefFlavor.Handle:
                case TypeDefFlavor.Nullable:
                case TypeDefFlavor.Enum:
                case TypeDefFlavor.Struct:
                {
                    var applicand = new PE.TypeDefOrRefSig
                    {
                        IsValueType  = true,
                        TypeDefOrRef = { Value = TypeDefOrRefRowFromQualifiedTypeName(ctxt, typeRef.QualifiedTypeName) }
                    };
                    if (typeRef.Arguments.Count > 0)
                    {
                        return new PE.ApplicationTypeSig
                               {
                                   Applicand = applicand,
                                   Arguments = typeRef.Arguments.Select(t => TypeSigFromTypeRef(ctxt, t)).ToSeq()
                               }
                    }
                    ;
                    else
                    {
                        return(applicand);
                    }
                }

                case TypeDefFlavor.Void:
                    return(new PE.PrimitiveTypeSig {
                        PrimitiveType = PE.PrimitiveType.Void
                    });

                case TypeDefFlavor.Number:
                {
                    var n = (NumberTypeDef)tyconEnv.Type;
                    var p = default(PE.PrimitiveType);
                    switch (n.NumberFlavor)
                    {
                    case NumberFlavor.Int8:
                        p = PE.PrimitiveType.Int8;
                        break;

                    case NumberFlavor.Int16:
                        p = PE.PrimitiveType.Int16;
                        break;

                    case NumberFlavor.Int32:
                        p = PE.PrimitiveType.Int32;
                        break;

                    case NumberFlavor.Int64:
                        p = PE.PrimitiveType.Int64;
                        break;

                    case NumberFlavor.IntNative:
                        p = PE.PrimitiveType.IntNative;
                        break;

                    case NumberFlavor.UInt8:
                        p = PE.PrimitiveType.UInt8;
                        break;

                    case NumberFlavor.UInt16:
                        p = PE.PrimitiveType.UInt16;
                        break;

                    case NumberFlavor.UInt32:
                        p = PE.PrimitiveType.UInt32;
                        break;

                    case NumberFlavor.UInt64:
                        p = PE.PrimitiveType.UInt64;
                        break;

                    case NumberFlavor.UIntNative:
                        p = PE.PrimitiveType.UIntNative;
                        break;

                    case NumberFlavor.Single:
                        p = PE.PrimitiveType.Single;
                        break;

                    case NumberFlavor.Double:
                        p = PE.PrimitiveType.Double;
                        break;

                    case NumberFlavor.Boolean:
                        p = PE.PrimitiveType.Boolean;
                        break;

                    case NumberFlavor.Char:
                        p = PE.PrimitiveType.Char;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                    return(new PE.PrimitiveTypeSig {
                            PrimitiveType = p
                        });
                }

                case TypeDefFlavor.Delegate:
                case TypeDefFlavor.Class:
                case TypeDefFlavor.Interface:
                case TypeDefFlavor.GenericIEnumerable:
                {
                    var applicand = new PE.TypeDefOrRefSig
                    {
                        IsValueType  = false,
                        TypeDefOrRef = { Value = TypeDefOrRefRowFromQualifiedTypeName(ctxt, typeRef.QualifiedTypeName) }
                    };
                    if (typeRef.Arguments.Count > 0)
                    {
                        return new PE.ApplicationTypeSig
                               {
                                   Applicand = applicand,
                                   Arguments = typeRef.Arguments.Select(t => TypeSigFromTypeRef(ctxt, t)).ToSeq()
                               }
                    }
                    ;
                    else
                    {
                        return(applicand);
                    }
                }

                case TypeDefFlavor.Object:
                    return(new PE.PrimitiveTypeSig {
                        PrimitiveType = PE.PrimitiveType.Object
                    });

                case TypeDefFlavor.String:
                    return(new PE.PrimitiveTypeSig {
                        PrimitiveType = PE.PrimitiveType.String
                    });

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
Exemple #7
0
 public bool Equals(Variable other)
 {
     return(Id.Equals(other.Id) && ArgLocal == other.ArgLocal && IsInit == other.IsInit && IsReadOnly == other.IsReadOnly && Type.Equals(other.Type));
 }
Exemple #8
0
        protected override bool EqualBody(Cell other)
        {
            var box = (BoxCell)other;

            return(Box.Equals(box.Box) && ValueType.Equals(box.ValueType));
        }