Ignore:
Timestamp:
May 5, 2008, 2:17:58 PM (17 years ago)
Author:
dai_9181
Message:

IsExistIsExistDuplicationKeyName
・キー名ではなく、インスタンスそのものの重複を発見するためのIsExistメソッドを実装。

Location:
trunk/ab5.0/abdev/BasicCompiler_Common/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/Class.cpp

    r563 r564  
    646646
    647647    return false;
    648 }
    649 
    650 CClass *Classes::Create( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name){
    651     return new CClass(namespaceScopes, importedNamespaces, name);
    652 }
    653 bool Classes::Insert( CClass *pClass, int nowLine )
    654 {
    655     /////////////////////////////////
    656     // ハッシュデータに追加
    657     /////////////////////////////////
    658 
    659     if( !Put( pClass ) )
    660     {
    661         compiler.errorMessenger.Output(15,pClass->GetName(), nowLine);
    662         return false;
    663     }
    664     return true;
    665 }
    666 CClass *Classes::Add( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name,int nowLine){
    667     //////////////////////////////////////////////////////////////////////////
    668     // クラスを追加
    669     // ※名前のみを登録。その他の情報はSetClassメソッドで!
    670     //////////////////////////////////////////////////////////////////////////
    671 
    672     CClass *pClass = Create(namespaceScopes, importedNamespaces, name);
    673 
    674     if( !Insert( pClass, nowLine ) )
    675     {
    676         return NULL;
    677     }
    678 
    679     return pClass; 
    680648}
    681649
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp

    r561 r564  
    121121
    122122            //クラスを追加
    123             CClass *pClass = classes.Add(namespaceScopes, importedNamespaces, temporary,nowLine);
    124             if( pClass ){
    125                 if( source[nowLine+1] == ESC_CLASS ){
    126                     if( isEnum )
    127                     {
    128                         pClass->SetClassType( CClass::Enum );
    129                     }
    130                     else if( isDelegate )
    131                     {
    132                         pClass->SetClassType( CClass::Delegate );
    133                     }
    134                     else{
    135                         pClass->SetClassType( CClass::Class );
    136                     }
    137                 }
    138                 else if( source[nowLine+1] == ESC_INTERFACE ){
    139                     pClass->SetClassType( CClass::Interface );
     123            CClass *pClass = new CClass( namespaceScopes, importedNamespaces, temporary );
     124            if( classes.IsExist( pClass ) )
     125            {
     126                // 既に存在している
     127                compiler.errorMessenger.Output(15,pClass->GetName(), nowLine);
     128
     129                delete pClass;
     130
     131                continue;
     132            }
     133
     134            classes.Put( pClass );
     135
     136            if( source[nowLine+1] == ESC_CLASS )
     137            {
     138                if( isEnum )
     139                {
     140                    pClass->SetClassType( CClass::Enum );
     141                }
     142                else if( isDelegate )
     143                {
     144                    pClass->SetClassType( CClass::Delegate );
    140145                }
    141146                else{
    142                     pClass->SetClassType( CClass::Structure );
    143                 }
     147                    pClass->SetClassType( CClass::Class );
     148                }
     149            }
     150            else if( source[nowLine+1] == ESC_INTERFACE )
     151            {
     152                pClass->SetClassType( CClass::Interface );
     153            }
     154            else
     155            {
     156                pClass->SetClassType( CClass::Structure );
    144157            }
    145158
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Const.cpp

    r543 r564  
    162162
    163163                //重複チェック
    164                 if( compiler.GetObjectModule().meta.GetGlobalConstMacros().IsExist( name )
    165                     || compiler.GetObjectModule().meta.GetGlobalConsts().IsExist( name ) )
     164                if( compiler.GetObjectModule().meta.GetGlobalConstMacros().IsExistDuplicationKeyName( name )
     165                    || compiler.GetObjectModule().meta.GetGlobalConsts().IsExistDuplicationKeyName( name ) )
    166166                {
    167167                    compiler.errorMessenger.Output(15,name,cp);
Note: See TracChangeset for help on using the changeset viewer.