Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjfrijters <jfrijters>2015-05-31 15:10:51 +0300
committerjfrijters <jfrijters>2015-05-31 15:10:51 +0300
commit4769dd900a42ec3f38de5bb9b76ff07bc1d4d8de (patch)
tree16a08251c1edb9b246ad3008a82f533c8a07f7bd
parent4bcb33b1bbf4f99664eec3718b601d8f4b85916c (diff)
Added MethodWrapper.IsFinalizeOrClone property to centralize the logic to detect these two special cased methods.
-rw-r--r--runtime/MemberWrapper.cs10
-rw-r--r--runtime/compiler.cs2
-rw-r--r--runtime/openjdk/java.lang.invoke.cs6
3 files changed, 13 insertions, 5 deletions
diff --git a/runtime/MemberWrapper.cs b/runtime/MemberWrapper.cs
index 53c1d66a..27e4bdc8 100644
--- a/runtime/MemberWrapper.cs
+++ b/runtime/MemberWrapper.cs
@@ -861,6 +861,16 @@ namespace IKVM.Internal
&& !IsConstructor;
}
}
+
+ internal bool IsFinalizeOrClone
+ {
+ get
+ {
+ return IsProtected
+ && (DeclaringType == CoreClasses.java.lang.Object.Wrapper || DeclaringType == CoreClasses.java.lang.Throwable.Wrapper)
+ && (Name == StringConstants.CLONE || Name == StringConstants.FINALIZE);
+ }
+ }
}
// placeholder for <clinit> method that exist in ClassFile but not in TypeWrapper
diff --git a/runtime/compiler.cs b/runtime/compiler.cs
index 574f5ce0..69bf1f5c 100644
--- a/runtime/compiler.cs
+++ b/runtime/compiler.cs
@@ -1499,7 +1499,7 @@ sealed class Compiler
nonleaf = true;
// HACK this code is duplicated in java.lang.invoke.cs
- if(method.IsProtected && (method.DeclaringType == CoreClasses.java.lang.Object.Wrapper || method.DeclaringType == CoreClasses.java.lang.Throwable.Wrapper))
+ if(method.IsFinalizeOrClone)
{
// HACK we may need to redirect finalize or clone from java.lang.Object/Throwable
// to a more specific base type.
diff --git a/runtime/openjdk/java.lang.invoke.cs b/runtime/openjdk/java.lang.invoke.cs
index b659e441..e038a809 100644
--- a/runtime/openjdk/java.lang.invoke.cs
+++ b/runtime/openjdk/java.lang.invoke.cs
@@ -419,7 +419,7 @@ static class Java_java_lang_invoke_MethodHandleNatives
return MethodHandleUtil.DynamicMethodBuilder.CreateDynamicOnly(mw, type);
}
// HACK this code is duplicated in compiler.cs
- if (mw.IsProtected && (mw.DeclaringType == CoreClasses.java.lang.Object.Wrapper || mw.DeclaringType == CoreClasses.java.lang.Throwable.Wrapper))
+ if (mw.IsFinalizeOrClone)
{
TypeWrapper thisType = TypeWrapper.FromClass(caller);
// HACK we may need to redirect finalize or clone from java.lang.Object/Throwable
@@ -940,9 +940,7 @@ static partial class MethodHandleUtil
dm.LoadCallerID();
}
// special case for Object.clone() and Object.finalize()
- if (mw.IsProtected
- && (mw.DeclaringType == CoreClasses.java.lang.Object.Wrapper || mw.DeclaringType == CoreClasses.java.lang.Throwable.Wrapper)
- && (mw.Name == StringConstants.FINALIZE || mw.Name == StringConstants.CLONE))
+ if (mw.IsFinalizeOrClone)
{
if (doDispatch)
{