1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
//
// System.Reflection.Emit/SignatureHelper.cs
//
// Author:
// Paolo Molaro (lupus@ximian.com)
//
// (C) 2001 Ximian, Inc. http://www.ximian.com
//
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Globalization;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace System.Reflection.Emit {
[Serializable]
public sealed class SignatureHelper {
internal enum SignatureHelperType {
HELPER_FIELD,
HELPER_LOCAL,
HELPER_METHOD,
HELPER_PROPERTY
}
private ModuleBuilder module;
private Type[] arguments;
private SignatureHelperType type;
internal SignatureHelper (ModuleBuilder module, SignatureHelperType type)
{
this.type = type;
this.module = module;
}
public static SignatureHelper GetFieldSigHelper (Module mod)
{
if (!(mod is ModuleBuilder))
throw new NotImplementedException ();
return new SignatureHelper ((ModuleBuilder) mod, SignatureHelperType.HELPER_FIELD);
}
public static SignatureHelper GetLocalVarSigHelper (Module mod)
{
if (!(mod is ModuleBuilder))
throw new NotImplementedException ();
return new SignatureHelper ((ModuleBuilder) mod, SignatureHelperType.HELPER_LOCAL);
}
[MonoTODO]
public static SignatureHelper GetMethodSigHelper( Module mod, CallingConventions callingConvention, Type returnType)
{
throw new NotImplementedException ();
}
[MonoTODO]
public static SignatureHelper GetMethodSigHelper( Module mod, Type returnType, Type[] parameterTypes)
{
throw new NotImplementedException ();
}
[MonoTODO]
public static SignatureHelper GetPropertySigHelper( Module mod, Type returnType, Type[] parameterTypes)
{
throw new NotImplementedException ();
}
public void AddArgument (Type clsArgument)
{
if (arguments != null) {
Type[] new_a = new Type [arguments.Length + 1];
System.Array.Copy (arguments, new_a, arguments.Length);
new_a [arguments.Length] = clsArgument;
arguments = new_a;
} else {
arguments = new Type [1];
arguments [0] = clsArgument;
}
}
[MonoTODO]
public void AddSentinel ()
{
throw new NotImplementedException ();
}
[MonoTODO]
public override bool Equals (object obj)
{
throw new NotImplementedException ();
}
[MonoTODO]
public override int GetHashCode ()
{
throw new NotImplementedException ();
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern byte[] get_signature_local ();
[MethodImplAttribute(MethodImplOptions.InternalCall)]
internal extern byte[] get_signature_field ();
public byte[] GetSignature ()
{
switch (type) {
case SignatureHelperType.HELPER_LOCAL:
return get_signature_local ();
case SignatureHelperType.HELPER_FIELD:
return get_signature_field ();
default:
throw new NotImplementedException ();
}
}
public override string ToString() {
return "SignatureHelper";
}
}
}
|