Changeset 31 in dev for BasicCompiler_Common/hash.cpp
- Timestamp:
- Jan 13, 2007, 4:26:50 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/hash.cpp
r28 r31 146 146 } 147 147 } 148 149 if(pobj_CompilingClass){ 150 //自身のオブジェクトのメンバ関数を検索 151 152 153 ////////////////////////////////////////////// 154 // 静的メソッド 155 ////////////////////////////////////////////// 156 157 CClass *pobj_c = pobj_CompilingClass; 158 159 for(i=0;i<pobj_c->iStaticMethodNum;i++){ 160 if(lstrcmp(name,pobj_c->ppobj_StaticMethod[i]->psi->name)==0){ 161 ppArray_si[num]=pobj_c->ppobj_StaticMethod[i]->psi; 162 num++; 163 } 164 } 165 166 167 /////////////////////// 168 // 動的メソッド(一般) 169 /////////////////////// 170 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 171 //オーバーライドされた関数を飛び越す 172 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass==0) break; 173 } 174 for(;i<pobj_CompilingClass->iMethodNum;i++){ 175 if(lstrcmp(name,pobj_CompilingClass->ppobj_Method[i]->psi->name)==0){ 176 ppArray_si[num]=pobj_CompilingClass->ppobj_Method[i]->psi; 177 num++; 178 } 179 } 180 181 //オーバーライドされたメンバ関数 182 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 183 //オーバーライドされた関数を飛び越す 184 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass){ 148 else{ 149 //オブジェクトが明示的に指定されていないとき 150 151 if(pobj_CompilingClass){ 152 //自身のオブジェクトのメンバ関数を検索 153 154 155 ////////////////////////////////////////////// 156 // 静的メソッド 157 ////////////////////////////////////////////// 158 159 CClass *pobj_c = pobj_CompilingClass; 160 161 for(i=0;i<pobj_c->iStaticMethodNum;i++){ 162 if(lstrcmp(name,pobj_c->ppobj_StaticMethod[i]->psi->name)==0){ 163 ppArray_si[num]=pobj_c->ppobj_StaticMethod[i]->psi; 164 num++; 165 } 166 } 167 168 169 /////////////////////// 170 // 動的メソッド(一般) 171 /////////////////////// 172 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 173 //オーバーライドされた関数を飛び越す 174 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass==0) break; 175 } 176 for(;i<pobj_CompilingClass->iMethodNum;i++){ 185 177 if(lstrcmp(name,pobj_CompilingClass->ppobj_Method[i]->psi->name)==0){ 186 178 ppArray_si[num]=pobj_CompilingClass->ppobj_Method[i]->psi; … … 188 180 } 189 181 } 190 } 191 } 192 193 if(num) goto finish; 194 195 196 //ハッシュ値を取得 197 int key; 198 key=hash_default(name); 199 200 //格納位置を取得 201 extern SUBINFO **ppSubHash; 202 SUBINFO *psi; 203 psi=ppSubHash[key]; 204 while(psi){ 205 if(!psi->pobj_ParentClass){ 206 if(lstrcmp(psi->name,name)==0){ 207 ppArray_si[num]=psi; 208 num++; 209 } 210 } 211 212 psi=psi->pNextData; 213 } 214 182 183 //オーバーライドされたメンバ関数 184 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 185 //オーバーライドされた関数を飛び越す 186 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass){ 187 if(lstrcmp(name,pobj_CompilingClass->ppobj_Method[i]->psi->name)==0){ 188 ppArray_si[num]=pobj_CompilingClass->ppobj_Method[i]->psi; 189 num++; 190 } 191 } 192 } 193 } 194 195 196 /////////////////////////// 197 // グローバル関数を検索 198 /////////////////////////// 199 200 //ハッシュ値を取得 201 int key; 202 key=hash_default(name); 203 204 //格納位置を取得 205 extern SUBINFO **ppSubHash; 206 SUBINFO *psi; 207 psi=ppSubHash[key]; 208 while(psi){ 209 if(!psi->pobj_ParentClass){ 210 if(lstrcmp(psi->name,name)==0){ 211 ppArray_si[num]=psi; 212 num++; 213 } 214 } 215 216 psi=psi->pNextData; 217 } 218 219 } 215 220 finish: 216 221
Note:
See TracChangeset
for help on using the changeset viewer.