Changeset 17 in dev for BasicCompiler_Common


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

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

Location:
BasicCompiler_Common
Files:
5 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
  • BasicCompiler_Common/Class.h

    r4 r17  
    1919
    2020class CMember{
     21    bool isConst;
    2122public:
    2223    char *name;
     
    3233
    3334
    34     CMember(CClass *pobj_c,DWORD access,char *buffer,int NowLine=-1);
    35     CMember(CMember *pobj);
     35    CMember( CClass *pobj_c, DWORD access, bool idConst, char *buffer, int NowLine=-1 );
     36    CMember( CMember *pobj );
    3637    CMember();
    3738    ~CMember();
     39
     40    bool IsConst();
    3841
    3942
     
    9194    ~CClass();
    9295
    93     void AddMember(DWORD dwAccess,char *buffer);
    94     void AddStaticMember(DWORD dwAccess,char *buffer,int NowLine);
     96    void AddMember( DWORD dwAccess, bool idConst, char *buffer );
     97    void AddStaticMember( DWORD dwAccess, bool isConst, char *buffer, int NowLine );
    9598    void AddMethod(SUBINFO *psi,DWORD dwAccess,BOOL bAbstract,BOOL bVirtual);
    9699    void AddStaticMethod(SUBINFO *psi,DWORD dwAccess);
     
    112115    //オペレータ関数の取得
    113116    SUBINFO **GetOperatorSubInfo(BYTE idCalc,int &num);
     117
     118
     119    //コンストラクタをコンパイルしているかどうかのチェックフラグ
     120private:
     121    bool isCompilingConstructor;
     122public:
     123    void NotifyStartConstructorCompile();
     124    void NotifyFinishConstructorCompile();
     125    bool IsCompilingConstructor();
    114126
    115127
  • BasicCompiler_Common/Compile.cpp

    r16 r17  
    4848//With情報
    4949WITHINFO WithInfo;
     50
     51
     52///////////////////////////////////////////////////
     53// トークンを取得
     54///////////////////////////////////////////////////
     55void GetIdentifierToken( char *token, const char *source, int &pos ){
     56    for( int i=0; ; i++, pos++ ){
     57        if( ! IsVariableChar( source[pos] ) ){
     58            token[i] = 0;
     59            break;
     60        }
     61        token[i] = source[pos];
     62    }
     63}
    5064
    5165
  • BasicCompiler_Common/common.h

    r16 r17  
    575575
    576576//Compile.cpp
     577void GetIdentifierToken( char *token, const char *source, int &pos );
    577578int JumpStatement(const char *source, int &pos);
    578579void DebugVariable(void);
  • BasicCompiler_Common/error.cpp

    r11 r17  
    142142    if(num==59) sprintf(msg,"マニフェスト ファイル \"%s\" の読み込みに失敗。",KeyWord);
    143143    if(num==60) lstrcpy(msg,"Staticステートメントはグローバル領域では使用できません。");
    144     if(num==61) sprintf(msg,"\"%s\" Const定義の変数には書き込めません。",KeyWord);
     144    if(num==61) sprintf(msg,"\"%s\" は定数です。書き込めません。",KeyWord);
    145145
    146146
Note: See TracChangeset for help on using the changeset viewer.