Changeset 351 in dev for trunk/abdev/BasicCompiler_Common/src/Class.cpp
- Timestamp:
- Oct 17, 2007, 3:31:20 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/src/Class.cpp
r350 r351 382 382 SetSuperClassActualTypeParameters( actualTypeParameters ); 383 383 384 // インターフェイスを引き継ぐ 385 BOOST_FOREACH( ::Interface *pInterface, inheritsClass.GetInterfaces() ) 386 { 387 interfaces.push_back( new ::Interface( *pInterface ) ); 388 } 389 384 390 return true; 385 391 } … … 447 453 } 448 454 449 interfaces.push_back( new ::Interface( &interfaceClass ) ); 450 455 ::Interface *pDestInterface = new ::Interface( &interfaceClass ); 456 457 interfaces.push_back( pDestInterface ); 458 459 460 ///////////////////////////////////////////////////////////////// 461 // 基底クラスのメソッドからインターフェイスメソッドを再実する 462 ///////////////////////////////////////////////////////////////// 463 BOOST_FOREACH( CMethod *pMethod, GetDynamicMethods() ) 464 { 465 CMethod *pMethodForOverride = pDestInterface->GetDynamicMethods().FindForOverride( &pMethod->GetUserProc() ); 466 if( pMethodForOverride ) 467 { 468 pMethodForOverride->Override( &pMethod->GetUserProc(), pMethod->GetAccessibility(), false ); 469 } 470 } 471 472 473 ///////////////////////////////////////////////////////////////// 451 474 // キャストメソッドを追加(内部コードは自動生成すること) 475 ///////////////////////////////////////////////////////////////// 452 476 { 453 477 // Function Operator() As ITest … … 474 498 } 475 499 500 476 501 return true; 477 502 } … … 600 625 601 626 //メソッド 602 BOOST_FOREACH( const CMethod *pMethod, pobj_c->GetDynamicMethods() ){ 627 BOOST_FOREACH( const CMethod *pMethod, pobj_c->GetDynamicMethods() ) 628 { 603 629 //基底クラスと重複する場合はオーバーライドを行う 604 630 if( pMethod->GetInheritsClassPtr() ) continue; 605 631 606 if( pMethod->GetUserProc().GetName() == temporary ){ 607 if( pMethod->GetUserProc().Params().Equals( pUserProc->Params() ) 608 && pMethod->GetUserProc().ReturnType().Equals( pUserProc->ReturnType() ) ) 609 { 610 //関数名、パラメータ、戻り値が合致したとき 611 SetError(15,pUserProc->GetName().c_str(),nowLine); 612 return; 613 } 632 if( pMethod->GetUserProc().IsEqualForOverride( pUserProc ) ) 633 { 634 //関数名、パラメータ、戻り値が合致したとき 635 SetError(15,pUserProc->GetName().c_str(),nowLine); 636 return; 614 637 } 615 638 } … … 619 642 620 643 // メソッドのオーバーライド 621 if( pobj_c->GetDynamicMethods().Override( pUserProc, accessibility ) ) 622 { 623 // オーバーライドが行われた場合 624 if( !isOverride ) 625 { 626 SetError(127,NULL,nowLine); 627 } 644 CMethod *pMethodForOverride = pobj_c->GetDynamicMethods().FindForOverride( pUserProc ); 645 if( pMethodForOverride ) 646 { 647 pMethodForOverride->Override( pUserProc, accessibility, isOverride ); 648 pUserProc->SetMethod( pMethodForOverride ); 628 649 return; 629 650 } … … 633 654 BOOST_FOREACH( ::Interface *pInterface, pobj_c->GetInterfaces() ) 634 655 { 635 if( pInterface->GetDynamicMethods().Override( pUserProc, accessibility ) ) 656 CMethod *pMethodForOverride = pInterface->GetDynamicMethods().FindForOverride( pUserProc ); 657 if( pMethodForOverride ) 636 658 { 637 // オーバーライドが行われた場合 638 if( !isOverride ) 639 { 640 SetError(127,NULL,nowLine); 641 } 659 pMethodForOverride->Override( pUserProc, accessibility, isOverride ); 660 pUserProc->SetMethod( pMethodForOverride ); 642 661 return; 643 662 } … … 1026 1045 if(pMethod->IsAbstract()){ 1027 1046 return true; 1047 } 1048 } 1049 } 1050 1051 // インターフェイスのvtbl 1052 BOOST_FOREACH( const ::Interface *pInterface, interfaces ) 1053 { 1054 BOOST_FOREACH( const CMethod *pMethod, pInterface->GetDynamicMethods() ){ 1055 if(pMethod->IsVirtual()){ 1056 if(pMethod->IsAbstract()){ 1057 return true; 1058 } 1028 1059 } 1029 1060 } … … 2021 2052 if( !pStringClass ) 2022 2053 { 2023 SmoothieException::Throw(); 2054 SetError(400, "System.String", cp); 2055 static CClass dummy; 2056 return &dummy; 2024 2057 } 2025 2058 return pStringClass; … … 2035 2068 if( !pObjectClass ) 2036 2069 { 2037 SmoothieException::Throw(); 2070 SetError(400, "System.Object", cp); 2071 static CClass dummy; 2072 return &dummy; 2038 2073 } 2039 2074 return pObjectClass; … … 2049 2084 if( !pInterfaceInfo ) 2050 2085 { 2051 SmoothieException::Throw(); 2086 SetError(400, "ActiveBasic.Core.InterfaceInfo", cp); 2087 static CClass dummy; 2088 return &dummy; 2052 2089 } 2053 2090 return pInterfaceInfo;
Note:
See TracChangeset
for help on using the changeset viewer.