Changeset 398 in dev
- Timestamp:
- Feb 25, 2008, 10:57:09 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/NumOpe.cpp
r370 r398 155 155 if(ArrayElements[0]){ 156 156 Type classType; 157 GetMemberType( leftType, VarName, classType, 0, false ); 157 if( VarName[0] == '\0' ) 158 { 159 classType = leftType; 160 } 161 else 162 { 163 GetMemberType( leftType, VarName, classType, 0, false ); 164 } 158 165 if( classType.IsObject() ) 159 166 { … … 164 171 relativeVar.dwKind=VAR_DIRECTMEM; 165 172 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 ); 173 if( VarName[0] ) 174 { 175 if( !_member_offset( 176 true, //エラー表示あり 177 false, //読み込み専用 178 leftType, 179 VarName,&relativeVar,classType,0)){ 180 return false; 181 } 182 183 // オブジェクトメンバのポインタをeaxにコピー 184 if( !VarToReg( relativeVar, baseType, resultType ) ){ 185 SetError(11,termFull,cp); 186 } 187 188 189 //オブジェクトポインタをスタックに入れておく 190 //push eax 191 compiler.codeGenerator.op_push( REG_EAX ); 192 } 193 else 194 { 195 //オブジェクトポインタをスタックに入れておく 196 //push ecx 197 compiler.codeGenerator.op_push( REG_ECX ); 198 } 183 199 184 200 char objectFullName[VN_SIZE], dummyArrayElements[VN_SIZE]; … … 237 253 const UserProc *pUserProc = OverloadSolutionWithStrParam(termFull,userProcs,parameter,termLeft); 238 254 239 if( pUserProc ){ 255 if( pUserProc ) 256 { 257 // TODO: この判定処理は暫定(特に[]サーチを行うところが) 258 if( pUserProc->Params().size() == 0 && parameter[0] && strstr( termFull, "[" ) ) 259 { 260 TermMemberOpe( leftType, baseType, resultType, termFull, termLeft, methodName ); 261 262 char temporary[VN_SIZE], temp2[VN_SIZE]; 263 sprintf( temporary, "[%s]", parameter ); 264 sprintf( temp2, "%s.%s", termLeft, methodName ); 265 Type classType = resultType; 266 return TermMemberOpe( classType, baseType, resultType, termFull, temp2, temporary ); 267 } 240 268 241 269 resultType = pUserProc->ReturnType();
Note:
See TracChangeset
for help on using the changeset viewer.