summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Shaw <joeshaw@novell.com>2005-03-15 23:30:55 +0000
committerJoe Shaw <joeshaw@novell.com>2005-03-15 23:30:55 +0000
commitc84e45b40ff271d022061388d9355aa6ad00df40 (patch)
treea9851a11a81648c31daa1d2451d78def0f58600a
parent482dc5d22abead3c0f930f1eeb3ebf0ee1cb1d30 (diff)
downloaddbus-0.23-branch.tar.gz
2005-03-15 Joe Shaw <joeshaw@novell.com>dbus-0.23-branch
* mono/ProxyBuilder.cs (BuildFinalizer): Fix some invalid IL when generating the finalizer. Fixes from Ben Maurer.
-rw-r--r--ChangeLog5
-rw-r--r--mono/ProxyBuilder.cs10
2 files changed, 11 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 23c549af..03c53898 100644
--- 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-13 Joe Shaw <joeshaw@novell.com>
* mono/ProxyBuilder.cs (BuildConstructor): Decalre a local
diff --git a/mono/ProxyBuilder.cs b/mono/ProxyBuilder.cs
index 8d374ae0..7a3de959 100644
--- a/mono/ProxyBuilder.cs
+++ b/mono/ProxyBuilder.cs
@@ -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);