Ignore:
Timestamp:
Aug 25, 2008, 5:26:44 PM (16 years ago)
Author:
イグトランス (egtra)
Message:

改行コード変換などを高速化

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/BasicCompiler_Common/Intermediate_Step1.cpp

    r465 r735  
    77void ChangeReturnCode(char *buffer)
    88{
    9     int i;
    10 
    119    bool isMustChange = false;
    12     for( i=0; ; i++ ){
     10    for( int i=0; ; i++ ){
    1311        if( buffer[i] == '\0' ){
    1412            break;
     
    5351#endif
    5452
    55     //改行コードのCRLFをLFに変換
    56     for(int i=0,i2=0;;i++,i2++){
    57         if(buffer[i]=='\r'&&buffer[i+1]=='\n') i++;
    58         buffer[i2]=buffer[i];
    59         if(buffer[i]=='\0') break;
    60     }
     53    ChangeReturnCodeImpl(buffer);
    6154}
    6255void DeleteComment(char *buffer){   //注釈「'」の取り除き
    6356    int i,i2,i3,IsStr;
    64     char *temporary;
    65     temporary=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(buffer)+1);
     57    char *temporary=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,lstrlen(buffer)+1);
    6658    for(i=0,i2=0,i3=0,IsStr=0;;i++,i2++){
    6759        if(buffer[i]=='\"') IsStr^=1;
    6860        if(buffer[i]=='\n'||buffer[i]=='\0'){
    69             i2--;
    70             while(temporary[i2]==' '||temporary[i2]=='\t') i2--;
    71             i2++;
     61            if(i2 > 0){
     62                i2--;
     63                while(temporary[i2]==' '||temporary[i2]=='\t') i2--;
     64                i2++;
     65            }
    7266
    7367            if(i3){
     
    10599    }
    106100    lstrcpy(buffer,temporary);
    107     GlobalFree(temporary);
     101    HeapDefaultFree(temporary);
    108102}
    109103void CheckParenthesis(char *buffer){
     
    237231    return 1;
    238232}
     233
     234inline int FindLineEnd(char const *basbuf, int i2){
     235    for(;;i2++){
     236        if(basbuf[i2]=='\n'||basbuf[i2]=='\0') break;
     237    }
     238    return i2;
     239}
     240
    239241void DirectiveCheck(void){
    240242    extern char *basbuf;
     
    273275                compiler.staticLibraryFilePaths.push_back( temporary );
    274276
    275                 for(;;i2++){
    276                     if(basbuf[i2]=='\n'||basbuf[i2]=='\0') break;
    277                 }
     277                i2 = FindLineEnd(basbuf, i2);
    278278                SlideString(basbuf+i2,i-i2);
    279279            }
     
    284284                compiler.SetCoreMark( true );
    285285
    286                 for(;;i2++){
    287                     if(basbuf[i2]=='\n'||basbuf[i2]=='\0') break;
    288                 }
     286                i2 = FindLineEnd(basbuf, i2);
    289287                SlideString(basbuf+i2,i-i2);
    290288            }
     
    292290                //#noprompt
    293291                //旧機能なので、無視
    294                 for(;;i2++){
    295                     if(basbuf[i2]=='\n'||basbuf[i2]=='\0') break;
    296                 }
     292                i2 = FindLineEnd(basbuf, i2);
    297293                SlideString(basbuf+i2,i-i2);
    298294            }
     
    300296                //#strict
    301297                //旧機能なので、無視
    302                 for(;;i2++){
    303                     if(basbuf[i2]=='\n'||basbuf[i2]=='\0') break;
    304                 }
     298                i2 = FindLineEnd(basbuf, i2);
    305299                SlideString(basbuf+i2,i-i2);
    306300            }
     
    308302                //#struct code
    309303                //旧機能なので、無視
    310                 for(;;i2++){
    311                     if(basbuf[i2]=='\n'||basbuf[i2]=='\0') break;
    312                 }
     304                i2 = FindLineEnd(basbuf, i2);
    313305                SlideString(basbuf+i2,i-i2);
    314306            }
     
    332324                lstrcpy(ResourceFileName,temporary);
    333325
    334                 for(;;i2++){
    335                     if(basbuf[i2]=='\n'||basbuf[i2]=='\0') break;
    336                 }
     326                i2 = FindLineEnd(basbuf, i2);
    337327                SlideString(basbuf+i2,i-i2);
    338328            }
Note: See TracChangeset for help on using the changeset viewer.