[svn] r7066: nemerle/trunk/ncc: generation/Typer3.n
hierarchy/TypeBuilder.n
nazgul
svnadmin at nemerle.org
Wed Dec 6 22:29:35 CET 2006
Log:
Statically safe DefineNestedType method. Fix bug, which appeared as regression in frommcs tests
Author: nazgul
Date: Wed Dec 6 22:29:32 2006
New Revision: 7066
Modified:
nemerle/trunk/ncc/generation/Typer3.n
nemerle/trunk/ncc/hierarchy/TypeBuilder.n
Modified: nemerle/trunk/ncc/generation/Typer3.n
==============================================================================
--- nemerle/trunk/ncc/generation/Typer3.n (original)
+++ nemerle/trunk/ncc/generation/Typer3.n Wed Dec 6 22:29:32 2006
@@ -635,7 +635,7 @@
}
- static PrepareEnumeratorObject (yield_type : TyVar) : Parsetree.ClassMember
+ static PrepareEnumeratorObject (yield_type : TyVar) : Parsetree.ClassMember.TypeDeclaration
{
<[ decl:
class $(Macros.NewSymbol ("Enumerator") : name) :
@@ -666,7 +666,7 @@
]>
}
- PrepareEnumerableObject (yield_type : TyVar) : Parsetree.ClassMember
+ PrepareEnumerableObject (yield_type : TyVar) : Parsetree.ClassMember.TypeDeclaration
{
def name = Macros.NewSymbol ("Enumerable");
Modified: nemerle/trunk/ncc/hierarchy/TypeBuilder.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/TypeBuilder.n (original)
+++ nemerle/trunk/ncc/hierarchy/TypeBuilder.n Wed Dec 6 22:29:32 2006
@@ -411,20 +411,14 @@
}
}
- public DefineNestedType (td : PT.ClassMember, do_fixup : bool) : TypeBuilder
+ public DefineNestedType (td : PT.ClassMember.TypeDeclaration, do_fixup : bool) : TypeBuilder
{
- match (td) {
- | PT.ClassMember.TypeDeclaration (td) =>
- def tyinfo = Manager.NameTree.AddType (this, namespace_nd, td);
+ def tyinfo = Manager.NameTree.AddType (this, namespace_nd, td.td);
when (do_fixup) tyinfo.FixupDefinedClass ();
tyinfo
- | _ =>
- Message.Error ("expected declaration of nested type");
- null
- }
}
- public DefineNestedType (td : PT.ClassMember) : TypeBuilder
+ public DefineNestedType (td : PT.ClassMember.TypeDeclaration) : TypeBuilder
{
DefineNestedType (td, true)
}
@@ -482,10 +476,8 @@
_ = Delegates.GenerateDelegateClass (this.GlobalEnv, this, td.modifiers, header);
null
- | PT.ClassMember.TypeDeclaration (td) =>
- def tyinfo = Manager.NameTree.AddType (this, namespace_nd, td);
- when (do_fixup)
- tyinfo.FixupDefinedClass ();
+ | PT.ClassMember.TypeDeclaration as td =>
+ _ = DefineNestedType (td, do_fixup);
null
| _ => DefineAndReturn (f)
@@ -997,10 +989,8 @@
else ht [nm] = null;
}
- match (this.pt_tydecl) {
- | PT.TopDeclaration.Class (_, decls)
- | PT.TopDeclaration.Variant (_, decls) =>
- foreach (PT.ClassMember.TypeDeclaration (x) in decls) {
+ foreach (x in contained_types) {
+ def x = x.ParsedDeclaration;
if (x.typarms == null)
x.typarms = this.pt_tydecl.typarms;
else {
@@ -1021,8 +1011,6 @@
tp1.constraints + tp2.constraints)
}
}
- | _ => ()
- }
}
match (pt_tydecl) {
@@ -1084,6 +1072,7 @@
else {
def sub = Subst (Manager);
def par_typarms = enclosing_type.typarms;
+ //Message.Debug ($"my typarms=$typarms vs eclosing=$par_typarms");
List.Iter2 (typarms.FirstN (par_typarms.Length), par_typarms, fun (t, pt) {
sub.Add (pt, MType.TyVarRef (t))
});
More information about the svn
mailing list