Changeset 739 in dev for trunk


Ignore:
Timestamp:
Sep 6, 2008, 11:32:10 PM (16 years ago)
Author:
dai
Message:

BasicSource::GetLineFromIndex関数を導入。

Location:
trunk/ab5.0/abdev
Files:
3 edited

Legend:

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

    r677 r739  
    644644        extern HWND hMainDlg;
    645645        //"デバッグ情報の取得に失敗"
    646         MessageBox(hMainDlg,STRING_DEBUG_FAILED,"ActiveBasic error",MB_OK);
     646        MyAssertMsg( false, STRING_DEBUG_FAILED );
    647647        return 0;
    648648    }
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Source.h

    r735 r739  
    211211    void _ResetLength()
    212212    {
    213         length = strlen( buffer );
    214     }
     213        length = static_cast<int>(strlen( buffer ));
     214    }
     215
     216    // 指定したインデックスが何行目かを取得
     217    bool GetLineFromIndex( int index, int &result ) const;
    215218
    216219    const IncludedFilesRelation &GetIncludedFilesRelation() const
  • trunk/ab5.0/abdev/ab_common/src/Lexical/Source.cpp

    r735 r739  
    353353
    354354void BasicSource::ChangeReturnLineChar(){
    355     int i,i2;
     355    int i;
    356356
    357357    bool isMustChange = false;
     
    801801}
    802802
     803// 指定したインデックスが何行目かを取得
     804bool BasicSource::GetLineFromIndex( int index, int &result ) const
     805{
     806    result = 0;
     807    for( int i=2; i<index; i++ )
     808    {
     809        if( this->buffer[i] == '\n' )
     810        {
     811            result ++;
     812        }
     813        if( this->buffer[i] == '\0' )
     814        {
     815            return false;
     816        }
     817    }
     818    return true;
     819}
     820
    803821void BasicSource::SetBuffer( const char *buffer ){
    804822    this->buffer = (char *)calloc( strlen(buffer) + 1, 1 );
     
    869887bool BasicSource::GetLineInfo( int sourceCodePos, int &line, std::string &filePath ) const
    870888{
     889    const char *buffer = this->GetBuffer();
     890    if( this->GetLength() < sourceCodePos )
     891    {
     892        char temp[256];
     893        strncpy( temp, buffer, 100 );
     894        strcat( temp, "..." );
     895        MyAssertMsg( false, ( (std::string)"下記ソースコードの" + Jenga::Common::ToString( sourceCodePos ) + "バイト目(存在しない箇所)を参照しようとした。\n\n" + temp ).c_str() );
     896        return false;
     897    }
     898
     899    int i = sourceCodePos;
    871900    int i2,i3,i4,i5;
    872 
    873     const char *buffer = GetBuffer();
    874     int i = sourceCodePos;
    875 
    876901    if(buffer[i]=='\n') i--;
    877     for(i3=0,i2=0;i3<i;i3++){
    878         if(buffer[i3]=='\n') i2++;
    879         if(buffer[i3]=='\0') return 0;
    880     }
     902    bool result = this->GetLineFromIndex( i, i2 );
     903    MyAssert( result );
    881904
    882905    if( includedFilesRelation.GetLineCounts() <= i2 )
    883906    {
    884         //Jenga::Throw( "BasicSource::GetLineInfoメソッドで不正な行の情報を取得しようとした" );
     907        MyAssertMsg( false, "BasicSource::GetLineInfoメソッドで不正な行の情報を取得しようとした" );
    885908
    886909        //ファイル・行番号を特定できなかった場合
     
    897920    for(i3=0,i5=0;i5<i4;i3++){
    898921        if(buffer[i3]=='\n') i5++;
    899         if(buffer[i3]=='\0') return 0;
     922        if(buffer[i3]=='\0')
     923        {
     924            MyAssert( false );
     925            return false;
     926        }
    900927    }
    901928    for(i5=0;i4<i2;i3++){
     
    910937            }
    911938        }
    912         if(buffer[i3]=='\0') return 0;
     939        if(buffer[i3]=='\0')
     940        {
     941            MyAssert( false );
     942            return false;
     943        }
    913944    }
    914945
     
    919950    filePath = includedFilesRelation.GetFilePath( i2 );
    920951
    921     return 1;
     952    return true;
    922953}
    923954
Note: See TracChangeset for help on using the changeset viewer.