Ignore:
Timestamp:
Jun 26, 2007, 5:04:50 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/src/ClassImpl.cpp

    r185 r193  
    7676
    7777
     78bool 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
    7887bool ClassImpl::Inherits( const char *inheritNames, int nowLine ){
    7988    int i = 0;
     
    91100
    92101        //継承元クラスを取得
    93         const CClass *pInheritsClass = Smoothie::GetMeta().GetClasses().Find(temporary);
     102        const CClass *pInheritsClass = compiler.GetMeta().GetClasses().Find(temporary);
    94103        if( !pInheritsClass ){
    95104            SmoothieException::Throw(106,temporary,nowLine);
     
    121130    if( !isInheritsClass ){
    122131        // クラスを一つも継承していないとき
    123         const CClass *pObjectClass = Smoothie::GetMeta().GetClasses().Find("Object");
     132        const CClass *pObjectClass = compiler.GetMeta().GetClasses().Find("Object");
    124133        if( !pObjectClass ){
    125134            SmoothieException::Throw(106,"Object",i);
     
    145154
    146155        //継承元クラスを取得
    147         const CClass *pInheritsClass = Smoothie::GetMeta().GetClasses().Find(temporary);
     156        const CClass *pInheritsClass = compiler.GetMeta().GetClasses().Find(temporary);
    148157        if( !pInheritsClass ){
    149158            SmoothieException::Throw(106,temporary,nowLine);
     
    184193        //継承先が読み取られていないとき
    185194        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());
    187196        pobj_LoopRefCheck->del(this->GetName().c_str());
    188197    }
     
    246255        //継承先が読み取られていないとき
    247256        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());
    249258        pobj_LoopRefCheck->del(this->GetName().c_str());
    250259    }
     
    470479    }
    471480
    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));
    473482
    474483    for( int i=0; i < GetVtblNum(); i++ ){
     
    484493
    485494    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);
    487496
    488497    int i;
     
    505514
    506515    // Blittable型管理オブジェクトを初期化
    507     Smoothie::GetMeta().blittableTypes.clear();
     516    compiler.GetMeta().GetBlittableTypes().clear();
    508517
    509518    // 名前空間管理
     
    512521
    513522    // Importsされた名前空間の管理
    514     NamespaceScopesCollection &importedNamespaces = Smoothie::Temp::importedNamespaces;
     523    NamespaceScopesCollection &importedNamespaces = compiler.GetImportedNamespaces();
    515524    importedNamespaces.clear();
    516525
     
    549558                temporary[i2]=source[i];
    550559            }
    551             if( !importedNamespaces.Imports( temporary ) )
     560            if( !compiler.ImportsNamespace( temporary ) )
    552561            {
    553562                SmoothieException::Throw(64,temporary,i );
     
    580589                    i+=10;
    581590                    i+=GetStringInPare_RemovePare(temporary,source.GetBuffer()+i)+1;
    582                     Type::StringToType( temporary, blittableType );
     591                    Compiler::StringToType( temporary, blittableType );
    583592                }
    584593
     
    625634
    626635                    // Blittable型として登録
    627                     Smoothie::GetMeta().blittableTypes.push_back( BlittableType( blittableType, pClass ) );
     636                    compiler.GetMeta().GetBlittableTypes().push_back( BlittableType( blittableType, pClass ) );
    628637                }
    629638        }
     
    783792
    784793                //継承元クラスを取得
    785                 const CClass *pInheritsClass = Find(temporary);
     794                const Classes &classes = *this;
     795                const CClass *pInheritsClass = classes.Find(temporary);
    786796                if( !pInheritsClass ){
    787797                    SetError(106,temporary,i);
     
    12831293    }*/
    12841294}
     1295
     1296const 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.