[svn] r6156: nemerle/trunk/ncc: external/InternalTypes.n testsuite/positive/enumerable-arrays.n typing/MTy...

nazgul svnadmin at nemerle.org
Tue Mar 7 20:42:37 CET 2006


Log:
More array conversions cases considered

Author: nazgul
Date: Tue Mar  7 20:42:34 2006
New Revision: 6156

Modified:
   nemerle/trunk/ncc/external/InternalTypes.n
   nemerle/trunk/ncc/testsuite/positive/enumerable-arrays.n
   nemerle/trunk/ncc/typing/MType.n

Modified: nemerle/trunk/ncc/external/InternalTypes.n
==============================================================================
--- nemerle/trunk/ncc/external/InternalTypes.n	(original)
+++ nemerle/trunk/ncc/external/InternalTypes.n	Tue Mar  7 20:42:34 2006
@@ -402,6 +402,8 @@
   public mutable IEnumerator_tc : TypeInfo;
   public mutable Generic_IEnumerable_tc : TypeInfo;
   public mutable Generic_IEnumerator_tc : TypeInfo;
+  public mutable Generic_IList_tc : TypeInfo;
+  public mutable Generic_ICollection_tc : TypeInfo;
   public mutable DllImport_tc : TypeInfo;
   public mutable Serializable_tc : TypeInfo;    
 
@@ -548,6 +550,8 @@
     IEnumerator_tc = lookup ("System.Collections.IEnumerator");
     Generic_IEnumerable_tc = lookup ("System.Collections.Generic.IEnumerable");
     Generic_IEnumerator_tc = lookup ("System.Collections.Generic.IEnumerator");
+    Generic_IList_tc = lookup ("System.Collections.Generic.IList");
+    Generic_ICollection_tc = lookup ("System.Collections.Generic.ICollection");
     DllImport_tc = lookup ("System.Runtime.InteropServices.DllImportAttribute");
     Serializable_tc = lookup ("System.SerializableAttribute");    
     IObjectReference = MType.Class (lookup ("System.Runtime.Serialization.IObjectReference"), []);

Modified: nemerle/trunk/ncc/testsuite/positive/enumerable-arrays.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/enumerable-arrays.n	(original)
+++ nemerle/trunk/ncc/testsuite/positive/enumerable-arrays.n	Tue Mar  7 20:42:34 2006
@@ -12,9 +12,40 @@
     foreach(val  in values)
         Console.WriteLine(val.ToString());
 }
+def dump3[T](values : IList [T])
+{
+    foreach(val  in values)
+        Console.WriteLine(val.ToString());
+}
+def dump4(values : ICollection)
+{
+    foreach(val  in values)
+        Console.WriteLine(val.ToString());
+}
+def dump5[T](values : ICollection [T])
+{
+    foreach(val  in values)
+        Console.WriteLine(val.ToString());
+}
+def append_sep['a] (f : 'a -> void, x : 'a) {
+  f (x);
+  Console.WriteLine ("---");
+}
+
+def clone (values : ICloneable) {
+  def valuesc = values.Clone () :> array [int];
+  def valuesa = values :> array [int];
+  assert (valuesa.Length == valuesc.Length);
+  foreach (i in $[0..valuesc.Length-1])
+    assert (valuesc[i] == valuesa[i]);
+}
 def values = array[1, 2, 3];
-dump(values); 
-dump2(values); 
+dump (values);
+append_sep (dump2, values);
+append_sep (dump3, values);
+append_sep (dump4, values);
+append_sep (dump5, values);
+clone (values); 
 
 /*
 BEGIN-OUTPUT
@@ -24,5 +55,18 @@
 1
 2
 3
+---
+1
+2
+3
+---
+1
+2
+3
+---
+1
+2
+3
+---
 END-OUTPUT
 */

Modified: nemerle/trunk/ncc/typing/MType.n
==============================================================================
--- nemerle/trunk/ncc/typing/MType.n	(original)
+++ nemerle/trunk/ncc/typing/MType.n	Tue Mar  7 20:42:34 2006
@@ -299,15 +299,15 @@
         //| (Class (tc, _), Void) when tc.Equals (InternalType.Void_tc)
         | (Void, Void) => true
 
-        | (Array, Class (tc, _)) 
-          when tc.Equals (InternalType.Array_tc) => true
+        | (Array (t, _), Class (tc, [t'])) =>
+         (tc.Equals (InternalType.Generic_IEnumerable_tc) ||
+          tc.Equals (InternalType.Generic_IList_tc) ||
+          tc.Equals (InternalType.Generic_ICollection_tc)) && t.Unify (t')
 
-        | (Array (t, _), Class (tc, [t'])) 
-          when tc.Equals (InternalType.Generic_IEnumerable_tc) =>
-          t.Unify (t')
+        | (Array, Class (_, []) as ct) =>
+          InternalType.Array.Require (ct)
 
-        | (Array, Class (tc, [])) 
-          when tc.Equals (InternalType.IEnumerable_tc) => true
+        | (Array, _) => false
 
         | (TyVarRef (tv1), TyVarRef (tv2))
           when tv1.Equals (tv2) => true



More information about the svn mailing list