[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