- Timestamp:
- Mar 11, 2008, 3:57:13 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/NumOpe_GetType.cpp
r424 r428 310 310 if(ArrayElements[0]){ 311 311 Type classType; 312 GetMemberType( leftType, VarName, classType, 0, false ); 313 if( classType.IsObject() ){ 312 if( VarName[0] == '\0' ) 313 { 314 classType = leftType; 315 316 if( classType.IsObject() ) 317 { 318 // 既にuseRegにオブジェクトポインタが格納されており、それに対するインデクサを呼び出す場合 319 // ※「プロパティ値として返ってきたオブジェクトインスタンスのインデクサを呼び出す」場合にここにくる 320 } 321 } 322 else 323 { 324 GetMemberType( leftType, VarName, classType, 0, false ); 325 } 326 327 if( classType.IsObject() ) 328 { 314 329 if( !GetReturnTypeOfIndexerGetterProc( classType, resultType ) ){ 315 330 SetError(1,NULL,cp); … … 343 358 char parameter[VN_SIZE]; 344 359 ReferenceKind refType; 360 PareOrBracket pareOrBracket = None; 345 361 lstrcpy( methodName, member ); 346 GetVarFormatString( methodName,parameter,lpPtrOffset,dummy,refType);362 GetVarFormatString( methodName, parameter, lpPtrOffset, dummy, refType, &pareOrBracket ); 347 363 348 364 vector<const UserProc *> userProcs; … … 352 368 const UserProc *pUserProc = OverloadSolutionWithStrParam(termFull,userProcs,parameter,termLeft); 353 369 354 if( pUserProc ){ 370 if( pUserProc ) 371 { 372 if( 373 pUserProc->Params().size() == 0 // 仮引数の個数は0 374 && parameter[0] // 実引数は1つ以上 375 && pUserProc->ReturnType().IsObject() // 戻り値がクラス型の場合 376 && pareOrBracket == Bracket ) // 実引数は[]で囲まれている 377 { 378 // プロパティ値として返ってきたオブジェクトインスタンスのインデクサを呼び出す 379 380 // まずはプロパティ値を取得 381 bool dummyIsVariable; 382 GetMemberTermType( leftType, baseType, resultType, termFull, termLeft, methodName, &dummyIsVariable ); 383 384 // 戻り値のオブジェクトインスタンスのインデクサを呼び出す 385 char temporary[VN_SIZE], temp2[VN_SIZE]; 386 sprintf( temporary, "[%s]", parameter ); 387 sprintf( temp2, "%s.%s", termLeft, methodName ); 388 Type classType = resultType; 389 return GetMemberTermType( classType, baseType, resultType, termFull, temp2, temporary, pIsVariable ); 390 } 391 355 392 resultType = pUserProc->ReturnType(); 356 393
Note:
See TracChangeset
for help on using the changeset viewer.