[svn] r6168: nemerle/trunk/ncc: generation/ILEmitter.n testsuite/positive/generic-delegateconv.n

nazgul svnadmin at nemerle.org
Sat Apr 1 17:45:39 CEST 2006


Log:
Do not perform special mono hack for non-generic types nested in generic ones.

Author: nazgul
Date: Sat Apr  1 17:45:36 2006
New Revision: 6168

Added:
   nemerle/trunk/ncc/testsuite/positive/generic-delegateconv.n   (contents, props changed)
Modified:
   nemerle/trunk/ncc/generation/ILEmitter.n

Modified: nemerle/trunk/ncc/generation/ILEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/ILEmitter.n	(original)
+++ nemerle/trunk/ncc/generation/ILEmitter.n	Sat Apr  1 17:45:36 2006
@@ -69,6 +69,8 @@
     // mono #76484
     static workaround_mono_bug (type_ : Nemerle.Compiler.TypeBuilder) : void
     {
+      when (MS_NET_RuntimeType != null) Nemerle.Imperative.Return (); // skip if on MS.NET
+      
       def type_of_this = type_.GetMemType ().SystemType;
 
       def is_proper_method (_) {
@@ -77,7 +79,7 @@
         | _ => false
       }
 
-      when (type_.TyparmsCount > 0)
+      when (type_of_this.ContainsGenericParameters)
         match (type_.GetMembers ().Find (is_proper_method)) {
           | Some (m) =>
             //Message.Debug ($ "tot=$type_of_this m=$m");

Added: nemerle/trunk/ncc/testsuite/positive/generic-delegateconv.n
==============================================================================
--- (empty file)
+++ nemerle/trunk/ncc/testsuite/positive/generic-delegateconv.n	Sat Apr  1 17:45:36 2006
@@ -0,0 +1,46 @@
+using System;
+
+namespace Utils
+{ 
+  class COrderedHandler
+  {
+    public delegate TInvoke(_ : object, _ : EventArgs) : void;
+    
+    public Invoke(_xSource : object, _xArgs : EventArgs, _xNextHandler : TInvoke) : void
+    {
+    }
+  }
+  
+  class COverloadableEvent['Handler] where 'Handler : COrderedHandler
+  {
+    private mutable _lHandlers : list['Handler] = [];
+    
+    public Invoke() : void
+    {
+      def MakeFuncCall( lHandlers = _lHandlers ) : object * EventArgs -> void
+      {
+        | xHandler :: lTail => {
+          def f(a : object, b : EventArgs) 
+          { 
+            xHandler.Invoke( a, b, MakeFuncCall(lTail) );
+          }
+          f
+        }
+        | [] => null
+      }
+      _ = MakeFuncCall ();
+    }
+  }
+  
+  module Test
+  {
+    public Main() : void
+    {
+    }
+  }
+}
+
+/*
+BEGIN-OUTPUT
+END-OUTPUT
+*/
\ No newline at end of file



More information about the svn mailing list