Changeset 27 in dev for BasicCompiler64


Ignore:
Timestamp:
Jan 7, 2007, 6:51:20 AM (18 years ago)
Author:
dai_9181
Message:

静的メンバ、静的メソッド周りを修正。

Location:
BasicCompiler64
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/Compile_CallProc.cpp

    r26 r27  
    245245        if(ObjectName[0]){
    246246            if(lstrcmpi(ObjectName,"Super")==0){
    247                 //クラスメンバ関数内からスーパークラスの呼び出し
     247                //クラスメンバ関数内から基底クラスの呼び出し
    248248                pobj_c=pobj_CompilingClass;
    249249            }
     
    275275        // メソッド情報を取得
    276276        /////////////////////////////////
    277         pMethod = pobj_c->GetMethodInfo( psi );
    278         if( !pMethod ){
     277        pMethod = NULL;
     278        if( ! bStatic ) pMethod = pobj_c->GetMethodInfo( psi );
     279        if( ! pMethod ){
    279280            //動的メソッドが取得できなかったときは静的メソッドを当たる
    280281            pMethod = pobj_c->GetStaticMethodInfo( psi );
  • BasicCompiler64/Compile_ProcOp.cpp

    r19 r27  
    504504            pobj_CompilingClass->NotifyStartConstructorCompile();
    505505
    506             //スーパークラスかどうかの識別
    507             //(継承元がインターフェイスの場合もスーパークラスと見なす)
     506            //基底クラスかどうかの識別
     507            //(継承元がインターフェイスの場合も基底クラスと見なす)
    508508            BOOL bThisIsSuperClass;
    509509            if(pobj_CompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1;
     
    516516            if(!bThisIsSuperClass){
    517517                /* サブクラスコンストラクタをコンパイルしているときは、
    518                     スーパークラスのコンストラクタを呼び出す */
     518                    基底クラスのコンストラクタを呼び出す */
    519519
    520520                i3=cp+1;
     
    529529                if(lstrcmp(temporary,
    530530                    pobj_CompilingClass->pobj_InheritsClass->name)==0){
    531                     //スーパークラスのコンストラクタを呼び出す
     531                    //基底クラスのコンストラクタを呼び出す
    532532                    cp=i3;
    533533                    for(i4=0;;cp++,i4++){
     
    552552                }
    553553                else{
    554                     //スーパークラスのコンストラクタを暗黙的に呼び出す
     554                    //基底クラスのコンストラクタを暗黙的に呼び出す
    555555                    i3=pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex;
    556556                    Opcode_CallProc("",
     
    656656            if(pobj_CompilingClass->pobj_InheritsClass){
    657657                /* サブクラスのデストラクタをコンパイルしているときは、
    658                     スーパークラスのデストラクタを呼び出す */
     658                    基底クラスのデストラクタを呼び出す */
    659659
    660660                i3=pobj_CompilingClass->pobj_InheritsClass->DestructorMemberSubIndex;
  • BasicCompiler64/Compile_Set_Var.cpp

    r3 r27  
    7777
    7878
    79 
     79//TODO: 継承・派生関係にある場合は許容する
    8080    if(CalcType==DEF_OBJECT&&lpVarIndex==lpCalcIndex){
    8181        //双方のオブジェクト型が完全に一致したとき
  • BasicCompiler64/Compile_Var.cpp

    r20 r27  
    520520    }
    521521
    522     /////////////////////
    523     // グローバル変数
    524     /////////////////////
    525 
    526     for(i=MaxGlobalVarNum-1;i>=0;i--){  //レキシカルスコープを考慮してバックサーチ
    527         if(GlobalVar[i].bLiving){
    528             if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
    529         }
    530     }
    531     if(i>=0){
    532         goto GlobalOk;
    533     }
    534 
    535522
    536523    //////////////////////////
     
    540527    if(member[0]){
    541528        lstrcpy(temporary,member);
    542         GetVarFormatString(temporary,array,lpPtrOffset,member,&i);
     529
     530        char tempMember[VN_SIZE];
     531        char tempArray[VN_SIZE];
     532        GetVarFormatString(temporary,tempArray,lpPtrOffset,tempMember,&i);
    543533
    544534        char temp2[VN_SIZE];
     
    549539
    550540        if(i!=MaxGlobalVarNum){
     541            lstrcpy(member,tempMember);
     542            lstrcpy(array,tempArray);
    551543            goto GlobalOk;
    552544        }
     
    564556            goto GlobalOk;
    565557        }
     558    }
     559
     560
     561    /////////////////////
     562    // グローバル変数
     563    /////////////////////
     564
     565    for(i=MaxGlobalVarNum-1;i>=0;i--){  //レキシカルスコープを考慮してバックサーチ
     566        if(GlobalVar[i].bLiving){
     567            if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
     568        }
     569    }
     570    if(i>=0){
     571        goto GlobalOk;
    566572    }
    567573
Note: See TracChangeset for help on using the changeset viewer.