forked from dlang/phobos
-
Notifications
You must be signed in to change notification settings - Fork 1
/
object.d
93 lines (75 loc) · 1.39 KB
/
object.d
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
// Implementation is in internal\object.d
module object;
extern (C)
{ int printf(char *, ...);
int wprintf(wchar *, ...);
}
alias bit bool;
version (AMD64)
{
alias ulong size_t;
alias long ptrdiff_t;
}
else
{
alias uint size_t;
alias int ptrdiff_t;
}
class Object
{
void print();
char[] toString();
uint toHash();
int opCmp(Object o);
int opEquals(Object o);
}
struct Interface
{
ClassInfo classinfo;
void *[] vtbl;
int offset; // offset to Interface 'this' from Object 'this'
}
class ClassInfo : Object
{
byte[] init; // class static initializer
char[] name; // class name
void *[] vtbl; // virtual function pointer table
Interface[] interfaces;
ClassInfo base;
void *destructor;
void (*classInvariant)(Object);
uint flags;
// 1: // IUnknown
void *deallocator;
}
class TypeInfo
{
uint getHash(void *p);
int equals(void *p1, void *p2);
int compare(void *p1, void *p2);
int tsize();
void swap(void *p1, void *p2);
}
class TypeInfoTypedef : TypeInfo
{
TypeInfo base;
}
class TypeInfoClass : TypeInfo
{
ClassInfo info;
}
// Recoverable errors
class Exception : Object
{
char[] msg;
this(char[] msg);
void print();
char[] toString();
}
// Non-recoverable errors
class Error : Exception
{
Error next;
this(char[] msg);
this(char[] msg, Error next);
}