Changeset 46 in dev for BasicCompiler64


Ignore:
Timestamp:
Feb 6, 2007, 1:19:17 AM (18 years ago)
Author:
dai_9181
Message:

VarPtrの戻り値の型をVoidPtrではなく、ポインタレベルを増加した型にした。
関連関数のパラメータにconstを適用。

Location:
BasicCompiler64
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/CParameter.cpp

    r45 r46  
    140140    return 1;
    141141}
    142 SUBINFO *CParameter::OverloadSolutionWithReturnType(char *name,SUBINFO **ppsi,int num){
     142SUBINFO *CParameter::OverloadSolutionWithReturnType(const char *name,SUBINFO **ppsi,int num){
    143143    int i,sw=0;
    144144    SUBINFO *psi;
     
    210210}
    211211
    212 SUBINFO *CParameter::OverloadSolution(char *name,SUBINFO **ppsi,int num){
     212SUBINFO *CParameter::OverloadSolution(const char *name,SUBINFO **ppsi,int num){
    213213    int i,sw=0;
    214214    SUBINFO *psi;
     
    283283}
    284284
    285 BOOL CParameter::ErrorCheck(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
     285BOOL CParameter::ErrorCheck(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
    286286    if(ParmsNum>pi_num){
    287287        if(ppi[pi_num-1].type!=DEF_ELLIPSE){
     
    330330}
    331331
    332 void CParameter::NewTempParameters( char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum ){
     332void CParameter::NewTempParameters( const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum ){
    333333    ///////////////////////////////////////////////////////
    334334    // 一時オブジェクトをあらかじめスタックに積んでおく
     
    539539}
    540540
    541 void CParameter::SetParameter(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
     541void CParameter::SetParameter(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
    542542    ///////////////////////////////////////////////////////////
    543543    // パラメータをレジスタ及びスタックフレームにセット
     
    559559
    560560    //戻り値用の変数名を取得
    561     char *lpszVarNameToReturn;
    562     if(FuncName[0]==1&&FuncName[1]==ESC_OPERATOR) lpszVarNameToReturn="_System_ReturnValue";
    563     else lpszVarNameToReturn=FuncName;
     561    const char *lpszVarNameToReturn = (FuncName[0]==1&&FuncName[1]==ESC_OPERATOR)?"_System_ReturnValue":FuncName;
    564562
    565563    //パラメータをレジスタとスタックに格納
  • BasicCompiler64/Compile_Calc.cpp

    r40 r46  
    285285    if( VarType == DEF_OBJECT && VarRelativeVar.dwKind == VAR_REFLOCAL ){
    286286        // 参照型オブジェクトへの代入(初期化)はポインタ変数と同様の処理に値する
    287         VarType = PTR_LEVEL_UP( VarType );
     287        PTR_LEVEL_UP( VarType );
    288288
    289289        VarRelativeVar.dwKind = VAR_LOCAL;
     
    291291        if( CalcType == DEF_OBJECT ){
    292292            //右辺値が実体オブジェクトのときは、参照をコピー
    293             CalcType = PTR_LEVEL_UP( DEF_OBJECT );
     293            PTR_LEVEL_UP( CalcType );
    294294        }
    295295    }
  • BasicCompiler64/Compile_CallProc.cpp

    r45 r46  
    9090        FuncId=(int)(_int64)pInfo;
    9191
    92         ret_type=Opcode_CallFunc(Parameter,FuncId);
     92        TYPEINFO ReturnTypeInfo = { DEF_LONG, NULL };
     93        Opcode_CallFunc( Parameter, FuncId, ReturnTypeInfo );
     94        if( plpRetIndex ){
     95            *plpRetIndex = ReturnTypeInfo.u.lpIndex;
     96        }
     97        return ReturnTypeInfo.type;
    9398    }
    9499    else if(idProc==PROC_PTR){
  • BasicCompiler64/Compile_Func.cpp

    r28 r46  
    3939    return 0;
    4040}
    41 void Opcode_Func_Len(char *Parameter){
     41void Opcode_Func_Len( const char *Parameter ){
    4242    int type,TypeSize;
    4343    LONG_PTR lpIndex;
     
    4646    type=GetVarType(Parameter,&lpIndex,0);
    4747
    48     char *tempParm=Parameter;
     48    const char *tempParm=Parameter;
    4949    char temporary[VN_SIZE];
    5050    char temp2[32];
     
    9393    return;
    9494}
    95 void Opcode_Func_AddressOf(char *name){
     95void Opcode_Func_AddressOf( const char *name ){
    9696    extern int cp;
    9797    SUBINFO *psi;
     
    103103        SUBINFO **ppsi;
    104104        int num;
    105         ppsi=GetOverloadSubHash(name,&num);
     105        ppsi=GetOverloadSubHash( name, &num );
    106106        if(!num){
    107107            HeapDefaultFree(ppsi);
     
    202202    psi->bUse=1;
    203203}
    204 void Opcode_Func_SizeOf(char *Parameter){
     204void Opcode_Func_SizeOf( const char *Parameter ){
    205205    int type,size;
    206206    LONG_PTR lpIndex;
     
    212212    op_mov_RV(sizeof(_int64),REG_RAX,size);
    213213}
    214 void Opcode_Func_VarPtr(char *Parameter){
    215     int type;
     214void Opcode_Func_VarPtr( const char *Parameter, TYPEINFO &ReturnTypeInfo ){
    216215    RELATIVE_VAR RelativeVar;
    217216
    218217    //変数のアドレスを取得
    219     if(!GetVarOffsetReadOnly(Parameter,&type,&RelativeVar,0)) return;
     218    if(!GetVarOffsetReadOnly( Parameter, &ReturnTypeInfo.type, &RelativeVar, &ReturnTypeInfo.u.lpIndex )) return;
     219
     220    PTR_LEVEL_UP( ReturnTypeInfo.type );
    220221
    221222    SetVarPtrToReg(REG_RAX,&RelativeVar);
    222223}
    223 void Opcode_Func_GetPtrData(char *Parameter,int type){
     224void Opcode_Func_GetPtrData( const char *Parameter, const int type ){
    224225    int i2;
    225226
     
    246247}
    247248
    248 int Opcode_CallFunc(char *Parameter,int FuncNum){
     249void Opcode_CallFunc( const char *Parameter, const int FuncNum, TYPEINFO &ReturnTypeInfo ){
    249250    switch(FuncNum){
    250251        case FUNC_LEN:
    251252            Opcode_Func_Len(Parameter);
    252             return DEF_LONG;
     253            ReturnTypeInfo.type = DEF_LONG;
     254            break;
    253255        case FUNC_ADDRESSOF:
    254256            Opcode_Func_AddressOf(Parameter);
    255             return DEF_PTR_VOID;
     257            ReturnTypeInfo.type = DEF_PTR_VOID;
     258            break;
    256259        case FUNC_SIZEOF:
    257260            Opcode_Func_SizeOf(Parameter);
    258             return DEF_LONG;
     261            ReturnTypeInfo.type = DEF_LONG;
     262            break;
    259263        case FUNC_VARPTR:
    260             Opcode_Func_VarPtr(Parameter);
    261             return DEF_PTR_VOID;
     264            Opcode_Func_VarPtr( Parameter, ReturnTypeInfo );
     265            break;
    262266
    263267        case FUNC_GETDOUBLE:
    264268            Opcode_Func_GetPtrData(Parameter,DEF_DOUBLE);
    265             return DEF_DOUBLE;
     269            ReturnTypeInfo.type = DEF_DOUBLE;
     270            break;
    266271        case FUNC_GETSINGLE:
    267272            Opcode_Func_GetPtrData(Parameter,DEF_SINGLE);
    268             return DEF_SINGLE;
     273            ReturnTypeInfo.type = DEF_SINGLE;
     274            break;
    269275        case FUNC_GETQWORD:
    270276            Opcode_Func_GetPtrData(Parameter,DEF_QWORD);
    271             return DEF_QWORD;
     277            ReturnTypeInfo.type = DEF_QWORD;
     278            break;
    272279        case FUNC_GETDWORD:
    273280            Opcode_Func_GetPtrData(Parameter,DEF_DWORD);
    274             return DEF_DWORD;
     281            ReturnTypeInfo.type = DEF_DWORD;
     282            break;
    275283        case FUNC_GETWORD:
    276284            Opcode_Func_GetPtrData(Parameter,DEF_WORD);
    277             return DEF_WORD;
     285            ReturnTypeInfo.type = DEF_WORD;
     286            break;
    278287        case FUNC_GETBYTE:
    279288            Opcode_Func_GetPtrData(Parameter,DEF_BYTE);
    280             return DEF_BYTE;
    281     }
    282     return 0;
    283 }
     289            ReturnTypeInfo.type = DEF_BYTE;
     290            break;
     291    }
     292}
  • BasicCompiler64/Opcode.h

    r40 r46  
    345345private:
    346346    BOOL _overload_check(PARAMETER_INFO *ppi,int pi_num,TYPEINFO *pReturnTypeInfo,int overload_level);
    347     SUBINFO *OverloadSolutionWithReturnType(char *name,SUBINFO **ppsi,int num);
     347    SUBINFO *OverloadSolutionWithReturnType(const char *name,SUBINFO **ppsi,int num);
    348348public:
    349     SUBINFO *OverloadSolution(char *name,SUBINFO **ppsi,int num);
    350 
    351     BOOL ErrorCheck(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
     349    SUBINFO *OverloadSolution(const char *name,SUBINFO **ppsi,int num);
     350
     351    BOOL ErrorCheck(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
    352352    void MacroParameterSupport(PARAMETER_INFO *ppi);
    353353    void SetObjectParameter(int reg,CClass *pobj_Class,LPSTR Parameter);
    354354
    355355    //一時オブジェクトパラメータの生成と破棄
    356     void NewTempParameters( char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum );
     356    void NewTempParameters( const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum );
    357357    void DeleteTempParameters();
    358358
    359     void SetParameter(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
     359    void SetParameter(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
    360360
    361361    void BackupParameter(int pi_num);
     
    390390int GetFunctionType(int FuncNum);
    391391int GetFunctionFromName(char *FuncName);
    392 int Opcode_CallFunc(char *Parameter,int FuncNum);
     392void Opcode_CallFunc( const char *Parameter, const int FuncNum, TYPEINFO &ReturnTypeInfo );
    393393
    394394//OperatorProc.cpp
Note: See TracChangeset for help on using the changeset viewer.