Changeset 27 in dev for BasicCompiler_Common/hash.cpp
- Timestamp:
- Jan 7, 2007, 6:51:20 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/hash.cpp
r5 r27 121 121 //オブジェクトのメンバ関数の場合 122 122 123 bool isStatic = false; 124 CClass *pobj_c; 123 125 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 //動的メソッドから取得 170 147 171 148 //※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う … … 176 153 } 177 154 } 178 goto finish;179 155 } 180 156 … … 221 197 } 222 198 } 223 224 if(num) goto finish; 225 } 199 } 200 201 if(num) goto finish; 202 226 203 227 204 //ハッシュ値を取得
Note:
See TracChangeset
for help on using the changeset viewer.