Changeset 399 in dev
- Timestamp:
- Feb 26, 2008, 3:16:40 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler64/NumOpe.cpp
r370 r399 146 146 if(ArrayElements[0]){ 147 147 Type classType; 148 GetMemberType( leftType, VarName, classType, 0, false ); 148 if( VarName[0] == '\0' ) 149 { 150 classType = leftType; 151 } 152 else 153 { 154 GetMemberType( leftType, VarName, classType, 0, false ); 155 } 149 156 if( classType.IsObject() ) 150 157 { … … 152 159 compiler.codeGenerator.op_mov_RR( REG_R11, useReg ); 153 160 154 RELATIVE_VAR relativeVar; 155 relativeVar.dwKind=VAR_DIRECTMEM; 156 157 if( !_member_offset( 158 true, //エラー表示あり 159 false, //読み込み専用 160 leftType, 161 VarName,&relativeVar,classType,0)) 161 if( VarName[0] ) 162 162 { 163 return false; 164 } 165 166 // オブジェクトメンバのポインタをraxにコピー 167 if( !VarToReg( relativeVar, baseType, resultType ) ){ 168 SetError(11,termFull,cp); 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 { 172 return false; 173 } 174 175 // オブジェクトメンバのポインタをraxにコピー 176 if( !VarToReg( relativeVar, baseType, resultType ) ){ 177 SetError(11,termFull,cp); 178 } 179 } 180 else 181 { 182 // オブジェクトメンバのポインタは既にraxに入っている 169 183 } 170 184 … … 238 252 const UserProc *pUserProc = OverloadSolutionWithStrParam(termFull,userProcs,parameter,termLeft); 239 253 240 if( pUserProc ){ 254 if( pUserProc ) 255 { 256 // TODO: この判定処理は暫定(特に[]サーチを行うところが) 257 if( pUserProc->Params().size() == 0 && parameter[0] && strstr( termFull, "[" ) ) 258 { 259 TermMemberOpe( leftType, baseType, resultType, termFull, termLeft, methodName ); 260 261 char temporary[VN_SIZE], temp2[VN_SIZE]; 262 sprintf( temporary, "[%s]", parameter ); 263 sprintf( temp2, "%s.%s", termLeft, methodName ); 264 Type classType = resultType; 265 return TermMemberOpe( classType, baseType, resultType, termFull, temp2, temporary ); 266 } 241 267 242 268 resultType = pUserProc->ReturnType();
Note:
See TracChangeset
for help on using the changeset viewer.