[svn] r6230: nemerle/trunk/ncc: hierarchy/ClassMembers.n
testsuite/positive/delegate.n typing/Typer2.n
malekith
svnadmin at nemerle.org
Fri May 5 15:45:04 CEST 2006
Log:
Fix access to events from generic types. Prevent complaints about unused event add_/remove_ methods (never scream about remove_, scream about add_ only if really not used). Resolves #590.
Author: malekith
Date: Fri May 5 15:45:03 2006
New Revision: 6230
Modified:
nemerle/trunk/ncc/hierarchy/ClassMembers.n
nemerle/trunk/ncc/testsuite/positive/delegate.n
nemerle/trunk/ncc/typing/Typer2.n
Modified: nemerle/trunk/ncc/hierarchy/ClassMembers.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/ClassMembers.n (original)
+++ nemerle/trunk/ncc/hierarchy/ClassMembers.n Fri May 5 15:45:03 2006
@@ -1119,6 +1119,7 @@
adder = make_method (f.add);
remover = make_method (f.remove);
+ remover.HasBeenUsed = true;
ty.CheckAccessibility (this, accessibility);
}
Modified: nemerle/trunk/ncc/testsuite/positive/delegate.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/delegate.n (original)
+++ nemerle/trunk/ncc/testsuite/positive/delegate.n Fri May 5 15:45:03 2006
@@ -132,6 +132,37 @@
}
}
+namespace Bug590 {
+
+delegate Test[T] (mutable t : T) : void;
+
+class Foo[T]
+{
+ public event MyEvent : Test[T];
+
+ public Hello (mutable t : T) : void
+ {
+ when (MyEvent != null)
+ MyEvent (t);
+ }
+}
+
+class X
+{
+ static do_hello (mutable hello : string) : void
+ {
+ Console.WriteLine ("Hello: {0}", hello);
+ }
+
+ public static Main2 () : void
+ {
+ mutable foo = Foo ();
+ foo.MyEvent += Test (do_hello);
+ foo.Hello ("Boston");
+ }
+}
+}
+
public delegate GenDel[X] (x : X) : int;
public module M {
@@ -219,6 +250,8 @@
printf ("non-void: %s",
run_my_non_void_delegate ("foobarized", M.MySprintDelegate (sprint_static_meth)));
+ Bug590.X.Main2 ();
+
def c1 = C1 ("c1");
def c2 = C1 ("c2");
run_delegate (System.Threading.ThreadStart (c1.m1));
@@ -245,6 +278,7 @@
s: bar:f
string_static_meth: foobarized
non-void: sprint_static_meth: foobarized
+Hello: Boston
c1 C.m1
c2 C.m1
c1: qux:t
Modified: nemerle/trunk/ncc/typing/Typer2.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer2.n (original)
+++ nemerle/trunk/ncc/typing/Typer2.n Fri May 5 15:45:03 2006
@@ -312,14 +312,14 @@
else
ev2.GetRemover ();
assert (ev_meth != null);
+ ev_meth.HasBeenUsed = true;
def ev_meth_ref =
- // XXX possibly wrong type here
if (obj1 == null) {
- def (ty, vars) = ev_meth.GetFreshType ();
+ def (ty, vars) = ty1.Fix ().TypeOfMethodWithTyparms (ev_meth);
TExpr.StaticRef (ty, ty1, ev_meth, vars)
} else {
def obj1 = Walk (obj1);
- def (ty, vars) = ev_meth.GetFreshType ();
+ def (ty, vars) = obj1.Type.Fix ().TypeOfMethodWithTyparms (ev_meth);
TExpr.MethodRef (ty, obj1, ev_meth,
vars, IsBaseRef (obj1));
}
More information about the svn
mailing list