Ignore:
Timestamp:
Jun 5, 2008, 10:04:39 PM (16 years ago)
Author:
dai_9181
Message:

ジェネリッククラスの型パラメータに値型が指定されたときに限り、テンプレート展開を行うようにした。

TODO: libファイルを跨ってテンプレート展開ができていないため、ソースコード管理部分に手を加える必要あり。

File:
1 edited

Legend:

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

    r593 r632  
    9696    while( classes.Iterator_HasNext() )
    9797    {
    98         GenerateFullVTables( *classes.Iterator_GetNext() );
     98        CClass *pClass = classes.Iterator_GetNext();
     99        GenerateFullVTables( *pClass );
     100
     101        // テンプレート展開されたクラスも
     102        BOOST_FOREACH( ActiveBasic::Common::Lexical::ExpandedTemplateClass *pExpandedTemplateClass, pClass->expandedTemplateClasses )
     103        {
     104            if( !pExpandedTemplateClass->GetClass().expandedTemplateClasses.empty() )
     105            {
     106                // テンプレート展開後のクラスが更にテンプレート展開されていることはありえない
     107                throw;
     108            }
     109
     110            GenerateFullVTables( pExpandedTemplateClass->GetClass() );
     111        }
    99112    }
    100113}
     
    167180    while( classes.Iterator_HasNext() )
    168181    {
    169         ActionVtblSchedule( *classes.Iterator_GetNext(), ImageBase, MemPos_CodeSection, MemPos_DataSection );
     182        CClass *pClass = classes.Iterator_GetNext();
     183        ActionVtblSchedule( *pClass, ImageBase, MemPos_CodeSection, MemPos_DataSection );
     184
     185        // テンプレート展開されたクラスも
     186        BOOST_FOREACH( ActiveBasic::Common::Lexical::ExpandedTemplateClass *pExpandedTemplateClass, pClass->expandedTemplateClasses )
     187        {
     188            if( !pExpandedTemplateClass->GetClass().expandedTemplateClasses.empty() )
     189            {
     190                // テンプレート展開後のクラスが更にテンプレート展開されていることはありえない
     191                throw;
     192            }
     193
     194            ActionVtblSchedule( pExpandedTemplateClass->GetClass(), ImageBase, MemPos_CodeSection, MemPos_DataSection );
     195        }
    170196    }
    171197}
Note: See TracChangeset for help on using the changeset viewer.