' 実装中... '(※ まだ組み込んでいません) 'Namespace System Class TypeInfo Public Sub TypeInfo() End Sub '---------------------------------------------------------------- ' Public properties '---------------------------------------------------------------- Abstract Function BaseType() As TypeInfo Abstract Function FullName() As String Abstract Function IsArray() As Boolean Abstract Function IsByRef() As Boolean Abstract Function IsClass() As Boolean Abstract Function IsEnum() As Boolean Abstract Function IsInterface() As Boolean Abstract Function IsPointer() As Boolean Abstract Function IsValueType() As Boolean Abstract Function Name() As String Abstract Function Namespace() As String '---------------------------------------------------------------- ' Public methods '---------------------------------------------------------------- End Class ' 中間的な実装(継承専用) Class TypeBaseImpl Inherits TypeInfo name As String strNamespace As String baseType As TypeInfo 'interfaces As f(^^;;; Protected Sub TypeBaseImpl() name = "" strNamespace = "" baseType = Nothing End Sub Sub TypeBaseImpl( name As String, strNamespace As String ) This.name = name This.strNamespace = strNamespace This.baseType = Nothing End Sub Sub TypeBaseImpl( name As String, strNamespace As String, baseType As TypeInfo ) This.name = name This.strNamespace = strNamespace This.baseType = baseType End Sub /* Sub TypeBaseImpl( name As String, strNamespace As String, baseType As Type, interfaces As ... ) TypeBaseImpl( name, strNamespace, baseType ) End Sub */ Public '---------------------------------------------------------------- ' Public properties '---------------------------------------------------------------- Override Function BaseType() As TypeInfo Return baseType End Function Override Function FullName() As String Return strNamespace + "." + name End Function Override Function IsArray() As Boolean Return False End Function Override Function IsByRef() As Boolean Return False End Function Override Function IsClass() As Boolean Return False End Function Override Function IsEnum() As Boolean Return False End Function Override Function IsInterface() As Boolean Return False End Function Override Function IsPointer() As Boolean Return False End Function Override Function IsValueType() As Boolean Return False End Function Override Function Name() As String Return name End Function Override Function Namespace() As String Return strNamespace End Function '---------------------------------------------------------------- ' Public methods '---------------------------------------------------------------- End Class ' 値型を管理するためのクラス Class _System_TypeForValueType Inherits TypeBaseImpl Public Sub _System_TypeForValueType( name As String ) TypeInfo( name, "" ) End Sub Override Function IsValueType() As Boolean Return True End Function End Class ' クラスを管理するためのクラス Class _System_TypeForClass Inherits TypeBaseImpl Public Sub _System_TypeForClass( name As String, strNamespace As String, baseType As TypeInfo ) TypeBaseImpl( name, strNamespace, baseType ) End Sub Sub ~_System_TypeForClass() End Sub Override Function IsClass() As Boolean Return True End Function End Class ' インターフェイスを管理するためのクラス Class _System_TypeForInterface Inherits TypeBaseImpl Public End Class ' 列挙体を管理するためのクラス Class _System_TypeForEnum Inherits TypeBaseImpl Public End Class ' デリゲートを管理するためのクラス Class _System_TypeForDelegate Inherits TypeBaseImpl Public End Class '-------------------------------------------------------------------- ' プロセスに存在するすべての型を管理する(シングルトン クラス) '-------------------------------------------------------------------- Class _System_TypeBase pTypes As *TypeInfo count As Long Sub _System_TypeBase() pTypes = GC_malloc( 1 ) count = 0 End Sub Sub ~_System_TypeBase() End Sub Sub _add( typeInfo As TypeInfo ) pTypes = realloc( pTypes, ( count + 1 ) * SizeOf(*TypeInfo) ) pTypes[count] = typeInfo count++ End Sub ' シングルトン オブジェクト Static obj As _System_TypeBase Public Static Sub Add( typeInfo As TypeInfo ) obj._add( typeInfo ) End Sub Static Sub _NextPointerForGC() ' TODO: 実装 End Sub Static Sub InitializeValueType() ' 値型の追加 obj.Add( New _System_TypeForValueType( "Byte" ) ) obj.Add( New _System_TypeForValueType( "SByte" ) ) obj.Add( New _System_TypeForValueType( "Word" ) ) obj.Add( New _System_TypeForValueType( "Integer" ) ) obj.Add( New _System_TypeForValueType( "DWord" ) ) obj.Add( New _System_TypeForValueType( "Long" ) ) obj.Add( New _System_TypeForValueType( "QWord" ) ) obj.Add( New _System_TypeForValueType( "Int64" ) ) obj.Add( New _System_TypeForValueType( "Boolean" ) ) obj.Add( New _System_TypeForValueType( "Single" ) ) obj.Add( New _System_TypeForValueType( "Double" ) ) End Sub Static Sub InitializeUserTypes() ' このメソッドの実装はコンパイラが自動生成する End Sub Static Sub Initialize() ' 値型を初期化 InitializeValueType() ' Class / Interface / Enum / Delegate を初期化 InitializeUserTypes() End Sub End Class ' End Namespace ' System