Changeset 75 in dev for BasicCompiler_Common/hash.cpp


Ignore:
Timestamp:
Mar 20, 2007, 4:36:16 AM (17 years ago)
Author:
dai_9181
Message:

TYPEINFO→Typeへのリファクタリングを実施。64bitはほぼ完了。32bitが全般的に未完成。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/hash.cpp

    r73 r75  
    77#endif
    88
    9 int hash_default(char *name){
     9int hash_default(const char *name){
    1010    int key;
    1111
     
    3535}
    3636
    37 DECLAREINFO *GetDeclareHash(char *name){
     37DllProc *GetDeclareHash(char *name){
    3838    //ハッシュ値を取得
    3939    int key;
     
    4141
    4242    //格納位置を取得
    43     extern DECLAREINFO **ppDeclareHash;
    44     DECLAREINFO *pdi;
    45     pdi=ppDeclareHash[key];
    46     while(pdi){
    47         if(lstrcmp(pdi->name,name)==0) break;
     43    extern DllProc **ppDeclareHash;
     44    DllProc *pDllProc;
     45    pDllProc=ppDeclareHash[key];
     46    while(pDllProc){
     47        if( pDllProc->GetName() == name ){
     48            break;
     49        }
    4850
    49         pdi=pdi->pNextData;
     51        pDllProc=pDllProc->pNextData;
    5052    }
    5153
    52     return pdi;
     54    return pDllProc;
    5355}
    5456
    55 void GetOverloadSubHash( const char *lpszName, std::vector<SubInfo *> &subs ){
     57void GetOverloadSubHash( const char *lpszName, std::vector<UserProc *> &subs ){
    5658    char name[VN_SIZE];
    5759
     
    7274
    7375        bool isStatic = false;
    74         CClass *pobj_c;
     76        const CClass *pobj_c = NULL;
    7577        if(lstrcmpi(ObjName,"Super")==0){
    7678            //クラスメンバ関数内から基底クラスの呼び出し
     
    7981        else{
    8082            //"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
    81             int type = GetVarType(ObjName,(LONG_PTR *)&pobj_c,0);
    82             if(!(NATURAL_TYPE(type)==DEF_OBJECT)){
     83            Type type;
     84            GetVarType(ObjName,type,0);
     85            pobj_c = &type.GetClass();
     86            if((NATURAL_TYPE(type.GetBasicType())!=DEF_OBJECT)){
    8387                pobj_c=pobj_DBClass->check(ObjName);
    8488                if( pobj_c ){
     
    123127
    124128        //格納位置を取得
    125         extern SubInfo **ppSubHash;
    126         SubInfo *psi;
    127         psi=ppSubHash[key];
    128         while(psi){
    129             if(!psi->pobj_ParentClass){
    130                 if(lstrcmp(psi->name,name)==0){
    131                     subs.push_back( psi );
     129        extern UserProc **ppSubHash;
     130        UserProc *pUserProc;
     131        pUserProc=ppSubHash[key];
     132        while(pUserProc){
     133            if(!pUserProc->GetParentClassPtr()){
     134                if( pUserProc->GetName() == name ){
     135                    subs.push_back( pUserProc );
    132136                }
    133137            }
    134138
    135             psi=psi->pNextData;
     139            pUserProc=pUserProc->pNextData;
    136140        }
    137141
     
    140144
    141145//オーバーロードされていない関数を取得(昔のコンパイラソースコードとの互換性保持)
    142 SubInfo *GetSubHash(const char *lpszName,BOOL bError){
    143     std::vector<SubInfo *> subs;
     146UserProc *GetSubHash(const char *lpszName,BOOL bError){
     147    std::vector<UserProc *> subs;
    144148    GetOverloadSubHash(lpszName,subs);
    145149
    146150    //関数が存在しないとき
    147151    if(subs.size() == 0){
     152        if(bError){
     153            SetError(3,lpszName,cp);
     154        }
    148155        return 0;
    149156    }
     
    154161    }
    155162
    156     SubInfo *psi;
    157     psi = subs[0];
     163    UserProc *pUserProc;
     164    pUserProc = subs[0];
    158165
    159     return psi;
     166    return pUserProc;
    160167}
    161 SubInfo *GetMethodHash(char *ObjectName,char *MethodName,char *Parameter,BOOL bError){
     168UserProc *GetMethodHash(const char *ObjectName,const char *MethodName,const char *Parameter,BOOL bError){
    162169    char temporary[VN_SIZE];
    163170    sprintf(temporary,"%s.%s",ObjectName,MethodName);
    164171
    165     std::vector<SubInfo *> subs;
    166     SubInfo *psi;
     172    std::vector<UserProc *> subs;
     173    UserProc *pUserProc;
    167174    GetOverloadSubHash(temporary,subs);
    168175
     
    173180
    174181    //オーバーロードを解決
    175     psi=OverloadSolutionWithStrParam(temporary,subs,Parameter,ObjectName,NULL);
     182    pUserProc=OverloadSolutionWithStrParam(temporary,subs,Parameter,ObjectName);
    176183
    177     return psi;
     184    return pUserProc;
    178185}
Note: See TracChangeset for help on using the changeset viewer.