Ignore:
Timestamp:
Nov 15, 2007, 3:18:41 AM (17 years ago)
Author:
dai_9181
Message:

COM修飾子に対応。COMインターフェイスを呼び出せるようにした

Location:
trunk/abdev/BasicCompiler_Common/include
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/include/Class.h

    r369 r370  
    122122        Class,
    123123        Interface,
     124        ComInterface,
    124125        Enum,
    125126        Delegate,
     
    204205        , vtblNum( 0 )
    205206        , vtbl_offset( -1 )
     207        , comVtblOffset( 0 )
    206208        , isCompilingConstructor( false )
    207209        , isCompilingDestructor( false )
     
    221223        , vtblNum( 0 )
    222224        , vtbl_offset( -1 )
     225        , comVtblOffset( 0 )
    223226        , isCompilingConstructor( false )
    224227        , isCompilingDestructor( false )
     
    339342    bool IsClass() const;
    340343    bool IsInterface() const;
     344    bool IsComInterface() const;
    341345    bool IsEnum() const;
    342346    bool IsDelegate() const;
     
    516520private:
    517521    long vtbl_offset;
     522    long comVtblOffset;
    518523    long vtblMasterListOffset;
    519524    std::vector<long> vtblMasterList;
     
    521526    void GetVtblMasterListIndexAndVtblIndex( const UserProc *pUserProc, int &vtblMasterListIndex, int &vtblIndex ) const;
    522527    int GetVtblMasterListIndex( const CClass *pClass ) const;
     528    long GetComVtblOffset() const;
    523529    long GetVtblMasterListOffset() const;
    524530    void GenerateVTableMasterList( const std::vector<long> &vtableMasterList, long &offset );
  • trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h

    r364 r370  
    374374    void op_ret();
    375375    void op_addressof( int reg, const UserProc *pUserProc );
     376    void op_mov_RV_com_vtbl( int reg, const CClass *pClass );
    376377    void op_mov_RV_vtbl( int reg, const CClass *pClass );
    377378
     
    455456    void op_ret( short stackFrameSize );
    456457    void op_addressof( int reg, const UserProc *pUserProc );
     458    void op_mov_RV_com_vtbl( int reg, const CClass *pClass );
    457459    void op_mov_RV_vtbl( int reg, const CClass *pClass );
    458460#endif
  • trunk/abdev/BasicCompiler_Common/include/NativeCode.h

    r357 r370  
    2424        AddressOf,      // ユーザ定義関数位置スケジュール
    2525        DllProc,        // DLL関数位置スケジュール
     26        ComVtbl,        // com_vtblスケジュール
    2627        Vtbl,           // vtblスケジュール
    2728        TypeInfo,       // TypeInfoスケジュール
     
    5960            ar & boost::serialization::make_nvp("pDllProc", const_cast<::DllProc *&>(pDllProc));
    6061            break;
     62        case ComVtbl:
    6163        case Vtbl:
    6264        case TypeInfo:
     
    9193    {
    9294    }
    93     Schedule( const ::CClass *pClass, long offset )
    94         : type( Schedule::Vtbl )
    95         , offset( offset )
    96         , pClass( pClass )
    97     {
    98     }
    9995    Schedule( Type type, const ::CClass *pClass, long offset )
    10096        : type( type )
     
    10298        , offset( offset )
    10399    {
     100        if( !( type == Schedule::ComVtbl || type == Schedule::Vtbl || type == Schedule::TypeInfo ) )
     101        {
     102            DebugBreak();
     103        }
    104104    }
    105105    ~Schedule()
     
    137137    const ::CClass &GetClass() const
    138138    {
    139         if( !( type == Schedule::Vtbl || type == Schedule::TypeInfo ) )
     139        if( !( type == Schedule::ComVtbl || type == Schedule::Vtbl || type == Schedule::TypeInfo ) )
    140140        {
    141141            SetError();
     
    293293    void PutCatchAddressSchedule( const UserProc *pUserProc, long codePos );
    294294    void PutDllProcSchedule( const DllProc *pDllProc );
     295    void PutComVtblSchedule( const CClass *pClass );
    295296    void PutVtblSchedule( const CClass *pClass );
    296297
  • trunk/abdev/BasicCompiler_Common/include/Type.h

    r350 r370  
    190190    bool IsDelegate() const;
    191191    bool IsInterface() const;
     192    bool IsComInterface() const;
    192193
    193194    // オブジェクトや構造体など、メンバを持つ型かどうかを判別する
Note: See TracChangeset for help on using the changeset viewer.