]> git.llucax.com Git - software/druntime.git/blob - src/compiler/dmd/mars.h
9990fffc7ada55317b65828c094f780ffc6cdfb8
[software/druntime.git] / src / compiler / dmd / mars.h
1
2 /*
3  * Placed into the Public Domain
4  * written by Walter Bright, Digital Mars
5  * www.digitalmars.com
6  */
7
8 /*
9  *  Modified by Sean Kelly <sean@f4.ca> for use with Tango.
10  */
11
12 #include <stddef.h>
13
14 #if __cplusplus
15 extern "C" {
16 #endif
17
18 struct ClassInfo;
19 struct Vtbl;
20
21 typedef struct Vtbl
22 {
23     size_t len;
24     void **vptr;
25 } Vtbl;
26
27 typedef struct Interface
28 {
29     struct ClassInfo *classinfo;
30     struct Vtbl vtbl;
31     int offset;
32 } Interface;
33
34 typedef struct Object
35 {
36     void **vptr;
37     void *monitor;
38 } Object;
39
40 typedef struct ClassInfo
41 {
42     Object object;
43
44     size_t initlen;
45     void *init;
46
47     size_t namelen;
48     char *name;
49
50     Vtbl vtbl;
51
52     size_t interfacelen;
53     Interface *interfaces;
54
55     struct ClassInfo *baseClass;
56
57     void *destructor;
58     void *invariant;
59
60     int flags;
61 } ClassInfo;
62
63 typedef struct Exception
64 {
65     Object object;
66
67     size_t msglen;
68     char*  msg;
69
70     size_t filelen;
71     char*  file;
72
73     size_t line;
74
75     struct Interface *info;
76     struct Exception *next;
77 } Exception;
78
79 typedef struct Array
80 {
81     size_t length;
82     void *ptr;
83 } Array;
84
85 typedef struct Delegate
86 {
87     void *thisptr;
88     void (*funcptr)();
89 } Delegate;
90
91 void _d_monitorenter(Object *h);
92 void _d_monitorexit(Object *h);
93
94 int _d_isbaseof(ClassInfo *b, ClassInfo *c);
95 Object *_d_dynamic_cast(Object *o, ClassInfo *ci);
96
97 Object * _d_newclass(ClassInfo *ci);
98 void _d_delclass(Object **p);
99
100 void _d_OutOfMemory();
101
102 #if __cplusplus
103 }
104 #endif