Changeset 723 in dev


Ignore:
Timestamp:
Aug 15, 2008, 11:31:19 PM (13 years ago)
Author:
dai
Message:

#186への対応。ジェネリックインターフェイスのInheritsに対応。

File:
1 edited

Legend:

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

    r682 r723  
    834834                }
    835835
    836                 if(lstrcmpi(temporary,pobj_c->GetName().c_str())==0){
    837                     compiler.errorMessenger.Output(105,temporary,i);
     836                // ジェネリクス構文を分解
     837                char className[VN_SIZE];
     838                Jenga::Common::Strings typeParameterStrings;
     839                SplitGenericClassInstance( temporary, className, typeParameterStrings );
     840
     841                // 型パラメータ文字列から型データを取得
     842                Types actualTypeParameters;
     843                BOOST_FOREACH( const std::string &typeParameterStr, typeParameterStrings )
     844                {
     845                    Type type;
     846                    compiler.StringToType( typeParameterStr, type );
     847                    actualTypeParameters.push_back( type );
     848                }
     849
     850                if(lstrcmpi(className,pobj_c->GetName().c_str())==0){
     851                    compiler.errorMessenger.Output(105,className,i);
    838852                    goto Interface_InheritsError;
    839853                }
     
    841855                //継承元クラスを取得
    842856                const CClass *pInheritsClass = compiler.GetObjectModule().meta.FindClassSupportedTypeDef(
    843                     LexicalAnalyzer::FullNameToSymbol( temporary )
     857                    LexicalAnalyzer::FullNameToSymbol( className )
    844858                );
    845859                if( !pInheritsClass ){
    846                     compiler.errorMessenger.Output(106,temporary,i);
     860                    compiler.errorMessenger.Output(106,className,i);
    847861                    goto Interface_InheritsError;
    848862                }
     
    856870
    857871                //継承させる
    858                 if( !pobj_c->InheritsClass( *pInheritsClass, Types(), i ) ){
     872                if( !pobj_c->InheritsClass( *pInheritsClass, actualTypeParameters, i ) ){
    859873                    goto Interface_InheritsError;
    860874                }
Note: See TracChangeset for help on using the changeset viewer.