Changeset 73 in dev for BasicCompiler64/Compile_ProcOp.cpp


Ignore:
Timestamp:
Mar 16, 2007, 11:07:14 PM (17 years ago)
Author:
dai_9181
Message:

Parameterクラスを適用。32bit側は動くようになったので、64bitのほうを調整する。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/Compile_ProcOp.cpp

    r64 r73  
    204204    }
    205205}
    206 void CompileBufferInProcedure(SUBINFO *psi){
     206void CompileBufferInProcedure(SubInfo *psi){
    207207    extern char *basbuf;
    208208    extern HANDLE hHeap;
    209     extern SUBINFO **ppSubHash;
     209    extern SubInfo **ppSubHash;
    210210    extern BOOL bDebugCompile;
    211211    int i3,i4,VarSize,BufferSize;
     
    328328        LocalVar=(VARIABLE *)HeapReAlloc(hHeap,0,LocalVar,(MaxLocalVarNum+1)*sizeof(VARIABLE));
    329329
    330         lstrcpy(LocalVar[MaxLocalVarNum].name,psi->pRealParmInfo[i3].name);
     330        lstrcpy(LocalVar[MaxLocalVarNum].name,psi->realParams[i3].GetVarName.c_str());
    331331
    332332        // TODO: パラメータのConst定義の指定が未完成
    333333        LocalVar[MaxLocalVarNum].bConst=false;
    334334
    335         LocalVar[MaxLocalVarNum].bArray=psi->pRealParmInfo[i3].bArray;
    336         memcpy(LocalVar[MaxLocalVarNum].SubScripts,psi->pRealParmInfo[i3].SubScripts,MAX_ARRAYDIM*sizeof(int));
    337 
    338         LocalVar[MaxLocalVarNum].type=psi->pRealParmInfo[i3].type;
     335        LocalVar[MaxLocalVarNum].bArray=psi->realParams[i3].IsArray()?TRUE:FALSE;
     336        memcpy(LocalVar[MaxLocalVarNum].SubScripts,psi->realParams[i3].GetSubScriptsPtr(),MAX_ARRAYDIM*sizeof(int));
     337
     338        LocalVar[MaxLocalVarNum].type=psi->realParams[i3].GetBasicType();
    339339        if(LocalVar[MaxLocalVarNum].type==DEF_OBJECT
    340340            ||LocalVar[MaxLocalVarNum].type==DEF_STRUCT){
     
    343343        }
    344344
    345         LocalVar[MaxLocalVarNum].u.index=psi->pRealParmInfo[i3].u.index;
    346 
    347         if(psi->pRealParmInfo[i3].bByVal&&psi->pRealParmInfo[i3].type==DEF_STRUCT){
     345        LocalVar[MaxLocalVarNum].u.index=psi->realParams[i3].GetIndex();
     346
     347        if(psi->realParams[i3].IsRef() == false&&psi->realParams[i3].IsStruct()){
    348348            //構造体のByValパラメータ
    349349            LocalVar[MaxLocalVarNum].fRef=REF_PARAMETER | OBJECT_PARAMETER;
     
    351351        }
    352352        else{
    353             if(psi->pRealParmInfo[i3].bByVal&&psi->pRealParmInfo[i3].bArray==0){
     353            if(psi->realParams[i3].IsRef() == false&&psi->realParams[i3].IsArray()){
    354354                LocalVar[MaxLocalVarNum].fRef=0;
    355355                VarSize=GetTypeSize(LocalVar[MaxLocalVarNum].type,LocalVar[MaxLocalVarNum].u.index);
     
    383383
    384384    //コンパイル中の関数
    385     extern SUBINFO *pCompilingSubInfo;
     385    extern SubInfo *pCompilingSubInfo;
    386386    pCompilingSubInfo=psi;
    387387
     
    396396    for(i3=psi->RealParmNum-1;i3>=0;i3--){
    397397        if(i3==3){
    398             if(IsRealNumberType(psi->pRealParmInfo[i3].type)&&psi->pRealParmInfo[i3].bByVal){
     398            if(psi->realParams[i3].IsReal()&&psi->realParams[i3].IsRef() == false){
    399399                //movsd qword ptr[rsp+0x20],xmm3
    400400                op_movsd_MR(REG_XMM3,REG_RSP,0x20,MOD_BASE_DISP32);
     
    406406        }
    407407        if(i3==2){
    408             if(IsRealNumberType(psi->pRealParmInfo[i3].type)&&psi->pRealParmInfo[i3].bByVal){
     408            if(psi->realParams[i3].IsReal()&&psi->realParams[i3].IsRef() == false){
    409409                //movsd qword ptr[rsp+0x18],xmm2
    410410                op_movsd_MR(REG_XMM2,REG_RSP,0x18,MOD_BASE_DISP32);
     
    416416        }
    417417        if(i3==1){
    418             if(IsRealNumberType(psi->pRealParmInfo[i3].type)&&psi->pRealParmInfo[i3].bByVal){
     418            if(psi->realParams[i3].IsReal()&&psi->realParams[i3].IsRef() == false){
    419419                //movsd qword ptr[rsp+0x10],xmm1
    420420                op_movsd_MR(REG_XMM1,REG_RSP,0x10,MOD_BASE_DISP32);
     
    426426        }
    427427        if(i3==0){
    428             if(IsRealNumberType(psi->pRealParmInfo[i3].type)&&psi->pRealParmInfo[i3].bByVal){
     428            if(psi->realParams[i3].IsReal()&&psi->realParams[i3].IsRef() == false){
    429429                //movsd qword ptr[rsp+0x8],xmm0
    430430                op_movsd_MR(REG_XMM0,REG_RSP,0x8,MOD_BASE_DISP32);
     
    497497
    498498        //call _DebugSys_StartProc
    499         extern SUBINFO *pSub_DebugSys_StartProc;
     499        extern SubInfo *pSub_DebugSys_StartProc;
    500500        op_call(pSub_DebugSys_StartProc);
    501501    }
     
    720720    if(bDebugCompile&&bDebugSupportProc==0){
    721721        //call _DebugSys_EndProc
    722         extern SUBINFO *pSub_DebugSys_EndProc;
     722        extern SubInfo *pSub_DebugSys_EndProc;
    723723        op_call(pSub_DebugSys_EndProc);
    724724    }
     
    819819}
    820820void CompileLocal(){
    821     extern SUBINFO **ppSubHash;
     821    extern SubInfo **ppSubHash;
    822822    int i2;
    823     SUBINFO *psi;
     823    SubInfo *psi;
    824824
    825825    extern BOOL bDll;
     
    835835    //_System_InitStaticLocalVariablesは一番最後にコンパイル
    836836    //※一般関数内の静的変数オブジェクトをすべて収集しなければならない
    837     extern SUBINFO *pSub_System_InitStaticLocalVariables;
     837    extern SubInfo *pSub_System_InitStaticLocalVariables;
    838838    pSub_System_InitStaticLocalVariables->bCompile=1;
    839839
    840840    //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
    841     extern SUBINFO *pSub_System_Call_Destructor_of_GlobalObject;
     841    extern SubInfo *pSub_System_Call_Destructor_of_GlobalObject;
    842842    pSub_System_Call_Destructor_of_GlobalObject->bCompile=1;
    843843
Note: See TracChangeset for help on using the changeset viewer.