Index: /trunk/ab5.0/abdev/compiler_x86/Compile_Func.cpp
===================================================================
--- /trunk/ab5.0/abdev/compiler_x86/Compile_Func.cpp	(revision 665)
+++ /trunk/ab5.0/abdev/compiler_x86/Compile_Func.cpp	(revision 666)
@@ -14,4 +14,5 @@
 	if( lstrcmpi( FuncName, "AddressOf" ) == 0 )		return FUNC_ADDRESSOF;
 	if( lstrcmpi( FuncName, "SizeOf" ) == 0 )			return FUNC_SIZEOF;
+	if( lstrcmpi( FuncName, "__ClassSizeOf" ) == 0 )			return FUNC_CLASS_SIZEOF;
 	if( lstrcmpi( FuncName, "VarPtr" ) == 0 )			return FUNC_VARPTR;
 	if( lstrcmpi( FuncName, "ObjPtr" ) == 0 )			return FUNC_OBJPTR;
@@ -524,5 +525,6 @@
 	}
 }
-void Opcode_Func_SizeOf( const std::string &typeName ){
+void Opcode_Func_SizeOf( const std::string &typeName )
+{
 	Type tempType;
 	if( !compiler.StringToType( typeName, tempType ) ){
@@ -531,4 +533,17 @@
 	}
 
+	int typeSize = tempType.GetSize();
+
+	//mov eax,size
+	compiler.codeGenerator.op_mov_RV( REG_EAX, typeSize );
+}
+void Opcode_Func_ClassSizeOf( const std::string &typeName )
+{
+	Type tempType;
+	if( !compiler.StringToType( typeName, tempType ) ){
+		compiler.errorMessenger.Output(3,typeName,cp);
+		return;
+	}
+
 	int typeSize = ( tempType.IsObject() ) ?
 		tempType.GetClass().GetSize() : tempType.GetSize();
@@ -752,4 +767,8 @@
 			resultType.SetBasicType( DEF_LONG );
 			break;
+		case FUNC_CLASS_SIZEOF:
+			if( isCallOn ) Opcode_Func_ClassSizeOf(Parameter);
+			resultType.SetBasicType( DEF_LONG );
+			break;
 		case FUNC_VARPTR:
 			Opcode_Func_VarPtr( Parameter, resultType, isCallOn );
Index: /trunk/ab5.0/abdev/compiler_x86/FunctionValue.h
===================================================================
--- /trunk/ab5.0/abdev/compiler_x86/FunctionValue.h	(revision 665)
+++ /trunk/ab5.0/abdev/compiler_x86/FunctionValue.h	(revision 666)
@@ -25,4 +25,5 @@
 #define FUNC_SYSTEM_GET_DEFAULT_CONSTRUCTOR		0x0629
 #define FUNC_SYSTEM_GET_DESTRUCTOR				0x062A
+#define FUNC_CLASS_SIZEOF	0x062B
 
 //ポインタ
