2005-03-15 Joe Shaw <joeshaw@novell.com>
authorJoe Shaw <joeshaw@novell.com>
Tue, 15 Mar 2005 23:30:55 +0000 (23:30 +0000)
committerJoe Shaw <joeshaw@novell.com>
Tue, 15 Mar 2005 23:30:55 +0000 (23:30 +0000)
* mono/ProxyBuilder.cs (BuildFinalizer): Fix some invalid IL when
generating the finalizer.  Fixes from Ben Maurer.

ChangeLog
mono/ProxyBuilder.cs

index 5e4145d..44dcae0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-03-15  Joe Shaw  <joeshaw@novell.com>
+
+       * mono/ProxyBuilder.cs (BuildFinalizer): Fix some invalid IL when
+       generating the finalizer.  Fixes from Ben Maurer.
+
 2005-03-12  Joe Shaw  <joeshaw@novell.com>
 
        * mono/BusDriver.cs: Update method names: ListServices
index 8d374ae..7a3de95 100644 (file)
@@ -468,7 +468,7 @@ namespace DBus
       generator.Emit(OpCodes.Ret);
     }
     
-    public void BuildFinalizer (TypeBuilder tb, FieldInfo fi)
+    public void BuildFinalizer (TypeBuilder tb, FieldInfo serviceF, FieldInfo deleF)
     {
        // Note that this is a *HORRIBLE* example of how to build a finalizer
        // It doesn't use the try/finally to chain to Object::Finalize. However,
@@ -485,8 +485,10 @@ namespace DBus
 
        //generator.EmitWriteLine("this.service.SignalCalled -= this.delegate_created");
        generator.Emit (OpCodes.Ldarg_0);
-       generator.Emit (OpCodes.Ldfld, fi);
-       generator.Emit (OpCodes.Call, Service_RemoveSignalCalledMI);
+       generator.Emit (OpCodes.Ldfld, serviceF);
+       generator.Emit (OpCodes.Ldarg_0);
+       generator.Emit (OpCodes.Ldfld, deleF);
+       generator.EmitCall (OpCodes.Callvirt, Service_RemoveSignalCalledMI, null);
        generator.Emit (OpCodes.Ret);
     }
     
@@ -556,7 +558,7 @@ namespace DBus
        FieldBuilder deleF = typeB.DefineField("delegate_created", 
                                               typeof(Service.SignalCalledHandler), 
                                               FieldAttributes.Private);
-       BuildFinalizer (typeB, deleF);
+       BuildFinalizer (typeB, serviceF, deleF);
        
        MethodInfo signalCalledMI = BuildSignalCalled(ref typeB, serviceF, pathF);
        BuildConstructor(ref typeB, serviceF, pathF, signalCalledMI, deleF);