blob: 766febe2f4fe033ca3bbbfed3c9d5ae078ae1ea1 [file] [log] [blame]
Howard Hinnant152beb72012-01-09 17:10:00 +00001//===------------------------ private_typeinfo.h --------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef __PRIVATE_TYPEINFO_H_
11#define __PRIVATE_TYPEINFO_H_
12
13#include <typeinfo>
14
15namespace __cxxabiv1
16{
17
18class __fundamental_type_info
19 : public std::type_info
20{
21public:
22 virtual ~__fundamental_type_info();
23};
24
25class __array_type_info
26 : public std::type_info
27{
28public:
29 virtual ~__array_type_info();
30};
31
32class __function_type_info
33 : public std::type_info
34{
35public:
36 virtual ~__function_type_info();
37};
38
39class __enum_type_info
40 : public std::type_info
41{
42public:
43 virtual ~__enum_type_info();
44};
45
Howard Hinnant16650b52012-01-11 00:11:17 +000046// Has no base class
Howard Hinnant152beb72012-01-09 17:10:00 +000047class __class_type_info
48 : public std::type_info
49{
50public:
51 virtual ~__class_type_info();
Howard Hinnant16650b52012-01-11 00:11:17 +000052
53 virtual void display(const void* obj) const;
Howard Hinnant152beb72012-01-09 17:10:00 +000054};
55
Howard Hinnant16650b52012-01-11 00:11:17 +000056// Has one non-virtual public base class at offset zero
Howard Hinnant152beb72012-01-09 17:10:00 +000057class __si_class_type_info
58 : public __class_type_info
59{
60public:
61 const __class_type_info* __base_type;
62
63 virtual ~__si_class_type_info();
Howard Hinnant16650b52012-01-11 00:11:17 +000064
65 virtual void display(const void* obj) const;
Howard Hinnant152beb72012-01-09 17:10:00 +000066};
67
68struct __base_class_type_info
69{
70public:
71 const __class_type_info* __base_type;
72 long __offset_flags;
73
74 enum __offset_flags_masks
75 {
76 __virtual_mask = 0x1,
Howard Hinnant16650b52012-01-11 00:11:17 +000077 __public_mask = 0x2, // base is public
Howard Hinnant152beb72012-01-09 17:10:00 +000078 __offset_shift = 8
79 };
Howard Hinnant16650b52012-01-11 00:11:17 +000080
81 void display(const void* obj) const;
Howard Hinnant152beb72012-01-09 17:10:00 +000082};
83
Howard Hinnant16650b52012-01-11 00:11:17 +000084// Has one or more base classes
Howard Hinnant152beb72012-01-09 17:10:00 +000085class __vmi_class_type_info
86 : public __class_type_info
87{
88public:
89 unsigned int __flags;
90 unsigned int __base_count;
91 __base_class_type_info __base_info[1];
92
93 enum __flags_masks
94 {
Howard Hinnant16650b52012-01-11 00:11:17 +000095 __non_diamond_repeat_mask = 0x1, // has two or more distinct base class
96 // objects of the same type
97 __diamond_shaped_mask = 0x2 // has base class object with two or
98 // more derived objects
Howard Hinnant152beb72012-01-09 17:10:00 +000099 };
100
101 virtual ~__vmi_class_type_info();
Howard Hinnant16650b52012-01-11 00:11:17 +0000102
103 virtual void display(const void* obj) const;
Howard Hinnant152beb72012-01-09 17:10:00 +0000104};
105
106class __pbase_type_info
107 : public std::type_info
108{
109public:
110 unsigned int __flags;
111 const std::type_info* __pointee;
112
113 enum __masks
114 {
115 __const_mask = 0x1,
116 __volatile_mask = 0x2,
117 __restrict_mask = 0x4,
118 __incomplete_mask = 0x8,
119 __incomplete_class_mask = 0x10
120 };
121
122 virtual ~__pbase_type_info();
123};
124
125class __pointer_type_info
126 : public __pbase_type_info
127{
128public:
129 virtual ~__pointer_type_info();
130};
131
132class __pointer_to_member_type_info
133 : public __pbase_type_info
134{
135public:
136 const __class_type_info* __context;
137
138 virtual ~__pointer_to_member_type_info();
139};
140
141} // __cxxabiv1
142
143#endif // __PRIVATE_TYPEINFO_H_