Ignore:
Timestamp:
Jul 12, 2007, 2:58:26 AM (17 years ago)
Author:
dai_9181
Message:

コード全体のリファクタリングを実施

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/WatchList.cpp

    r182 r206  
     1#include "stdafx.h"
     2
    13#include <jenga/include/smoothie/Smoothie.h>
     4
     5#include <Compiler.h>
    26
    37#include "common.h"
     
    1216#include "debug.h"
    1317
    14 int Debugging_GetArray( const int *SubScripts,char *array,const Type &type,LONG_PTR *plpOffset);
     18int Debugging_GetArray( const Subscripts &subscripts,char *array,const Type &type,LONG_PTR *plpOffset);
    1519
    1620ULONG_PTR Debugging_GetVarPtr(RELATIVE_VAR *pRelativeVar){
     
    117121    char lpPtrOffset[VN_SIZE];  //第2次配列
    118122    char NestMember[VN_SIZE];   //入れ子メンバ
    119     CClass::RefType refType;
     123    ReferenceKind refType;
    120124    lstrcpy(VarName,member);
    121125    if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember, refType ) ) return 0;
     
    145149    //ポインタ変数の場合
    146150    if( resultType.IsPointer() ){
    147         if(pMember->SubScripts[0]==-1){
     151        if( pMember->GetSubscripts().size() == 0 ){
    148152            lstrcpy(lpPtrOffset,array);
    149153            array[0]=0;
     
    159163        //配列オフセット
    160164        i2=Debugging_GetArray(
    161             pMember->SubScripts,
     165            pMember->GetSubscripts(),
    162166            array,
    163167            resultType,
     
    172176        }
    173177    }
    174     else if(pMember->SubScripts[0]!=-1){
     178    else if( pMember->GetSubscripts().size() > 0 ){
    175179        resultType.SetBasicType( resultType.GetBasicType() | FLAG_PTR );
    176180    }
     
    180184
    181185        if( resultType.IsObject() || resultType.IsStruct() ){
    182             if( refType != CClass::Dot ) return 0;
     186            if( refType != RefDot ) return 0;
    183187
    184188            if( resultType.IsObject() ){
     
    195199
    196200            if(lpPtrOffset[0]){
    197                 if( refType != CClass::Dot ) return 0;
     201                if( refType != RefDot ) return 0;
    198202
    199203                //直接参照に切り替え
     
    203207            }
    204208            else{
    205                 if( refType != CClass::Pointer ) return 0;
     209                if( refType != RefPointer ) return 0;
    206210
    207211                extern HANDLE hDebugProcess;
     
    235239    return 1;
    236240}
    237 int Debugging_GetArray( const int *SubScripts,char *array,const Type &type,LONG_PTR *plpOffset){
     241int Debugging_GetArray( const Subscripts &subscripts,char *array,const Type &type,LONG_PTR *plpOffset){
    238242    extern HANDLE hHeap;
    239243    int i,i2,i3,i4,i5,array_offset;
     
    254258        }
    255259        if(array[i]==','||array[i]=='\0'){
    256             if(SubScripts[i3]==-1){
     260            if( i3 >= (int)subscripts.size() )
     261            {
    257262                for(i3--;i3>=0;i3--) HeapDefaultFree(pParm[i3]);
    258263                return 0;
     
    267272
    268273            if(array[i]=='\0'){
    269                 if(SubScripts[i3]!=-1){
     274                if( i3 < (int)subscripts.size() )
     275                {
    270276                    for(i3--;i3>=0;i3--) HeapDefaultFree(pParm[i3]);
    271277                    return 0;
     
    302308        i5=(int)i64data;
    303309
    304         for(i2=i+1,i4=1;i2<i3;i2++) i4*=SubScripts[i2]+1;
     310        for(i2=i+1,i4=1;i2<i3;i2++) i4*=subscripts[i2]+1;
    305311
    306312        array_offset+=i5*i4;
     
    316322}
    317323ULONG_PTR Debugging_GetThisPtrOffset(LONG_PTR obp_Rip){
    318     GlobalProc *pUserProc = GetSubFromObp(obp_Rip);
    319 
    320     BOOST_FOREACH( Variable *pVar, pUserProc->localVars ){
     324    UserProc *pUserProc = GetSubFromObp(obp_Rip);
     325
     326    BOOST_FOREACH( Variable *pVar, pUserProc->GetLocalVars() ){
    321327        if( pVar->GetName() == "_System_LocalThis" ){
    322             return pVar->offset;
     328            return pVar->GetOffsetAddress();
    323329        }
    324330    }
    325331    return 0;
    326332}
    327 int Debugging_GetVarOffset( char *variable,RELATIVE_VAR *pRelativeVar, Type &resultType, int *pss){
     333int Debugging_GetVarOffset( char *variable,RELATIVE_VAR *pRelativeVar, Type &resultType, Subscripts *pResultSubscripts){
    328334    extern HANDLE hDebugProcess;
    329335    int i2,i3;
     
    333339
    334340    lstrcpy(VarName,variable);
    335     CClass::RefType refType;
     341    ReferenceKind refType;
    336342    GetVarFormatString(VarName,array,lpPtrOffset,member,refType);
    337343
    338     const int *pSubScripts;
     344    const Subscripts *pSubscripts;
    339345    bool isArray;
    340346
     
    344350    /////////////////
    345351    if( UserProc::IsLocalAreaCompiling() ){
    346         const Variable *pVar = UserProc::CompilingUserProc().localVars.Find( Symbol( VarName ) );
     352        const Variable *pVar = UserProc::CompilingUserProc().GetLocalVars().Find( Symbol( VarName ) );
    347353
    348354        if( pVar ){
    349355            //ポインタ変数の場合
    350             if( pVar->IsPointer() ){
     356            if( pVar->GetType().IsPointer() ){
    351357                if( !pVar->IsArray() ){
    352358                    lstrcpy(lpPtrOffset,array);
     
    358364            }
    359365
    360             pRelativeVar->offset = pVar->offset;
     366            pRelativeVar->offset = pVar->GetOffsetAddress();
    361367            if( pVar->IsRef() ){
    362368                pRelativeVar->dwKind=VAR_REFLOCAL;
     
    365371                pRelativeVar->dwKind=VAR_LOCAL;
    366372            }
    367             resultType = *pVar;
     373            resultType = pVar->GetType();
    368374            isArray = pVar->IsArray();
    369             pSubScripts = pVar->GetSubScriptsPtr();
    370         }
    371     }
    372 
    373     if(Smoothie::Temp::pCompilingClass){
     375            pSubscripts = &pVar->GetSubscripts();
     376        }
     377    }
     378
     379    if(compiler.pCompilingClass){
    374380        ///////////////////////
    375381        // クラスメンバの参照
     
    385391
    386392            bool isFound = false;
    387             BOOST_FOREACH( CMember *pMember, Smoothie::Temp::pCompilingClass->GetDynamicMembers() ){
     393            BOOST_FOREACH( CMember *pMember, compiler.pCompilingClass->GetDynamicMembers() ){
    388394                if( pMember->GetName() == VarName ){
    389395                    isFound = true;
     
    414420        pRelativeVar->dwKind=VAR_DIRECTMEM;
    415421
    416         i3=Debugging_GetMember(*Smoothie::Temp::pCompilingClass,variable,pRelativeVar,resultType,1);
     422        i3=Debugging_GetMember(*compiler.pCompilingClass,variable,pRelativeVar,resultType,1);
    417423        if(i3==0){
    418424            //式エラー
     
    434440        ///////////////////
    435441
    436         const Variable *pVar = globalVars.Find( VarName );
     442        const Variable *pVar = compiler.GetMeta().GetGlobalVars().Find( VarName );
    437443        if( !pVar ){
    438444            //一致しないとき
     
    441447
    442448        //ポインタ変数の場合
    443         if( pVar->IsPointer() ){
     449        if( pVar->GetType().IsPointer() ){
    444450            if( !pVar->IsArray() ){
    445451                lstrcpy(lpPtrOffset,array);
     
    451457        }
    452458
    453         pRelativeVar->offset=pVar->offset;
     459        pRelativeVar->offset=pVar->GetOffsetAddress();
    454460        if(pVar->IsRef()) pRelativeVar->dwKind=VAR_REFGLOBAL;
    455461        else pRelativeVar->dwKind=VAR_GLOBAL;
    456         resultType = *pVar;
     462        resultType = pVar->GetType();
    457463        isArray = pVar->IsArray();
    458         pSubScripts=pVar->GetSubScriptsPtr();
     464        pSubscripts = &pVar->GetSubscripts();
    459465    }
    460466
     
    463469        //配列の先頭ポインタを示す場合
    464470        resultType.SetBasicType( resultType.GetBasicType() | FLAG_PTR );
    465         if(pss) memcpy(pss,pSubScripts,MAX_ARRAYDIM*sizeof(int));
     471        if( pResultSubscripts )
     472        {
     473            (*pResultSubscripts) = *pSubscripts;
     474        }
    466475        return 1;
    467476    }
    468477
    469478    if(array[0]){
    470         i3=Debugging_GetArray(pSubScripts,array,resultType,&pRelativeVar->offset);
     479        i3=Debugging_GetArray( *pSubscripts, array,resultType,&pRelativeVar->offset);
    471480        if(i3==0){
    472481            //式エラー
     
    481490        if( resultType.IsObject() || resultType.IsStruct() ){
    482491            //実態オブジェクトのメンバを参照(obj.member)
    483             if( refType != CClass::Dot ){
     492            if( refType != RefDot ){
    484493                return 0;
    485494            }
     
    499508            if(lpPtrOffset[0]){
    500509                //pObj[n].member
    501                 if( refType != CClass::Dot ) return 0;
     510                if( refType != RefDot ) return 0;
    502511                Debugging_SetRelativeOffset(resultType,pRelativeVar,lpPtrOffset);
    503512
     
    514523            else{
    515524                //pObj->member
    516                 if( refType != CClass::Pointer ) return 0;
     525                if( refType != RefPointer ) return 0;
    517526
    518527                pRelativeVar->offset=Debugging_GetVarPtr(pRelativeVar);
Note: See TracChangeset for help on using the changeset viewer.