Changeset 46 in dev for BasicCompiler32


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

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

Location:
BasicCompiler32
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/CParameter.cpp

    r45 r46  
    141141    return 1;
    142142}
    143 SUBINFO *CParameter::OverloadSolutionWithReturnType(char *name,SUBINFO **ppsi,int num){
     143SUBINFO *CParameter::OverloadSolutionWithReturnType(const char *name,SUBINFO **ppsi,int num){
    144144    int i,sw=0;
    145145    SUBINFO *psi;
     
    211211}
    212212
    213 SUBINFO *CParameter::OverloadSolution(char *name,SUBINFO **ppsi,int num){
     213SUBINFO *CParameter::OverloadSolution(const char *name,SUBINFO **ppsi,int num){
    214214    int i,sw=0;
    215215    SUBINFO *psi;
     
    285285}
    286286
    287 BOOL CParameter::ErrorCheck(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
     287BOOL CParameter::ErrorCheck(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
    288288    if(ParmsNum>pi_num){
    289289        if(ppi[pi_num-1].type!=DEF_ELLIPSE){
     
    332332}
    333333
    334 void CParameter::NewTempParameters( char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum ){
     334void CParameter::NewTempParameters( const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum ){
    335335    ///////////////////////////////////////////////////////
    336336    // 一時オブジェクトをあらかじめスタックに積んでおく
     
    544544}
    545545
    546 int CParameter::SetParameter(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
     546int CParameter::SetParameter(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
    547547    ///////////////////////////////////////////////////////////
    548548    // パラメータをレジスタ及びスタックフレームにセット
     
    564564
    565565    //戻り値用の変数名を取得
    566     char *lpszVarNameToReturn;
    567     if(FuncName[0]==1&&FuncName[1]==ESC_OPERATOR) lpszVarNameToReturn="_System_ReturnValue";
    568     else lpszVarNameToReturn=FuncName;
     566    const char *lpszVarNameToReturn = (FuncName[0]==1&&FuncName[1]==ESC_OPERATOR)?"_System_ReturnValue":FuncName;
    569567
    570568    //パラメータをレジスタとスタックに格納
  • BasicCompiler32/Compile_Calc.cpp

    r40 r46  
    658658    if( VarType == DEF_OBJECT && VarRelativeVar.dwKind == VAR_REFLOCAL ){
    659659        // 参照型オブジェクトへの代入(初期化)はポインタ変数と同様の処理に値する
    660         VarType = PTR_LEVEL_UP( VarType );
     660        PTR_LEVEL_UP( VarType );
    661661
    662662        VarRelativeVar.dwKind = VAR_LOCAL;
     
    664664        if( CalcType == DEF_OBJECT ){
    665665            //右辺値が実体オブジェクトのときは、参照をコピー
    666             CalcType = PTR_LEVEL_UP( DEF_OBJECT );
     666            PTR_LEVEL_UP( CalcType );
    667667        }
    668668    }
  • BasicCompiler32/Compile_CallProc.cpp

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

    r28 r46  
    4444}
    4545
    46 void Opcode_Func_Fix(char *Parameter){
     46void Opcode_Func_Fix(const char *Parameter){
    4747    int i;
    4848
     
    161161}
    162162
    163 void Opcode_Func_CUDbl(char *Parameter){
     163void Opcode_Func_CUDbl(const char *Parameter){
    164164    int i;
    165165
     
    185185    op_add_esp(8);
    186186}
    187 void Opcode_Func_Len(char *Parameter){
     187void Opcode_Func_Len(const char *Parameter){
    188188    int type,TypeSize;
    189189    LONG_PTR lpIndex;
     
    192192    type=GetVarType(Parameter,&lpIndex,0);
    193193
    194     char *tempParm=Parameter;
     194    const char *tempParm=Parameter;
    195195    char temporary[VN_SIZE];
    196196    char temp2[32];
     
    241241    obp+=sizeof(long);
    242242}
    243 void Opcode_Func_AddressOf(char *name){
     243void Opcode_Func_AddressOf(const char *name){
    244244    extern int cp;
    245245    SUBINFO *psi;
     
    353353    psi->bUse=1;
    354354}
    355 void Opcode_Func_SizeOf(char *Parameter){
     355void Opcode_Func_SizeOf(const char *Parameter){
    356356    int type,size;
    357357    LONG_PTR lpIndex;
     
    370370    obp+=sizeof(long);
    371371}
    372 void Opcode_Func_VarPtr(char *Parameter){
    373     int type;
     372void Opcode_Func_VarPtr( const char *Parameter, TYPEINFO &ReturnTypeInfo ){
    374373    RELATIVE_VAR RelativeVar;
    375374
    376375    //変数のアドレスを取得
    377     if(!GetVarOffsetReadOnly(Parameter,&type,&RelativeVar,0)) return;
     376    if(!GetVarOffsetReadOnly( Parameter, &ReturnTypeInfo.type, &RelativeVar, &ReturnTypeInfo.u.lpIndex )) return;
     377
     378    PTR_LEVEL_UP( ReturnTypeInfo.type );
    378379
    379380    SetVarPtrToEax(&RelativeVar);
    380381}
    381 void Opcode_Func_GetPtrData(char *Parameter,int type){
     382void Opcode_Func_GetPtrData(const char *Parameter,const int type){
    382383    int i2;
    383384
     
    438439}
    439440
    440 int Opcode_CallFunc(char *Parameter,int FuncNum){
     441void Opcode_CallFunc( const char *Parameter, const int FuncNum, TYPEINFO &ReturnTypeInfo ){
    441442    switch(FuncNum){
    442443        case FUNC_FIX:
    443444            Opcode_Func_Fix(Parameter);
    444             return DEF_LONG;
     445            ReturnTypeInfo.type = DEF_LONG;
     446            break;
    445447        case FUNC_CUDBL:
    446448            Opcode_Func_CUDbl(Parameter);
    447             return DEF_DOUBLE;
     449            ReturnTypeInfo.type = DEF_DOUBLE;
     450            break;
    448451        case FUNC_LEN:
    449452            Opcode_Func_Len(Parameter);
    450             return DEF_LONG;
     453            ReturnTypeInfo.type = DEF_LONG;
     454            break;
    451455        case FUNC_ADDRESSOF:
    452456            Opcode_Func_AddressOf(Parameter);
    453             return DEF_PTR_VOID;
     457            ReturnTypeInfo.type = DEF_PTR_VOID;
     458            break;
    454459        case FUNC_SIZEOF:
    455460            Opcode_Func_SizeOf(Parameter);
    456             return DEF_LONG;
     461            ReturnTypeInfo.type = DEF_LONG;
     462            break;
    457463        case FUNC_VARPTR:
    458             Opcode_Func_VarPtr(Parameter);
    459             return DEF_PTR_VOID;
     464            Opcode_Func_VarPtr( Parameter, ReturnTypeInfo );
     465            break;
    460466
    461467        case FUNC_GETDOUBLE:
    462468            Opcode_Func_GetPtrData(Parameter,DEF_DOUBLE);
    463             return DEF_DOUBLE;
     469            ReturnTypeInfo.type = DEF_DOUBLE;
     470            break;
    464471        case FUNC_GETSINGLE:
    465472            Opcode_Func_GetPtrData(Parameter,DEF_SINGLE);
    466             return DEF_SINGLE;
     473            ReturnTypeInfo.type = DEF_SINGLE;
     474            break;
    467475        case FUNC_GETQWORD:
    468476            Opcode_Func_GetPtrData(Parameter,DEF_QWORD);
    469             return DEF_QWORD;
     477            ReturnTypeInfo.type = DEF_QWORD;
     478            break;
    470479        case FUNC_GETDWORD:
    471480            Opcode_Func_GetPtrData(Parameter,DEF_DWORD);
    472             return DEF_DWORD;
     481            ReturnTypeInfo.type = DEF_DWORD;
     482            break;
    473483        case FUNC_GETWORD:
    474484            Opcode_Func_GetPtrData(Parameter,DEF_WORD);
    475             return DEF_WORD;
     485            ReturnTypeInfo.type = DEF_WORD;
     486            break;
    476487        case FUNC_GETBYTE:
    477488            Opcode_Func_GetPtrData(Parameter,DEF_BYTE);
    478             return DEF_BYTE;
    479     }
    480     return 0;
    481 }
     489            ReturnTypeInfo.type = DEF_BYTE;
     490            break;
     491    }
     492}
  • BasicCompiler32/Opcode.h

    r40 r46  
    207207private:
    208208    BOOL _overload_check(PARAMETER_INFO *ppi,int pi_num,TYPEINFO *pReturnTypeInfo,int overload_level);
    209     SUBINFO *OverloadSolutionWithReturnType(char *name,SUBINFO **ppsi,int num);
     209    SUBINFO *OverloadSolutionWithReturnType(const char *name,SUBINFO **ppsi,int num);
    210210public:
    211     SUBINFO *OverloadSolution(char *name,SUBINFO **ppsi,int num);
    212 
    213     BOOL ErrorCheck(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
     211    SUBINFO *OverloadSolution(const char *name,SUBINFO **ppsi,int num);
     212
     213    BOOL ErrorCheck(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
    214214    void MacroParameterSupport(PARAMETER_INFO *ppi);
    215215    void SetObjectParameter(CClass *pobj_Class,LPSTR Parameter);
    216     int SetParameter(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
     216    int SetParameter(const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
    217217
    218218    //一時オブジェクトパラメータの生成と破棄
    219     void NewTempParameters( char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum );
     219    void NewTempParameters( const char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum );
    220220    void DeleteTempParameters();
    221221};
     
    236236int GetFunctionType(int FuncNum);
    237237int GetFunctionFromName(char *FuncName);
    238 int Opcode_CallFunc(char *Parameter,int FuncNum);
     238void Opcode_CallFunc( const char *Parameter, const int FuncNum, TYPEINFO &ReturnTypeInfo );
    239239
    240240//OperatorProc.cpp
Note: See TracChangeset for help on using the changeset viewer.