Changeset 720 in dev for trunk/ab5.0


Ignore:
Timestamp:
Aug 14, 2008, 12:46:06 AM (16 years ago)
Author:
dai
Message:

#189への対応。型パラメータに型パラメータを指定したときにテンプレート展開の対象にならない不具合を修正。

Location:
trunk/ab5.0/abdev
Files:
3 edited

Legend:

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

    r710 r720  
    6767        // モジュール名がシンボル名として使えない場合があるので、16進数文字列に変換する
    6868        char temporary[VN_SIZE*2] = "";
    69         for( int i=0; i<originalName.size(); i++ )
     69        for( int i=0; i<static_cast<int>(originalName.size()); i++ )
    7070        {
    7171            sprintf( temporary + strlen(temporary), "%2x", originalName[i] );
     
    112112        Type typeParameterType;
    113113        StringToType( typeParameterStr, typeParameterType );
     114
     115        if( this->IsCompilingClass() )
     116        {
     117            if( this->pCompilingClass->IsExpanded() && typeParameterType.IsTypeParameter() )
     118            {
     119                // 現在コンパイル中のクラスがテンプレート展開済みのクラスで、
     120                // 尚且つターゲットとなる型が型パラメータだったとき
     121
     122                // テンプレート展開情報を用いて型解決を行う
     123                this->pCompilingClass->ResolveExpandedClassActualTypeParameter( typeParameterType );
     124            }
     125        }
    114126
    115127        genericTypes.push_back( GenericType( "(non support)", typeParameterType ) );
  • trunk/ab5.0/abdev/compiler_x64/Compile_Statement.cpp

    r716 r720  
    513513            goto ErrorStep;
    514514        }
    515         elementTypeName = collectionType.GetActualGenericType(0).GetClass().GetFullName();
     515
     516        Type elementType;
     517        if( collectionType.GetClass().IsExpanded() )
     518        {
     519            // テンプレート展開されたジェネリッククラス
     520            elementType = collectionType.GetClass().expandedClassActualTypeParameters[0];
     521        }
     522        else
     523        {
     524            // 通常のジェネリッククラス
     525            elementType = collectionType.GetActualGenericType(0);
     526        }
     527
     528        elementTypeName = compiler.TypeToString( elementType );
    516529    }
    517530
  • trunk/ab5.0/abdev/compiler_x86/Compile_Statement.cpp

    r712 r720  
    650650            goto ErrorStep;
    651651        }
    652         elementTypeName = collectionType.GetActualGenericType(0).GetClass().GetFullName();
     652
     653        Type elementType;
     654        if( collectionType.GetClass().IsExpanded() )
     655        {
     656            // テンプレート展開されたジェネリッククラス
     657            elementType = collectionType.GetClass().expandedClassActualTypeParameters[0];
     658        }
     659        else
     660        {
     661            // 通常のジェネリッククラス
     662            elementType = collectionType.GetActualGenericType(0);
     663        }
     664
     665        elementTypeName = compiler.TypeToString( elementType );
    653666    }
    654667
Note: See TracChangeset for help on using the changeset viewer.