Changeset 448 in dev for trunk/ab5.0/abdev/BasicCompiler_Common/src
- Timestamp:
- Mar 21, 2008, 7:34:57 PM (17 years ago)
- Location:
- trunk/ab5.0/abdev/BasicCompiler_Common/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/BasicCompiler_Common/src/Delegate.cpp
r422 r448 20 20 } 21 21 } 22 } 23 24 bool Delegate::IsSimilar( const Delegate &dgt ) const 25 { 26 if( this->Params().Equals( dgt.Params(), true ) ) // パラメータが等しい、もしくは反変 27 { 28 if( this->returnType.Equals( dgt.returnType ) ) 29 { 30 // 戻り値が等しい 31 return true; 32 } 33 else if( this->returnType.IsCovariant( dgt.returnType ) ) 34 { 35 // 戻り値が共変 36 return true; 37 } 38 } 39 return false; 22 40 } 23 41 … … 149 167 const Delegate &dg = *this->Iterator_GetNext(); 150 168 169 if( !dg.isTargetObjectModule ) 170 { 171 // 静的リンクライブラリの場合は飛ばす(既にインスタンスが定義済みであるため) 172 continue; 173 } 174 151 175 std::map<std::string,std::string> values; 152 176 -
trunk/ab5.0/abdev/BasicCompiler_Common/src/Meta.cpp
r392 r448 152 152 } 153 153 meta.procPointers.PullOutAll(); 154 155 // デリゲート 156 meta.GetDelegates().Iterator_Reset(); 157 while( meta.GetDelegates().Iterator_HasNext() ) 158 { 159 Delegate *pDelegate = meta.GetDelegates().Iterator_GetNext(); 160 pDelegate->isTargetObjectModule = false; 161 this->GetDelegates().Put( pDelegate ); 162 } 163 meta.GetDelegates().PullOutAll(); 154 164 } -
trunk/ab5.0/abdev/BasicCompiler_Common/src/Parameter.cpp
r422 r448 2 2 3 3 4 bool Parameter::Equals( const Parameter ¶m ) const4 bool Parameter::Equals( const Parameter ¶m, bool isContravariant ) const 5 5 { 6 6 if( Type::Equals( param ) ) … … 25 25 } 26 26 27 if( isContravariant ) 28 { 29 // 反変引数を許可する 30 if( this->IsContravariant( param ) ) 31 { 32 // 反変引数だったとき 33 return true; 34 } 35 } 36 27 37 return false; 28 38 } 29 bool Parameter::Equals( const Types &actualTypeParametersForThisProc, const Parameter ¶m ) const30 { 31 if( Equals( param ) )39 bool Parameter::Equals( const Types &actualTypeParametersForThisProc, const Parameter ¶m, bool isContravariant ) const 40 { 41 if( Equals( param, isContravariant ) ) 32 42 { 33 43 return true; … … 47 57 } 48 58 49 bool Parameters::Equals( const Parameters ¶ms ) const59 bool Parameters::Equals( const Parameters ¶ms, bool isContravariant ) const 50 60 { 51 61 if( this->size() != params.size() ){ … … 55 65 int max = (int)this->size(); 56 66 for( int i=0; i<max; i++ ){ 57 if( !(*this)[i]->Equals( *params[i] ) ){67 if( !(*this)[i]->Equals( *params[i], isContravariant ) ){ 58 68 return false; 59 69 } … … 62 72 return true; 63 73 } 64 bool Parameters::Equals( const Types &actualTypeParametersForThisProc, const Parameters ¶ms ) const74 bool Parameters::Equals( const Types &actualTypeParametersForThisProc, const Parameters ¶ms, bool isContravariant ) const 65 75 { 66 76 if( this->size() != params.size() ){ … … 70 80 int max = (int)this->size(); 71 81 for( int i=0; i<max; i++ ){ 72 if( !(*this)[i]->Equals( actualTypeParametersForThisProc, *params[i] ) ){82 if( !(*this)[i]->Equals( actualTypeParametersForThisProc, *params[i], isContravariant ) ){ 73 83 return false; 74 84 } -
trunk/ab5.0/abdev/BasicCompiler_Common/src/Type.cpp
r447 r448 161 161 162 162 return this->GetClass().IsSubClass( &type.GetClass() ); 163 } 164 bool Type::IsContravariant( const Type &type ) const 165 { 166 if( !this->IsObject() || !type.IsObject() ) 167 { 168 // 反変性の判別はクラス型のみ 169 return false; 170 } 171 172 return type.GetClass().IsSubClass( &this->GetClass() ); 163 173 } 164 174
Note:
See TracChangeset
for help on using the changeset viewer.