Changeset 108 in dev for BasicCompiler_Common/Class.cpp


Ignore:
Timestamp:
May 6, 2007, 6:52:10 PM (18 years ago)
Author:
dai_9181
Message:

関数、クラスメソッドにImports機構を適用。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Class.cpp

    r106 r108  
    148148
    149149
    150 CClass::CClass( const NamespaceScopes &namespaceScopes, const char *name ):
    151     namespaceScopes( namespaceScopes ),
    152     ConstructorMemberSubIndex( 0 ),
    153     DestructorMemberSubIndex( 0 ),
    154     classType( Class ),
    155     isUsing( false ),
    156     pobj_InheritsClass( NULL ),
    157     ppobj_Member( NULL ),
    158     iMemberNum( 0 ),
    159     vtbl_num( 0 ),
    160     iAlign( 0 ),
    161     vtbl_offset( -1 ),
    162     isCompilingConstructor( false ),
    163     isCompilingDestructor( false ),
    164     pobj_NextClass( NULL )
     150CClass::CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name )
     151    : namespaceScopes( namespaceScopes )
     152    , importedNamespaces( importedNamespaces )
     153    , ConstructorMemberSubIndex( 0 )
     154    , DestructorMemberSubIndex( 0 )
     155    , classType( Class )
     156    , isUsing( false )
     157    , pobj_InheritsClass( NULL )
     158    , ppobj_Member( NULL )
     159    , iMemberNum( 0 )
     160    , vtbl_num( 0 )
     161    , iAlign( 0 )
     162    , vtbl_offset( -1 )
     163    , isCompilingConstructor( false )
     164    , isCompilingDestructor( false )
     165    , pobj_NextClass( NULL )
    165166{
    166167    this->name=(char *)HeapAlloc(hHeap,0,lstrlen(name)+1);
     
    854855}
    855856
    856 CClass *CDBClass::AddClass( const NamespaceScopes &namespaceScopes, const char *name,int nowLine){
     857CClass *CDBClass::AddClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name,int nowLine){
    857858    //////////////////////////////////////////////////////////////////////////
    858859    // クラスを追加
     
    861862
    862863    CClass *pobj_c;
    863     pobj_c=new CClass(namespaceScopes, name);
     864    pobj_c=new CClass(namespaceScopes, importedNamespaces, name);
    864865
    865866    if(lstrcmp(name,"String")==0){
     
    910911    namespaceScopes.clear();
    911912
     913    // Importsされた名前空間の管理
     914    NamespaceScopesCollection &importedNamespaces = Smoothie::Meta::importedNamespaces;
     915    importedNamespaces.clear();
     916
    912917    for(i=0;;i++){
    913918        if(basbuf[i]=='\0') break;
     
    934939
    935940            i += 2;
     941            continue;
     942        }
     943        else if( basbuf[i] == 1 && basbuf[i+1] == ESC_IMPORTS ){
     944            for(i+=2,i2=0;;i2++,i++){
     945                if( IsCommandDelimitation( basbuf[i] ) ){
     946                    temporary[i2]=0;
     947                    break;
     948                }
     949                temporary[i2]=basbuf[i];
     950            }
     951            importedNamespaces.Imports( temporary );
     952
     953            continue;
     954        }
     955        else if( basbuf[i] == 1 && basbuf[i+1] == ESC_CLEARNAMESPACEIMPORTED ){
     956            importedNamespaces.clear();
    936957            continue;
    937958        }
     
    971992
    972993                //クラスを追加
    973                 CClass *pClass = pobj_DBClass->AddClass(namespaceScopes, temporary,nowLine);
     994                CClass *pClass = pobj_DBClass->AddClass(namespaceScopes, importedNamespaces, temporary,nowLine);
    974995                if( pClass ){
    975996                    if( basbuf[nowLine+1] == ESC_CLASS ){
     
    10101031    //関数ハッシュへ登録
    10111032    GlobalProc *pUserProc;
    1012     pUserProc=AddSubData( NamespaceScopes(), buffer,nowLine,bVirtual,pobj_c, (bStatic!=0) );
     1033    pUserProc=AddSubData( NamespaceScopes(), NamespaceScopesCollection(), buffer,nowLine,bVirtual,pobj_c, (bStatic!=0) );
    10131034    if(!pUserProc) return;
    10141035
Note: See TracChangeset for help on using the changeset viewer.