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