Changeset 353 in dev for trunk/abdev/BasicCompiler_Common
- Timestamp:
- Oct 21, 2007, 3:37:31 PM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler_Common
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/ParamImpl.cpp
r319 r353 204 204 205 205 const UserProc *ParamImpl::_OverloadSolution( const char *name, std::vector<const UserProc *> &subs, bool isEnabledReturnType ){ 206 int sw=0; 207 const UserProc *pUserProc; 208 pUserProc=0; 206 const UserProc *pUserProc = NULL; 209 207 210 208 for( int level=OVERLOAD_MIN_LEVEL; level<=OVERLOAD_MAX_LEVEL; level++ ){ … … 213 211 214 212 if(EvaluateOverloadScore( level, pTempUserProc->Params(), isEnabledReturnType?pTempUserProc->ReturnType():Type() )){ 215 trace_for_overload( "レベル" << level << 216 217 if( sw){213 trace_for_overload( "レベル" << level << " ○適合..." << pTempUserProc->_paramStr ); 214 215 if( pUserProc ){ 218 216 if( isEnabledReturnType ){ 219 217 SetError(52,name,cp); 220 221 return 0;222 218 } 223 219 else{ … … 229 225 } 230 226 } 231 sw=1;232 227 233 228 pUserProc = pTempUserProc; … … 235 230 else 236 231 { 237 trace_for_overload( "レベル" << level << 238 } 239 } 240 241 if( sw) break;242 } 243 244 if( !sw){232 trace_for_overload( "レベル" << level << " ×不適合..." << pTempUserProc->_paramStr ); 233 } 234 } 235 236 if( pUserProc ) break; 237 } 238 239 if( !pUserProc ){ 245 240 BOOST_FOREACH( const UserProc *pTempUserProc, subs ){ 246 241 247 242 //エラーチェック 248 243 if(pTempUserProc->Params().size()==this->ParmsNum){ 249 if(sw){ 250 sw=0; 251 break; 252 } 253 sw=1; 244 if( pUserProc ){ 245 SetError(52,name,cp); 246 } 254 247 255 248 pUserProc=pTempUserProc; … … 258 251 } 259 252 260 if(!sw){ 261 SetError(52,name,cp); 262 263 return 0; 264 } 265 253 if( !pUserProc ) 254 { 255 SetError(); 256 } 266 257 267 258 return pUserProc; -
trunk/abdev/BasicCompiler_Common/Subroutine.cpp
r342 r353 428 428 if(source[i]=='\0') break; 429 429 } 430 userProcs.Add (namespaceScopes, importedNamespaces, temporary,i,false,NULL,false);430 userProcs.AddUserProc(namespaceScopes, importedNamespaces, temporary,i,false,NULL,false); 431 431 432 432 /* Sub ~ End Sub … … 461 461 compiler.globalAreaProcName = "_System_GlobalArea_" + compiler.GetModuleName(); 462 462 sprintf(temporary,"%c%c%s()",1,ESC_SUB,compiler.globalAreaProcName.c_str()); 463 userProcs.Add ( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false);463 userProcs.AddUserProc( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false); 464 464 } 465 465 -
trunk/abdev/BasicCompiler_Common/error.cpp
r351 r353 147 147 if(num==49) lstrcpy(msg,"添え字に整数以外の型が指定されています。"); 148 148 if(num==50) sprintf(msg,"%sに変換できません。",tempKeyWord); 149 if(num==51) lstrcpy(msg,"オブジェクト、構造体のアラインメント値は 1,2,4,8,16のいずれかでなければなりません。");149 if(num==51) lstrcpy(msg,"オブジェクト、構造体のアラインメント値は 1, 2, 4, 8, 16 のいずれかでなければなりません。"); 150 150 if(num==52) sprintf(msg,"\"%s\" オーバーロードを解決できません。",tempKeyWord); 151 151 if(num==53) sprintf(msg,"\"%s\" 出力ファイルの書き込みに失敗しました。実行されている可能性があります。",tempKeyWord); … … 164 164 if(num==66) sprintf(msg,"%s 要求されている関数ポインタのパラメータまたは戻り値が一致しません。", tempKeyWord ); 165 165 if(num==67) sprintf(msg,"%s 要求されているデリゲートのパラメータまたは戻り値が一致しません。", tempKeyWord ); 166 if(num==68) sprintf(msg,"\"%s\" 不正な関数名です。", tempKeyWord); 167 if(num==69) sprintf(msg,"\"%s\" 不正なメソッド名です。", tempKeyWord); 166 168 167 169 … … 204 206 if(num==137) lstrcpy(msg,"ImplementsはClass定義内の先頭に記述する必要があります。"); 205 207 if(num==138) sprintf(msg,"%s はインターフェイスではありません。Implementsできるのはインターフェイスに限ります。",tempKeyWord); 208 if(num==139) sprintf(msg,"%s はインターフェイスではありません。",tempKeyWord); 206 209 207 210 //Enum関連 -
trunk/abdev/BasicCompiler_Common/include/Class.h
r350 r353 77 77 mutable LONG_PTR vtblOffset; 78 78 79 // XMLシリアライズ用 80 private: 81 friend class boost::serialization::access; 82 template<class Archive> void serialize(Archive& ar, const unsigned int version) 83 { 84 trace_for_serialize( "serializing - Interface" ); 85 86 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( DynamicMethodsPrototype ); 87 ar & boost::serialization::make_nvp("pInterfaceClass", const_cast<CClass *&>(pInterfaceClass) ); 88 ar & BOOST_SERIALIZATION_NVP( vtblOffset ); 89 } 90 79 91 public: 80 92 Interface( const CClass *pInterfaceClass ); … … 83 95 , pInterfaceClass( objInterface.pInterfaceClass ) 84 96 , vtblOffset( objInterface.vtblOffset ) 97 { 98 } 99 Interface() 85 100 { 86 101 } … … 151 166 152 167 // XMLシリアライズ用 153 // TODO: xml未完成154 168 private: 155 169 friend class boost::serialization::access; … … 165 179 ar & BOOST_SERIALIZATION_NVP( superClassActualTypeParameters ); 166 180 ar & BOOST_SERIALIZATION_NVP( blittableType ); 167 //ar & BOOST_SERIALIZATION_NVP( interfaces );181 ar & BOOST_SERIALIZATION_NVP( interfaces ); 168 182 ar & BOOST_SERIALIZATION_NVP( dynamicMembers ); 169 183 ar & BOOST_SERIALIZATION_NVP( staticMembers ); -
trunk/abdev/BasicCompiler_Common/include/Method.h
r352 r353 1 1 #pragma once 2 3 #include <string>4 #include <vector>5 6 #include <option.h>7 #include <Program.h>8 #include <Class.h>9 #include <Procedure.h>10 11 #include <windows.h>12 2 13 3 using namespace std; -
trunk/abdev/BasicCompiler_Common/include/Procedure.h
r351 r353 13 13 14 14 class CClass; 15 class Interface; 15 16 class CMethod; 16 17 … … 122 123 // 親クラスと対応するメソッド 123 124 const CClass *pParentClass; 125 const Interface *pInterface; 124 126 CMethod *pMethod; 125 127 … … 160 162 ar & BOOST_SERIALIZATION_NVP( importedNamespaces ); 161 163 ar & boost::serialization::make_nvp("pParentClass", const_cast<CClass *&>(pParentClass) ); 164 ar & boost::serialization::make_nvp("pInterface", const_cast<Interface *&>(pInterface) ); 162 165 ar & BOOST_SERIALIZATION_NVP( pMethod ); 163 166 ar & BOOST_SERIALIZATION_NVP( isMacro ); … … 182 185 , importedNamespaces( importedNamespaces ) 183 186 , pParentClass( NULL ) 187 , pInterface( NULL ) 184 188 , pMethod( NULL ) 185 189 , isMacro( isMacro ) … … 211 215 { 212 216 if( this->GetParentClassPtr() == pUserProc->GetParentClassPtr() // 親クラスが等しい 217 && this->pInterface == pUserProc->pInterface // インターフェイスが等しい 213 218 && pUserProc->IsEqualSymbol( *this ) // 名前空間及び名前が等しい 214 219 && this->Params().Equals( pUserProc->Params() ) // パラメータが等しい … … 358 363 return ( pParentClass == NULL ); 359 364 } 365 void SetInterface( const Interface *pInterface ) 366 { 367 this->pInterface = pInterface; 368 } 360 369 void SetMethod( CMethod *pMethod ){ 361 370 this->pMethod = pMethod; … … 417 426 bool Insert( UserProc *pUserProc, int nowLine ); 418 427 419 UserProc *Add ( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, char *buffer,int nowLine,bool isVirtual,CClass *pobj_c, bool isStatic);428 UserProc *AddUserProc( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, char *buffer,int nowLine,bool isVirtual,CClass *pobj_c, bool isStatic, char *interfaceName = NULL ); 420 429 421 430 void EnumGlobalProcs( const char *simpleName, const char *localName, std::vector<const UserProc *> &subs ); -
trunk/abdev/BasicCompiler_Common/include/option.h
r350 r353 14 14 #define USE_TRACE 15 15 #else 16 //#define USE_TRACE16 #define USE_TRACE 17 17 #endif 18 18 … … 28 28 29 29 // ソースコードステップに関するログを生成する 30 //#define USE_TRACE_FOR_SOURCECODESTEP30 #define USE_TRACE_FOR_SOURCECODESTEP 31 31 #endif 32 32 -
trunk/abdev/BasicCompiler_Common/include/ver.h
r350 r353 6 6 // バージョン付加文字列 7 7 #ifdef _AMD64_ 8 #define VER_INFO "(x64) (rev.35 6)"8 #define VER_INFO "(x64) (rev.357)" 9 9 #else 10 #define VER_INFO "(rev.35 6)"10 #define VER_INFO "(rev.357)" 11 11 #endif -
trunk/abdev/BasicCompiler_Common/src/BoostSerializationSupport.cpp
r322 r353 34 34 35 35 #include <BoostSerializationSupport.h> 36 #include <Hashmap.h> 36 37 #include <Compiler.h> 37 38 -
trunk/abdev/BasicCompiler_Common/src/Class.cpp
r352 r353 573 573 574 574 //関数ハッシュへ登録 575 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Add( NamespaceScopes(), NamespaceScopesCollection(), buffer,nowLine,isVirtual,pobj_c, (bStatic!=0) ); 575 char interfaceName[VN_SIZE] = ""; 576 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().AddUserProc( NamespaceScopes(), NamespaceScopesCollection(), buffer,nowLine,isVirtual,pobj_c, (bStatic!=0), interfaceName ); 576 577 if(!pUserProc) return; 577 578 … … 657 658 BOOST_FOREACH( ::Interface *pInterface, pobj_c->GetInterfaces() ) 658 659 { 660 if( interfaceName[0] ) 661 { 662 if( pInterface->GetClass().GetName() != interfaceName ) 663 { 664 // 指定されたインターフェイス名と整合しないとき 665 continue; 666 } 667 } 668 659 669 CMethod *pMethodForOverride = pInterface->GetDynamicMethods().FindForOverride( pUserProc ); 660 670 if( pMethodForOverride ) … … 665 675 } 666 676 } 677 } 678 679 if( interfaceName[0] ) 680 { 681 SetError(139,interfaceName,nowLine); 667 682 } 668 683 -
trunk/abdev/BasicCompiler_Common/src/Method.cpp
r352 r353 77 77 BOOST_FOREACH( CMethod *pMethod, methods ) 78 78 { 79 if( pMethod->GetUserProc().IsEqualForOverride( pUserProc ) )79 if( !pMethod->IsNotUse() && pMethod->GetUserProc().IsEqualForOverride( pUserProc ) ) 80 80 { 81 81 return pMethod; -
trunk/abdev/BasicCompiler_Common/src/Procedure.cpp
r350 r353 451 451 return true; 452 452 } 453 UserProc *UserProcs::Add ( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, char *buffer,int nowLine,bool isVirtual,CClass *pobj_c, bool isStatic)453 UserProc *UserProcs::AddUserProc( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, char *buffer,int nowLine,bool isVirtual,CClass *pobj_c, bool isStatic, char *interfaceName ) 454 454 { 455 455 int i2,i3; … … 545 545 temporary[i2]=buffer[i]; 546 546 } 547 548 char parentName[VN_SIZE], memberName[VN_SIZE]; 549 ReferenceKind refKind; 550 if( SplitMemberName( temporary, parentName, memberName, refKind ) ) 551 { 552 if( pobj_c ) 553 { 554 if( interfaceName ) 555 { 556 lstrcpy( interfaceName, parentName ); 557 } 558 else 559 { 560 SetError(); 561 return NULL; 562 } 563 564 char dummyMemberName[VN_SIZE]; 565 if( SplitMemberName( memberName, parentName, dummyMemberName, refKind ) ) 566 { 567 SetError(69,temporary,nowLine); 568 return NULL; 569 } 570 } 571 else 572 { 573 SetError(68,temporary,nowLine); 574 return NULL; 575 } 576 577 lstrcpy( temporary, memberName ); 578 } 547 579 } 548 580 … … 573 605 // すべての関数・メソッドをコンパイルする 574 606 pUserProc->Using(); 607 } 608 609 // 親インターフェイスをセット 610 if( interfaceName && interfaceName[0] ) 611 { 612 ::Interface *pTargetInterface = NULL; 613 BOOST_FOREACH( ::Interface *pInterface, pobj_c->GetInterfaces() ) 614 { 615 if( pInterface->GetClass().GetName() == interfaceName ) 616 { 617 pTargetInterface = pInterface; 618 break; 619 } 620 } 621 pUserProc->SetInterface( pTargetInterface ); 575 622 } 576 623
Note:
See TracChangeset
for help on using the changeset viewer.