private static bool IsSameBase(FunctionMemberBase m1, FunctionMemberBase m2)
 {
     if (!Enumerable.SequenceEqual(m1.GenericParameters, m2.GenericParameters, new GenericParameterEqualityComparer()))
     {
         return(false);
     }
     if (HasSameParameters(m1, m2))
     {
         return(false);
     }
     return(m1.Accessibility == m2.Accessibility &&
            m1.Comment == m2.Comment &&
            m1.ResultType.IsSame(m2.ResultType));
 }
 public static bool IsSame(this FunctionMemberBase m1, FunctionMemberBase m2)
 {
     if (m1 == null || m2 == null)
     {
         return(m1 == m2);
     }
     if (m1.GetType() != m2.GetType())
     {
         return(false);
     }
     if (m1 is FunctionDeclarationMember)
     {
         return(IsSame((FunctionDeclarationMember)m1, (FunctionDeclarationMember)m2));
     }
     if (m1 is FunctionMember)
     {
         return(IsSame((FunctionMember)m1, (FunctionMember)m2));
     }
     throw new NotImplementedException();
 }
Example #3
0
 private void Generate(FunctionMemberBase fn)
 {
     Generate(fn.Accessibility);
     Formatter.Write(fn.Name);
     if (fn.IsGeneric)
     {
         Formatter.Write("<");
         Formatter.WriteSeparated(", ", fn.GenericParameters, Generate);
         Formatter.Write(">");
     }
     Formatter.Write("(");
     Formatter.WriteSeparated(", ", fn.Parameters, Generate);
     Formatter.Write(")");
     if (fn.ResultType != null)
     {
         Formatter.Write(": ");
         Generate(fn.ResultType);
     }
     if (fn is FunctionDeclarationMember)
     {
         Formatter.Write(";");
     }
     else if (fn is FunctionMember)
     {
         Formatter.Write(" {");
         Formatter.WriteLine();
         Formatter.PushIndent();
         var fnm = (FunctionMember)fn;
         if (fnm.Body != null)
         {
             Generate(fnm.Body);
         }
         Formatter.PopIndent();
         Formatter.WriteEndOfLine();
         Formatter.Write("}");
     }
     else
     {
         throw new ArgumentOutOfRangeException();
     }
 }
 public static bool HasSameParameters(this FunctionMemberBase m1, FunctionMemberBase m2)
 {
     return(!Enumerable.SequenceEqual(m1.Parameters, m2.Parameters, new FunctionParameterEqualityComparer()));
 }