! [[Phi::TypeData]]

実行時型情報(RTTI、Run Time Type Information)をラップしたクラス。

実行時型情報というのは Delphi のクラスに関する内部情報。

Apolloではこの実行時型情報を使ってプロパティの自動作成を行っている。

Ruby レベルで公開されているのは、列挙型に関する情報が [[Phi::TYPE_INFO]] に置かれているだけ、か?

$(Apollo)/sample/console/typeinfo.rb にあるように、published property の情報は一通りとれます。
これを使えば Delphi IDE のようなオブジェクトインスペクタも作れるはず。
--moriq

!! properties

!!! count : Fixnum
!!! items : Array of [[Phi::TypeInfo]]
!!! ord_type : Fixnum (OrdType)
!!! min_value : Fixnum or Bignum
!!! max_value : Fixnum or Bignum
!!! base_type : [[Phi::TypeInfo]]
!!! comp_type : [[Phi::TypeInfo]]
!!! float_type : Fixnum (FloatType)
!!! max_length : String
!!! class_type : [[Phi::TypeInfo]]
!!! parent_info : [[Phi::TypeInfo]]
!!! unit_name : String
!!! method_kind : Fixnum (MethodKind)



----

 require "phi"
 ti = Phi::TYPE_INFO["TAlign"]
 p ti.type_data #=> #<Phi::TypeData:0xfab738>

 require "phi"
 p ti = Phi::TYPE_INFO["TAlign"] #=> #<Phi::TypeInfo: kind=TK_ENUMERATION name="TAlign">
 p td = ti.type_data   #=> #<Phi::TypeData:0xfab738>
 
 p td.base_type   #=> #<Phi::TypeInfo: kind=TK_ENUMERATION name="TAlign">
 p td.class_type  #=> nil
 p td.comp_type   #=> nil
 p td.count       #=> nil
 p td.float_type  #=> nil
 p td.items       #=> nil
 p td.method_kind #=> nil
 p td.max_value   #=> 6
 p td.min_value   #=> 0
 p td.ord_type    #=> 1
 p td.parent_info #=> nil
 p td.unit_name   #=> nil

----

 require "phi"
 require "methods_for_wiki"
 puts Phi::TypeData.methods_for_wiki

!!! base_type
!!! class_type
!!! comp_type
!!! count
!!! float_type
!!! items
!!! max_length
!!! max_value
!!! method_kind
!!! min_value
!!! ord_type
!!! parent_info
!!! unit_name