[svn] r7058: nemerle/trunk/ncc: generation/Typer3.n
testsuite/positive/delegate.n
malekith
svnadmin at nemerle.org
Wed Dec 6 13:08:58 CET 2006
Log:
It seems delegate proxies were not needed at all. Kill 'em. Resolves #718.
Author: malekith
Date: Wed Dec 6 13:08:57 2006
New Revision: 7058
Modified:
nemerle/trunk/ncc/generation/Typer3.n
nemerle/trunk/ncc/testsuite/positive/delegate.n
Modified: nemerle/trunk/ncc/generation/Typer3.n
==============================================================================
--- nemerle/trunk/ncc/generation/Typer3.n (original)
+++ nemerle/trunk/ncc/generation/Typer3.n Wed Dec 6 13:08:57 2006
@@ -604,48 +604,19 @@
EmitDelegateProxy (expr : TExpr) : TExpr * TExpr.MethodAddress
{
- def decl =
+ def (fnty, apply) =
match (expr.Type.Fix ()) {
- | MType.Fun (from, ret_type) as ty =>
- def parms =
- from.Fix ().GetFunctionArguments ().Map (fun (ty) {
- def name = Macros.NewSymbol ("parm");
- (<[ parameter: $(name : name) : $(ty : typed) ]>,
- <[ $(name : name) ]>)
- });
- def (parms, parm_refs) = List.Split (parms);
-
- <[ decl:
- private sealed class $(Macros.NewSymbol ("delegate_proxy") : name)
- {
- funptr : $(ty : typed);
- public this (fp : $(ty : typed))
- {
- funptr = fp;
- }
-
- public InvokeDelegate (.. $parms) : $(ret_type : typed)
- {
- funptr (.. $parm_refs)
- }
- }
- ]>
-
+ | MType.Fun (from, to) =>
+ def args = from.Fix ().GetUnfixedFunctionArguments ();
+ def fnty = InternalType.GetFunctionType (args.Length);
+ if (to.Fix () is MType.Void)
+ (MType.Class (fnty.VoidTyCon, args), fnty.ApplyVoidMethod)
+ else
+ (MType.Class (fnty.TyCon, args + [to]), fnty.ApplyMethod)
| _ => assert (false)
}
- def tb = CurrentType.DefineNestedType (decl);
- tb.MarkWithSpecialName ();
- tb.Compile ();
-
- def ctor = SingleMemberLookup (tb, ".ctor");
-
- def ctor_call =
- TExpr.Call (tb.GetMemType (), StaticRef (ctor), [Parm (expr)], false);
-
- def meth = SingleMemberLookup (tb, "InvokeDelegate") :> IMethod;
-
- (ctor_call, TExpr.MethodAddress (tb.GetMemType (), meth, false, []))
+ (expr, TExpr.MethodAddress (fnty, apply, true, []))
}
#endregion
Modified: nemerle/trunk/ncc/testsuite/positive/delegate.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/delegate.n (original)
+++ nemerle/trunk/ncc/testsuite/positive/delegate.n Wed Dec 6 13:08:57 2006
@@ -235,6 +235,7 @@
def str_arr = Convert (my_arr, fun (x) { (x + 1).ToString () });
print_arr (str_arr);
ForEach (str_arr, System.Console.Write : string -> void);
+ System.Console.WriteLine ();
}
}
@@ -242,6 +243,18 @@
public module M {
+// bug #718
+public Sort[T, Val] (this sourse : array [T], getComparableValue : T -> Val) : array [T]
+ where Val: System.IComparable[Val]
+{
+ def Cmp(x : T, y : T) : int
+ {
+ getComparableValue(x).CompareTo(getComparableValue(y))
+ }
+ System.Array.Sort.[T](sourse, System.Comparison.[T](Cmp));
+ sourse
+}
+
public delegate MyPrintDelegate (s : string) : void;
private delegate MySprintDelegate (s : string) : string;
delegate MyIntReturningDelegate () : int;
@@ -339,6 +352,8 @@
Tester.Mai ();
MyClass.Run ();
FunctionToDelegate.Run ();
+
+ System.Console.WriteLine ($[x | x in Sort ([3, 2, 7, 1, 18].ToArray (), x => -x)])
}
}
@@ -369,5 +384,6 @@
-33, -3, 1, 2, 2, 6, 7, 8, 9, 32, 43, 333,
-32, -2, 2, 3, 3, 7, 8, 9, 10, 33, 44, 334,
-32-2233789103344334
+[18, 7, 3, 2, 1]
END-OUTPUT
*/
More information about the svn
mailing list