#include #include #include #include #include TypeDef::TypeDef( const NamespaceScopes &namespaceScopes, const string &name, const string &baseName, int nowLine ) : namespaceScopes( namespaceScopes ) , name( name ) , baseName( baseName ) { if( !Compiler::StringToType( baseName, baseType ) ){ SmoothieException::Throw(3, baseName, nowLine ); return; } } TypeDef::~TypeDef(){ } bool TypeDef::IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const { if( GetName() != name ){ return false; } return compiler.IsSameAreaNamespace( this->namespaceScopes, namespaceScopes ); } bool TypeDef::IsEqualSymbol( const string &fullName ) const { char AreaName[VN_SIZE] = ""; //オブジェクト変数 char NestName[VN_SIZE] = ""; //入れ子メンバ bool isNest = CClass::SplitName( fullName.c_str(), AreaName, NestName ); if( IsEqualSymbol( NamespaceScopes( AreaName ), NestName ) ){ return true; } if( isNest ){ // 静的メンバを考慮 char AreaName2[VN_SIZE] = ""; //オブジェクト変数 char NestName2[VN_SIZE] = ""; //入れ子メンバ bool isNest = CClass::SplitName( AreaName, AreaName2, NestName2 ); lstrcat( NestName2, "." ); lstrcat( NestName2, NestName ); return IsEqualSymbol( NamespaceScopes( AreaName2 ), NestName2 ); } return false; } TypeDefCollection::TypeDefCollection(){ } TypeDefCollection::~TypeDefCollection(){ } void TypeDefCollection::Add( const NamespaceScopes &namespaceScopes, const string &name, const string &baseName, int nowLine ){ TypeDef typeDef( namespaceScopes, name, baseName, nowLine ); this->push_back( typeDef ); } int TypeDefCollection::GetIndex( const NamespaceScopes &namespaceScopes, const string &name ) const{ int max = (int)(*this).size(); for( int i=0; i