Changeset 31 in dev for BasicCompiler64


Ignore:
Timestamp:
Jan 13, 2007, 4:26:50 AM (18 years ago)
Author:
dai_9181
Message:

_System_LocalThis(見えないThisポインタパラメータ)を通常のパラメータ保有領域ではなく、リアルパラメータ保有領域に移動した。
メソッドとグローバル関数のオーバーロードに対応(DLL関数オーバーロードには未対応)。

Location:
BasicCompiler64
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/CParameter.cpp

    r28 r31  
    664664            else{
    665665                //型チェック
     666                // TODO: _System_ReturnValueが考慮されていない?
    666667                if(bHas_System_LocalThis) i3=i2-1;
    667668                else i3=i2;
  • BasicCompiler64/Compile_CallProc.cpp

    r29 r31  
    6868
    6969
    70         ret_type=Opcode_CallProc(Parameter,psi,plpRetIndex,0,ObjectName,RefType);
     70        Opcode_CallProc(Parameter,psi,0,ObjectName,RefType);
     71        if( plpRetIndex ){
     72            *plpRetIndex = psi->u.ReturnIndex;
     73        }
     74        return psi->ReturnType;
    7175    }
    7276    else if(idProc==PROC_DLL){
     
    139143    if(psi){
    140144        //呼び出し
    141         int type;
    142         LONG_PTR lpIndex;
    143         type=Opcode_CallProc(Parameter,psi,&lpIndex,0,ObjectName,RefType);
    144 
    145         if(pRetTypeInfo){
    146             pRetTypeInfo->type=type;
    147             pRetTypeInfo->u.lpIndex=lpIndex;
     145        Opcode_CallProc(Parameter,psi,0,ObjectName,RefType);
     146
     147        if( pRetTypeInfo ){
     148            pRetTypeInfo->type = psi->ReturnType;
     149            pRetTypeInfo->u.lpIndex = psi->u.ReturnIndex;
    148150        }
    149151    }
     
    175177
    176178    //エラーチェック
    177     pobj_parameter->ErrorCheck(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum);
     179    if( !pobj_parameter->ErrorCheck(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum) ){
     180        //パラメータにエラーがあるときは処理を終える
     181        return pi->ReturnType;
     182    }
    178183
    179184    //スタックフレームに存在する既存のパラメータをバックアップ
     
    213218    delete pobj_parameter;
    214219
    215     if(plpIndex) *plpIndex=pi->u.ReturnIndex;
    216 
    217220    return pi->ReturnType;
    218221}
    219222
    220 int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType){
     223void Opcode_CallProc(char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType){
    221224    int i,i2;
    222225
     
    224227        if(lstrcmpi(psi->name,"Print")==0){
    225228            Opcode_Print(Parameter,0);
    226             return -1;
     229            return;
    227230        }
    228231        if(lstrcmpi(psi->name,"Input")==0){
    229232            Opcode_Input(Parameter);
    230             return -1;
     233            return;
    231234        }
    232235        if(lstrcmpi(psi->name,"Write")==0){
    233236            Opcode_Print(Parameter,1);
    234             return -1;
     237            return;
    235238        }
    236239    }
     
    282285            if( !pMethod ){
    283286                SetError(300,NULL,cp);
    284                 return -1;
     287                return;
    285288            }
    286289
     
    301304                if(dwAccess==ACCESS_NON){
    302305                    SetError(109,psi->name,cp);
    303                     return -1;
     306                    return;
    304307                }
    305308            }
     
    308311                    dwAccess==ACCESS_NON){
    309312                    SetError(109,psi->name,cp);
    310                     return -1;
     313                    return;
    311314                }
    312315                if(dwAccess==ACCESS_PROTECTED){
    313316                    SetError(110,psi->name,cp);
    314                     return -1;
     317                    return;
    315318                }
    316319            }
     
    320323            if(dwAccess==ACCESS_NON){
    321324                SetError(109,psi->name,cp);
    322                 return -1;
     325                return;
    323326            }
    324327        }
     
    355358
    356359    //エラーチェック
    357     pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->SecondParmNum);
     360    if( !pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->SecondParmNum) ){
     361        //パラメータにエラーがあるときは処理を終える
     362        return;
     363    }
    358364
    359365    if(psi->dwType==SUBTYPE_MACRO){
     
    425431                if( pMethod->isConst ){
    426432                    //Constアクセスが可能なメソッドの場合
    427                     if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return -1;
     433                    if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return;
    428434                }
    429435                else{
    430436                    //Constアクセスが不可能なメソッドの場合
    431                     if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return -1;
     437                    if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return;
    432438                }
    433439
     
    509515    //パラメータオブジェクトを破棄
    510516    delete pobj_parameter;
    511 
    512     if(plpIndex) *plpIndex=psi->u.ReturnIndex;
    513 
    514     return psi->ReturnType;
    515517}
    516518
     
    536538
    537539    //エラーチェック
    538     pobj_parameter->ErrorCheck(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum);
     540    if( !pobj_parameter->ErrorCheck(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum) ){
     541        //パラメータにエラーがあるときは処理を終える
     542        return pdi->ReturnType;
     543    }
    539544
    540545    //スタックフレームに存在する既存のパラメータをバックアップ
  • BasicCompiler64/Compile_Object.cpp

    r28 r31  
    4848    Opcode_CallProc(CreateParameter,
    4949        psi,
    50         0,
    5150        PROCFLAG_NEW,"",0);
    5251
  • BasicCompiler64/Compile_ProcOp.cpp

    r28 r31  
    547547                        pobj_CompilingClass->ppobj_Method[i3]->psi,
    548548                        0,
    549                         0,
    550549                        "",
    551550                        0);
     
    556555                    Opcode_CallProc("",
    557556                        pobj_CompilingClass->ppobj_Method[i3]->psi,
    558                         0,
    559557                        0,
    560558                        "",
     
    663661                        pobj_CompilingClass->ppobj_Method[i3]->psi,
    664662                        0,
    665                         0,
    666663                        "",
    667664                        0);
  • BasicCompiler64/Compile_Statement.cpp

    r11 r31  
    6060            if(psi->dwType!=SUBTYPE_MACRO) SetError(10,Command,cp);
    6161
    62             Opcode_CallProc("",psi,0,0,"",0);
     62            Opcode_CallProc("",psi,0,"",0);
    6363
    6464            return;
     
    838838                    }
    839839
    840                     PARAMETER_INFO *ppi;
     840                    PARAMETER_INFO *ppi = (PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);
    841841                    int iParmNum=0;
    842 
    843                     //_System_LocalThis
    844                     ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);
    845                     ppi[iParmNum].bArray=0;
    846                     ppi[iParmNum].bByVal=0;
    847                     ppi[iParmNum].name=0;
    848                     ppi[iParmNum].type=DEF_PTR_VOID;
    849                     ppi[iParmNum].u.index=-1;
    850                     ppi[iParmNum].SubScripts[0]=-1;
    851                     iParmNum++;
    852 
    853842                    ppi[iParmNum].bArray=0;
    854843                    ppi[iParmNum].bByVal=0;
     
    12061195        return;
    12071196    }
    1208     Opcode_CallProc(buffer,psi,0,0,"",0);
     1197    Opcode_CallProc(buffer,psi,0,"",0);
    12091198}
    12101199void Opcode_PrintUsing(char *Parameter,char *buffer,BOOL bFile){
     
    13051294        return;
    13061295    }
    1307     Opcode_CallProc(buffer,psi,0,0,"",0);
     1296    Opcode_CallProc(buffer,psi,0,"",0);
    13081297}
    13091298void Opcode_Print(char *Parameter,BOOL bWrite){
     
    14111400        return;
    14121401    }
    1413     Opcode_CallProc(buffer,psi,0,0,"",0);
     1402    Opcode_CallProc(buffer,psi,0,"",0);
    14141403}
    14151404
  • BasicCompiler64/Opcode.h

    r20 r31  
    389389#define PROCFLAG_NEW    1
    390390int Opcode_CallProcPtr(char *variable,char *Parameter,PROCPTRINFO *pi,LONG_PTR *plpIndex);
    391 int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType);
     391void Opcode_CallProc(char *Parameter,SUBINFO *psi,DWORD dwFlags,char *ObjectName,int RefType);
    392392int Opcode_CallDllProc(char *Parameter,DECLAREINFO *pdi,LONG_PTR *plpIndex);
    393393
  • BasicCompiler64/OperatorProc.cpp

    r11 r31  
    6969    /////////////////////////////////////////////
    7070
    71     PARAMETER_INFO *ppi;
     71    PARAMETER_INFO *ppi = (PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);
    7272    int iParmNum=0;
    73 
    74     //_System_LocalThis
    75     ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);
    76     ppi[iParmNum].bArray=0;
    77     ppi[iParmNum].bByVal=0;
    78     ppi[iParmNum].name=0;
    79     ppi[iParmNum].type=DEF_PTR_VOID;
    80     ppi[iParmNum].u.index=-1;
    81     ppi[iParmNum].SubScripts[0]=-1;
    82     iParmNum++;
    8373
    8474    if(bTwoTerm){
     
    461451    //////////////////////////////////////////////////////
    462452
    463         RetTypeInfo.type=Opcode_CallProc(Parameter,ppsi[0],&RetTypeInfo.u.lpIndex,0,ObjectName,DEF_OBJECT);
     453        Opcode_CallProc(Parameter,ppsi[0],0,ObjectName,DEF_OBJECT);
     454        RetTypeInfo.type = ppsi[0]->ReturnType;
     455        RetTypeInfo.u.lpIndex = ppsi[0]->u.ReturnIndex;
    464456
    465457        //mov reg,rax
Note: See TracChangeset for help on using the changeset viewer.