Changeset 17 in dev for BasicCompiler_Common/Class.cpp


Ignore:
Timestamp:
Dec 20, 2006, 2:51:56 AM (18 years ago)
Author:
dai_9181
Message:

定数メンバ機能を有効にした。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Class.cpp

    r5 r17  
    1616
    1717
    18 CMember::CMember(CClass *pobj_c,DWORD access,char *buffer,int NowLine){
     18CMember::CMember( CClass *pobj_c, DWORD access, bool isConst, char *buffer, int NowLine ){
    1919    extern int cp;
    2020
     
    4646    dwAccess=access;
    4747
     48    //定数扱いかどうか
     49    this->isConst = isConst;
     50
    4851    //初期データ
    4952    InitBuf=(char *)HeapAlloc(hHeap,0,lstrlen(init_buf)+1);
     
    6467    name=(char *)HeapAlloc(hHeap,0,lstrlen(pobj->name)+1);
    6568    lstrcpy(name,pobj->name);
     69
     70    //定数扱いかどうか
     71    isConst = pobj->isConst;
    6672
    6773    //SubScripts
     
    8187    if(InitBuf) HeapDefaultFree(InitBuf);
    8288    if(ConstractParameter) HeapDefaultFree(ConstractParameter);
     89}
     90
     91bool CMember::IsConst(){
     92    return isConst;
    8393}
    8494
     
    159169    this->name=(char *)HeapAlloc(hHeap,0,lstrlen(name)+1);
    160170    lstrcpy(this->name,name);
     171
     172    isCompilingConstructor = 0;
    161173}
    162174CClass::~CClass(){
     
    202214    }
    203215}
    204 void CClass::AddMember(DWORD dwAccess,char *buffer){
    205     ppobj_Member=(CMember **)HeapReAlloc(hHeap,0,ppobj_Member,(iMemberNum+1)*sizeof(CMember *));
    206     ppobj_Member[iMemberNum]=new CMember(this,dwAccess,buffer);
     216void CClass::AddMember( DWORD dwAccess, bool isConst, char *buffer ){
     217    ppobj_Member = (CMember **)HeapReAlloc( hHeap, 0, ppobj_Member, ( iMemberNum + 1 ) * sizeof(CMember *) );
     218    ppobj_Member[iMemberNum] = new CMember( this, dwAccess, isConst, buffer );
    207219    iMemberNum++;
    208220}
    209 void CClass::AddStaticMember(DWORD dwAccess,char *buffer,int NowLine){
     221void CClass::AddStaticMember( DWORD dwAccess, bool isConst, char *buffer, int NowLine ){
    210222    ppobj_StaticMember=(CMember **)HeapReAlloc(hHeap,0,ppobj_StaticMember,(iStaticMemberNum+1)*sizeof(CMember *));
    211     ppobj_StaticMember[iStaticMemberNum]=new CMember(this,dwAccess,buffer,NowLine);
     223    ppobj_StaticMember[iStaticMemberNum]=new CMember( this, dwAccess, isConst, buffer, NowLine );
    212224    iStaticMemberNum++;
    213225}
     
    380392
    381393    return ppArray_si;
     394}
     395
     396// コンストラクタのコンパイルを開始
     397void CClass::NotifyStartConstructorCompile(){
     398    isCompilingConstructor = true;
     399}
     400
     401//コンストラクタのコンパイルを終了
     402void CClass::NotifyFinishConstructorCompile(){
     403    isCompilingConstructor = false;
     404}
     405
     406//コンストラクタをコンパイル中かどうかを判別
     407bool CClass::IsCompilingConstructor(){
     408    return isCompilingConstructor;
    382409}
    383410
     
    700727
    701728            //インターフェイス名を取得
    702             for(i2=0;;i++,i2++){
    703                 if(IsCommandDelimitation(basbuf[i])){
    704                     temporary[i2]=0;
    705                     break;
    706                 }
    707                 temporary[i2]=basbuf[i];
    708             }
     729            GetIdentifierToken( temporary, basbuf, i );
    709730
    710731            pobj_c=pobj_DBClass->check(temporary);
     
    897918
    898919            //クラス名を取得
    899             for(i2=0;;i++,i2++){
    900                 if(IsCommandDelimitation(basbuf[i])){
    901                     temporary[i2]=0;
    902                     break;
    903                 }
    904                 temporary[i2]=basbuf[i];
    905             }
     920            GetIdentifierToken( temporary, basbuf, i );
    906921
    907922            pobj_c=pobj_DBClass->check(temporary);
     
    10511066                else bStatic=0;
    10521067
     1068                //Const修飾子
     1069                bool isConst = false;
     1070                if( basbuf[i] == 1 && basbuf[i + 1] == ESC_CONST ){
     1071                    isConst = true;
     1072                    i += 2;
     1073                }
     1074
    10531075                if(basbuf[i]==1&&(
    10541076                    basbuf[i+1]==ESC_ABSTRACT||basbuf[i+1]==ESC_VIRTUAL||basbuf[i+1]==ESC_OVERRIDE||
     
    11281150                        //静的メンバを追加
    11291151                        cp=i;   //エラー用
    1130                         pobj_c->AddStaticMember(dwAccess,temporary,i);
     1152                        pobj_c->AddStaticMember( dwAccess, isConst, temporary, i);
    11311153                    }
    11321154                    else{
    11331155                        //メンバを追加
    11341156                        cp=i;   //エラー用
    1135                         pobj_c->AddMember(dwAccess,temporary);
     1157                        pobj_c->AddMember( dwAccess, isConst, temporary );
    11361158
    11371159
Note: See TracChangeset for help on using the changeset viewer.