// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+#if !FULL_AOT_RUNTIME
using System;
using System.Globalization;
using System.Reflection;
using System.Text;
+using System.Runtime.InteropServices;
+
namespace System.Reflection.Emit
{
/*
* This class represents a method of an instantiation of a generic type builder.
*/
+ [StructLayout (LayoutKind.Sequential)]
internal class MethodOnTypeBuilderInst : MethodInfo
{
#region Keep in sync with object-internals.h
Type[] method_arguments;
#endregion
MethodInfo generic_method_definition;
- int is_compiler_context = -1;
public MethodOnTypeBuilderInst (MonoGenericClass instantiation, MethodInfo base_method)
{
return instantiation.GetGenericArguments ();
}
- internal bool IsCompilerContext {
- get {
- if (is_compiler_context == -1) {
- bool is_cc = false;
- is_cc |= instantiation.IsCompilerContext;
- if (!is_cc && method_arguments != null) {
- foreach (Type t in method_arguments)
- is_cc |= t.IsCompilerContext;
- }
- is_compiler_context = is_cc ? 1 : 0;
- }
- return is_compiler_context == 1;
- }
- }
-
//
// MemberInfo members
//
public override Type ReturnType {
get {
- if (!IsCompilerContext)
- return base_method.ReturnType;
- return MonoGenericClass.InflateType (base_method.ReturnType, GetTypeArgs (), method_arguments);
+ return base_method.ReturnType;
+ }
+ }
+
+ public override Module Module {
+ get {
+ return base_method.Module;
}
}
public override bool IsDefined (Type attributeType, bool inherit)
{
- if (!IsCompilerContext)
- throw new NotSupportedException ();
- return base_method.IsDefined (attributeType, inherit);
+ throw new NotSupportedException ();
}
public override object [] GetCustomAttributes (bool inherit)
{
- if (!IsCompilerContext)
- throw new NotSupportedException ();
- return base_method.GetCustomAttributes (inherit);
+ throw new NotSupportedException ();
}
public override object [] GetCustomAttributes (Type attributeType, bool inherit)
{
- if (!IsCompilerContext)
- throw new NotSupportedException ();
- return base_method.GetCustomAttributes (attributeType, inherit);
+ throw new NotSupportedException ();
}
public override string ToString ()
sb.Append (" ");
sb.Append (base_method.Name);
sb.Append ("(");
- if (IsCompilerContext) {
- ParameterInfo [] par = GetParameters ();
- for (int i = 0; i < par.Length; ++i) {
- if (i > 0)
- sb.Append (", ");
- sb.Append (par [i].ParameterType);
- }
- }
sb.Append (")");
return sb.ToString ();
}
public override ParameterInfo [] GetParameters ()
{
- ParameterInfo [] res = null;
- if (!IsCompilerContext)
- throw new NotSupportedException ();
+ return GetParametersInternal ();
+ }
- if (base_method is MethodBuilder) {
- MethodBuilder mb = (MethodBuilder)base_method;
- res = new ParameterInfo [mb.parameters.Length];
- for (int i = 0; i < mb.parameters.Length; i++) {
- Type type = MonoGenericClass.InflateType (mb.parameters [i], GetTypeArgs (), method_arguments);
- res [i] = new ParameterInfo (mb.pinfo == null ? null : mb.pinfo [i + 1], type, this, i + 1);
- }
- } else {
- ParameterInfo[] base_params = base_method.GetParameters ();
- res = new ParameterInfo [base_params.Length];
- for (int i = 0; i < base_params.Length; i++) {
- Type type = MonoGenericClass.InflateType (base_params [i].ParameterType, GetTypeArgs (), method_arguments);
- res [i] = new ParameterInfo (base_params [i], type, this, i + 1);
- }
- }
- return res;
+ internal override ParameterInfo [] GetParametersInternal ()
+ {
+ throw new NotSupportedException ();
}
public override int MetadataToken {
get {
- if (!IsCompilerContext)
- return base.MetadataToken;
- return base_method.MetadataToken;
+ return base.MetadataToken;
}
}
- internal override int GetParameterCount ()
+ internal override int GetParametersCount ()
{
- return base_method.GetParameterCount ();
+ return base_method.GetParametersCount ();
}
public override Object Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
public override MethodInfo MakeGenericMethod (params Type [] methodInstantiation)
{
- if (!base_method.IsGenericMethodDefinition || (method_arguments != null && !IsCompilerContext))
+ if (!base_method.IsGenericMethodDefinition || (method_arguments != null))
throw new InvalidOperationException ("Method is not a generic method definition");
if (methodInstantiation == null)
}
}
+#endif