Changeset 702 in dev for trunk/ab5.0/abdev/compiler_x86/Compile_ProcOp.cpp
- Timestamp:
- Jul 21, 2008, 2:25:54 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/compiler_x86/Compile_ProcOp.cpp
r684 r702 469 469 compiler.GetCompilingClass().NotifyStartConstructorCompile(); 470 470 471 //基底クラスかどうかの識別 472 //(継承元がインターフェイスの場合も基底クラスと見なす) 473 BOOL bThisIsSuperClass; 474 if( !compiler.GetCompilingClass().HasSuperClass() ) bThisIsSuperClass=1; 475 else if( compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod() == NULL ){ 476 //インターフェイスを継承したときはコンストラクタを持たない 477 bThisIsSuperClass=1; 478 } 479 else bThisIsSuperClass=0; 480 481 if(!bThisIsSuperClass){ 471 if( compiler.GetCompilingClass().HasSuperClass() ) 472 { 482 473 /* サブクラスコンストラクタをコンパイルしているときは、 483 474 基底クラスのコンストラクタを呼び出す */ … … 507 498 RemoveStringPare(temporary); 508 499 509 Type dummyType; 510 CallProc( PROC_DEFAULT 511 , &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc() 512 , compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str() 513 , temporary 514 , Type() // baseTypeはなし 515 , dummyType 516 ); 500 501 //////////////////////// 502 // オーバーロードを解決 503 //////////////////////// 504 505 std::vector<const UserProc *> subs; 506 compiler.GetCompilingClass().GetSuperClass().GetDynamicMethods().Enum( compiler.GetCompilingClass().GetSuperClass().GetName().c_str(), subs ); 507 508 const UserProc *pUserProc = NULL; 509 if( subs.size() > 0 ) 510 { 511 //オーバーロードを解決 512 pUserProc=OverloadSolutionWithStrParam( compiler.GetCompilingClass().GetSuperClass().GetName().c_str(), 513 subs,temporary,""); 514 } 515 if( !pUserProc ) 516 { 517 compiler.errorMessenger.Output(1,NULL,cp); 518 } 519 else 520 { 521 Type dummyType; 522 CallProc( PROC_DEFAULT 523 , pUserProc 524 , pUserProc->GetName().c_str() 525 , temporary 526 , Type() // baseTypeはなし 527 , dummyType 528 , true 529 , PROCFLAG_PERMIT_CONSTRUCTOR 530 ); 531 } 517 532 } 518 533 else{ 519 //基底クラスのコンストラクタを暗黙的に呼び出す 520 Opcode_CallProc("", 521 &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc(), 522 0, 523 "" 524 ); 534 if( compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod() != NULL ) 535 { 536 // 基底クラスがデフォルトコンストラクタを保有するとき 537 538 // 基底クラスのコンストラクタを暗黙的に呼び出す 539 Opcode_CallProc("", 540 &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc(), 541 PROCFLAG_PERMIT_CONSTRUCTOR, 542 "" 543 ); 544 } 525 545 } 526 546 } … … 580 600 Opcode_CallProc("", 581 601 &method->GetUserProc(), 582 0,602 PROCFLAG_PERMIT_DESTRUCTOR, 583 603 "" 584 604 );
Note:
See TracChangeset
for help on using the changeset viewer.