source: Include/Classes/ActiveBasic/Core/TypeInfo.ab@ 275

Last change on this file since 275 was 275, checked in by dai, 17 years ago

(32ビットコンパイラ)
クラス情報取得時のクラス先読み処理で名前空間の関係が崩れてしまうバグを修正。
インクルードパスに'/'文字を含めたときに'
'として判断するようにした。

(ライブラリ)
ActiveBasic.Core名前空間を作成した(動的型情報に関する内部コードをここに移動)。
DateTimeクラスをSystem名前空間に入れた。
TimeSpanクラスをSystem名前空間に入れた。
TimeInfoクラスをSystem名前空間に入れた。

File size: 5.7 KB
Line 
1Namespace ActiveBasic
2Namespace Core
3
4
5' 中間的な実装(継承専用)
6Class TypeBaseImpl
7 Inherits System.TypeInfo
8
9 strNamespace As String
10 name As String
11
12Protected
13
14 baseType As System.TypeInfo
15 'interfaces As f(^^;;;
16
17 Sub TypeBaseImpl()
18 strNamespace = ""
19 name = ""
20 baseType = Nothing
21 End Sub
22
23 Sub TypeBaseImpl( strNamespace As String, name As String )
24 This.strNamespace = strNamespace
25 This.name = name
26 This.baseType = Nothing
27 End Sub
28
29 Sub TypeBaseImpl( strNamespace As String, name As String, baseType As System.TypeInfo )
30 This.strNamespace = strNamespace
31 This.name = name
32 This.baseType = baseType
33 End Sub
34
35 /*
36 Sub TypeBaseImpl( strNamespace As String, name As String, baseType As Type, interfaces As ... )
37 This.strNamespace = strNamespace
38 This.name = name
39 This.baseType = baseType
40 This.interfaces = interfaces
41 End Sub
42 */
43
44 Sub ~TypeBaseImpl()
45 End Sub
46
47Public
48
49
50 '----------------------------------------------------------------
51 ' Public properties
52 '----------------------------------------------------------------
53
54 Override Function BaseType() As System.TypeInfo
55 Return baseType
56 End Function
57
58 Sub SetBaseType( baseType As System.TypeInfo )
59 This.baseType = baseType
60 End Sub
61
62 Override Function FullName() As String
63 If strNamespace.Length > 0 Then
64 Return strNamespace + "." + name
65 End If
66 Return name
67 End Function
68
69 Override Function IsArray() As Boolean
70 Return False
71 End Function
72
73 Override Function IsByRef() As Boolean
74 Return False
75 End Function
76
77 Override Function IsClass() As Boolean
78 Return False
79 End Function
80
81 Override Function IsEnum() As Boolean
82 Return False
83 End Function
84
85 Override Function IsInterface() As Boolean
86 Return False
87 End Function
88
89 Override Function IsPointer() As Boolean
90 Return False
91 End Function
92
93 Override Function IsValueType() As Boolean
94 Return False
95 End Function
96
97 Override Function Name() As String
98 Return name
99 End Function
100
101 Override Function Namespace() As String
102 Return strNamespace
103 End Function
104
105
106
107 '----------------------------------------------------------------
108 ' Public methods
109 '----------------------------------------------------------------
110
111End Class
112
113
114' 値型を管理するためのクラス
115Class _System_TypeForValueType
116 Inherits TypeBaseImpl
117Public
118 Sub _System_TypeForValueType( name As String )
119 TypeBaseImpl( "", name )
120 End Sub
121
122 Override Function IsValueType() As Boolean
123 Return True
124 End Function
125End Class
126
127' クラスを管理するためのクラス
128Class _System_TypeForClass
129 Inherits TypeBaseImpl
130
131Public
132 referenceOffsets As *Long
133 numOfReference As Long
134
135 Sub _System_TypeForClass( strNamespace As String, name As String, referenceOffsets As *Long, numOfReference As Long )
136 TypeBaseImpl( strNamespace, name )
137
138 This.referenceOffsets = referenceOffsets
139 This.numOfReference = numOfReference
140 End Sub
141 Sub _System_TypeForClass( strNamespace As String, name As String )
142 TypeBaseImpl( strNamespace, name )
143 End Sub
144 Sub ~_System_TypeForClass()
145 End Sub
146
147 Override Function IsClass() As Boolean
148 Return True
149 End Function
150End Class
151
152' インターフェイスを管理するためのクラス
153Class _System_TypeForInterface
154 Inherits TypeBaseImpl
155Public
156End Class
157
158' 列挙体を管理するためのクラス
159Class _System_TypeForEnum
160 Inherits TypeBaseImpl
161Public
162End Class
163
164' デリゲートを管理するためのクラス
165Class _System_TypeForDelegate
166 Inherits TypeBaseImpl
167Public
168End Class
169
170
171'--------------------------------------------------------------------
172' プロセスに存在するすべての型を管理する
173'--------------------------------------------------------------------
174Class _System_TypeBase
175 Static pTypes As *TypeBaseImpl
176 Static count As Long
177 Static isReady = False
178
179 Static Sub Add( typeInfo As TypeBaseImpl )
180 pTypes = realloc( pTypes, ( count + 1 ) * SizeOf(*System.TypeInfo) )
181 pTypes[count] = typeInfo
182 count++
183 End Sub
184
185 Static Sub InitializeValueType()
186 ' 値型の追加
187 Add( New _System_TypeForValueType( "Byte" ) )
188 Add( New _System_TypeForValueType( "SByte" ) )
189 Add( New _System_TypeForValueType( "Word" ) )
190 Add( New _System_TypeForValueType( "Integer" ) )
191 Add( New _System_TypeForValueType( "DWord" ) )
192 Add( New _System_TypeForValueType( "Long" ) )
193 Add( New _System_TypeForValueType( "QWord" ) )
194 Add( New _System_TypeForValueType( "Int64" ) )
195 Add( New _System_TypeForValueType( "Boolean" ) )
196 Add( New _System_TypeForValueType( "Single" ) )
197 Add( New _System_TypeForValueType( "Double" ) )
198 End Sub
199
200 Static Sub InitializeUserTypes()
201 ' このメソッドの実装はコンパイラが自動生成する
202
203 '例:
204 'Add( New _System_TypeForClass( "System", "String", [__offsets...], __numOfOffsets ) )
205 'Search( "System","String" ).SetBaseType( Search( "System","Object" ) )
206 End Sub
207
208Public
209
210 Static Sub Initialize()
211 pTypes = GC_malloc( 1 )
212 count = 0
213
214 ' 値型を初期化
215 InitializeValueType()
216
217 isReady = True
218 ' Class / Interface / Enum / Delegate を初期化
219 InitializeUserTypes()
220
221 selfTypeInfo = _System_TypeBase.Search( "System", "TypeInfo" ) As System.TypeInfo
222
223 _System_DebugOnly_OutputDebugString( Ex"ready dynamic meta datas!\r\n" )
224 End Sub
225
226 Static Sub _NextPointerForGC()
227 ' TODO: 実装
228 End Sub
229
230 Static Function Search( strNamespace As LPSTR, typeName As LPSTR ) As TypeBaseImpl
231 ' TODO: 名前空間に対応する
232 Dim i As Long
233 For i = 0 To ELM( count )
234 If pTypes[i].Name = typeName Then
235 Return pTypes[i]
236 End If
237 Next
238
239 Return Nothing
240 End Function
241
242 Static Function IsReady() As Boolean
243 Return isReady
244 End Function
245
246 Static selfTypeInfo = Nothing As System.TypeInfo
247
248End Class
249
250
251End Namespace
252End Namespace
Note: See TracBrowser for help on using the repository browser.