[svn] r7797: nemerle/trunk/ncc/external: Codec.n LibrariesLoader.n
pbludov
svnadmin at nemerle.org
Fri Sep 14 10:36:39 CEST 2007
Log:
TyCodec.reflect_typarms.set_constraints extracted from TyCodec.reflect_typarms: a reflected generic type parameter may have a constraint to the type itself
Author: pbludov
Date: Fri Sep 14 10:36:36 2007
New Revision: 7797
Modified:
nemerle/trunk/ncc/external/Codec.n
nemerle/trunk/ncc/external/LibrariesLoader.n
Modified: nemerle/trunk/ncc/external/Codec.n
==============================================================================
--- nemerle/trunk/ncc/external/Codec.n (original)
+++ nemerle/trunk/ncc/external/Codec.n Fri Sep 14 10:36:36 2007
@@ -133,15 +133,23 @@
tenv = tenv.Replace (gparm.Name, tv)
}
+ tyvars = List.Rev (tyvars);
+
+ (tyvars, tenv)
+ }
+
+
+ public ReflectConstraints (_lib : LibraryReference, tenv : Map [string, StaticTyVar],
+ sys_type : System.Type, self_type : MType, tyvars : list [StaticTyVar]) : void
+ {
+ def vars = sys_type.GetGenericArguments ();
+
def set_constraints (t, tv : StaticTyVar) {
def constraints = t.GetGenericParameterConstraints ();
tv.SetConstraints (t.GenericParameterAttributes,
- List.MapFromArray (constraints, fun (t) { _lib.TypeOfType (tenv, t) }))
+ List.MapFromArray (constraints, fun (t) { if (t.Equals(sys_type)) self_type else _lib.TypeOfType (tenv, t) }))
};
- tyvars = List.Rev (tyvars);
NArray.Iter2 (vars, tyvars, set_constraints);
-
- (tyvars, tenv)
}
Modified: nemerle/trunk/ncc/external/LibrariesLoader.n
==============================================================================
--- nemerle/trunk/ncc/external/LibrariesLoader.n (original)
+++ nemerle/trunk/ncc/external/LibrariesLoader.n Fri Sep 14 10:36:36 2007
@@ -761,6 +761,8 @@
def parms = List.Map (typarms, fun (x) { MType.TyVarRef (x) });
self_type = MType.Class (this, parms);
+ TyCodec.ReflectConstraints(library, tenv, system_type, self_type, typarms);
+
attributes = NemerleAttributes.None;
when (system_type.IsAbstract) attributes |= NemerleAttributes.Abstract;
More information about the svn
mailing list