Changeset 140 in dev for BasicCompiler32/Compile_Var.cpp


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
  • BasicCompiler32/Compile_Var.cpp

    r138 r140  
    158158}
    159159bool _member_offset(bool isErrorEnabled, bool isWriteAccess, const CClass &objClass, const char *member, RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess){
    160     int i;
    161 
    162160
    163161    //////////////////////////////////////
     
    178176    ////////////////////////////
    179177
    180     int offset = objClass.GetMemberOffset( VarName, &i );
    181     if(i==objClass.iMemberNum){
     178    int memberIndex;
     179    int offset = objClass.GetMemberOffset( VarName, &memberIndex );
     180    if(memberIndex==objClass.GetDynamicMembers().size()){
    182181        if(isErrorEnabled) SetError(103,VarName,cp);
    183182        return false;
    184183    }
    185184
    186     CMember *pMember=objClass.ppobj_Member[i];
     185    CMember *pMember=objClass.GetDynamicMembers()[memberIndex];
    187186
    188187
     
    351350
    352351bool GetVarOffset(bool isErrorEnabled,bool isWriteAccess,const char *NameBuffer,RELATIVE_VAR *pRelativeVar,Type &resultType,int *pss){
    353     int i;
    354352    char variable[VN_SIZE];
    355353
     
    387385        //////////////////
    388386
    389         const Variable *pVar = UserProc::CompilingUserProc().localVars.BackSearch( VarName );
     387        const Variable *pVar = UserProc::CompilingUserProc().localVars.BackSearch( Symbol( VarName ) );
    390388        if( pVar ){
    391389            //ポインタ変数の場合
     
    444442            //クラス内メンバを参照するとき(通常)
    445443
    446             for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
    447                 if( pobj_CompilingClass->ppobj_Member[i]->GetName() == VarName ){
     444            bool isFound = false;
     445            BOOST_FOREACH( CMember *pMember, pobj_CompilingClass->GetDynamicMembers() ){
     446                if( pMember->GetName() == VarName ){
     447                    isFound = true;
    448448                    break;
    449449                }
    450450            }
    451             if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
     451            if( !isFound ) goto NonClassMember;
    452452        }
    453453
     
    494494            GetNowStaticVarFullName(VarName,temporary);
    495495
    496             pVar = globalVars.Find( temporary );
     496            pVar = globalVars.Find( Symbol( temporary ) );
    497497            if( pVar ){
    498498                goto GlobalOk;
     
    525525            char temp2[VN_SIZE];
    526526            sprintf(temp2,"%s.%s",VarName,temporary);
    527             pVar = globalVars.Find( temp2 );
     527            pVar = globalVars.Find( Symbol( temp2 ) );
    528528            if( pVar ){
    529529                lstrcpy(member,tempMember);
     
    537537            char temp2[VN_SIZE];
    538538            sprintf(temp2,"%s.%s",pobj_CompilingClass->GetName().c_str(),VarName);
    539             pVar = globalVars.Find( temp2 );
     539            pVar = globalVars.Find( Symbol( temp2 ) );
    540540            if( pVar ){
    541541                goto GlobalOk;
     
    547547        /////////////////////
    548548
    549         pVar = globalVars.BackSearch( VarName );
     549        pVar = globalVars.BackSearch( Symbol( VarName ) );
    550550        if( pVar ){
    551551            goto GlobalOk;
     
    716716bool SetInitGlobalData(int offset,const Type &type,const int *SubScripts,const char *lpszInitBuf){
    717717    extern BYTE *initGlobalBuf;
    718     int i,i2,i3;
     718    int i2,i3;
    719719    char temporary[VN_SIZE];
    720720    char InitBuf[VN_SIZE];
     
    729729        if(SubScripts[0]!=-1){
    730730            typeSize*=JumpSubScripts(SubScripts+1);
    731             i=0;
     731            int i=0;
    732732            i2=0;
    733733            while(1){
     
    751751            const CClass &objClass = type.GetClass();
    752752
    753             for(i=0,i2=0;i2<objClass.iMemberNum;i2++){
     753            int i = 0;
     754            BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
     755                if(InitBuf[i]=='\0'){
     756                    SetError(41,0,cp);
     757                    return false;
     758                }
     759
    754760                i=GetOneParameter(InitBuf,i,temporary);
    755761
    756                 i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->GetName().c_str(), NULL );
     762                i3=objClass.GetMemberOffset( pMember->GetName().c_str(), NULL );
    757763
    758764                if(!SetInitGlobalData(offset+i3,
    759                     objClass.ppobj_Member[i2]->GetType(),
    760                     objClass.ppobj_Member[i2]->SubScripts,
     765                    pMember->GetType(),
     766                    pMember->SubScripts,
    761767                    temporary)) return false;
    762 
    763                 if(InitBuf[i]=='\0') break;
    764             }
    765             if(i2+1!=objClass.iMemberNum){
    766                 SetError(41,0,cp);
    767                 return false;
    768768            }
    769769            return true;
     
    889889            const CClass &objClass = type.GetClass();
    890890
    891             for(i=0,i2=0;i2<objClass.iMemberNum;i2++){
     891            int i = 0;
     892            BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
     893                if(InitBuf[i]=='\0'){
     894                    SetError(41,0,cp);
     895                    return false;
     896                }
     897
    892898                i=GetOneParameter(InitBuf,i,temporary);
    893899
    894                 i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->GetName().c_str(), NULL );
     900                i3=objClass.GetMemberOffset( pMember->GetName().c_str(), NULL );
    895901
    896902                if(!InitLocalVar(offset+i3,
    897                     objClass.ppobj_Member[i2]->GetType(),
    898                     objClass.ppobj_Member[i2]->SubScripts,
     903                    pMember->GetType(),
     904                    pMember->SubScripts,
    899905                    temporary)) return false;
    900906
    901907                if(InitBuf[i]=='\0') break;
    902             }
    903             if(i2+1!=objClass.iMemberNum){
    904                 SetError(41,0,cp);
    905                 return 0;
    906908            }
    907909            return true;
     
    10781080        /////////////////
    10791081
    1080         if( UserProc::CompilingUserProc().localVars.DuplicateCheck( VarName ) ){
     1082        if( UserProc::CompilingUserProc().localVars.DuplicateCheck( Symbol( VarName ) ) ){
    10811083            //2重定義のエラー
    10821084            SetError(15,VarName,cp);
Note: See TracChangeset for help on using the changeset viewer.