Changeset 244 in dev for trunk/abdev


Ignore:
Timestamp:
Jul 27, 2007, 12:14:00 PM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/Compile_Object.cpp

    r235 r244  
    191191
    192192    //mov ecx,DestructorProcAddr
    193     OpBuffer[obp++]=(char)0xB9;
    194     pobj_SubAddrSchedule->add(&method->GetUserProc(),0);
    195     method->GetUserProc().Using();
    196     obp+=sizeof(long);
     193    compiler.codeGenerator.op_addressof( REG_ECX, &method->GetUserProc() );
    197194
    198195    //mov dword ptr[eax],ecx(デストラクタの関数ポインタ)
  • trunk/abdev/BasicCompiler32/MakePeHdr.cpp

    r241 r244  
    206206    compiler.GetMeta().GetDllProcs().Iterator_Init();
    207207
    208 
     208/*
    209209    if( !compiler.GetMeta().WriteXml( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
    210210    {
     
    216216        MessageBox(0,"XML読み込みに失敗","test",0);
    217217    }
    218 /*
     218
    219219    if( !compiler.GetMeta().WriteBinaly( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
    220220    {
     
    234234    {
    235235        MessageBox(0,"バイナリ読み込みに失敗","test",0);
    236     }*/
    237     compiler.GetMeta() = (*pTempMeta);
     236    }
     237    compiler.GetMeta() = (*pTempMeta);*/
    238238
    239239
  • trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp

    r240 r244  
    11831183
    11841184    pNativeCode->Put( (char)0xE8 );
    1185     pobj_SubAddrSchedule->add(pUserProc,1);
    1186     pNativeCode->Put( (long)0 );
     1185    pNativeCode->PutUserProcSchedule( pUserProc, true );
    11871186}
    11881187void CodeGenerator::op_ret(){
     
    11941193    pNativeCode->Put( stackFrameSize );
    11951194}
     1195void CodeGenerator::op_addressof( int reg, const UserProc *pUserProc )
     1196{
     1197    //mov reg,userProcAddress
     1198
     1199    //オペコード、レジスタ
     1200    pNativeCode->Put( (char)(0xB8|REGISTER_OPERAND(reg)) );
     1201
     1202    //DISP32
     1203    pNativeCode->PutUserProcSchedule( pUserProc, false );
     1204}
  • trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h

    r243 r244  
    300300    void op_ret();
    301301    void op_ret( short stackFrameSize );
     302    void op_addressof( int reg, const UserProc *pUserProc );
    302303#endif
    303304
  • trunk/abdev/BasicCompiler_Common/include/NativeCode.h

    r241 r244  
    99void AddLocalVarAddrSchedule();
    1010void ObpPlus( int step = 1 );
     11
     12class UserProc;
    1113
    1214class Schedule
     
    2022        DataTable,      // データテーブル スケジュール
    2123        Relocation,     // リロケーション情報スケジュール
     24        UserProc,       // ユーザ定義関数呼び出し側スケジュール
     25        AddressOf,      // ユーザ定義関数位置スケジュール
    2226    };
    2327
    2428private:
    2529    Type type;
    26     int offset;
     30    long offset;
     31
     32    union{
     33        LONG_PTR lpValue;
     34        const ::UserProc *pUserProc;
     35    };
    2736
    2837    // XMLシリアライズ用
     
    3948    {
    4049    }
    41     Schedule( Type type, int offset )
     50    Schedule( Type type, long offset )
    4251        : type( type )
    4352        , offset( offset )
     53        , lpValue( 0 )
     54    {
     55    }
     56    Schedule( const ::UserProc *pUserProc, long offest )
     57        : type( Schedule::UserProc )
     58        , offset( offset )
     59        , pUserProc( pUserProc )
    4460    {
    4561    }
    4662    ~Schedule()
    4763    {
     64    }
     65
     66    void SpecifyAddressOf()
     67    {
     68        if( type != Schedule::UserProc )
     69        {
     70            SetError();
     71        }
     72        type = Schedule::AddressOf;
    4873    }
    4974};
     
    191216        {
    192217        case Schedule::None:
     218            // 何もしない
    193219            break;
    194220        case Schedule::GlobalVar:
     
    204230            break;
    205231        case Schedule::Relocation:
     232            // 未完成
    206233            break;
    207234        default:
     
    214241        ObpPlus( sizeof(long) );
    215242    }
     243    void PutUserProcSchedule( const UserProc *pUserProc, bool isCall )
     244    {
     245        Schedule schedule( pUserProc, size );
     246        if( isCall == false )
     247        {
     248            schedule.SpecifyAddressOf();
     249        }
     250        schedules.push_back( schedule );
     251
     252        *((long *)(codeBuffer+size))=0;
     253        size += sizeof(long);
     254
     255
     256
     257        // 未完成
     258        if( isCall )
     259        {
     260            pobj_SubAddrSchedule->add(pUserProc,1);
     261        }
     262        else
     263        {
     264            pobj_SubAddrSchedule->add(pUserProc,0);
     265        }
     266        extern char *OpBuffer;
     267        extern int obp;
     268        *((long *)(OpBuffer+obp))=0;
     269        ObpPlus( sizeof(long) );
     270    }
    216271    void Put( short s )
    217272    {
Note: See TracChangeset for help on using the changeset viewer.