Changeset 131 in dev for BasicCompiler64


Ignore:
Timestamp:
Jun 4, 2007, 7:49:17 AM (17 years ago)
Author:
dai_9181
Message:

Prototypeクラスを用意した。

Location:
BasicCompiler64
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/BasicCompiler.vcproj

    r128 r131  
    492492                    </File>
    493493                    <File
     494                        RelativePath="..\BasicCompiler_Common\include\Prototype.h"
     495                        >
     496                    </File>
     497                    <File
    494498                        RelativePath="..\BasicCompiler_Common\Type.h"
    495499                        >
     
    11271131                    >
    11281132                    <File
     1133                        RelativePath=".\Compile_Interface.cpp"
     1134                        >
     1135                    </File>
     1136                    <File
    11291137                        RelativePath=".\Compile_Object.cpp"
    11301138                        >
  • BasicCompiler64/Compile_Object.cpp

    r123 r131  
    3434
    3535    std::vector<UserProc *> subs;
    36     pobj_c->EnumMethod( pobj_c->name, subs );
     36    pobj_c->EnumMethod( pobj_c->GetName().c_str(), subs );
    3737
    3838    UserProc *pUserProc;
    3939    if( subs.size() > 0 ){
    4040        //オーバーロードを解決
    41         pUserProc=OverloadSolutionWithStrParam(pobj_c->name,
     41        pUserProc=OverloadSolutionWithStrParam(pobj_c->GetName().c_str(),
    4242            subs,CreateParameter,"");
    4343
     
    5757        if( subs.size() == 1 ){
    5858            char temporary[VN_SIZE];
    59             sprintf( temporary, "_System_TypeBase.Search(\"\",\"%s\"))", pobj_c->name );
     59            sprintf( temporary, "_System_TypeBase.Search(\"\",\"%s\"))", pobj_c->GetName().c_str() );
    6060
    6161            Opcode_CallProc(temporary,
     
    9797    if(classObj.IsAbstract()){
    9898        //抽象クラスだったとき
    99         SetError(125,classObj.name,cp);
     99        SetError(125,classObj.GetName().c_str(),cp);
    100100    }
    101101
  • BasicCompiler64/Compile_ProcOp.cpp

    r129 r131  
    206206    if( userProc.GetName() == "InitializeUserTypes"
    207207        && userProc.HasParentClass()
    208         && (string)userProc.GetParentClass().name == "_System_TypeBase" ){
     208        && userProc.GetParentClass().GetName() == "_System_TypeBase" ){
    209209
    210210            pobj_DBClass->Compile_System_InitializeUserTypes();
     
    212212    else if( userProc.GetName() == "RegisterGlobalRoots"
    213213        && userProc.HasParentClass()
    214         && (string)userProc.GetParentClass().name == "_System_CGarbageCollection" ){
     214        && userProc.GetParentClass().GetName() == "_System_CGarbageCollection" ){
    215215
    216216            Compile_AddGlobalRootsForGc();
     
    503503
    504504    if(pobj_CompilingClass){
    505         if( pUserProc->GetName() == pobj_CompilingClass->name ){
     505        if( pUserProc->GetName() == pobj_CompilingClass->GetName() ){
    506506            ////////////////////////////////////
    507507            // コンストラクタをコンパイルするとき
     
    534534                    temporary[i4]=basbuf[i3];
    535535                }
    536                 if(lstrcmp(temporary,
    537                     pobj_CompilingClass->pobj_InheritsClass->name)==0){
     536                if( pobj_CompilingClass->pobj_InheritsClass->GetName() == temporary ){
    538537                    //基底クラスのコンストラクタを呼び出す
    539538                    cp=i3;
  • BasicCompiler64/Compile_Var.cpp

    r129 r131  
    558558            //自身のクラスから静的メンバを参照する場合
    559559            char temp2[VN_SIZE];
    560             sprintf(temp2,"%s.%s",pobj_CompilingClass->name,VarName);
     560            sprintf(temp2,"%s.%s",pobj_CompilingClass->GetName().c_str(),VarName);
    561561            pVar = globalVars.Find( temp2 );
    562562            if( pVar ){
  • BasicCompiler64/NumOpe.cpp

    r129 r131  
    678678                    )){
    679679                        // ダウンキャストを許可する
     680                }
     681                else if( idCalc == CALC_AS
     682                    && type_stack[sp-1] == ( DEF_OBJECT | FLAG_CAST ) && ((CClass *)index_stack[sp-1])->IsInterface()
     683                    ){
     684                        // インターフェイスへのキャスト
     685                        // TODO: 実装
     686                        CastToInterface( pobj_reg->GetLockingReg(), REG_R15, *(CClass *)index_stack[sp-2], *(CClass *)index_stack[sp-1] );
    680687                }
    681688                else{
  • BasicCompiler64/Opcode.h

    r129 r131  
    245245BOOL IsXmmReg(int reg);
    246246BOOL IsVolatileReg(int reg);
     247void IfR14Push( int reg );
    247248
    248249//Compile_Calc.cpp
     
    311312void SetXmmReg_SingleVariable(RELATIVE_VAR *pRelativeVar,int xmm_reg);
    312313void SetReg_WholeVariable(int type,RELATIVE_VAR *pRelativeVar,int reg);
     314
     315//Compile_Interface.cpp
     316bool CastToInterface( int reg, int vtblReg, const CClass &baseClass, const CClass &interfaceClass );
    313317
    314318//Compile_Object.cpp
  • BasicCompiler64/Register.cpp

    r19 r131  
    308308    }
    309309}
     310
     311void IfR14Push( int reg ){
     312    if( reg == REG_R14 ){
     313        //mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
     314        pobj_sf->push( REG_R14 );
     315    }
     316}
Note: See TracChangeset for help on using the changeset viewer.