Changeset 316 in dev for trunk


Ignore:
Timestamp:
Sep 7, 2007, 3:15:41 AM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/Compile_Calc.cpp

    r290 r316  
    498498    }
    499499
    500 
     500    if( (std::string)Command == "items[index]=item" )
     501    {
     502        int test=0;
     503    }
    501504
    502505    ///////////////////////////////////////////////////////////////
  • trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp

    r308 r316  
    264264}
    265265
    266 void _compile_proc(const UserProc *pUserProc){
     266void _compile_proc(const UserProc *pUserProc)
     267{
    267268    extern char *basbuf;
    268269    extern HANDLE hHeap;
     
    786787    //ローカル変数のネーム情報は後に解放する
    787788}
    788 
    789 void CompileBufferInProcedure( const UserProc &userProc ){
    790     if( userProc.IsCompiled() ) return;
    791 
    792     _compile_proc( &userProc );
    793 
    794 /*
    795     // ログを履く
    796     char temporary[8192];
    797     temporary[0]=0;
    798     lstrcat( temporary, "------------------------------------------------------------------\n" );
    799     sprintf( temporary + lstrlen(temporary), "【 %s のコード情報】\n", userProc.GetFullName().c_str() );
    800     sprintf( temporary + lstrlen(temporary), "code size: %d bytes\n", userProc.GetCodeSize() );
    801     lstrcat( temporary, "------------------------------------------------------------------\n" );
    802     lstrcat( temporary, "\n" );
    803     Smoothie::Logger::Put( temporary );*/
    804 }
    805 void CompileLocal(){
    806     if( compiler.IsDll() )
    807     {
    808         //DLLの場合はグローバル変数を初期化するための関数を一番初めにコンパイルする
    809         const UserProc *pUserProc=GetSubHash("_System_InitDllGlobalVariables");
    810         if(pUserProc){
    811             CompileBufferInProcedure( *pUserProc );
    812         }
    813         else SetError(300,NULL,cp);
    814     }
    815     else
    816     {
    817         // グローバル領域を一番初めにコンパイルする
    818         extern const UserProc *pSub_System_GlobalArea;
    819         CompileBufferInProcedure( *pSub_System_GlobalArea );
    820     }
    821 
    822     //_System_TypeBase_InitializeUserTypesは一番最後にコンパイル
    823     extern const UserProc *pSubStaticMethod_System_TypeBase_InitializeUserTypes;
    824     pSubStaticMethod_System_TypeBase_InitializeUserTypes->CompleteCompile();
    825 
    826     //_System_InitStaticLocalVariablesは一番最後にコンパイル
    827     //※一般関数内の静的変数オブジェクトをすべて収集しなければならない
    828     extern const UserProc *pSub_System_InitStaticLocalVariables;
    829     pSub_System_InitStaticLocalVariables->CompleteCompile();
    830 
    831     //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
    832     extern const UserProc *pSub_System_Call_Destructor_of_GlobalObject;
    833     pSub_System_Call_Destructor_of_GlobalObject->CompleteCompile();
    834 
    835 repeat:
    836     compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
    837     while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    838     {
    839         UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
    840         CompileBufferInProcedure( *pUserProc );
    841     }
    842 
    843     if( IsNeedProcCompile() ){
    844         //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
    845         goto repeat;
    846     }
    847 
    848     if( !compiler.IsStaticLibrary() )
    849     {
    850         //_System_TypeBase_InitializeUserTypesは最後のほうでコンパイル
    851         pSubStaticMethod_System_TypeBase_InitializeUserTypes->KillCompileStatus();
    852         CompileBufferInProcedure( *pSubStaticMethod_System_TypeBase_InitializeUserTypes );
    853 
    854         if( IsNeedProcCompile() ){
    855             //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
    856 
    857             compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
    858             while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    859             {
    860                 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
    861                 CompileBufferInProcedure( *pUserProc );
    862             }
    863         }
    864 
    865         //_System_InitStaticLocalVariablesは一番最後にコンパイル
    866         pSub_System_InitStaticLocalVariables->KillCompileStatus();
    867         CompileBufferInProcedure( *pSub_System_InitStaticLocalVariables );
    868 
    869         //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
    870         pSub_System_Call_Destructor_of_GlobalObject->KillCompileStatus();
    871         CompileBufferInProcedure( *pSub_System_Call_Destructor_of_GlobalObject );
    872     }
    873 }
  • trunk/abdev/BasicCompiler32/Opcode.h

    r308 r316  
    217217
    218218//Compile_ProcOp.cpp
    219 void CompileLocal();
     219void _compile_proc(const UserProc *pUserProc);
    220220
    221221//Compile_Func.cpp
  • trunk/abdev/BasicCompiler64/CParameter.cpp

    r308 r316  
    185185
    186186
    187 void ParamImpl::SetParameter( const string &procName, const Parameters &params, int SecondParmNum ){
     187void ParamImpl::SetParameter( const string &procName, const Parameters &params, int SecondParmNum, const UserProc *pUserProc ){
    188188    if( SecondParmNum == -1 ) SecondParmNum = (int)params.size();
    189189
     
    239239            dummyType = *params[i2];
    240240            bByVal = ( params[i2]->IsRef() == false ) ? TRUE:FALSE;
     241
     242            // 型パラメータを解決
     243            ResolveFormalGenericTypeParameter( dummyType, leftType, pUserProc );
    241244        }
    242245
  • trunk/abdev/BasicCompiler64/Compile_Calc.cpp

    r308 r316  
    3636    int i,i2,i3;
    3737    char variable[VN_SIZE];
    38 
    3938
    4039
  • trunk/abdev/BasicCompiler64/Compile_CallProc.cpp

    r308 r316  
    149149        else{
    150150            if(dwFlags&PROCFLAG_NEW){
     151                GetVarType( ObjectName, leftType, false );
     152
    151153                //New演算子によるコンストラクタ呼び出し
    152154                pobj_c=pUserProc->GetParentClassPtr();
     
    242244    pobj_parameter->ApplyDefaultParameters( pUserProc->RealParams() );
    243245
     246    // 型パラメータを適用
     247    pobj_parameter->SetLeftType( leftType );
     248
    244249    //エラーチェック
    245250    if( !pobj_parameter->ErrorCheck(pUserProc->GetName(),pUserProc->RealParams(),pUserProc->GetSecondParmNum() ) ){
     
    260265
    261266    //レジスタ、スタックフレームにセット
    262     pobj_parameter->SetParameter(pUserProc->GetName(),pUserProc->RealParams(),pUserProc->GetRealSecondParmNum() );
     267    pobj_parameter->SetParameter(pUserProc->GetName(),pUserProc->RealParams(),pUserProc->GetRealSecondParmNum(), pUserProc );
    263268
    264269    if(pUserProc->ReturnType().IsStruct() ){
  • trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp

    r309 r316  
    190190    int i3,i4;
    191191    char temporary[VN_SIZE];
    192 
    193     if( pUserProc->IsUsing() == false || pUserProc->IsCompiled() ) return;
    194192
    195193    if( pUserProc->GetLocalVars().size() ){
     
    620618        GetVarOffsetReadWrite(temp,&RelativeVar,Type());
    621619
    622         i3=pUserProc->ReturnType().GetBasicType();
    623 
    624         if(i3==DEF_OBJECT || i3==DEF_STRUCT){
     620        const Type &returnType = pUserProc->ReturnType();
     621        if( returnType.IsObject() || returnType.IsStruct() )
     622        {
    625623            SetVarPtrToReg(REG_RAX,&RelativeVar);
    626             if( i3==DEF_OBJECT ){
     624            if( returnType.IsObject() )
     625            {
    627626                //mov rax,qword ptr[rax]
    628627                compiler.codeGenerator.op_mov_RM( sizeof(_int64), REG_RAX, REG_RAX, 0, MOD_BASE );
    629628            }
    630629        }
    631         else if(i3==DEF_DOUBLE){
     630        else if( returnType.IsDouble() )
     631        {
    632632            //64ビット実数型
    633633            SetXmmReg_DoubleVariable(&RelativeVar,REG_XMM0);
    634634        }
    635         else if(i3==DEF_SINGLE){
     635        else if( returnType.IsSingle() )
     636        {
    636637            //32ビット実数型
    637638            SetXmmReg_SingleVariable(&RelativeVar,REG_XMM0);
    638639        }
    639         else if(IsWholeNumberType(i3)){
     640        else if( returnType.IsWhole() )
     641        {
    640642            //整数型
    641             SetReg_WholeVariable(Type(i3),&RelativeVar,REG_RAX);
     643            SetReg_WholeVariable(returnType.GetSize(),&RelativeVar,REG_RAX);
    642644        }
    643645        else SetError(300,NULL,cp);
     
    699701    HeapDefaultFree(SynonymErrorWords);
    700702}
    701 
    702 void CompileBufferInProcedure( const UserProc &userProc ){
    703     if( userProc.IsUsing() == false || userProc.IsCompiled() ) return;
    704 
    705     _compile_proc( &userProc );
    706 
    707     // ログを履く
    708     char temporary[8192];
    709     temporary[0]=0;
    710     lstrcat( temporary, "------------------------------------------------------------------\n" );
    711     sprintf( temporary + lstrlen(temporary), "【 %s のコード情報】\n", userProc.GetName().c_str() );
    712     sprintf( temporary + lstrlen(temporary), "code size: %d bytes\n", userProc.GetCodeSize() );
    713     lstrcat( temporary, "------------------------------------------------------------------\n" );
    714     lstrcat( temporary, "\n" );
    715     trace_for_size( temporary );
    716 }
    717 void CompileLocal(){
    718     if( compiler.IsDll() ){
    719         //DLLの場合はグローバル変数を初期化するための関数を一番初めにコンパイルする
    720         const UserProc *pUserProc = GetSubHash("_System_InitDllGlobalVariables");
    721         if(pUserProc){
    722             CompileBufferInProcedure( *pUserProc );
    723         }
    724         else SetError(300,NULL,cp);
    725     }
    726     else
    727     {
    728         // グローバル領域を一番初めにコンパイルする
    729         extern const UserProc *pSub_System_GlobalArea;
    730         CompileBufferInProcedure( *pSub_System_GlobalArea );
    731     }
    732 
    733     //_System_TypeBase_InitializeUserTypesは一番最後にコンパイル
    734     extern const UserProc *pSubStaticMethod_System_TypeBase_InitializeUserTypes;
    735     pSubStaticMethod_System_TypeBase_InitializeUserTypes->CompleteCompile();
    736 
    737     //_System_InitStaticLocalVariablesは一番最後にコンパイル
    738     //※一般関数内の静的変数オブジェクトをすべて収集しなければならない
    739     extern const UserProc *pSub_System_InitStaticLocalVariables;
    740     pSub_System_InitStaticLocalVariables->CompleteCompile();
    741 
    742     //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
    743     extern const UserProc *pSub_System_Call_Destructor_of_GlobalObject;
    744     pSub_System_Call_Destructor_of_GlobalObject->CompleteCompile();
    745 
    746 repeat:
    747     compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
    748     while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    749     {
    750         UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
    751         CompileBufferInProcedure( *pUserProc );
    752     }
    753 
    754     if( IsNeedProcCompile() ){
    755         //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
    756         goto repeat;
    757     }
    758 
    759     //_System_TypeBase_InitializeUserTypesは最後のほうでコンパイル
    760     pSubStaticMethod_System_TypeBase_InitializeUserTypes->KillCompileStatus();
    761     CompileBufferInProcedure( *pSubStaticMethod_System_TypeBase_InitializeUserTypes );
    762 
    763     if( IsNeedProcCompile() ){
    764         //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
    765 
    766         compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
    767         while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    768         {
    769             UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
    770             CompileBufferInProcedure( *pUserProc );
    771         }
    772     }
    773 
    774     //_System_InitStaticLocalVariablesは一番最後にコンパイル
    775     pSub_System_InitStaticLocalVariables->KillCompileStatus();
    776     CompileBufferInProcedure( *pSub_System_InitStaticLocalVariables );
    777 
    778     //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
    779     pSub_System_Call_Destructor_of_GlobalObject->KillCompileStatus();
    780     CompileBufferInProcedure( *pSub_System_Call_Destructor_of_GlobalObject );
    781 }
  • trunk/abdev/BasicCompiler64/Compile_Var.cpp

    r308 r316  
    191191    return true;
    192192}
    193 bool _member_offset(bool isErrorEnabled, bool isWriteAccess, const CClass &objClass, const char *member, RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess){
     193bool _member_offset(bool isErrorEnabled, bool isWriteAccess, const Type &classType, const char *member, RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess)
     194{
     195    const CClass &objClass = classType.GetClass();
    194196
    195197    //////////////////////////////////////
     
    252254    resultType = pMember->GetType();
    253255
     256    // 型パラメータを解決
     257    ResolveFormalGenericTypeParameter( resultType, classType );
     258
    254259    //ポインタ変数の場合
    255260    if( resultType.IsPointer() ){
     
    352357            isErrorEnabled,
    353358            isWriteAccess,
    354             pMember->GetType().GetClass(),
     359            pMember->GetType(),
    355360            NestMember,
    356361            pRelativeVar,
     
    441446            pSubscripts = &pVar->GetSubscripts();
    442447            bConst = pVar->IsConst();
     448
     449            /////////////////////////////////////////////////////////
     450            // ☆★☆ ジェネリクスサポート ☆★☆
     451
     452            if( resultType.IsTypeParameter() )
     453            {
     454                // 型パラメータだったとき
     455
     456                int ptrLevel = PTR_LEVEL( resultType.GetBasicType() );
     457
     458                // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする
     459                resultType.SetBasicType( DEF_OBJECT );
     460
     461                for( int i=0; i<ptrLevel; i++ )
     462                {
     463                    resultType.PtrLevelUp();
     464                }
     465            }
     466
     467            //
     468            /////////////////////////////////////////////////////////
    443469
    444470            goto ok;
     
    498524            isErrorEnabled,
    499525            isWriteAccess,
    500             *compiler.pCompilingClass,
     526            Type( DEF_OBJECT, *compiler.pCompilingClass ),
    501527            variable,
    502528            pRelativeVar,
     
    727753            isErrorEnabled,
    728754            isWriteAccess,
    729             resultType.GetClass(),
     755            resultType,
    730756            member,pRelativeVar,resultType,0)) return false;
    731757
  • trunk/abdev/BasicCompiler64/NumOpe.cpp

    r308 r316  
    152152            true,   //エラー表示あり
    153153            false,  //読み込み専用
    154             objClass,
     154            leftType,
    155155            member,&relativeVar,resultType,0)){
    156156                return false;
     
    219219
    220220                SetUseRegFromRax(resultType.GetBasicType(),UseReg,XmmReg);
     221
     222                // 型パラメータを解決
     223                ResolveFormalGenericTypeParameter( resultType, leftType, pUserProc );
    221224
    222225
     
    428431        GetVarType(VarName,resultType,false);
    429432        if( resultType.IsObject() ){
    430             CallIndexerGetterProc(UseReg,&resultType.GetClass(),VarName,ArrayElements,resultType);
     433            CallIndexerGetterProc(UseReg,resultType,VarName,ArrayElements,resultType);
    431434
    432435            isLiteral = false;
  • trunk/abdev/BasicCompiler64/Opcode.h

    r309 r316  
    259259
    260260//Compile_Var.cpp
    261 bool _member_offset(bool isErrorEnabled, bool isWriteAccess, const CClass &objClass, const char *member, RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess);
     261bool _member_offset(bool isErrorEnabled, bool isWriteAccess, const Type &classType, const char *member, RELATIVE_VAR *pRelativeVar, Type &resultType, BOOL bPrivateAccess);
    262262void SetThisPtrToReg(int reg);
    263263bool GetVarOffset(bool isErrorEnabled,bool isWriteAccess,const char *NameBuffer,RELATIVE_VAR *pRelativeVar,Type &resultType, Subscripts *pResultSubscripts = NULL );
     
    277277    int ParmsNum;
    278278
     279    Type leftType;
    279280    Type returnType;
    280281
     
    288289    ParamImpl(const Parameters &params);
    289290    ~ParamImpl();
     291    void SetLeftType( const Type &type )
     292    {
     293        this->leftType = type;
     294    }
    290295    void SetReturnType( const Type &returnType );
    291296
     
    301306    void MacroParameterSupport( const Parameters &params );
    302307    void SetStructParameter( int reg, const Type &baseType, const char *expression );
    303     void SetParameter( const string &procName, const Parameters &params, int SecondParmNum = -1 );
     308    void SetParameter( const string &procName, const Parameters &params, int SecondParmNum = -1, const UserProc *pUserProc = NULL );
    304309
    305310    //一時オブジェクトパラメータの生成と破棄
     
    330335
    331336//Compile_ProcOp.cpp
    332 void CompileLocal();
     337void _compile_proc(const UserProc *pUserProc);
    333338
    334339//Compile_Func.cpp
     
    340345int CallOperatorProc(BYTE idCalc, const Type &baseType, int *type_stack,LONG_PTR *index_stack,BOOL *bUseHeap,int &sp);
    341346void CallCastOperatorProc(int reg,Type &calcType,BOOL bCalcUseHeap,const Type &toType);
    342 void CallIndexerGetterProc(int reg,const CClass *pobj_Class,char *ObjectName,char *Parameter,Type &resultType);
     347void CallIndexerGetterProc(int reg, const Type &classType, char *ObjectName,char *Parameter,Type &resultType);
    343348
    344349//Compile_Statement.cpp
  • trunk/abdev/BasicCompiler64/OperatorProc.cpp

    r308 r316  
    321321
    322322//インデクサ(getter)を呼び出す
    323 void CallIndexerGetterProc(int reg,const CClass *pobj_Class,char *ObjectName,char *Parameter,Type &resultType ){
     323void CallIndexerGetterProc(int reg, const Type &classType, char *ObjectName,char *Parameter,Type &resultType ){
    324324
    325325    std::vector<const UserProc *> subs;
    326     pobj_Class->GetMethods().Enum( CALC_ARRAY_GET, subs );
     326    classType.GetClass().GetMethods().Enum( CALC_ARRAY_GET, subs );
    327327    if( subs.size() == 0 ){
    328328        return;
    329329    }
    330330
     331    const UserProc *pUserProc = subs[0];
     332
    331333    //////////////////////////////////////////////////////
    332334    /////    レジスタ資源のバックアップ
     
    334336    //////////////////////////////////////////////////////
    335337
    336         Opcode_CallProc(Parameter,subs[0],0,ObjectName);
    337         resultType = subs[0]->ReturnType();
     338        Opcode_CallProc(Parameter,pUserProc,0,ObjectName);
     339        resultType = pUserProc->ReturnType();
    338340
    339341        //mov reg,rax
     
    345347    }////////////////////////////////////////////
    346348
     349
     350    // 型パラメータを解決
     351    ResolveFormalGenericTypeParameter( resultType, classType, pUserProc );
    347352}
  • trunk/abdev/BasicCompiler_Common/Subroutine.cpp

    r308 r316  
    447447    return false;
    448448}
     449
     450void CompileBufferInProcedure( const UserProc &userProc ){
     451    if( userProc.IsCompiled() ) return;
     452
     453    _compile_proc( &userProc );
     454
     455/*
     456    // ログを履く
     457    char temporary[8192];
     458    temporary[0]=0;
     459    lstrcat( temporary, "------------------------------------------------------------------\n" );
     460    sprintf( temporary + lstrlen(temporary), "【 %s のコード情報】\n", userProc.GetFullName().c_str() );
     461    sprintf( temporary + lstrlen(temporary), "code size: %d bytes\n", userProc.GetCodeSize() );
     462    lstrcat( temporary, "------------------------------------------------------------------\n" );
     463    lstrcat( temporary, "\n" );
     464    Smoothie::Logger::Put( temporary );*/
     465}
     466void CompileLocal(){
     467    if( compiler.IsDll() )
     468    {
     469        //DLLの場合はグローバル変数を初期化するための関数を一番初めにコンパイルする
     470        const UserProc *pUserProc=GetSubHash("_System_InitDllGlobalVariables");
     471        if(pUserProc){
     472            CompileBufferInProcedure( *pUserProc );
     473        }
     474        else SetError(300,NULL,cp);
     475    }
     476    else
     477    {
     478        // グローバル領域を一番初めにコンパイルする
     479        extern const UserProc *pSub_System_GlobalArea;
     480        CompileBufferInProcedure( *pSub_System_GlobalArea );
     481    }
     482
     483    //_System_TypeBase_InitializeUserTypesは一番最後にコンパイル
     484    extern const UserProc *pSubStaticMethod_System_TypeBase_InitializeUserTypes;
     485    pSubStaticMethod_System_TypeBase_InitializeUserTypes->CompleteCompile();
     486
     487    //_System_InitStaticLocalVariablesは一番最後にコンパイル
     488    //※一般関数内の静的変数オブジェクトをすべて収集しなければならない
     489    extern const UserProc *pSub_System_InitStaticLocalVariables;
     490    pSub_System_InitStaticLocalVariables->CompleteCompile();
     491
     492    //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
     493    extern const UserProc *pSub_System_Call_Destructor_of_GlobalObject;
     494    pSub_System_Call_Destructor_of_GlobalObject->CompleteCompile();
     495
     496repeat:
     497    compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
     498    while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
     499    {
     500        UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
     501        CompileBufferInProcedure( *pUserProc );
     502    }
     503
     504    if( IsNeedProcCompile() ){
     505        //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
     506        goto repeat;
     507    }
     508
     509    if( !compiler.IsStaticLibrary() )
     510    {
     511        //_System_TypeBase_InitializeUserTypesは最後のほうでコンパイル
     512        pSubStaticMethod_System_TypeBase_InitializeUserTypes->KillCompileStatus();
     513        CompileBufferInProcedure( *pSubStaticMethod_System_TypeBase_InitializeUserTypes );
     514
     515        if( IsNeedProcCompile() ){
     516            //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
     517
     518            compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
     519            while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
     520            {
     521                UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
     522                CompileBufferInProcedure( *pUserProc );
     523            }
     524        }
     525
     526        //_System_InitStaticLocalVariablesは一番最後にコンパイル
     527        pSub_System_InitStaticLocalVariables->KillCompileStatus();
     528        CompileBufferInProcedure( *pSub_System_InitStaticLocalVariables );
     529
     530        //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
     531        pSub_System_Call_Destructor_of_GlobalObject->KillCompileStatus();
     532        CompileBufferInProcedure( *pSub_System_Call_Destructor_of_GlobalObject );
     533    }
     534}
  • trunk/abdev/BasicCompiler_Common/common.h

    r313 r316  
    359359int AddProcPtrInfo( const string &typeExpression, int nowLine );
    360360bool IsNeedProcCompile();
     361void CompileLocal();
    361362
    362363//OldStatement.cpp
  • trunk/abdev/BasicCompiler_Common/src/Type.cpp

    r301 r316  
    396396    return (
    397397        basicType == DEF_OBJECT
    398         || IsTypeParameter()
     398        || basicType == DEF_TYPE_PARAMETER
    399399    );
    400400}
Note: See TracChangeset for help on using the changeset viewer.