Index: /trunk/abdev/BasicCompiler32/BasicCompiler.vcproj
===================================================================
--- /trunk/abdev/BasicCompiler32/BasicCompiler.vcproj	(revision 247)
+++ /trunk/abdev/BasicCompiler32/BasicCompiler.vcproj	(revision 248)
@@ -1281,5 +1281,5 @@
 					</File>
 					<File
-						RelativePath="..\BasicCompiler_Common\src\LexicalScopingImpl.cpp"
+						RelativePath="..\BasicCompiler_Common\src\LexicalScope.cpp"
 						>
 					</File>
@@ -1419,5 +1419,5 @@
 				</File>
 				<File
-					RelativePath="..\BasicCompiler_Common\include\LexicalScopingImpl.h"
+					RelativePath="..\BasicCompiler_Common\include\LexicalScope.h"
 					>
 				</File>
Index: /trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp	(revision 247)
+++ /trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp	(revision 248)
@@ -6,5 +6,5 @@
 #include <Program.h>
 #include <Compiler.h>
-#include <LexicalScopingImpl.h>
+#include <LexicalScope.h>
 #include <Class.h>
 #include <Variable.h>
@@ -97,5 +97,5 @@
 		UserProc::CompileStartForGlobalArea();
 
-		GetLexicalScopes().CallDestructorsOfScopeEnd();
+		compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
 
 		UserProc::CompileStartForUserProc( pBackUserProc );
@@ -349,6 +349,6 @@
 
 		//レキシカルスコープ情報
-		pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );
-		pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );
+		pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() );
+		pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() );
 		pVar->bLiving=TRUE;
 
@@ -615,5 +615,5 @@
 
 	//ローカルオブジェクトの解放処理
-	GetLexicalScopes().CallDestructorsOfScopeEnd();
+	compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
 
 	//プロシージャ抜け出しスケジュール（Exit Sub/Function）
Index: /trunk/abdev/BasicCompiler32/Compile_Statement.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 247)
+++ /trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 248)
@@ -3,5 +3,5 @@
 #include <jenga/include/smoothie/LexicalAnalysis.h>
 
-#include <LexicalScopingImpl.h>
+#include <LexicalScope.h>
 #include <Compiler.h>
 
@@ -140,5 +140,5 @@
 	}
 
-	const CodeGenerator::PertialSchedule *pIfPertialSchedule = NULL;
+	const PertialSchedule *pIfPertialSchedule = NULL;
 	if( !NumOpe(Parameter,Type(),tempType) ){
 		//NumOpe内でエラー
@@ -207,5 +207,5 @@
 
 		//jne
-		const CodeGenerator::PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+		const PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//cmp ebx,0
@@ -213,5 +213,5 @@
 
 		//jne
-		const CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+		const PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//jmp (endif、または else までジャンプ)
@@ -240,10 +240,10 @@
 
 	//レキシカルスコープをレベルアップ
-	GetLexicalScopes().Start( obp, SCOPE_TYPE_IF );
+	compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF );
 
 	i2=CompileBuffer(ESC_ENDIF,0);
 
 	//レキシカルスコープをレベルダウン
-	GetLexicalScopes().End();
+	compiler.codeGenerator.lexicalScopes.End();
 
 
@@ -252,5 +252,5 @@
 	if(i2==ESC_ELSE){
 		//jmp (endifまで)
-		const CodeGenerator::PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
+		const PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
 
 		compiler.codeGenerator.opfix_JmpPertialSchedule( pIfPertialSchedule );
@@ -262,10 +262,10 @@
 
 		//レキシカルスコープをレベルアップ
-		GetLexicalScopes().Start( obp, SCOPE_TYPE_IF );
+		compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF );
 
 		CompileBuffer(ESC_ENDIF,0);
 
 		//レキシカルスコープをレベルダウン
-		GetLexicalScopes().End();
+		compiler.codeGenerator.lexicalScopes.End();
 
 
@@ -340,5 +340,5 @@
 	if(!Parameter[0]) SetError(10,"While",cp);
 
-	const CodeGenerator::PertialSchedule *pWhilePertialSchedule = NULL;
+	const PertialSchedule *pWhilePertialSchedule = NULL;
 	Type tempType;
 	if( !NumOpe(Parameter,Type(),tempType) ){
@@ -408,5 +408,5 @@
 
 		//jne
-		const CodeGenerator::PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+		const PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//cmp ebx,0
@@ -414,5 +414,5 @@
 
 		//jne
-		const CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+		const PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//jmp (Wendまでジャンプ)
@@ -436,10 +436,10 @@
 
 	//レキシカルスコープをレベルアップ
-	GetLexicalScopes().Start( obp, SCOPE_TYPE_WHILE );
+	compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_WHILE );
 
 	//While内をコンパイル
 	CompileBuffer(0,COM_WEND);
 
-	GetLexicalScopes().CallDestructorsOfScopeEnd();
+	compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
 
 	//jmp ...
@@ -447,5 +447,5 @@
 
 	//レキシカルスコープをレベルダウン
-	GetLexicalScopes().End();
+	compiler.codeGenerator.lexicalScopes.End();
 
 	if( pWhilePertialSchedule )
@@ -486,5 +486,5 @@
 
 	//jmp ...
-	const CodeGenerator::PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
+	const PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
 
 	//Continueアドレスのバックアップとセット
@@ -528,5 +528,5 @@
 
 	//jmp [カウンタ減少の場合の判定を飛び越す]
-	const CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
+	const PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
 
 	//jeジャンプ先のオフセット値
@@ -552,10 +552,10 @@
 
 	//レキシカルスコープをレベルアップ
-	GetLexicalScopes().Start( obp, SCOPE_TYPE_FOR );
+	compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_FOR );
 
 	//For内をコンパイル
 	CompileBuffer(0,COM_NEXT);
 
-	GetLexicalScopes().CallDestructorsOfScopeEnd();
+	compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
 
 	if(szNextVariable[0]){
@@ -569,5 +569,5 @@
 
 	//レキシカルスコープをレベルダウン
-	GetLexicalScopes().End();
+	compiler.codeGenerator.lexicalScopes.End();
 
 	//jeジャンプ先のオフセット値
@@ -588,12 +588,12 @@
 
 	//レキシカルスコープをレベルアップ
-	GetLexicalScopes().Start( obp, SCOPE_TYPE_DO );
+	compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_DO );
 
 	//Do内をコンパイル
 	CompileBuffer(0,COM_LOOP);
 
-	GetLexicalScopes().CallDestructorsOfScopeEnd();
-
-	const CodeGenerator::PertialSchedule *pDoPertialSchedule = NULL;
+	compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd();
+
+	const PertialSchedule *pDoPertialSchedule = NULL;
 
 	extern char *basbuf;
@@ -702,5 +702,5 @@
 
 				//jne
-				const CodeGenerator::PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+				const PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 				//cmp ebx,0
@@ -708,5 +708,5 @@
 
 				//jne
-				const CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+				const PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 				if(basbuf[i3]=='0'){
@@ -723,5 +723,5 @@
 
 					//jmp 2（ループを続ける）
-					const CodeGenerator::PertialSchedule *pTempPertialSchedule3 = compiler.codeGenerator.op_jmp( 0, sizeof(char), true );
+					const PertialSchedule *pTempPertialSchedule3 = compiler.codeGenerator.op_jmp( 0, sizeof(char), true );
 
 					compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule1 );
@@ -767,8 +767,8 @@
 
 	//jmp ...
-	const CodeGenerator::PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
+	const PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
 
 	//レキシカルスコープをレベルダウン
-	GetLexicalScopes().End();
+	compiler.codeGenerator.lexicalScopes.End();
 
 	//jmpジャンプ先のオフセット値
@@ -792,5 +792,5 @@
 
 	//未解放のローカルオブジェクトのデストラクタを呼び出す
-	GetLexicalScopes().CallDestructorsOfReturn();
+	compiler.codeGenerator.lexicalScopes.CallDestructorsOfReturn();
 
 	//jmp ...(End Sub/Function)
@@ -1049,5 +1049,5 @@
 
 	//レキシカルスコープをレベルアップ
-	GetLexicalScopes().Start( obp, SCOPE_TYPE_SELECT );
+	compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_SELECT );
 
 	//Select Case内をコンパイル
@@ -1066,5 +1066,5 @@
 
 	//レキシカルスコープをレベルダウン
-	GetLexicalScopes().End();
+	compiler.codeGenerator.lexicalScopes.End();
 
 	pCaseSchedule=temp_pCaseSchedule;
Index: /trunk/abdev/BasicCompiler32/Compile_Var.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_Var.cpp	(revision 247)
+++ /trunk/abdev/BasicCompiler32/Compile_Var.cpp	(revision 248)
@@ -4,5 +4,5 @@
 #include <jenga/include/smoothie/LexicalAnalysis.h>
 
-#include <LexicalScopingImpl.h>
+#include <LexicalScope.h>
 #include <CodeGenerator.h>
 #include <Compiler.h>
@@ -1055,6 +1055,6 @@
 
 		//レキシカルスコープ
-		pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );
-		pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );
+		pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() );
+		pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() );
 		pVar->bLiving=TRUE;
 
@@ -1090,6 +1090,6 @@
 
 		//レキシカルスコープ
-		pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );
-		pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );
+		pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() );
+		pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() );
 		pVar->bLiving=TRUE;
 
Index: /trunk/abdev/BasicCompiler32/MakePeHdr.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 247)
+++ /trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 248)
@@ -5,5 +5,5 @@
 #include <jenga/include/smoothie/Smoothie.h>
 
-#include <LexicalScopingImpl.h>
+#include <LexicalScope.h>
 #include <Class.h>
 #include <Compiler.h>
@@ -387,5 +387,5 @@
 
 	//レキシカルスコープ情報を初期化
-	GetLexicalScopes().Init(obp);
+	compiler.codeGenerator.lexicalScopes.Init(obp);
 
 
Index: /trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp	(revision 247)
+++ /trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp	(revision 248)
@@ -142,5 +142,5 @@
 		compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
 
-		const CodeGenerator::PertialSchedule *pFalsePertialSchedule1;
+		const PertialSchedule *pFalsePertialSchedule1;
 		if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){
 			//符号なし演算
@@ -156,5 +156,5 @@
 		}
 
-		const CodeGenerator::PertialSchedule *pTruePertialSchedule;
+		const PertialSchedule *pTruePertialSchedule;
 		if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){
 			//符号なし演算
@@ -174,5 +174,5 @@
 
 		//ja FalseSchedule2（偽へジャンプ）
-		const CodeGenerator::PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_ja( 0, sizeof(char), true );
+		const PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_ja( 0, sizeof(char), true );
 
 		//TrueScheduleのジャンプ先の設定
@@ -351,5 +351,5 @@
 		compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
 
-		const CodeGenerator::PertialSchedule *pFalsePertialSchedule1;
+		const PertialSchedule *pFalsePertialSchedule1;
 		if(IsSignedType(AnswerType)){
 			//符号あり演算
@@ -365,5 +365,5 @@
 		}
 
-		const CodeGenerator::PertialSchedule *pTruePertialSchedule;
+		const PertialSchedule *pTruePertialSchedule;
 		if(IsSignedType(AnswerType)){
 			//符号あり演算
@@ -383,5 +383,5 @@
 
 		//jb FalseSchedule2（偽へジャンプ）
-		const CodeGenerator::PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_jb( 0, sizeof(char), true );
+		const PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_jb( 0, sizeof(char), true );
 
 		//TrueScheduleのジャンプ先の設定
@@ -563,5 +563,5 @@
 		compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
 
-		const CodeGenerator::PertialSchedule *pTruePertialSchedule1;
+		const PertialSchedule *pTruePertialSchedule1;
 		if(IsSignedType(AnswerType)){
 			//符号あり演算
@@ -577,5 +577,5 @@
 		}
 
-		const CodeGenerator::PertialSchedule *pFalsePertialSchedule;
+		const PertialSchedule *pFalsePertialSchedule;
 		if(IsSignedType(AnswerType)){
 			//符号あり演算
@@ -595,5 +595,5 @@
 
 		//jb TrueSchedule2（真へジャンプ）
-		const CodeGenerator::PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_jb( 0, sizeof(char), true );
+		const PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_jb( 0, sizeof(char), true );
 
 		//FalseScheduleのジャンプ先の設定
@@ -771,5 +771,5 @@
 		compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
 
-		const CodeGenerator::PertialSchedule *pTruePertialSchedule1;
+		const PertialSchedule *pTruePertialSchedule1;
 		if(IsSignedType(AnswerType)){
 			//符号有り
@@ -785,5 +785,5 @@
 		}
 
-		const CodeGenerator::PertialSchedule *pFalsePertialSchedule;
+		const PertialSchedule *pFalsePertialSchedule;
 		if(IsSignedType(AnswerType)){
 			//符号有り
@@ -803,5 +803,5 @@
 
 		//ja TrueSchedule2（真へジャンプ）
-		const CodeGenerator::PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_ja( 0, sizeof(char), true );
+		const PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_ja( 0, sizeof(char), true );
 
 		//FalseScheduleのジャンプ先の設定
@@ -975,5 +975,5 @@
 
 		//jne TrueSchedule1（真へジャンプ）
-		const CodeGenerator::PertialSchedule *pTruePertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+		const PertialSchedule *pTruePertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//cmp edx,ecx
@@ -981,5 +981,5 @@
 
 		//jne TrueSchedule2（真へジャンプ）
-		const CodeGenerator::PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+		const PertialSchedule *pTruePertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//xor eax,eax（eaxを0にする）
@@ -1141,5 +1141,5 @@
 
 		//jne FalseSchedule1（偽へジャンプ）
-		const CodeGenerator::PertialSchedule *pFalsePertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+		const PertialSchedule *pFalsePertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//cmp edx,ecx
@@ -1147,5 +1147,5 @@
 
 		//jne FalseSchedule2（偽へジャンプ）
-		const CodeGenerator::PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+		const PertialSchedule *pFalsePertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//mov eax,1
Index: /trunk/abdev/BasicCompiler_Common/Compile.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/Compile.cpp	(revision 247)
+++ /trunk/abdev/BasicCompiler_Common/Compile.cpp	(revision 248)
@@ -5,5 +5,5 @@
 #include <jenga/include/smoothie/SmoothieException.h>
 
-#include <LexicalScopingImpl.h>
+#include <LexicalScope.h>
 #include <CodeGenerator.h>
 #include <Compiler.h>
@@ -173,5 +173,5 @@
 			case ESC_EXITWHILE:
 				{
-					CScope *pScope = GetLexicalScopes().SearchScope( SCOPE_TYPE_WHILE );
+					LexicalScope *pScope = compiler.codeGenerator.lexicalScopes.SearchScope( LexicalScope::SCOPE_TYPE_WHILE );
 					if( !pScope ){
 						SetError(12,"Exit While",cp);
@@ -183,5 +183,5 @@
 			case ESC_EXITFOR:
 				{
-					CScope *pScope = GetLexicalScopes().SearchScope( SCOPE_TYPE_FOR );
+					LexicalScope *pScope = compiler.codeGenerator.lexicalScopes.SearchScope( LexicalScope::SCOPE_TYPE_FOR );
 					if( !pScope ){
 						SetError(12,"Exit For",cp);
@@ -193,5 +193,5 @@
 			case ESC_EXITDO:
 				{
-					CScope *pScope = GetLexicalScopes().SearchScope( SCOPE_TYPE_DO );
+					LexicalScope *pScope = compiler.codeGenerator.lexicalScopes.SearchScope( LexicalScope::SCOPE_TYPE_DO );
 					if( !pScope ){
 						SetError(12,"Exit Do",cp);
Index: /trunk/abdev/BasicCompiler_Common/VariableOpe.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/VariableOpe.cpp	(revision 247)
+++ /trunk/abdev/BasicCompiler_Common/VariableOpe.cpp	(revision 248)
@@ -5,5 +5,5 @@
 
 #include <Compiler.h>
-#include <LexicalScopingImpl.h>
+#include <LexicalScope.h>
 #include <Variable.h>
 #include <NamespaceSupporter.h>
@@ -989,6 +989,6 @@
 
 	//レキシカルスコープ
-	pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );
-	pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );
+	pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() );
+	pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() );
 	pVar->bLiving=TRUE;
 
Index: /trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h
===================================================================
--- /trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 247)
+++ /trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 248)
@@ -2,4 +2,5 @@
 
 #include <NativeCode.h>
+#include <LexicalScope.h>
 
 #ifdef _AMD64_
@@ -8,5 +9,4 @@
 #include "../../BasicCompiler32/MachineFixed.h"
 #endif
-
 
 void ReallocNativeCodeBuffer();
@@ -51,46 +51,131 @@
 };
 
+// コード生成時の部分的なスケジューリング
+class PertialSchedule
+{
+	int codePos;	// バッファ位置
+	int typeSize;	// 対象サイズ（一般的には8bit/32bit）
+
+	int _obpOld;	// 未完成
+public:
+	PertialSchedule( int codePos, int typeSize )
+		: codePos( codePos )
+		, typeSize( typeSize )
+	{
+		extern int obp;
+		_obpOld = obp;
+	}
+	~PertialSchedule()
+	{
+	}
+
+	int GetCodePos() const
+	{
+		return codePos;
+	}
+	int GetTypeSize() const
+	{
+		return typeSize;
+	}
+	int GetObpOld() const
+	{
+		return _obpOld;
+	}
+};
+typedef std::vector<const PertialSchedule *> PertialSchedules;
+
+class LexicalScope
+{
+public:
+	enum SCOPE_TYPE{
+		//ベース
+		SCOPE_TYPE_BASE,
+
+		//分岐
+		SCOPE_TYPE_IF,
+
+		//ループ
+		SCOPE_TYPE_DO,
+		SCOPE_TYPE_FOR,
+		SCOPE_TYPE_WHILE,
+
+		//ケース分け
+		SCOPE_TYPE_SELECT,
+	};
+
+private:
+	int level;
+	int StartAddress;
+	SCOPE_TYPE TypeOfStatement;
+
+	PertialSchedules breakPertialSchedules;
+
+public:
+	LexicalScope( int level, int addr, SCOPE_TYPE TypeOfStatement )
+		: level( level )
+		, StartAddress( addr )
+		, TypeOfStatement( TypeOfStatement )
+	{
+	}
+	~LexicalScope()
+	{
+	}
+
+	int GetStartAddress()
+	{
+		return StartAddress;
+	}
+	SCOPE_TYPE GetTypeOfStatement()
+	{
+		return TypeOfStatement;
+	}
+
+	void Break();
+	void RunScheduleOfBreak();
+};
+
+class LexicalScopes
+{
+	LexicalScope **ppScopes;
+	int level;
+
+public:
+
+	LexicalScopes(){
+		ppScopes = (LexicalScope **)malloc( 1 );
+		level=0;
+	}
+	~LexicalScopes(){
+		free( ppScopes );
+	}
+
+	//初期化（関数コンパイルの開始時に呼び出される）
+	void Init(int addr);
+
+	// スコープを開始
+	void Start( int addr, LexicalScope::SCOPE_TYPE TypeOfStatement );
+
+	// スコープを検索
+	LexicalScope *SearchScope( LexicalScope::SCOPE_TYPE TypeOfStatement );
+
+	int GetNowLevel(void);
+	void SetNowLevel( int level );
+	int GetStartAddress(void);
+
+	void End();
+
+	//スコープ終了時のデストラクタ呼び出し
+	void CallDestructorsOfScopeEnd();
+
+	//Returnステートメント用のデストラクタ呼び出し
+	void CallDestructorsOfReturn( int BaseLevel = 0 );
+};
+
 class CodeGenerator
 {
 	NativeCode *pNativeCode;
 
-public:
-
-	// コード生成時の部分的なスケジューリング
-	class PertialSchedule
-	{
-		int codePos;	// バッファ位置
-		int typeSize;	// 対象サイズ（一般的には8bit/32bit）
-
-		int _obpOld;	// 未完成
-	public:
-		PertialSchedule( int codePos, int typeSize )
-			: codePos( codePos )
-			, typeSize( typeSize )
-		{
-			extern int obp;
-			_obpOld = obp;
-		}
-		~PertialSchedule()
-		{
-		}
-
-		int GetCodePos() const
-		{
-			return codePos;
-		}
-		int GetTypeSize() const
-		{
-			return typeSize;
-		}
-		int GetObpOld() const
-		{
-			return _obpOld;
-		}
-	};
-
 private:
 	// 部分スケジュールの管理
-	typedef std::vector<const PertialSchedule *> PertialSchedules;
 	PertialSchedules pertialSchedules;
 
@@ -107,4 +192,7 @@
 	// Gotoスケジュールの管理
 	std::vector<GotoLabelSchedule> gotoLabelSchedules;
+
+	// レキシカルスコープの管理
+	LexicalScopes lexicalScopes;
 
 	CodeGenerator()
Index: /trunk/abdev/BasicCompiler_Common/include/LexicalScope.h
===================================================================
--- /trunk/abdev/BasicCompiler_Common/include/LexicalScope.h	(revision 248)
+++ /trunk/abdev/BasicCompiler_Common/include/LexicalScope.h	(revision 248)
@@ -0,0 +1,6 @@
+#pragma once
+
+#include <jenga/include/smoothie/Smoothie.h>
+
+#include <CodeGenerator.h>
+
Index: unk/abdev/BasicCompiler_Common/include/LexicalScopingImpl.h
===================================================================
--- /trunk/abdev/BasicCompiler_Common/include/LexicalScopingImpl.h	(revision 247)
+++ 	(revision )
@@ -1,37 +1,0 @@
-#pragma once
-
-#include <jenga/include/smoothie/Smoothie.h>
-#include <jenga/include/smoothie/LexicalScoping.h>
-
-class ScopeImpl : public CScope
-{
-public:
-	ScopeImpl( int level, int addr, SCOPE_TYPE TypeOfStatement )
-		: CScope( level, addr, TypeOfStatement )
-	{
-	}
-	~ScopeImpl();
-
-	virtual void Break();
-	virtual void RunScheduleOfBreak();
-};
-
-class LexicalScopesImpl : public CLexicalScopes
-{
-	virtual CScope *CreateScope( int level, int addr, SCOPE_TYPE TypeOfStatement )
-	{
-		return new ScopeImpl( level, addr, TypeOfStatement );
-	}
-
-public:
-
-	virtual void End();
-
-	//スコープ終了時のデストラクタ呼び出し
-	virtual void CallDestructorsOfScopeEnd();
-
-	//Returnステートメント用のデストラクタ呼び出し
-	virtual void CallDestructorsOfReturn( int BaseLevel = 0 );
-};
-
-LexicalScopesImpl &GetLexicalScopes();
Index: /trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp	(revision 247)
+++ /trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp	(revision 248)
@@ -33,5 +33,5 @@
 	bool isSuccessful = false;
 
-	CodeGenerator::PertialSchedules::iterator it = pertialSchedules.begin();
+	PertialSchedules::iterator it = pertialSchedules.begin();
 	while( it != pertialSchedules.end() )
 	{
@@ -84,5 +84,5 @@
 	}
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+const PertialSchedule *CodeGenerator::__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
 {
 	long beginCodePos = pNativeCode->GetSize();
@@ -158,45 +158,45 @@
 	return pPertialSchedule;
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_jle( long offset, int op_size, bool isPertialSchedule )
+const PertialSchedule *CodeGenerator::op_jle( long offset, int op_size, bool isPertialSchedule )
 {
 	return __jmp_op_format( (char)0x0E, offset, op_size, isPertialSchedule );
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_jbe( long offset, int op_size, bool isPertialSchedule )
+const PertialSchedule *CodeGenerator::op_jbe( long offset, int op_size, bool isPertialSchedule )
 {
 	return __jmp_op_format( (char)0x06, offset, op_size, isPertialSchedule );
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_jge( long offset, int op_size, bool isPertialSchedule )
+const PertialSchedule *CodeGenerator::op_jge( long offset, int op_size, bool isPertialSchedule )
 {
 	return __jmp_op_format( (char)0x0D, offset, op_size, isPertialSchedule );
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_jae( long offset, int op_size, bool isPertialSchedule )
+const PertialSchedule *CodeGenerator::op_jae( long offset, int op_size, bool isPertialSchedule )
 {
 	return __jmp_op_format( (char)0x03, offset, op_size, isPertialSchedule );
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_jl( long offset, int op_size, bool isPertialSchedule )
+const PertialSchedule *CodeGenerator::op_jl( long offset, int op_size, bool isPertialSchedule )
 {
 	return __jmp_op_format( (char)0x0C, offset, op_size, isPertialSchedule );
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_jb( long offset, int op_size, bool isPertialSchedule )
+const PertialSchedule *CodeGenerator::op_jb( long offset, int op_size, bool isPertialSchedule )
 {
 	return __jmp_op_format( (char)0x02, offset, op_size, isPertialSchedule );
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_jg( long offset, int op_size, bool isPertialSchedule )
+const PertialSchedule *CodeGenerator::op_jg( long offset, int op_size, bool isPertialSchedule )
 {
 	return __jmp_op_format( (char)0x0F, offset, op_size, isPertialSchedule );
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_ja( long offset, int op_size, bool isPertialSchedule )
+const PertialSchedule *CodeGenerator::op_ja( long offset, int op_size, bool isPertialSchedule )
 {
 	return __jmp_op_format( (char)0x07, offset, op_size, isPertialSchedule );
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_jne( long offset, int op_size, bool isPertialSchedule )
+const PertialSchedule *CodeGenerator::op_jne( long offset, int op_size, bool isPertialSchedule )
 {
 	return __jmp_op_format( (char)0x05, offset, op_size, isPertialSchedule );
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_je( long offset, int op_size, bool isPertialSchedule )
+const PertialSchedule *CodeGenerator::op_je( long offset, int op_size, bool isPertialSchedule )
 {
 	return __jmp_op_format( (char)0x04, offset, op_size, isPertialSchedule );
 }
-const CodeGenerator::PertialSchedule *CodeGenerator::op_jmp( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+const PertialSchedule *CodeGenerator::op_jmp( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
 {
 	return __jmp_op_format( (char)0xEB, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
Index: /trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp	(revision 248)
+++ /trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp	(revision 248)
@@ -0,0 +1,178 @@
+#include "stdafx.h"
+
+#include <LexicalScope.h>
+#include <Compiler.h>
+
+#include "../common.h"
+
+#ifdef _AMD64_
+#include "../../BasicCompiler64/opcode.h"
+#else
+#include "../../BasicCompiler32/opcode.h"
+#endif
+
+
+void LexicalScope::Break(){
+	//未解放のローカルオブジェクトを解放する
+	compiler.codeGenerator.lexicalScopes.CallDestructorsOfReturn( level );
+
+	//jmp ...(Next addr)
+	breakPertialSchedules.push_back(
+		compiler.codeGenerator.op_jmp( 0, sizeof(long), true )
+	);
+}
+void LexicalScope::RunScheduleOfBreak(){
+	BOOST_FOREACH( const PertialSchedule *pBreakPertialSchedule, breakPertialSchedules )
+	{
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pBreakPertialSchedule );
+	}
+}
+
+
+
+LexicalScope *LexicalScopes::SearchScope( LexicalScope::SCOPE_TYPE TypeOfStatement ){
+	for( int i = level; i>=0; i-- ){
+		if( ppScopes[i]->GetTypeOfStatement() == TypeOfStatement ){
+			return ppScopes[i];
+		}
+	}
+	return NULL;
+}
+
+void LexicalScopes::Init(int addr){
+	// TODO: エラーチェック
+
+	level = -1;
+	Start( addr, LexicalScope::SCOPE_TYPE_BASE );
+}
+void LexicalScopes::Start( int addr, LexicalScope::SCOPE_TYPE TypeOfStatement ){
+	level++;
+	ppScopes = (LexicalScope **)realloc( ppScopes, ( level + 1 ) * sizeof( LexicalScope * ) );
+	ppScopes[level] = new LexicalScope( level, addr, TypeOfStatement );
+}
+
+int LexicalScopes::GetNowLevel(){
+	return level;
+}
+void LexicalScopes::SetNowLevel( int level ){
+	this->level = level;
+}
+int LexicalScopes::GetStartAddress(){
+	return ppScopes[level]->GetStartAddress();
+}
+
+void LexicalScopes::End(){
+	if( level <= 0 ){
+		SetError();
+		return;
+	}
+
+	//デストラクタを呼ぶ
+	CallDestructorsOfScopeEnd();
+
+	Variables &vars = UserProc::IsGlobalAreaCompiling() ?
+		compiler.GetMeta().GetGlobalVars() :
+		UserProc::CompilingUserProc().GetLocalVars();
+
+	//使用済みローカル変数の生存チェックを外す
+	BOOST_FOREACH( Variable *pVar, vars ){
+		if(pVar->bLiving&&pVar->GetScopeLevel()==level){
+			pVar->bLiving=0;
+			extern int obp;
+			pVar->SetScopeEndAddress( obp );
+		}
+	}
+
+
+	//スコープ抜け出しスケジュール
+	ppScopes[level]->RunScheduleOfBreak();
+
+
+	//スコープレベルを下げる
+	delete ppScopes[level];
+	level--;
+}
+
+// スコープ終了時のデストラクタ呼び出し
+void LexicalScopes::CallDestructorsOfScopeEnd(){
+
+	Variables &vars = UserProc::IsGlobalAreaCompiling() ?
+		compiler.GetMeta().GetGlobalVars() :
+		UserProc::CompilingUserProc().GetLocalVars();
+
+
+	int i3;
+	int indexSystemGC=-1;
+	for( i3 = (int)vars.size() - 1; i3 >= 0; i3-- ){		//確保したのと逆順序で解放するため、バックサーチにする
+
+		Variable *pVar = vars[i3];
+
+		if( UserProc::IsGlobalAreaCompiling() && GetNowLevel() == 0 ){
+			if( pVar->GetName() == "_System_GC" ){
+				indexSystemGC=i3;
+				continue;
+			}
+		}
+
+		//同一レベルのレキシカルスコープのみを検知
+		if(!pVar->bLiving) continue;
+		if( pVar->GetScopeLevel() != GetNowLevel() ) continue;
+
+		if( pVar->GetType().IsStruct() && pVar->IsParameter() ){
+			//構造体パラメータを持つとき
+
+			//メモリを解放する
+
+#ifdef _AMD64_
+			//x64ビットコード
+
+			//mov rcx,qword ptr[rsp+offset]
+			compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RCX,REG_RSP,
+				-pVar->GetOffsetAddress(),
+				MOD_BASE_DISP32,
+				Schedule::LocalVar);
+#else
+			//x86コード
+
+			//mov ecx,dword ptr[ebp+offset]
+			compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_EBP,-pVar->GetOffsetAddress(),MOD_BASE_DISP32, Schedule::LocalVar );
+
+			//push ecx
+			compiler.codeGenerator.op_push(REG_ECX);
+#endif
+
+			//call free
+			extern const UserProc *pSub_free;
+			compiler.codeGenerator.op_call(pSub_free);
+
+
+			if( UserProc::IsGlobalAreaCompiling() ){
+				//ここには来ないハズ
+				SetError(300,NULL,cp);
+			}
+		}
+	}
+
+	if(indexSystemGC!=-1){
+		//_System_GCオブジェクトのデストラクタの呼び出し処理
+		const CMethod *method = vars[indexSystemGC]->GetType().GetClass().GetDestructorMethod();
+		if( method ){
+			Opcode_CallProc("",&method->GetUserProc(),0,vars[indexSystemGC]->GetName().c_str(),DEF_OBJECT);
+		}
+	}
+}
+
+// Returnステートメントで発行されるデストラクタを生成
+void LexicalScopes::CallDestructorsOfReturn( int BaseLevel ){
+	//現在のスコープレベルを退避
+	int backupScopeLevel = GetNowLevel();
+
+	for( int i = GetNowLevel(); i >= BaseLevel; i-- ){
+		SetNowLevel( i );
+
+		CallDestructorsOfScopeEnd();
+	}
+
+	//現在のスコープレベルを復元
+	SetNowLevel( backupScopeLevel );
+}
Index: unk/abdev/BasicCompiler_Common/src/LexicalScopingImpl.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/src/LexicalScopingImpl.cpp	(revision 247)
+++ 	(revision )
@@ -1,158 +1,0 @@
-#include "stdafx.h"
-
-#include <LexicalScopingImpl.h>
-#include <Compiler.h>
-
-#include "../common.h"
-
-#ifdef _AMD64_
-#include "../../BasicCompiler64/opcode.h"
-#else
-#include "../../BasicCompiler32/opcode.h"
-#endif
-
-
-void ScopeImpl::Break(){
-	//未解放のローカルオブジェクトを解放する
-	GetLexicalScopes().CallDestructorsOfReturn( level );
-
-	//jmp ...(Next addr)
-	OpBuffer[obp++]=(char)0xE9;
-
-	pBreakSchedule=(DWORD *)realloc( pBreakSchedule, ( nBreakSchedule + 1 ) * sizeof(DWORD) );
-	pBreakSchedule[nBreakSchedule]=obp;
-	nBreakSchedule++;
-
-	obp+=sizeof(long);
-}
-void ScopeImpl::RunScheduleOfBreak(){
-	for(int i=0;i<nBreakSchedule;i++){
-		*((long *)(OpBuffer+pBreakSchedule[i]))=obp-(pBreakSchedule[i]+sizeof(long));
-	}
-}
-
-void LexicalScopesImpl::End(){
-	if( level <= 0 ){
-		SetError();
-		return;
-	}
-
-	//デストラクタを呼ぶ
-	CallDestructorsOfScopeEnd();
-
-	Variables &vars = UserProc::IsGlobalAreaCompiling() ?
-		compiler.GetMeta().GetGlobalVars() :
-		UserProc::CompilingUserProc().GetLocalVars();
-
-	//使用済みローカル変数の生存チェックを外す
-	BOOST_FOREACH( Variable *pVar, vars ){
-		if(pVar->bLiving&&pVar->GetScopeLevel()==level){
-			pVar->bLiving=0;
-			extern int obp;
-			pVar->SetScopeEndAddress( obp );
-		}
-	}
-
-
-	//スコープ抜け出しスケジュール
-	ppScopes[level]->RunScheduleOfBreak();
-
-
-	//スコープレベルを下げる
-	delete ppScopes[level];
-	level--;
-}
-
-// スコープ終了時のデストラクタ呼び出し
-void LexicalScopesImpl::CallDestructorsOfScopeEnd(){
-
-	Variables &vars = UserProc::IsGlobalAreaCompiling() ?
-		compiler.GetMeta().GetGlobalVars() :
-		UserProc::CompilingUserProc().GetLocalVars();
-
-
-	int i3;
-	int indexSystemGC=-1;
-	for( i3 = (int)vars.size() - 1; i3 >= 0; i3-- ){		//確保したのと逆順序で解放するため、バックサーチにする
-
-		Variable *pVar = vars[i3];
-
-		if( UserProc::IsGlobalAreaCompiling() && GetNowLevel() == 0 ){
-			if( pVar->GetName() == "_System_GC" ){
-				indexSystemGC=i3;
-				continue;
-			}
-		}
-
-		//同一レベルのレキシカルスコープのみを検知
-		if(!pVar->bLiving) continue;
-		if( pVar->GetScopeLevel() != GetNowLevel() ) continue;
-
-		if( pVar->GetType().IsStruct() && pVar->IsParameter() ){
-			//構造体パラメータを持つとき
-
-			//メモリを解放する
-
-#ifdef _AMD64_
-			//x64ビットコード
-
-			//mov rcx,qword ptr[rsp+offset]
-			compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RCX,REG_RSP,
-				-pVar->GetOffsetAddress(),
-				MOD_BASE_DISP32,
-				Schedule::LocalVar);
-#else
-			//x86コード
-
-			//mov ecx,dword ptr[ebp+offset]
-			compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_EBP,-pVar->GetOffsetAddress(),MOD_BASE_DISP32, Schedule::LocalVar );
-
-			//push ecx
-			compiler.codeGenerator.op_push(REG_ECX);
-#endif
-
-			//call free
-			extern const UserProc *pSub_free;
-			compiler.codeGenerator.op_call(pSub_free);
-
-
-			if( UserProc::IsGlobalAreaCompiling() ){
-				//ここには来ないハズ
-				SetError(300,NULL,cp);
-			}
-		}
-	}
-
-	if(indexSystemGC!=-1){
-		//_System_GCオブジェクトのデストラクタの呼び出し処理
-		const CMethod *method = vars[indexSystemGC]->GetType().GetClass().GetDestructorMethod();
-		if( method ){
-			Opcode_CallProc("",&method->GetUserProc(),0,vars[indexSystemGC]->GetName().c_str(),DEF_OBJECT);
-		}
-	}
-}
-
-// Returnステートメントで発行されるデストラクタを生成
-void LexicalScopesImpl::CallDestructorsOfReturn( int BaseLevel ){
-	//現在のスコープレベルを退避
-	int backupScopeLevel = GetNowLevel();
-
-	for( int i = GetNowLevel(); i >= BaseLevel; i-- ){
-		SetNowLevel( i );
-
-		CallDestructorsOfScopeEnd();
-	}
-
-	//現在のスコープレベルを復元
-	SetNowLevel( backupScopeLevel );
-}
-
-LexicalScopesImpl &GetLexicalScopes()
-{
-	static LexicalScopesImpl *pTemp = NULL;
-	if( !pTemp )
-	{
-		pTemp = (LexicalScopesImpl *)Smoothie::Temp::pLexicalScopes;
-	}
-	return *pTemp;
-}
Index: /trunk/abdev/BasicCompiler_Common/src/SmoothieImpl.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/src/SmoothieImpl.cpp	(revision 247)
+++ /trunk/abdev/BasicCompiler_Common/src/SmoothieImpl.cpp	(revision 248)
@@ -6,5 +6,3 @@
 #include <Class.h>
 #include <Procedure.h>
-#include <LexicalScopingImpl.h>
-
-CLexicalScopes *Smoothie::Temp::pLexicalScopes = new LexicalScopesImpl();
+#include <LexicalScope.h>
Index: /trunk/abdev/BasicCompiler_Common/src/Variable.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/src/Variable.cpp	(revision 247)
+++ /trunk/abdev/BasicCompiler_Common/src/Variable.cpp	(revision 248)
@@ -35,9 +35,10 @@
 		Variable &var = *(*this)[i];
 		if( var.bLiving											//現在のスコープで有効なもの
-			&& var.GetScopeLevel() == Smoothie::Temp::pLexicalScopes->GetNowLevel()	//現在のスコープと同一レベル
-			){
-				if( var.IsEqualSymbol( symbol ) ){
-					return true;
-				}
+			&& var.GetScopeLevel() == compiler.codeGenerator.lexicalScopes.GetNowLevel()	//現在のスコープと同一レベル
+			)
+		{
+			if( var.IsEqualSymbol( symbol ) ){
+				return true;
+			}
 		}
 	}
@@ -51,5 +52,5 @@
 		Variable &var = *(*this)[i];
 		if( var.bLiving											//現在のスコープで有効なもの
-			&& var.GetScopeLevel() <= Smoothie::Temp::pLexicalScopes->GetNowLevel()	//現在のスコープレベルを超さないもの（Returnによる解放処理中を考慮）
+			&& var.GetScopeLevel() <= compiler.codeGenerator.lexicalScopes.GetNowLevel()	//現在のスコープレベルを超さないもの（Returnによる解放処理中を考慮）
 			){
 				if( var.IsEqualSymbol( symbol ) ){
