Index: /BasicCompiler32/BasicCompiler.vcproj
===================================================================
--- /BasicCompiler32/BasicCompiler.vcproj	(revision 66)
+++ /BasicCompiler32/BasicCompiler.vcproj	(revision 67)
@@ -1927,4 +1927,8 @@
 			<File
 				RelativePath="..\BasicCompiler_Common\BasicCompiler.h"
+				>
+			</File>
+			<File
+				RelativePath="..\BasicCompiler_Common\BasicFixed.h"
 				>
 			</File>
Index: /BasicCompiler32/CParameter.cpp
===================================================================
--- /BasicCompiler32/CParameter.cpp	(revision 66)
+++ /BasicCompiler32/CParameter.cpp	(revision 67)
@@ -135,5 +135,5 @@
 
 	//push object_size
-	op_push_value(object_size);
+	op_push_V(object_size);
 
 	//call calloc
Index: /BasicCompiler32/Compile_Calc.cpp
===================================================================
--- /BasicCompiler32/Compile_Calc.cpp	(revision 66)
+++ /BasicCompiler32/Compile_Calc.cpp	(revision 67)
@@ -31,5 +31,5 @@
 
 		//push 0
-		op_push_value(0);
+		op_push_V(0);
 
 		//push eax
@@ -116,5 +116,5 @@
 
 			//push 0
-			op_push_value(0);
+			op_push_V(0);
 
 			//push eax
@@ -260,5 +260,5 @@
 
 			//push 0
-			op_push_value(0);
+			op_push_V(0);
 
 			//push eax
Index: /BasicCompiler32/Compile_CallProc.cpp
===================================================================
--- /BasicCompiler32/Compile_CallProc.cpp	(revision 66)
+++ /BasicCompiler32/Compile_CallProc.cpp	(revision 67)
@@ -256,5 +256,5 @@
 
 		//push object_size
-		op_push_value(object_size);
+		op_push_V(object_size);
 
 		//call calloc
Index: /BasicCompiler32/Compile_Set_Var.cpp
===================================================================
--- /BasicCompiler32/Compile_Set_Var.cpp	(revision 66)
+++ /BasicCompiler32/Compile_Set_Var.cpp	(revision 67)
@@ -610,5 +610,5 @@
 
 		//push 0
-		op_push_value(0);
+		op_push_V(0);
 
 		//push eax
Index: /BasicCompiler32/Compile_Statement.cpp
===================================================================
--- /BasicCompiler32/Compile_Statement.cpp	(revision 66)
+++ /BasicCompiler32/Compile_Statement.cpp	(revision 67)
@@ -146,5 +146,5 @@
 
 		//push 0
-		op_push_value(0);
+		op_push_V(0);
 
 		//fild dword ptr[esp]
@@ -180,5 +180,5 @@
 
 		//push 0
-		op_push_value(0);
+		op_push_V(0);
 
 		//fild dword ptr[esp]
@@ -400,5 +400,5 @@
 
 		//push 0
-		op_push_value(0);
+		op_push_V(0);
 
 		//fild dword ptr[esp]
@@ -434,5 +434,5 @@
 
 		//push 0
-		op_push_value(0);
+		op_push_V(0);
 
 		//fild dword ptr[esp]
@@ -731,5 +731,5 @@
 
 				//push 0
-				op_push_value(0);
+				op_push_V(0);
 
 				//fild dword ptr[esp]
@@ -772,5 +772,5 @@
 
 				//push 0
-				op_push_value(0);
+				op_push_V(0);
 
 				//fild dword ptr[esp]
Index: /BasicCompiler32/Compile_Var.cpp
===================================================================
--- /BasicCompiler32/Compile_Var.cpp	(revision 66)
+++ /BasicCompiler32/Compile_Var.cpp	(revision 67)
@@ -107,5 +107,5 @@
 
 	//push 0
-	op_push_value(0);
+	op_push_V(0);
 
 	for(i=i3-1;i>=0;i--){
@@ -1192,8 +1192,8 @@
 		else{
 			//push 0
-			op_push_value(0);
+			op_push_V(0);
 
 			//push VarSize
-			op_push_value(VarSize);
+			op_push_V(VarSize);
 
 			//mov eax,ebp
Index: /BasicCompiler32/MakePeHdr.cpp
===================================================================
--- /BasicCompiler32/MakePeHdr.cpp	(revision 66)
+++ /BasicCompiler32/MakePeHdr.cpp	(revision 67)
@@ -155,5 +155,5 @@
 	ProcPtrInfoNum=0;
 
-	//クラス名を取得（詳細情報はGetObjectClassInfoで取得）
+	//クラス名を取得（詳細情報はGetAllClassInfoで取得）
 	//   GetSubInfo関数の中で参照されるオブジェクト名を事前に取得する。
 	//     ※オブジェクトの内容までは取得しない
@@ -169,5 +169,5 @@
 
 	//クラス情報を取得（※注 - GetSubInfoの後に呼び出す）
-	pobj_DBClass->GetObjectClassInfo();
+	pobj_DBClass->GetAllClassInfo();
 
 	//コードと行番号の関係
Index: /BasicCompiler32/NumOpe.cpp
===================================================================
--- /BasicCompiler32/NumOpe.cpp	(revision 66)
+++ /BasicCompiler32/NumOpe.cpp	(revision 67)
@@ -359,4 +359,24 @@
 
 
+					// Nothing
+					if( lstrcmp( term, "Nothing" ) == 0 ){
+						type[sp] = DEF_OBJECT;
+						if( BaseType == DEF_OBJECT ){
+							index_stack[sp] = lpBaseIndex;
+						}
+						else{
+							index_stack[sp] = (LONG_PTR)pobj_DBClass->GetObjectClass();
+						}
+
+						bLiteralCalculation = 0;
+
+						//push 0
+						op_push_V( 0 );
+
+						sp++;
+						break;
+					}
+
+
 
 					RELATIVE_VAR RelativeVar;
@@ -521,8 +541,8 @@
 
 						//push HILONG(dbl)
-						op_push_value((long)*(long *)(((char *)(&i64data))+4));
+						op_push_V((long)*(long *)(((char *)(&i64data))+4));
 
 						//push LOLONG(dbl)
-						op_push_value(*(long *)(&i64data));
+						op_push_V(*(long *)(&i64data));
 					}
 					else if(type[sp]==DEF_SINGLE){
@@ -535,5 +555,5 @@
 
 						//push term
-						op_push_value(i3);
+						op_push_V(i3);
 					}
 					else{
@@ -541,5 +561,5 @@
 
 						//push term
-						op_push_value((long)i64data);
+						op_push_V((long)i64data);
 
 						if((long)i64data==0) index_stack[sp]=LITERAL_NULL;
@@ -693,8 +713,8 @@
 
 			//push HILONG(i64data)
-			op_push_value((long)*(long *)(((char *)(&i64data))+4));
+			op_push_V((long)*(long *)(((char *)(&i64data))+4));
 
 			//push LOLONG(i64data)
-			op_push_value(*(long *)(&i64data));
+			op_push_V(*(long *)(&i64data));
 		}
 		else if(i2==DEF_SINGLE){
@@ -708,5 +728,5 @@
 
 			//push flt
-			op_push_value(i3);
+			op_push_V(i3);
 		}
 		else{
@@ -719,5 +739,5 @@
 
 			//push term
-			op_push_value(i3);
+			op_push_V(i3);
 		}
 
Index: /BasicCompiler32/NumOpe_Arithmetic.cpp
===================================================================
--- /BasicCompiler32/NumOpe_Arithmetic.cpp	(revision 66)
+++ /BasicCompiler32/NumOpe_Arithmetic.cpp	(revision 67)
@@ -605,5 +605,5 @@
 
 		//push 0
-		op_push_value(0);
+		op_push_V(0);
 
 		//push eax
@@ -645,5 +645,5 @@
 
 		//push 0
-		op_push_value(0);
+		op_push_V(0);
 
 		//push eax
@@ -834,5 +834,5 @@
 
 		//push -1
-		op_push_value(-1);
+		op_push_V(-1);
 
 		//fild dword ptr[esp]
@@ -856,5 +856,5 @@
 
 		//push -1
-		op_push_value(-1);
+		op_push_V(-1);
 
 		//fild dword ptr[esp]
Index: /BasicCompiler32/NumOpe_TypeOperation.cpp
===================================================================
--- /BasicCompiler32/NumOpe_TypeOperation.cpp	(revision 66)
+++ /BasicCompiler32/NumOpe_TypeOperation.cpp	(revision 67)
@@ -32,5 +32,5 @@
 
 		//push 0
-		op_push_value(0);
+		op_push_V(0);
 
 		//push eax
Index: /BasicCompiler32/Opcode.h
===================================================================
--- /BasicCompiler32/Opcode.h	(revision 66)
+++ /BasicCompiler32/Opcode.h	(revision 67)
@@ -319,5 +319,5 @@
 
 void op_push(int reg);
-void op_push_value(long data);
+void op_push_V(long data);
 void op_pop(int reg);
 void op_add_esp(int num);
Index: /BasicCompiler32/OperatorProc.cpp
===================================================================
--- /BasicCompiler32/OperatorProc.cpp	(revision 66)
+++ /BasicCompiler32/OperatorProc.cpp	(revision 67)
@@ -125,5 +125,5 @@
 
 		//push object_size
-		op_push_value(object_size);
+		op_push_V(object_size);
 
 		//call calloc
Index: /BasicCompiler32/op32_main.cpp
===================================================================
--- /BasicCompiler32/op32_main.cpp	(revision 66)
+++ /BasicCompiler32/op32_main.cpp	(revision 67)
@@ -519,5 +519,5 @@
 	__op_format(0,(char)0x50,reg);
 }
-void op_push_value(long data){
+void op_push_V(long data){
 	//スタックにリテラル値をプッシュ
 	if(-128<=data&&data<=127){
Index: /BasicCompiler64/MakePeHdr.cpp
===================================================================
--- /BasicCompiler64/MakePeHdr.cpp	(revision 66)
+++ /BasicCompiler64/MakePeHdr.cpp	(revision 67)
@@ -141,5 +141,5 @@
 	ProcPtrInfoNum=0;
 
-	//クラス名を取得（詳細情報はGetObjectClassInfoで取得）
+	//クラス名を取得（詳細情報はGetAllClassInfoで取得）
 	//   GetSubInfo関数の中で参照されるオブジェクト名を事前に取得する。
 	//     ※オブジェクトの内容までは取得しない
@@ -155,5 +155,5 @@
 
 	//クラス情報を取得（※注 - GetSubInfoの後に呼び出す）
-	pobj_DBClass->GetObjectClassInfo();
+	pobj_DBClass->GetAllClassInfo();
 
 	//コードと行番号の関係
Index: /BasicCompiler64/NumOpe.cpp
===================================================================
--- /BasicCompiler64/NumOpe.cpp	(revision 66)
+++ /BasicCompiler64/NumOpe.cpp	(revision 67)
@@ -402,4 +402,30 @@
 
 
+					// Nothing
+					if( lstrcmp( term, "Nothing" ) == 0 ){
+						type[sp] = DEF_OBJECT;
+						if( BaseType == DEF_OBJECT ){
+							index_stack[sp] = lpBaseIndex;
+						}
+						else{
+							index_stack[sp] = (LONG_PTR)pobj_DBClass->GetObjectClass();
+						}
+
+						bLiteralCalculation = 0;
+
+						//xor reg,reg
+						op_zero_reg( UseReg );
+
+						if(UseReg==REG_R14){
+							//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+							pobj_sf->push(REG_R14);
+						}
+
+						pobj_reg->LockReg();
+						sp++;
+						break;
+					}
+
+
 					RELATIVE_VAR RelativeVar;
 					if(GetVarOffset(
Index: /BasicCompiler_Common/Class.cpp
===================================================================
--- /BasicCompiler_Common/Class.cpp	(revision 66)
+++ /BasicCompiler_Common/Class.cpp	(revision 67)
@@ -118,4 +118,5 @@
 		pobj_c=pobj_DBClass->Iterator_GetNext();
 
+		int i=0;
 		foreach( CMember *member, pobj_c->staticMembers ){
 			char temporary[VN_SIZE];
@@ -137,4 +138,5 @@
 				OpBuffer=(char *)HeapReAlloc(hHeap,0,OpBuffer,obp_AllocSize); //matea
 			}
+			i++;
 		}
 	}
@@ -671,6 +673,14 @@
 }
 
-CDBClass::CDBClass(){
-	memset(this,0,sizeof(CDBClass));
+CDBClass::CDBClass():
+	pStringClass( NULL ),
+	pObjectClass( NULL ),
+	pCompilingClass( NULL ),
+	pCompilingMethod( NULL ),
+	ppobj_IteClass( NULL ),
+	iIteMaxNum( 0 ),
+	iIteNextNum( 0 )
+{
+	memset( pobj_ClassHash, 0, MAX_CLASS_HASH * sizeof(CClass *) );
 }
 CDBClass::~CDBClass(){
@@ -731,4 +741,7 @@
 		//Stringクラス
 		pobj_StringClass=pobj_c;
+	}
+	if( lstrcmp( name, "Object" ) == 0 ){
+		pObjectClass = pobj_c;
 	}
 
@@ -1421,5 +1434,5 @@
 }
 
-void CDBClass::GetObjectClassInfo(void){
+void CDBClass::GetAllClassInfo(void){
 	//ループ継承チェック用のクラス
 	pobj_LoopRefCheck=new CLoopRefCheck();
@@ -1430,4 +1443,21 @@
 	delete pobj_LoopRefCheck;
 	pobj_LoopRefCheck=0;
+}
+
+CClass *CDBClass::GetStringClass() const
+{
+	if( !pStringClass ){
+		SetError();
+		return NULL;
+	}
+	return pStringClass;
+}
+CClass *CDBClass::GetObjectClass() const
+{
+	if( !pObjectClass ){
+		SetError();
+		return NULL;
+	}
+	return pObjectClass;
 }
 
Index: /BasicCompiler_Common/Class.h
===================================================================
--- /BasicCompiler_Common/Class.h	(revision 66)
+++ /BasicCompiler_Common/Class.h	(revision 67)
@@ -229,5 +229,14 @@
 	void InitNames(void);
 	void GetClass_recur(const char *lpszInheritsClass);
-	void GetObjectClassInfo(void);
+	void GetAllClassInfo(void);
+
+
+	/////////////////////////////
+	// 特殊クラス
+	/////////////////////////////
+	CClass *pStringClass;
+	CClass *pObjectClass;
+	CClass *GetStringClass() const;
+	CClass *GetObjectClass() const;
 
 
Index: /BasicCompiler_Common/Intermediate_Step1.cpp
===================================================================
--- /BasicCompiler_Common/Intermediate_Step1.cpp	(revision 66)
+++ /BasicCompiler_Common/Intermediate_Step1.cpp	(revision 67)
@@ -872,13 +872,13 @@
 				case 'n':
 				case 'N':
-					if(lstrcmpi(temporary+i3,"Not")==0){
+					if(lstrcmpi(temporary+i3,"New")==0){
+						i2=i3;
+						temporary[i2++]=1;
+						temporary[i2]=ESC_NEW;
+					}
+					else if(lstrcmpi(temporary+i3,"Not")==0){
 						i2=i3;
 						temporary[i2++]=1;
 						temporary[i2]=ESC_NOT;
-					}
-					else if(lstrcmpi(temporary+i3,"New")==0){
-						i2=i3;
-						temporary[i2++]=1;
-						temporary[i2]=ESC_NEW;
 					}
 					break;
Index: /BasicCompiler_Common/NumOpe_GetType.cpp
===================================================================
--- /BasicCompiler_Common/NumOpe_GetType.cpp	(revision 66)
+++ /BasicCompiler_Common/NumOpe_GetType.cpp	(revision 67)
@@ -492,4 +492,19 @@
 
 
+					// Nothing
+					if( lstrcmp( term, "Nothing" ) == 0 ){
+						type[sp] = DEF_OBJECT;
+						if( pBaseType && pBaseType->type == DEF_OBJECT ){
+							index_stack[sp] = pBaseType->u.lpIndex;
+						}
+						else{
+							index_stack[sp] = (LONG_PTR)pobj_DBClass->GetObjectClass();
+						}
+						bLiteralCalculation = 0;
+						sp++;
+						break;
+					}
+
+
 					i2=GetVarType(term,&index_stack[sp],0);
 					if(i2!=-1){
Index: /BasicCompiler_Common/Variable.cpp
===================================================================
--- /BasicCompiler_Common/Variable.cpp	(revision 66)
+++ /BasicCompiler_Common/Variable.cpp	(revision 67)
@@ -1029,5 +1029,5 @@
 		if(pTypeInfo->type==-1){
 			SetError(3,temporary,cp);
-			return 0;
+			pTypeInfo->type=DEF_LONG;
 		}
 
Index: /BasicCompiler_Common/preprocessor.cpp
===================================================================
--- /BasicCompiler_Common/preprocessor.cpp	(revision 66)
+++ /BasicCompiler_Common/preprocessor.cpp	(revision 67)
@@ -142,11 +142,17 @@
 CDefine *pobj_define;
 
-int Search_endif(char *buffer,int i){
+int Search_endif(char *buffer,int i, int *pLine = 0){
 	for(;;i++){
 		if(buffer[i]=='\0') break;
 
+		if( buffer[i] == '\n' ){
+			if( pLine ){
+				(*pLine)++;
+			}
+		}
+
 		if(buffer[i-1]=='\n'){
 			if(_memicmp(buffer+i,"#ifdef",6)==0||_memicmp(buffer+i,"#ifndef",7)==0){
-				i=Search_endif(buffer,i+6);
+				i=Search_endif(buffer,i+6, pLine);
 				if(buffer[i]=='\0') break;
 				continue;
@@ -229,5 +235,5 @@
 				if(i2==0||buffer[i2-1]=='\n'){
 					if(_memicmp(buffer+i2,"#ifdef",6)==0||_memicmp(buffer+i2,"#ifndef",7)==0){
-						i2=Search_endif(buffer,i2+6);
+						i2=Search_endif(buffer,i2+6, &i3 );
 						if(buffer[i2]=='\0') break;
 						continue;
@@ -256,5 +262,5 @@
 			if(i2==0||buffer[i2-1]=='\n'){
 				if(_memicmp(buffer+i2,"#ifdef",6)==0||_memicmp(buffer+i2,"#ifndef",7)==0){
-					i2=Search_endif(buffer,i2+6);
+					i2=Search_endif(buffer,i2+6, &i3 );
 					if(buffer[i2]=='\0') break;
 					continue;
