Changeset 27 in dev for BasicCompiler32


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

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

Location:
BasicCompiler32
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_CallProc.cpp

    r26 r27  
    240240        if(ObjectName[0]){
    241241            if(lstrcmpi(ObjectName,"Super")==0){
    242                 //クラスメンバ関数内からスーパークラスの呼び出し
     242                //クラスメンバ関数内から基底クラスの呼び出し
    243243                pobj_c=pobj_CompilingClass;
    244244            }
     
    270270        // メソッド情報を取得
    271271        /////////////////////////////////
    272         pMethod = pobj_c->GetMethodInfo( psi );
    273         if( !pMethod ){
     272        pMethod = NULL;
     273        if( ! bStatic ) pMethod = pobj_c->GetMethodInfo( psi );
     274        if( ! pMethod ){
    274275            //動的メソッドが取得できなかったときは静的メソッドを当たる
    275276            pMethod = pobj_c->GetStaticMethodInfo( psi );
  • BasicCompiler32/Compile_ProcOp.cpp

    r18 r27  
    449449            pobj_CompilingClass->NotifyStartConstructorCompile();
    450450
    451             //スーパークラスかどうかの識別
    452             //(継承元がインターフェイスの場合もスーパークラスと見なす)
     451            //基底クラスかどうかの識別
     452            //(継承元がインターフェイスの場合も基底クラスと見なす)
    453453            BOOL bThisIsSuperClass;
    454454            if(pobj_CompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1;
     
    461461            if(!bThisIsSuperClass){
    462462                /* サブクラスコンストラクタをコンパイルしているときは、
    463                     スーパークラスのコンストラクタを呼び出す */
     463                    基底クラスのコンストラクタを呼び出す */
    464464
    465465                i3=cp+1;
     
    474474                if(lstrcmp(temporary,
    475475                    pobj_CompilingClass->pobj_InheritsClass->name)==0){
    476                     //スーパークラスのコンストラクタを呼び出す
     476                    //基底クラスのコンストラクタを呼び出す
    477477                    cp=i3;
    478478                    for(i4=0;;cp++,i4++){
     
    497497                }
    498498                else{
    499                     //スーパークラスのコンストラクタを暗黙的に呼び出す
     499                    //基底クラスのコンストラクタを暗黙的に呼び出す
    500500                    i3=pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex;
    501501                    Opcode_CallProc("",
     
    607607            if(pobj_CompilingClass->pobj_InheritsClass){
    608608                /* サブクラスのデストラクタをコンパイルしているときは、
    609                     スーパークラスのデストラクタを呼び出す */
     609                    基底クラスのデストラクタを呼び出す */
    610610
    611611                i3=pobj_CompilingClass->pobj_InheritsClass->DestructorMemberSubIndex;
  • BasicCompiler32/Compile_Var.cpp

    r20 r27  
    498498
    499499
    500     ////////////////////
    501     // グローバル変数
    502     ////////////////////
    503 
    504     for(i=MaxGlobalVarNum-1;i>=0;i--){  //レキシカルスコープを考慮してバックサーチ
    505         if(GlobalVar[i].bLiving){
    506             if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
    507         }
    508     }
    509     if(i>=0){
    510         goto GlobalOk;
    511     }
    512 
    513 
    514500    //////////////////////////
    515501    // クラスの静的メンバ
     
    518504    if(member[0]){
    519505        lstrcpy(temporary,member);
    520         GetVarFormatString(temporary,array,lpPtrOffset,member,&i);
     506        char tempMember[VN_SIZE];
     507        char tempArray[VN_SIZE];
     508        GetVarFormatString(temporary,tempArray,lpPtrOffset,tempMember,&i);
    521509
    522510        char temp2[VN_SIZE];
     
    527515
    528516        if(i!=MaxGlobalVarNum){
     517            lstrcpy(member,tempMember);
     518            lstrcpy(array,tempArray);
    529519            goto GlobalOk;
    530520        }
     
    543533        }
    544534    }
     535
     536
     537    ////////////////////
     538    // グローバル変数
     539    ////////////////////
     540
     541    for(i=MaxGlobalVarNum-1;i>=0;i--){  //レキシカルスコープを考慮してバックサーチ
     542        if(GlobalVar[i].bLiving){
     543            if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
     544        }
     545    }
     546    if(i>=0){
     547        goto GlobalOk;
     548    }
     549
    545550
    546551    if(isErrorEnabled) SetError(3,variable,cp);
Note: See TracChangeset for help on using the changeset viewer.