Menu

#100 C++のAttribute対応

closed
nobody
None
5
2012-11-09
2007-06-09
Genta
No

ATLやC++/CLIにおいて,関数宣言・定義の前に
[属性, 属性]を付けた場合,[]内部を属性と認識して
内部の括弧を関数宣言と誤認しないようにした.

* [属性1(param), 属性2(param="")] のパターンに対応
* __interfaceキーワードをインターフェースとして認識する
* クラス定義の継承元クラスの中で()が使われていると
そこを関数と誤認する問題を修正.
:と{の間に()があっても関数とはみなさない.
ATLのサーバコードでは __uuid() がテンプレートに
与えられることがあるのでこの影響を受ける.

dev:4837

Discussion

  • Genta

    Genta - 2007-06-09

    差分ファイル

     
  • Genta

    Genta - 2007-11-28

    Logged In: YES
    user_id=86076
    Originator: YES

    忘れた頃に自己レビュー(^^)
    C++/CLI用に 新たな状態 M2_ATTRIBUTE を追加.
    M2_NORMALかつ関数レベル=0,括弧レベル0の場合に[があったら
    M2_ATTRIBUTEに遷移する.[]()はその状態でも数え,]でレベル=0になったら
    M2_NORMALに戻る.
    M2_ATTRIBUTEでは関数判定処理は行わない.

    __interface はclassと並列に処理を追加しただけなので問題なさそう.
    CDlgFuncList::SetTreeJava()にて「インターフェース」(8文字16bytes)
    追加に伴って,バッファ拡張済み
    pFuncName = new char[ strlen(pWork) + 1 + 18 ];

     
  • Genta

    Genta - 2007-12-01

    Logged In: YES
    user_id=86076
    Originator: YES

    補足: テスト内容と確認内容
    http://msdn2.microsoft.com/ja-jp/library/65t81w8a\(VS.80).aspx
    よりダウンロードしたファイル(複数)にて確認しました.

    クラスの前,関数の前に[]があるパターン

    // IDispCtl
    [
    object,
    uuid(0F4098BD-0318-4F89-A505-A954211198CE),
    dual,
    helpstring("IDispCtl Interface"),
    pointer_default(unique)
    ]
    __interface IDispCtl : public IDispatch
    {
    [id(1), helpstring("method Connect")] HRESULT Connect();
    [id(2), helpstring("method Disconnect")] HRESULT Disconnect();
    [id(3), helpstring("method Send")] HRESULT Send(VARIANT data);
    };

    __uuidof を含むクラス
    // CDispCtl
    [
    (略)
    ]
    class ATL_NO_VTABLE CDispCtl :
    public IDispCtl,
    public IPersistStreamInitImpl<cdispctl>,
    public IOleControlImpl<cdispctl>,
    public IOleObjectImpl<cdispctl>,
    public IOleInPlaceActiveObjectImpl<cdispctl>,
    public IViewObjectExImpl<cdispctl>,
    public IOleInPlaceObjectWindowlessImpl<cdispctl>,
    public IDataObjectImpl<cdispctl>,
    public IProvideClassInfo2Impl<&__uuidof(CDispCtl), NULL>,
    public CComControl<cdispctl>
    {</cdispctl></cdispctl></cdispctl></cdispctl></cdispctl></cdispctl></cdispctl></cdispctl>

     
  • Genta

    Genta - 2007-12-01

    Logged In: YES
    user_id=86076
    Originator: YES

    sakura/trunk#1196でcommitしました.

     

Log in to post a comment.