Changeset 702 in dev for trunk/ab5.0
- Timestamp:
- Jul 21, 2008, 2:25:54 PM (16 years ago)
- Location:
- trunk/ab5.0/abdev
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/BasicCompiler_Common/Subroutine.cpp
r699 r702 106 106 } 107 107 108 bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, const Type &baseType, Type &resultType, bool isCallOn )108 bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, const Type &baseType, Type &resultType, bool isCallOn, int dwCallProcFlags ) 109 109 { 110 110 //GetSubHash内でエラー提示が行われた場合 … … 144 144 145 145 if( isCallOn ){ 146 if( !Opcode_CallProc(lpszParms,pUserProc, 0,ObjectName ) ){146 if( !Opcode_CallProc(lpszParms,pUserProc,dwCallProcFlags,ObjectName ) ){ 147 147 return false; 148 148 } -
trunk/ab5.0/abdev/BasicCompiler_Common/common.h
r699 r702 349 349 int GetProc(char *name,void **ppInfo); 350 350 void SplitObjectName(const char *name,char *ObjectName, ReferenceKind &referenceFind ); 351 bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, const Type &baseType, Type &resultType, bool isCallOn = true );351 bool CallProc( int kind, const void *pProc, const char *fullCallName, const char *lpszParms, const Type &baseType, Type &resultType, bool isCallOn = true, int dwCallProcFlags = 0 ); 352 352 bool CallPropertyMethod( const char *variable, const char *rightSide, Type &resultType); 353 353 bool GetReturnTypeOfPropertyMethod( const char *variable, const char *rightSide, Type &resultType ); -
trunk/ab5.0/abdev/BasicCompiler_Common/src/Messenger.cpp
r687 r702 251 251 if(errorCode==143) sprintf(msg,"\"%s\" ジェネリクス型に型パラメータが指定されていません。",tempKeyWord); 252 252 if(errorCode==144) sprintf(msg,"Thisの変数ポインタを取得することはできません。",tempKeyWord); 253 if(errorCode==145) sprintf(msg,"コンストラクタを直接呼び出すことはできません。。",tempKeyWord); 254 if(errorCode==146) sprintf(msg,"デストラクタを直接呼び出すことはできません。。",tempKeyWord); 253 255 254 256 //Enum関連 -
trunk/ab5.0/abdev/ab_common/include/Lexical/Procedure.h
r641 r702 304 304 return isCompiled; 305 305 } 306 bool IsConstructor() const 307 { 308 return ( this->HasParentClass() && this->GetName() == this->GetParentClass().GetName() ); 309 } 306 310 bool IsDestructor() const 307 311 { -
trunk/ab5.0/abdev/compiler_x86/Compile_CallProc.cpp
r687 r702 97 97 return true; 98 98 } 99 } 100 if( (dwFlags&PROCFLAG_PERMIT_CONSTRUCTOR) == 0 && pUserProc->IsConstructor() ) 101 { 102 // コンストラクタの直接呼出しはエラーとする 103 compiler.errorMessenger.Output(145,NULL,cp); 104 return false; 105 } 106 if( (dwFlags&PROCFLAG_PERMIT_DESTRUCTOR) == 0 && pUserProc->IsDestructor() ) 107 { 108 // デストラクタの直接呼出しはエラーとする 109 compiler.errorMessenger.Output(146,NULL,cp); 110 return false; 99 111 } 100 112 -
trunk/ab5.0/abdev/compiler_x86/Compile_Object.cpp
r465 r702 74 74 Opcode_CallProc(CreateParameter, 75 75 pUserProc, 76 PROCFLAG_NEW ,"");76 PROCFLAG_NEW | PROCFLAG_PERMIT_CONSTRUCTOR,""); 77 77 78 78 -
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 ); -
trunk/ab5.0/abdev/compiler_x86/Opcode.h
r684 r702 213 213 214 214 //Compile_CallProc.cpp 215 #define PROCFLAG_NEW 1 215 #define PROCFLAG_NEW 1 216 #define PROCFLAG_PERMIT_CONSTRUCTOR 2 217 #define PROCFLAG_PERMIT_DESTRUCTOR 4 216 218 bool Opcode_CallProcPtr( const char *variable, const char *lpszParms,ProcPointer *pProcPointer); 217 219 bool Opcode_CallProc(const char *Parameter,const UserProc *pUserProc,DWORD dwFlags,const char *ObjectName );
Note:
See TracChangeset
for help on using the changeset viewer.