Changeset 192 in dev for trunk/jenga/src


Ignore:
Timestamp:
Jun 26, 2007, 5:04:29 AM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/jenga/src/smoothie
Files:
1 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/jenga/src/smoothie/Class.cpp

    r190 r192  
    374374}
    375375
    376 const CClass *Classes::Find( const NamespaceScopes &namespaceScopes, const string &name ) const
    377 {
    378     int key;
    379     key=GetHashCode(name.c_str());
    380 
    381     if( namespaceScopes.size() == 0 && name == "Object" ){
    382         return GetObjectClassPtr();
    383     }
    384     else if( namespaceScopes.size() == 0 && name == "String" ){
    385         return GetStringClassPtr();
    386     }
    387 
    388     if(pobj_ClassHash[key]){
    389         CClass *pobj_c;
    390         pobj_c=pobj_ClassHash[key];
    391         while(1){
    392             if( pobj_c->IsEqualSymbol( namespaceScopes, name ) ){
    393                 //名前空間とクラス名が一致した
    394                 return pobj_c;
    395             }
    396 
    397             if(pobj_c->pobj_NextClass==0) break;
    398             pobj_c=pobj_c->pobj_NextClass;
    399         }
    400     }
    401 
    402     // TypeDefも見る
    403     int index = Smoothie::GetMeta().typeDefs.GetIndex( namespaceScopes, name );
    404     if( index != -1 ){
    405         Type type = Smoothie::GetMeta().typeDefs[index].GetBaseType();
    406         if( type.IsObject() ){
    407             return &type.GetClass();
    408         }
    409     }
    410 
    411     return NULL;
    412 }
    413376const CClass *Classes::Find( const string &fullName ) const
    414377{
  • trunk/jenga/src/smoothie/Namespace.cpp

    r186 r192  
    2626}
    2727
    28 bool NamespaceScopes::IsImported() const
    29 {
    30     BOOST_FOREACH( const NamespaceScopes &namespaceScopes, Smoothie::Temp::importedNamespaces ){
    31         if( this->IsEqual( namespaceScopes ) ){
    32             return true;
    33         }
    34     }
    35     return false;
    36 }
    3728bool NamespaceScopes::IsLiving() const
    3829{
     
    10495    lstrcpy( simpleName, fullName + lstrlen( namespaceStr ) + dotLength );
    10596}
    106 bool NamespaceScopesCollection::Imports( const string &namespaceStr ){
    107     NamespaceScopes namespaceScopes( namespaceStr );
    108     if( !Smoothie::GetMeta().namespaceScopesCollection.IsExist( namespaceScopes ) ){
    109         return false;
    110     }
    111 
    112     this->push_back( namespaceScopes );
    113 
    114     return true;
    115 }
    11697bool NamespaceScopesCollection::CollectNamespaces( const char *source, NamespaceScopesCollection &namespaceScopesCollection )
    11798{
  • trunk/jenga/src/smoothie/Procedure.cpp

    r186 r192  
    3737}
    3838
    39 bool DllProc::IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const
    40 {
    41     if( GetName() != name ){
    42         return false;
    43     }
    44     return NamespaceScopes::IsSameArea( this->namespaceScopes, namespaceScopes );
    45 }
    4639bool DllProc::IsEqualSymbol( const string &fullName ) const
    4740{
  • trunk/jenga/src/smoothie/Prototype.cpp

    r171 r192  
    22#include <jenga/include/smoothie/Class.h>
    33
    4 bool Prototype::IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const
    5 {
    6     if( GetName() != name ){
    7         return false;
    8     }
    9 
    10     return NamespaceScopes::IsSameArea( GetNamespaceScopes(), namespaceScopes );
    11 }
    124bool Prototype::IsEqualSymbol( const Prototype &prototype ) const
    135{
  • trunk/jenga/src/smoothie/Type.cpp

    r186 r192  
    6161    return false;
    6262}
    63 
    64 
    65 bool Type::StringToType( const string &typeName, Type &type ){
    66     type.index = -1;
    67 
    68     if( typeName[0] == '*' ){
    69         if( typeName.size() >= 3
    70             && typeName[1] == 1 && ( typeName[2] == ESC_FUNCTION || typeName[2] == ESC_SUB ) ){
    71                 //関数ポインタ(*Function)
    72                 type.basicType = DEF_PTR_PROC;
    73                 type.index = Smoothie::GetMeta().GetProcPointers().Add( typeName );
    74                 return true;
    75         }
    76 
    77         const string &nextTypeName = typeName.substr( 1 );
    78 
    79         if( !StringToType( nextTypeName, type ) ){
    80             return false;
    81         }
    82 
    83         type.PtrLevelUp();
    84 
    85         return true;
    86     }
    87 
    88     if( StringToBasicType( typeName, type.basicType ) ){
    89         // 基本型だったとき
    90         return true;
    91     }
    92 
    93 
    94     // Object型だったとき
    95     if( typeName == "Object" ){
    96         type.SetType( DEF_OBJECT, Smoothie::GetMeta().GetClasses().GetObjectClassPtr() );
    97         return true;
    98     }
    99 
    100     // String型だったとき
    101     if( typeName == "String" ){
    102         type.SetType( DEF_OBJECT, Smoothie::GetMeta().GetClasses().GetStringClassPtr() );
    103         return true;
    104     }
    105 
    106 
    107     ////////////////////
    108     // TypeDefされた型
    109     ////////////////////
    110     int i=Smoothie::GetMeta().typeDefs.GetIndex( typeName );
    111     if(i!=-1){
    112         type = Smoothie::GetMeta().typeDefs[i].GetBaseType();
    113         return true;
    114     }
    115 
    116     //クラス
    117     const CClass *pobj_c = Smoothie::GetMeta().GetClasses().Find( typeName );
    118     if(pobj_c){
    119         type.pClass = pobj_c;
    120 
    121         if( pobj_c->IsStructure() ){
    122             type.basicType = DEF_STRUCT;
    123         }
    124         else{
    125             type.basicType = DEF_OBJECT;
    126         }
    127         return true;
    128     }
    129 
    130     return false;
     63const char *Type::BasicTypeToCharPtr( const Type &type )
     64{
     65    for( int i=0; ; i++ ){
     66        if( basicTypeList[i] == DEF_NON ){
     67            break;
     68        }
     69        if( basicTypeList[i] == type.GetBasicType() ){
     70            return basicTypeNameList[i].c_str();
     71        }
     72    }
     73    return NULL;
    13174}
    13275
     
    488431}
    489432
    490 
    491 const string Type::ToString() const
    492 {
    493     if( PTR_LEVEL( basicType ) ){
    494         //ポインタレベルが1以上の場合
    495         Type type( *this );
    496         type.PtrLevelDown();
    497 
    498         return (string)"*" + type.ToString();
    499     }
    500     else if( IsObject() || IsStruct() ){
    501         //オブジェクトまたは構造体
    502 
    503         if( !( index == 0 || index == -1 ) ){
    504             if( pClass->GetNamespaceScopes().size() >= 1 )
    505             {
    506                 return pClass->GetNamespaceScopes().ToString() + "." + pClass->GetName();
    507             }
    508             return pClass->GetName();
    509         }
    510     }
    511     else if( IsProcPtr() ){
    512         if( index == 0 || index == -1 ){
    513             return "VoidPtr";
    514         }
    515         else{
    516             if( Smoothie::GetMeta().GetProcPointers()[index]->ReturnType().IsNull() ){
    517                 return "*Sub";
    518             }
    519             return "*Function";
    520         }
    521     }
    522     else{
    523         // 基本型
    524 
    525         for( int i=0; ; i++ ){
    526             if( basicTypeList[i] == DEF_NON ){
    527                 break;
    528             }
    529             if( basicTypeList[i] == basicType ){
    530                 return basicTypeNameList[i];
    531             }
    532         }
    533     }
    534 
    535     SmoothieException::Throw( 1 );
    536 
    537     return (string)"(null)";
    538 }
    539 
    540 Type Type::String(){
    541     return Type( DEF_OBJECT, *Smoothie::GetMeta().GetClasses().GetStringClassPtr() );
    542 }
    543 
    544433int Type::GetBasicTypeFromSimpleName( const char *variable ){
    545434    extern char DefIntVari[26],DefSngVari[26],DefStrVari[26],divNum,dsvNum,dStrvNum;
  • trunk/jenga/src/smoothie/Variable.cpp

    r174 r192  
    11#include <jenga/include/smoothie/Smoothie.h>
    22#include <jenga/include/smoothie/Class.h>
    3 
    4 bool Variable::IsEqualSymbol( const Symbol &symbol, bool isSupportStaticMember ) const
    5 {
    6     if( GetName() == symbol.GetName()
    7         && NamespaceScopes::IsSameArea( this->namespaceScopes, symbol.GetNamespaceScopes() ) )
    8     {
    9         return true;
    10     }
    11 
    12     if( isSupportStaticMember && symbol.GetNamespaceScopes().size() >= 1 )
    13     {
    14         // 静的メンバを考慮
    15         NamespaceScopes namespaceScopes( symbol.GetNamespaceScopes() );
    16         string name = namespaceScopes[namespaceScopes.size()-1] + "." + symbol.GetName();
    17         namespaceScopes.pop_back();
    18 
    19         return IsEqualSymbol( Symbol( namespaceScopes, name ), false );
    20     }
    21     return false;
    22 }
    233
    244
Note: See TracChangeset for help on using the changeset viewer.