Ignore:
Timestamp:
May 2, 2007, 4:08:58 AM (17 years ago)
Author:
dai_9181
Message:

名前空間機能をグローバル変数、定数と列挙型に適用。
一部、クラスの静的メンバと名前空間の相性が悪いコードが潜んでいるため、要改修

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Intermediate_Step2.cpp

    r100 r103  
    165165    }
    166166}
    167 void AddConstEnum(char *buffer){
     167void AddConstEnum( const NamespaceScopes &namespaceScopes, char *buffer){
    168168    extern int cp;
    169169    int i=0,i2;
     
    235235
    236236        //定数を追加
    237         CDBConst::obj.AddConst(temporary, NextValue);
     237        CDBConst::obj.AddConst( namespaceScopes, temporary, NextValue);
    238238    }
    239239}
     
    243243    ////////////////////////////////////////////
    244244
    245     int i,i2;
     245    int i2;
    246246    char temporary[1024];
     247
     248    // 名前空間管理
     249    NamespaceScopes &namespaceScopes = Smoothie::Lexical::liveingNamespaceScopes;
     250    namespaceScopes.clear();
    247251
    248252    //定数に関する情報
     
    251255
    252256    extern char *basbuf;
    253     for(i=0;;i++){
     257    for(int i=0;;i++){
    254258        if( basbuf[i] == '\0' ) break;
     259
     260        if( basbuf[i] == 1 && basbuf[i+1] == ESC_NAMESPACE ){
     261            for(i+=2,i2=0;;i2++,i++){
     262                if( IsCommandDelimitation( basbuf[i] ) ){
     263                    temporary[i2]=0;
     264                    break;
     265                }
     266                temporary[i2]=basbuf[i];
     267            }
     268            namespaceScopes.push_back( temporary );
     269
     270            continue;
     271        }
     272        else if( basbuf[i] == 1 && basbuf[i+1] == ESC_ENDNAMESPACE ){
     273            if( namespaceScopes.size() <= 0 ){
     274                SetError(12, "End Namespace", i );
     275            }
     276            else{
     277                namespaceScopes.pop_back();
     278            }
     279
     280            i += 2;
     281            continue;
     282        }
     283
    255284        if( basbuf[i] == 1 ){
    256285            if(basbuf[i]==1&&basbuf[i+1]==ESC_CONST){
     
    262291
    263292                if(basbuf[i]==1&&basbuf[i+1]==ESC_ENUM){
    264                     AddConstEnum(basbuf+i);
     293                    AddConstEnum( namespaceScopes, basbuf+i);
    265294                    continue;
    266295                }
     
    281310                    temporary[i2]=basbuf[i];
    282311                }
    283                 CDBConst::obj.Add(temporary);
     312                CDBConst::obj.Add( namespaceScopes, temporary);
    284313                if(basbuf[i]=='\0') break;
    285314            }
Note: See TracChangeset for help on using the changeset viewer.