Ignore:
Timestamp:
Jan 8, 2007, 6:34:44 AM (17 years ago)
Author:
dai_9181
Message:

・【32ビットコンパイラ】戻り値に実態オブジェクトを持つインデクサを呼び出すと強制終了してしまうバグを修正。
・仮想関数のオーバーロードが正常に動作しないバグを修正。
・純仮想関数(抽象メソッド)が仮想関数でオーバーロードされていると、クラスのインスタンスが生成できてしまうバグを修正。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Subroutine.cpp

    r5 r28  
    6464}
    6565
    66 void GetObjectName(char *name,char *ObjectName,int *pRefType){
     66void SplitObjectName(char *name,char *ObjectName,int *pRefType){
    6767    int i4;
    6868    for(i4=lstrlen(name)-1;i4>=0;i4--){
     
    8383    }
    8484}
     85bool SplitMemberName( const char *desc, char *object, char *member ){
     86    int i;
     87    for(i=lstrlen(desc)-1;i>=0;i--){
     88        if(desc[i]=='.'||(desc[i]==1&&desc[i+1]==ESC_PSMEM))
     89            break;
     90    }
     91    if(i==-1) return false;
     92    else{
     93        if(desc[i]=='.')
     94            lstrcpy(member,desc+i+1);
     95        else
     96            lstrcpy(member,desc+i+2);
     97
     98        if( object ){
     99            lstrcpy( object, desc );
     100            object[i]=0;
     101        }
     102    }
     103
     104    return true;
     105}
    85106int GetReturnTypeOfProc(int idProc,void *pInfo,char *name,char *Parameter,LONG_PTR *plpRetIndex){
    86107    int ret_type;
     
    101122        char ObjectName[VN_SIZE];
    102123        int RefType;
    103         GetObjectName(name,ObjectName,&RefType);
     124        SplitObjectName(name,ObjectName,&RefType);
    104125
    105126
     
    168189    char ObjectName[VN_SIZE];
    169190    int RefType;
    170     GetObjectName(VarName,ObjectName,&RefType);
     191    SplitObjectName(VarName,ObjectName,&RefType);
    171192
    172193    //オーバーロード用の関数リストを作成
Note: See TracChangeset for help on using the changeset viewer.