[svn] r6229: nemerle/trunk/ncc: generation/DecisionTreeCompiler.n generation/MatchingCompiler.n misc/Prett...

malekith svnadmin at nemerle.org
Fri May 5 13:59:16 CEST 2006


Log:
Make Pattern.HasType hold MType not some lame TypeInfo. Resolves #591.

Author: malekith
Date: Fri May  5 13:59:15 2006
New Revision: 6229

Modified:
   nemerle/trunk/ncc/generation/DecisionTreeCompiler.n
   nemerle/trunk/ncc/generation/MatchingCompiler.n
   nemerle/trunk/ncc/misc/PrettyPrint.n
   nemerle/trunk/ncc/testsuite/positive/ismatches.n
   nemerle/trunk/ncc/typing/DecisionTreeBuilder.n
   nemerle/trunk/ncc/typing/TypedTree.n
   nemerle/trunk/ncc/typing/Typer-PatternTyper.n
   nemerle/trunk/ncc/typing/Typer2.n

Modified: nemerle/trunk/ncc/generation/DecisionTreeCompiler.n
==============================================================================
--- nemerle/trunk/ncc/generation/DecisionTreeCompiler.n	(original)
+++ nemerle/trunk/ncc/generation/DecisionTreeCompiler.n	Fri May  5 13:59:15 2006
@@ -224,8 +224,8 @@
             def cmp_expr = MatchingCompiler.emit_compare_with (path_expr, lit);
             MatchingCompiler.If (cmp_expr, true_expr, false_expr)
 
-          | Type (ti) => 
-            def has_type_expr = MatchingCompiler.HasType (path_expr, ti);
+          | Type (t) => 
+            def has_type_expr = TExpr.HasType (path_expr, t);
             MatchingCompiler.If (has_type_expr, true_expr, false_expr)
 
           | _ => assert (false);

Modified: nemerle/trunk/ncc/generation/MatchingCompiler.n
==============================================================================
--- nemerle/trunk/ncc/generation/MatchingCompiler.n	(original)
+++ nemerle/trunk/ncc/generation/MatchingCompiler.n	Fri May  5 13:59:15 2006
@@ -154,7 +154,7 @@
             $ "Literal ($l)"
 
           | Pattern.HasType (t) =>
-            "HasType (" + t.FullName + ")"
+            $ "HasType ($t)"
 
           | Pattern.Error => "Error"
         }
@@ -215,8 +215,8 @@
         | Pattern.Literal (lit) =>
           MatchingCompiler.emit_compare_with (val, lit)
         
-        | Pattern.HasType (ti) =>
-          HasType (val, ti)
+        | Pattern.HasType (ty) =>
+          TExpr.HasType (val, ty)
 
         | Pattern.Application (cons_name, Pattern.Wildcard) =>
           assert (! (cons_name.GetTydecl () is TypeDeclaration.Alias));

Modified: nemerle/trunk/ncc/misc/PrettyPrint.n
==============================================================================
--- nemerle/trunk/ncc/misc/PrettyPrint.n	(original)
+++ nemerle/trunk/ncc/misc/PrettyPrint.n	Fri May  5 13:59:15 2006
@@ -448,7 +448,7 @@
         | TT.Pattern.Error => append ("(ERROR)")
         | TT.Pattern.Wildcard => append ("_")
         | TT.Pattern.As (TT.Pattern.HasType (tycon), decl) =>
-          append (decl.Name + " : " + tycon.FullName)          
+          append (decl.Name + " : " + tycon.ToString ())          
         | TT.Pattern.As (pat /* Pattern */, decl /* LocalValue */) =>
           append ("(");
           print_pattern (pat);
@@ -721,7 +721,7 @@
               append (" is ");
               match (then_case.patterns) {
                 | [(As (HasType (ty), _), _, [])] =>
-                  append (strip_nemerle_core_dot_prefix (ty.FullName));
+                  append (strip_nemerle_core_dot_prefix (ty.ToString ()));
                 | _ =>
                   Util.ice ("SprintTyMatch: is_is")
               }

Modified: nemerle/trunk/ncc/testsuite/positive/ismatches.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/ismatches.n	(original)
+++ nemerle/trunk/ncc/testsuite/positive/ismatches.n	Fri May  5 13:59:15 2006
@@ -1,5 +1,20 @@
 using Nemerle.IO;
 
+
+public interface IFoo[T]
+{ }
+
+public class Foo[T]
+{
+        public static Test (x : T) : bool
+        {
+                 x is IFoo[T];
+        }
+}
+
+class X : IFoo[X] { }
+class Y { }
+
 module TestIsAndMatches
 {
   variant SomeTree {
@@ -50,6 +65,12 @@
     test_matches (SomeTree.Leaf ());    
     test_matches (SomeTree.Node (SomeTree.Leaf (), 10, SomeTree.Leaf ()));
     test_matches (SomeTree.Node (SomeTree.Leaf (), 20, SomeTree.Leaf ()));
+
+    assert (Foo[X].Test(X ()));
+    assert (!Foo[Y].Test(Y ()));
+    assert (Foo.Test(X ()));
+    assert (!Foo.Test(Y ()));
+
   }
 }
 

Modified: nemerle/trunk/ncc/typing/DecisionTreeBuilder.n
==============================================================================
--- nemerle/trunk/ncc/typing/DecisionTreeBuilder.n	(original)
+++ nemerle/trunk/ncc/typing/DecisionTreeBuilder.n	Fri May  5 13:59:15 2006
@@ -99,7 +99,7 @@
     {
       | Variant { ti : TypeInfo; }
       | Lit { lit : Nemerle.Compiler.Literal; }
-      | Type { ti: TypeInfo; }
+      | Type { ti: MType; }
       // Decision.IsEq (Path.Here, Con.Guard, _, _) is used to simulate
       // guard check
       | Guard

Modified: nemerle/trunk/ncc/typing/TypedTree.n
==============================================================================
--- nemerle/trunk/ncc/typing/TypedTree.n	(original)
+++ nemerle/trunk/ncc/typing/TypedTree.n	Fri May  5 13:59:15 2006
@@ -292,7 +292,7 @@
   {
     | Wildcard
     | As          { pat : Pattern; decl : LocalValue; }
-    | HasType     { tycon : TypeInfo; }
+    | HasType     { typ : MType; }
     | Tuple       { args : list [Pattern]; }
     | Record      { args : list [IMember * Pattern]; }
     | Application { name : TypeInfo; arg : Pattern; }

Modified: nemerle/trunk/ncc/typing/Typer-PatternTyper.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer-PatternTyper.n	(original)
+++ nemerle/trunk/ncc/typing/Typer-PatternTyper.n	Fri May  5 13:59:15 2006
@@ -629,9 +629,9 @@
 
             match (needed_type) {
               | _ when res != null => res
-              | MType.Class (ti, _) =>
+              | MType.Class as ty =>
                 def typed_pattern =
-                  Pattern.HasType (pattern.loc, matched_value_type, ti);
+                  Pattern.HasType (pattern.loc, matched_value_type, ty);
                 match (TypePattern (needed_type, nested)) {
                   | Pattern.As (Pattern.Wildcard, decl) =>
                     Pattern.As (pattern.loc, matched_value_type, 

Modified: nemerle/trunk/ncc/typing/Typer2.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer2.n	(original)
+++ nemerle/trunk/ncc/typing/Typer2.n	Fri May  5 13:59:15 2006
@@ -340,7 +340,7 @@
     {
       pat.Walk (fun (_) {
         | Pattern.HasType (tc) =>
-          when (pat.ty.TryRequire (tc.GetFreshType ()) && messenger.NeedMessage)
+          when (pat.ty.TryRequire (tc) && messenger.NeedMessage)
             Message.Warning (pat.loc, "using the ``is'' pattern here is redundant, "
                                       "please use ``:''");
           null



More information about the svn mailing list