[svn] r7314: nemerle/trunk: BuildAndReg-Release.cmd boot/Nemerle.Compiler.dll boot/Nemerle.MSBuild.Tasks.d...

VladD2 svnadmin at nemerle.org
Sun Jan 21 14:14:47 CET 2007


Log:
Improve OverrideObjectEquals macro (at now it more faster and flexible)

Author: VladD2
Date: Sun Jan 21 14:14:11 2007
New Revision: 7314

Modified:
   nemerle/trunk/BuildAndReg-Release.cmd
   nemerle/trunk/boot/Nemerle.Compiler.dll
   nemerle/trunk/boot/Nemerle.MSBuild.Tasks.dll
   nemerle/trunk/boot/Nemerle.Macros.dll
   nemerle/trunk/boot/Nemerle.dll
   nemerle/trunk/boot/ncc.exe
   nemerle/trunk/macros/core.n
   nemerle/trunk/ncc/hierarchy/TypeInfo.n

Modified: nemerle/trunk/BuildAndReg-Release.cmd
==============================================================================
--- nemerle/trunk/BuildAndReg-Release.cmd	(original)
+++ nemerle/trunk/BuildAndReg-Release.cmd	Sun Jan 21 14:14:11 2007
@@ -4,3 +4,4 @@
 
 call BuildAndReg.cmd
 
+pause
\ No newline at end of file

Modified: nemerle/trunk/boot/Nemerle.Compiler.dll
==============================================================================
Binary files. No diff available.

Modified: nemerle/trunk/boot/Nemerle.MSBuild.Tasks.dll
==============================================================================
Binary files. No diff available.

Modified: nemerle/trunk/boot/Nemerle.Macros.dll
==============================================================================
Binary files. No diff available.

Modified: nemerle/trunk/boot/Nemerle.dll
==============================================================================
Binary files. No diff available.

Modified: nemerle/trunk/boot/ncc.exe
==============================================================================
Binary files. No diff available.

Modified: nemerle/trunk/macros/core.n
==============================================================================
--- nemerle/trunk/macros/core.n	(original)
+++ nemerle/trunk/macros/core.n	Sun Jan 21 14:14:11 2007
@@ -1141,18 +1141,24 @@
   macro OverrideObjectEquals (t : TypeBuilder, m : ParsedMethod)
   {
     match (m.header.parms) {
-      | [_] =>
+      | [param] =>
+        mutable cases = [<[ case: 
+          | x is $(param.ty) => this.$(m.header.name.GetName () : name) (x) ]>,
+          <[ case: | _ => false ]>];
+
+        unless (t.IsValueType)
+          cases ::= <[ case: | x when x : object == this => true ]>;
+
         t.Define (<[ decl:
-          public override Equals (x : object) : bool
+          public override Equals (other : object) : bool
           {
-            if (typeof (this).IsInstanceOfType (x))
-              this.$(m.header.name.GetName () : name) (x :> this)
-            else
-              false
+            match (other)
+            {
+              ..$cases
+            }
           }
         ]>)
-      | _ =>
-        Message.Error ("Equals()-like method shall have a single argument")
+      | _ => Message.Error ("Equals()-like method shall have a single parameter")
     }
   }
 

Modified: nemerle/trunk/ncc/hierarchy/TypeInfo.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/TypeInfo.n	(original)
+++ nemerle/trunk/ncc/hierarchy/TypeInfo.n	Sun Jan 21 14:14:11 2007
@@ -133,7 +133,7 @@
   GetSetter () : IMethod;
 }
 
-public abstract class MemberInfo 
+public abstract class MemberInfo : System.IEquatable[MemberInfo]
 {
   [Accessor]
   protected mutable is_obsolete : bool;
@@ -205,6 +205,11 @@
     }
     (msg, is_error)
   }
+
+  public Equals (other : MemberInfo) : bool
+  {
+    this : object == other
+  }
 }
 
 [ManagerAccess]



More information about the svn mailing list