Changeset 272 in dev


Ignore:
Timestamp:
Aug 10, 2007, 9:20:45 PM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev
Files:
13 edited

Legend:

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

    r266 r272  
    791791    }
    792792
    793     //_System_TypeBase_InitializeUserTypesは最後のほうでコンパイル
    794     pSubStaticMethod_System_TypeBase_InitializeUserTypes->KillCompileStatus();
    795     CompileBufferInProcedure( *pSubStaticMethod_System_TypeBase_InitializeUserTypes );
    796 
    797     if( IsNeedProcCompile() ){
    798         //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
    799 
    800         compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
    801         while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
    802         {
    803             UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
    804             CompileBufferInProcedure( *pUserProc );
    805         }
    806     }
    807 
    808     //_System_InitStaticLocalVariablesは一番最後にコンパイル
    809     pSub_System_InitStaticLocalVariables->KillCompileStatus();
    810     CompileBufferInProcedure( *pSub_System_InitStaticLocalVariables );
    811 
    812     //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
    813     pSub_System_Call_Destructor_of_GlobalObject->KillCompileStatus();
    814     CompileBufferInProcedure( *pSub_System_Call_Destructor_of_GlobalObject );
     793    if( !compiler.IsStaticLibrary() )
     794    {
     795        //_System_TypeBase_InitializeUserTypesは最後のほうでコンパイル
     796        pSubStaticMethod_System_TypeBase_InitializeUserTypes->KillCompileStatus();
     797        CompileBufferInProcedure( *pSubStaticMethod_System_TypeBase_InitializeUserTypes );
     798
     799        if( IsNeedProcCompile() ){
     800            //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
     801
     802            compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset();
     803            while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() )
     804            {
     805                UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();
     806                CompileBufferInProcedure( *pUserProc );
     807            }
     808        }
     809
     810        //_System_InitStaticLocalVariablesは一番最後にコンパイル
     811        pSub_System_InitStaticLocalVariables->KillCompileStatus();
     812        CompileBufferInProcedure( *pSub_System_InitStaticLocalVariables );
     813
     814        //_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
     815        pSub_System_Call_Destructor_of_GlobalObject->KillCompileStatus();
     816        CompileBufferInProcedure( *pSub_System_Call_Destructor_of_GlobalObject );
     817    }
    815818}
  • trunk/abdev/BasicCompiler32/MakePeHdr.cpp

    r271 r272  
    174174    HeapDefaultFree(temp);
    175175
    176     //関数ポインタ情報を初期化
    177     compiler.GetObjectModule().meta.GetProcPointers().clear();
    178 
    179176    // 名前空間情報を取得
    180177    NamespaceSupporter::CollectNamespaces(
     
    189186
    190187    //TypeDef情報を初期化
    191     compiler.GetObjectModule().meta.GetTypeDefs().Init();
     188    compiler.GetObjectModule().meta.GetTypeDefs().CollectTypeDefs();
    192189
    193190    //定数情報を取得
  • trunk/abdev/BasicCompiler_Common/Intermediate_Step2.cpp

    r265 r272  
    9393    NamespaceScopes &namespaceScopes = compiler.GetNamespaceSupporter().GetLivingNamespaceScopes();
    9494    namespaceScopes.clear();
    95 
    96     //定数に関する情報を初期化
    97     compiler.GetObjectModule().meta.GetGlobalConsts().Clear();
    98     compiler.GetObjectModule().meta.GetGlobalConstMacros().Clear();
    9995
    10096    extern char *basbuf;
  • trunk/abdev/BasicCompiler_Common/MakeExe.cpp

    r268 r272  
    137137
    138138    //グローバル変数に関する情報
     139    // TODO: AllGlobalVarSize、AllInitGlobalVarSizeをVariablesクラスに入れる
    139140    extern int AllGlobalVarSize;
    140141    extern int AllInitGlobalVarSize;
  • trunk/abdev/BasicCompiler_Common/Subroutine.cpp

    r265 r272  
    282282    int i,i2,i3;
    283283    char temporary[8192];
    284 
    285     //サブルーチン(ユーザー定義)情報を初期化
    286     userProcs.Clear();
    287 
    288     //Declare(DLL関数)情報を初期化
    289     dllProcs.Clear();
    290284
    291285    // 名前空間管理
     
    408402        if(source[i]=='\0') break;
    409403    }
    410 
    411     ////////////
    412     // 特殊関数
    413     ////////////
    414     namespaceScopes.clear();
    415     importedNamespaces.clear();
    416 
    417 #ifndef _AMD64_
    418     sprintf(temporary,"%c%c_allrem()",1,ESC_SUB);
    419     userProcs.Add( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false);
    420 
    421     sprintf(temporary,"%c%c_aullrem()",1,ESC_SUB);
    422     userProcs.Add( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false);
    423 
    424     sprintf(temporary,"%c%c_allmul()",1,ESC_SUB);
    425     userProcs.Add( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false);
    426 
    427     sprintf(temporary,"%c%c_alldiv()",1,ESC_SUB);
    428     userProcs.Add( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false);
    429 
    430     sprintf(temporary,"%c%c_aulldiv()",1,ESC_SUB);
    431     userProcs.Add( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false);
    432 
    433     sprintf(temporary,"%c%c_allshl()",1,ESC_SUB);
    434     userProcs.Add( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false);
    435 
    436     sprintf(temporary,"%c%c_allshr()",1,ESC_SUB);
    437     userProcs.Add( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false);
    438 
    439     sprintf(temporary,"%c%c_aullshr()",1,ESC_SUB);
    440     userProcs.Add( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false);
    441 #endif
    442 
    443     sprintf(temporary,"%c%c_System_InitStaticLocalVariables()",1,ESC_SUB);
    444     userProcs.Add( namespaceScopes, importedNamespaces, temporary,0,false,NULL,false);
    445404}
    446405void Delete_di(DllProc *pDllProc){
  • trunk/abdev/BasicCompiler_Common/gc.cpp

    r229 r272  
    1919    ///////////////////////////////
    2020
    21     sprintf(temporary,"_System_gc_StackRoot_StartPtr%c%c*LONG_PTR",1,ESC_AS);
    22     OpcodeDim(temporary,0);
     21    if( compiler.GetObjectModule().meta.GetGlobalVars().Find( Symbol( "_System_gc_StackRoot_StartPtr" ) ) == NULL )
     22    {
     23        // 未定義の場合は定義する
     24        sprintf(temporary,"_System_gc_StackRoot_StartPtr%c%c*LONG_PTR",1,ESC_AS);
     25        OpcodeDim(temporary,0);
     26    }
    2327
    2428    GetVarOffsetReadWrite("_System_gc_StackRoot_StartPtr",&RelativeVar,type);
  • trunk/abdev/BasicCompiler_Common/include/Class.h

    r270 r272  
    419419    // 特殊クラス
    420420    /////////////////////////////
    421     CClass *pStringClass;
    422     CClass *pObjectClass;
    423     CClass *GetStringClassPtr() const;
    424     CClass *GetObjectClassPtr() const;
     421    mutable const CClass *pStringClass;
     422    mutable const CClass *pObjectClass;
     423    const CClass *GetStringClassPtr() const;
     424    const CClass *GetObjectClassPtr() const;
    425425};
  • trunk/abdev/BasicCompiler_Common/include/Meta.h

    r270 r272  
    7070    {
    7171    }
     72
     73    // 初期化
     74    void Clear();
    7275
    7376    // 静的リンク
  • trunk/abdev/BasicCompiler_Common/include/NativeCode.h

    r265 r272  
    4444        ar & BOOST_SERIALIZATION_NVP( type );
    4545        ar & BOOST_SERIALIZATION_NVP( offset );
     46
     47        switch( type )
     48        {
     49        case UserProc:
     50        case AddressOf:
     51            ar & BOOST_SERIALIZATION_NVP( const_cast<::UserProc *&>(pUserProc) );
     52            break;
     53        case DllProc:
     54            ar & BOOST_SERIALIZATION_NVP( const_cast<::DllProc *&>(pDllProc) );
     55            break;
     56        default:
     57            ar & BOOST_SERIALIZATION_NVP( lpValue );
     58            break;
     59        }
    4660    }
    4761
  • trunk/abdev/BasicCompiler_Common/include/TypeDef.h

    r215 r272  
    7474    void Add( const NamespaceScopes &namespaceScopes, const string &expression, int nowLine );
    7575public:
    76     void Init();
     76    void CollectTypeDefs();
    7777};
  • trunk/abdev/BasicCompiler_Common/src/Class.cpp

    r270 r272  
    219219    if( !isInheritsClass ){
    220220        // クラスを一つも継承していないとき
    221         const CClass *pObjectClass = compiler.GetObjectModule().meta.GetClasses().Find("Object");
    222         if( !pObjectClass ){
    223             SmoothieException::Throw(106,"Object",i);
    224             return false;
    225         }
    226 
    227         if( !InheritsClass( *pObjectClass, nowLine ) ){
     221        if( !InheritsClass( *compiler.GetObjectModule().meta.GetClasses().GetObjectClassPtr(), nowLine ) ){
    228222            return false;
    229223        }
     
    763757bool Classes::Insert( CClass *pClass )
    764758{
    765     // キャッシュしておくクラス
    766     if( pClass->GetName() == "String" )
    767     {
    768         pStringClass=pClass;
    769     }
    770     else if( pClass->GetName() == "Object" )
    771     {
    772         pObjectClass = pClass;
    773     }
    774 
    775759    /////////////////////////////////
    776760    // ハッシュデータに追加
     
    804788    int i, i2;
    805789    char temporary[VN_SIZE];
    806 
    807     // Blittable型管理オブジェクトを初期化
    808     compiler.GetObjectModule().meta.GetBlittableTypes().clear();
    809790
    810791    // 名前空間管理
     
    953934    while(this->Iterator_HasNext()){
    954935        CClass &objClass = *this->Iterator_GetNext();
     936        if( objClass.isTargetObjectModule == false )
     937        {
     938            // 静的リンクライブラリの場合は飛ばす(既にインスタンスが定義済みであるため)
     939            continue;
     940        }
    955941
    956942        // 名前空間をセット
     
    16531639}
    16541640
    1655 CClass *Classes::GetStringClassPtr() const
     1641const CClass *Classes::GetStringClassPtr() const
    16561642{
    16571643    if( !pStringClass ){
    1658         SmoothieException::Throw();
    1659         return NULL;
     1644        // キャッシュしておく
     1645        pStringClass = this->Find( NamespaceScopes( "System" ), "String" );
     1646
     1647        if( !pStringClass )
     1648        {
     1649            SmoothieException::Throw();
     1650        }
     1651        return pStringClass;
    16601652    }
    16611653    return pStringClass;
    16621654}
    1663 CClass *Classes::GetObjectClassPtr() const
     1655const CClass *Classes::GetObjectClassPtr() const
    16641656{
    16651657    if( !pObjectClass ){
    1666         SmoothieException::Throw();
    1667         return NULL;
     1658        // キャッシュしておく
     1659        pObjectClass = this->Find( NamespaceScopes( "System" ), "Object" );
     1660
     1661        if( !pObjectClass )
     1662        {
     1663            SmoothieException::Throw();
     1664        }
     1665        return pObjectClass;
    16681666    }
    16691667    return pObjectClass;
  • trunk/abdev/BasicCompiler_Common/src/Meta.cpp

    r271 r272  
    22
    33#include <Compiler.h>
     4
     5void Meta::Clear()
     6{
     7    // 名前空間
     8    namespaceScopesCollection.clear();
     9
     10    // 関数・メソッド
     11    userProcs.Clear();
     12
     13    // DLL関数
     14    dllProcs.Clear();
     15
     16    // クラス
     17    classesImpl.Clear();
     18
     19    // グローバル変数
     20    globalVars.Clear();
     21
     22    // グローバル定数
     23    globalConsts.Clear();
     24
     25    // グローバル定数マクロ
     26    globalConstMacros.Clear();
     27
     28    // blittable型
     29    blittableTypes.clear();
     30
     31    // TypeDef
     32    typeDefs.clear();
     33
     34    // 関数ポインタ
     35    procPointers.Clear();
     36}
    437
    538void Meta::StaticLink( Meta &meta )
  • trunk/abdev/BasicCompiler_Common/src/TypeDef.cpp

    r206 r272  
    142142}
    143143
    144 void TypeDefCollection::Init(){
    145     // 初期化
    146     clear();
     144void TypeDefCollection::CollectTypeDefs(){
    147145
    148146    // 名前空間管理
Note: See TracChangeset for help on using the changeset viewer.