Ignore:
Timestamp:
Aug 14, 2007, 11:57:32 PM (17 years ago)
Author:
dai_9181
Message:

vtbl構築をコード生成後(最終リンクの前)に行うようにした

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

Legend:

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

    r272 r282  
    360360    int GetFuncNumInVtbl( const UserProc *pUserProc ) const;
    361361    LONG_PTR GetVtblGlobalOffset(void) const;
     362    void GenerateVTables();
    362363    void ActionVtblSchedule(LONG_PTR ImageBase, LONG_PTR MemPos_CodeSection);
    363364    bool IsAbstract() const;
     
    387388    virtual void CollectClassesForNameOnly( const BasicSource &source );
    388389
     390    void GenerateVTables();
    389391    void ActionVtblSchedule(LONG_PTR ImageBase, LONG_PTR MemPos_CodeSection);
    390392
  • trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h

    r276 r282  
    448448    void op_ret( short stackFrameSize );
    449449    void op_addressof( int reg, const UserProc *pUserProc );
     450    void op_mov_RV_vtbl( int reg, const CClass *pClass );
    450451#endif
    451452
  • trunk/abdev/BasicCompiler_Common/include/Linker.h

    r273 r282  
    3434    void ResolveGlobalVarSchedules( long rwSectionBaseOffset );
    3535
     36    // vtblスケジュール
     37    void ResolveVtblSchedule( long dataSectionBaseOffset );
     38
    3639    // リンク
    3740    void Link( ObjectModule &masterObjectModule );
  • trunk/abdev/BasicCompiler_Common/include/NativeCode.h

    r280 r282  
    2121        AddressOf,      // ユーザ定義関数位置スケジュール
    2222        DllProc,        // DLL関数位置スケジュール
     23        Vtbl,           // vtblスケジュール
    2324    };
    2425
     
    3132        const ::UserProc *pUserProc;
    3233        const ::DllProc *pDllProc;
     34        const ::CClass *pClass;
    3335    };
    3436
     
    5254            ar & boost::serialization::make_nvp("pDllProc", const_cast<::DllProc *&>(pDllProc));
    5355            break;
     56        case Vtbl:
     57            ar & boost::serialization::make_nvp("pClass", const_cast<::CClass *&>(pClass));
     58            break;
    5459        default:
    5560            ar & BOOST_SERIALIZATION_NVP( lpValue );
     
    8085    {
    8186    }
     87    Schedule( const ::CClass *pClass, long offset )
     88        : type( Schedule::Vtbl )
     89        , offset( offset )
     90        , pClass( pClass )
     91    {
     92    }
    8293    ~Schedule()
    8394    {
     
    111122        }
    112123        return *pUserProc;
     124    }
     125    const ::CClass &GetClass() const
     126    {
     127        if( type != Schedule::Vtbl )
     128        {
     129            SetError();
     130        }
     131        return *pClass;
    113132    }
    114133
     
    360379    void PutUserProcSchedule( const UserProc *pUserProc, bool isCall );
    361380    void PutDllProcSchedule( const DllProc *pDllProc );
     381    void PutVtblSchedule( const CClass *pClass );
    362382    void Put( short s )
    363383    {
  • trunk/abdev/BasicCompiler_Common/include/Source.h

    r281 r282  
    176176        bool isEqualBasbuf = false;
    177177        extern char *basbuf;
    178         if( basbuf == buffer )
     178        if( basbuf == buffer + 2 )
    179179        {
    180180            isEqualBasbuf = true;
Note: See TracChangeset for help on using the changeset viewer.