Changeset 51 in dev for BasicCompiler32/Compile_ProcOp.cpp


Ignore:
Timestamp:
Feb 10, 2007, 8:30:19 PM (17 years ago)
Author:
dai_9181
Message:

ppobj_Member及びppobj_StaticMemberを廃止し、vectorに統一した(methods及びstaticMethods)。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_ProcOp.cpp

    r50 r51  
    219219    extern SUBINFO **ppSubHash;
    220220    extern BOOL bDebugCompile;
    221     int i3,i4,i5,VarSize,LocalVarSchedule,EspOffsetSchedule,BufferSize,BaseOffset;
     221    int i3,i4,VarSize,LocalVarSchedule,EspOffsetSchedule,BufferSize,BaseOffset;
    222222    char temporary[VN_SIZE];
    223223
     
    379379        if(psi->ReturnType==DEF_OBJECT && psi->isReturnRef == false){
    380380            //戻り値用オブジェクトのコンストラクタを呼び出す
    381             if(psi->u.Return_pobj_c->ConstructorMemberSubIndex!=-1){
     381            if( psi->u.Return_pobj_c->GetConstructorMethod() ){
    382382                sprintf(temporary,"%s.%s()",temp,psi->u.Return_pobj_c->name);
    383383                OpcodeOthers(temporary);
     
    462462            BOOL bThisIsSuperClass;
    463463            if(pobj_CompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1;
    464             else if(pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex==-1){
     464            else if( pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod() == NULL ){
    465465                //インターフェイスを継承したときはコンストラクタを持たない
    466466                bThisIsSuperClass=1;
     
    497497                    RemoveStringPare(temporary);
    498498
    499                     i3=pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex;
    500499                    Opcode_CallProc(temporary,
    501                         pobj_CompilingClass->ppobj_Method[i3]->psi,
     500                        pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod()->psi,
    502501                        0,
    503502                        "",
     
    506505                else{
    507506                    //基底クラスのコンストラクタを暗黙的に呼び出す
    508                     i3=pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex;
    509507                    Opcode_CallProc("",
    510                         pobj_CompilingClass->ppobj_Method[i3]->psi,
     508                        pobj_CompilingClass->pobj_InheritsClass->GetConstructorMethod()->psi,
    511509                        0,
    512510                        "",
     
    524522            for(i3=0;i3<pobj_CompilingClass->iMemberNum;i3++){
    525523                CMember *pMember = pobj_CompilingClass->ppobj_Member[i3];
     524                MemberTypeSize=
     525                    GetTypeSize(pMember->TypeInfo.type,
     526                        pMember->TypeInfo.u.lpIndex);
     527
     528                MemberObjectNum=
     529                    JumpSubScripts(pMember->SubScripts);
    526530
    527531                offset=GetSizeOfClassMember(pobj_CompilingClass,pMember->name,NULL);
    528532
    529                 if(pMember->TypeInfo.type==DEF_OBJECT){
    530                     if(pMember->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex!=-1){
    531                         i5=pMember->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex;
    532                         if(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi->RealParmNum==1){  //Thisポインタを第一引数に持ち合わせるため、引数なしの場合はこの値が1になる
    533 
    534                             MemberTypeSize=
    535                                 GetTypeSize(pMember->TypeInfo.type,
    536                                     pMember->TypeInfo.u.lpIndex);
    537 
    538                             MemberObjectNum=
    539                                 JumpSubScripts(pMember->SubScripts);
    540 
     533                if(pMember->TypeInfo.type==DEF_OBJECT && pMember->IsRef() == false){
     534                    CMethod *method = pMember->TypeInfo.u.pobj_Class->GetConstructorMethod();
     535                    if( method ){
     536                        if( method->psi->RealParmNum == 1 ){    //Thisポインタを第一引数に持ち合わせるため、引数なしの場合はこの値が1になる
    541537                            for(i4=0;i4<MemberObjectNum;i4++){
    542538                                //Thisポインタをecxにコピー
     
    553549
    554550                                //call constructor
    555                                 op_call(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
     551                                op_call( method->psi );
    556552                            }
    557553                        }
     
    618614                    基底クラスのデストラクタを呼び出す */
    619615
    620                 i3=pobj_CompilingClass->pobj_InheritsClass->DestructorMemberSubIndex;
    621                 if(i3!=-1){
     616                CMethod *method = pobj_CompilingClass->pobj_InheritsClass->GetDestructorMethod();
     617                if( method ){
    622618                    Opcode_CallProc("",
    623                         pobj_CompilingClass->ppobj_Method[i3]->psi,
     619                        method->psi,
    624620                        0,
    625621                        "",
     
    647643
    648644                if(pMember->TypeInfo.type==DEF_OBJECT){
    649                     if(pMember->TypeInfo.u.pobj_Class->DestructorMemberSubIndex!=-1){
     645                    CMethod *method = pMember->TypeInfo.u.pobj_Class->GetDestructorMethod();
     646                    if( method ){
    650647                        for(i4=MemberObjectNum-1;i4>=0;i4--){
    651648                            //Thisポインタをecxにコピー
     
    662659
    663660                            //call destructor
    664                             i5=pMember->TypeInfo.u.pobj_Class->DestructorMemberSubIndex;
    665                             op_call(pMember->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
     661                            op_call( method->psi );
    666662                        }
    667663                    }
Note: See TracChangeset for help on using the changeset viewer.