Changeset 85 in dev


Ignore:
Timestamp:
Mar 30, 2007, 4:19:07 AM (18 years ago)
Author:
dai_9181
Message:

オブジェクトの循環参照を許容した(構造体はダメ)。
抽象クラスをメンバの型に指定できるようにした。
メンバがオブジェクトだったとき、自動的にNewするのをやめ、初期値としてNothingを指定するようにした。

Files:
8 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_ProcOp.cpp

    r78 r85  
    478478            }
    479479
     480            //新しいオブジェクト領域は0で初期化されているため、Nothingを明示的に代入する必要はない
     481/*
    480482            //実体クラスを持つメンバのコンストラクタ(引数有りを除く)を呼び出す
    481483            for(i3=0;i3<pobj_CompilingClass->iMemberNum;i3++){
     
    484486                    // オブジェクトメンバを発見したとき
    485487
    486                     sprintf(temporary, "This.%s=%c%c%s()",
    487                         pMember->name,
    488                         1, ESC_NEW,
    489                         pMember->GetClass().name );
     488                    sprintf(temporary, "This.%s=Nothing",
     489                        pMember->name );
    490490                    OpcodeCalc( temporary );
    491491                }
    492492            }
     493*/
    493494
    494495            //仮想関数テーブルを初期化
  • BasicCompiler64/Compile_ProcOp.cpp

    r76 r85  
    531531            }
    532532
     533            //新しいオブジェクト領域は0で初期化されているため、Nothingを明示的に代入する必要はない
     534/*
    533535            //実体クラスを持つメンバのコンストラクタ(引数有りを除く)を呼び出す
    534536            for(i3=0;i3<pobj_CompilingClass->iMemberNum;i3++){
     
    537539                    // オブジェクトメンバを発見したとき
    538540
    539                     sprintf(temporary, "This.%s=%c%c%s()",
    540                         pMember->name,
    541                         1, ESC_NEW,
    542                         pMember->GetClass().name );
     541                    sprintf(temporary, "This.%s=Nothing",
     542                        pMember->name );
    543543                    OpcodeCalc( temporary );
    544544                }
    545545            }
     546*/
    546547
    547548            //仮想関数テーブルを初期化
  • BasicCompiler_Common/Class.cpp

    r79 r85  
    3030    }
    3131
     32    /*
     33    TODO: 消す
     34    メンバ定義は抽象クラスでもOK
    3235    if( IsObject() ){
    3336        if( GetClass().IsAbstract() ){
     
    3538            SetError(125,GetClass().name,cp);
    3639        }
    37     }
     40    }*/
    3841
    3942    //メンバ名
     
    574577    }
    575578
     579    /*
     580    TODO: 消す
     581    これはAB5からは良くなった(参照型になったため)
     582
    576583    //コンポジションの関係にあるメンバも検査する
    577584    for(int i=0;i < iMemberNum;i++){
     
    581588        }
    582589    }
     590    */
    583591
    584592    return false;
     
    860868    if(fConstructor||bDestructor){
    861869        // コンストラクタ、デストラクタのアクセシビリティをチェック
    862         if(dwAccess!=ACCESS_PUBLIC){
    863             SetError(116,NULL,nowLine);
    864             dwAccess=ACCESS_PUBLIC;
    865         }
    866870
    867871        //強制的にConst修飾子をつける
     
    946950    for(i=0;i<objClass.iMemberNum;i++){
    947951        const CMember *pMember = objClass.ppobj_Member[i];
    948         if(pMember->IsObject()){
     952        if(pMember->IsStruct()){
    949953            //循環参照でないかをチェック
    950954            if(pobj_LoopRefCheck->check(pMember->GetClass().name)){
  • BasicCompiler_Common/VarList.cpp

    r78 r85  
    2323
    2424    if( type.IsObject() || type.IsStruct() ){
     25        i2=1;
    2526        if( type.IsObject() ){
    2627            // 参照型ということを考慮する
    27             ReadProcessMemory(hDebugProcess,(void *)offset,&pData,sizeof(void *),&accessBytes);
     28            i2=ReadProcessMemory(hDebugProcess,(void *)offset,&pData,sizeof(void *),&accessBytes);
    2829            offset = pData;
    2930        }
     
    3435        hParent=TreeView_InsertItem(hVarTree,lptv);
    3536
    36         VarList_Member(hVarTree,hParent,offset,type.GetClass(),0);
     37        if(i2 && offset) VarList_Member(hVarTree,hParent,offset,type.GetClass(),0);
    3738        return;
    3839    }
  • BasicCompiler_Common/common.h

    r84 r85  
    4747
    4848#ifdef _AMD64_
    49 #define VER_INFO        "(x64) β rev.184"
     49#define VER_INFO        "(x64) β rev.194"
    5050#else
    51 #define VER_INFO        "β rev.184"
     51#define VER_INFO        "β rev.194"
    5252#endif
    5353
  • BasicCompiler_Common/error.cpp

    r75 r85  
    168168    if(num==114) lstrcpy(msg,"デストラクタはパラメータを持てません。");
    169169    if(num==115) lstrcpy(msg,"コンストラクタ及びデストラクタは戻り値を持てません。");
    170     if(num==116) lstrcpy(msg,"コンストラクタ及びデストラクタはパブリックアクセスにしなければなりません。");
     170    //if(num==116) lstrcpy(msg,"コンストラクタ及びデストラクタはパブリックアクセスにしなければなりません。");
    171171    if(num==117) lstrcpy(msg,"デストラクタの名前が \"~クラス名\" になっていません。");
    172172    if(num==118) lstrcpy(msg,"参照する基底クラスが存在しません。");
  • ProjectEditor/Common.h

    r84 r85  
    6666#define APPLICATION_NAME "ActiveBasic 5.0"
    6767#define VERSION_APPLI_NAME APPLICATION_NAME
    68 #define VERSION_STRING "5.00.00 β rev.193"
     68#define VERSION_STRING "5.00.00 β rev.194"
    6969
    7070#endif
  • ProjectEditor/SubOperation.cpp

    r84 r85  
    167167    return 0;
    168168}
     169bool IsNumberChar( char c ){
     170    if(c>='0'&&c<='9'){
     171        return true;
     172    }
     173    return false;
     174}
    169175BOOL IsVariableChar(char c){
    170176    if((c>='A'&&c<='Z')||(c>='a'&&c<='z')||(c>='0'&&c<='9')||
     
    204210            int pos = (int)temp3 - (int)temp1;
    205211            if( pos == 0 ){
    206                 if( !IsVariableChar( temp1[len2] ) ){
     212                if( !( IsVariableTopChar( temp1[len2] ) || IsNumberChar( temp1[len2] ) ) ){
    207213                        break;
    208214                }
    209215            }
    210216            else{
    211                 if( !IsVariableChar( temp1[pos-1] )
    212                     && !IsVariableChar( temp1[pos+len2] ) ){
     217                if( !( IsVariableTopChar( temp1[pos-1] ) || IsNumberChar( temp1[pos-1] ) )
     218                    && !( IsVariableTopChar( temp1[pos+len2] ) || IsNumberChar( temp1[pos+len2] ) )
     219                    ){
    213220                        break;
    214221                }
     
    569576    else if(str[0]=='t'||str[0]=='T'){
    570577        if(lstrcmpi(str,"Then")==0) return -1;
     578        if(lstrcmpi(str,"This")==0) return -1;
    571579        if(lstrcmp(str,"True")==0) return -1;
    572580        if(lstrcmpi(str,"Type")==0) return COM_TYPE;
Note: See TracChangeset for help on using the changeset viewer.