Ignore:
Timestamp:
Mar 21, 2007, 9:26:56 PM (18 years ago)
Author:
dai_9181
Message:

TYPEINFO→Typeへのリファクタリングを実施。32bitが未完成。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_CallProc.cpp

    r75 r76  
    3232
    3333
    34 int Opcode_CallProcPtr(char *variable,char *Parameter,ProcPointer *pProcPointer,LONG_PTR *plpIndex){
    35     extern HANDLE hHeap;
    36     int i;
    37 
     34bool Opcode_CallProcPtr( const char *variable, const char *lpszParms,ProcPointer *pProcPointer){
    3835
    3936    extern BOOL bDebugCompile;
     
    4946    //パラメータオブジェクトを生成
    5047    ParamImpl *pobj_parameter=0;
    51     pobj_parameter=new ParamImpl(Parameter);
     48    pobj_parameter=new ParamImpl(lpszParms);
    5249
    5350    //エラーチェック
    5451    if( !pobj_parameter->ErrorCheck(variable,pProcPointer->Params() ) ){
    5552        //パラメータにエラーがあるときは処理を終える
    56         return pProcPointer->ReturnType().GetBasicType();
     53        return false;
    5754    }
    5855
     
    6966    ////////////////////////
    7067    RELATIVE_VAR RelativeVar;
    71     LONG_PTR lp;
    72     GetVarOffsetReadOnly(variable,&i,&RelativeVar,&lp);
     68    GetVarOffsetReadOnly(variable,&RelativeVar,Type());
    7369    SetVarPtrToEax(&RelativeVar);
    7470
     
    8985    delete pobj_parameter;
    9086
    91     if(plpIndex) *plpIndex=pProcPointer->ReturnType().GetIndex();
    92 
    93     return pProcPointer->ReturnType().GetBasicType();
     87    return true;
    9488}
    9589
    96 void Opcode_CallProc(const char *Parameter,UserProc *pUserProc,DWORD dwFlags,char *ObjectName,int RefType){
     90bool Opcode_CallProc(const char *Parameter,UserProc *pUserProc,DWORD dwFlags,const char *ObjectName,int RefType){
    9791    int i2;
    9892
     
    10094        if( lstrcmpi( pUserProc->GetName().c_str(), "Print" ) == 0 ){
    10195            Opcode_Print(Parameter,0);
    102             return;
     96            return true;
    10397        }
    10498        if( lstrcmpi( pUserProc->GetName().c_str(), "Input" ) == 0 ){
    10599            Opcode_Input(Parameter);
    106             return;
     100            return true;
    107101        }
    108102        if( lstrcmpi( pUserProc->GetName().c_str(), "Write" ) == 0 ){
    109103            Opcode_Print(Parameter,1);
    110             return;
     104            return true;
    111105        }
    112106    }
     
    115109
    116110    bool isStatic = false;
    117     CClass *pobj_c = NULL;
     111    const CClass *pobj_c = NULL;
    118112    CMethod *pMethod = NULL;
    119113    if( pUserProc->GetParentClassPtr() ){
     
    126120            else{
    127121                //"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
    128                 int type = GetVarType(ObjectName,(LONG_PTR *)&pobj_c,0);
    129                 if(!(NATURAL_TYPE(type)==DEF_OBJECT)){
     122                Type varType;
     123                GetVarType( ObjectName, varType, false );
     124                pobj_c = &varType.GetClass();
     125                if( NATURAL_TYPE( varType.GetBasicType() ) != DEF_OBJECT ){
    130126                    pobj_c=pobj_DBClass->check(ObjectName);
    131127                    if( pobj_c ){
     
    160156            if( !pMethod ){
    161157                SetError(300,NULL,cp);
    162                 return;
     158                return false;
    163159            }
    164160
     
    179175                if(dwAccess==ACCESS_NON){
    180176                    SetError(109,pUserProc->GetName(),cp);
    181                     return;
     177                    return false;
    182178                }
    183179            }
     
    186182                    dwAccess==ACCESS_NON){
    187183                    SetError(109,pUserProc->GetName(),cp);
    188                     return;
     184                    return false;
    189185                }
    190186                if(dwAccess==ACCESS_PROTECTED){
    191187                    SetError(110,pUserProc->GetName(),cp);
    192                     return;
     188                    return false;
    193189                }
    194190            }
     
    198194            if(dwAccess==ACCESS_NON){
    199195                SetError(109,pUserProc->GetName(),cp);
    200                 return;
    201             }
    202         }
    203     }
    204 
     196                return false;
     197            }
     198        }
     199    }
    205200
    206201
     
    220215
    221216
    222 
    223217    ////////////////////////
    224218    // パラメータをセット
     
    232226    if( !pobj_parameter->ErrorCheck(pUserProc->GetName(),pUserProc->RealParams(),pUserProc->GetSecondParmNum() ) ){
    233227        //パラメータにエラーがあるときは処理を終える
    234         return;
     228        return false;
    235229    }
    236230
     
    278272                if( pMethod->isConst ){
    279273                    //Constアクセスが可能なメソッドの場合
    280                     if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return;
     274                    if( !GetVarOffsetReadOnly( ObjectName, &RelativeVar, Type() ) ){
     275                        return false;
     276                    }
    281277                }
    282278                else{
    283279                    //Constアクセスが不可能なメソッドの場合
    284                     if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return;
     280                    if( !GetVarOffsetReadWrite( ObjectName, &RelativeVar, Type() ) ){
     281                        return false;
     282                    }
    285283                }
    286284
     
    351349    //パラメータオブジェクトを破棄
    352350    delete pobj_parameter;
     351
     352    return true;
    353353}
    354354
    355 int Opcode_CallDllProc(char *Parameter,DllProc *pDllProc,LONG_PTR *plpIndex){
    356     char *temporary;
    357 
    358     temporary=(char *)HeapAlloc(hHeap,0,lstrlen(Parameter)+1);
     355bool Opcode_CallDllProc( const char *lpszParms, DllProc *pDllProc ){
    359356
    360357    extern BOOL bDebugCompile;
     
    371368    //パラメータオブジェクトを生成
    372369    ParamImpl *pobj_parameter=0;
    373     pobj_parameter=new ParamImpl(Parameter);
     370    pobj_parameter=new ParamImpl(lpszParms);
    374371
    375372    //エラーチェック
    376373    if( !pobj_parameter->ErrorCheck( pDllProc->GetName(), pDllProc->Params() ) ){
    377374        //パラメータにエラーがあるときは処理を終える
    378         return pDllProc->ReturnType().GetBasicType();
     375        return false;
    379376    }
    380377
     
    406403    delete pobj_parameter;
    407404
    408     if(plpIndex) *plpIndex=pDllProc->ReturnType().GetIndex();
    409 
    410     HeapDefaultFree(temporary);
    411 
    412     return pDllProc->ReturnType().GetBasicType();
     405    return true;
    413406}
Note: See TracChangeset for help on using the changeset viewer.