Changeset 704 in dev
- Timestamp:
- Jul 21, 2008, 2:31:24 PM (16 years ago)
- Location:
- trunk/ab5.0/abdev/compiler_x64
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/compiler_x64/Compile_CallProc.cpp
r598 r704 105 105 return true; 106 106 } 107 } 108 if( (dwFlags&PROCFLAG_PERMIT_CONSTRUCTOR) == 0 && pUserProc->IsConstructor() ) 109 { 110 // コンストラクタの直接呼出しはエラーとする 111 compiler.errorMessenger.Output(145,NULL,cp); 112 return false; 113 } 114 if( (dwFlags&PROCFLAG_PERMIT_DESTRUCTOR) == 0 && pUserProc->IsDestructor() ) 115 { 116 // デストラクタの直接呼出しはエラーとする 117 compiler.errorMessenger.Output(146,NULL,cp); 118 return false; 107 119 } 108 120 -
trunk/ab5.0/abdev/compiler_x64/Compile_Object.cpp
r468 r704 69 69 Opcode_CallProc(CreateParameter, 70 70 pUserProc, 71 PROCFLAG_NEW ,"");71 PROCFLAG_NEW | PROCFLAG_PERMIT_CONSTRUCTOR,""); 72 72 73 73 if(bSomeObjects){ -
trunk/ab5.0/abdev/compiler_x64/Compile_ProcOp.cpp
r685 r704 445 445 compiler.GetCompilingClass().NotifyStartConstructorCompile(); 446 446 447 //基底クラスかどうかの識別 448 //(継承元がインターフェイスの場合も基底クラスと見なす) 449 BOOL bThisIsSuperClass; 450 if( !compiler.GetCompilingClass().HasSuperClass() ) bThisIsSuperClass=1; 451 else if( compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod() == NULL ){ 452 //インターフェイスを継承したときはコンストラクタを持たない 453 bThisIsSuperClass=1; 454 } 455 else bThisIsSuperClass=0; 456 457 if(!bThisIsSuperClass){ 447 if( compiler.GetCompilingClass().HasSuperClass() ) 448 { 458 449 /* サブクラスコンストラクタをコンパイルしているときは、 459 450 基底クラスのコンストラクタを呼び出す */ … … 483 474 RemoveStringPare(temporary); 484 475 485 Type dummyType; 486 CallProc( PROC_DEFAULT 487 , &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc() 488 , compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str() 489 , temporary 490 , Type() // baseTypeはなし 491 , dummyType 492 ); 476 477 //////////////////////// 478 // オーバーロードを解決 479 //////////////////////// 480 481 std::vector<const UserProc *> subs; 482 compiler.GetCompilingClass().GetSuperClass().GetDynamicMethods().Enum( compiler.GetCompilingClass().GetSuperClass().GetName().c_str(), subs ); 483 484 const UserProc *pUserProc = NULL; 485 if( subs.size() > 0 ) 486 { 487 //オーバーロードを解決 488 pUserProc=OverloadSolutionWithStrParam( compiler.GetCompilingClass().GetSuperClass().GetName().c_str(), 489 subs,temporary,""); 490 } 491 if( !pUserProc ) 492 { 493 compiler.errorMessenger.Output(1,NULL,cp); 494 } 495 else 496 { 497 Type dummyType; 498 CallProc( PROC_DEFAULT 499 , pUserProc 500 , pUserProc->GetName().c_str() 501 , temporary 502 , Type() // baseTypeはなし 503 , dummyType 504 , true 505 , PROCFLAG_PERMIT_CONSTRUCTOR 506 ); 507 } 493 508 } 494 509 else{ 495 //基底クラスのコンストラクタを暗黙的に呼び出す 496 Opcode_CallProc("", 497 &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc(), 498 0, 499 ""); 510 if( compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod() != NULL ) 511 { 512 // 基底クラスがデフォルトコンストラクタを保有するとき 513 514 // 基底クラスのコンストラクタを暗黙的に呼び出す 515 Opcode_CallProc("", 516 &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc(), 517 PROCFLAG_PERMIT_CONSTRUCTOR, 518 "" 519 ); 520 } 500 521 } 501 522 } … … 555 576 Opcode_CallProc("", 556 577 &method->GetUserProc(), 557 0,578 PROCFLAG_PERMIT_DESTRUCTOR, 558 579 ""); 559 580 } -
trunk/ab5.0/abdev/compiler_x64/Opcode.h
r685 r704 328 328 329 329 //Compile_CallProc.cpp 330 #define PROCFLAG_NEW 1 330 #define PROCFLAG_NEW 1 331 #define PROCFLAG_PERMIT_CONSTRUCTOR 2 332 #define PROCFLAG_PERMIT_DESTRUCTOR 4 331 333 bool Opcode_CallProcPtr(const char *variable, const char *lpszParms,ProcPointer *pProcPointer); 332 334 bool Opcode_CallProc(const char *Parameter,const UserProc *pUserProc,DWORD dwFlags,const char *ObjectName);
Note:
See TracChangeset
for help on using the changeset viewer.