Changeset 140 in dev for BasicCompiler64/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
  • BasicCompiler64/Compile_Var.cpp

    r138 r140  
    187187}
    188188bool _member_offset(bool isErrorEnabled, bool isWriteAccess, const CClass &objClass, const char *member, RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess){
    189     int i;
    190 
    191189
    192190    //////////////////////////////////////
     
    207205    ////////////////////////////
    208206
    209     int offset = objClass.GetMemberOffset( VarName, &i );
    210     if(i==objClass.iMemberNum){
     207    int memberIndex;
     208    int offset = objClass.GetMemberOffset( VarName, &memberIndex );
     209    if( memberIndex == objClass.GetDynamicMembers().size() ){
    211210        if(isErrorEnabled) SetError(103,VarName,cp);
    212211        return false;
    213212    }
    214213
    215     CMember *pMember=objClass.ppobj_Member[i];
     214    CMember *pMember = objClass.GetDynamicMembers()[memberIndex];
    216215
    217216
     
    379378}
    380379bool GetVarOffset(bool isErrorEnabled,bool isWriteAccess,const char *NameBuffer,RELATIVE_VAR *pRelativeVar,Type &resultType,int *pss){
    381     int i;
    382380    char variable[VN_SIZE];
    383381
     
    471469            //クラス内メンバを参照するとき(通常)
    472470
    473             for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
    474                 if( pobj_CompilingClass->ppobj_Member[i]->GetName() == VarName ){
     471            bool isFound = false;
     472            BOOST_FOREACH( CMember *pMember, pobj_CompilingClass->GetDynamicMembers() ){
     473                if( pMember->GetName() == VarName ){
     474                    isFound = true;
    475475                    break;
    476476                }
    477477            }
    478             if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
     478            if( !isFound ) goto NonClassMember;
    479479        }
    480480
     
    773773            const CClass &objClass = type.GetClass();
    774774
    775             for(i=0,i2=0;i2<objClass.iMemberNum;i2++){
     775            int i = 0;
     776            BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
     777                if(InitBuf[i]=='\0'){
     778                    SetError(41,0,cp);
     779                    return false;
     780                }
     781
    776782                i=GetOneParameter(InitBuf,i,temporary);
    777783
    778                 i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->GetName().c_str(), NULL );
     784                i3=objClass.GetMemberOffset( pMember->GetName().c_str(), NULL );
    779785
    780786                if(!SetInitGlobalData(offset+i3,
    781                     objClass.ppobj_Member[i2]->GetType(),
    782                     objClass.ppobj_Member[i2]->SubScripts,
     787                    pMember->GetType(),
     788                    pMember->SubScripts,
    783789                    temporary)) return false;
    784 
    785                 if(InitBuf[i]=='\0') break;
    786             }
    787             if(i2+1!=objClass.iMemberNum){
    788                 SetError(41,0,cp);
    789                 return false;
    790790            }
    791791            return true;
     
    911911            const CClass &objClass = type.GetClass();
    912912
    913             for(i=0,i2=0;i2<objClass.iMemberNum;i2++){
     913            int i = 0;
     914            BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
     915                if(InitBuf[i]=='\0'){
     916                    SetError(41,0,cp);
     917                    return false;
     918                }
     919
    914920                i=GetOneParameter(InitBuf,i,temporary);
    915921
    916                 i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->GetName().c_str(), NULL );
     922                i3=objClass.GetMemberOffset( pMember->GetName().c_str(), NULL );
    917923
    918924                if(!InitLocalVar(offset+i3,
    919                     objClass.ppobj_Member[i2]->GetType(),
    920                     objClass.ppobj_Member[i2]->SubScripts,
     925                    pMember->GetType(),
     926                    pMember->SubScripts,
    921927                    temporary)) return false;
    922928
    923929                if(InitBuf[i]=='\0') break;
    924             }
    925             if(i2+1!=objClass.iMemberNum){
    926                 SetError(41,0,cp);
    927                 return 0;
    928930            }
    929931            return true;
Note: See TracChangeset for help on using the changeset viewer.