Changeset 331 in dev for trunk/abdev/BasicCompiler32


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

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

Location:
trunk/abdev/BasicCompiler32
Files:
6 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
Note: See TracChangeset for help on using the changeset viewer.