Ignore:
Timestamp:
Mar 21, 2008, 7:34:57 PM (16 years ago)
Author:
dai_9181
Message:

・デリゲートの共変戻り値、反変引数に対応した。
・core.libで定義されたデリゲートがアプリケーションプロジェクトで利用できないバグを修正。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/BasicCompiler_Common/src/Parameter.cpp

    r422 r448  
    22
    33
    4 bool Parameter::Equals( const Parameter &param ) const
     4bool Parameter::Equals( const Parameter &param, bool isContravariant ) const
    55{
    66    if( Type::Equals( param ) )
     
    2525    }
    2626
     27    if( isContravariant )
     28    {
     29        // 反変引数を許可する
     30        if( this->IsContravariant( param ) )
     31        {
     32            // 反変引数だったとき
     33            return true;
     34        }
     35    }
     36
    2737    return false;
    2838}
    29 bool Parameter::Equals( const Types &actualTypeParametersForThisProc, const Parameter &param ) const
    30 {
    31     if( Equals( param ) )
     39bool Parameter::Equals( const Types &actualTypeParametersForThisProc, const Parameter &param, bool isContravariant ) const
     40{
     41    if( Equals( param, isContravariant ) )
    3242    {
    3343        return true;
     
    4757}
    4858
    49 bool Parameters::Equals( const Parameters &params ) const
     59bool Parameters::Equals( const Parameters &params, bool isContravariant ) const
    5060{
    5161    if( this->size() != params.size() ){
     
    5565    int max = (int)this->size();
    5666    for( int i=0; i<max; i++ ){
    57         if( !(*this)[i]->Equals( *params[i] ) ){
     67        if( !(*this)[i]->Equals( *params[i], isContravariant ) ){
    5868            return false;
    5969        }
     
    6272    return true;
    6373}
    64 bool Parameters::Equals( const Types &actualTypeParametersForThisProc, const Parameters &params ) const
     74bool Parameters::Equals( const Types &actualTypeParametersForThisProc, const Parameters &params, bool isContravariant ) const
    6575{
    6676    if( this->size() != params.size() ){
     
    7080    int max = (int)this->size();
    7181    for( int i=0; i<max; i++ ){
    72         if( !(*this)[i]->Equals( actualTypeParametersForThisProc, *params[i] ) ){
     82        if( !(*this)[i]->Equals( actualTypeParametersForThisProc, *params[i], isContravariant ) ){
    7383            return false;
    7484        }
Note: See TracChangeset for help on using the changeset viewer.