Ignore:
Timestamp:
Mar 3, 2008, 6:33:29 PM (16 years ago)
Author:
dai_9181
Message:

クラス継承を行う際、dynamicMembersの中身をコピーする方式をやめ、基底クラスのものを参照するように修正した。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/src/Class_Collect.cpp

    r402 r409  
    216216
    217217bool Classes::MemberVar_LoopRefCheck(const CClass &objClass){
     218    if( objClass.HasSuperClass() )
     219    {
     220        // 基底クラスをチェック
     221        if( MemberVar_LoopRefCheck( objClass.GetSuperClass() ) == false )
     222        {
     223            return false;
     224        }
     225    }
     226
    218227    bool result = true;
    219228    BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
     
    483492                iAlign=atoi(temporary);
    484493
     494                if( dwClassType != ESC_TYPE )
     495                {
     496                    SetError(140,NULL,i);
     497                }
     498
    485499                if(!(iAlign==1||iAlign==2||iAlign==4||iAlign==8||iAlign==16))
    486500                    SetError(51,NULL,i);
     
    490504                i+=10;
    491505                i=JumpStringInPare(basbuf,i)+1;
     506
     507                if( dwClassType != ESC_CLASS )
     508                {
     509                    SetError(141,NULL,i);
     510                }
    492511            }
    493512
     
    715734
    716735
    717                         if(pobj_c->GetDynamicMembers()[pobj_c->GetDynamicMembers().size()-1]->GetType().IsStruct()){
    718                             if( !pobj_c->GetDynamicMembers()[pobj_c->GetDynamicMembers().size()-1]->GetType().GetClass().IsReady() ){
     736                        if(pobj_c->GetDynamicMembers().back()->GetType().IsStruct()){
     737                            if( !pobj_c->GetDynamicMembers().back()->GetType().GetClass().IsReady() ){
    719738                                //参照先が読み取られていないとき
    720                                 GetClass_recur(pobj_c->GetDynamicMembers()[pobj_c->GetDynamicMembers().size()-1]->GetType().GetClass().GetName().c_str());
     739                                GetClass_recur(pobj_c->GetDynamicMembers().back()->GetType().GetClass().GetName().c_str());
    721740                            }
    722741                        }
    723742
    724743
    725                         if(pobj_c->GetDynamicMembers()[pobj_c->GetDynamicMembers().size()-1]->GetType().IsStruct()){
     744                        if(pobj_c->GetDynamicMembers().back()->GetType().IsStruct()){
    726745                            //循環参照のチェック
    727746                            pobj_LoopRefCheck->add(pobj_c->GetName().c_str());
    728                             if(!MemberVar_LoopRefCheck(pobj_c->GetDynamicMembers()[pobj_c->GetDynamicMembers().size()-1]->GetType().GetClass())){
     747                            if(!MemberVar_LoopRefCheck(pobj_c->GetDynamicMembers().back()->GetType().GetClass())){
    729748                                //エラー回避
    730749                                Type &type = const_cast<Type &>(pobj_c->GetDynamicMembers().back()->GetType());
Note: See TracChangeset for help on using the changeset viewer.