Changeset 405 in dev for trunk/abdev/BasicCompiler64/NumOpe.cpp
- Timestamp:
- Mar 1, 2008, 1:51:55 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler64/NumOpe.cpp
r402 r405 148 148 { 149 149 classType = leftType; 150 151 if( classType.IsObject() ) 152 { 153 // 既にuseRegにオブジェクトポインタが格納されており、それに対するインデクサを呼び出す場合 154 // ※「プロパティ値として返ってきたオブジェクトインスタンスのインデクサを呼び出す」場合にここにくる 155 156 // オブジェクトメンバのポインタは既にraxに入っている 157 } 150 158 } 151 159 else 152 160 { 153 161 GetMemberType( leftType, VarName, classType, 0, false ); 154 } 155 if( classType.IsObject() ) 156 { 157 //オブジェクトポインタをr11にコピー 158 compiler.codeGenerator.op_mov_RR( REG_R11, useReg ); 159 160 if( VarName[0] ) 162 163 if( classType.IsObject() ) 161 164 { 165 //オブジェクトポインタをr11にコピー 166 compiler.codeGenerator.op_mov_RR( REG_R11, useReg ); 167 162 168 RELATIVE_VAR relativeVar; 163 169 relativeVar.dwKind=VAR_DIRECTMEM; … … 177 183 } 178 184 } 179 else 180 { 181 // オブジェクトメンバのポインタは既にraxに入っている 182 } 183 185 } 186 187 if( classType.IsObject() ) 188 { 184 189 ////////////////////////////////////////////////////// 185 190 ///// レジスタ資源のバックアップ … … 243 248 char methodName[VN_SIZE], lpPtrOffset[VN_SIZE], parameter[VN_SIZE], dummy[1]; 244 249 ReferenceKind refType; 250 bool isParameterInBracket = false; 245 251 lstrcpy( methodName, member ); 246 GetVarFormatString( methodName,parameter,lpPtrOffset,dummy,refType);252 GetVarFormatString( methodName, parameter, lpPtrOffset, dummy, refType, &isParameterInBracket ); 247 253 248 254 objClass.EnumDynamicMethodsOrInterfaceMethods( methodName, userProcs ); … … 253 259 if( pUserProc ) 254 260 { 255 // TODO: この判定処理は暫定(特に[]サーチを行うところが) 256 if( pUserProc->Params().size() == 0 && parameter[0] && strstr( termFull, "[" ) ) 261 if( 262 pUserProc->Params().size() == 0 // 仮引数の個数は0 263 && parameter[0] // 実引数は1つ以上 264 && pUserProc->ReturnType().IsObject() // 戻り値がクラス型の場合 265 && isParameterInBracket ) // 実引数は[]で囲まれている 257 266 { 267 // プロパティ値として返ってきたオブジェクトインスタンスのインデクサを呼び出す 268 269 // まずはプロパティ値を取得 258 270 TermMemberOpe( leftType, baseType, resultType, termFull, termLeft, methodName ); 259 271 272 // 戻り値のオブジェクトインスタンスのインデクサを呼び出す 260 273 char temporary[VN_SIZE], temp2[VN_SIZE]; 261 274 sprintf( temporary, "[%s]", parameter );
Note:
See TracChangeset
for help on using the changeset viewer.