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

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

File:
1 edited

Legend:

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