[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