Changeset 73 in dev for BasicCompiler64


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

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

Location:
BasicCompiler64
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/CParameter.cpp

    r71 r73  
    112112
    113113                //call free
    114                 extern SUBINFO *pSub_free;
     114                extern SubInfo *pSub_free;
    115115                op_call(pSub_free);
    116116            }
     
    135135
    136136        //call calloc
    137         extern SUBINFO *pSub_calloc;
     137        extern SubInfo *pSub_calloc;
    138138        op_call(pSub_calloc);
    139139
  • BasicCompiler64/Compile_CallProc.cpp

    r71 r73  
    88void Call_DebugSys_SaveContext(){
    99    //call _System_GetEip
    10     extern SUBINFO *pSub_System_GetEip;
     10    extern SubInfo *pSub_System_GetEip;
    1111    op_call(pSub_System_GetEip);
    1212
     
    1818
    1919    //call _DebugSys_SaveContext
    20     extern SUBINFO *pSub_DebugSys_SaveContext;
     20    extern SubInfo *pSub_DebugSys_SaveContext;
    2121    op_call(pSub_DebugSys_SaveContext);
    2222}
     
    9696}
    9797
    98 void Opcode_CallProc(const char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType){
     98void Opcode_CallProc(const char *Parameter,SubInfo *psi,DWORD dwFlags,char *ObjectName,int RefType){
    9999    int i2;
    100100
     
    234234
    235235    //エラーチェック
    236     if( !pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->SecondParmNum) ){
     236    if( !pobj_parameter->ErrorCheck(psi->name,psi->realParams,psi->SecondParmNum) ){
    237237        //パラメータにエラーがあるときは処理を終える
    238238        return;
     
    241241    if(psi->dwType==SUBTYPE_MACRO){
    242242        //マクロ関数の場合は、パラメータ省略を考慮する
    243         pobj_parameter->MacroParameterSupport(psi->pRealParmInfo);
     243        pobj_parameter->MacroParameterSupport(psi->realParams);
    244244    }
    245245
     
    248248
    249249    //一時オブジェクトを生成
    250     pobj_parameter->NewTempParameters( psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum );
     250    pobj_parameter->NewTempParameters( psi->name,psi->realParams,psi->RealSecondParmNum );
    251251
    252252    //レジスタ、スタックフレームにセット
    253     pobj_parameter->SetParameter(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum);
     253    pobj_parameter->SetParameter(psi->name,psi->realParams,psi->RealSecondParmNum);
    254254
    255255    if(psi->ReturnType==DEF_STRUCT && psi->isReturnRef == false){
     
    271271
    272272            //call calloc
    273             extern SUBINFO *pSub_calloc;
     273            extern SubInfo *pSub_calloc;
    274274            op_call(pSub_calloc);
    275275
  • BasicCompiler64/Compile_Func.cpp

    r64 r73  
    9595void Opcode_Func_AddressOf( const char *name ){
    9696    extern int cp;
    97     SUBINFO *psi;
     97    SubInfo *psi;
    9898
    9999    extern LONG_PTR ProcPtr_BaseIndex;
     
    101101        //左辺の型にのっとり、オーバーロードを解決
    102102
    103         std::vector<SUBINFO *> subs;
     103        std::vector<SubInfo *> subs;
    104104        GetOverloadSubHash( name, subs );
    105105        if( subs.size() == 0 ){
  • BasicCompiler64/Compile_Object.cpp

    r64 r73  
    3232    ////////////////////////
    3333
    34     std::vector<SUBINFO *> subs;
     34    std::vector<SubInfo *> subs;
    3535    pobj_c->EnumMethod( pobj_c->name, subs );
    3636
    37     SUBINFO *psi;
     37    SubInfo *psi;
    3838    if( subs.size() > 0 ){
    3939        //オーバーロードを解決
     
    121121
    122122        //call _System_GC_malloc_ForObject
    123         extern SUBINFO *pSub_System_GC_malloc_ForObject;
     123        extern SubInfo *pSub_System_GC_malloc_ForObject;
    124124        op_call(pSub_System_GC_malloc_ForObject);
    125125    }
     
    128128
    129129        //call _System_GC_malloc_ForObjectPtr
    130         extern SUBINFO *pSub_System_GC_malloc_ForObjectPtr;
     130        extern SubInfo *pSub_System_GC_malloc_ForObjectPtr;
    131131        op_call(pSub_System_GC_malloc_ForObjectPtr);
    132132    }
     
    328328    if( isSweeping ){
    329329        //call _System_GC_free_for_SweepingDelete
    330         extern SUBINFO *pSub_System_GC_free_for_SweepingDelete;
     330        extern SubInfo *pSub_System_GC_free_for_SweepingDelete;
    331331        op_call(pSub_System_GC_free_for_SweepingDelete);
    332332    }
    333333    else{
    334334        //call free
    335         extern SUBINFO *pSub_free;
     335        extern SubInfo *pSub_free;
    336336        op_call(pSub_free);
    337337    }
  • 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
  • BasicCompiler64/Compile_Set_Var.cpp

    r66 r73  
    107107
    108108                    //call free
    109                     extern SUBINFO *pSub_free;
     109                    extern SubInfo *pSub_free;
    110110                    op_call(pSub_free);
    111111                }
  • BasicCompiler64/Compile_Statement.cpp

    r64 r73  
    55    int i,i2;
    66    char buffer[8192];
    7     SUBINFO *psi;
     7    SubInfo *psi;
    88
    99    for(i=0;;i++){
     
    4444
    4545        //GetSubHash内でエラー提示が行われた場合
    46         if(psi==(SUBINFO *)-1) return;
     46        if(psi==(SubInfo *)-1) return;
    4747
    4848        if(psi==0){
     
    5454
    5555            //GetSubHash内でエラー提示が行われた場合
    56             if(psi==(SUBINFO *)-1) return;
     56            if(psi==(SubInfo *)-1) return;
    5757        }
    5858
     
    722722                    pobj_c=(CClass *)lpIndex;
    723723
    724                     std::vector<SUBINFO *> subs;
     724                    std::vector<SubInfo *> subs;
    725725                    pobj_c->EnumMethod( CALC_EQUAL, subs );
    726726                    if( subs.size() == 0 ){
     
    739739
    740740                    //オーバーロードを解決
    741                     SUBINFO *psi;
     741                    SubInfo *psi;
    742742                    psi=OverloadSolution("==",subs,ppi,iParmNum,NULL);
    743743                    HeapDefaultFree(ppi);
     
    883883
    884884    //call _System_GetEip
    885     extern SUBINFO *pSub_System_GetEip;
     885    extern SubInfo *pSub_System_GetEip;
    886886    op_call(pSub_System_GetEip);
    887887
     
    945945        //戻り値をセット
    946946        if(Parameter[0]){
    947             extern SUBINFO *pCompilingSubInfo;
     947            extern SubInfo *pCompilingSubInfo;
    948948            char *temp;
    949949            if(pCompilingSubInfo->name[0]==1&&pCompilingSubInfo->name[1]==ESC_OPERATOR)
     
    10751075    OpcodeCalc(temp2);
    10761076
    1077     SUBINFO *psi;
     1077    SubInfo *psi;
    10781078    if(bFile) psi=GetSubHash("INPUT_FromFile");
    10791079    else psi=GetSubHash("INPUT_FromPrompt");
     
    11771177    OpcodeCalc(temp2);
    11781178
    1179     SUBINFO *psi;
     1179    SubInfo *psi;
    11801180    if(bFile) psi=GetSubHash("PRINTUSING_ToFile");
    11811181    else psi=GetSubHash("PRINTUSING_ToPrompt");
     
    12811281    if(sw) lstrcat(buffer,"+Ex\"\\r\\n\"");
    12821282
    1283     SUBINFO *psi;
     1283    SubInfo *psi;
    12841284    if(bFile) psi=GetSubHash("PRINT_ToFile");
    12851285    else psi=GetSubHash("PRINT_ToPrompt");
  • BasicCompiler64/Compile_Var.cpp

    r69 r73  
    562562
    563563    char temporary[VN_SIZE];
    564     extern SUBINFO *pCompilingSubInfo;
     564    extern SubInfo *pCompilingSubInfo;
    565565    if(pCompilingSubInfo){
    566566        GetNowStaticVarFullName(VarName,temporary);
  • BasicCompiler64/MakePeHdr.cpp

    r67 r73  
    66// 特殊関数の構造体ポインタ
    77////////////////////////////
    8 SUBINFO
     8SubInfo
    99    *pSub_System_StartupProgram,
    1010    *pSub_DebugSys_StartProc,
     
    352352
    353353        //call _System_Call_Destructor_of_GlobalObject
    354         extern SUBINFO *pSub_System_Call_Destructor_of_GlobalObject;
     354        extern SubInfo *pSub_System_Call_Destructor_of_GlobalObject;
    355355        op_call(pSub_System_Call_Destructor_of_GlobalObject);
    356356
     
    500500        ExportNamesLength=lstrlen(lpExportNames)+1;
    501501
    502         extern SUBINFO **ppSubHash;
    503         SUBINFO *psi,*psi2;
     502        extern SubInfo **ppSubHash;
     503        SubInfo *psi,*psi2;
    504504        while(1){
    505505            //辞書順にサーチ
  • BasicCompiler64/NumOpe_Arithmetic.cpp

    r64 r73  
    559559
    560560        //call pow
    561         extern SUBINFO *pSub_pow;
     561        extern SubInfo *pSub_pow;
    562562        op_call(pSub_pow);
    563563
  • BasicCompiler64/Opcode.h

    r71 r73  
    350350
    351351private:
    352     BOOL _overload_check(PARAMETER_INFO *ppi,int pi_num,TYPEINFO *pReturnTypeInfo,int overload_level);
    353     SUBINFO *OverloadSolutionWithReturnType( const char *name, std::vector<SUBINFO *> &subs );
     352    BOOL _overload_check( Parameters &params, TYPEINFO *pReturnTypeInfo,int overload_level);
     353    SubInfo *OverloadSolutionWithReturnType( const char *name, std::vector<SubInfo *> &subs );
    354354public:
    355     SUBINFO *OverloadSolution( const char *name, std::vector<SUBINFO *> &subs );
     355    SubInfo *OverloadSolution( const char *name, std::vector<SubInfo *> &subs );
    356356
    357357    BOOL ErrorCheck(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
     
    385385#define PROCFLAG_NEW    1
    386386int Opcode_CallProcPtr(char *variable,char *Parameter,PROCPTRINFO *pi,LONG_PTR *plpIndex);
    387 void Opcode_CallProc(const char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType);
     387void Opcode_CallProc(const char *Parameter,SubInfo *psi,DWORD dwFlags,char *ObjectName,int RefType);
    388388int Opcode_CallDllProc(char *Parameter,DECLAREINFO *pdi,LONG_PTR *plpIndex);
    389389
     
    512512void op_fld_ptr_esp(int type);
    513513void op_zero_reg(int reg);
    514 void op_call( SUBINFO *psi );
     514void op_call( SubInfo *psi );
    515515void op_call( DECLAREINFO *pdi );
  • BasicCompiler64/OperatorProc.cpp

    r64 r73  
    2323
    2424    //call free
    25     extern SUBINFO *pSub_free;
     25    extern SubInfo *pSub_free;
    2626    op_call(pSub_free);
    2727}
     
    3232    pobj_c=(CClass *)index_stack[sp-2];
    3333
    34     std::vector<SUBINFO *> subs;
     34    std::vector<SubInfo *> subs;
    3535    pobj_c->EnumMethod( idCalc, subs );
    3636    if( subs.size() == 0 ){
     
    8484    if(idCalc==CALC_EQUAL) lstrcpy(temporary,"==");
    8585    else GetCalcName(idCalc,temporary);
    86     SUBINFO *psi;
     86    SubInfo *psi;
    8787    psi=OverloadSolution(temporary,subs,ppi,iParmNum,pBaseTypeInfo);
    8888
     
    9494    else{
    9595        //オーバーロードされていないが、パラメータ個数が一致しないとき
    96         if(iParmNum!=psi->ParmNum){
     96        if(iParmNum!=psi->params.size()){
    9797            HeapDefaultFree(ppi);
    9898            return -1;
     
    102102    for(i=0;i<iParmNum;i++){
    103103        CheckDifferentType(
    104             psi->pParmInfo[i].type,
    105             psi->pParmInfo[i].u.index,
     104            psi->params[i]->GetBasicType(),
     105            psi->params[i]->GetIndex(),
    106106            ppi[i].type,
    107107            ppi[i].u.index,
     
    113113
    114114    if(bTwoTerm){
    115         if(psi->pRealParmInfo[1].type==DEF_STRUCT&&psi->pRealParmInfo[1].bByVal){
     115        if( psi->realParams[1]->IsStruct() && psi->realParams[1]->IsRef() == false ){
    116116            //一時オブジェクトはメソッド内で破棄される
    117117            bUseHeap[sp-1]=0;
     
    137137
    138138            //call calloc
    139             extern SUBINFO *pSub_calloc;
     139            extern SubInfo *pSub_calloc;
    140140            op_call(pSub_calloc);
    141141
     
    154154        SetOneTermToReg_Whole64Calc(type[sp-1],&reg2);
    155155        pobj_reg->UnlockReg();
    156         if( !psi->pRealParmInfo[1].bByVal ){
     156        if( !psi->realParams[1]->IsRef() == false ){
    157157            //一時参照を作成
    158158            pobj_sf->push( reg2 );
     
    253253
    254254    if(bTwoTerm){
    255         if( !psi->pRealParmInfo[1].bByVal ){
     255        if( !psi->realParams[1]->IsRef() == false ){
    256256            //一時参照を破棄
    257257            pobj_sf->pop();
     
    341341void CallIndexerGetterProc(int reg,CClass *pobj_Class,char *ObjectName,char *Parameter,TYPEINFO &RetTypeInfo){
    342342
    343     std::vector<SUBINFO *> subs;
     343    std::vector<SubInfo *> subs;
    344344    pobj_Class->EnumMethod( CALC_ARRAY_GET, subs );
    345345    if( subs.size() == 0 ){
  • BasicCompiler64/WatchList.cpp

    r64 r73  
    309309ULONG_PTR Debugging_GetThisPtrOffset(LONG_PTR obp_Rip){
    310310    int i;
    311     SUBINFO *psi;
     311    SubInfo *psi;
    312312
    313313    //ripからプロシージャを取得
  • BasicCompiler64/amd64_main.cpp

    r64 r73  
    17911791/////////////////////////////
    17921792
    1793 void op_call( SUBINFO *psi ){
     1793void op_call( SubInfo *psi ){
    17941794    OpBuffer[obp++] = (char)0xE8;
    17951795    pobj_SubAddrSchedule->add( psi, 1 );
  • BasicCompiler64/varlist.cpp

    r69 r73  
    354354    if(pobj_dti->lplpSpBase[i2]==0) return;
    355355
    356     extern SUBINFO **ppSubHash;
    357     SUBINFO *psi;
     356    extern SubInfo **ppSubHash;
     357    SubInfo *psi;
    358358    for(i3=0,sw=0;i3<MAX_HASH;i3++){
    359359        psi=ppSubHash[i3];
     
    586586
    587587    //プロシージャ コンボボックス
    588     extern SUBINFO **ppSubHash;
    589     SUBINFO *psi;
     588    extern SubInfo **ppSubHash;
     589    SubInfo *psi;
    590590    int sw;
    591591    SendMessage(hProcCombo,CB_RESETCONTENT,0,0);
     
    709709
    710710    if(pobj_dti->lplpSpBase[i2]){
    711         extern SUBINFO **ppSubHash;
    712         SUBINFO *psi;
     711        extern SubInfo **ppSubHash;
     712        SubInfo *psi;
    713713        for(i3=0,sw=0;i3<MAX_HASH;i3++){
    714714            psi=ppSubHash[i3];
Note: See TracChangeset for help on using the changeset viewer.