Changeset 62 in dev for BasicCompiler32/Compile_Var.cpp


Ignore:
Timestamp:
Feb 22, 2007, 3:57:56 AM (17 years ago)
Author:
dai_9181
Message:

グローバル変数に対してByRefを指定できるようにした

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_Var.cpp

    r56 r62  
    614614    pRelativeVar->offset=GlobalVar[i].offset;
    615615    pRelativeVar->bOffsetOffset=0;
    616     pRelativeVar->dwKind=VAR_GLOBAL;
     616    if(GlobalVar[i].fRef){
     617        // 参照型
     618        pRelativeVar->dwKind = VAR_REFGLOBAL;
     619    }
     620    else pRelativeVar->dwKind=VAR_GLOBAL;
    617621    *pType=GlobalVar[i].type;
    618622    lpIndex=GlobalVar[i].u.index;
     
    11801184        GetNowStaticVarFullName(VarName,temporary);
    11811185
    1182         AddGlobalVariable(temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
     1186        AddGlobalVariable(isRef, temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
    11831187
    11841188        /*
     
    11931197            /////////////////////////
    11941198
    1195             AddGlobalVariable(VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
     1199            AddGlobalVariable(isRef, VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
    11961200        }
    11971201        else{
     
    13651369        }
    13661370    }
     1371    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     1372        if(pRelativeVar->bOffsetOffset){
     1373            //mov eax,ecx
     1374            OpBuffer[obp++]=(char)0x8B;
     1375            OpBuffer[obp++]=(char)0xC1;
     1376
     1377            //add eax,dword ptr[offset]
     1378            op_add_RM( sizeof(long), REG_EAX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     1379        }
     1380        else{
     1381            //mov eax,dword ptr[offset]
     1382            op_mov_RM( sizeof(long), REG_EAX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     1383        }
     1384        obp-=sizeof(long);
     1385        pobj_GlobalVarSchedule->add();
     1386        obp+=sizeof(long);
     1387    }
    13671388    else if(pRelativeVar->dwKind==VAR_LOCAL){
    13681389        if(pRelativeVar->bOffsetOffset){
Note: See TracChangeset for help on using the changeset viewer.