We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
proxy-super is broken (calling the base method from the proxy code calls the proxy method for virtual methods).
proxy-super
Cause: replacement of gen.Emit(OpCodes.Call... with ILGen.EmitCall, which emits callvirt if the method is a virtual one.
gen.Emit(OpCodes.Call...
ILGen.EmitCall
callvirt
Proposed fix: diff --git a/Clojure/Clojure/CljCompiler/GenProxy.cs b/Clojure/Clojure/CljCompiler/GenProxy.cs index fab6352..7f4b0d8 100644 --- a/Clojure/Clojure/CljCompiler/GenProxy.cs +++ b/Clojure/Clojure/CljCompiler/GenProxy.cs @@ -320,7 +320,7 @@ namespace clojure.lang gen.EmitLoadArg(0); // gen.Emit(OpCodes.Ldarg_0); for (int i = 0; i < parmCount; i++) gen.EmitLoadArg(i + 1); // gen.Emit(OpCodes.Ldarg, i + 1); - gen.EmitCall(m); // gen.Emit(OpCodes.Call, m); + gen.Emit(OpCodes.Call, m); } else {
(line 323 in GenProxy.cs)
Maybe there are other related issues - using ILGen.EmitCall isn't the same as Emit(OpCodes.Call...).
Emit(OpCodes.Call...)
The text was updated successfully, but these errors were encountered:
No branches or pull requests
proxy-super
is broken (calling the base method from the proxy code calls the proxy method for virtual methods).Cause: replacement of
gen.Emit(OpCodes.Call...
withILGen.EmitCall
, which emitscallvirt
if the method is a virtual one.Proposed fix:
diff --git a/Clojure/Clojure/CljCompiler/GenProxy.cs b/Clojure/Clojure/CljCompiler/GenProxy.cs
index fab6352..7f4b0d8 100644
--- a/Clojure/Clojure/CljCompiler/GenProxy.cs
+++ b/Clojure/Clojure/CljCompiler/GenProxy.cs
@@ -320,7 +320,7 @@ namespace clojure.lang
gen.EmitLoadArg(0); // gen.Emit(OpCodes.Ldarg_0);
for (int i = 0; i < parmCount; i++)
gen.EmitLoadArg(i + 1); // gen.Emit(OpCodes.Ldarg, i + 1);
- gen.EmitCall(m); // gen.Emit(OpCodes.Call, m);
+ gen.Emit(OpCodes.Call, m);
}
else
{
(line 323 in GenProxy.cs)
Maybe there are other related issues - using
ILGen.EmitCall
isn't the same asEmit(OpCodes.Call...)
.The text was updated successfully, but these errors were encountered: