Changeset 260 in dev


Ignore:
Timestamp:
Aug 3, 2007, 11:28:19 AM (17 years ago)
Author:
dai_9181
Message:

Labelクラスをリファクタリング

Location:
trunk/abdev
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/BasicCompiler.vcproj

    r257 r260  
    12531253                    >
    12541254                </File>
    1255                 <Filter
    1256                     Name="CoreClasses"
    1257                     >
    1258                     <File
    1259                         RelativePath="..\BasicCompiler_Common\src\CommonCodeGenerator.cpp"
    1260                         >
    1261                     </File>
    1262                 </Filter>
    12631255            </Filter>
    12641256            <Filter
     
    12671259                <File
    12681260                    RelativePath="..\BasicCompiler_Common\src\CodeGenerator.cpp"
     1261                    >
     1262                </File>
     1263                <File
     1264                    RelativePath="..\BasicCompiler_Common\src\CommonCodeGenerator.cpp"
    12691265                    >
    12701266                </File>
  • trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp

    r259 r260  
    402402    compiler.codeGenerator._exitSubCodePositions_ObpOld.clear();
    403403
    404     //ラベル用のメモリを確保
    405     extern LABEL *pLabelNames;
    406     extern int MaxLabelNum;
    407     pLabelNames=(LABEL *)HeapAlloc(hHeap,0,1);
    408     MaxLabelNum=0;
     404    //ラベル管理オブジェクトを初期化
     405    extern Labels labels;
     406    labels.clear();
    409407
    410408    //Gotoラベルスケジュール
     
    581579    }
    582580
    583     //ラベル用のメモリを解放
    584     for(i3=0;i3<MaxLabelNum;i3++){
    585         if(pLabelNames[i3].pName) HeapDefaultFree(pLabelNames[i3].pName);
    586     }
    587     HeapDefaultFree(pLabelNames);
    588 
    589581    //With情報のメモリを解放
    590582    for(i3=0;i3<WithInfo.num;i3++){
  • trunk/abdev/BasicCompiler32/Compile_Statement.cpp

    r254 r260  
    279279
    280280int GetLabelAddress(char *LabelName,int LineNum){
    281     extern int MaxLabelNum;
    282     extern LABEL *pLabelNames;
    283     int i;
     281    extern Labels labels;
    284282
    285283    if(LabelName){
    286         for(i=0;i<MaxLabelNum;i++){
    287             if(pLabelNames[i].pName){
    288                 if(lstrcmp(LabelName,pLabelNames[i].pName)==0) return pLabelNames[i].address;
     284        BOOST_FOREACH( const Label &label, labels )
     285        {
     286            if( label.name.size() > 0 )
     287            {
     288                if( label.name == LabelName )
     289                {
     290                    return label.address;
     291                }
    289292            }
    290293        }
    291294    }
    292295    else{
    293         for(i=0;i<MaxLabelNum;i++){
    294             if(pLabelNames[i].pName==0){
    295                 if(LineNum==pLabelNames[i].line) return pLabelNames[i].address;
     296        BOOST_FOREACH( const Label &label, labels )
     297        {
     298            if( label.name.size() == 0 )
     299            {
     300                if( label.line == LineNum )
     301                {
     302                    return label.address;
     303                }
    296304            }
    297305        }
     
    309317        {
    310318            //jmp ...(schedule)
    311             extern int obp;
    312319            compiler.codeGenerator.op_jmp_goto_schedule( (const std::string)(Parameter + 1), 0, cp );
    313320        }
     
    326333        {
    327334            //jmp ...(schedule)
    328             extern int obp;
    329335            compiler.codeGenerator.op_jmp_goto_schedule( "", LineNum, cp );
    330336        }
  • trunk/abdev/BasicCompiler32/MakePeHdr.cpp

    r259 r260  
    417417        }
    418418
    419         //ラベル用のメモリを確保
    420         extern LABEL *pLabelNames;
    421         extern int MaxLabelNum;
    422         pLabelNames=(LABEL *)HeapAlloc(hHeap,0,1);
    423         MaxLabelNum=0;
     419        //ラベル管理オブジェクトを初期化
     420        extern Labels labels;
     421        labels.clear();
    424422
    425423        //Gotoラベルスケジュール
     
    465463        //グローバル実行領域をコンパイル開始
    466464        CompileBuffer(0,0);
    467 
    468         //ラベル用のメモリを解放
    469         for(i=0;i<MaxLabelNum;i++){
    470             if(pLabelNames[i].pName) HeapDefaultFree(pLabelNames[i].pName);
    471         }
    472         HeapDefaultFree(pLabelNames);
    473465
    474466        //Goto未知ラベルスケジュールが存在したらエラーにする
  • trunk/abdev/BasicCompiler32/Opcode.h

    r253 r260  
    2121
    2222//ラベルアドレス
    23 struct LABEL{
    24     char *pName;
     23class Label
     24{
     25public:
     26    std::string name;
    2527    int line;
    2628    DWORD address;
    27 };
     29
     30    Label( const std::string &name, long nativeCodePos )
     31        : name( name )
     32        , line( -1 )
     33        , address( nativeCodePos )
     34    {
     35    }
     36    Label( int line, long nativeCodePos )
     37        : name( "" )
     38        , line( line )
     39        , address( nativeCodePos )
     40    {
     41    }
     42};
     43typedef std::vector<Label> Labels;
    2844
    2945//プロシージャの種類
  • trunk/abdev/BasicCompiler_Common/Compile.cpp

    r253 r260  
    2121
    2222//ラベルアドレス
    23 LABEL *pLabelNames;
    24 int MaxLabelNum;
     23Labels labels;
    2524
    2625//グローバル変数初期バッファ
     
    122121    if(Command[0]=='*'&&IsVariableTopChar(Command[1])){
    123122        //Goto先ラベル
    124         pLabelNames=(LABEL *)HeapReAlloc(hHeap,0,pLabelNames,(MaxLabelNum+1)*sizeof(LABEL));
    125         pLabelNames[MaxLabelNum].pName=(char *)HeapAlloc(hHeap,0,lstrlen(Command+1)+1);
    126         lstrcpy(pLabelNames[MaxLabelNum].pName,Command+1);
    127123        extern int obp;
    128         pLabelNames[MaxLabelNum].address=obp;
    129         MaxLabelNum++;
     124        labels.push_back( Label( Command + 1, obp ) );
    130125
    131126        //書き込みスケジュール
     
    538533
    539534                //Goto先ラベル
    540                 pLabelNames=(LABEL *)HeapReAlloc(hHeap,0,pLabelNames,(MaxLabelNum+1)*sizeof(LABEL));
    541                 pLabelNames[MaxLabelNum].pName=0;
    542                 pLabelNames[MaxLabelNum].line=i3;
    543535                extern int obp;
    544                 pLabelNames[MaxLabelNum].address=obp;
    545                 MaxLabelNum++;
     536                labels.push_back( Label( (long)i3, obp ) );
    546537
    547538                //書き込みスケジュール
Note: See TracChangeset for help on using the changeset viewer.