Changeset 331 in dev for trunk/abdev/BasicCompiler64


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

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

Location:
trunk/abdev/BasicCompiler64
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • 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
Note: See TracChangeset for help on using the changeset viewer.