Changeset 193 in dev for trunk/abdev/BasicCompiler_Common/src/ClassImpl.cpp
- Timestamp:
- Jun 26, 2007, 5:04:50 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/src/ClassImpl.cpp
r185 r193 76 76 77 77 78 bool ClassImpl::IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const 79 { 80 if( GetName() != name ){ 81 return false; 82 } 83 84 return compiler.IsSameAreaNamespace( GetNamespaceScopes(), namespaceScopes ); 85 } 86 78 87 bool ClassImpl::Inherits( const char *inheritNames, int nowLine ){ 79 88 int i = 0; … … 91 100 92 101 //継承元クラスを取得 93 const CClass *pInheritsClass = Smoothie::GetMeta().GetClasses().Find(temporary);102 const CClass *pInheritsClass = compiler.GetMeta().GetClasses().Find(temporary); 94 103 if( !pInheritsClass ){ 95 104 SmoothieException::Throw(106,temporary,nowLine); … … 121 130 if( !isInheritsClass ){ 122 131 // クラスを一つも継承していないとき 123 const CClass *pObjectClass = Smoothie::GetMeta().GetClasses().Find("Object");132 const CClass *pObjectClass = compiler.GetMeta().GetClasses().Find("Object"); 124 133 if( !pObjectClass ){ 125 134 SmoothieException::Throw(106,"Object",i); … … 145 154 146 155 //継承元クラスを取得 147 const CClass *pInheritsClass = Smoothie::GetMeta().GetClasses().Find(temporary);156 const CClass *pInheritsClass = compiler.GetMeta().GetClasses().Find(temporary); 148 157 if( !pInheritsClass ){ 149 158 SmoothieException::Throw(106,temporary,nowLine); … … 184 193 //継承先が読み取られていないとき 185 194 pobj_LoopRefCheck->add(this->GetName().c_str()); 186 Smoothie::GetMeta().GetClasses().GetClass_recur(inheritsClass.GetName().c_str());195 compiler.GetMeta().GetClasses().GetClass_recur(inheritsClass.GetName().c_str()); 187 196 pobj_LoopRefCheck->del(this->GetName().c_str()); 188 197 } … … 246 255 //継承先が読み取られていないとき 247 256 pobj_LoopRefCheck->add(this->GetName().c_str()); 248 Smoothie::GetMeta().GetClasses().GetClass_recur(inheritsInterface.GetName().c_str());257 compiler.GetMeta().GetClasses().GetClass_recur(inheritsInterface.GetName().c_str()); 249 258 pobj_LoopRefCheck->del(this->GetName().c_str()); 250 259 } … … 470 479 } 471 480 472 vtbl_offset= Compiler::GetNativeCode().GetDataTable().AddBinary((void *)ppsi,GetVtblNum()*sizeof(LONG_PTR));481 vtbl_offset=compiler.GetNativeCode().GetDataTable().AddBinary((void *)ppsi,GetVtblNum()*sizeof(LONG_PTR)); 473 482 474 483 for( int i=0; i < GetVtblNum(); i++ ){ … … 484 493 485 494 LONG_PTR *pVtbl; 486 pVtbl=(LONG_PTR *)((char *) Compiler::GetNativeCode().GetDataTable().GetPtr()+vtbl_offset);495 pVtbl=(LONG_PTR *)((char *)compiler.GetNativeCode().GetDataTable().GetPtr()+vtbl_offset); 487 496 488 497 int i; … … 505 514 506 515 // Blittable型管理オブジェクトを初期化 507 Smoothie::GetMeta().blittableTypes.clear();516 compiler.GetMeta().GetBlittableTypes().clear(); 508 517 509 518 // 名前空間管理 … … 512 521 513 522 // Importsされた名前空間の管理 514 NamespaceScopesCollection &importedNamespaces = Smoothie::Temp::importedNamespaces;523 NamespaceScopesCollection &importedNamespaces = compiler.GetImportedNamespaces(); 515 524 importedNamespaces.clear(); 516 525 … … 549 558 temporary[i2]=source[i]; 550 559 } 551 if( ! importedNamespaces.Imports( temporary ) )560 if( !compiler.ImportsNamespace( temporary ) ) 552 561 { 553 562 SmoothieException::Throw(64,temporary,i ); … … 580 589 i+=10; 581 590 i+=GetStringInPare_RemovePare(temporary,source.GetBuffer()+i)+1; 582 Type::StringToType( temporary, blittableType );591 Compiler::StringToType( temporary, blittableType ); 583 592 } 584 593 … … 625 634 626 635 // Blittable型として登録 627 Smoothie::GetMeta().blittableTypes.push_back( BlittableType( blittableType, pClass ) );636 compiler.GetMeta().GetBlittableTypes().push_back( BlittableType( blittableType, pClass ) ); 628 637 } 629 638 } … … 783 792 784 793 //継承元クラスを取得 785 const CClass *pInheritsClass = Find(temporary); 794 const Classes &classes = *this; 795 const CClass *pInheritsClass = classes.Find(temporary); 786 796 if( !pInheritsClass ){ 787 797 SetError(106,temporary,i); … … 1283 1293 }*/ 1284 1294 } 1295 1296 const CClass *ClassesImpl::Find( const NamespaceScopes &namespaceScopes, const string &name ) const 1297 { 1298 int key; 1299 key=GetHashCode(name.c_str()); 1300 1301 if( namespaceScopes.size() == 0 && name == "Object" ){ 1302 return GetObjectClassPtr(); 1303 } 1304 else if( namespaceScopes.size() == 0 && name == "String" ){ 1305 return GetStringClassPtr(); 1306 } 1307 1308 if(pobj_ClassHash[key]){ 1309 CClass *pobj_c; 1310 pobj_c=pobj_ClassHash[key]; 1311 while(1){ 1312 if( pobj_c->IsEqualSymbol( namespaceScopes, name ) ){ 1313 //名前空間とクラス名が一致した 1314 return pobj_c; 1315 } 1316 1317 if(pobj_c->pobj_NextClass==0) break; 1318 pobj_c=pobj_c->pobj_NextClass; 1319 } 1320 } 1321 1322 // TypeDefも見る 1323 int index = compiler.GetMeta().GetTypeDefs().GetIndex( namespaceScopes, name ); 1324 if( index != -1 ){ 1325 Type type = compiler.GetMeta().GetTypeDefs()[index].GetBaseType(); 1326 if( type.IsObject() ){ 1327 return &type.GetClass(); 1328 } 1329 } 1330 1331 return NULL; 1332 }
Note:
See TracChangeset
for help on using the changeset viewer.