Changeset 288 in dev for trunk/abdev/BasicCompiler_Common/src
- Timestamp:
- Aug 17, 2007, 7:36:51 AM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler_Common/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler_Common/src/BoostSerializationSupport.cpp
r279 r288 1 #include "stdafx.h" 1 #include <string> 2 #include <vector> 3 #include <fstream> 4 5 #include <windows.h> 6 #include <stdio.h> 7 #include <string.h> 8 #include <math.h> 9 #include <commctrl.h> 10 #include <time.h> 11 #include <limits.h> 12 #include <shlobj.h> 13 14 //boost libraries 15 #include <boost/foreach.hpp> 16 17 #include "../common.h" 2 18 3 19 #include <boost/archive/xml_oarchive.hpp> … … 16 32 17 33 #include <BoostSerializationSupport.h> 18 19 #include <windows.h> 34 #include <Compiler.h> 20 35 21 36 using namespace Jenga::Common; -
trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp
r276 r288 71 71 CallDestructorsOfScopeEnd(); 72 72 73 Variables &vars = UserProc::IsGlobalAreaCompiling() ?74 compiler.GetObjectModule().meta.GetGlobalVars() :75 UserProc::CompilingUserProc().GetLocalVars();73 Variables *pVars = UserProc::IsGlobalAreaCompiling() ? 74 &compiler.GetObjectModule().meta.GetGlobalVars() : 75 &UserProc::CompilingUserProc().GetLocalVars(); 76 76 77 77 //使用済みローカル変数の生存チェックを外す 78 BOOST_FOREACH( Variable *pVar, vars){78 BOOST_FOREACH( Variable *pVar, (*pVars) ){ 79 79 if(pVar->bLiving&&pVar->GetScopeLevel()==level){ 80 80 pVar->bLiving=0; … … 96 96 void LexicalScopes::CallDestructorsOfScopeEnd(){ 97 97 98 Variables &vars = UserProc::IsGlobalAreaCompiling() ?99 compiler.GetObjectModule().meta.GetGlobalVars() :100 UserProc::CompilingUserProc().GetLocalVars();98 Variables *pVariabls = UserProc::IsGlobalAreaCompiling() ? 99 &compiler.GetObjectModule().meta.GetGlobalVars() : 100 &UserProc::CompilingUserProc().GetLocalVars(); 101 101 102 102 103 103 int i3; 104 104 int indexSystemGC=-1; 105 for( i3 = (int) vars.size() - 1; i3 >= 0; i3-- ){ //確保したのと逆順序で解放するため、バックサーチにする105 for( i3 = (int)pVariabls->size() - 1; i3 >= 0; i3-- ){ //確保したのと逆順序で解放するため、バックサーチにする 106 106 107 Variable *pVar = vars[i3];107 Variable *pVar = (*pVariabls)[i3]; 108 108 109 109 if( UserProc::IsGlobalAreaCompiling() && GetNowLevel() == 0 ){ … … 159 159 if(indexSystemGC!=-1){ 160 160 //_System_GCオブジェクトのデストラクタの呼び出し処理 161 const CMethod *method = vars[indexSystemGC]->GetType().GetClass().GetDestructorMethod();161 const CMethod *method = (*pVariabls)[indexSystemGC]->GetType().GetClass().GetDestructorMethod(); 162 162 if( method ){ 163 Opcode_CallProc("",&method->GetUserProc(),0, vars[indexSystemGC]->GetName().c_str(),DEF_OBJECT);163 Opcode_CallProc("",&method->GetUserProc(),0,(*pVariabls)[indexSystemGC]->GetName().c_str(),DEF_OBJECT); 164 164 } 165 165 } -
trunk/abdev/BasicCompiler_Common/src/Linker.cpp
r287 r288 78 78 void Linker::ResolveGlobalVarSchedules( long rwSectionBaseOffset ) 79 79 { 80 int allInitVarSize = compiler.GetObjectModule().meta.GetGlobalVars(). GetAllInitSize();80 int allInitVarSize = compiler.GetObjectModule().meta.GetGlobalVars().initAreaBuffer.GetSize(); 81 81 82 82 BOOST_FOREACH( const Schedule &schedule, nativeCode.GetSchedules() ) -
trunk/abdev/BasicCompiler_Common/src/Meta.cpp
r287 r288 82 82 83 83 // グローバル変数 84 long initAreaBaseOffset = this->globalVars.initAreaBuffer.GetSize(); 84 85 BOOST_FOREACH( Variable *pVar, meta.globalVars ) 85 86 { … … 94 95 { 95 96 // 初期バッファがあるときはデータテーブルオフセットを適用する 96 pVar->SetOffsetAddress( pVar->GetOffsetAddress() + dataSectionBaseOffset );97 pVar->SetOffsetAddress( pVar->GetOffsetAddress() + initAreaBaseOffset ); 97 98 98 99 isResetOffsetAddress = false; … … 103 104 } 104 105 meta.globalVars.PullOutAll(); 106 this->globalVars.initAreaBuffer.Put( 107 meta.globalVars.initAreaBuffer.GetBuffer(), 108 meta.globalVars.initAreaBuffer.GetSize() 109 ); 105 110 106 111 // グローバル定数 -
trunk/abdev/BasicCompiler_Common/src/Variable.cpp
r287 r288 33 33 //レキシカルスコープを考慮して重複判定 34 34 for( int i=(int)this->size()-1; i>=0 ; i-- ){ 35 Variable &var = *(*this)[i];36 if( var.bLiving //現在のスコープで有効なもの37 && var.GetScopeLevel() == compiler.codeGenerator.lexicalScopes.GetNowLevel() //現在のスコープと同一レベル35 const Variable *pVar = (*this)[i]; 36 if( pVar->bLiving //現在のスコープで有効なもの 37 && pVar->GetScopeLevel() == compiler.codeGenerator.lexicalScopes.GetNowLevel() //現在のスコープと同一レベル 38 38 ) 39 39 { 40 if( var.IsEqualSymbol( symbol ) ){40 if( pVar->IsEqualSymbol( symbol ) ){ 41 41 return true; 42 42 } … … 50 50 //レキシカルスコープを考慮してバックサーチ 51 51 for( int i=(int)this->size()-1; i>=0 ; i-- ){ 52 Variable &var = *(*this)[i];53 if( var.bLiving //現在のスコープで有効なもの54 && var.GetScopeLevel() <= compiler.codeGenerator.lexicalScopes.GetNowLevel() //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮)52 const Variable *pVar = (*this)[i]; 53 if( pVar->bLiving //現在のスコープで有効なもの 54 && pVar->GetScopeLevel() <= compiler.codeGenerator.lexicalScopes.GetNowLevel() //現在のスコープレベルを超さないもの(Returnによる解放処理中を考慮) 55 55 ){ 56 if( var.IsEqualSymbol( symbol ) ){57 return &var;56 if( pVar->IsEqualSymbol( symbol ) ){ 57 return pVar; 58 58 } 59 59 } … … 74 74 } 75 75 76 void Variables::Add( Variable *pVar, bool isResetOffsetAddress )76 void GlobalVars::Add( Variable *pVar, bool isResetOffsetAddress ) 77 77 { 78 78 int alignment = 0; … … 84 84 //初期バッファがあるとき 85 85 86 if( alignment ){87 if( allInitSize % alignment ){88 allInitSize += alignment - (allInitSize % alignment);89 }90 }91 92 86 if( isResetOffsetAddress ) 93 87 { 94 pVar->SetOffsetAddress( allInitSize ); 88 if( alignment ){ 89 if( initAreaBuffer.GetSize() % alignment ){ 90 initAreaBuffer.Resize( initAreaBuffer.GetSize() + ( alignment - (initAreaBuffer.GetSize() % alignment) ) ); 91 } 92 } 93 94 pVar->SetOffsetAddress( initAreaBuffer.GetSize() ); 95 96 initAreaBuffer.Resize( initAreaBuffer.GetSize() + pVar->GetMemorySize() ); 95 97 } 96 allInitSize += pVar->GetMemorySize();97 98 } 98 99 else{ … … 105 106 } 106 107 107 if( !isResetOffsetAddress )108 {109 Jenga::Throw( "[Variables::Add] 初期バッファがない変数に対してisResetOffsetAddressをfalseにできない" );110 }111 112 108 pVar->SetOffsetAddress( allSize | 0x80000000 ); 113 109 allSize += pVar->GetMemorySize();
Note:
See TracChangeset
for help on using the changeset viewer.