Changeset 265 in dev for trunk/abdev/BasicCompiler_Common


Ignore:
Timestamp:
Aug 6, 2007, 11:44:42 PM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev/BasicCompiler_Common
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/Debug.cpp

    r263 r265  
    229229}
    230230UserProc *GetSubFromObp(ULONG_PTR pos){
    231     compiler.objectModule.meta.GetUserProcs().Iterator_Reset();
    232     while( compiler.objectModule.meta.GetUserProcs().Iterator_HasNext() )
     231    compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
     232    while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    233233    {
    234         UserProc *pUserProc = compiler.objectModule.meta.GetUserProcs().Iterator_GetNext();
    235 
    236         if(rva_to_real(pUserProc->_beginOpAddressOld) <= pos  &&
    237             pos < rva_to_real(pUserProc->_endOpAddressOld))
     234        UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
     235
     236        if(rva_to_real(pUserProc->GetBeginOpAddress()) <= pos  &&
     237            pos < rva_to_real(pUserProc->GetEndOpAddress()))
    238238        {
    239239            return pUserProc;
     
    693693                        extern const UserProc *pSub_DebugSys_EndProc;
    694694                        if((BYTE)temporary[0]==0xE8&&
    695                             *((long *)(temporary+1))+5==(long)rva_to_real(pSub_DebugSys_EndProc->_beginOpAddressOld)-(long)EIP_RIP(Context)){
     695                            *((long *)(temporary+1))+5==(long)rva_to_real(pSub_DebugSys_EndProc->GetBeginOpAddress())-(long)EIP_RIP(Context)){
    696696                            //プロシージャの終端位置の場合はステップインを行う
    697697                            goto StepIn;
     
    714714                            //シングルステップON
    715715                            WriteProcessMemory(hDebugProcess,
    716                                 (void *)rva_to_real(pUserProc->_beginOpAddressOld),
    717                                 pobj_DBDebugSection->pobj_now->SingleStepCodeBuffer+pUserProc->_beginOpAddressOld,
    718                                 pUserProc->_endOpAddressOld-pUserProc->_beginOpAddressOld,
     716                                (void *)rva_to_real(pUserProc->GetBeginOpAddress()),
     717                                pobj_DBDebugSection->pobj_now->SingleStepCodeBuffer+pUserProc->GetBeginOpAddress(),
     718                                pUserProc->GetEndOpAddress()-pUserProc->GetBeginOpAddress(),
    719719                                &lpAccBytes);
    720720                        }
  • trunk/abdev/BasicCompiler_Common/DebugMiddleFile.cpp

    r264 r265  
    3737        (*p)+=lstrlen(buffer+(*p))+1;
    3838
    39         type.SetClassPtr( compiler.objectModule.meta.GetClasses().Find(szClassName) );
     39        type.SetClassPtr( compiler.GetObjectModule().meta.GetClasses().Find(szClassName) );
    4040    }
    4141    else{
     
    4848
    4949CDebugSection::~CDebugSection(){
    50     if(pobj_DBClass) DeleteDebugInfo();
     50    if(dwImageBase) DeleteDebugInfo();
    5151    if(buffer){
    5252        HeapDefaultFree(buffer);
     
    5555}
    5656void CDebugSection::make(void){
    57     extern INCLUDEFILEINFO IncludeFileInfo;
    5857    int i2,i3,BufferSize;
    5958
     
    8281        // テキストデータにシリアライズ
    8382        std::string textString;
    84         compiler.objectModule.WriteTextString( textString );
     83        compiler.GetObjectModule().WriteTextString( textString );
    8584
    8685        // サイズ
     
    105104
    106105    //インクルード情報
     106    extern INCLUDEFILEINFO IncludeFileInfo;
    107107    *(long *)(buffer+i2)=IncludeFileInfo.FilesNum;
    108108    i2+=sizeof(long);
     
    115115        buffer[i2++]=(char)IncludeFileInfo.LineOfFile[i3];
    116116        if(IncludeFileInfo.LineOfFile[i3]==-1) break;
     117
     118        //バッファが足りない場合は再確保
     119        if(BufferSize<i2+32768){
     120            BufferSize+=32768;
     121            buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
     122        }
    117123    }
    118124
    119125    //ソースコード
     126    {
     127        //バッファが足りない場合は再確保
     128        int bufferLen = lstrlen( basbuf );
     129        if(BufferSize<i2+(int)bufferLen+32768){
     130            while( BufferSize<i2+(int)bufferLen+32768 )
     131            {
     132                BufferSize+=32768;
     133            }
     134
     135            buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
     136        }
     137    }
    120138    lstrcpy(buffer+i2,basbuf);
    121     i2+=lstrlen(buffer+i2)+1;
     139    i2+=lstrlen( buffer + i2 )+1;
    122140
    123141
     
    150168    }
    151169
    152 
    153 
    154     ////////////////////////////////////////////
    155     // クラス情報(名前のみ。詳細は後で保存)
    156     ////////////////////////////////////////////
    157 
    158     //イテレータをリセット
    159     compiler.objectModule.meta.GetClasses().Iterator_Reset();
    160 
    161     //個数
    162     *(long *)(buffer+i2)=compiler.objectModule.meta.GetClasses().Iterator_GetMaxCount();
    163     i2+=sizeof(long);
    164 
    165     while(compiler.objectModule.meta.GetClasses().Iterator_HasNext()){
    166         CClass *pobj_c;
    167         pobj_c=compiler.objectModule.meta.GetClasses().Iterator_GetNext();
    168 
    169         //クラス名
    170         lstrcpy(buffer+i2,pobj_c->GetName().c_str());
    171         i2+=lstrlen(buffer+i2)+1;
    172     }
    173 
    174 
    175 
    176     //////////////////
    177     // TypeDef情報
    178     //////////////////
    179     *(long *)(buffer+i2)=(int)compiler.objectModule.meta.GetTypeDefs().size();
    180     i2+=sizeof(long);
    181     for(i3=0;i3<(int)compiler.objectModule.meta.GetTypeDefs().size();i3++){
    182         lstrcpy(buffer+i2,compiler.objectModule.meta.GetTypeDefs()[i3].GetName().c_str() );
    183         i2+=lstrlen(buffer+i2)+1;
    184 
    185         lstrcpy(buffer+i2,compiler.objectModule.meta.GetTypeDefs()[i3].GetBaseName().c_str() );
    186         i2+=lstrlen(buffer+i2)+1;
    187 
    188         //バッファが足りない場合は再確保
    189         if(BufferSize<i2+32768){
    190             BufferSize+=32768;
    191             buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
    192         }
    193     }
    194 
    195 
    196     //グローバル変数情報
    197     *(long *)(buffer+i2)=(int)compiler.objectModule.meta.GetGlobalVars().size();
    198     i2+=sizeof(long);
    199     BOOST_FOREACH( Variable *pVar, compiler.objectModule.meta.GetGlobalVars() ){
    200         //変数名
    201         lstrcpy(buffer+i2,pVar->GetName().c_str());
    202         i2+=lstrlen(buffer+i2)+1;
    203 
    204         //型
    205         *(long *)(buffer+i2)=pVar->GetType().GetBasicType();
    206         i2+=sizeof(long);
    207 
    208         //型の拡張情報
    209         SetLpIndex_DebugFile(buffer,&i2,pVar->GetType());
    210 
    211         buffer[i2++] = pVar->IsRef() ? 1 : 0;
    212 
    213         buffer[i2++] = pVar->IsArray() ? 1 : 0;
    214 
    215         if(pVar->IsArray()){
    216             *(long *)(buffer+i2)=(int)pVar->GetSubscripts().size();
    217             i2+=sizeof(long);
    218             BOOST_FOREACH( int indexMax, pVar->GetSubscripts() )
    219             {
    220                 *(long *)(buffer+i2)=indexMax;
    221                 i2+=sizeof(long);
    222             }
    223         }
    224 
    225         //レキシカルスコープ情報
    226         *(long *)(buffer+i2)=pVar->GetScopeStartAddress();
    227         i2+=sizeof(long);
    228         *(long *)(buffer+i2)=pVar->GetScopeEndAddress();
    229         i2+=sizeof(long);
    230         *(long *)(buffer+i2)=pVar->GetScopeLevel();
    231         i2+=sizeof(long);
    232 
    233         //メモリ位置
    234         *(long *)(buffer+i2)=pVar->GetOffsetAddress();
    235         i2+=sizeof(long);
    236 
    237         //バッファが足りない場合は再確保
    238         if(BufferSize<i2+32768){
    239             BufferSize+=32768;
    240             buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
    241         }
    242     }
    243 
    244170    //グローバル実行領域のサイズ
    245171    extern int GlobalOpBufferSize;
     
    247173    i2+=sizeof(long);
    248174
    249     //プロシージャ情報
    250     *(long *)(buffer+i2) = compiler.objectModule.meta.GetUserProcs().Iterator_GetMaxCount();
    251     i2+=sizeof(long);
    252     compiler.objectModule.meta.GetUserProcs().Iterator_Reset();
    253     while( compiler.objectModule.meta.GetUserProcs().Iterator_HasNext() )
    254     {
    255         UserProc *pUserProc = compiler.objectModule.meta.GetUserProcs().Iterator_GetNext();
    256 
    257         if(pUserProc->GetParentClassPtr()){
    258             lstrcpy(buffer+i2,pUserProc->GetParentClassPtr()->GetName().c_str());
    259             i2+=lstrlen(buffer+i2)+1;
    260         }
    261         else{
    262             lstrcpy(buffer+i2,"");
    263             i2+=lstrlen(buffer+i2)+1;
    264         }
    265 
    266         //ID
    267         *(long *)(buffer+i2)=pUserProc->GetId();
    268         i2+=sizeof(long);
    269 
    270         //関数名
    271         lstrcpy(buffer+i2,pUserProc->GetName().c_str());
    272         i2+=lstrlen(buffer+i2)+1;
    273 
    274         *(long *)(buffer+i2)=pUserProc->_beginOpAddressOld;
    275         i2+=sizeof(long);
    276         *(long *)(buffer+i2)=pUserProc->_endOpAddressOld;
    277         i2+=sizeof(long);
    278 
    279         //ローカル変数情報
    280         *(long *)(buffer+i2)=(int)pUserProc->GetLocalVars().size();
    281         i2+=sizeof(long);
    282 
    283         //バッファが足りない場合は再確保
    284         if(BufferSize<i2+32768){
    285             BufferSize+=32768;
    286             buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
    287         }
    288 
    289         BOOST_FOREACH( Variable *pVar, pUserProc->GetLocalVars() ){
    290             lstrcpy(buffer+i2,pVar->GetName().c_str());
    291             i2+=lstrlen(buffer+i2)+1;
    292 
    293             //型
    294             *(long *)(buffer+i2)=pVar->GetType().GetBasicType();
    295             i2+=sizeof(long);
    296 
    297             //型の拡張情報
    298             SetLpIndex_DebugFile(buffer,&i2,pVar->GetType());
    299 
    300             //参照型パラメータかどうか
    301             buffer[i2++] = pVar->IsRef() ? 1 : 0;
    302 
    303             //配列かどうか
    304             buffer[i2++] = pVar->IsArray() ? 1 : 0;
    305 
    306             //配列要素
    307             if(pVar->IsArray()){
    308                 *(long *)(buffer+i2)=(int)pVar->GetSubscripts().size();
    309                 i2+=sizeof(long);
    310                 BOOST_FOREACH( int indexMax, pVar->GetSubscripts() )
    311                 {
    312                     *(long *)(buffer+i2)=indexMax;
    313                     i2+=sizeof(long);
    314                 }
    315             }
    316 
    317             //レキシカルスコープ情報
    318             *(long *)(buffer+i2)=pVar->GetScopeStartAddress();
    319             i2+=sizeof(long);
    320             *(long *)(buffer+i2)=pVar->GetScopeEndAddress();
    321             i2+=sizeof(long);
    322             *(long *)(buffer+i2)=pVar->GetScopeLevel();
    323             i2+=sizeof(long);
    324 
    325             //メモリ位置
    326             *(long *)(buffer+i2)=pVar->GetOffsetAddress();
    327             i2+=sizeof(long);
    328 
    329 
    330 
    331 
    332             //バッファが足りない場合は再確保
    333             if(BufferSize<i2+32768){
    334                 BufferSize+=32768;
    335                 buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
    336             }
    337         }
    338     }
    339 
    340 
    341 
    342     ///////////////////
    343     // クラス情報
    344     ///////////////////
    345 
    346     //イテレータをリセット
    347     compiler.objectModule.meta.GetClasses().Iterator_Reset();
    348 
    349     while(compiler.objectModule.meta.GetClasses().Iterator_HasNext()){
    350         CClass *pobj_c;
    351         pobj_c=compiler.objectModule.meta.GetClasses().Iterator_GetNext();
    352 
    353 
    354         //クラス名
    355         lstrcpy(buffer+i2,pobj_c->GetName().c_str());
    356         i2+=lstrlen(buffer+i2)+1;
    357 
    358         //仮想関数の数
    359         *(long *)(buffer+i2)=pobj_c->GetVtblNum();
    360         i2+=sizeof(long);
    361 
    362         //アラインメント
    363         *(long *)(buffer+i2)=pobj_c->GetFixedAlignment();
    364         i2+=sizeof(long);
    365 
    366         // 動的メンバ
    367         *(long *)(buffer+i2)=(int)pobj_c->GetDynamicMembers().size();
    368         i2+=sizeof(long);
    369         BOOST_FOREACH( CMember *member, pobj_c->GetDynamicMembers() ){
    370             // 名前
    371             lstrcpy(buffer+i2,member->GetName().c_str());
    372             i2+=lstrlen(buffer+i2)+1;
    373 
    374             // 型
    375             *(long *)(buffer+i2)=member->GetType().GetBasicType();
    376             i2+=sizeof(long);
    377 
    378             // 型の拡張情報
    379             SetLpIndex_DebugFile(buffer,&i2,member->GetType());
    380 
    381             // アクセシビリティ
    382             *(Prototype::Accessibility *)(buffer+i2)=member->GetAccessibility();
    383             i2+=sizeof(Prototype::Accessibility);
    384 
    385             *(long *)(buffer+i2)=(int)member->GetSubscripts().size();
    386             i2+=sizeof(long);
    387             BOOST_FOREACH( int indexMax, member->GetSubscripts() )
    388             {
    389                 *(long *)(buffer+i2)=indexMax;
    390                 i2+=sizeof(long);
    391             }
    392 
    393             //バッファが足りない場合は再確保
    394             if(BufferSize<i2+32768){
    395                 BufferSize+=32768;
    396                 buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
    397             }
    398         }
    399 
    400         // 動的メソッド
    401         *(long *)(buffer+i2)=(long)pobj_c->GetMethods().size();
    402         i2+=sizeof(long);
    403         BOOST_FOREACH( const CMethod *pMethod, pobj_c->GetMethods() ){
    404             *(Prototype::Accessibility *)(buffer+i2)=pMethod->GetAccessibility();
    405             i2+=sizeof(Prototype::Accessibility);
    406             if( pMethod->GetInheritsClassPtr() ){
    407                 lstrcpy(buffer+i2,pMethod->GetInheritsClassPtr()->GetName().c_str());
    408                 i2+=lstrlen(buffer+i2)+1;
    409             }
    410             else{
    411                 lstrcpy(buffer+i2,"");
    412                 i2+=lstrlen(buffer+i2)+1;
    413             }
    414             lstrcpy(buffer+i2,pMethod->GetUserProc().GetName().c_str());
    415             i2+=lstrlen(buffer+i2)+1;
    416         }
    417 
    418         //静的メンバ
    419         *(long *)(buffer+i2)=(long)pobj_c->GetStaticMembers().size();
    420         i2+=sizeof(long);
    421         BOOST_FOREACH( CMember *member, pobj_c->GetStaticMembers() ){
    422             // 名前
    423             lstrcpy(buffer+i2,member->GetName().c_str());
    424             i2+=lstrlen(buffer+i2)+1;
    425 
    426             // 型
    427             *(long *)(buffer+i2)=member->GetType().GetBasicType();
    428             i2+=sizeof(long);
    429 
    430             // 型の拡張情報
    431             SetLpIndex_DebugFile(buffer,&i2,member->GetType());
    432 
    433             // アクセシビリティ
    434             *(Prototype::Accessibility *)(buffer+i2)=member->GetAccessibility();
    435             i2+=sizeof(Prototype::Accessibility);
    436 
    437             // 配列
    438             *(long *)(buffer+i2)=(int)member->GetSubscripts().size();
    439             i2+=sizeof(long);
    440             BOOST_FOREACH( int indexMax, member->GetSubscripts() )
    441             {
    442                 *(long *)(buffer+i2)=indexMax;
    443                 i2+=sizeof(long);
    444             }
    445 
    446             //バッファが足りない場合は再確保
    447             if(BufferSize<i2+32768){
    448                 BufferSize+=32768;
    449                 buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
    450             }
    451         }
    452 
    453         //バッファが足りない場合は再確保
    454         if(BufferSize<i2+32768){
    455             BufferSize+=32768;
    456             buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufferSize);
    457         }
    458     }
    459 
    460175    length=i2;
    461176}
     
    467182    memcpy(buffer,OpBuffer,SizeOf_CodeSection);
    468183
    469     BOOST_FOREACH( const SourceLine &sourceLine, oldSourceLines )
     184    BOOST_FOREACH( const SourceLine &sourceLine, _oldSourceLines )
    470185    {
    471186        if(!(
     
    481196}
    482197BOOL CDebugSection::__load(void){
    483     int i2,i3,i4,num;
    484     char temp2[MAX_PATH],*temp5;
     198    int i2,i3;
    485199
    486200    compiler.pCompilingClass = NULL;
     
    502216    i2+=sizeof(long);
    503217
    504     MessageBox(0,"test","test",0);
    505 
    506218    // オブジェクトモジュール
    507219    {
     
    512224        // バッファ
    513225        const std::string textString( (const char *)(buffer + i2), size );
    514         i2 += textString.size();
     226        i2 += size;
    515227
    516228        // テキストデータからシリアライズ
    517229        this->objectModule.ReadTextString( textString );
     230
     231        compiler.SelectObjectModule( this->objectModule );
    518232    }
    519233
    520234    //インクルード情報
    521     IncludeFileInfo.FilesNum=*(long *)(buffer+i2);
    522     i2+=sizeof(long);
    523     IncludeFileInfo.ppFileNames=(char **)malloc(IncludeFileInfo.FilesNum*sizeof(char *));
    524     for(i3=0;i3<IncludeFileInfo.FilesNum;i3++){
     235    _IncludeFileInfo.FilesNum=*(long *)(buffer+i2);
     236    i2+=sizeof(long);
     237    _IncludeFileInfo.ppFileNames=(char **)malloc(_IncludeFileInfo.FilesNum*sizeof(char *));
     238    for(i3=0;i3<_IncludeFileInfo.FilesNum;i3++){
    525239        if(buffer[i2]=='\0') break;
    526         IncludeFileInfo.ppFileNames[i3]=(char *)malloc(lstrlen(buffer+i2)+1);
    527         lstrcpy(IncludeFileInfo.ppFileNames[i3],buffer+i2);
     240        _IncludeFileInfo.ppFileNames[i3]=(char *)malloc(lstrlen(buffer+i2)+1);
     241        lstrcpy(_IncludeFileInfo.ppFileNames[i3],buffer+i2);
    528242        i2+=lstrlen(buffer+i2)+1;
    529243    }
    530244    for(i2++,i3=0;;i2++,i3++){
    531         IncludeFileInfo.LineOfFile[i3]=(long)buffer[i2];
    532         if(IncludeFileInfo.LineOfFile[i3]==-1) break;
     245        _IncludeFileInfo.LineOfFile[i3]=(long)buffer[i2];
     246        if(_IncludeFileInfo.LineOfFile[i3]==-1) break;
    533247    }
    534248
     
    555269        i2+=sizeof(long);
    556270
    557         oldSourceLines.push_back( SourceLine( lineNum, nativeCodePos, sourceCodePos, sourceLineType ) );
    558     }
    559 
    560 
    561     ///////////////////////////////////////////
    562     // クラス情報(名前のみ。詳細は後で取得)
    563     ///////////////////////////////////////////
    564 
    565     this->pobj_DBClass=new Classes();
    566 
    567     int iMaxClassCount;
    568     iMaxClassCount=*(long *)(buffer+i2);
    569     i2+=sizeof(long);
    570     for(i3=0;i3<iMaxClassCount;i3++){
    571         //クラス名
    572         // TODO: 名前空間が未完成
    573         this->pobj_DBClass->Add(NamespaceScopes(),NamespaceScopesCollection(),buffer+i2,0);
    574         i2+=lstrlen(buffer+i2)+1;
    575     }
    576 
    577     compiler.objectModule.meta.SetClasses( this->pobj_DBClass );
    578 
    579 
    580     //////////////////
    581     // TypeDef情報
    582     //////////////////
    583 
    584     //初期化
    585     compiler.objectModule.meta.GetTypeDefs().clear();
    586 
    587     //個数を取得
    588     num=*(long *)(buffer+i2);
    589     i2+=sizeof(long);
    590     for(i3=0;i3<num;i3++){
    591         temp5=buffer+i2;
    592         i2+=lstrlen(buffer+i2)+1;
    593 
    594         // 名前空間に未対応
    595         compiler.objectModule.meta.GetTypeDefs().push_back( TypeDef( NamespaceScopes(), temp5, buffer+i2, -1 ) );
    596 
    597         i2+=lstrlen(buffer+i2)+1;
    598     }
    599 
    600     //定数を取得
    601     GetConstInfo();
    602     this->globalConsts = compiler.objectModule.meta.GetGlobalConsts();
    603     this->globalConstMacros = compiler.objectModule.meta.GetGlobalConstMacros();
    604 
    605     //グローバル変数情報
    606     compiler.objectModule.meta.GetGlobalVars().clear();
    607     int maxGlobalVars=*(long *)(buffer+i2);
    608     i2+=sizeof(long);
    609     for(i3=0;i3<maxGlobalVars;i3++){
    610 
    611         //変数名
    612         char *name = buffer+i2;
    613         i2+=lstrlen(buffer+i2)+1;
    614 
    615         int basicType = *(long *)(buffer+i2);
    616         i2+=sizeof(long);
    617 
    618         Type type( basicType );
    619         GetLpIndex_DebugFile(buffer,&i2,type);
    620 
    621         bool isRef = (buffer[i2++]) ? true:false;
    622 
    623         bool isArray = (buffer[i2++]) ? true:false;
    624 
    625         Variable *pVar = new Variable( name, type, false, isRef, "" );
    626 
    627         if(isArray){
    628             Subscripts subscripts;
    629             int nSubScriptsNum = *(long *)(buffer+i2);
    630             i2+=sizeof(long);
    631             for( int i=0; i<nSubScriptsNum; i++ )
    632             {
    633                 subscripts.push_back( *(long *)(buffer+i2) );
    634                 i2+=sizeof(long);
    635             }
    636 
    637             pVar->SetArray( subscripts );
    638         }
    639 
    640         //レキシカルスコープ情報
    641         pVar->SetScopeStartAddress( *(long *)(buffer+i2) );
    642         i2+=sizeof(long);
    643         pVar->SetScopeEndAddress( *(long *)(buffer+i2) );
    644         i2+=sizeof(long);
    645         pVar->SetScopeLevel( *(long *)(buffer+i2) );
    646         i2+=sizeof(long);
    647 
    648         //メモリ位置
    649         pVar->SetOffsetAddress( *(long *)(buffer+i2) );
    650         i2+=sizeof(long);
    651 
    652         //変数を追加
    653         compiler.objectModule.meta.GetGlobalVars().push_back( pVar );
     271        _oldSourceLines.push_back( SourceLine( lineNum, nativeCodePos, sourceCodePos, sourceLineType ) );
    654272    }
    655273
     
    658276    i2+=sizeof(long);
    659277
    660     //プロシージャ情報
    661     userProcs.Clear();
    662     int subNum = *(long *)(buffer+i2);
    663     i2+=sizeof(long);
    664     for(int i6=0;i6<subNum;i6++){
    665         char szParentClassName[VN_SIZE];
    666         lstrcpy(szParentClassName,buffer+i2);
    667         i2+=lstrlen(buffer+i2)+1;
    668 
    669         const CClass *pClass = NULL;
    670         if(szParentClassName[0]){
    671             pClass=compiler.objectModule.meta.GetClasses().Find(szParentClassName);
    672         }
    673 
    674         //ID
    675         int id=*(long *)(buffer+i2);
    676         i2+=sizeof(long);
    677 
    678         //名前
    679         char *name = buffer+i2;
    680         i2+=lstrlen(buffer+i2)+1;
    681 
    682         // オブジェクトを生成
    683         // TODO: 名前空間が未完成
    684         UserProc *pUserProc = new UserProc( NamespaceScopes(), NamespaceScopesCollection(), name, Procedure::Function, false, false, false, id );
    685         pUserProc->SetParentClass( pClass );
    686 
    687         pUserProc->_beginOpAddressOld = *(long *)(buffer+i2);
    688         i2+=sizeof(long);
    689         pUserProc->_endOpAddressOld = *(long *)(buffer+i2);
    690         i2+=sizeof(long);
    691 
    692         pUserProc->CompleteCompile();
    693 
    694         //ローカル変数情報
    695         pUserProc->GetLocalVars().clear();
    696         int maxLocalVar=*(long *)(buffer+i2);
    697         i2+=sizeof(long);
    698         for(i3=0;i3<maxLocalVar;i3++){
    699             //変数名
    700             char *name = buffer+i2;
    701             i2+=lstrlen(buffer+i2)+1;
    702 
    703             int basicType = *(long *)(buffer+i2);
    704             i2+=sizeof(long);
    705 
    706             Type type( basicType );
    707             GetLpIndex_DebugFile(buffer,&i2,type);
    708 
    709             bool isRef = (buffer[i2++]) ? true:false;
    710 
    711             bool isArray = (buffer[i2++]) ? true:false;
    712 
    713             Variable *pVar = new Variable( name, type, false, isRef, "" );
    714 
    715             if(isArray){
    716                 Subscripts subscripts;
    717                 int nSubScriptsNum = *(long *)(buffer+i2);
    718                 i2+=sizeof(long);
    719                 for( int i=0; i<nSubScriptsNum; i++ )
    720                 {
    721                     subscripts.push_back( *(long *)(buffer+i2) );
    722                     i2+=sizeof(long);
    723                 }
    724 
    725                 pVar->SetArray( subscripts );
    726             }
    727 
    728             //レキシカルスコープ情報
    729             pVar->SetScopeStartAddress( *(long *)(buffer+i2) );
    730             i2+=sizeof(long);
    731             pVar->SetScopeEndAddress( *(long *)(buffer+i2) );
    732             i2+=sizeof(long);
    733             pVar->SetScopeLevel( *(long *)(buffer+i2) );
    734             i2+=sizeof(long);
    735 
    736             //メモリ位置
    737             pVar->SetOffsetAddress( *(long *)(buffer+i2) );
    738             i2+=sizeof(long);
    739 
    740             //変数を追加
    741             pUserProc->GetLocalVars().push_back( pVar );
    742         }
    743 
    744 
    745         /////////////////////////////////
    746         // 格納位置を計算してpUserProcをセット
    747         /////////////////////////////////
    748 
    749         // ハッシュに追加
    750         if( !userProcs.Insert( pUserProc, -1 ) )
    751         {
    752             //return NULL;
    753         }
    754     }
    755     userProcs.Iterator_Init();
    756 
    757     //クラス情報
    758     CClass *pobj_c;
    759     for(i3=0;i3<iMaxClassCount;i3++){
    760         //クラス名
    761         char szClassName[VN_SIZE];
    762         lstrcpy(szClassName,buffer+i2);
    763         i2+=lstrlen(buffer+i2)+1;
    764 
    765         pobj_c =  const_cast<CClass *>( compiler.objectModule.meta.GetClasses().Find(szClassName) );
    766 
    767         //仮想関数の数
    768         pobj_c->SetVtblNum( *(long *)(buffer+i2) );
    769         i2+=sizeof(long);
    770 
    771         //アラインメント
    772         pobj_c->SetFixedAlignment( *(long *)(buffer+i2) );
    773         i2+=sizeof(long);
    774 
    775         // 動的メンバ
    776         int nDynamicMember = *(long *)(buffer+i2);
    777         i2+=sizeof(long);
    778         for( i4=0; i4<nDynamicMember; i4++ ){
    779             // 名前
    780             string name = (char *)(buffer+i2);
    781             i2+=lstrlen(buffer+i2)+1;
    782 
    783             // 型
    784             Type type( *(long *)(buffer+i2) );
    785             i2+=sizeof(long);
    786 
    787             // 型の拡張情報
    788             GetLpIndex_DebugFile(buffer,&i2,type);
    789 
    790             // アクセシビリティ
    791             Prototype::Accessibility accessibility = *(Prototype::Accessibility *)(buffer+i2);
    792             i2+=sizeof(Prototype::Accessibility);
    793 
    794             Subscripts subscripts;
    795             int nSubScriptsNum = *(long *)(buffer+i2);
    796             i2+=sizeof(long);
    797             for( int i=0; i<nSubScriptsNum; i++ )
    798             {
    799                 subscripts.push_back( *(long *)(buffer+i2) );
    800                 i2+=sizeof(long);
    801             }
    802 
    803             CMember *member=new CMember( accessibility, name, type, false, subscripts, "", "" );
    804 
    805             pobj_c->GetDynamicMembers().push_back( member );
    806         }
    807 
    808         // 動的メソッド
    809         int nMethod = *(long *)(buffer+i2);
    810         i2+=sizeof(long);
    811         for( i4=0; i4<nMethod; i4++ ){
    812 
    813             Prototype::Accessibility accessibility=*(Prototype::Accessibility *)(buffer+i2);
    814             i2+=sizeof(Prototype::Accessibility);
    815 
    816             char szInherits[VN_SIZE];
    817             lstrcpy(szInherits,buffer+i2);
    818             i2+=lstrlen(buffer+i2)+1;
    819 
    820             const CClass *pobj_InheritsClass = NULL;
    821             if(szInherits[0]){
    822                 pobj_InheritsClass=compiler.objectModule.meta.GetClasses().Find(szInherits);
    823             }
    824 
    825             lstrcpy(temp2,buffer+i2);
    826             i2+=lstrlen(buffer+i2)+1;
    827 
    828             const CClass *pobj_temp_c;
    829             pobj_temp_c=pobj_InheritsClass;
    830             if(pobj_temp_c==0) pobj_temp_c=pobj_c;
    831 
    832             UserProc *pUserProc = compiler.objectModule.meta.GetUserProcs().GetHashArrayElement( temp2 );
    833             while(pUserProc){
    834                 if( pUserProc->GetName() == temp2 &&pUserProc->GetParentClassPtr()==pobj_temp_c)
    835                 {
    836                     break;
    837                 }
    838 
    839                 pUserProc=pUserProc->GetChainNext();
    840             }
    841 
    842             CMethod *pMethod = new DynamicMethod( pUserProc, accessibility, 0,0,false, pobj_InheritsClass);
    843 
    844             pobj_c->GetMethods().push_back( pMethod );
    845         }
    846 
    847         //静的メンバ
    848         int nStaticMember = *(long *)(buffer+i2);
    849         i2+=sizeof(long);
    850         for( i4=0; i4<nStaticMember; i4++ ){
    851             // 名前
    852             string name = (char *)(buffer+i2);
    853             i2+=lstrlen(buffer+i2)+1;
    854 
    855             // 型
    856             Type type( *(long *)(buffer+i2) );
    857             i2+=sizeof(long);
    858 
    859             // 型の拡張情報
    860             GetLpIndex_DebugFile(buffer,&i2,type);
    861 
    862             // アクセシビリティ
    863             Prototype::Accessibility accessibility = *(Prototype::Accessibility *)(buffer+i2);
    864             i2+=sizeof(Prototype::Accessibility);
    865 
    866             // 配列
    867             Subscripts subscripts;
    868             int nSubScriptsNum = *(long *)(buffer+i2);
    869             i2+=sizeof(long);
    870             for( int i=0; i<nSubScriptsNum; i++ )
    871             {
    872                 subscripts.push_back( *(long *)(buffer+i2) );
    873                 i2+=sizeof(long);
    874             }
    875 
    876             CMember *member=new CMember( accessibility, name, type, false, subscripts, "", "" );
    877 
    878             pobj_c->GetStaticMembers().push_back( member );
    879         }
    880     }
    881278
    882279    HeapDefaultFree(buffer);
     
    884281
    885282
    886 
    887 
    888     compiler.objectModule.meta.GetUserProcs() = userProcs;
    889     pSub_DebugSys_EndProc=GetSubHash("_DebugSys_EndProc");
     283    this->pSub_DebugSys_EndProc=GetSubHash("_DebugSys_EndProc");
     284    if( this->pSub_DebugSys_EndProc == NULL )
     285    {
     286        MessageBox( 0, "_DebugSys_EndProcが見つからない", "ActiveBasic", MB_OK );
     287    }
    890288
    891289
     
    899297    //インクルード情報
    900298    extern INCLUDEFILEINFO IncludeFileInfo;
    901     IncludeFileInfo=this->IncludeFileInfo;
     299    IncludeFileInfo=this->_IncludeFileInfo;
    902300
    903301    //コードと行番号の関係
    904302    extern SourceLines oldSourceLines;
    905     oldSourceLines = this->oldSourceLines;
     303    oldSourceLines = this->_oldSourceLines;
    906304
    907305    BreakStepCodeBuffer=pobj_DBBreakPoint->update(OpBuffer,SizeOf_CodeSection);
     
    1011409    FileSize_CodeSection=this->SizeOf_CodeSection;
    1012410
     411    // オブジェクトモジュール
     412    compiler.SelectObjectModule( this->objectModule );
     413
    1013414    //インクルード情報
    1014415    extern INCLUDEFILEINFO IncludeFileInfo;
    1015     IncludeFileInfo=this->IncludeFileInfo;
     416    IncludeFileInfo=this->_IncludeFileInfo;
    1016417
    1017418    //ソースコード
     
    1020421    //コードと行番号の関係
    1021422    extern SourceLines oldSourceLines;
    1022     oldSourceLines = this->oldSourceLines;
    1023 
    1024     // クラス情報
    1025     compiler.objectModule.meta.SetClasses( this->pobj_DBClass );
    1026 
    1027     //定数を取得
    1028     compiler.objectModule.meta.GetGlobalConsts() = this->globalConsts;
    1029     compiler.objectModule.meta.GetGlobalConstMacros() = this->globalConstMacros;
     423    oldSourceLines = this->_oldSourceLines;
    1030424
    1031425    //グローバル実行領域のサイズ
     
    1033427    GlobalOpBufferSize=this->GlobalOpBufferSize;
    1034428
    1035     //プロシージャ
    1036     compiler.objectModule.meta.GetUserProcs() = userProcs;
    1037 
    1038429    extern const UserProc *pSub_DebugSys_EndProc;
    1039430    pSub_DebugSys_EndProc=this->pSub_DebugSys_EndProc;
     
    1048439
    1049440    //インクルード情報を解放
    1050     for(i2=0;i2<IncludeFileInfo.FilesNum;i2++)
    1051     {
    1052         free(IncludeFileInfo.ppFileNames[i2]);
    1053     }
    1054     free(IncludeFileInfo.ppFileNames);
    1055 
    1056     //クラスに関するメモリを解放
    1057     delete this->pobj_DBClass;
    1058     this->pobj_DBClass=0;
     441    for(i2=0;i2<_IncludeFileInfo.FilesNum;i2++)
     442    {
     443        free(_IncludeFileInfo.ppFileNames[i2]);
     444    }
     445    free(_IncludeFileInfo.ppFileNames);
    1059446
    1060447    //コードバッファを解放
  • trunk/abdev/BasicCompiler_Common/DebugSection.h

    r263 r265  
    3030
    3131    //インクルード情報
    32     INCLUDEFILEINFO IncludeFileInfo;
     32    INCLUDEFILEINFO _IncludeFileInfo;
    3333
    3434    //ソースコード
     
    3636
    3737    //コードと行番号の関係
    38     SourceLines oldSourceLines;
    39 
    40     // クラス情報
    41     Classes *pobj_DBClass;
    42 
    43     //定数を取得
    44     Consts globalConsts;
    45     ConstMacros globalConstMacros;
     38    SourceLines _oldSourceLines;
    4639
    4740    //グローバル実行領域のサイズ
    4841    int GlobalOpBufferSize;
    49 
    50     //プロシージャ
    51     UserProcs userProcs;
    5242
    5343    const UserProc *pSub_DebugSys_EndProc;
     
    7363        , dwRVA_CodeSection( 0 )
    7464        , SizeOf_CodeSection( 0 )
    75         , pobj_DBClass( NULL )
    7665        , GlobalOpBufferSize( 0 )
    7766        , pSub_DebugSys_EndProc( NULL )
  • trunk/abdev/BasicCompiler_Common/Diagnose.cpp

    r256 r265  
    4040        int codeSizeOfGlobalProc = 0;
    4141        int codeSizeOfClassMethod = 0;
    42         compiler.objectModule.meta.GetUserProcs().Iterator_Reset();
    43         while( compiler.objectModule.meta.GetUserProcs().Iterator_HasNext() )
     42        compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
     43        while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    4444        {
    45             UserProc *pUserProc = compiler.objectModule.meta.GetUserProcs().Iterator_GetNext();
     45            UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
    4646            if( pUserProc->IsCompiled() ){
    4747                if( pUserProc->HasParentClass() ){
     
    6767
    6868        // イテレータをリセット
    69         extern Classes *pobj_DBClass;
    70         compiler.objectModule.meta.GetClasses().Iterator_Reset();
     69        compiler.GetObjectModule().meta.GetClasses().Iterator_Reset();
    7170
    72         while( compiler.objectModule.meta.GetClasses().Iterator_HasNext() ){
     71        while( compiler.GetObjectModule().meta.GetClasses().Iterator_HasNext() ){
    7372            int codeSizeOfClass = 0;
    7473
    75             CClass &objClass = *compiler.objectModule.meta.GetClasses().Iterator_GetNext();
     74            CClass &objClass = *compiler.GetObjectModule().meta.GetClasses().Iterator_GetNext();
    7675
    7776            if( !objClass.IsEnum() ){
     
    107106
    108107        // イテレータをリセット
    109         extern Classes *pobj_DBClass;
    110         compiler.objectModule.meta.GetClasses().Iterator_Reset();
     108        compiler.GetObjectModule().meta.GetClasses().Iterator_Reset();
    111109
    112         while( compiler.objectModule.meta.GetClasses().Iterator_HasNext() ){
     110        while( compiler.GetObjectModule().meta.GetClasses().Iterator_HasNext() ){
    113111            int codeSizeOfClass = 0;
    114112
    115             CClass &objClass = *compiler.objectModule.meta.GetClasses().Iterator_GetNext();
     113            CClass &objClass = *compiler.GetObjectModule().meta.GetClasses().Iterator_GetNext();
    116114
    117115            // 動的メソッド
  • trunk/abdev/BasicCompiler_Common/Intermediate_Step2.cpp

    r256 r265  
    7979
    8080        //定数を追加
    81         compiler.objectModule.meta.GetGlobalConsts().Add( namespaceScopes, temporary, NextValue);
     81        compiler.GetObjectModule().meta.GetGlobalConsts().Add( namespaceScopes, temporary, NextValue);
    8282    }
    8383}
     
    9595
    9696    //定数に関する情報を初期化
    97     compiler.objectModule.meta.GetGlobalConsts().Clear();
    98     compiler.objectModule.meta.GetGlobalConstMacros().Clear();
     97    compiler.GetObjectModule().meta.GetGlobalConsts().Clear();
     98    compiler.GetObjectModule().meta.GetGlobalConstMacros().Clear();
    9999
    100100    extern char *basbuf;
     
    172172
    173173    // イテレータを初期化
    174     compiler.objectModule.meta.GetGlobalConsts().Iterator_Init();
    175     compiler.objectModule.meta.GetGlobalConstMacros().Iterator_Init();
     174    compiler.GetObjectModule().meta.GetGlobalConsts().Iterator_Init();
     175    compiler.GetObjectModule().meta.GetGlobalConstMacros().Iterator_Init();
    176176
    177177    return true;
  • trunk/abdev/BasicCompiler_Common/MakeExe.cpp

    r263 r265  
    137137    extern int AllGlobalVarSize;
    138138    extern int AllInitGlobalVarSize;
    139     compiler.objectModule.meta.GetGlobalVars().clear();
     139    compiler.GetObjectModule().meta.GetGlobalVars().clear();
    140140    AllGlobalVarSize=0;
    141141    AllInitGlobalVarSize=0;
  • trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp

    r256 r265  
    330330        Type leftType;
    331331        if( GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){
    332             if( isClassName == false && compiler.objectModule.meta.GetBlittableTypes().IsExist( leftType ) ){
     332            if( isClassName == false && compiler.GetObjectModule().meta.GetBlittableTypes().IsExist( leftType ) ){
    333333                // 左側のオブジェクト部分がBlittable型のとき
    334334
     
    336336                lstrcpy( temporary, termLeft );
    337337                sprintf( termLeft, "%s(%s)",
    338                     compiler.objectModule.meta.GetBlittableTypes().Find( leftType ).GetCreateStaticMethodFullName().c_str(),
     338                    compiler.GetObjectModule().meta.GetBlittableTypes().Find( leftType ).GetCreateStaticMethodFullName().c_str(),
    339339                    temporary );
    340340
     
    398398
    399399    if( pIsClassName ){
    400         if( compiler.objectModule.meta.GetClasses().Find( termFull ) ){
     400        if( compiler.GetObjectModule().meta.GetClasses().Find( termFull ) ){
    401401            *pIsClassName = true;
    402402            return true;
     
    457457        else
    458458        {
    459             ConstMacro *pConstMacro = compiler.objectModule.meta.GetGlobalConstMacros().Find( procName );
     459            ConstMacro *pConstMacro = compiler.GetObjectModule().meta.GetGlobalConstMacros().Find( procName );
    460460            if( pConstMacro )
    461461            {
     
    689689                        //要求タイプがオブジェクト、または未定のとき
    690690                        type_stack[sp]=DEF_OBJECT;
    691                         index_stack[sp]=(LONG_PTR)compiler.objectModule.meta.GetClasses().GetStringClassPtr();
     691                        index_stack[sp]=(LONG_PTR)compiler.GetObjectModule().meta.GetClasses().GetStringClassPtr();
    692692                        *pIsLiteralCalculation = false;
    693693
     
    734734                        }
    735735                        else{
    736                             index_stack[sp] = (LONG_PTR)compiler.objectModule.meta.GetClasses().GetObjectClassPtr();
     736                            index_stack[sp] = (LONG_PTR)compiler.GetObjectModule().meta.GetClasses().GetObjectClassPtr();
    737737                        }
    738738                        *pIsLiteralCalculation = false;
     
    746746                    //////////////
    747747
    748                     i3 = compiler.objectModule.meta.GetGlobalConsts().GetBasicType(term);
     748                    i3 = compiler.GetObjectModule().meta.GetGlobalConsts().GetBasicType(term);
    749749                    if(i3){
    750                         if( compiler.objectModule.meta.GetGlobalConsts().IsStringPtr( term ) ){
     750                        if( compiler.GetObjectModule().meta.GetGlobalConsts().IsStringPtr( term ) ){
    751751                            //リテラル文字列
    752752                            goto StrLiteral;
  • trunk/abdev/BasicCompiler_Common/Subroutine.cpp

    r256 r265  
    168168        GetVarType(fullCallName,type,false);
    169169
    170         ProcPointer *pProcPtr = compiler.objectModule.meta.GetProcPointers()[type.GetIndex()];
     170        ProcPointer *pProcPtr = compiler.GetObjectModule().meta.GetProcPointers()[type.GetIndex()];
    171171        resultType = pProcPtr->ReturnType();
    172172
     
    451451
    452452bool IsNeedProcCompile(){
    453     compiler.objectModule.meta.GetUserProcs().Iterator_Reset();
    454     while( compiler.objectModule.meta.GetUserProcs().Iterator_HasNext() )
     453    compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
     454    while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    455455    {
    456         UserProc *pUserProc = compiler.objectModule.meta.GetUserProcs().Iterator_GetNext();
     456        UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
    457457        if( pUserProc->IsUsing() && pUserProc->IsCompiled() == false ){
    458458            return true;
  • trunk/abdev/BasicCompiler_Common/VarList.cpp

    r263 r265  
    275275    extern int MemPos_RWSection;
    276276
    277     BOOST_FOREACH( Variable *pVar, compiler.objectModule.meta.GetGlobalVars() ){
     277    BOOST_FOREACH( Variable *pVar, compiler.GetObjectModule().meta.GetGlobalVars() ){
    278278
    279279        //スコープ外の場合は無視
     
    358358
    359359    UserProc *pUserProc = NULL;
    360     compiler.objectModule.meta.GetUserProcs().Iterator_Reset();
    361     while( compiler.objectModule.meta.GetUserProcs().Iterator_HasNext() )
     360    compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
     361    while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    362362    {
    363         pUserProc = compiler.objectModule.meta.GetUserProcs().Iterator_GetNext();
    364         if(rva_to_real(pUserProc->_beginOpAddressOld) <= pobj_dti->lplpObp[i2]  &&
    365             pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->_endOpAddressOld)){
     363        pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
     364        if(rva_to_real(pUserProc->GetBeginOpAddress()) <= pobj_dti->lplpObp[i2]  &&
     365            pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->GetEndOpAddress())){
    366366            break;
    367367        }
     
    604604
    605605        UserProc *pUserProc = NULL;
    606         compiler.objectModule.meta.GetUserProcs().Iterator_Reset();
    607         while( compiler.objectModule.meta.GetUserProcs().Iterator_HasNext() )
     606        compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
     607        while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    608608        {
    609             pUserProc = compiler.objectModule.meta.GetUserProcs().Iterator_GetNext();
    610 
    611             if(rva_to_real(pUserProc->_beginOpAddressOld) <= pobj_dti->lplpObp[i2]  &&
    612                 pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->_endOpAddressOld))
     609            pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
     610
     611            if(rva_to_real(pUserProc->GetBeginOpAddress()) <= pobj_dti->lplpObp[i2]  &&
     612                pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->GetEndOpAddress()))
    613613            {
    614614                lstrcpy(temporary,pUserProc->GetName().c_str());
     
    717717
    718718        UserProc *pUserProc = NULL;
    719         compiler.objectModule.meta.GetUserProcs().Iterator_Reset();
    720         while( compiler.objectModule.meta.GetUserProcs().Iterator_HasNext() )
     719        compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
     720        while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    721721        {
    722             pUserProc = compiler.objectModule.meta.GetUserProcs().Iterator_GetNext();
    723 
    724             if(rva_to_real(pUserProc->_beginOpAddressOld) <= pobj_dti->lplpObp[i2]  &&
    725                 pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->_endOpAddressOld)){
     722            pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
     723
     724            if(rva_to_real(pUserProc->GetBeginOpAddress()) <= pobj_dti->lplpObp[i2]  &&
     725                pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->GetEndOpAddress())){
    726726                break;
    727727            }
  • trunk/abdev/BasicCompiler_Common/VariableOpe.cpp

    r256 r265  
    220220        if(lpIndex==-1) lstrcpy(name,"VoidPtr");
    221221        else{
    222             if( compiler.objectModule.meta.GetProcPointers()[lpIndex]->ReturnType().IsNull() )
     222            if( compiler.GetObjectModule().meta.GetProcPointers()[lpIndex]->ReturnType().IsNull() )
    223223                lstrcpy(name,"*Sub");
    224224            else lstrcpy(name,"*Function");
     
    235235
    236236Type GetStringTypeInfo(){
    237     Type type( DEF_OBJECT, *compiler.objectModule.meta.GetClasses().GetStringClassPtr() );
     237    Type type( DEF_OBJECT, *compiler.GetObjectModule().meta.GetClasses().GetStringClassPtr() );
    238238    return type;
    239239}
     
    575575    // 名前空間を分離
    576576    char namespaceStr[VN_SIZE]="", simpleName[VN_SIZE];
    577     compiler.objectModule.meta.GetNamespaces().SplitNamespace( variable, namespaceStr, simpleName );
     577    compiler.GetObjectModule().meta.GetNamespaces().SplitNamespace( variable, namespaceStr, simpleName );
    578578
    579579    // 先頭オブジェクトまたはクラス名と入れ子メンバに分割
     
    647647        GetNowStaticVarFullName(VarName,temporary);
    648648
    649         pVar = compiler.objectModule.meta.GetGlobalVars().Find( Symbol( temporary ) );
     649        pVar = compiler.GetObjectModule().meta.GetGlobalVars().Find( Symbol( temporary ) );
    650650        if( pVar ){
    651651            goto ok;
     
    667667        }
    668668
    669         int typeDefIndex = compiler.objectModule.meta.GetTypeDefs().GetIndex( VarName );
     669        int typeDefIndex = compiler.GetObjectModule().meta.GetTypeDefs().GetIndex( VarName );
    670670        if( typeDefIndex != -1 ){
    671671            // TypeDef後の型名だったとき
    672             lstrcpy( VarName, compiler.objectModule.meta.GetTypeDefs()[typeDefIndex].GetBaseName().c_str() );
     672            lstrcpy( VarName, compiler.GetObjectModule().meta.GetTypeDefs()[typeDefIndex].GetBaseName().c_str() );
    673673        }
    674674
     
    676676        sprintf(temp2,"%s.%s",VarName,temporary);
    677677
    678         pVar = compiler.objectModule.meta.GetGlobalVars().Find( Symbol( temp2 ) );
     678        pVar = compiler.GetObjectModule().meta.GetGlobalVars().Find( Symbol( temp2 ) );
    679679        if( pVar ){
    680680            lstrcpy(member,tempMember);
     
    689689        sprintf(temp2,"%s.%s",compiler.pCompilingClass->GetName().c_str(),VarName);
    690690
    691         pVar = compiler.objectModule.meta.GetGlobalVars().Find( Symbol( temp2 ) );
     691        pVar = compiler.GetObjectModule().meta.GetGlobalVars().Find( Symbol( temp2 ) );
    692692        if( pVar ){
    693693            goto ok;
     
    700700    ////////////////////
    701701
    702     pVar = compiler.objectModule.meta.GetGlobalVars().BackSearch( Symbol( VarName ) );
     702    pVar = compiler.GetObjectModule().meta.GetGlobalVars().BackSearch( Symbol( VarName ) );
    703703    if( pVar ){
    704704        goto ok;
     
    973973    extern int AllGlobalVarSize;
    974974
    975     if( compiler.objectModule.meta.GetGlobalVars().DuplicateCheck( Symbol( name ) ) ){
     975    if( compiler.GetObjectModule().meta.GetGlobalVars().DuplicateCheck( Symbol( name ) ) ){
    976976        //2重定義のエラー
    977977        SetError(15,name,cp);
     
    997997
    998998    // 変数を追加
    999     compiler.objectModule.meta.GetGlobalVars().push_back( pVar );
     999    compiler.GetObjectModule().meta.GetGlobalVars().push_back( pVar );
    10001000
    10011001    //アラインメントを考慮
     
    11051105
    11061106        //定数と2重定義されていないる場合は抜け出す
    1107         if(compiler.objectModule.meta.GetGlobalConsts().GetBasicType(VarName)){
     1107        if(compiler.GetObjectModule().meta.GetGlobalConsts().GetBasicType(VarName)){
    11081108            return;
    11091109        }
    11101110
    11111111        //定数マクロとして定義されている場合は抜け出す
    1112         if( compiler.objectModule.meta.GetGlobalConstMacros().IsExist( VarName ) )
     1112        if( compiler.GetObjectModule().meta.GetGlobalConstMacros().IsExist( VarName ) )
    11131113        {
    11141114            return;
     
    11261126
    11271127    //定数と2重定義されていないかを調べる
    1128     if(compiler.objectModule.meta.GetGlobalConsts().GetBasicType(VarName)){
     1128    if(compiler.GetObjectModule().meta.GetGlobalConsts().GetBasicType(VarName)){
    11291129        SetError(15,VarName,cp);
    11301130        return;
     
    11321132
    11331133    //定数マクロとして定義されている場合
    1134     if( compiler.objectModule.meta.GetGlobalConstMacros().IsExist( VarName ) ){
     1134    if( compiler.GetObjectModule().meta.GetGlobalConstMacros().IsExist( VarName ) ){
    11351135        SetError(15,VarName,cp);
    11361136        return;
  • trunk/abdev/BasicCompiler_Common/WatchList.cpp

    r256 r265  
    440440        ///////////////////
    441441
    442         const Variable *pVar = compiler.objectModule.meta.GetGlobalVars().Find( VarName );
     442        const Variable *pVar = compiler.GetObjectModule().meta.GetGlobalVars().Find( VarName );
    443443        if( !pVar ){
    444444            //一致しないとき
  • trunk/abdev/BasicCompiler_Common/calculation.cpp

    r256 r265  
    500500                        //定数関数
    501501
    502                         ConstMacro *pConstMacro = compiler.objectModule.meta.GetGlobalConstMacros().Find( temporary );
     502                        ConstMacro *pConstMacro = compiler.GetObjectModule().meta.GetGlobalConstMacros().Find( temporary );
    503503                        if( !pConstMacro )
    504504                        {
     
    665665                        /////////
    666666                        StrPtr[pnum]=0;
    667                         type[pnum] = compiler.objectModule.meta.GetGlobalConsts().GetBasicType(Parms);
     667                        type[pnum] = compiler.GetObjectModule().meta.GetGlobalConsts().GetBasicType(Parms);
    668668                        if(type[pnum]){
    669669                            if(IsRealNumberType(type[pnum])){
    670670                                //実数型
    671                                 nums[pnum] = compiler.objectModule.meta.GetGlobalConsts().GetDoubleData(Parms);
     671                                nums[pnum] = compiler.GetObjectModule().meta.GetGlobalConsts().GetDoubleData(Parms);
    672672                            }
    673673                            else if(IsWholeNumberType(type[pnum])){
    674674                                //整数
    675                                 i64nums[pnum] = compiler.objectModule.meta.GetGlobalConsts().GetWholeData(Parms);
     675                                i64nums[pnum] = compiler.GetObjectModule().meta.GetGlobalConsts().GetWholeData(Parms);
    676676                            }
    677677/*                          else if(type[pnum]==DEF_STRING){
     
    12211221
    12221222                    //定数
    1223                     ConstMacro *pConstMacro = compiler.objectModule.meta.GetGlobalConstMacros().Find( temporary );
     1223                    ConstMacro *pConstMacro = compiler.GetObjectModule().meta.GetGlobalConstMacros().Find( temporary );
    12241224                    if(pConstMacro){
    12251225                        //マクロ関数の場合
     
    12311231
    12321232                //定数
    1233                 i3 = compiler.objectModule.meta.GetGlobalConsts().GetBasicType(Command+i2);
     1233                i3 = compiler.GetObjectModule().meta.GetGlobalConsts().GetBasicType(Command+i2);
    12341234                if(i3==DEF_STRING) return 1;    //文字列
    12351235                if(i3) return 0;            //数値
  • trunk/abdev/BasicCompiler_Common/hash.cpp

    r256 r265  
    3333
    3434    // ハッシュ値を取得
    35     DllProc *pDllProc = compiler.objectModule.meta.GetDllProcs().GetHashArrayElement( simpleName );
     35    DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().GetHashArrayElement( simpleName );
    3636    while(pDllProc){
    3737        if( pDllProc->IsEqualSymbol( fullName ) ){
     
    7474            }
    7575            else{
    76                 pobj_c=compiler.objectModule.meta.GetClasses().Find(ObjName);
     76                pobj_c=compiler.GetObjectModule().meta.GetClasses().Find(ObjName);
    7777                if( pobj_c ){
    7878                    isStatic = true;
     
    107107
    108108    // グローバル関数を検索
    109     compiler.objectModule.meta.GetUserProcs().EnumGlobalProcs( NestMember, name, subs );
     109    compiler.GetObjectModule().meta.GetUserProcs().EnumGlobalProcs( NestMember, name, subs );
    110110}
    111111
     
    151151
    152152const UserProc *GetClassMethod( const char *className, const char *methodName ){
    153     const CClass *pClass = compiler.objectModule.meta.GetClasses().Find( className );
     153    const CClass *pClass = compiler.GetObjectModule().meta.GetClasses().Find( className );
    154154    if( pClass ){
    155155        vector<const UserProc *> userProcs;
  • trunk/abdev/BasicCompiler_Common/include/Compiler.h

    r256 r265  
    1313    NamespaceSupporter namespaceSupporter;
    1414
     15    // オブジェクトモジュール
     16    ObjectModule *pObjectModule;
     17    ObjectModule *pNowObjectModule;
     18
    1519public:
     20
     21    Compiler()
     22        : pObjectModule( new ObjectModule )
     23        , pNowObjectModule( pObjectModule )
     24    {
     25    }
     26    ~Compiler()
     27    {
     28        delete pObjectModule;
     29    }
    1630
    1731    NamespaceSupporter &GetNamespaceSupporter()
     
    2034    }
    2135
    22     // オブジェクトモジュール
    23     ObjectModule objectModule;
    24 
    2536    // コード生成機構
    2637    CodeGenerator codeGenerator;
     
    2839    // リンカ
    2940    Linker linker;
     41
     42    ObjectModule &GetObjectModule()
     43    {
     44        return *pNowObjectModule;
     45    }
     46    void SelectObjectModule( ObjectModule &objectModule )
     47    {
     48        pNowObjectModule = &objectModule;
     49    }
    3050
    3151    static bool StringToType( const std::string &typeName, Type &type );
  • trunk/abdev/BasicCompiler_Common/include/NativeCode.h

    r263 r265  
    408408    }
    409409
     410    const SourceLines &GetSourceLines() const
     411    {
     412        return sourceLines;
     413    }
    410414    void NextSourceLine();
    411415};
  • trunk/abdev/BasicCompiler_Common/src/Class.cpp

    r263 r265  
    189189
    190190        //継承元クラスを取得
    191         const CClass *pInheritsClass = compiler.objectModule.meta.GetClasses().Find(temporary);
     191        const CClass *pInheritsClass = compiler.GetObjectModule().meta.GetClasses().Find(temporary);
    192192        if( !pInheritsClass ){
    193193            SmoothieException::Throw(106,temporary,nowLine);
     
    219219    if( !isInheritsClass ){
    220220        // クラスを一つも継承していないとき
    221         const CClass *pObjectClass = compiler.objectModule.meta.GetClasses().Find("Object");
     221        const CClass *pObjectClass = compiler.GetObjectModule().meta.GetClasses().Find("Object");
    222222        if( !pObjectClass ){
    223223            SmoothieException::Throw(106,"Object",i);
     
    243243
    244244        //継承元クラスを取得
    245         const CClass *pInheritsClass = compiler.objectModule.meta.GetClasses().Find(temporary);
     245        const CClass *pInheritsClass = compiler.GetObjectModule().meta.GetClasses().Find(temporary);
    246246        if( !pInheritsClass ){
    247247            SmoothieException::Throw(106,temporary,nowLine);
     
    282282        //継承先が読み取られていないとき
    283283        pobj_LoopRefCheck->add(this->GetName().c_str());
    284         compiler.objectModule.meta.GetClasses().GetClass_recur(inheritsClass.GetName().c_str());
     284        compiler.GetObjectModule().meta.GetClasses().GetClass_recur(inheritsClass.GetName().c_str());
    285285        pobj_LoopRefCheck->del(this->GetName().c_str());
    286286    }
     
    344344        //継承先が読み取られていないとき
    345345        pobj_LoopRefCheck->add(this->GetName().c_str());
    346         compiler.objectModule.meta.GetClasses().GetClass_recur(inheritsInterface.GetName().c_str());
     346        compiler.GetObjectModule().meta.GetClasses().GetClass_recur(inheritsInterface.GetName().c_str());
    347347        pobj_LoopRefCheck->del(this->GetName().c_str());
    348348    }
     
    427427
    428428    //関数ハッシュへ登録
    429     UserProc *pUserProc = compiler.objectModule.meta.GetUserProcs().Add( NamespaceScopes(), NamespaceScopesCollection(), buffer,nowLine,isVirtual,pobj_c, (bStatic!=0) );
     429    UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Add( NamespaceScopes(), NamespaceScopesCollection(), buffer,nowLine,isVirtual,pobj_c, (bStatic!=0) );
    430430    if(!pUserProc) return;
    431431
     
    716716    }
    717717
    718     vtbl_offset=compiler.objectModule.dataTable.AddBinary((void *)ppsi,GetVtblNum()*sizeof(LONG_PTR));
     718    vtbl_offset=compiler.GetObjectModule().dataTable.AddBinary((void *)ppsi,GetVtblNum()*sizeof(LONG_PTR));
    719719
    720720    for( int i=0; i < GetVtblNum(); i++ ){
     
    730730
    731731    LONG_PTR *pVtbl;
    732     pVtbl=(LONG_PTR *)((char *)compiler.objectModule.dataTable.GetPtr()+vtbl_offset);
     732    pVtbl=(LONG_PTR *)((char *)compiler.GetObjectModule().dataTable.GetPtr()+vtbl_offset);
    733733
    734734    int i;
     
    834834
    835835    // Blittable型管理オブジェクトを初期化
    836     compiler.objectModule.meta.GetBlittableTypes().clear();
     836    compiler.GetObjectModule().meta.GetBlittableTypes().clear();
    837837
    838838    // 名前空間管理
     
    954954
    955955                    // Blittable型として登録
    956                     compiler.objectModule.meta.GetBlittableTypes().push_back( BlittableType( blittableType, pClass ) );
     956                    compiler.GetObjectModule().meta.GetBlittableTypes().push_back( BlittableType( blittableType, pClass ) );
    957957                }
    958958        }
     
    16591659
    16601660    // TypeDefも見る
    1661     int index = compiler.objectModule.meta.GetTypeDefs().GetIndex( namespaceScopes, name );
     1661    int index = compiler.GetObjectModule().meta.GetTypeDefs().GetIndex( namespaceScopes, name );
    16621662    if( index != -1 ){
    1663         Type type = compiler.objectModule.meta.GetTypeDefs()[index].GetBaseType();
     1663        Type type = compiler.GetObjectModule().meta.GetTypeDefs()[index].GetBaseType();
    16641664        if( type.IsObject() ){
    16651665            return &type.GetClass();
  • trunk/abdev/BasicCompiler_Common/src/Compiler.cpp

    r256 r265  
    1616                //関数ポインタ(*Function)
    1717                type.SetBasicType( DEF_PTR_PROC );
    18                 type.SetIndex( compiler.objectModule.meta.GetProcPointers().Add( typeName ) );
     18                type.SetIndex( compiler.GetObjectModule().meta.GetProcPointers().Add( typeName ) );
    1919                return true;
    2020        }
     
    4242    // Object型だったとき
    4343    if( typeName == "Object" ){
    44         type.SetType( DEF_OBJECT, compiler.objectModule.meta.GetClasses().GetObjectClassPtr() );
     44        type.SetType( DEF_OBJECT, compiler.GetObjectModule().meta.GetClasses().GetObjectClassPtr() );
    4545        return true;
    4646    }
     
    4848    // String型だったとき
    4949    if( typeName == "String" ){
    50         type.SetType( DEF_OBJECT, compiler.objectModule.meta.GetClasses().GetStringClassPtr() );
     50        type.SetType( DEF_OBJECT, compiler.GetObjectModule().meta.GetClasses().GetStringClassPtr() );
    5151        return true;
    5252    }
     
    5656    // TypeDefされた型
    5757    ////////////////////
    58     int i=compiler.objectModule.meta.GetTypeDefs().GetIndex( typeName );
     58    int i=compiler.GetObjectModule().meta.GetTypeDefs().GetIndex( typeName );
    5959    if(i!=-1){
    60         type = compiler.objectModule.meta.GetTypeDefs()[i].GetBaseType();
     60        type = compiler.GetObjectModule().meta.GetTypeDefs()[i].GetBaseType();
    6161        return true;
    6262    }
    6363
    6464    //クラス
    65     const CClass *pobj_c = compiler.objectModule.meta.GetClasses().Find( typeName );
     65    const CClass *pobj_c = compiler.GetObjectModule().meta.GetClasses().Find( typeName );
    6666    if(pobj_c){
    6767        type.SetClassPtr( pobj_c );
     
    104104        }
    105105        else{
    106             if( compiler.objectModule.meta.GetProcPointers()[type.GetIndex()]->ReturnType().IsNull() ){
     106            if( compiler.GetObjectModule().meta.GetProcPointers()[type.GetIndex()]->ReturnType().IsNull() ){
    107107                return "*Sub";
    108108            }
  • trunk/abdev/BasicCompiler_Common/src/Const.cpp

    r256 r265  
    2828
    2929    //重複チェック
    30     if( compiler.objectModule.meta.GetGlobalConstMacros().IsExist( name )
    31         || compiler.objectModule.meta.GetGlobalConsts().IsExist( name ) )
     30    if( compiler.GetObjectModule().meta.GetGlobalConstMacros().IsExist( name )
     31        || compiler.GetObjectModule().meta.GetGlobalConsts().IsExist( name ) )
    3232    {
    3333        SetError(15,name,cp);
     
    3838        //定数マクロ
    3939
    40         compiler.objectModule.meta.GetGlobalConstMacros().Add( namespaceScopes, name, buffer + i );
     40        compiler.GetObjectModule().meta.GetGlobalConstMacros().Add( namespaceScopes, name, buffer + i );
    4141    }
    4242    else{
     
    4444        char *expression = buffer + i + 1;
    4545
    46         compiler.objectModule.meta.GetGlobalConsts().Add( namespaceScopes, name, expression );
     46        compiler.GetObjectModule().meta.GetGlobalConsts().Add( namespaceScopes, name, expression );
    4747    }
    4848}
  • trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp

    r256 r265  
    7272
    7373    Variables &vars = UserProc::IsGlobalAreaCompiling() ?
    74         compiler.objectModule.meta.GetGlobalVars() :
     74        compiler.GetObjectModule().meta.GetGlobalVars() :
    7575        UserProc::CompilingUserProc().GetLocalVars();
    7676
     
    9898
    9999    Variables &vars = UserProc::IsGlobalAreaCompiling() ?
    100         compiler.objectModule.meta.GetGlobalVars() :
     100        compiler.GetObjectModule().meta.GetGlobalVars() :
    101101        UserProc::CompilingUserProc().GetLocalVars();
    102102
  • trunk/abdev/BasicCompiler_Common/src/NamespaceSupporter.cpp

    r256 r265  
    99{
    1010    NamespaceScopes namespaceScopes( namespaceStr );
    11     if( !compiler.objectModule.meta.GetNamespaces().IsExist( namespaceScopes ) ){
     11    if( !compiler.GetObjectModule().meta.GetNamespaces().IsExist( namespaceScopes ) ){
    1212        return false;
    1313    }
Note: See TracChangeset for help on using the changeset viewer.