Changeset 64 in dev for BasicCompiler_Common/Class.cpp


Ignore:
Timestamp:
Mar 8, 2007, 2:49:34 AM (17 years ago)
Author:
dai_9181
Message:

すべてのオブジェクトを参照型に切り替えた。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Class.cpp

    r63 r64  
    101101
    102102int CMember::GetSize(){
    103     if( IsRef() ){
    104         // 参照型
    105         return PTR_SIZE;
    106     }
    107 
    108103    //メンバサイズを取得
    109104    return GetTypeSize(TypeInfo.type,TypeInfo.u.lpIndex);
     
    126121            char temporary[VN_SIZE];
    127122            sprintf(temporary,"%s.%s",pobj_c->name,member->name);
    128             AddGlobalVariable(
     123            dim(
    129124                false,
    130125                temporary,
    131126                member->SubScripts,
    132                 &member->TypeInfo,
     127                member->TypeInfo,
    133128                GetTypeSize(member->TypeInfo.type,member->TypeInfo.u.lpIndex),
    134129                member->InitBuf,
    135130                member->ConstractParameter,
    136131                0);
    137 
    138             if(member->TypeInfo.type==DEF_OBJECT){
    139                 //エラー用
    140                 cp=member->source_code_address;
    141 
    142                 CallConstructor(temporary,
    143                     member->SubScripts,
    144                     member->TypeInfo,
    145                     member->ConstractParameter);
    146             }
    147132
    148133            //ネイティブコードバッファの再確保
     
    220205    }
    221206}
     207
     208bool CClass::IsStructure() const
     209{
     210    return classType == CClass::Structure;
     211}
     212
    222213void CClass::Inherits( CClass *pInheritsClass ){
    223214    int i3;
     
    437428        //アラインメントを算出
    438429        int member_size;
    439         if(pMember->TypeInfo.type==DEF_OBJECT){
     430        if(pMember->TypeInfo.type==DEF_STRUCT){
    440431            //メンバクラスのアラインメントを取得
    441432            member_size=pMember->TypeInfo.u.pobj_Class->GetAlignment();
     
    500491        CMember *pMember = ppobj_Member[i];
    501492
    502         if(pMember->TypeInfo.type==DEF_OBJECT && pMember->IsRef() == false){
     493        if(pMember->TypeInfo.type==DEF_STRUCT){
    503494            //メンバクラスのアラインメントを取得
    504495            member_size=pMember->TypeInfo.u.pobj_Class->GetAlignment();
     
    598589    //コンポジションの関係にあるメンバも検査する
    599590    for(int i=0;i < iMemberNum;i++){
    600         if(ppobj_Member[i]->TypeInfo.type==DEF_OBJECT && ppobj_Member[i]->IsRef() == false){
     591        if(ppobj_Member[i]->TypeInfo.type==DEF_OBJECT){
    601592            if(ppobj_Member[i]->TypeInfo.u.pobj_Class->IsAbstract())
    602593                return true;
     
    805796
    806797                //クラスを追加
    807                 pobj_DBClass->AddClass(temporary,NowLine);
     798                CClass *pClass = pobj_DBClass->AddClass(temporary,NowLine);
     799                if( pClass ){
     800                    if( basbuf[NowLine+1] == ESC_CLASS ){
     801                        pClass->classType = CClass::Class;
     802                    }
     803                    else if( basbuf[NowLine+1] == ESC_INTERFACE ){
     804                        pClass->classType = CClass::Interface;
     805                    }
     806                    else{
     807                        pClass->classType = CClass::Structure;
     808                    }
     809                }
    808810        }
    809811    }
     
    843845        if(psi->ParmNum==0) fConstructor=1;
    844846
     847        // TODO: 消す
    845848        //コピーコンストラクタ
    846849        if(psi->ParmNum==1){
     
    953956    for(i=0;i<pobj_c->iMemberNum;i++){
    954957        CMember *pMember = pobj_c->ppobj_Member[i];
    955         if(pMember->TypeInfo.type==DEF_OBJECT && pMember->IsRef()==false ){
     958        if(pMember->TypeInfo.type==DEF_OBJECT){
    956959            //循環参照でないかをチェック
    957960            if(pobj_LoopRefCheck->check(pMember->TypeInfo.u.pobj_Class->name)){
     
    976979    extern char *basbuf;
    977980    int i,i2,i3,sub_address,top_pos;
    978     DWORD dwClassType;
    979981    DWORD dwAccess;
    980982    char temporary[8192];
     
    11321134            top_pos=i;
    11331135
    1134             dwClassType=basbuf[i+1];
     1136            const DWORD dwClassType=basbuf[i+1];
    11351137
    11361138            i+=2;
     
    12631265                    i += 2;
    12641266                }
    1265 
     1267/*
    12661268                //Ref修飾子
    12671269                bool isRef = false;
     
    12691271                    isRef = true;
    12701272                    i += 2;
    1271                 }
     1273                }*/
    12721274
    12731275                if(basbuf[i]==1&&(
     
    13481350                        //静的メンバを追加
    13491351                        cp=i;   //エラー用
    1350                         pobj_c->AddStaticMember( dwAccess, isConst, isRef, temporary, i);
     1352                        pobj_c->AddStaticMember( dwAccess, isConst, false, temporary, i);
    13511353                    }
    13521354                    else{
    13531355                        //メンバを追加
    13541356                        cp=i;   //エラー用
    1355                         pobj_c->AddMember( dwAccess, isConst, isRef, temporary );
    1356 
    1357 
    1358                         if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->TypeInfo.type==DEF_OBJECT){
     1357                        pobj_c->AddMember( dwAccess, isConst, false, temporary );
     1358
     1359
     1360                        if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->TypeInfo.type==DEF_OBJECT||
     1361                            pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->TypeInfo.type==DEF_STRUCT){
    13591362                            if(pobj_c->ppobj_Member[pobj_c->iMemberNum-1]->TypeInfo.u.pobj_Class->ppobj_Member==0){
    13601363                                //参照先が読み取られていないとき
     
    13761379                }
    13771380                else{
    1378                     // 文法エラーチェック
    1379                     if( isRef ){
    1380                         SetError(1,NULL,cp);
    1381                     }
    1382 
    13831381                    //メソッドを追加
    13841382                    cp=i;   //エラー用
Note: See TracChangeset for help on using the changeset viewer.