source: dev/trunk/abdev/BasicCompiler_Common/src/Meta.cpp@ 284

Last change on this file since 284 was 283, checked in by dai_9181, 17 years ago
File size: 3.4 KB
RevLine 
[270]1#include "stdafx.h"
2
3#include <Compiler.h>
4
[272]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}
37
[280]38void Meta::StaticLink( Meta &meta, long dataSectionBaseOffset, int sourceIndexBase )
[270]39{
40 // 名前空間
41 BOOST_FOREACH( NamespaceScopes &namespaceScopes, meta.namespaceScopesCollection )
42 {
43 if( !this->namespaceScopesCollection.IsExist( namespaceScopes ) )
44 {
45 this->namespaceScopesCollection.push_back( namespaceScopes );
46 }
47 }
48
49 // 関数・メソッド
50 meta.GetUserProcs().Iterator_Reset();
51 while( meta.GetUserProcs().Iterator_HasNext() )
52 {
53 UserProc *pUserProc = meta.GetUserProcs().Iterator_GetNext();
54 pUserProc->isTargetObjectModule = false;
[273]55
56 pUserProc->GetNativeCode().ResetDataSectionBaseOffset( dataSectionBaseOffset );
[280]57 pUserProc->GetNativeCode().ResetSourceIndexes( sourceIndexBase );
[273]58
[270]59 this->userProcs.Put( pUserProc );
60 }
61 meta.GetUserProcs().PullOutAll();
62
63 // DLL関数
64 meta.GetDllProcs().Iterator_Reset();
65 while( meta.GetDllProcs().Iterator_HasNext() )
66 {
67 DllProc *pDllProc = meta.GetDllProcs().Iterator_GetNext();
68 pDllProc->isTargetObjectModule = false;
69 this->dllProcs.Put( pDllProc );
70 }
71 meta.GetDllProcs().PullOutAll();
72
73 // クラス
[271]74 meta.GetClasses().Iterator_Reset();
75 while( meta.GetClasses().Iterator_HasNext() )
76 {
77 CClass *pClass = meta.GetClasses().Iterator_GetNext();
78 pClass->isTargetObjectModule = false;
79 this->GetClasses().Put( pClass );
80 }
81 meta.GetClasses().PullOutAll();
[270]82
83 // グローバル変数
[271]84 BOOST_FOREACH( Variable *pVar, meta.globalVars )
85 {
[283]86 // 基底スコープレベルのグローバル変数の生存値をオンにする
87 if( pVar->GetScopeLevel() == 0 )
88 {
89 pVar->bLiving = TRUE;
90 }
91
[271]92 pVar->isTargetObjectModule = false;
[275]93 this->globalVars.Add( pVar );
[271]94 }
95 meta.globalVars.PullOutAll();
[270]96
97 // グローバル定数
[271]98 meta.GetGlobalConsts().Iterator_Reset();
99 while( meta.GetGlobalConsts().Iterator_HasNext() )
100 {
101 CConst *pConst = meta.GetGlobalConsts().Iterator_GetNext();
102 pConst->isTargetObjectModule = false;
103 this->GetGlobalConsts().Put( pConst );
104 }
105 meta.GetGlobalConsts().PullOutAll();
[270]106
107 // グローバル定数マクロ
[271]108 meta.GetGlobalConstMacros().Iterator_Reset();
109 while( meta.GetGlobalConstMacros().Iterator_HasNext() )
110 {
111 ConstMacro *pConstMacro = meta.GetGlobalConstMacros().Iterator_GetNext();
112 pConstMacro->isTargetObjectModule = false;
113 this->GetGlobalConstMacros().Put( pConstMacro );
114 }
115 meta.GetGlobalConstMacros().PullOutAll();
[270]116
117 // blittable型
[271]118 BOOST_FOREACH( BlittableType &blittableType, meta.blittableTypes )
119 {
120 blittableType.isTargetObjectModule = false;
121 this->blittableTypes.push_back( blittableType );
122 }
123 meta.blittableTypes.clear();
[270]124
125 // TypeDef
[271]126 BOOST_FOREACH( TypeDef &typeDef, meta.typeDefs )
127 {
128 typeDef.isTargetObjectModule = false;
129 this->typeDefs.push_back( typeDef );
130 }
131 meta.typeDefs.clear();
[270]132
133 // 関数ポインタ
[271]134 BOOST_FOREACH( ProcPointer *pProcPointer, meta.procPointers )
135 {
136 pProcPointer->isTargetObjectModule = false;
137 this->procPointers.push_back( pProcPointer );
138 }
139 meta.procPointers.PullOutAll();
[270]140}
Note: See TracBrowser for help on using the repository browser.