Changeset 334 in dev for trunk/abdev/BasicCompiler32/NumOpe.cpp
- Timestamp:
- Sep 28, 2007, 12:05:10 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/NumOpe.cpp
r331 r334 147 147 const int useReg = REG_EAX; 148 148 149 150 //////////////////////////////// 151 // インデクサ(getアクセサ) 152 //////////////////////////////// 153 char VarName[VN_SIZE],ArrayElements[VN_SIZE]; 154 GetArrayElement(member,VarName,ArrayElements); 155 if(ArrayElements[0]){ 156 Type classType; 157 GetMemberType( leftType, VarName, classType, 0, false ); 158 if( classType.IsObject() ) 159 { 160 //オブジェクトポインタをecxにコピー 161 compiler.codeGenerator.op_mov_RR( REG_ECX, useReg ); 162 163 RELATIVE_VAR relativeVar; 164 relativeVar.dwKind=VAR_DIRECTMEM; 165 166 if( !_member_offset( 167 true, //エラー表示あり 168 false, //読み込み専用 169 leftType, 170 VarName,&relativeVar,classType,0)){ 171 return false; 172 } 173 174 // オブジェクトメンバのポインタをeaxにコピー 175 if( !VarToReg( relativeVar, baseType, resultType ) ){ 176 SetError(11,termFull,cp); 177 } 178 179 180 //オブジェクトポインタをスタックに入れておく 181 //push eax 182 compiler.codeGenerator.op_push( REG_EAX ); 183 184 char objectFullName[VN_SIZE], dummyArrayElements[VN_SIZE]; 185 GetArrayElement(termFull,objectFullName,dummyArrayElements); 186 187 CallIndexerGetterProc(/*UseReg,*/classType,objectFullName, ArrayElements,resultType, PROCFLAG_NEW ); 188 189 compiler.codeGenerator.op_pop(); 190 191 return true; 192 } 193 } 194 195 196 /////////////////////////////////////////////////////////////////// 197 // メンバを検索 198 /////////////////////////////////////////////////////////////////// 149 199 if( GetMemberType( leftType, member, resultType, 0, false ) ){ 150 200 // メンバが見つかったとき
Note:
See TracChangeset
for help on using the changeset viewer.