2010-03-27 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / metadata / verify.h
1 #ifndef __MONO_METADATA_VERIFY_H__
2 #define __MONO_METADATA_VERIFY_H__
3
4 #include <mono/metadata/metadata.h>
5 #include <mono/metadata/image.h>
6 #include <mono/metadata/loader.h>
7 #include <glib.h> /* GSList dep */
8
9 MONO_BEGIN_DECLS
10
11 typedef enum {
12         MONO_VERIFY_OK,
13         MONO_VERIFY_ERROR,
14         MONO_VERIFY_WARNING,
15         MONO_VERIFY_CLS = 4,
16         MONO_VERIFY_ALL = 7,
17
18         /* Status signaling code that is not verifiable.*/
19         MONO_VERIFY_NOT_VERIFIABLE = 8,
20
21         /*OR it with other flags*/
22         
23         /* Abort the verification if the code is not verifiable.
24          * The standard behavior is to abort if the code is not valid.
25          * */
26         MONO_VERIFY_FAIL_FAST = 16,
27
28
29         /* Perform less verification of the code. This flag should be used
30          * if one wants the verifier to be more compatible to the MS runtime.
31          * Mind that this is not to be more compatible with MS peverify, but
32          * with the runtime itself, that has a less strict verifier.
33          */
34         MONO_VERIFY_NON_STRICT = 32,
35
36         /*Skip all visibility related checks*/
37         MONO_VERIFY_SKIP_VISIBILITY = 64,
38
39         /*Skip all visibility related checks*/
40         MONO_VERIFY_REPORT_ALL_ERRORS = 128
41
42 } MonoVerifyStatus;
43
44 typedef struct {
45         char            *message;
46         MonoVerifyStatus status;
47 } MonoVerifyInfo;
48
49 typedef struct {
50         MonoVerifyInfo info;
51         int8_t exception_type; /*should be one of MONO_EXCEPTION_* */
52 } MonoVerifyInfoExtended;
53
54
55 GSList* mono_method_verify       (MonoMethod *method, int level);
56 void    mono_free_verify_list    (GSList *list);
57 char*   mono_verify_corlib       (void);
58
59 MONO_END_DECLS
60
61 #endif  /* __MONO_METADATA_VERIFY_H__ */
62