Changeset 331 in dev


Ignore:
Timestamp:
Sep 27, 2007, 1:47:46 AM (17 years ago)
Author:
dai_9181
Message:

AddressOfの左辺値を加味した処理を簡潔にした

Location:
trunk/abdev
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/CParameter.cpp

    r301 r331  
    233233            }
    234234
    235             extern LONG_PTR ProcPtr_BaseIndex;
    236             LONG_PTR back_ProcPtr_BaseIndex = ProcPtr_BaseIndex;
    237             if( dummyType.IsProcPtr() ){
    238                 ProcPtr_BaseIndex = dummyType.GetIndex();
    239             }
    240             else{
    241                 ProcPtr_BaseIndex=-1;
    242             }
    243 
    244235            BOOL bCalcUseHeap;
    245236            Type calcType;
     
    247238                break;
    248239            }
    249 
    250             ProcPtr_BaseIndex=back_ProcPtr_BaseIndex;
    251240
    252241            if( calcType.IsObject() ){
  • trunk/abdev/BasicCompiler32/Compile_Calc.cpp

    r324 r331  
    517517            void *pProc;
    518518            idProc=GetProc(temporary,(void **)&pProc);
    519             if(idProc){
    520                 CallProc(idProc,pProc,temporary,temp2,Type());
     519            if( idProc )
     520            {
     521                CallProc(
     522                    idProc,
     523                    pProc,
     524                    temporary,
     525                    temp2,
     526                    Type(),         // ベースタイプはなし
     527                    Type()
     528                );
    521529                return;
    522530            }
     
    548556        return;
    549557    }
    550 
    551     extern LONG_PTR ProcPtr_BaseIndex;
    552     if(varType.IsProcPtr()) ProcPtr_BaseIndex=varType.GetIndex();
    553     else ProcPtr_BaseIndex=-1;
    554558
    555559    RELATIVE_VAR VarRelativeVar;
  • trunk/abdev/BasicCompiler32/Compile_Func.cpp

    r325 r331  
    221221    compiler.codeGenerator.op_mov_RV( REG_EAX, typeSize );
    222222}
    223 void Opcode_Func_AddressOf( const char *name ){
     223void Opcode_Func_AddressOf( const char *name, const Type &baseType ){
    224224    extern int cp;
    225225    const UserProc *pUserProc;
    226226
    227     extern LONG_PTR ProcPtr_BaseIndex;
    228     if(ProcPtr_BaseIndex!=-1){
     227    if( baseType.IsProcPtr() )
     228    {
    229229        //左辺の型にのっとり、オーバーロードを解決
    230230
     
    237237
    238238        //オーバーロードを解決
    239         pUserProc=OverloadSolution(name,subs,compiler.GetObjectModule().meta.GetProcPointers()[ProcPtr_BaseIndex]->Params(), Type() );
     239        pUserProc=OverloadSolution(name,subs,compiler.GetObjectModule().meta.GetProcPointers()[baseType.GetIndex()]->Params(), Type() );
    240240
    241241        if(!pUserProc){
     
    477477}
    478478
    479 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &resultType, bool isCallOn ){
     479bool Opcode_CallFunc( const char *Parameter, const int FuncNum, const Type &baseType, Type &resultType, bool isCallOn )
     480{
    480481    switch(FuncNum){
    481482        case FUNC_FIX:
     
    492493            break;
    493494        case FUNC_ADDRESSOF:
    494             if( isCallOn ) Opcode_Func_AddressOf(Parameter);
     495            if( isCallOn ) Opcode_Func_AddressOf( Parameter, baseType );
    495496            resultType.SetBasicType( DEF_PTR_VOID );
    496497            break;
  • trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp

    r319 r331  
    525525                        , compiler.pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str()
    526526                        , temporary
    527                         , dummyType );
     527                        , Type()        // baseTypeはなし
     528                        , dummyType
     529                    );
    528530                }
    529531                else{
  • trunk/abdev/BasicCompiler32/NumOpe.cpp

    r327 r331  
    258258        bool isClassName = false;
    259259        Type leftType;
    260         if( GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){
     260        if( GetTermType( termLeft, Type(), leftType, isLiteral, &isClassName ) ){
    261261            if( isClassName == false && compiler.GetObjectModule().meta.GetBlittableTypes().IsExist( leftType ) ){
    262262                // 左側のオブジェクト部分がBlittable型のとき
     
    347347                ////////////////
    348348
    349                 CallProc(idProc,pInfo,procName,parameter,resultType);
     349                CallProc(idProc,pInfo,procName,parameter, baseType,resultType);
    350350
    351351
  • trunk/abdev/BasicCompiler32/Opcode.h

    r327 r331  
    216216//Compile_Func.cpp
    217217int GetFunctionFromName(char *FuncName);
    218 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &resultType, bool isCallOn = true );
     218bool Opcode_CallFunc( const char *Parameter, const int FuncNum, const Type &baseType, Type &resultType, bool isCallOn = true );
    219219
    220220//OperatorProc.cpp
  • trunk/abdev/BasicCompiler64/CParameter.cpp

    r316 r331  
    282282            temp_reg=reg;
    283283
    284             extern LONG_PTR ProcPtr_BaseIndex;
    285             LONG_PTR back_ProcPtr_BaseIndex = ProcPtr_BaseIndex;
    286             if( dummyType.IsProcPtr() ){
    287                 ProcPtr_BaseIndex = dummyType.GetIndex();
    288             }
    289             else{
    290                 ProcPtr_BaseIndex=-1;
    291             }
    292 
    293284            BOOL bCalcUseHeap;
    294285            Type calcType;
     
    296287                break;
    297288            }
    298 
    299             ProcPtr_BaseIndex=back_ProcPtr_BaseIndex;
    300289
    301290            if( calcType.IsObject() ){
  • trunk/abdev/BasicCompiler64/Compile_Calc.cpp

    r316 r331  
    150150            void *pProc;
    151151            idProc=GetProc(temporary,(void **)&pProc);
    152             if(idProc){
    153                 CallProc(idProc,pProc,temporary,temp2,Type());
     152            if( idProc )
     153            {
     154                CallProc(
     155                    idProc,
     156                    pProc,
     157                    temporary,
     158                    temp2,
     159                    Type(),         // ベースタイプはなし
     160                    Type()
     161                );
    154162                return;
    155163            }
     
    181189        return;
    182190    }
    183 
    184     extern LONG_PTR ProcPtr_BaseIndex;
    185     if(varType.IsProcPtr()) ProcPtr_BaseIndex=varType.GetIndex();
    186     else ProcPtr_BaseIndex=-1;
    187191
    188192    //NumOpe...(rax、またはxmm0に答えが格納される)
  • trunk/abdev/BasicCompiler64/Compile_Func.cpp

    r330 r331  
    7070    return;
    7171}
    72 void Opcode_Func_AddressOf( const char *name ){
     72void Opcode_Func_AddressOf( const char *name, const Type &baseType ){
    7373    extern int cp;
    7474    const UserProc *pUserProc;
    7575
    76     extern LONG_PTR ProcPtr_BaseIndex;
    77     if(ProcPtr_BaseIndex!=-1){
     76    if( baseType.IsProcPtr() )
     77    {
    7878        //左辺の型にのっとり、オーバーロードを解決
    7979
     
    8686
    8787        //オーバーロードを解決
    88         pUserProc=OverloadSolution(name,subs,compiler.GetObjectModule().meta.GetProcPointers()[ProcPtr_BaseIndex]->Params(), Type() );
     88        pUserProc=OverloadSolution(name,subs,compiler.GetObjectModule().meta.GetProcPointers()[baseType.GetIndex()]->Params(), Type() );
    8989
    9090        if(!pUserProc){
     
    299299}
    300300
    301 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &resultType, bool isCallOn ){
     301bool Opcode_CallFunc( const char *Parameter, const int FuncNum, const Type &baseType, Type &resultType, bool isCallOn )
     302{
    302303    switch(FuncNum){
    303304        case FUNC_LEN:
     
    306307            break;
    307308        case FUNC_ADDRESSOF:
    308             if( isCallOn ) Opcode_Func_AddressOf(Parameter);
     309            if( isCallOn ) Opcode_Func_AddressOf( Parameter, baseType );
    309310            resultType.SetBasicType( DEF_PTR_VOID );
    310311            break;
  • trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp

    r319 r331  
    497497                        , compiler.pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str()
    498498                        , temporary
    499                         , dummyType );
     499                        , Type()        // baseTypeはなし
     500                        , dummyType
     501                    );
    500502                }
    501503                else{
  • trunk/abdev/BasicCompiler64/NumOpe.cpp

    r319 r331  
    262262        bool isClassName = false;
    263263        Type leftType;
    264         if( GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){
     264        if( GetTermType( termLeft, Type(), leftType, isLiteral, &isClassName ) ){
    265265            if( isClassName == false && compiler.GetObjectModule().meta.GetBlittableTypes().IsExist( leftType ) ){
    266266                // 左側のオブジェクト部分がBlittable型のとき
     
    354354                ////////////////
    355355
    356                 CallProc(idProc,pInfo,procName,parameter,resultType);
     356                CallProc(idProc,pInfo,procName,parameter, baseType,resultType);
    357357
    358358
  • trunk/abdev/BasicCompiler64/Opcode.h

    r330 r331  
    334334//Compile_Func.cpp
    335335int GetFunctionFromName(char *FuncName);
    336 bool Opcode_CallFunc( const char *Parameter, const int FuncNum, Type &ReturnTypeInfo, bool isCallOn = true );
     336bool Opcode_CallFunc( const char *Parameter, const int FuncNum, const Type &baseType, Type &resultType, bool isCallOn = true );
    337337
    338338//OperatorProc.cpp
  • trunk/abdev/BasicCompiler_Common/BasicCompiler.h

    r266 r331  
    6161
    6262
    63 //関数ポインタのベース タイプ インデックス(左辺の関数ポインタのパラメータを参考に、オーバーロードを解決)
    64 LONG_PTR ProcPtr_BaseIndex;
    65 
    66 
    6763int cp;
    6864
  • trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp

    r301 r331  
    301301}
    302302
    303 bool GetTermType( const char *term, Type &resultType, bool &isLiteral, bool *pIsClassName )
     303bool GetTermType( const char *term, const Type &baseType, Type &resultType, bool &isLiteral, bool *pIsClassName )
    304304{
    305305    char parameter[VN_SIZE];
     
    330330        bool isClassName = false;
    331331        Type leftType;
    332         if( GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){
     332        if( GetTermType( termLeft, Type(), leftType, isLiteral, &isClassName ) ){
    333333            if( isClassName == false && compiler.GetObjectModule().meta.GetBlittableTypes().IsExist( leftType ) ){
    334334                // 左側のオブジェクト部分がBlittable型のとき
     
    340340                    temporary );
    341341
    342                 if( !GetTermType( termLeft, leftType, isLiteral, &isClassName ) ){
     342                if( !GetTermType( termLeft, Type(), leftType, isLiteral, &isClassName ) ){
    343343                    goto globalArea;
    344344                }
     
    446446            ////////////////
    447447
    448             if( !CallProc(idProc,pProc,procName,parameter, resultType, false ) ){
     448            if( !CallProc(idProc,pProc,procName,parameter, baseType, resultType, false ) ){
    449449                return false;
    450450            }
     
    716716
    717717                    bool isLiteral = true;
    718                     if( GetTermType( term, resultType, isLiteral ) ){
     718                    if( GetTermType( term, baseType, resultType, isLiteral ) ){
    719719                        type_stack[sp] = resultType.GetBasicType();
    720720                        index_stack[sp] = resultType.GetIndex();
  • trunk/abdev/BasicCompiler_Common/Object.cpp

    r276 r331  
    6060                temporary,
    6161                Parameter,
     62                Type(),         // baseTypeはなし
    6263                dummyType );
    6364
     
    7273            temporary,
    7374            Parameter,
     75            Type(),         // baseTypeはなし
    7476            dummyType );
    7577    }
  • trunk/abdev/BasicCompiler_Common/Subroutine.cpp

    r327 r331  
    115115}
    116116
    117 bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, Type &resultType, bool isCallOn ){
    118 
     117bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, const Type &baseType, Type &resultType, bool isCallOn )
     118{
    119119    //GetSubHash内でエラー提示が行われた場合
    120120    if(pProc==(Procedure *)-1){
     
    178178        int FuncId = (int)(_int64)pProc;
    179179
    180         if( !Opcode_CallFunc( lpszParms, FuncId, resultType, isCallOn ) ){
     180        if( !Opcode_CallFunc( lpszParms, FuncId, baseType, resultType, isCallOn ) ){
    181181            return false;
    182182        }
     
    212212        }
    213213
    214         return CallProc( PROC_DEFAULT, pInfo, tempName, lpszParms, resultType, isCallOn );
     214        return CallProc( PROC_DEFAULT, pInfo, tempName, lpszParms, baseType, resultType, isCallOn );
    215215    }
    216216    else{
  • trunk/abdev/BasicCompiler_Common/common.h

    r322 r331  
    347347int AutoBigCast(int BaseType,int CalcType);
    348348BOOL CheckCalcType(int idCalc,int *type,int sp);
    349 bool GetTermType( const char *term, Type &resultType, bool &isLiteral, bool *pIsClassName = NULL );
     349bool GetTermType( const char *term, const Type &baseType, Type &resultType, bool &isLiteral, bool *pIsClassName = NULL );
    350350bool NumOpe_GetType( const char *expression, const Type &baseType, Type &resultType, bool *pIsLiteralCalculation = NULL );
    351351
     
    354354int GetProc(char *name,void **ppInfo);
    355355void SplitObjectName(const char *name,char *ObjectName, ReferenceKind &referenceFind );
    356 bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, Type &resultType, bool isCallOn = true );
     356bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, const Type &baseType, Type &resultType, bool isCallOn = true );
    357357bool CallPropertyMethod( const char *variable, const char *rightSide, Type &resultType);
    358358bool GetReturnTypeOfPropertyMethod( const char *variable, const char *rightSide, Type &resultType );
Note: See TracChangeset for help on using the changeset viewer.