[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