8e7eb892256ee19d95eb2784edb1b71146ba4fc1
[mono.git] / mono / metadata / object.h
1 #ifndef _MONO_CLI_OBJECT_H_
2 #define _MONO_CLI_OBJECT_H_
3
4 #include <mono/metadata/class.h>
5 #include <mono/metadata/threads-types.h>
6
7 typedef struct {
8         MonoClass *klass;
9         MonoThreadsSync *synchronisation;
10 } MonoObject;
11
12 typedef struct {
13         guint32 length;
14         guint32 lower_bound;
15 } MonoArrayBounds;
16
17 typedef struct {
18         MonoObject obj;
19         MonoArrayBounds *bounds;
20         /* we use double to ensure proper alignment on platforms that need it */
21         double vector [MONO_ZERO_LEN_ARRAY];
22 } MonoArray;
23
24 typedef struct {
25         MonoObject obj;
26         MonoArray *c_str;
27         gint32 length;
28 } MonoString;
29
30 typedef struct {
31         MonoObject object;
32         MonoObject *inner_ex;
33         MonoString *message;
34         MonoString *help_link;
35         MonoString *class_name;
36         MonoString *stack_trace;
37         gint32      hresult;
38         MonoString *source;
39 } MonoException;
40
41 typedef struct {
42         MonoObject object;
43         MonoObject *target_type;
44         MonoObject *target;
45         MonoString *method;
46         gpointer    method_ptr;
47 } MonoDelegate;
48
49 typedef guchar MonoBoolean;
50
51 typedef void  (*MonoRuntimeObjectInit) (MonoObject *o);
52
53 extern MonoRuntimeObjectInit mono_runtime_object_init;
54
55 #define mono_array_length(array) ((array)->bounds->length)
56 #define mono_array_addr(array,type,index) ( ((char*)(array)->vector) + sizeof (type) * (index) )
57 #define mono_array_addr_with_size(array,size,index) ( ((char*)(array)->vector) + (size) * (index) )
58 #define mono_array_get(array,type,index) ( *(type*)mono_array_addr ((array), type, (index)) ) 
59 #define mono_array_set(array,type,index,value)  \
60         do {    \
61                 type *__p = (type *) mono_array_addr ((array), type, (index));  \
62                 *__p = (value); \
63         } while (0)
64
65 #define mono_string_chars(s) ((gushort*)(s)->c_str->vector)
66
67 void *
68 mono_object_allocate        (size_t size);
69
70 MonoObject *
71 mono_object_new             (MonoClass *klass);
72
73 MonoObject *
74 mono_object_new_from_token  (MonoImage *image, guint32 token);
75
76 MonoArray*
77 mono_array_new              (MonoClass *eclass, guint32 n);
78
79 MonoArray*
80 mono_array_new_full         (MonoClass *array_class, guint32 *lengths, guint32 *lower_bounds);
81
82 MonoString*
83 mono_string_new_utf16       (const guint16 *text, gint32 len);
84
85 MonoString*
86 mono_ldstr                  (MonoImage *image, guint32 index);
87
88 MonoString*
89 mono_string_is_interned     (MonoString *str);
90
91 MonoString*
92 mono_string_intern          (MonoString *str);
93
94 MonoString*
95 mono_string_new             (const char *text);
96
97 char *
98 mono_string_to_utf8         (MonoString *string_obj);
99
100 char *
101 mono_string_to_utf16        (MonoString *string_obj);
102
103 void       
104 mono_object_free            (MonoObject *o);
105
106 MonoObject *
107 mono_value_box              (MonoClass *klass, gpointer val);
108                       
109 MonoObject *
110 mono_object_clone           (MonoObject *obj);
111
112 MonoObject *
113 mono_object_isinst          (MonoObject *obj, MonoClass *klass);
114
115 typedef void (*MonoExceptionFunc) (MonoException *ex);
116
117 void
118 mono_install_handler        (MonoExceptionFunc func);
119
120 void
121 mono_raise_exception        (MonoException *ex);
122
123 void
124 mono_install_runtime_object_init (MonoRuntimeObjectInit func);
125
126 MonoObject*
127 get_exception_divide_by_zero      (void);
128
129 MonoObject*
130 get_exception_security            (void);
131
132 MonoObject*
133 get_exception_arithmetic          (void);
134
135 MonoObject*
136 get_exception_overflow            (void);
137
138 MonoObject*
139 get_exception_null_reference      (void);
140
141 MonoObject*
142 get_exception_execution_engine    (void);
143
144 MonoObject*
145 get_exception_invalid_cast        (void);
146
147 MonoObject*
148 get_exception_index_out_of_range  (void);
149
150 MonoObject*
151 get_exception_array_type_mismatch (void);
152
153 MonoObject*
154 get_exception_missing_method      (void);
155
156 #endif
157