Changeset 140 in dev for BasicCompiler32


Ignore:
Timestamp:
Jun 15, 2007, 4:00:25 AM (17 years ago)
Author:
dai_9181
Message:

traceログ機能を搭載
動的メンバをstl::vectorにまとめた
シンボルをクラス化した

Location:
BasicCompiler32
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/BasicCompiler.vcproj

    r135 r140  
    146146                Name="VCCLCompilerTool"
    147147                Optimization="2"
    148                 InlineFunctionExpansion="1"
     148                InlineFunctionExpansion="2"
     149                FavorSizeOrSpeed="1"
    149150                AdditionalIncludeDirectories="..\cpplibs\boost;..\BasicCompiler_Common\include"
    150151                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN"
     
    18401841                    <File
    18411842                        RelativePath="..\BasicCompiler_Common\src\Prototype.cpp"
     1843                        >
     1844                    </File>
     1845                    <File
     1846                        RelativePath="..\BasicCompiler_Common\src\Symbol.cpp"
    18421847                        >
    18431848                    </File>
     
    19521957                    >
    19531958                    <File
     1959                        RelativePath="..\BasicCompiler_Common\include\logger.h"
     1960                        >
     1961                    </File>
     1962                    <File
    19541963                        RelativePath="..\BasicCompiler_Common\include\Namespace.h"
    19551964                        >
     
    19611970                    <File
    19621971                        RelativePath="..\BasicCompiler_Common\Procedure.h"
     1972                        >
     1973                    </File>
     1974                    <File
     1975                        RelativePath="..\BasicCompiler_Common\include\Symbol.h"
    19631976                        >
    19641977                    </File>
  • BasicCompiler32/Compile_Object.cpp

    r135 r140  
    5959        if( subs.size() == 1 ){
    6060            char temporary[VN_SIZE];
    61             sprintf( temporary, "_System_TypeBase.Search(\"\",\"%s\"))", pobj_c->GetName().c_str() );
     61            sprintf( temporary, "ActiveBasic.Core._System_TypeBase.Search(\"\",\"%s\"))", pobj_c->GetName().c_str() );
    6262
    6363            Opcode_CallProc(temporary,
  • BasicCompiler32/Compile_ProcOp.cpp

    r135 r140  
    514514            }
    515515
    516             //新しいオブジェクト領域は0で初期化されているため、Nothingを明示的に代入する必要はない
    517 /*
    518             //実体クラスを持つメンバのコンストラクタ(引数有りを除く)を呼び出す
    519             for(i3=0;i3<pobj_CompilingClass->iMemberNum;i3++){
    520                 CMember *pMember = pobj_CompilingClass->ppobj_Member[i3];
    521                 if(pMember->IsObject()){
    522                     // オブジェクトメンバを発見したとき
    523 
    524                     sprintf(temporary, "This.%s=Nothing",
    525                         pMember->name );
    526                     OpcodeCalc( temporary );
    527                 }
    528             }
    529 */
    530 
    531516            //仮想関数テーブルを初期化
    532517            if(pobj_CompilingClass->vtbl_num&&
     
    608593                }
    609594            }
    610 
    611             //実体クラスを持つメンバのデストラクタ呼び出しはGCに任せる
    612             /*
    613             //※コンストラクタと逆順序で呼び出す
    614             int offset;
    615             int MemberTypeSize;
    616             int MemberObjectNum;
    617             offset=GetTypeSize(DEF_OBJECT,(LONG_PTR)pobj_CompilingClass);
    618             for(i3=pobj_CompilingClass->iMemberNum-1;i3>=0;i3--){
    619                 CMember *pMember = pobj_CompilingClass->ppobj_Member[i3];
    620 
    621                 MemberTypeSize=
    622                     GetTypeSize(pMember->TypeInfo.type,
    623                         pMember->TypeInfo.u.lpIndex);
    624 
    625                 MemberObjectNum=
    626                     JumpSubScripts(pMember->SubScripts);
    627 
    628                 offset-=MemberTypeSize*MemberObjectNum;
    629 
    630                 if(pMember->TypeInfo.type==DEF_OBJECT){
    631                     CMethod *method = pMember->TypeInfo.u.pobj_Class->GetDestructorMethod();
    632                     if( method ){
    633                         for(i4=MemberObjectNum-1;i4>=0;i4--){
    634                             //Thisポインタをecxにコピー
    635                             SetThisPtrToReg(REG_ECX);
    636 
    637                             //add ecx,offset
    638                             OpBuffer[obp++]=(char)0x81;
    639                             OpBuffer[obp++]=(char)0xC1;
    640                             *((long *)(OpBuffer+obp))=offset+i4*MemberTypeSize;
    641                             obp+=sizeof(long);
    642 
    643                             //push ecx
    644                             op_push(REG_ECX);
    645 
    646                             //call destructor
    647                             op_call( method->pUserProc );
    648                         }
    649                     }
    650                 }
    651             }*/
    652595        }
    653596    }
  • BasicCompiler32/Compile_Var.cpp

    r138 r140  
    158158}
    159159bool _member_offset(bool isErrorEnabled, bool isWriteAccess, const CClass &objClass, const char *member, RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess){
    160     int i;
    161 
    162160
    163161    //////////////////////////////////////
     
    178176    ////////////////////////////
    179177
    180     int offset = objClass.GetMemberOffset( VarName, &i );
    181     if(i==objClass.iMemberNum){
     178    int memberIndex;
     179    int offset = objClass.GetMemberOffset( VarName, &memberIndex );
     180    if(memberIndex==objClass.GetDynamicMembers().size()){
    182181        if(isErrorEnabled) SetError(103,VarName,cp);
    183182        return false;
    184183    }
    185184
    186     CMember *pMember=objClass.ppobj_Member[i];
     185    CMember *pMember=objClass.GetDynamicMembers()[memberIndex];
    187186
    188187
     
    351350
    352351bool GetVarOffset(bool isErrorEnabled,bool isWriteAccess,const char *NameBuffer,RELATIVE_VAR *pRelativeVar,Type &resultType,int *pss){
    353     int i;
    354352    char variable[VN_SIZE];
    355353
     
    387385        //////////////////
    388386
    389         const Variable *pVar = UserProc::CompilingUserProc().localVars.BackSearch( VarName );
     387        const Variable *pVar = UserProc::CompilingUserProc().localVars.BackSearch( Symbol( VarName ) );
    390388        if( pVar ){
    391389            //ポインタ変数の場合
     
    444442            //クラス内メンバを参照するとき(通常)
    445443
    446             for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
    447                 if( pobj_CompilingClass->ppobj_Member[i]->GetName() == VarName ){
     444            bool isFound = false;
     445            BOOST_FOREACH( CMember *pMember, pobj_CompilingClass->GetDynamicMembers() ){
     446                if( pMember->GetName() == VarName ){
     447                    isFound = true;
    448448                    break;
    449449                }
    450450            }
    451             if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
     451            if( !isFound ) goto NonClassMember;
    452452        }
    453453
     
    494494            GetNowStaticVarFullName(VarName,temporary);
    495495
    496             pVar = globalVars.Find( temporary );
     496            pVar = globalVars.Find( Symbol( temporary ) );
    497497            if( pVar ){
    498498                goto GlobalOk;
     
    525525            char temp2[VN_SIZE];
    526526            sprintf(temp2,"%s.%s",VarName,temporary);
    527             pVar = globalVars.Find( temp2 );
     527            pVar = globalVars.Find( Symbol( temp2 ) );
    528528            if( pVar ){
    529529                lstrcpy(member,tempMember);
     
    537537            char temp2[VN_SIZE];
    538538            sprintf(temp2,"%s.%s",pobj_CompilingClass->GetName().c_str(),VarName);
    539             pVar = globalVars.Find( temp2 );
     539            pVar = globalVars.Find( Symbol( temp2 ) );
    540540            if( pVar ){
    541541                goto GlobalOk;
     
    547547        /////////////////////
    548548
    549         pVar = globalVars.BackSearch( VarName );
     549        pVar = globalVars.BackSearch( Symbol( VarName ) );
    550550        if( pVar ){
    551551            goto GlobalOk;
     
    716716bool SetInitGlobalData(int offset,const Type &type,const int *SubScripts,const char *lpszInitBuf){
    717717    extern BYTE *initGlobalBuf;
    718     int i,i2,i3;
     718    int i2,i3;
    719719    char temporary[VN_SIZE];
    720720    char InitBuf[VN_SIZE];
     
    729729        if(SubScripts[0]!=-1){
    730730            typeSize*=JumpSubScripts(SubScripts+1);
    731             i=0;
     731            int i=0;
    732732            i2=0;
    733733            while(1){
     
    751751            const CClass &objClass = type.GetClass();
    752752
    753             for(i=0,i2=0;i2<objClass.iMemberNum;i2++){
     753            int i = 0;
     754            BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
     755                if(InitBuf[i]=='\0'){
     756                    SetError(41,0,cp);
     757                    return false;
     758                }
     759
    754760                i=GetOneParameter(InitBuf,i,temporary);
    755761
    756                 i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->GetName().c_str(), NULL );
     762                i3=objClass.GetMemberOffset( pMember->GetName().c_str(), NULL );
    757763
    758764                if(!SetInitGlobalData(offset+i3,
    759                     objClass.ppobj_Member[i2]->GetType(),
    760                     objClass.ppobj_Member[i2]->SubScripts,
     765                    pMember->GetType(),
     766                    pMember->SubScripts,
    761767                    temporary)) return false;
    762 
    763                 if(InitBuf[i]=='\0') break;
    764             }
    765             if(i2+1!=objClass.iMemberNum){
    766                 SetError(41,0,cp);
    767                 return false;
    768768            }
    769769            return true;
     
    889889            const CClass &objClass = type.GetClass();
    890890
    891             for(i=0,i2=0;i2<objClass.iMemberNum;i2++){
     891            int i = 0;
     892            BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
     893                if(InitBuf[i]=='\0'){
     894                    SetError(41,0,cp);
     895                    return false;
     896                }
     897
    892898                i=GetOneParameter(InitBuf,i,temporary);
    893899
    894                 i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->GetName().c_str(), NULL );
     900                i3=objClass.GetMemberOffset( pMember->GetName().c_str(), NULL );
    895901
    896902                if(!InitLocalVar(offset+i3,
    897                     objClass.ppobj_Member[i2]->GetType(),
    898                     objClass.ppobj_Member[i2]->SubScripts,
     903                    pMember->GetType(),
     904                    pMember->SubScripts,
    899905                    temporary)) return false;
    900906
    901907                if(InitBuf[i]=='\0') break;
    902             }
    903             if(i2+1!=objClass.iMemberNum){
    904                 SetError(41,0,cp);
    905                 return 0;
    906908            }
    907909            return true;
     
    10781080        /////////////////
    10791081
    1080         if( UserProc::CompilingUserProc().localVars.DuplicateCheck( VarName ) ){
     1082        if( UserProc::CompilingUserProc().localVars.DuplicateCheck( Symbol( VarName ) ) ){
    10811083            //2重定義のエラー
    10821084            SetError(15,VarName,cp);
  • BasicCompiler32/MakePeHdr.cpp

    r105 r140  
    259259        pSub_System_GC_free_for_SweepingDelete->Using();
    260260
    261     if( pSubStaticMethod_System_TypeBase_InitializeUserTypes = GetSubHash( "_System_TypeBase.InitializeUserTypes",1 ) ){
     261    if( pSubStaticMethod_System_TypeBase_InitializeUserTypes = GetSubHash( "ActiveBasic.Core._System_TypeBase.InitializeUserTypes",1 ) ){
    262262        pSubStaticMethod_System_TypeBase_InitializeUserTypes->Using();
    263263        pSubStaticMethod_System_TypeBase_InitializeUserTypes->ThisIsAutoGenerationProc();
  • BasicCompiler32/Opcode.h

    r138 r140  
    232232
    233233private:
    234     bool _overload_check( int level, const Parameters &targetParms, const Type &targetResultType );
    235     UserProc *OverloadSolutionWithReturnType( const char *name, std::vector<UserProc *> &subs );
     234    bool EvaluateOverloadScore( int level, const Parameters &targetParms, const Type &targetResultType );
    236235public:
    237     UserProc *OverloadSolution( const char *name, std::vector<UserProc *> &subs );
     236    UserProc *_OverloadSolution( const char *name, std::vector<UserProc *> &subs, bool isEnabledReturnType = false );
     237    UserProc *OverloadSolution( const char *name, std::vector<UserProc *> &subs, bool isEnabledReturnType = false );
    238238
    239239    void ApplyDefaultParameters( const Parameters &params );
Note: See TracChangeset for help on using the changeset viewer.