Changeset 27 in dev for BasicCompiler_Common/hash.cpp


Ignore:
Timestamp:
Jan 7, 2007, 6:51:20 AM (17 years ago)
Author:
dai_9181
Message:

静的メンバ、静的メソッド周りを修正。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/hash.cpp

    r5 r27  
    121121        //オブジェクトのメンバ関数の場合
    122122
     123        bool isStatic = false;
     124        CClass *pobj_c;
    123125        if(lstrcmpi(ObjName,"Super")==0){
    124             //スーパークラス参照の場合
    125 
    126             if(pobj_CompilingClass==0){
    127                 SetError(118,NULL,cp);
    128                 goto finish;
    129             }
    130 
    131             //クラス内のメンバ関数をコンパイルしているとき
    132             //※オーバーライドされた関数をサーチする
    133             for(i=0;i<pobj_CompilingClass->iMethodNum;i++){
    134                 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass==0) continue;
    135 
    136                 if(lstrcmp(NestMember,pobj_CompilingClass->ppobj_Method[i]->psi->name)==0){
    137                     ppArray_si[num]=pobj_CompilingClass->ppobj_Method[i]->psi;
    138                     num++;
    139                 }
    140             }
    141 
    142             if(num==0) SetError(119,NestMember,cp);
    143 
    144             goto finish;
    145         }
    146 
    147 
    148 
    149         //////////////////////////////////////////////
    150         // 静的メソッド(クラス名が指定される場合)
    151         //////////////////////////////////////////////
    152 
    153         CClass *pobj_c;
    154         pobj_c=pobj_DBClass->check(ObjName);
    155         if(pobj_c){
    156             for(i=0;i<pobj_c->iStaticMethodNum;i++){
    157                 if(lstrcmp(NestMember,pobj_c->ppobj_StaticMethod[i]->psi->name)==0){
    158                     ppArray_si[num]=pobj_c->ppobj_StaticMethod[i]->psi;
    159                     num++;
    160                 }
    161             }
    162 
    163             goto finish;
    164         }
    165 
    166 
    167         i=GetVarType(ObjName,(LONG_PTR *)&pobj_c,1);
    168         if(i==-1) goto finish;  //エラーの場合
    169         if(!(NATURAL_TYPE(i)==DEF_OBJECT)) goto finish;
     126            //クラスメンバ関数内から基底クラスの呼び出し
     127            pobj_c=pobj_CompilingClass;
     128        }
     129        else{
     130            pobj_c=pobj_DBClass->check(ObjName);
     131            if( ! pobj_c ){
     132                //"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
     133                int type = GetVarType(ObjName,(LONG_PTR *)&pobj_c,0);
     134                if(!(NATURAL_TYPE(type)==DEF_OBJECT)) goto finish;
     135            }
     136        }
     137
     138        // 静的メソッドから取得
     139        for(i=0;i<pobj_c->iStaticMethodNum;i++){
     140            if(lstrcmp(NestMember,pobj_c->ppobj_StaticMethod[i]->psi->name)==0){
     141                ppArray_si[num]=pobj_c->ppobj_StaticMethod[i]->psi;
     142                num++;
     143            }
     144        }
     145
     146        //動的メソッドから取得
    170147
    171148        //※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う
     
    176153            }
    177154        }
    178         goto finish;
    179155    }
    180156
     
    221197            }
    222198        }
    223 
    224         if(num) goto finish;
    225     }
     199    }
     200
     201    if(num) goto finish;
     202
    226203
    227204    //ハッシュ値を取得
Note: See TracChangeset for help on using the changeset viewer.