Index: /trunk/Include/Classes/ActiveBasic/Strings/SPrintF.ab
===================================================================
--- /trunk/Include/Classes/ActiveBasic/Strings/SPrintF.ab	(revision 385)
+++ /trunk/Include/Classes/ActiveBasic/Strings/SPrintF.ab	(revision 386)
@@ -1205,5 +1205,5 @@
 */
 Function SPrintf(format As String, params As *Object, n As SIZE_T) As String
-	Dim i = 0 As DWord
+	Dim i = 0 As SIZE_T
 	Dim paramsCount = 0 As SIZE_T
 	Dim fmt = StrPtr(format)
@@ -1211,5 +1211,5 @@
 	Do
 		Dim last = format.Length - (((fmt - StrPtr(format)) \ SizeOf (StrChar)) As LONG_PTR) As Long 'po
-		Dim pos = ActiveBasic.Strings.ChrFind(fmt, last, &h25 As StrChar) '&h25 = %
+		Dim pos = ActiveBasic.Strings.ChrFind(fmt, last, &h25 As StrChar) As Long '&h25 = %
 		If pos = -1 Then
 			s.Append(fmt, 0, last)
@@ -1270,5 +1270,5 @@
 				s.Append(FormatString(params[i] As String, precision, fieldWidth, flags))
 			Case &h63 'c
-				s.Append(FormatCharacter(params[i] As BoxedStrChar, precision, fieldWidth, flags))
+				s.Append(FormatCharacter(params[i] As BoxedStrChar, precision, fieldWidth, flags) As Char)
 '			Case &h6e 'n
 			Case &h25 '%
@@ -1299,11 +1299,7 @@
 	param4 As Object, param5 As Object, param6 As Object,
 	param7 As Object, param8 As Object, param9 As Object) As String
-#ifdef _WIN64
-	'コンパイラがどういうコードを吐くのかわからないので、安全策を取る。
-	Dim params[9] = [param0, param1, param2, param3, param4,
-		param5, param6, param7, param8, param9] As Object
-#else
+
 	Dim params = VarPtr(param0) As *Object
-#endif
+
 	SPrintf = ActiveBasic.Strings.Detail.SPrintf(format, params, 10)
 End Function
@@ -1321,10 +1317,7 @@
 	param4 As Object, param5 As Object, param6 As Object,
 	param7 As Object, param8 As Object) As String
-#ifdef _WIN64
-	Dim params[8] = [param0, param1, param2, param3, param4,
-		param5, param6, param7, param8] As Object
-#else
+
 	Dim params = VarPtr(param0) As *Object
-#endif
+
 	SPrintf = ActiveBasic.Strings.Detail.SPrintf(format, params, 9)
 End Function
@@ -1342,10 +1335,7 @@
 	param4 As Object, param5 As Object, param6 As Object,
 	param7 As Object) As String
-#ifdef _WIN64
-	Dim params[7] = [param0, param1, param2, param3, param4,
-		param5, param6, param7] As Object
-#else
+
 	Dim params = VarPtr(param0) As *Object
-#endif
+
 	SPrintf = ActiveBasic.Strings.Detail.SPrintf(format, params, 8)
 End Function
@@ -1362,10 +1352,7 @@
 	param1 As Object, param2 As Object, param3 As Object,
 	param4 As Object, param5 As Object, param6 As Object) As String
-#ifdef _WIN64
-	Dim params[6] = [param0, param1, param2, param3, param4,
-		param5, param6] As Object
-#else
+
 	Dim params = VarPtr(param0) As *Object
-#endif
+
 	SPrintf = ActiveBasic.Strings.Detail.SPrintf(format, params, 7)
 End Function
@@ -1382,10 +1369,7 @@
 	param1 As Object, param2 As Object, param3 As Object,
 	param4 As Object, param5 As Object) As String
-#ifdef _WIN64
-	Dim params[5] = [param0, param1, param2, param3, param4,
-		param5] As Object
-#else
+
 	Dim params = VarPtr(param0) As *Object
-#endif
+
 	SPrintf = ActiveBasic.Strings.Detail.SPrintf(format, params, 6)
 End Function
@@ -1402,9 +1386,7 @@
 	param1 As Object, param2 As Object, param3 As Object,
 	param4 As Object) As String
-#ifdef _WIN64
-	Dim params[4] = [param0, param1, param2, param3, param4] As Object
-#else
+
 	Dim params = VarPtr(param0) As *Object
-#endif
+
 	SPrintf = ActiveBasic.Strings.Detail.SPrintf(format, params, 5)
 End Function
@@ -1420,9 +1402,7 @@
 Function SPrintf(format As String, param0 As Object,
 	param1 As Object, param2 As Object, param3 As Object) As String
-#ifdef _WIN64
-	Dim params[3] = [param0, param1, param2, param3] As Object
-#else
+
 	Dim params = VarPtr(param0) As *Object
-#endif
+
 	SPrintf = ActiveBasic.Strings.Detail.SPrintf(format, params, 4)
 End Function
@@ -1438,9 +1418,7 @@
 Function SPrintf(format As String, param0 As Object,
 	param1 As Object, param2 As Object) As String
-#ifdef _WIN64
-	Dim params[2] = [param0, param1, param2] As Object
-#else
+
 	Dim params = VarPtr(param0) As *Object
-#endif
+
 	SPrintf = ActiveBasic.Strings.Detail.SPrintf(format, params, 3)
 End Function
@@ -1456,9 +1434,7 @@
 Function SPrintf(format As String, param0 As Object,
 	param1 As Object) As String
-#ifdef _WIN64
-	Dim params[1] = [param0, param1] As Object
-#else
+
 	Dim params = VarPtr(param0) As *Object
-#endif
+
 	SPrintf = ActiveBasic.Strings.Detail.SPrintf(format, params, 2)
 End Function
Index: /trunk/Include/Classes/System/Collections/ArrayList.ab
===================================================================
--- /trunk/Include/Classes/System/Collections/ArrayList.ab	(revision 385)
+++ /trunk/Include/Classes/System/Collections/ArrayList.ab	(revision 386)
@@ -7,5 +7,5 @@
 
 Class ArrayList
-	Implements IList /*, ICollection, IEnumerable, ICloneable*/
+	'Implements IList /*, ICollection, IEnumerable, ICloneable*/
 
 	pObject As *Object
@@ -76,9 +76,9 @@
 	End Function
 
-	/*Const*/ Override Function IsFixedSize() As Boolean
+	/*Const*/ Function IsFixedSize() As Boolean
 		Return False
 	End Function
 
-	/*Const*/ Override Function IsReadOnly() As Boolean
+	/*Const*/ Function IsReadOnly() As Boolean
 		Return False
 	End Function
@@ -219,5 +219,5 @@
 	End Function
 
-	/*Const*/ Override Function IndexOf(object As Object) As Long
+	/*Const*/ Function IndexOf(object As Object) As Long
 		Return IndexOf(object, 0, size)
 	End Function
@@ -238,5 +238,5 @@
 	End Function
 
-	Override Sub Insert(i As Long, object As Object)
+	Sub Insert(i As Long, object As Object)
 		SetLeastCapacity(size + 1)
 		memmove(VarPtr(pObject[i + 1]), VarPtr(pObject[i]), SizeOf (*Object) * (size - i))
@@ -261,5 +261,5 @@
 	End Function
 
-	Override Sub Remove(object As Object)
+	Sub Remove(object As Object)
 		Dim i = IndexOf(object)
 		If i > 0 Then
@@ -268,5 +268,5 @@
 	End Sub
 
-	Override Sub RemoveAt(i As Long)
+	Sub RemoveAt(i As Long)
 		RemoveRange(i, 1)
 	End Sub
@@ -307,5 +307,5 @@
 	End Sub
 
-	/*Override*/ Override Function ToString() As String
+	Override Function ToString() As String
 		Return "System.Collections.ArrayList"
 	End Function
Index: /trunk/Include/Classes/System/Collections/Generic/List.ab
===================================================================
--- /trunk/Include/Classes/System/Collections/Generic/List.ab	(revision 385)
+++ /trunk/Include/Classes/System/Collections/Generic/List.ab	(revision 386)
@@ -5,6 +5,9 @@
 
 Class List<T>
+	Implements IEnumerable, IEnumerator
 	items As *T
 	size As Long
+
+	currentIndexForEnumerator As Long
 
 	Sub Realloc( allocateSize As Long )
@@ -125,4 +128,49 @@
 		size--
 	End Sub
+
+	/*!
+	@brief	IEnumeratorインターフェイスを取得する
+	@author	Daisuke Yamamoto
+	@date	2007/11/19
+	@return	IEnumeratorインターフェイスが返る
+	*/
+	Function GetEnumerator() As IEnumerator
+		Return This
+	End Function
+
+	/*!
+	@brief	イテレータのカレントインデックスを増加させる
+	@author	Daisuke Yamamoto
+	@date	2007/11/19
+	@return	上限に達していなければTrueが、達していればFalseが返る
+	*/
+	Function MoveNext() As Boolean
+		If currentIndexForEnumerator >= size Then
+			' 上限に達した
+			Return False
+		End If
+
+		currentIndexForEnumerator ++
+		Return True
+	End Function
+
+	/*!
+	@brief	イテレータをリセットする
+	@author	Daisuke Yamamoto
+	@date	2007/11/19
+	*/
+	Sub Reset()
+		currentIndexForEnumerator = 0
+	End Sub
+
+	/*!
+	@brief	イテレータのカレントオブジェクトを取得する
+	@author	Daisuke Yamamoto
+	@date	2007/11/19
+	@return	カレントオブジェクトが返る
+	*/
+	Function Current() As Object
+		Return items[currentIndexForEnumerator] As Object
+	End Function
 End Class
 
Index: /trunk/Include/Classes/System/Collections/misc.ab
===================================================================
--- /trunk/Include/Classes/System/Collections/misc.ab	(revision 385)
+++ /trunk/Include/Classes/System/Collections/misc.ab	(revision 386)
@@ -49,5 +49,5 @@
 Interface IEnumerable
 	' Method
-'	Function GetEnumerator() As *IEnumerator
+	Function GetEnumerator() As IEnumerator
 End Interface
 
@@ -57,5 +57,5 @@
 	Sub Reset()
 	' Property
-	Function Current() As *Object
+	Function Current() As Object
 End Interface
 
Index: /trunk/Include/system/string.sbp
===================================================================
--- /trunk/Include/system/string.sbp	(revision 385)
+++ /trunk/Include/system/string.sbp	(revision 386)
@@ -9,5 +9,5 @@
 
 Function StrPtr(s As String) As *StrChar
-	If ActiveBasic.IsNothing(s) Then
+	If Not ActiveBasic.IsNothing(s) Then
 		StrPtr = s.StrPtr
 	End If
