Ignore:
Timestamp:
Jun 15, 2007, 4:00:25 AM (17 years ago)
Author:
dai_9181
Message:

traceログ機能を搭載
動的メンバをstl::vectorにまとめた
シンボルをクラス化した

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/VariableOpe.cpp

    r138 r140  
    547547bool GetMemberType( const CClass &objClass, const char *lpszMember, Type &resultType, BOOL bPrivateAccess, bool isErrorEnabled){
    548548    extern int cp;
    549     int i;
    550549
    551550    //クラス、配列の構成要素を解析する
     
    558557    if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,refType)) return false;
    559558
    560     for(i=0;i<objClass.iMemberNum;i++){
    561         if( objClass.ppobj_Member[i]->GetName() == VarName ){
     559    bool isFound = false;
     560    CMember *pMember = NULL;
     561    BOOST_FOREACH( pMember, objClass.GetDynamicMembers() ){
     562        if( pMember->GetName() == VarName ){
     563            isFound = true;
    562564            break;
    563565        }
    564566    }
    565     if(i==objClass.iMemberNum){
     567    if( !isFound ){
    566568        if(isErrorEnabled) SetError(103,VarName,cp);
    567569        return false;
     
    571573    if( &objClass == pobj_CompilingClass ){
    572574        //同一クラスオブジェクトの場合はプライベートアクセスを容認する
    573         if( objClass.ppobj_Member[i]->IsNoneAccess() ){
     575        if( pMember->IsNoneAccess() ){
    574576            if(isErrorEnabled) SetError(107,VarName,cp);
    575577            return false;
     
    577579    }
    578580    else{
    579         if(( bPrivateAccess==0 && objClass.ppobj_Member[i]->IsPrivate() )||
    580             objClass.ppobj_Member[i]->IsNoneAccess() ){
     581        if(( bPrivateAccess==0 && pMember->IsPrivate() )||
     582            pMember->IsNoneAccess() ){
    581583            if(isErrorEnabled) SetError(107,VarName,cp);
    582584            return false;
    583585        }
    584         else if( bPrivateAccess==0 && objClass.ppobj_Member[i]->IsProtected() ){
     586        else if( bPrivateAccess==0 && pMember->IsProtected() ){
    585587            if(isErrorEnabled) SetError(108,VarName,cp);
    586588            return false;
     
    588590    }
    589591
    590     resultType = objClass.ppobj_Member[i]->GetType();
     592    resultType = pMember->GetType();
    591593
    592594    //ポインタ変数の場合
    593595    if( resultType.IsPointer() ){
    594         if(objClass.ppobj_Member[i]->SubScripts[0]==-1){
     596        if(pMember->SubScripts[0]==-1){
    595597            lstrcpy(lpPtrOffset,array);
    596598            array[0]=0;
     
    607609        //入れ子構造の場合
    608610
    609         return GetMemberType( objClass.ppobj_Member[i]->GetType().GetClass(),
     611        return GetMemberType( pMember->GetType().GetClass(),
    610612            NestMember,
    611613            resultType,
     
    614616    }
    615617
    616     if(array[0]==0&&objClass.ppobj_Member[i]->SubScripts[0]!=-1){
     618    if(array[0]==0&&pMember->SubScripts[0]!=-1){
    617619        resultType.SetBasicType( resultType.GetBasicType() | FLAG_PTR );
    618620        return true;
     
    633635}
    634636bool GetVarType( const char *nameBuffer, Type &resultType, bool isErrorEnabled){
    635     int i;
    636637    char variable[VN_SIZE];
    637638
     
    668669        /////////////////
    669670
    670         pVar = UserProc::CompilingUserProc().localVars.BackSearch( VarName );
     671        pVar = UserProc::CompilingUserProc().localVars.BackSearch( Symbol( VarName ) );
    671672        if( pVar ){
    672673            goto ok;
     
    693694            //クラス内メンバを参照するとき(通常)
    694695
    695             for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
    696                 if( pobj_CompilingClass->ppobj_Member[i]->GetName() == VarName ){
     696            bool isFound = false;
     697            BOOST_FOREACH( CMember *pMember, pobj_CompilingClass->GetDynamicMembers() ){
     698                if( pMember->GetName() == VarName ){
     699                    isFound = true;
    697700                    break;
    698701                }
    699702            }
    700             if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
     703            if( !isFound ) goto NonClassMember;
    701704        }
    702705
     
    715718        GetNowStaticVarFullName(VarName,temporary);
    716719
    717         pVar = globalVars.Find( temporary );
     720        pVar = globalVars.Find( Symbol( temporary ) );
    718721        if( pVar ){
    719722            goto ok;
     
    744747        sprintf(temp2,"%s.%s",VarName,temporary);
    745748
    746         pVar = globalVars.Find( temp2 );
     749        pVar = globalVars.Find( Symbol( temp2 ) );
    747750        if( pVar ){
    748751            lstrcpy(member,tempMember);
     
    757760        sprintf(temp2,"%s.%s",pobj_CompilingClass->GetName().c_str(),VarName);
    758761
    759         pVar = globalVars.Find( temp2 );
     762        pVar = globalVars.Find( Symbol( temp2 ) );
    760763        if( pVar ){
    761764            goto ok;
     
    768771    ////////////////////
    769772
    770     pVar = globalVars.BackSearch( VarName );
     773    pVar = globalVars.BackSearch( Symbol( VarName ) );
    771774    if( pVar ){
    772775        goto ok;
     
    10411044    extern int AllGlobalVarSize;
    10421045
    1043     if( globalVars.DuplicateCheck( name ) ){
     1046    if( globalVars.DuplicateCheck( Symbol( name ) ) ){
    10441047        //2重定義のエラー
    10451048        SetError(15,name,cp);
Note: See TracChangeset for help on using the changeset viewer.