[Vm-dev] [commit] r2231 - iOS buildable stack VM for iPhone. Ensure ObjectiveC bridge has correct code for unsigned integer get logic.

commits at squeakvm.org commits at squeakvm.org
Fri Jul 9 03:40:43 UTC 2010


Author: johnmci
Date: 2010-07-08 20:40:43 -0700 (Thu, 08 Jul 2010)
New Revision: 2231

Modified:
   trunk/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m
   trunk/platforms/iOS/vm/OSX/sqSqueakOSXApplication+attributes.m
   trunk/platforms/iOS/vm/SqueakPureObjc-Info.plist
   trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/johnmci.mode1v3
   trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/johnmci.pbxuser
   trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/project.pbxproj
   trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/johnmci.mode1v3
   trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/johnmci.pbxuser
   trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/project.pbxproj
   trunk/platforms/iOS/vm/iPhone/iPhone.changes
   trunk/platforms/iOS/vm/iPhone/iPhone.image
   trunk/platforms/iOS/vm/src/vm/intplugins/ObjectiveCPlugin/ObjectiveCPlugin.c
Log:
iOS buildable stack VM for iPhone. Ensure ObjectiveC bridge has correct code for unsigned integer get logic. 

Modified: trunk/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m
===================================================================
--- trunk/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m	2010-07-09 03:40:43 UTC (rev 2231)
@@ -118,7 +118,7 @@
 #if (SQ_VI_BYTES_PER_WORD == 4)
 	NSPanel *panel;
 	if (sizeof(void*) == 8) {
-		panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa Squeak 64/32 bits 5.7b1 (19)",
+		panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa Squeak 64/32 bits 5.7b2 (20)",
 												 @"Only use this VM for testing, it lacks mac menu integration.",
 												 @"Dismiss",
 												 nil,
@@ -132,13 +132,13 @@
 #endif
 	NSPanel *panel;
 	if (sizeof(long) == 8) {
-		panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa Squeak 64/64 bits 5.7b1 (19)",
+		panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa Squeak 64/64 bits 5.7b2 (20)",
 									@"Only use this VM for testing, it lacks mac menu integration.",
 									@"Dismiss",
 									nil,
 									nil);
 	} else {
-		panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa Squeak 32/64 bits 5.7b1 (19)",
+		panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa Squeak 32/64 bits 5.7b2 (20)",
 							   @"Only use this VM for testing, it lacks mac menu integration.",
 							   @"Dismiss",
 							   nil,

Modified: trunk/platforms/iOS/vm/OSX/sqSqueakOSXApplication+attributes.m
===================================================================
--- trunk/platforms/iOS/vm/OSX/sqSqueakOSXApplication+attributes.m	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/OSX/sqSqueakOSXApplication+attributes.m	2010-07-09 03:40:43 UTC (rev 2231)
@@ -81,8 +81,14 @@
 		case 1006:  {/* vm build string also info.plist */
 #if (SQ_VI_BYTES_PER_WORD == 4)
 			
-			return "Mac Cocoa Cog 5.8b1 07-Jul-10 >529F6B5A-DC81-4C1F-81B6-3D99741B954A<";
+#if STACKVM
+			return "Mac Cocoa Cog 5.8b2 08-Jul-10 >7BCAB029-A835-4D12-946D-4AB7083D2955<";
+//			return "Mac Cocoa Cog 5.8b1 07-Jul-10 >529F6B5A-DC81-4C1F-81B6-3D99741B954A<";
+#else
+			return "Mac Cocoa 5.7b2 08-Jul-10 >7BCAB029-A835-4D12-946D-4AB7083D2955<";
 //			return "Mac Cocoa 5.7b1 15-Jun-10 >34286DE5-3BD3-40D8-9700-4C41C772B16B<";
+#endif
+//			return "Mac Cocoa 5.7b1 15-Jun-10 >34286DE5-3BD3-40D8-9700-4C41C772B16B<";
 //			return "Mac Cocoa 5.6b1 02-Mar-10 >9E99B1C2-0B6B-4944-8B6F-74030D14F3C6<";
 //			return "Mac Cocoa 5.5b1 16-Feb-10 >2EE2964B-462A-4F66-92AF-C810216EF798<";
 //			return "Mac Cocoa 5.4b2 24-Jan-10 >2EE2964B-462A-4F66-92AF-C810216EF798<";
@@ -94,7 +100,8 @@
 //			return "Mac Cocoa 5.1b1 25-Dec-09 >C0908D0B-4D97-47CA-9FAB-479AFC6BA978<";
 //			return "Mac Cocoa 5.0b9 02-Dec-09 >C8598ABA-DA73-4A71-836C-62C4369D5A0F<";
 #else
-			return "Mac Cocoa 5.7b1 64/64 bits 15-Jun-10 >34286DE5-3BD3-40D8-9700-4C41C772B16B<";
+			return "Mac Cocoa 5.7b2 64/64 bits 08-Jul-10 >7BCAB029-A835-4D12-946D-4AB7083D2955<";
+//			return "Mac Cocoa 5.7b1 64/64 bits 15-Jun-10 >34286DE5-3BD3-40D8-9700-4C41C772B16B<";
 //			return "Mac Cocoa 5.6b1 64/64 bits 02-Mar-10 >9E99B1C2-0B6B-4944-8B6F-74030D14F3C6<";
 //			return "Mac Cocoa 5.5b1 64/64 bits 16-Feb-10 >70984CDA-9482-4E7F-BCF0-08C635E0A7BF<";
 //			return "Mac Cocoa 5.4b2 64/64 bits 24-Jan-10 >70984CDA-9482-4E7F-BCF0-08C635E0A7BF<";

Modified: trunk/platforms/iOS/vm/SqueakPureObjc-Info.plist
===================================================================
--- trunk/platforms/iOS/vm/SqueakPureObjc-Info.plist	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/SqueakPureObjc-Info.plist	2010-07-09 03:40:43 UTC (rev 2231)
@@ -350,7 +350,7 @@
 	<key>CFBundleExecutable</key>
 	<string>${EXECUTABLE_NAME}</string>
 	<key>CFBundleGetInfoString</key>
-	<string>Squeak VM 5.7b1 http://www.squeak.org</string>
+	<string>Squeak VM 5.7b2 http://www.squeak.org</string>
 	<key>CFBundleIconFile</key>
 	<string>Squeak.icns</string>
 	<key>CFBundleIdentifier</key>
@@ -362,11 +362,11 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>5.7b1</string>
+	<string>5.7b2</string>
 	<key>CFBundleSignature</key>
 	<string>FAST</string>
 	<key>CFBundleVersion</key>
-	<string>19.0</string>
+	<string>20.0</string>
 	<key>LSBackgroundOnly</key>
 	<false/>
 	<key>LSMinimumSystemVersion</key>

Modified: trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/johnmci.mode1v3
===================================================================
--- trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/johnmci.mode1v3	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/johnmci.mode1v3	2010-07-09 03:40:43 UTC (rev 2231)
@@ -302,8 +302,6 @@
 			<key>Layout</key>
 			<array>
 				<dict>
-					<key>BecomeActive</key>
-					<true/>
 					<key>ContentConfiguration</key>
 					<dict>
 						<key>PBXBottomSmartGroupGIDs</key>
@@ -349,9 +347,13 @@
 								<string>94BCE7840DDDF61200F38F31</string>
 								<string>94BCE6880DDDECC200F38F31</string>
 								<string>9424FF580DDCB18C009912BF</string>
+								<string>9424FF590DDCB198009912BF</string>
+								<string>947E642610AA0E1100D3B69E</string>
+								<string>947E647610AA0FF200D3B69E</string>
 								<string>94E658DC0DDD03FE00358328</string>
 								<string>94E658DF0DDD03FE00358328</string>
 								<string>94E658E20DDD03FE00358328</string>
+								<string>94210B270E956AC200C1A314</string>
 								<string>29B97317FDCFA39411CA2CEA</string>
 								<string>29B97323FDCFA39411CA2CEA</string>
 								<string>19C28FACFE9D520D11CA2CBB</string>
@@ -362,14 +364,16 @@
 							<array>
 								<array>
 									<integer>25</integer>
-									<integer>24</integer>
+									<integer>23</integer>
 									<integer>21</integer>
+									<integer>20</integer>
+									<integer>3</integer>
 									<integer>2</integer>
 									<integer>0</integer>
 								</array>
 							</array>
 							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
-							<string>{{0, 0}, {443, 914}}</string>
+							<string>{{0, 310}, {443, 914}}</string>
 						</dict>
 						<key>PBXTopSmartGroupGIDs</key>
 						<array/>
@@ -390,7 +394,7 @@
 							<real>421</real>
 						</array>
 						<key>RubberWindowFrame</key>
-						<string>34 50 1646 973 0 0 1680 1028 </string>
+						<string>37 40 1646 973 0 0 1680 1028 </string>
 					</dict>
 					<key>Module</key>
 					<string>PBXSmartGroupTreeModule</string>
@@ -401,12 +405,14 @@
 					<key>Dock</key>
 					<array>
 						<dict>
+							<key>BecomeActive</key>
+							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
 								<string>1CE0B20306471E060097A5F4</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>interp.c</string>
+								<string>SqueakOSXAppDelegate.m</string>
 								<key>PBXSplitModuleInNavigatorKey</key>
 								<dict>
 									<key>Split0</key>
@@ -414,11 +420,11 @@
 										<key>PBXProjectModuleGUID</key>
 										<string>1CE0B20406471E060097A5F4</string>
 										<key>PBXProjectModuleLabel</key>
-										<string>interp.c</string>
+										<string>SqueakOSXAppDelegate.m</string>
 										<key>_historyCapacity</key>
 										<integer>0</integer>
 										<key>bookmark</key>
-										<string>941A33B911E64E4D004796BA</string>
+										<string>94C3AC4611E6CAC400DBE1E9</string>
 										<key>history</key>
 										<array>
 											<string>94BCE7390DDDEF8200F38F31</string>
@@ -626,10 +632,8 @@
 											<string>94E8EEEA11C94D5D0049D853</string>
 											<string>94783A3D11D135AD00AF11A9</string>
 											<string>94783A3E11D135AD00AF11A9</string>
-											<string>94D9B9E211D13CD100AB6CB4</string>
 											<string>94D9B9E311D13CD100AB6CB4</string>
 											<string>949DDD6D11D141080017F79B</string>
-											<string>94E745EC11E5346100E90B3A</string>
 											<string>94E745ED11E5346100E90B3A</string>
 											<string>94E745EE11E5346100E90B3A</string>
 											<string>94E745EF11E5346100E90B3A</string>
@@ -641,12 +645,17 @@
 											<string>949AD25011E5469C006D6BF4</string>
 											<string>949AD25111E5469C006D6BF4</string>
 											<string>94EF6D6611E55D1F003BA64D</string>
-											<string>94EF6D6C11E55E31003BA64D</string>
 											<string>94EF6D6D11E55E31003BA64D</string>
 											<string>94EF6E0511E5617E003BA64D</string>
 											<string>94EF6E0611E5617E003BA64D</string>
 											<string>94EF6ED111E56BDD003BA64D</string>
-											<string>941A33B811E64E4D004796BA</string>
+											<string>94C3AC2C11E6C77100DBE1E9</string>
+											<string>94C3AC3E11E6C9D000DBE1E9</string>
+											<string>94C3AC3F11E6C9D000DBE1E9</string>
+											<string>94C3AC4011E6C9D000DBE1E9</string>
+											<string>94C3AC4111E6C9D000DBE1E9</string>
+											<string>94C3AC4211E6C9D000DBE1E9</string>
+											<string>94C3AC3411E6C86D00DBE1E9</string>
 										</array>
 									</dict>
 									<key>SplitCount</key>
@@ -658,14 +667,14 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {1181, 653}}</string>
+								<string>{{0, 0}, {1181, 647}}</string>
 								<key>RubberWindowFrame</key>
-								<string>34 50 1646 973 0 0 1680 1028 </string>
+								<string>37 40 1646 973 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 							<key>Proportion</key>
-							<string>653pt</string>
+							<string>647pt</string>
 						</dict>
 						<dict>
 							<key>ContentConfiguration</key>
@@ -678,14 +687,14 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 658}, {1181, 274}}</string>
+								<string>{{0, 652}, {1181, 280}}</string>
 								<key>RubberWindowFrame</key>
-								<string>34 50 1646 973 0 0 1680 1028 </string>
+								<string>37 40 1646 973 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
 							<key>Proportion</key>
-							<string>274pt</string>
+							<string>280pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
@@ -704,9 +713,9 @@
 			</array>
 			<key>TableOfContents</key>
 			<array>
-				<string>941A33BA11E64E4D004796BA</string>
+				<string>94C3ABDF11E6C3BD00DBE1E9</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
-				<string>941A33BB11E64E4D004796BA</string>
+				<string>94C3ABE011E6C3BD00DBE1E9</string>
 				<string>1CE0B20306471E060097A5F4</string>
 				<string>1CE0B20506471E060097A5F4</string>
 			</array>
@@ -827,7 +836,7 @@
 	<key>StatusbarIsVisible</key>
 	<true/>
 	<key>TimeStamp</key>
-	<real>300305997.74636102</real>
+	<real>300337860.51410103</real>
 	<key>ToolbarDisplayMode</key>
 	<integer>1</integer>
 	<key>ToolbarIsVisible</key>
@@ -842,12 +851,16 @@
 	<integer>5</integer>
 	<key>WindowOrderList</key>
 	<array>
+		<string>1C530D57069F1CE1000CFCEE</string>
+		<string>94C3AC1311E6C5B500DBE1E9</string>
+		<string>94C3AC1411E6C5B500DBE1E9</string>
+		<string>1C78EAAD065D492600B07095</string>
 		<string>1CD10A99069EF8BA00B06720</string>
 		<string>9424FF6E0DDCB226009912BF</string>
 		<string>/Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/SqueakPureObjc.xcodeproj</string>
 	</array>
 	<key>WindowString</key>
-	<string>34 50 1646 973 0 0 1680 1028 </string>
+	<string>37 40 1646 973 0 0 1680 1028 </string>
 	<key>WindowToolsV3</key>
 	<array>
 		<dict>
@@ -868,7 +881,7 @@
 								<key>PBXProjectModuleGUID</key>
 								<string>1CD0528F0623707200166675</string>
 								<key>PBXProjectModuleLabel</key>
-								<string></string>
+								<string>sqUnixUUID.c</string>
 								<key>StatusBarVisibility</key>
 								<true/>
 							</dict>
@@ -877,7 +890,7 @@
 								<key>Frame</key>
 								<string>{{0, 0}, {1332, 643}}</string>
 								<key>RubberWindowFrame</key>
-								<string>348 109 1332 919 0 0 1680 1028 </string>
+								<string>175 60 1332 919 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
@@ -885,6 +898,8 @@
 							<string>643pt</string>
 						</dict>
 						<dict>
+							<key>BecomeActive</key>
+							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
@@ -901,7 +916,7 @@
 								<key>Frame</key>
 								<string>{{0, 648}, {1332, 230}}</string>
 								<key>RubberWindowFrame</key>
-								<string>348 109 1332 919 0 0 1680 1028 </string>
+								<string>175 60 1332 919 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXBuildResultsModule</string>
@@ -924,14 +939,14 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>9424FF6E0DDCB226009912BF</string>
-				<string>941A33BC11E64E4D004796BA</string>
+				<string>94C3ABE111E6C3BD00DBE1E9</string>
 				<string>1CD0528F0623707200166675</string>
 				<string>XCMainBuildResultsModuleGUID</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.buildV3</string>
 			<key>WindowString</key>
-			<string>348 109 1332 919 0 0 1680 1028 </string>
+			<string>175 60 1332 919 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
 			<string>9424FF6E0DDCB226009912BF</string>
 			<key>WindowToolIsVisible</key>
@@ -1044,13 +1059,13 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>1CD10A99069EF8BA00B06720</string>
-				<string>941A33BD11E64E4D004796BA</string>
+				<string>94C3AC0B11E6C5B500DBE1E9</string>
 				<string>1C162984064C10D400B95A72</string>
-				<string>941A33BE11E64E4D004796BA</string>
-				<string>941A33BF11E64E4D004796BA</string>
-				<string>941A33C011E64E4D004796BA</string>
-				<string>941A33C111E64E4D004796BA</string>
-				<string>941A33C211E64E4D004796BA</string>
+				<string>94C3AC0C11E6C5B500DBE1E9</string>
+				<string>94C3AC0D11E6C5B500DBE1E9</string>
+				<string>94C3AC0E11E6C5B500DBE1E9</string>
+				<string>94C3AC0F11E6C5B500DBE1E9</string>
+				<string>94C3AC1011E6C5B500DBE1E9</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.debugV3</string>
@@ -1077,12 +1092,14 @@
 							<key>Dock</key>
 							<array>
 								<dict>
+									<key>BecomeActive</key>
+									<true/>
 									<key>ContentConfiguration</key>
 									<dict>
 										<key>PBXProjectModuleGUID</key>
 										<string>1CDD528C0622207200134675</string>
 										<key>PBXProjectModuleLabel</key>
-										<string>&lt;No Editor&gt;</string>
+										<string>sqSqueakOSXApplication+attributes.m</string>
 										<key>StatusBarVisibility</key>
 										<true/>
 									</dict>
@@ -1091,7 +1108,7 @@
 										<key>Frame</key>
 										<string>{{0, 0}, {1417, 722}}</string>
 										<key>RubberWindowFrame</key>
-										<string>761 4 1417 1024 0 0 1680 1028 </string>
+										<string>263 4 1417 1024 0 0 1680 1028 </string>
 									</dict>
 									<key>Module</key>
 									<string>PBXNavigatorGroup</string>
@@ -1103,8 +1120,6 @@
 							<string>722pt</string>
 						</dict>
 						<dict>
-							<key>BecomeActive</key>
-							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
@@ -1117,7 +1132,7 @@
 								<key>Frame</key>
 								<string>{{0, 727}, {1417, 256}}</string>
 								<key>RubberWindowFrame</key>
-								<string>761 4 1417 1024 0 0 1680 1028 </string>
+								<string>263 4 1417 1024 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXProjectFindModule</string>
@@ -1140,17 +1155,17 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>1C530D57069F1CE1000CFCEE</string>
-				<string>94EF710511E57F11003BA64D</string>
-				<string>94EF710611E57F11003BA64D</string>
+				<string>94C3AC2211E6C72D00DBE1E9</string>
+				<string>94C3AC2311E6C72D00DBE1E9</string>
 				<string>1CDD528C0622207200134675</string>
 				<string>1CD0528E0623707200166675</string>
 			</array>
 			<key>WindowString</key>
-			<string>761 4 1417 1024 0 0 1680 1028 </string>
+			<string>263 4 1417 1024 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
 			<string>1C530D57069F1CE1000CFCEE</string>
 			<key>WindowToolIsVisible</key>
-			<true/>
+			<false/>
 		</dict>
 		<dict>
 			<key>Identifier</key>
@@ -1169,8 +1184,6 @@
 					<key>Dock</key>
 					<array>
 						<dict>
-							<key>BecomeActive</key>
-							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
@@ -1206,7 +1219,7 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>1C78EAAD065D492600B07095</string>
-				<string>94EF710B11E57F3C003BA64D</string>
+				<string>94C3AC1111E6C5B500DBE1E9</string>
 				<string>1C78EAAC065D492600B07095</string>
 			</array>
 			<key>ToolbarConfiguration</key>
@@ -1216,7 +1229,7 @@
 			<key>WindowToolGUID</key>
 			<string>1C78EAAD065D492600B07095</string>
 			<key>WindowToolIsVisible</key>
-			<true/>
+			<false/>
 		</dict>
 		<dict>
 			<key>FirstTimeWindowDisplayed</key>

Modified: trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/johnmci.pbxuser
===================================================================
--- trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/johnmci.pbxuser	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/johnmci.pbxuser	2010-07-09 03:40:43 UTC (rev 2231)
@@ -24,10 +24,10 @@
 	};
 	29B97313FDCFA39411CA2CEA /* Project object */ = {
 		activeArchitecturePreference = armv6;
-		activeBuildConfigurationName = Debug;
-		activeExecutable = 9424FF3E0DDC8654009912BF /* Squeak */;
-		activeSDKPreference = iphonesimulator3.2;
-		activeTarget = 1D6058900D05DD3D006BFB54 /* SqueakNoOGLIPhone */;
+		activeBuildConfigurationName = Distribution;
+		activeExecutable = 947E62FD10AA098300D3B69E /* SqueakPureObjc */;
+		activeSDKPreference = macosx10.6;
+		activeTarget = 947E626F10AA098300D3B69E /* SqueakPureObjc */;
 		addToTargets = (
 			1D6058900D05DD3D006BFB54 /* SqueakNoOGLIPhone */,
 		);
@@ -71,7 +71,6 @@
 			940CD113110E3E6500A9344A /* sqSqueakOSXDropAPI.m:53 */,
 			94C0D1AC112D5DAE00213581 /* sqSqueakScreenAPI.m:79 */,
 			941C24EF1198BBE3008BF398 /* sqSqueakScreenAndWindow.m:96 */,
-			94EECBD811C76107001AFA91 /* interp.c:24055 */,
 			94E8EF1211C950540049D853 /* sqSqueakOSXNSView.m:118 */,
 		);
 		codeSenseManager = 9424FF430DDC8673009912BF /* Code sense */;
@@ -249,8 +248,8 @@
 					PBXFileDataSource_Warnings_ColumnID,
 				);
 			};
-			PBXPerProjectTemplateStateSaveDate = 300305644;
-			PBXWorkspaceStateSaveDate = 300305644;
+			PBXPerProjectTemplateStateSaveDate = 300336056;
+			PBXWorkspaceStateSaveDate = 300336056;
 		};
 		perUserProjectItems = {
 			9402DC9C10CDB5F3005C2102 /* PBXTextBookmark */ = 9402DC9C10CDB5F3005C2102 /* PBXTextBookmark */;
@@ -261,8 +260,6 @@
 			941441FD10BC817D0088F8AC /* PBXTextBookmark */ = 941441FD10BC817D0088F8AC /* PBXTextBookmark */;
 			9414420110BC817D0088F8AC /* PBXTextBookmark */ = 9414420110BC817D0088F8AC /* PBXTextBookmark */;
 			9414425110BC8A620088F8AC /* PBXBookmark */ = 9414425110BC8A620088F8AC /* PBXBookmark */;
-			941A33B811E64E4D004796BA /* PBXTextBookmark */ = 941A33B811E64E4D004796BA /* PBXTextBookmark */;
-			941A33B911E64E4D004796BA /* PBXTextBookmark */ = 941A33B911E64E4D004796BA /* PBXTextBookmark */;
 			9421AB550FF1807D008F54E9 /* PBXTextBookmark */ = 9421AB550FF1807D008F54E9 /* PBXTextBookmark */;
 			9428BBAD10BB50E200DAD287 /* PBXTextBookmark */ = 9428BBAD10BB50E200DAD287 /* PBXTextBookmark */;
 			9428BC5510BB74BF00DAD287 /* PBXTextBookmark */ = 9428BC5510BB74BF00DAD287 /* PBXTextBookmark */;
@@ -383,6 +380,14 @@
 			94C3696410AFB7550041953A /* PBXTextBookmark */ = 94C3696410AFB7550041953A /* PBXTextBookmark */;
 			94C3698D10B082DF0041953A /* PBXTextBookmark */ = 94C3698D10B082DF0041953A /* PBXTextBookmark */;
 			94C3699110B082DF0041953A /* PBXTextBookmark */ = 94C3699110B082DF0041953A /* PBXTextBookmark */;
+			94C3AC2C11E6C77100DBE1E9 /* PBXTextBookmark */ = 94C3AC2C11E6C77100DBE1E9 /* PBXTextBookmark */;
+			94C3AC3411E6C86D00DBE1E9 /* PBXTextBookmark */ = 94C3AC3411E6C86D00DBE1E9 /* PBXTextBookmark */;
+			94C3AC3E11E6C9D000DBE1E9 /* PBXTextBookmark */ = 94C3AC3E11E6C9D000DBE1E9 /* PBXTextBookmark */;
+			94C3AC3F11E6C9D000DBE1E9 /* PBXTextBookmark */ = 94C3AC3F11E6C9D000DBE1E9 /* PBXTextBookmark */;
+			94C3AC4011E6C9D000DBE1E9 /* PlistBookmark */ = 94C3AC4011E6C9D000DBE1E9 /* PlistBookmark */;
+			94C3AC4111E6C9D000DBE1E9 /* PBXTextBookmark */ = 94C3AC4111E6C9D000DBE1E9 /* PBXTextBookmark */;
+			94C3AC4211E6C9D000DBE1E9 /* PBXTextBookmark */ = 94C3AC4211E6C9D000DBE1E9 /* PBXTextBookmark */;
+			94C3AC4611E6CAC400DBE1E9 /* PBXTextBookmark */ = 94C3AC4611E6CAC400DBE1E9 /* PBXTextBookmark */;
 			94C4B83610C0708F00CD4F90 /* PBXTextBookmark */ = 94C4B83610C0708F00CD4F90 /* PBXTextBookmark */;
 			94C887D410ADCC0D007CB39E /* PBXTextBookmark */ = 94C887D410ADCC0D007CB39E /* PBXTextBookmark */;
 			94C888B710ADE75B007CB39E /* PBXTextBookmark */ = 94C888B710ADE75B007CB39E /* PBXTextBookmark */;
@@ -435,7 +440,6 @@
 			94D7403A10B5FDDB00F8C034 /* PBXTextBookmark */ = 94D7403A10B5FDDB00F8C034 /* PBXTextBookmark */;
 			94D7403C10B5FDDB00F8C034 /* PBXTextBookmark */ = 94D7403C10B5FDDB00F8C034 /* PBXTextBookmark */;
 			94D740B210B6242000F8C034 /* PBXTextBookmark */ = 94D740B210B6242000F8C034 /* PBXTextBookmark */;
-			94D9B9E211D13CD100AB6CB4 /* PlistBookmark */ = 94D9B9E211D13CD100AB6CB4 /* PlistBookmark */;
 			94D9B9E311D13CD100AB6CB4 /* PBXTextBookmark */ = 94D9B9E311D13CD100AB6CB4 /* PBXTextBookmark */;
 			94E297D10DECA72F009CF73A /* PBXTextBookmark */ = 94E297D10DECA72F009CF73A /* PBXTextBookmark */;
 			94E297D30DECA72F009CF73A /* PBXTextBookmark */ = 94E297D30DECA72F009CF73A /* PBXTextBookmark */;
@@ -449,7 +453,6 @@
 			94E584AE10BF6EE30073FD63 /* PBXTextBookmark */ = 94E584AE10BF6EE30073FD63 /* PBXTextBookmark */;
 			94E584FF10BF79AB0073FD63 /* PBXTextBookmark */ = 94E584FF10BF79AB0073FD63 /* PBXTextBookmark */;
 			94E5850010BF79AB0073FD63 /* PBXTextBookmark */ = 94E5850010BF79AB0073FD63 /* PBXTextBookmark */;
-			94E745EC11E5346100E90B3A /* PBXTextBookmark */ = 94E745EC11E5346100E90B3A /* PBXTextBookmark */;
 			94E745ED11E5346100E90B3A /* PBXTextBookmark */ = 94E745ED11E5346100E90B3A /* PBXTextBookmark */;
 			94E745EE11E5346100E90B3A /* PBXTextBookmark */ = 94E745EE11E5346100E90B3A /* PBXTextBookmark */;
 			94E745EF11E5346100E90B3A /* PBXTextBookmark */ = 94E745EF11E5346100E90B3A /* PBXTextBookmark */;
@@ -459,7 +462,6 @@
 			94E8EEEA11C94D5D0049D853 /* PBXTextBookmark */ = 94E8EEEA11C94D5D0049D853 /* PBXTextBookmark */;
 			94ED7EFA0E6C2ABE00F4DD03 /* PBXTextBookmark */ = 94ED7EFA0E6C2ABE00F4DD03 /* PBXTextBookmark */;
 			94EF6D6611E55D1F003BA64D /* PBXTextBookmark */ = 94EF6D6611E55D1F003BA64D /* PBXTextBookmark */;
-			94EF6D6C11E55E31003BA64D /* PBXTextBookmark */ = 94EF6D6C11E55E31003BA64D /* PBXTextBookmark */;
 			94EF6D6D11E55E31003BA64D /* PBXTextBookmark */ = 94EF6D6D11E55E31003BA64D /* PBXTextBookmark */;
 			94EF6E0511E5617E003BA64D /* PBXTextBookmark */ = 94EF6E0511E5617E003BA64D /* PBXTextBookmark */;
 			94EF6E0611E5617E003BA64D /* PBXTextBookmark */ = 94EF6E0611E5617E003BA64D /* PBXTextBookmark */;
@@ -661,7 +663,8 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 529;
-		modificationTime = 300305989.249983;
+		location = Squeak;
+		modificationTime = 300336560.295852;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -677,7 +680,8 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 53;
-		modificationTime = 300305989.249927;
+		location = Squeak;
+		modificationTime = 300336560.317613;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -772,26 +776,6 @@
 			sepNavVisRange = "{2526, 1527}";
 		};
 	};
-	941A33B811E64E4D004796BA /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 94E658E00DDD03FE00358328 /* interp.c */;
-		name = "interp.c: 18522";
-		rLen = 437;
-		rLoc = 592914;
-		rType = 0;
-		vrLen = 1360;
-		vrLoc = 592037;
-	};
-	941A33B911E64E4D004796BA /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 94E658E00DDD03FE00358328 /* interp.c */;
-		name = "interp.c: 18522";
-		rLen = 437;
-		rLoc = 592914;
-		rType = 0;
-		vrLen = 1360;
-		vrLoc = 592037;
-	};
 	941C24EF1198BBE3008BF398 /* sqSqueakScreenAndWindow.m:96 */ = {
 		isa = PBXFileBreakpoint;
 		actions = (
@@ -806,7 +790,7 @@
 		ignoreCount = 0;
 		lineNumber = 96;
 		location = Squeak;
-		modificationTime = 300245443.240212;
+		modificationTime = 300336544.309163;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -817,9 +801,9 @@
 	};
 	94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1368, 25974}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 27144}}";
 			sepNavSelRange = "{190, 35}";
-			sepNavVisRange = "{0, 1130}";
+			sepNavVisRange = "{0, 1354}";
 			sepNavWindowFrame = "{{50, 470}, {750, 558}}";
 		};
 	};
@@ -1207,7 +1191,7 @@
 		ignoreCount = 0;
 		lineNumber = 59;
 		location = Squeak;
-		modificationTime = 300245443.2392541;
+		modificationTime = 300336544.308801;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -1225,7 +1209,7 @@
 		ignoreCount = 0;
 		lineNumber = 218;
 		location = Squeak;
-		modificationTime = 300245443.239291;
+		modificationTime = 300336544.308814;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -1243,7 +1227,7 @@
 		ignoreCount = 0;
 		lineNumber = 179;
 		location = Squeak;
-		modificationTime = 300245443.239316;
+		modificationTime = 300336544.308827;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -1261,7 +1245,7 @@
 		ignoreCount = 0;
 		lineNumber = 204;
 		location = Squeak;
-		modificationTime = 300245443.2393581;
+		modificationTime = 300336544.308838;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -2006,7 +1990,7 @@
 		ignoreCount = 0;
 		lineNumber = 101;
 		location = Squeak;
-		modificationTime = 300305650.442468;
+		modificationTime = 300336559.96525;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2023,7 +2007,8 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 69;
-		modificationTime = 300305989.249751;
+		location = Squeak;
+		modificationTime = 300336560.014367;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2040,7 +2025,8 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 75;
-		modificationTime = 300305989.249909;
+		location = Squeak;
+		modificationTime = 300336560.042049;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2073,7 +2059,7 @@
 		ignoreCount = 0;
 		lineNumber = 37;
 		location = Squeak;
-		modificationTime = 300305650.631059;
+		modificationTime = 300336560.086808;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2090,7 +2076,7 @@
 		ignoreCount = 0;
 		lineNumber = 45;
 		location = Squeak;
-		modificationTime = 300305650.683134;
+		modificationTime = 300336560.108343;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2107,7 +2093,7 @@
 		ignoreCount = 0;
 		lineNumber = 50;
 		location = Squeak;
-		modificationTime = 300305650.740088;
+		modificationTime = 300336560.1551;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2124,7 +2110,7 @@
 		ignoreCount = 0;
 		lineNumber = 72;
 		location = Squeak;
-		modificationTime = 300305650.776172;
+		modificationTime = 300336560.178431;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2141,7 +2127,7 @@
 		ignoreCount = 0;
 		lineNumber = 88;
 		location = Squeak;
-		modificationTime = 300305650.82773;
+		modificationTime = 300336560.228956;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2185,10 +2171,9 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 31;
-		location = Squeak;
-		modificationTime = 300305650.871168;
+		modificationTime = 300336544.309071;
 		originalNumberOfMultipleMatches = 1;
-		state = 1;
+		state = 0;
 	};
 	9458528110F045FC001401E7 /* sqSqueakIPhoneClipboardAPI.m:24 */ = {
 		isa = PBXFileBreakpoint;
@@ -2202,10 +2187,9 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 24;
-		location = Squeak;
-		modificationTime = 300305650.92339;
+		modificationTime = 300336544.309087;
 		originalNumberOfMultipleMatches = 1;
-		state = 1;
+		state = 0;
 	};
 	9458528310F045FD001401E7 /* sqSqueakIPhoneClipboardAPI.m:17 */ = {
 		isa = PBXFileBreakpoint;
@@ -2219,10 +2203,9 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 17;
-		location = Squeak;
-		modificationTime = 300305650.971901;
+		modificationTime = 300336544.309098;
 		originalNumberOfMultipleMatches = 1;
-		state = 1;
+		state = 0;
 	};
 	9459E7C510C047DD001D0053 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
@@ -2272,7 +2255,7 @@
 		ignoreCount = 0;
 		lineNumber = 117;
 		location = Squeak;
-		modificationTime = 300245443.239188;
+		modificationTime = 300336544.308779;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -2290,7 +2273,7 @@
 		ignoreCount = 0;
 		lineNumber = 101;
 		location = Squeak;
-		modificationTime = 300245443.239212;
+		modificationTime = 300336544.308791;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -2551,7 +2534,8 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 79;
-		modificationTime = 300305989.250078;
+		location = Squeak;
+		modificationTime = 300336559.808386;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2627,7 +2611,8 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 218;
-		modificationTime = 300305989.249855;
+		location = Squeak;
+		modificationTime = 300336559.830957;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2786,7 +2771,8 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 257;
-		modificationTime = 300305989.249041;
+		location = Squeak;
+		modificationTime = 300336559.873791;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2803,7 +2789,8 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 262;
-		modificationTime = 300305989.249283;
+		location = Squeak;
+		modificationTime = 300336559.895812;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2821,7 +2808,7 @@
 		ignoreCount = 0;
 		lineNumber = 117;
 		location = Squeak;
-		modificationTime = 300245443.239696;
+		modificationTime = 300336544.308952;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -3109,6 +3096,19 @@
 		autoAttachOnCrash = 1;
 		breakpointsEnabled = 1;
 		configStateDict = {
+			"PBXLSLaunchAction-0" = {
+				PBXLSLaunchAction = 0;
+				PBXLSLaunchStyle = 4;
+				class = XCIndigoRunLaunchConfig;
+				commandLineArgs = (
+				);
+				displayName = "iPhone Simulator runner";
+				environment = {
+				};
+				identifier = com.apple.Xcode.launch.iPhoneSimulatorRunConfig;
+				remoteHostInfo = "";
+				startActionInfo = "";
+			};
 		};
 		customDataFormattersEnabled = 1;
 		dataTipCustomDataFormattersEnabled = 1;
@@ -3169,6 +3169,7 @@
 		showTypeColumn = 0;
 		sourceDirectories = (
 		);
+		startupPath = "<<ProductDirectory>>";
 		variableFormatDictionary = {
 			$cs = 1;
 			$ds = 1;
@@ -3279,9 +3280,9 @@
 	};
 	947E647A10AA100900D3B69E /* SqueakOSXAppDelegate.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1533, 2470}}";
-			sepNavSelRange = "{4386, 0}";
-			sepNavVisRange = "{4144, 584}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 2509}}";
+			sepNavSelRange = "{4892, 0}";
+			sepNavVisRange = "{3633, 1626}";
 			sepNavWindowFrame = "{{15, 4}, {1426, 1019}}";
 		};
 	};
@@ -3682,7 +3683,7 @@
 		ignoreCount = 0;
 		lineNumber = 235;
 		location = Squeak;
-		modificationTime = 300305650.306065;
+		modificationTime = 300336559.942593;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -3700,7 +3701,7 @@
 		ignoreCount = 0;
 		lineNumber = 352;
 		location = Squeak;
-		modificationTime = 300245443.240085;
+		modificationTime = 300336544.309114;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -3904,7 +3905,7 @@
 		ignoreCount = 0;
 		lineNumber = 1429;
 		location = "Squeak VM Opt";
-		modificationTime = 300245443.239131;
+		modificationTime = 300336544.308759;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -4215,16 +4216,16 @@
 	};
 	94BCAD1B10AB942300F87527 /* sqSqueakOSXApplication+attributes.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {838, 749}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 615}}";
 			sepNavSelRange = "{109, 1692}";
 			sepNavVisRange = "{0, 1897}";
 		};
 	};
 	94BCAD1C10AB942300F87527 /* sqSqueakOSXApplication+attributes.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1132, 1560}}";
-			sepNavSelRange = "{2924, 9}";
-			sepNavVisRange = "{2000, 2330}";
+			sepNavIntBoundsRect = "{{0, 0}, {1368, 1729}}";
+			sepNavSelRange = "{3086, 0}";
+			sepNavVisRange = "{2741, 3090}";
 			sepNavWindowFrame = "{{15, 45}, {1017, 978}}";
 		};
 	};
@@ -4351,8 +4352,8 @@
 	};
 	94BCE7870DDDF61200F38F31 /* sqUnixUUID.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1132, 626}}";
-			sepNavSelRange = "{0, 54}";
+			sepNavIntBoundsRect = "{{0, 0}, {1283, 611}}";
+			sepNavSelRange = "{20, 18}";
 			sepNavVisRange = "{0, 275}";
 		};
 	};
@@ -4415,7 +4416,7 @@
 		ignoreCount = 0;
 		lineNumber = 79;
 		location = Squeak;
-		modificationTime = 300245443.240191;
+		modificationTime = 300336544.309149;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -4734,6 +4735,88 @@
 			sepNavWindowFrame = "{{15, 55}, {1438, 968}}";
 		};
 	};
+	94C3AC2C11E6C77100DBE1E9 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94E658E00DDD03FE00358328 /* interp.c */;
+		name = "interp.c: 18521";
+		rLen = 437;
+		rLoc = 592914;
+		rType = 0;
+		vrLen = 1884;
+		vrLoc = 751868;
+	};
+	94C3AC3411E6C86D00DBE1E9 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 947E647A10AA100900D3B69E /* SqueakOSXAppDelegate.m */;
+		name = "SqueakOSXAppDelegate.m: 121";
+		rLen = 3;
+		rLoc = 4542;
+		rType = 0;
+		vrLen = 1667;
+		vrLoc = 3592;
+	};
+	94C3AC3E11E6C9D000DBE1E9 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94BCE7870DDDF61200F38F31 /* sqUnixUUID.c */;
+		name = "sqUnixUUID.c: 2";
+		rLen = 18;
+		rLoc = 20;
+		rType = 0;
+		vrLen = 275;
+		vrLoc = 0;
+	};
+	94C3AC3F11E6C9D000DBE1E9 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */;
+		name = "ObjectiveCPlugin.c: 10";
+		rLen = 35;
+		rLoc = 190;
+		rType = 0;
+		vrLen = 1354;
+		vrLoc = 0;
+	};
+	94C3AC4011E6C9D000DBE1E9 /* PlistBookmark */ = {
+		isa = PlistBookmark;
+		fRef = 947E5F9F10A9FFA000D3B69E /* SqueakPureObjc-Info.plist */;
+		fallbackIsa = PBXBookmark;
+		isK = 0;
+		kPath = (
+			LSBackgroundOnly,
+		);
+		name = "/Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/SqueakPureObjc-Info.plist";
+		rLen = 0;
+		rLoc = 9223372036854775807;
+	};
+	94C3AC4111E6C9D000DBE1E9 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94BCAD1B10AB942300F87527 /* sqSqueakOSXApplication+attributes.h */;
+		name = "sqSqueakOSXApplication+attributes.h: 6";
+		rLen = 1692;
+		rLoc = 109;
+		rType = 0;
+		vrLen = 1897;
+		vrLoc = 0;
+	};
+	94C3AC4211E6C9D000DBE1E9 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94BCAD1C10AB942300F87527 /* sqSqueakOSXApplication+attributes.m */;
+		name = "sqSqueakOSXApplication+attributes.m: 82";
+		rLen = 9;
+		rLoc = 2924;
+		rType = 0;
+		vrLen = 1992;
+		vrLoc = 2383;
+	};
+	94C3AC4611E6CAC400DBE1E9 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 947E647A10AA100900D3B69E /* SqueakOSXAppDelegate.m */;
+		name = "SqueakOSXAppDelegate.m: 135";
+		rLen = 0;
+		rLoc = 4892;
+		rType = 0;
+		vrLen = 1626;
+		vrLoc = 3633;
+	};
 	94C4B80F10C06C4700CD4F90 /* configx.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {994, 799}}";
@@ -5258,7 +5341,7 @@
 		ignoreCount = 0;
 		lineNumber = 465;
 		location = Squeak;
-		modificationTime = 300245443.238803;
+		modificationTime = 300336544.308288;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -5276,7 +5359,7 @@
 		ignoreCount = 0;
 		lineNumber = 461;
 		location = Squeak;
-		modificationTime = 300245443.238912;
+		modificationTime = 300336544.308692;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -5294,7 +5377,7 @@
 		ignoreCount = 0;
 		lineNumber = 449;
 		location = Squeak;
-		modificationTime = 300245443.238955;
+		modificationTime = 300336544.308707;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -5312,7 +5395,7 @@
 		ignoreCount = 0;
 		lineNumber = 437;
 		location = Squeak;
-		modificationTime = 300245443.239016;
+		modificationTime = 300336544.308721;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -5330,7 +5413,7 @@
 		ignoreCount = 0;
 		lineNumber = 445;
 		location = Squeak;
-		modificationTime = 300245443.239063;
+		modificationTime = 300336544.308735;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -5348,7 +5431,7 @@
 		ignoreCount = 0;
 		lineNumber = 474;
 		location = Squeak;
-		modificationTime = 300245443.239098;
+		modificationTime = 300336544.308745;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -5718,18 +5801,6 @@
 		path = /Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/mman.h;
 		sourceTree = "<absolute>";
 	};
-	94D9B9E211D13CD100AB6CB4 /* PlistBookmark */ = {
-		isa = PlistBookmark;
-		fRef = 947E5F9F10A9FFA000D3B69E /* SqueakPureObjc-Info.plist */;
-		fallbackIsa = PBXBookmark;
-		isK = 0;
-		kPath = (
-			LSBackgroundOnly,
-		);
-		name = "/Volumes/px2/business/SqueakiPhone/SqueakObjCBasedForOSXAndIPhone/SqueakNoOGLIPhoneOSX/platforms/iOS/vm/SqueakPureObjc-Info.plist";
-		rLen = 0;
-		rLoc = 9223372036854775808;
-	};
 	94D9B9E311D13CD100AB6CB4 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 9452D5DE0E044A9D000AD792 /* sqSqueakFileDirectoryInterface.m */;
@@ -5899,7 +5970,8 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 326;
-		modificationTime = 300305989.24995;
+		location = Squeak;
+		modificationTime = 300336559.75768;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -5949,9 +6021,9 @@
 	};
 	94E658E00DDD03FE00358328 /* interp.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {3694, 358722}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 359333}}";
 			sepNavSelRange = "{592914, 437}";
-			sepNavVisRange = "{592037, 1360}";
+			sepNavVisRange = "{751868, 1884}";
 			sepNavWindowFrame = "{{38, 34}, {1438, 968}}";
 		};
 	};
@@ -6678,16 +6750,6 @@
 			sepNavVisRange = "{2296, 1397}";
 		};
 	};
-	94E745EC11E5346100E90B3A /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 94BCAD1C10AB942300F87527 /* sqSqueakOSXApplication+attributes.m */;
-		name = "sqSqueakOSXApplication+attributes.m: 79";
-		rLen = 9;
-		rLoc = 2924;
-		rType = 0;
-		vrLen = 2330;
-		vrLoc = 2000;
-	};
 	94E745ED11E5346100E90B3A /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94BCAE6710ACA10100F87527 /* sqSqueakOSXInfoPlistInterface.h */;
@@ -6778,7 +6840,8 @@
 		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 118;
-		modificationTime = 300305989.250032;
+		location = Squeak;
+		modificationTime = 300336560.393406;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -6799,23 +6862,6 @@
 		path = "/Users/johnmci/Work In Progress/smalltalk/CocoaSqueakSource/CocoaSqueak/Document.m";
 		sourceTree = "<absolute>";
 	};
-	94EECBD811C76107001AFA91 /* interp.c:24055 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94E658E00DDD03FE00358328 /* interp.c */;
-		functionName = "sweepPhase()";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 24055;
-		modificationTime = 300305989.249568;
-		originalNumberOfMultipleMatches = 1;
-		state = 1;
-	};
 	94EF6D6611E55D1F003BA64D /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 9424FF660DDCB1EF009912BF /* sqConfig.h */;
@@ -6826,16 +6872,6 @@
 		vrLen = 302;
 		vrLoc = 0;
 	};
-	94EF6D6C11E55E31003BA64D /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 94BCE7870DDDF61200F38F31 /* sqUnixUUID.c */;
-		name = "sqUnixUUID.c: 1";
-		rLen = 54;
-		rLoc = 0;
-		rType = 0;
-		vrLen = 275;
-		vrLoc = 0;
-	};
 	94EF6D6D11E55E31003BA64D /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94EF6D6E11E55E31003BA64D /* sqUnixSocket.c */;
@@ -6997,7 +7033,7 @@
 		ignoreCount = 0;
 		lineNumber = 432;
 		location = Squeak;
-		modificationTime = 300245443.239421;
+		modificationTime = 300336544.308846;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -7015,7 +7051,7 @@
 		ignoreCount = 0;
 		lineNumber = 453;
 		location = Squeak;
-		modificationTime = 300245443.239444;
+		modificationTime = 300336544.308857;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
@@ -7033,7 +7069,7 @@
 		ignoreCount = 0;
 		lineNumber = 457;
 		location = Squeak;
-		modificationTime = 300245443.239485;
+		modificationTime = 300336544.308869;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};

Modified: trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/project.pbxproj
===================================================================
--- trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/project.pbxproj	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/SqueakPureObjc.xcodeproj/project.pbxproj	2010-07-09 03:40:43 UTC (rev 2231)
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 45;
+	objectVersion = 46;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -1991,7 +1991,7 @@
 		29B97313FDCFA39411CA2CEA /* Project object */ = {
 			isa = PBXProject;
 			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SqueakPureObjc" */;
-			compatibilityVersion = "Xcode 3.1";
+			compatibilityVersion = "Xcode 3.2";
 			hasScannedForEncodings = 1;
 			mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
 			projectDirPath = "";
@@ -2652,9 +2652,10 @@
 				GCC_PREPROCESSOR_DEFINITIONS = SQUEAK_BUILTIN_PLUGIN;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = /usr/include/uuid;
 				PREBINDING = NO;
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "4D1323CE-3998-4FF8-AB83-49838083E965";
-				SDKROOT = iphoneos2.0;
+				SDKROOT = macosx10.6;
 			};
 			name = Distribution;
 		};

Modified: trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/johnmci.mode1v3
===================================================================
--- trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/johnmci.mode1v3	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/johnmci.mode1v3	2010-07-09 03:40:43 UTC (rev 2231)
@@ -270,7 +270,48 @@
 		</dict>
 	</array>
 	<key>OpenEditors</key>
-	<array/>
+	<array>
+		<dict>
+			<key>Content</key>
+			<dict>
+				<key>PBXProjectModuleGUID</key>
+				<string>9475A86011E6B7170010FB38</string>
+				<key>PBXProjectModuleLabel</key>
+				<string>ObjectiveCPlugin.c</string>
+				<key>PBXSplitModuleInNavigatorKey</key>
+				<dict>
+					<key>Split0</key>
+					<dict>
+						<key>PBXProjectModuleGUID</key>
+						<string>9475A86111E6B7170010FB38</string>
+						<key>PBXProjectModuleLabel</key>
+						<string>ObjectiveCPlugin.c</string>
+						<key>_historyCapacity</key>
+						<integer>0</integer>
+						<key>bookmark</key>
+						<string>94EEEF9D11E6D0B200F15DC6</string>
+						<key>history</key>
+						<array>
+							<string>94C3AC8C11E6CC9800DBE1E9</string>
+						</array>
+					</dict>
+					<key>SplitCount</key>
+					<string>1</string>
+				</dict>
+				<key>StatusBarVisibility</key>
+				<true/>
+			</dict>
+			<key>Geometry</key>
+			<dict>
+				<key>Frame</key>
+				<string>{{0, 20}, {901, 736}}</string>
+				<key>PBXModuleWindowStatusBarHidden2</key>
+				<false/>
+				<key>RubberWindowFrame</key>
+				<string>710 153 901 777 0 0 1680 1028 </string>
+			</dict>
+		</dict>
+	</array>
 	<key>PerspectiveWidths</key>
 	<array>
 		<integer>-1</integer>
@@ -343,11 +384,14 @@
 								<string>29B97314FDCFA39411CA2CEA</string>
 								<string>29B97315FDCFA39411CA2CEA</string>
 								<string>9424FF570DDCB17F009912BF</string>
-								<string>9424FF590DDCB198009912BF</string>
-								<string>9424FF5A0DDCB19F009912BF</string>
-								<string>94BCE6640DDDEB5000F38F31</string>
+								<string>94BCE77E0DDDF61200F38F31</string>
+								<string>94BCE77F0DDDF61200F38F31</string>
+								<string>94883B3F0E0C2B9C005A4738</string>
 								<string>94E658DC0DDD03FE00358328</string>
-								<string>94E658DD0DDD03FE00358328</string>
+								<string>94E658DF0DDD03FE00358328</string>
+								<string>94E658E20DDD03FE00358328</string>
+								<string>94210B270E956AC200C1A314</string>
+								<string>947E20F40EB281C5007957D0</string>
 								<string>94EF6CB911E55947003BA64D</string>
 								<string>94EF6CBC11E55947003BA64D</string>
 								<string>29B97323FDCFA39411CA2CEA</string>
@@ -358,11 +402,12 @@
 							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
 							<array>
 								<array>
-									<integer>0</integer>
+									<integer>89</integer>
+									<integer>88</integer>
 								</array>
 							</array>
 							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
-							<string>{{0, 0}, {443, 914}}</string>
+							<string>{{0, 786}, {443, 914}}</string>
 						</dict>
 						<key>PBXTopSmartGroupGIDs</key>
 						<array/>
@@ -383,7 +428,7 @@
 							<real>421</real>
 						</array>
 						<key>RubberWindowFrame</key>
-						<string>17 55 1646 973 0 0 1680 1028 </string>
+						<string>15 50 1646 973 0 0 1680 1028 </string>
 					</dict>
 					<key>Module</key>
 					<string>PBXSmartGroupTreeModule</string>
@@ -399,7 +444,7 @@
 								<key>PBXProjectModuleGUID</key>
 								<string>1CE0B20306471E060097A5F4</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>sqAtomicOps.h</string>
+								<string>Entitlements.plist</string>
 								<key>PBXSplitModuleInNavigatorKey</key>
 								<dict>
 									<key>Split0</key>
@@ -407,11 +452,11 @@
 										<key>PBXProjectModuleGUID</key>
 										<string>1CE0B20406471E060097A5F4</string>
 										<key>PBXProjectModuleLabel</key>
-										<string>sqAtomicOps.h</string>
+										<string>Entitlements.plist</string>
 										<key>_historyCapacity</key>
 										<integer>0</integer>
 										<key>bookmark</key>
-										<string>94A3F95811E65EBC008113C6</string>
+										<string>94EEEF9C11E6D0B200F15DC6</string>
 										<key>history</key>
 										<array>
 											<string>94BCE7390DDDEF8200F38F31</string>
@@ -613,10 +658,8 @@
 											<string>9473A9701103BE0A00D135CB</string>
 											<string>948C0820112DE98D0017EE7F</string>
 											<string>94E8EEEA11C94D5D0049D853</string>
-											<string>94783A3D11D135AD00AF11A9</string>
 											<string>94783A3E11D135AD00AF11A9</string>
 											<string>949DDD6D11D141080017F79B</string>
-											<string>9494933711E5274B0019BC29</string>
 											<string>9494933A11E5274B0019BC29</string>
 											<string>9494933C11E5274B0019BC29</string>
 											<string>9494934011E5274B0019BC29</string>
@@ -628,19 +671,16 @@
 											<string>949AD35211E54A81006D6BF4</string>
 											<string>949AD36211E54AAA006D6BF4</string>
 											<string>949AD4BD11E552D7006D6BF4</string>
-											<string>94F68BCA11E5535F00D8C904</string>
 											<string>94EF6CCF11E559D9003BA64D</string>
 											<string>94EF6CFA11E55BAC003BA64D</string>
 											<string>94EF6CFB11E55BAC003BA64D</string>
 											<string>94EF6CFD11E55BAC003BA64D</string>
 											<string>94EF6CFF11E55BAC003BA64D</string>
-											<string>94EF6D0111E55BAC003BA64D</string>
 											<string>94EF6E2811E56355003BA64D</string>
 											<string>94EF6E2A11E56355003BA64D</string>
 											<string>94EF6EE111E56BEF003BA64D</string>
 											<string>94EF6FD211E57601003BA64D</string>
 											<string>94EF6FD311E57601003BA64D</string>
-											<string>94EF6FD611E57601003BA64D</string>
 											<string>94EF701E11E57905003BA64D</string>
 											<string>94EF702B11E57954003BA64D</string>
 											<string>94EF709B11E57D20003BA64D</string>
@@ -653,9 +693,29 @@
 											<string>941A333A11E640EE004796BA</string>
 											<string>941A33B411E64E46004796BA</string>
 											<string>94A3F91B11E6564F008113C6</string>
-											<string>94A3F92411E65CB5008113C6</string>
-											<string>94A3F92511E65CB5008113C6</string>
-											<string>94A3F92611E65CB5008113C6</string>
+											<string>9441DB6E11E6805300345F6C</string>
+											<string>9441DB6F11E6805300345F6C</string>
+											<string>9441DB7011E6805300345F6C</string>
+											<string>9441DB7111E6805300345F6C</string>
+											<string>9441DB7211E6805300345F6C</string>
+											<string>9441DB7311E6805300345F6C</string>
+											<string>9441DB7411E6805300345F6C</string>
+											<string>9441DB7511E6805300345F6C</string>
+											<string>9441DB7711E6805300345F6C</string>
+											<string>9441DB7811E6805300345F6C</string>
+											<string>9441DB7911E6805300345F6C</string>
+											<string>9441DB7A11E6805300345F6C</string>
+											<string>9475A76411E6817D0010FB38</string>
+											<string>9475A80511E695600010FB38</string>
+											<string>9475A80611E695600010FB38</string>
+											<string>9475A80711E695600010FB38</string>
+											<string>9475A83511E6B5D50010FB38</string>
+											<string>9475A87511E6BEF90010FB38</string>
+											<string>94EEEF8911E6CE4C00F15DC6</string>
+											<string>94EEEF9411E6D0B100F15DC6</string>
+											<string>94EEEF9511E6D0B100F15DC6</string>
+											<string>94EEEF9611E6D0B100F15DC6</string>
+											<string>94EEEF9711E6D0B100F15DC6</string>
 										</array>
 									</dict>
 									<key>SplitCount</key>
@@ -667,14 +727,14 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {1181, 838}}</string>
+								<string>{{0, 0}, {1181, 806}}</string>
 								<key>RubberWindowFrame</key>
-								<string>17 55 1646 973 0 0 1680 1028 </string>
+								<string>15 50 1646 973 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 							<key>Proportion</key>
-							<string>838pt</string>
+							<string>806pt</string>
 						</dict>
 						<dict>
 							<key>ContentConfiguration</key>
@@ -687,14 +747,14 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 843}, {1181, 89}}</string>
+								<string>{{0, 811}, {1181, 121}}</string>
 								<key>RubberWindowFrame</key>
-								<string>17 55 1646 973 0 0 1680 1028 </string>
+								<string>15 50 1646 973 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
 							<key>Proportion</key>
-							<string>89pt</string>
+							<string>121pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
@@ -713,9 +773,9 @@
 			</array>
 			<key>TableOfContents</key>
 			<array>
-				<string>94A3F8FD11E65115008113C6</string>
+				<string>94EEEF6C11E6CCF400F15DC6</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
-				<string>94A3F8FE11E65115008113C6</string>
+				<string>94EEEF6D11E6CCF400F15DC6</string>
 				<string>1CE0B20306471E060097A5F4</string>
 				<string>1CE0B20506471E060097A5F4</string>
 			</array>
@@ -836,7 +896,7 @@
 	<key>StatusbarIsVisible</key>
 	<true/>
 	<key>TimeStamp</key>
-	<real>300310204.00695699</real>
+	<real>300339378.44175297</real>
 	<key>ToolbarDisplayMode</key>
 	<integer>1</integer>
 	<key>ToolbarIsVisible</key>
@@ -851,16 +911,17 @@
 	<integer>5</integer>
 	<key>WindowOrderList</key>
 	<array>
-		<string>94A3F8FF11E65115008113C6</string>
-		<string>94A3F90011E65115008113C6</string>
+		<string>94EEEF7711E6CCF400F15DC6</string>
+		<string>94EEEF7811E6CCF400F15DC6</string>
 		<string>1C78EAAD065D492600B07095</string>
 		<string>1CD10A99069EF8BA00B06720</string>
+		<string>9424FF6E0DDCB226009912BF</string>
+		<string>9475A86011E6B7170010FB38</string>
 		<string>1C530D57069F1CE1000CFCEE</string>
-		<string>9424FF6E0DDCB226009912BF</string>
 		<string>/Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/SqueakPureObjcCOGVM.xcodeproj</string>
 	</array>
 	<key>WindowString</key>
-	<string>17 55 1646 973 0 0 1680 1028 </string>
+	<string>15 50 1646 973 0 0 1680 1028 </string>
 	<key>WindowToolsV3</key>
 	<array>
 		<dict>
@@ -881,7 +942,7 @@
 								<key>PBXProjectModuleGUID</key>
 								<string>1CD0528F0623707200166675</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>&lt;No Editor&gt;</string>
+								<string></string>
 								<key>StatusBarVisibility</key>
 								<true/>
 							</dict>
@@ -890,7 +951,7 @@
 								<key>Frame</key>
 								<string>{{0, 0}, {1332, 665}}</string>
 								<key>RubberWindowFrame</key>
-								<string>115 104 1332 919 0 0 1680 1028 </string>
+								<string>711 109 1332 919 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
@@ -916,7 +977,7 @@
 								<key>Frame</key>
 								<string>{{0, 670}, {1332, 208}}</string>
 								<key>RubberWindowFrame</key>
-								<string>115 104 1332 919 0 0 1680 1028 </string>
+								<string>711 109 1332 919 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXBuildResultsModule</string>
@@ -939,18 +1000,18 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>9424FF6E0DDCB226009912BF</string>
-				<string>94A3F8E511E650CA008113C6</string>
+				<string>94EEEF6F11E6CCF400F15DC6</string>
 				<string>1CD0528F0623707200166675</string>
 				<string>XCMainBuildResultsModuleGUID</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.buildV3</string>
 			<key>WindowString</key>
-			<string>115 104 1332 919 0 0 1680 1028 </string>
+			<string>711 109 1332 919 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
 			<string>9424FF6E0DDCB226009912BF</string>
 			<key>WindowToolIsVisible</key>
-			<true/>
+			<false/>
 		</dict>
 		<dict>
 			<key>FirstTimeWindowDisplayed</key>
@@ -981,8 +1042,8 @@
 										<string>yes</string>
 										<key>sizes</key>
 										<array>
-											<string>{{0, 0}, {150, 394}}</string>
-											<string>{{150, 0}, {1226, 394}}</string>
+											<string>{{0, 0}, {150, 466}}</string>
+											<string>{{150, 0}, {1226, 466}}</string>
 										</array>
 									</dict>
 									<key>VerticalSplitView</key>
@@ -997,8 +1058,8 @@
 										<string>yes</string>
 										<key>sizes</key>
 										<array>
-											<string>{{0, 0}, {1376, 394}}</string>
-											<string>{{0, 394}, {1376, 533}}</string>
+											<string>{{0, 0}, {1376, 466}}</string>
+											<string>{{0, 466}, {1376, 461}}</string>
 										</array>
 									</dict>
 								</dict>
@@ -1031,12 +1092,12 @@
 										<real>713</real>
 									</array>
 									<key>Frame</key>
-									<string>{{150, 0}, {1226, 394}}</string>
+									<string>{{150, 0}, {1226, 466}}</string>
 									<key>RubberWindowFrame</key>
-									<string>64 60 1376 968 0 0 1680 1028 </string>
+									<string>292 60 1376 968 0 0 1680 1028 </string>
 								</dict>
 								<key>RubberWindowFrame</key>
-								<string>64 60 1376 968 0 0 1680 1028 </string>
+								<string>292 60 1376 968 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXDebugSessionModule</string>
@@ -1059,18 +1120,18 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>1CD10A99069EF8BA00B06720</string>
-				<string>94A3F8E611E650CA008113C6</string>
+				<string>94EEEF7011E6CCF400F15DC6</string>
 				<string>1C162984064C10D400B95A72</string>
-				<string>94A3F8E711E650CA008113C6</string>
-				<string>94A3F8E811E650CA008113C6</string>
-				<string>94A3F8E911E650CA008113C6</string>
-				<string>94A3F8EA11E650CA008113C6</string>
-				<string>94A3F8EB11E650CA008113C6</string>
+				<string>94EEEF7111E6CCF400F15DC6</string>
+				<string>94EEEF7211E6CCF400F15DC6</string>
+				<string>94EEEF7311E6CCF400F15DC6</string>
+				<string>94EEEF7411E6CCF400F15DC6</string>
+				<string>94EEEF7511E6CCF400F15DC6</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.debugV3</string>
 			<key>WindowString</key>
-			<string>64 60 1376 968 0 0 1680 1028 </string>
+			<string>292 60 1376 968 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
 			<string>1CD10A99069EF8BA00B06720</string>
 			<key>WindowToolIsVisible</key>
@@ -1099,7 +1160,7 @@
 										<key>PBXProjectModuleGUID</key>
 										<string>1CDD528C0622207200134675</string>
 										<key>PBXProjectModuleLabel</key>
-										<string>sqExternalSemaphores.c</string>
+										<string>aio.c</string>
 										<key>StatusBarVisibility</key>
 										<true/>
 									</dict>
@@ -1108,7 +1169,7 @@
 										<key>Frame</key>
 										<string>{{0, 0}, {1417, 676}}</string>
 										<key>RubberWindowFrame</key>
-										<string>677 0 1417 1024 0 0 1680 1028 </string>
+										<string>263 4 1417 1024 0 0 1680 1028 </string>
 									</dict>
 									<key>Module</key>
 									<string>PBXNavigatorGroup</string>
@@ -1132,7 +1193,7 @@
 								<key>Frame</key>
 								<string>{{0, 681}, {1417, 302}}</string>
 								<key>RubberWindowFrame</key>
-								<string>677 0 1417 1024 0 0 1680 1028 </string>
+								<string>263 4 1417 1024 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXProjectFindModule</string>
@@ -1155,17 +1216,17 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>1C530D57069F1CE1000CFCEE</string>
-				<string>94A3F8F011E650CA008113C6</string>
-				<string>94A3F8F111E650CA008113C6</string>
+				<string>94EEEF9A11E6D0B100F15DC6</string>
+				<string>94EEEF9B11E6D0B100F15DC6</string>
 				<string>1CDD528C0622207200134675</string>
 				<string>1CD0528E0623707200166675</string>
 			</array>
 			<key>WindowString</key>
-			<string>677 0 1417 1024 0 0 1680 1028 </string>
+			<string>263 4 1417 1024 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
 			<string>1C530D57069F1CE1000CFCEE</string>
 			<key>WindowToolIsVisible</key>
-			<false/>
+			<true/>
 		</dict>
 		<dict>
 			<key>Identifier</key>
@@ -1219,7 +1280,7 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>1C78EAAD065D492600B07095</string>
-				<string>94A3F8F211E650CA008113C6</string>
+				<string>94EEEF7611E6CCF400F15DC6</string>
 				<string>1C78EAAC065D492600B07095</string>
 			</array>
 			<key>ToolbarConfiguration</key>
@@ -1311,7 +1372,7 @@
 								<key>PBXProjectModuleGUID</key>
 								<string>1C78EAB2065D492600B07095</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>sqSqueakIPhoneApplication.m</string>
+								<string></string>
 								<key>StatusBarVisibility</key>
 								<true/>
 							</dict>
@@ -1360,7 +1421,7 @@
 								<key>PBXProjectModuleLabel</key>
 								<string>SCM Results</string>
 								<key>SCMActivityViewerShowingDefaultKey</key>
-								<string>{{0, 295}, {1582, 123}}</string>
+								<string>{{0, 304}, {1582, 114}}</string>
 							</dict>
 							<key>GeometryConfiguration</key>
 							<dict>
@@ -1390,7 +1451,7 @@
 			<key>TableOfContents</key>
 			<array>
 				<string>9488792B0E0F2F8000555242</string>
-				<string>94EE1DAF11E57FAB00DC6E8C</string>
+				<string>9475A80F11E695600010FB38</string>
 				<string>1C78EAB2065D492600B07095</string>
 				<string>1CD052920623707200166675</string>
 			</array>
@@ -1470,7 +1531,7 @@
 									<real>275</real>
 								</array>
 								<key>RubberWindowFrame</key>
-								<string>7 60 1661 888 0 0 1680 1028 </string>
+								<string>19 140 1661 888 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXSmartGroupTreeModule</string>
@@ -1492,7 +1553,7 @@
 								<key>Frame</key>
 								<string>{{297, 0}, {1364, 847}}</string>
 								<key>RubberWindowFrame</key>
-								<string>7 60 1661 888 0 0 1680 1028 </string>
+								<string>19 140 1661 888 0 0 1680 1028 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
@@ -1519,17 +1580,17 @@
 			<true/>
 			<key>TableOfContents</key>
 			<array>
-				<string>949FAC8E116406F800A106F0</string>
-				<string>949FAC8F116406F800A106F0</string>
+				<string>9475A77111E6817D0010FB38</string>
+				<string>9475A77211E6817D0010FB38</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
 				<string>1CA1AED706398EBD00589147</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.breakpointsV3</string>
 			<key>WindowString</key>
-			<string>7 60 1661 888 0 0 1680 1028 </string>
+			<string>19 140 1661 888 0 0 1680 1028 </string>
 			<key>WindowToolGUID</key>
-			<string>949FAC8E116406F800A106F0</string>
+			<string>9475A77111E6817D0010FB38</string>
 			<key>WindowToolIsVisible</key>
 			<false/>
 		</dict>

Modified: trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/johnmci.pbxuser
===================================================================
--- trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/johnmci.pbxuser	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/johnmci.pbxuser	2010-07-09 03:40:43 UTC (rev 2231)
@@ -26,38 +26,13 @@
 		activeArchitecturePreference = armv7;
 		activeBuildConfigurationName = Debug;
 		activeExecutable = 9424FF3E0DDC8654009912BF /* Squeak */;
-		activeSDKPreference = iphoneos3.2;
+		activeSDKPreference = iphoneos4.0;
 		activeTarget = 1D6058900D05DD3D006BFB54 /* SqueakNoOGLIPhone */;
 		addToTargets = (
 			1D6058900D05DD3D006BFB54 /* SqueakNoOGLIPhone */,
 		);
 		breakpoints = (
-			94D7181B10B74A2500F69A71 /* sqSqueakOSXNSView.m:465 */,
-			94D7181D10B74A2600F69A71 /* sqSqueakOSXNSView.m:461 */,
-			94D7182310B74A2900F69A71 /* sqSqueakOSXNSView.m:449 */,
-			94D7182910B74A4A00F69A71 /* sqSqueakOSXNSView.m:437 */,
-			94D7182D10B74A4E00F69A71 /* sqSqueakOSXNSView.m:445 */,
-			94D7183310B74BD100F69A71 /* sqSqueakOSXNSView.m:474 */,
-			94A1B1B810B9C1A800C64473 /* sqMacUIEventsUniversal.c:1429 */,
-			945C4E6310BB29B500548CC1 /* sqSqueakFileDirectoryInterface.m:117 */,
-			945C4E8010BB2CE000548CC1 /* sqSqueakFileDirectoryInterface.m:101 */,
-			9428BC5C10BB760200DAD287 /* sqSqueakOSXApplication+clipboard.m:59 */,
-			9428BCDC10BB937100DAD287 /* sqSqueakFileDirectoryInterface.m:218 */,
-			9428BD7010BBA1DC00DAD287 /* sqSqueakFileDirectoryInterface.m:179 */,
-			9428BD7710BBA26000DAD287 /* sqSqueakFileDirectoryInterface.m:204 */,
-			94F5F28710BC517200847EEE /* sqSqueakOSXNSView.m:432 */,
-			94F5F28B10BC517500847EEE /* sqSqueakOSXNSView.m:453 */,
-			94F5F28D10BC517700847EEE /* sqSqueakOSXNSView.m:457 */,
-			94E583DF10BF43A40073FD63 /* sqSqueakOSXNSView.m:326 */,
-			946DA99210C0CE1900F26F56 /* sqSqueakOSXDropAPI.m:79 */,
-			946DAB1210C0F00400F26F56 /* sqMacUnixExternalPrims.m:218 */,
-			9476030E10C375C300B621C9 /* sqSqueakOSXApplication.m:257 */,
-			9476031010C375C600B621C9 /* sqSqueakOSXApplication.m:262 */,
-			947713B610C45C0A00890A9B /* Queue.m:117 */,
-			9495E43B10C9DFDD003E3D28 /* aio.c:235 */,
 			9458511410F03996001401E7 /* sqMacExtendedClipboard.m:101 */,
-			945851AC10F03D1F001401E7 /* sqSqueakOSXApplication+clipboard.m:69 */,
-			945851AE10F03D20001401E7 /* sqSqueakOSXApplication+clipboard.m:75 */,
 			9458523210F040A0001401E7 /* sqMacExtendedClipboard.m:37 */,
 			9458523410F040A1001401E7 /* sqMacExtendedClipboard.m:45 */,
 			9458523610F040A2001401E7 /* sqMacExtendedClipboard.m:50 */,
@@ -66,20 +41,10 @@
 			9458527F10F045FB001401E7 /* sqSqueakIPhoneClipboardAPI.m:31 */,
 			9458528110F045FC001401E7 /* sqSqueakIPhoneClipboardAPI.m:24 */,
 			9458528310F045FD001401E7 /* sqSqueakIPhoneClipboardAPI.m:17 */,
-			9496D5CD10FAFA29007762DE /* sqSqueakOSXNSView.m:352 */,
-			940CD10B110E3E4D00A9344A /* sqSqueakOSXNSView.m:529 */,
-			940CD113110E3E6500A9344A /* sqSqueakOSXDropAPI.m:53 */,
-			94C0D1AC112D5DAE00213581 /* sqSqueakScreenAPI.m:79 */,
-			941C24EF1198BBE3008BF398 /* sqSqueakScreenAndWindow.m:96 */,
-			94EECBD811C76107001AFA91 /* interp.c:24055 */,
-			94E8EF1211C950540049D853 /* sqSqueakOSXNSView.m:118 */,
 			94EF6FB511E57577003BA64D /* sqUnixHeartbeat.c:168 */,
 			94E1BD9C11E5A94E00D5B92B /* sqMacV2Time.c:64 */,
 			941A331211E63DE7004796BA /* sqUnixHeartbeat.c:68 */,
-			941A337811E64A37004796BA /* ObjectiveCPlugin.c:203 */,
-			94A3F8DA11E6506A008113C6 /* ObjectiveCPlugin.c:1418 */,
-			94A3F8DC11E65074008113C6 /* ObjectiveCPlugin.c:1426 */,
-			94A3F8DE11E6507C008113C6 /* ObjectiveCPlugin.c:1412 */,
+			9475A81411E6959C0010FB38 /* ObjectiveCPlugin.c:1770 */,
 		);
 		codeSenseManager = 9424FF430DDC8673009912BF /* Code sense */;
 		executables = (
@@ -255,8 +220,8 @@
 					PBXFileDataSource_Warnings_ColumnID,
 				);
 			};
-			PBXPerProjectTemplateStateSaveDate = 300306498;
-			PBXWorkspaceStateSaveDate = 300306498;
+			PBXPerProjectTemplateStateSaveDate = 300338353;
+			PBXWorkspaceStateSaveDate = 300338353;
 		};
 		perUserProjectItems = {
 			9402DDB610CE12A5005C2102 /* PBXTextBookmark */ = 9402DDB610CE12A5005C2102 /* PBXTextBookmark */;
@@ -288,6 +253,18 @@
 			9430325510BD0B6D0045D33B /* PBXTextBookmark */ = 9430325510BD0B6D0045D33B /* PBXTextBookmark */;
 			9430329A10BD103B0045D33B /* PBXTextBookmark */ = 9430329A10BD103B0045D33B /* PBXTextBookmark */;
 			9430329B10BD103B0045D33B /* PBXTextBookmark */ = 9430329B10BD103B0045D33B /* PBXTextBookmark */;
+			9441DB6E11E6805300345F6C /* PBXTextBookmark */ = 9441DB6E11E6805300345F6C /* PBXTextBookmark */;
+			9441DB6F11E6805300345F6C /* PBXTextBookmark */ = 9441DB6F11E6805300345F6C /* PBXTextBookmark */;
+			9441DB7011E6805300345F6C /* PBXTextBookmark */ = 9441DB7011E6805300345F6C /* PBXTextBookmark */;
+			9441DB7111E6805300345F6C /* PBXTextBookmark */ = 9441DB7111E6805300345F6C /* PBXTextBookmark */;
+			9441DB7211E6805300345F6C /* PBXTextBookmark */ = 9441DB7211E6805300345F6C /* PBXTextBookmark */;
+			9441DB7311E6805300345F6C /* PBXTextBookmark */ = 9441DB7311E6805300345F6C /* PBXTextBookmark */;
+			9441DB7411E6805300345F6C /* PBXTextBookmark */ = 9441DB7411E6805300345F6C /* PBXTextBookmark */;
+			9441DB7511E6805300345F6C /* PBXTextBookmark */ = 9441DB7511E6805300345F6C /* PBXTextBookmark */;
+			9441DB7711E6805300345F6C /* PBXTextBookmark */ = 9441DB7711E6805300345F6C /* PBXTextBookmark */;
+			9441DB7811E6805300345F6C /* PBXTextBookmark */ = 9441DB7811E6805300345F6C /* PBXTextBookmark */;
+			9441DB7911E6805300345F6C /* PBXTextBookmark */ = 9441DB7911E6805300345F6C /* PBXTextBookmark */;
+			9441DB7A11E6805300345F6C /* PBXTextBookmark */ = 9441DB7A11E6805300345F6C /* PBXTextBookmark */;
 			94476EC40EBFAB320095D6D7 /* PBXTextBookmark */ = 94476EC40EBFAB320095D6D7 /* PBXTextBookmark */;
 			9448940B10F3E8FF00FB3EC8 /* PBXTextBookmark */ = 9448940B10F3E8FF00FB3EC8 /* PBXTextBookmark */;
 			94547F160DE0AC7D00DD588F /* PBXTextBookmark */ = 94547F160DE0AC7D00DD588F /* PBXTextBookmark */;
@@ -321,11 +298,16 @@
 			9473A34810BBD84100ED7D00 /* PBXTextBookmark */ = 9473A34810BBD84100ED7D00 /* PBXTextBookmark */;
 			9473A95A1102F70B00D135CB /* PBXTextBookmark */ = 9473A95A1102F70B00D135CB /* PBXTextBookmark */;
 			9473A9701103BE0A00D135CB /* PBXTextBookmark */ = 9473A9701103BE0A00D135CB /* PBXTextBookmark */;
+			9475A76411E6817D0010FB38 /* PBXTextBookmark */ = 9475A76411E6817D0010FB38 /* PBXTextBookmark */;
+			9475A80511E695600010FB38 /* PlistBookmark */ = 9475A80511E695600010FB38 /* PlistBookmark */;
+			9475A80611E695600010FB38 /* PlistBookmark */ = 9475A80611E695600010FB38 /* PlistBookmark */;
+			9475A80711E695600010FB38 /* PlistBookmark */ = 9475A80711E695600010FB38 /* PlistBookmark */;
+			9475A83511E6B5D50010FB38 /* PBXTextBookmark */ = 9475A83511E6B5D50010FB38 /* PBXTextBookmark */;
+			9475A87511E6BEF90010FB38 /* PBXTextBookmark */ = 9475A87511E6BEF90010FB38 /* PBXTextBookmark */;
 			9475F4DB10BEF4100047A24B /* PBXTextBookmark */ = 9475F4DB10BEF4100047A24B /* PBXTextBookmark */;
 			9475F56B10BF20A00047A24B /* PBXTextBookmark */ = 9475F56B10BF20A00047A24B /* PBXTextBookmark */;
 			9475F5A710BF25A10047A24B /* PBXTextBookmark */ = 9475F5A710BF25A10047A24B /* PBXTextBookmark */;
 			947713D410C45E5F00890A9B /* PBXTextBookmark */ = 947713D410C45E5F00890A9B /* PBXTextBookmark */;
-			94783A3D11D135AD00AF11A9 /* PlistBookmark */ = 94783A3D11D135AD00AF11A9 /* PlistBookmark */;
 			94783A3E11D135AD00AF11A9 /* PlistBookmark */ = 94783A3E11D135AD00AF11A9 /* PlistBookmark */;
 			9478E13D0EC8EB46007096A7 /* PBXTextBookmark */ = 9478E13D0EC8EB46007096A7 /* PBXTextBookmark */;
 			947923F21102BC12007C87F8 /* PBXTextBookmark */ = 947923F21102BC12007C87F8 /* PBXTextBookmark */;
@@ -362,7 +344,6 @@
 			9492450910BA42EF00E726F5 /* PBXTextBookmark */ = 9492450910BA42EF00E726F5 /* PBXTextBookmark */;
 			949245B210BA4A6200E726F5 /* PBXTextBookmark */ = 949245B210BA4A6200E726F5 /* PBXTextBookmark */;
 			9493E98F10EE90BC000C4FB3 /* PBXTextBookmark */ = 9493E98F10EE90BC000C4FB3 /* PBXTextBookmark */;
-			9494933711E5274B0019BC29 /* PBXTextBookmark */ = 9494933711E5274B0019BC29 /* PBXTextBookmark */;
 			9494933A11E5274B0019BC29 /* PBXTextBookmark */ = 9494933A11E5274B0019BC29 /* PBXTextBookmark */;
 			9494933C11E5274B0019BC29 /* PBXTextBookmark */ = 9494933C11E5274B0019BC29 /* PBXTextBookmark */;
 			9494934011E5274B0019BC29 /* PBXTextBookmark */ = 9494934011E5274B0019BC29 /* PBXTextBookmark */;
@@ -377,10 +358,6 @@
 			94A1B2AA10B9E92A00C64473 /* PBXTextBookmark */ = 94A1B2AA10B9E92A00C64473 /* PBXTextBookmark */;
 			94A1B41E10BA05E600C64473 /* PBXTextBookmark */ = 94A1B41E10BA05E600C64473 /* PBXTextBookmark */;
 			94A3F91B11E6564F008113C6 /* PBXTextBookmark */ = 94A3F91B11E6564F008113C6 /* PBXTextBookmark */;
-			94A3F92411E65CB5008113C6 /* PBXTextBookmark */ = 94A3F92411E65CB5008113C6 /* PBXTextBookmark */;
-			94A3F92511E65CB5008113C6 /* PBXTextBookmark */ = 94A3F92511E65CB5008113C6 /* PBXTextBookmark */;
-			94A3F92611E65CB5008113C6 /* PBXTextBookmark */ = 94A3F92611E65CB5008113C6 /* PBXTextBookmark */;
-			94A3F95811E65EBC008113C6 /* PBXTextBookmark */ = 94A3F95811E65EBC008113C6 /* PBXTextBookmark */;
 			94AB2E6A0E003879006A79E4 /* PBXTextBookmark */ = 94AB2E6A0E003879006A79E4 /* PBXTextBookmark */;
 			94AB2E6C0E003879006A79E4 /* PBXTextBookmark */ = 94AB2E6C0E003879006A79E4 /* PBXTextBookmark */;
 			94B1514E0DE2CE530059F208 /* PBXTextBookmark */ = 94B1514E0DE2CE530059F208 /* PBXTextBookmark */;
@@ -402,6 +379,7 @@
 			94C3696410AFB7550041953A /* PBXTextBookmark */ = 94C3696410AFB7550041953A /* PBXTextBookmark */;
 			94C3698D10B082DF0041953A /* PBXTextBookmark */ = 94C3698D10B082DF0041953A /* PBXTextBookmark */;
 			94C3699110B082DF0041953A /* PBXTextBookmark */ = 94C3699110B082DF0041953A /* PBXTextBookmark */;
+			94C3AC8C11E6CC9800DBE1E9 /* PBXTextBookmark */ = 94C3AC8C11E6CC9800DBE1E9 /* PBXTextBookmark */;
 			94C887D410ADCC0D007CB39E /* PBXTextBookmark */ = 94C887D410ADCC0D007CB39E /* PBXTextBookmark */;
 			94C888B710ADE75B007CB39E /* PBXTextBookmark */ = 94C888B710ADE75B007CB39E /* PBXTextBookmark */;
 			94C88B6810AF26F8007CB39E /* PBXTextBookmark */ = 94C88B6810AF26F8007CB39E /* PBXTextBookmark */;
@@ -470,18 +448,23 @@
 			94E8EEEA11C94D5D0049D853 /* PBXTextBookmark */ = 94E8EEEA11C94D5D0049D853 /* PBXTextBookmark */;
 			94ED7EFA0E6C2ABE00F4DD03 /* PBXTextBookmark */ = 94ED7EFA0E6C2ABE00F4DD03 /* PBXTextBookmark */;
 			94EE1DAA11E57FAB00DC6E8C /* PBXTextBookmark */ = 94EE1DAA11E57FAB00DC6E8C /* PBXTextBookmark */;
+			94EEEF8911E6CE4C00F15DC6 /* PBXTextBookmark */ = 94EEEF8911E6CE4C00F15DC6 /* PBXTextBookmark */;
+			94EEEF9411E6D0B100F15DC6 /* PBXTextBookmark */ = 94EEEF9411E6D0B100F15DC6 /* PBXTextBookmark */;
+			94EEEF9511E6D0B100F15DC6 /* PBXTextBookmark */ = 94EEEF9511E6D0B100F15DC6 /* PBXTextBookmark */;
+			94EEEF9611E6D0B100F15DC6 /* PBXTextBookmark */ = 94EEEF9611E6D0B100F15DC6 /* PBXTextBookmark */;
+			94EEEF9711E6D0B100F15DC6 /* PlistBookmark */ = 94EEEF9711E6D0B100F15DC6 /* PlistBookmark */;
+			94EEEF9C11E6D0B200F15DC6 /* PlistBookmark */ = 94EEEF9C11E6D0B200F15DC6 /* PlistBookmark */;
+			94EEEF9D11E6D0B200F15DC6 /* PBXTextBookmark */ = 94EEEF9D11E6D0B200F15DC6 /* PBXTextBookmark */;
 			94EF6CCF11E559D9003BA64D /* PBXTextBookmark */ = 94EF6CCF11E559D9003BA64D /* PBXTextBookmark */;
 			94EF6CFA11E55BAC003BA64D /* PBXTextBookmark */ = 94EF6CFA11E55BAC003BA64D /* PBXTextBookmark */;
 			94EF6CFB11E55BAC003BA64D /* PBXTextBookmark */ = 94EF6CFB11E55BAC003BA64D /* PBXTextBookmark */;
 			94EF6CFD11E55BAC003BA64D /* PBXTextBookmark */ = 94EF6CFD11E55BAC003BA64D /* PBXTextBookmark */;
 			94EF6CFF11E55BAC003BA64D /* PBXTextBookmark */ = 94EF6CFF11E55BAC003BA64D /* PBXTextBookmark */;
-			94EF6D0111E55BAC003BA64D /* PBXTextBookmark */ = 94EF6D0111E55BAC003BA64D /* PBXTextBookmark */;
 			94EF6E2811E56355003BA64D /* PBXTextBookmark */ = 94EF6E2811E56355003BA64D /* PBXTextBookmark */;
 			94EF6E2A11E56355003BA64D /* PBXTextBookmark */ = 94EF6E2A11E56355003BA64D /* PBXTextBookmark */;
 			94EF6EE111E56BEF003BA64D /* PBXTextBookmark */ = 94EF6EE111E56BEF003BA64D /* PBXTextBookmark */;
 			94EF6FD211E57601003BA64D /* PBXTextBookmark */ = 94EF6FD211E57601003BA64D /* PBXTextBookmark */;
 			94EF6FD311E57601003BA64D /* PBXTextBookmark */ = 94EF6FD311E57601003BA64D /* PBXTextBookmark */;
-			94EF6FD611E57601003BA64D /* PBXTextBookmark */ = 94EF6FD611E57601003BA64D /* PBXTextBookmark */;
 			94EF701E11E57905003BA64D /* PBXTextBookmark */ = 94EF701E11E57905003BA64D /* PBXTextBookmark */;
 			94EF702B11E57954003BA64D /* PBXTextBookmark */ = 94EF702B11E57954003BA64D /* PBXTextBookmark */;
 			94EF709B11E57D20003BA64D /* PBXTextBookmark */ = 94EF709B11E57D20003BA64D /* PBXTextBookmark */;
@@ -496,7 +479,6 @@
 			94F5F29410BC518B00847EEE /* PBXTextBookmark */ = 94F5F29410BC518B00847EEE /* PBXTextBookmark */;
 			94F5F29510BC518B00847EEE /* PBXTextBookmark */ = 94F5F29510BC518B00847EEE /* PBXTextBookmark */;
 			94F5F2A810BC539700847EEE /* PBXTextBookmark */ = 94F5F2A810BC539700847EEE /* PBXTextBookmark */;
-			94F68BCA11E5535F00D8C904 /* PlistBookmark */ = 94F68BCA11E5535F00D8C904 /* PlistBookmark */;
 			94F89AFE10B4997900556475 /* PBXTextBookmark */ = 94F89AFE10B4997900556475 /* PBXTextBookmark */;
 			94F89BDE10B4B77400556475 /* PBXTextBookmark */ = 94F89BDE10B4B77400556475 /* PBXTextBookmark */;
 			94F89BE010B4B77400556475 /* PBXTextBookmark */ = 94F89BE010B4B77400556475 /* PBXTextBookmark */;
@@ -660,39 +642,6 @@
 		path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSRange.h;
 		sourceTree = "<absolute>";
 	};
-	940CD10B110E3E4D00A9344A /* sqSqueakOSXNSView.m:529 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-draggingExited:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 529;
-		modificationTime = 300309947.151439;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
-	};
-	940CD113110E3E6500A9344A /* sqSqueakOSXDropAPI.m:53 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 946DA91410C0C71100F26F56 /* sqSqueakOSXDropAPI.m */;
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 53;
-		modificationTime = 300309947.151451;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
-	};
 	940CE8540DFCE2D200EBA91B /* SqueakUIController.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {905, 790}}";
@@ -798,7 +747,7 @@
 		ignoreCount = 0;
 		lineNumber = 68;
 		location = Squeak;
-		modificationTime = 300309948.188813;
+		modificationTime = 300338707.36716;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -856,23 +805,6 @@
 		vrLen = 2383;
 		vrLoc = 0;
 	};
-	941A337811E64A37004796BA /* ObjectiveCPlugin.c:203 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */;
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 203;
-		location = Squeak;
-		modificationTime = 300309948.236926;
-		originalNumberOfMultipleMatches = 1;
-		state = 1;
-	};
 	941A33B411E64E46004796BA /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94E659000DDD03FE00358328 /* JPEGReadWriter2Plugin.c */;
@@ -883,24 +815,6 @@
 		vrLen = 2099;
 		vrLoc = 19525;
 	};
-	941C24EF1198BBE3008BF398 /* sqSqueakScreenAndWindow.m:96 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 9471D2720E04703B00703D45 /* sqSqueakScreenAndWindow.m */;
-		functionName = "-ioScreenSize";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 96;
-		location = Squeak;
-		modificationTime = 300309947.151476;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
 	941D1C9A0E696FC7005B77B3 /* Entitlements.plist */ = {
 		uiCtxt = {
 			sepNavWindowFrame = "{{15, 166}, {1288, 857}}";
@@ -908,10 +822,10 @@
 	};
 	94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1132, 25922}}";
-			sepNavSelRange = "{39280, 0}";
-			sepNavVisRange = "{38190, 1786}";
-			sepNavWindowFrame = "{{50, 470}, {750, 558}}";
+			sepNavIntBoundsRect = "{{0, 0}, {992, 25909}}";
+			sepNavSelRange = "{60509, 0}";
+			sepNavVisRange = "{24140, 1529}";
+			sepNavWindowFrame = "{{710, 97}, {901, 833}}";
 		};
 	};
 	9421AB550FF1807D008F54E9 /* PBXTextBookmark */ = {
@@ -1069,15 +983,20 @@
 			$sl = 1;
 			$sp = 1;
 			$ss = 1;
+			"*buffer-short int-primitiveNSInvocationGetShortType" = 1;
+			"_return_value-sqInt-primitiveNSInvocationGetShortType" = 1;
 			"actually-void *-sqAllocateMemoryMac" = 2;
 			"data-id-primitiveNSInvocationGetObjectType" = 1;
+			"data-short int-primitiveNSInvocationGetShortType" = 1;
 			"dateDifference-sqInt-convertToSqueakTime" = 1;
 			"fileSize-off_t-sqAllocateMemoryMac" = 2;
+			"integerValue-sqInt-positive32BitIntegerFor" = 1;
 			"mFormatID-UInt32--[sqSqueakSoundCoreAudio snd_StartRecording:stereo:semaIndex:]" = 5;
 			"possibleLocation-void *-sqAllocateMemoryMac" = 2;
 			"returnValue-struct objc_object * volatile-primitivePerformSelector" = 2;
 			"startOfAnonymousMemory-void *-sqAllocateMemoryMac" = 1;
 			"startOfAnonymousMemoryPageSize-size_t-sqAllocateMemoryMac" = 1;
+			"unsignedData-long long unsigned int-primitiveNSInvocationGetLongLongType" = 1;
 			"what-long int--[SqueakProxy forwardInvocation:]" = 1;
 			"why-int-aioPoll" = 1;
 		};
@@ -1138,9 +1057,9 @@
 	};
 	9424FF610DDCB1C7009912BF /* sqVirtualMachine.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1368, 3809}}";
-			sepNavSelRange = "{7058, 0}";
-			sepNavVisRange = "{6367, 1031}";
+			sepNavIntBoundsRect = "{{0, 0}, {1391, 3848}}";
+			sepNavSelRange = "{4042, 56}";
+			sepNavVisRange = "{2819, 2197}";
 			sepNavWindowFrame = "{{15, 55}, {1438, 968}}";
 		};
 	};
@@ -1231,9 +1150,9 @@
 	};
 	9428BB0510BB478600DAD287 /* sqSqueakOSXApplication+clipboard.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {943, 1092}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 1092}}";
 			sepNavSelRange = "{3155, 103}";
-			sepNavVisRange = "{2020, 1593}";
+			sepNavVisRange = "{947, 2666}";
 			sepNavWindowFrame = "{{15, 4}, {878, 1019}}";
 		};
 	};
@@ -1288,78 +1207,6 @@
 		vrLen = 3372;
 		vrLoc = 7682;
 	};
-	9428BC5C10BB760200DAD287 /* sqSqueakOSXApplication+clipboard.m:59 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 9428BB0510BB478600DAD287 /* sqSqueakOSXApplication+clipboard.m */;
-		functionName = "-clipboardSize";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 59;
-		location = Squeak;
-		modificationTime = 300309947.151047;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	9428BCDC10BB937100DAD287 /* sqSqueakFileDirectoryInterface.m:218 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 9452D5DE0E044A9D000AD792 /* sqSqueakFileDirectoryInterface.m */;
-		functionName = "-dir_Delete:length:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 218;
-		location = Squeak;
-		modificationTime = 300309947.151062;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	9428BD7010BBA1DC00DAD287 /* sqSqueakFileDirectoryInterface.m:179 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 9452D5DE0E044A9D000AD792 /* sqSqueakFileDirectoryInterface.m */;
-		functionName = "-dir_Create:length:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 179;
-		location = Squeak;
-		modificationTime = 300309947.15108;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	9428BD7710BBA26000DAD287 /* sqSqueakFileDirectoryInterface.m:204 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 9452D5DE0E044A9D000AD792 /* sqSqueakFileDirectoryInterface.m */;
-		functionName = "-dir_Delete:length:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 204;
-		location = Squeak;
-		modificationTime = 300309947.151088;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
 	9428BF3810BBC2ED00DAD287 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94BCAC3710AB79DA00F87527 /* NSArray.h */;
@@ -1394,13 +1241,6 @@
 		path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSView.h;
 		sourceTree = "<absolute>";
 	};
-	942ABEC410AA34820086D908 /* sqMacUIEventsUniversal.c */ = {
-		isa = PBXFileReference;
-		lastKnownFileType = sourcecode.c.c;
-		name = sqMacUIEventsUniversal.c;
-		path = "/Users/johnmci/Documents/Squeak3.8.0/platforms/Mac OS/vm/sqMacUIEventsUniversal.c";
-		sourceTree = "<absolute>";
-	};
 	942ABEC510AA34820086D908 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 942ABEC610AA34820086D908 /* sqMacHostWindow.h */;
@@ -1672,6 +1512,126 @@
 			sepNavVisRange = "{0, 902}";
 		};
 	};
+	9441DB6E11E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 949492C411E51C6B0019BC29 /* sqAtomicOps.h */;
+		name = "sqAtomicOps.h: 143";
+		rLen = 19;
+		rLoc = 5280;
+		rType = 0;
+		vrLen = 2230;
+		vrLoc = 4371;
+	};
+	9441DB6F11E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 9452D5DE0E044A9D000AD792 /* sqSqueakFileDirectoryInterface.m */;
+		name = "sqSqueakFileDirectoryInterface.m: 179";
+		rLen = 42;
+		rLoc = 6369;
+		rType = 0;
+		vrLen = 2137;
+		vrLoc = 5230;
+	};
+	9441DB7011E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 947E64CB10AA16FE00D3B69E /* sqSqueakOSXApplication.m */;
+		name = "sqSqueakOSXApplication.m: 262";
+		rLen = 13;
+		rLoc = 8195;
+		rType = 0;
+		vrLen = 1962;
+		vrLoc = 6398;
+	};
+	9441DB7111E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 9452D5D80E044A9D000AD792 /* Queue.m */;
+		name = "Queue.m: 117";
+		rLen = 2;
+		rLoc = 3624;
+		rType = 0;
+		vrLen = 893;
+		vrLoc = 2784;
+	};
+	9441DB7211E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 946DA91410C0C71100F26F56 /* sqSqueakOSXDropAPI.m */;
+		name = "sqSqueakOSXDropAPI.m: 53";
+		rLen = 45;
+		rLoc = 2070;
+		rType = 0;
+		vrLen = 2385;
+		vrLoc = 718;
+	};
+	9441DB7311E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 9471D2720E04703B00703D45 /* sqSqueakScreenAndWindow.m */;
+		name = "sqSqueakScreenAndWindow.m: 96";
+		rLen = 77;
+		rLoc = 2971;
+		rType = 0;
+		vrLen = 1309;
+		vrLoc = 2361;
+	};
+	9441DB7411E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94EF6CBF11E55947003BA64D /* interp.c */;
+		name = "interp.c: 24055";
+		rLen = 20;
+		rLoc = 712861;
+		rType = 0;
+		vrLen = 1491;
+		vrLoc = 711973;
+	};
+	9441DB7511E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94A3488D0DDCCCC700D1D4A9 /* sqSqueakScreenAPI.m */;
+		name = "sqSqueakScreenAPI.m: 79";
+		rLen = 34;
+		rLoc = 2583;
+		rType = 0;
+		vrLen = 1566;
+		vrLoc = 1970;
+	};
+	9441DB7711E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94584FD910F02378001401E7 /* sqMacExtendedClipboard.m */;
+		name = "sqMacExtendedClipboard.m: 101";
+		rLen = 40;
+		rLoc = 3679;
+		rType = 0;
+		vrLen = 2396;
+		vrLoc = 1736;
+	};
+	9441DB7811E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 9428BB0510BB478600DAD287 /* sqSqueakOSXApplication+clipboard.m */;
+		name = "sqSqueakOSXApplication+clipboard.m: 75";
+		rLen = 103;
+		rLoc = 3155;
+		rType = 0;
+		vrLen = 2666;
+		vrLoc = 947;
+	};
+	9441DB7911E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 945851EF10F03E60001401E7 /* sqMacExtendedClipboard.m */;
+		name = "sqMacExtendedClipboard.m: 45";
+		rLen = 53;
+		rLoc = 1608;
+		rType = 0;
+		vrLen = 2334;
+		vrLoc = 122;
+	};
+	9441DB7A11E6805300345F6C /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
+		name = "sqSqueakOSXNSView.m: 529";
+		rLen = 2;
+		rLoc = 19260;
+		rType = 0;
+		vrLen = 1841;
+		vrLoc = 18350;
+	};
 	94476EC40EBFAB320095D6D7 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94E659140DDD03FE00358328 /* SoundGenerationPlugin.c */;
@@ -1723,17 +1683,17 @@
 	};
 	9452D5D80E044A9D000AD792 /* Queue.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {970, 1612}}";
-			sepNavSelRange = "{3222, 18}";
-			sepNavVisRange = "{2686, 983}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 1612}}";
+			sepNavSelRange = "{3624, 2}";
+			sepNavVisRange = "{2784, 893}";
 			sepNavWindowFrame = "{{38, 12}, {1017, 978}}";
 		};
 	};
 	9452D5D90E044A9D000AD792 /* sqMacV2Time.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1368, 2119}}";
-			sepNavSelRange = "{2421, 10}";
-			sepNavVisRange = "{1930, 1046}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 2080}}";
+			sepNavSelRange = "{2417, 19}";
+			sepNavVisRange = "{1345, 1264}";
 			sepNavWindowFrame = "{{86, 36}, {1441, 887}}";
 		};
 	};
@@ -1769,9 +1729,9 @@
 	};
 	9452D5DE0E044A9D000AD792 /* sqSqueakFileDirectoryInterface.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1368, 4225}}";
-			sepNavSelRange = "{2286, 0}";
-			sepNavVisRange = "{1789, 1511}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 4108}}";
+			sepNavSelRange = "{6369, 42}";
+			sepNavVisRange = "{5230, 2137}";
 			sepNavWindowFrame = "{{101, 4}, {1064, 1024}}";
 		};
 	};
@@ -2074,9 +2034,9 @@
 	};
 	94584FD910F02378001401E7 /* sqMacExtendedClipboard.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1062, 1469}}";
-			sepNavSelRange = "{2557, 0}";
-			sepNavVisRange = "{2199, 1891}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 1469}}";
+			sepNavSelRange = "{3679, 40}";
+			sepNavVisRange = "{1736, 2396}";
 			sepNavWindowFrame = "{{242, 4}, {1438, 968}}";
 		};
 	};
@@ -2102,44 +2062,10 @@
 		ignoreCount = 0;
 		lineNumber = 101;
 		location = Squeak;
-		modificationTime = 300309947.562642;
+		modificationTime = 300338706.927649;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
-	945851AC10F03D1F001401E7 /* sqSqueakOSXApplication+clipboard.m:69 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 9428BB0510BB478600DAD287 /* sqSqueakOSXApplication+clipboard.m */;
-		functionName = "-clipboardRead:into:startingAt:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 69;
-		modificationTime = 300309947.151274;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
-	};
-	945851AE10F03D20001401E7 /* sqSqueakOSXApplication+clipboard.m:75 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 9428BB0510BB478600DAD287 /* sqSqueakOSXApplication+clipboard.m */;
-		functionName = "-clipboardWrite:from:startingAt:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 75;
-		modificationTime = 300309947.151286;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
-	};
 	945851EE10F03E60001401E7 /* sqMacExtendedClipboard.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {1331, 873}}";
@@ -2150,9 +2076,9 @@
 	};
 	945851EF10F03E60001401E7 /* sqMacExtendedClipboard.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1062, 1365}}";
-			sepNavSelRange = "{3036, 111}";
-			sepNavVisRange = "{1719, 1665}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 1365}}";
+			sepNavSelRange = "{1608, 53}";
+			sepNavVisRange = "{122, 2334}";
 			sepNavWindowFrame = "{{61, 13}, {1438, 968}}";
 		};
 	};
@@ -2169,7 +2095,7 @@
 		ignoreCount = 0;
 		lineNumber = 37;
 		location = Squeak;
-		modificationTime = 300309947.631659;
+		modificationTime = 300338706.955137;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2186,7 +2112,7 @@
 		ignoreCount = 0;
 		lineNumber = 45;
 		location = Squeak;
-		modificationTime = 300309947.679507;
+		modificationTime = 300338707.002116;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2203,7 +2129,7 @@
 		ignoreCount = 0;
 		lineNumber = 50;
 		location = Squeak;
-		modificationTime = 300309947.731767;
+		modificationTime = 300338707.038441;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2220,7 +2146,7 @@
 		ignoreCount = 0;
 		lineNumber = 72;
 		location = Squeak;
-		modificationTime = 300309947.763045;
+		modificationTime = 300338707.085007;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2237,7 +2163,7 @@
 		ignoreCount = 0;
 		lineNumber = 88;
 		location = Squeak;
-		modificationTime = 300309947.819219;
+		modificationTime = 300338707.112141;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2282,7 +2208,7 @@
 		ignoreCount = 0;
 		lineNumber = 31;
 		location = Squeak;
-		modificationTime = 300309947.863804;
+		modificationTime = 300338707.158902;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2299,7 +2225,7 @@
 		ignoreCount = 0;
 		lineNumber = 24;
 		location = Squeak;
-		modificationTime = 300309947.920558;
+		modificationTime = 300338707.194541;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2316,7 +2242,7 @@
 		ignoreCount = 0;
 		lineNumber = 17;
 		location = Squeak;
-		modificationTime = 300309947.94795;
+		modificationTime = 300338707.24126;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -2344,42 +2270,6 @@
 		path = /Developer/SDKs/MacOSX10.6.sdk/usr/include/libkern/OSTypes.h;
 		sourceTree = "<absolute>";
 	};
-	945C4E6310BB29B500548CC1 /* sqSqueakFileDirectoryInterface.m:117 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 9452D5DE0E044A9D000AD792 /* sqSqueakFileDirectoryInterface.m */;
-		functionName = "-dir_Lookup:length:index:name:length:creationDate:modificationDate:isDirectory:sizeIfFile:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 117;
-		location = Squeak;
-		modificationTime = 300309947.151016;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	945C4E8010BB2CE000548CC1 /* sqSqueakFileDirectoryInterface.m:101 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 9452D5DE0E044A9D000AD792 /* sqSqueakFileDirectoryInterface.m */;
-		functionName = "-dir_Lookup:length:index:name:length:creationDate:modificationDate:isDirectory:sizeIfFile:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 101;
-		location = Squeak;
-		modificationTime = 300309947.15103;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
 	945C4EAC10BB348300548CC1 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94BCAAE810AB6C3500F87527 /* NSFileManager.h */;
@@ -2433,9 +2323,9 @@
 	};
 	94638B260EAFB77B00A3F155 /* iPhone.changes */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1368, 1.71565e+06}}";
-			sepNavSelRange = "{5337079, 32}";
-			sepNavVisRange = "{5336099, 2682}";
+			sepNavIntBoundsRect = "{{0, 0}, {1368, 1.73259e+06}}";
+			sepNavSelRange = "{5334311, 33}";
+			sepNavVisRange = "{5333027, 2419}";
 		};
 	};
 	94638BD10EB0F98000A3F155 /* PBXTextBookmark */ = {
@@ -2619,28 +2509,12 @@
 	};
 	946DA91410C0C71100F26F56 /* sqSqueakOSXDropAPI.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1368, 1066}}";
-			sepNavSelRange = "{2317, 4}";
-			sepNavVisRange = "{1434, 1612}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 1066}}";
+			sepNavSelRange = "{2070, 45}";
+			sepNavVisRange = "{718, 2385}";
 			sepNavWindowFrame = "{{15, 13}, {1326, 1010}}";
 		};
 	};
-	946DA99210C0CE1900F26F56 /* sqSqueakOSXDropAPI.m:79 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 946DA91410C0C71100F26F56 /* sqSqueakOSXDropAPI.m */;
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 79;
-		modificationTime = 300309947.15115;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
-	};
 	946DA9FF10C0D35500F26F56 /* sqMacUnixExternalPrims.m */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {1368, 4004}}";
@@ -2700,23 +2574,6 @@
 		path = "/Users/johnmci/Documents/SqueakHydraZBaseCheck/HydraVM-src/platforms/unix/vm/sqUnixExternalPrims.c";
 		sourceTree = "<absolute>";
 	};
-	946DAB1210C0F00400F26F56 /* sqMacUnixExternalPrims.m:218 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 946DA9FF10C0D35500F26F56 /* sqMacUnixExternalPrims.m */;
-		functionName = "ioLoadModuleRaw()";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 218;
-		modificationTime = 300309947.151163;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
-	};
 	946DAB5110C0F2B000F26F56 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 946DA8D210C0C30D00F26F56 /* DropPlugin.c */;
@@ -2738,8 +2595,8 @@
 	9471D2720E04703B00703D45 /* sqSqueakScreenAndWindow.m */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {1496, 2691}}";
-			sepNavSelRange = "{6415, 0}";
-			sepNavVisRange = "{4672, 1743}";
+			sepNavSelRange = "{2971, 77}";
+			sepNavVisRange = "{2361, 1309}";
 			sepNavWindowFrame = "{{148, 9}, {1131, 1019}}";
 		};
 	};
@@ -2815,6 +2672,88 @@
 		vrLen = 2361;
 		vrLoc = 9051;
 	};
+	9475A76411E6817D0010FB38 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 9452D5D90E044A9D000AD792 /* sqMacV2Time.c */;
+		name = "sqMacV2Time.c: 64";
+		rLen = 19;
+		rLoc = 2417;
+		rType = 0;
+		vrLen = 1264;
+		vrLoc = 1345;
+	};
+	9475A80511E695600010FB38 /* PlistBookmark */ = {
+		isa = PlistBookmark;
+		fRef = 947E5F9F10A9FFA000D3B69E /* SqueakPureObjc-Info.plist */;
+		fallbackIsa = PBXBookmark;
+		isK = 0;
+		kPath = (
+		);
+		name = "/Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/SqueakPureObjc-Info.plist";
+		rLen = 0;
+		rLoc = 9223372036854775808;
+	};
+	9475A80611E695600010FB38 /* PlistBookmark */ = {
+		isa = PlistBookmark;
+		fRef = 949AD14911E542E8006D6BF4 /* SqueakPureObjc-InfoCOG.plist */;
+		fallbackIsa = PBXBookmark;
+		isK = 0;
+		kPath = (
+			CFBundleName,
+		);
+		name = "/Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/SqueakPureObjc-InfoCOG.plist";
+		rLen = 0;
+		rLoc = 9223372036854775808;
+	};
+	9475A80711E695600010FB38 /* PlistBookmark */ = {
+		isa = PlistBookmark;
+		fRef = 948774B110C64DD800E4AEC5 /* SqueakPureObjc-Info 64*64.plist */;
+		fallbackIsa = PBXBookmark;
+		isK = 0;
+		kPath = (
+		);
+		name = "/Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/SqueakPureObjc-Info 64*64.plist";
+		rLen = 0;
+		rLoc = 9223372036854775808;
+	};
+	9475A81411E6959C0010FB38 /* ObjectiveCPlugin.c:1770 */ = {
+		isa = PBXFileBreakpoint;
+		actions = (
+		);
+		breakpointStyle = 0;
+		continueAfterActions = 0;
+		countType = 0;
+		delayBeforeContinue = 0;
+		fileReference = 94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */;
+		functionName = "primitivePerformSelector()";
+		hitCount = 0;
+		ignoreCount = 0;
+		lineNumber = 1770;
+		location = Squeak;
+		modificationTime = 300338706.45692;
+		originalNumberOfMultipleMatches = 1;
+		state = 2;
+	};
+	9475A83511E6B5D50010FB38 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 9478E02B0EC8D957007096A7 /* squeakSUnitTester.m */;
+		name = "squeakSUnitTester.m: 126";
+		rLen = 19;
+		rLoc = 3571;
+		rType = 0;
+		vrLen = 843;
+		vrLoc = 2970;
+	};
+	9475A87511E6BEF90010FB38 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */;
+		name = "ObjectiveCPlugin.c: 2054";
+		rLen = 0;
+		rLoc = 60509;
+		rType = 0;
+		vrLen = 1148;
+		vrLoc = 28660;
+	};
 	9475F4DB10BEF4100047A24B /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94E4936F10BD39E20011AC75 /* sqUnixQuartz.m */;
@@ -2859,58 +2798,6 @@
 		vrLen = 1966;
 		vrLoc = 0;
 	};
-	9476030E10C375C300B621C9 /* sqSqueakOSXApplication.m:257 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 947E64CB10AA16FE00D3B69E /* sqSqueakOSXApplication.m */;
-		functionName = "-isImageFile:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 257;
-		modificationTime = 300309947.151181;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
-	};
-	9476031010C375C600B621C9 /* sqSqueakOSXApplication.m:262 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 947E64CB10AA16FE00D3B69E /* sqSqueakOSXApplication.m */;
-		functionName = "-isImageFile:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 262;
-		modificationTime = 300309947.151192;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
-	};
-	947713B610C45C0A00890A9B /* Queue.m:117 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 9452D5D80E044A9D000AD792 /* Queue.m */;
-		functionName = "-dealloc";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 117;
-		location = Squeak;
-		modificationTime = 300309947.15121;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
 	947713C410C45DD700890A9B /* NSDebug.h */ = {
 		isa = PBXFileReference;
 		lastKnownFileType = sourcecode.c.h;
@@ -2928,17 +2815,6 @@
 		vrLen = 2334;
 		vrLoc = 74;
 	};
-	94783A3D11D135AD00AF11A9 /* PlistBookmark */ = {
-		isa = PlistBookmark;
-		fRef = 941D1C9A0E696FC7005B77B3 /* Entitlements.plist */;
-		fallbackIsa = PBXBookmark;
-		isK = 0;
-		kPath = (
-		);
-		name = /Volumes/px2/business/SqueakiPhone/SqueakObjCBasedForOSXAndIPhone/SqueakNoOGLIPhoneOSX/platforms/iOS/vm/Entitlements.plist;
-		rLen = 0;
-		rLoc = 9223372036854775808;
-	};
 	94783A3E11D135AD00AF11A9 /* PlistBookmark */ = {
 		isa = PlistBookmark;
 		fRef = 94C36C9710B0CF290041953A /* Info-iPhone.plist */;
@@ -2975,9 +2851,9 @@
 	};
 	9478E02B0EC8D957007096A7 /* squeakSUnitTester.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1283, 5928}}";
-			sepNavSelRange = "{12415, 0}";
-			sepNavVisRange = "{11760, 1507}";
+			sepNavIntBoundsRect = "{{0, 0}, {1327, 6136}}";
+			sepNavSelRange = "{3608, 0}";
+			sepNavVisRange = "{2696, 1348}";
 		};
 	};
 	9478E0320EC8D98F007096A7 /* sqSqueakSoundCoreAudioAPI.h */ = {
@@ -3067,9 +2943,9 @@
 	};
 	947E20F50EB281C5007957D0 /* SqueakFFIPrims.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1132, 37219}}";
-			sepNavSelRange = "{55509, 0}";
-			sepNavVisRange = "{55080, 1849}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 37440}}";
+			sepNavSelRange = "{75408, 0}";
+			sepNavVisRange = "{75315, 897}";
 			sepNavWindowFrame = "{{15, 4}, {1385, 1024}}";
 		};
 	};
@@ -3383,9 +3259,9 @@
 	};
 	947E64CB10AA16FE00D3B69E /* sqSqueakOSXApplication.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {887, 3497}}";
-			sepNavSelRange = "{7081, 12}";
-			sepNavVisRange = "{0, 2355}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 3497}}";
+			sepNavSelRange = "{8195, 13}";
+			sepNavVisRange = "{6398, 1962}";
 			sepNavWindowFrame = "{{522, 48}, {1017, 978}}";
 		};
 	};
@@ -3548,9 +3424,9 @@
 	};
 	94883B400E0C2B9C005A4738 /* sqUnixSocket.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1132, 27664}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1160, 27690}}";
 			sepNavSelRange = "{1962, 1}";
-			sepNavVisRange = "{1819, 1200}";
+			sepNavVisRange = "{2066, 1398}";
 			sepNavWindowFrame = "{{38, 14}, {799, 988}}";
 		};
 	};
@@ -3720,9 +3596,9 @@
 	};
 	9494928011E5178D0019BC29 /* gcc3x-cointerp.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1368, 573690}}";
-			sepNavSelRange = "{1005988, 10}";
-			sepNavVisRange = "{1005360, 1323}";
+			sepNavIntBoundsRect = "{{0, 0}, {1338, 573521}}";
+			sepNavSelRange = "{493867, 15}";
+			sepNavVisRange = "{492894, 1814}";
 			sepNavWindowFrame = "{{15, 4}, {1385, 1024}}";
 		};
 	};
@@ -3749,9 +3625,9 @@
 	};
 	949492C411E51C6B0019BC29 /* sqAtomicOps.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1132, 2626}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 2652}}";
 			sepNavSelRange = "{5280, 19}";
-			sepNavVisRange = "{4398, 2104}";
+			sepNavVisRange = "{4371, 2230}";
 			sepNavWindowFrame = "{{122, -62}, {1573, 1024}}";
 		};
 	};
@@ -3765,9 +3641,10 @@
 	};
 	9494932C11E527180019BC29 /* sqUnixHeartbeat.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1368, 8996}}";
-			sepNavSelRange = "{2078, 16}";
-			sepNavVisRange = "{1433, 1225}";
+			sepNavIntBoundsRect = "{{0, 0}, {1526, 8736}}";
+			sepNavSelRange = "{2077, 21}";
+			sepNavVisRange = "{1045, 2432}";
+			sepNavWindowFrame = "{{15, 4}, {1573, 1024}}";
 		};
 	};
 	9494932D11E527180019BC29 /* sqUnixThreads.c */ = {
@@ -3785,16 +3662,6 @@
 			sepNavWindowFrame = "{{15, 4}, {1573, 1024}}";
 		};
 	};
-	9494933711E5274B0019BC29 /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 94A3488D0DDCCCC700D1D4A9 /* sqSqueakScreenAPI.m */;
-		name = "sqSqueakScreenAPI.m: 78";
-		rLen = 0;
-		rLoc = 2582;
-		rType = 0;
-		vrLen = 1569;
-		vrLoc = 2410;
-	};
 	9494933A11E5274B0019BC29 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 9494933B11E5274B0019BC29 /* malloc.h */;
@@ -3872,9 +3739,9 @@
 	};
 	949493BF11E52ADE0019BC29 /* aio.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1132, 5057}}";
-			sepNavSelRange = "{0, 0}";
-			sepNavVisRange = "{0, 1983}";
+			sepNavIntBoundsRect = "{{0, 0}, {1368, 5187}}";
+			sepNavSelRange = "{4502, 1}";
+			sepNavVisRange = "{4248, 1034}";
 		};
 	};
 	9494944B11E52D570019BC29 /* PBXTextBookmark */ = {
@@ -3887,42 +3754,6 @@
 		vrLen = 2348;
 		vrLoc = 0;
 	};
-	9495E43B10C9DFDD003E3D28 /* aio.c:235 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 949493BF11E52ADE0019BC29 /* aio.c */;
-		functionName = "aioPoll()";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 235;
-		location = Squeak;
-		modificationTime = 300309947.530433;
-		originalNumberOfMultipleMatches = 1;
-		state = 1;
-	};
-	9496D5CD10FAFA29007762DE /* sqSqueakOSXNSView.m:352 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-doCommandBySelector:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 352;
-		location = Squeak;
-		modificationTime = 300309947.151428;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
 	949AD35211E54A81006D6BF4 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 9424FF660DDCB1EF009912BF /* sqConfig.h */;
@@ -4100,23 +3931,6 @@
 			sepNavVisRange = "{0, 1901}";
 		};
 	};
-	94A1B1B810B9C1A800C64473 /* sqMacUIEventsUniversal.c:1429 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 942ABEC410AA34820086D908 /* sqMacUIEventsUniversal.c */;
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 1429;
-		location = "Squeak VM Opt";
-		modificationTime = 300309947.151005;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
 	94A1B21A10B9DE0300C64473 /* keyBoardStrokeDetails.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {1279, 859}}";
@@ -4176,9 +3990,9 @@
 	};
 	94A3488D0DDCCCC700D1D4A9 /* sqSqueakScreenAPI.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1132, 1976}}";
-			sepNavSelRange = "{4300, 0}";
-			sepNavVisRange = "{2865, 1439}";
+			sepNavIntBoundsRect = "{{0, 0}, {1132, 1768}}";
+			sepNavSelRange = "{2583, 34}";
+			sepNavVisRange = "{1970, 1566}";
 			sepNavWindowFrame = "{{21, 20}, {694, 1008}}";
 		};
 	};
@@ -4189,60 +4003,6 @@
 			sepNavVisRange = "{1158, 1564}";
 		};
 	};
-	94A3F8DA11E6506A008113C6 /* ObjectiveCPlugin.c:1418 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */;
-		functionName = "primitiveNSInvocationSetSelector()";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 1418;
-		location = Squeak;
-		modificationTime = 300309948.289467;
-		originalNumberOfMultipleMatches = 1;
-		state = 1;
-	};
-	94A3F8DC11E65074008113C6 /* ObjectiveCPlugin.c:1426 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */;
-		functionName = "primitiveNSInvocationSetSelector()";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 1426;
-		location = Squeak;
-		modificationTime = 300309948.316902;
-		originalNumberOfMultipleMatches = 1;
-		state = 1;
-	};
-	94A3F8DE11E6507C008113C6 /* ObjectiveCPlugin.c:1412 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */;
-		functionName = "primitiveNSInvocationSetSelector()";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 1412;
-		location = Squeak;
-		modificationTime = 300309948.369211;
-		originalNumberOfMultipleMatches = 1;
-		state = 1;
-	};
 	94A3F91B11E6564F008113C6 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 949492C311E51C6B0019BC29 /* sqExternalSemaphores.c */;
@@ -4253,43 +4013,6 @@
 		vrLen = 1829;
 		vrLoc = 5722;
 	};
-	94A3F92411E65CB5008113C6 /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 94EF6CBE11E55947003BA64D /* gcc3x-interp.c */;
-		name = "gcc3x-interp.c: 38978";
-		rLen = 0;
-		rLoc = 1130253;
-		rType = 0;
-		vrLen = 1678;
-		vrLoc = 750000;
-	};
-	94A3F92511E65CB5008113C6 /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */;
-		name = "ObjectiveCPlugin.c: 1408";
-		rLen = 0;
-		rLoc = 39280;
-		rType = 0;
-		vrLen = 1786;
-		vrLoc = 38190;
-	};
-	94A3F92611E65CB5008113C6 /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 949492C411E51C6B0019BC29 /* sqAtomicOps.h */;
-		rLen = 8;
-		rLoc = 5332;
-		rType = 0;
-	};
-	94A3F95811E65EBC008113C6 /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 949492C411E51C6B0019BC29 /* sqAtomicOps.h */;
-		name = "sqAtomicOps.h: 143";
-		rLen = 19;
-		rLoc = 5280;
-		rType = 0;
-		vrLen = 2104;
-		vrLoc = 4398;
-	};
 	94AB2E6A0E003879006A79E4 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94AB2E6B0E003879006A79E4 /* npsqueak.c */;
@@ -4712,23 +4435,6 @@
 			sepNavVisRange = "{0, 2172}";
 		};
 	};
-	94C0D1AC112D5DAE00213581 /* sqSqueakScreenAPI.m:79 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94A3488D0DDCCCC700D1D4A9 /* sqSqueakScreenAPI.m */;
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 79;
-		location = Squeak;
-		modificationTime = 300309947.151465;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
 	94C2068810AF4F53002F4160 /* sqSqueakOSXNSView.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {1279, 1157}}";
@@ -4739,9 +4445,9 @@
 	};
 	94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1139, 9490}}";
-			sepNavSelRange = "{10951, 0}";
-			sepNavVisRange = "{9840, 2287}";
+			sepNavIntBoundsRect = "{{0, 0}, {1629, 8723}}";
+			sepNavSelRange = "{19260, 2}";
+			sepNavVisRange = "{18350, 1841}";
 			sepNavWindowFrame = "{{10, 7}, {1076, 1021}}";
 		};
 	};
@@ -5044,6 +4750,16 @@
 			sepNavWindowFrame = "{{15, 55}, {1438, 968}}";
 		};
 	};
+	94C3AC8C11E6CC9800DBE1E9 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */;
+		name = "ObjectiveCPlugin.c: 2054";
+		rLen = 0;
+		rLoc = 60509;
+		rType = 0;
+		vrLen = 1529;
+		vrLoc = 24140;
+	};
 	94C4B80F10C06C4700CD4F90 /* configx.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {994, 799}}";
@@ -5545,113 +5261,6 @@
 		vrLen = 1347;
 		vrLoc = 59154;
 	};
-	94D7181B10B74A2500F69A71 /* sqSqueakOSXNSView.m:465 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 465;
-		location = Squeak;
-		modificationTime = 300309947.150881;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	94D7181D10B74A2600F69A71 /* sqSqueakOSXNSView.m:461 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-firstRectForCharacterRange:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 461;
-		location = Squeak;
-		modificationTime = 300309947.150934;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	94D7182310B74A2900F69A71 /* sqSqueakOSXNSView.m:449 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-attributedSubstringFromRange:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 449;
-		location = Squeak;
-		modificationTime = 300309947.150951;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	94D7182910B74A4A00F69A71 /* sqSqueakOSXNSView.m:437 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-unmarkText";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 437;
-		location = Squeak;
-		modificationTime = 300309947.150962;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	94D7182D10B74A4E00F69A71 /* sqSqueakOSXNSView.m:445 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-conversationIdentifier";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 445;
-		location = Squeak;
-		modificationTime = 300309947.150977;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	94D7183310B74BD100F69A71 /* sqSqueakOSXNSView.m:474 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-drawsVerticallyForCharacterAtIndex:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 474;
-		location = Squeak;
-		modificationTime = 300309947.150988;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
 	94D7183810B74BF300F69A71 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94D7183910B74BF300F69A71 /* NSInputManager.h */;
@@ -6031,7 +5640,7 @@
 		ignoreCount = 0;
 		lineNumber = 64;
 		location = Squeak;
-		modificationTime = 300309948.053212;
+		modificationTime = 300338707.316301;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -6191,23 +5800,6 @@
 		vrLen = 2725;
 		vrLoc = 0;
 	};
-	94E583DF10BF43A40073FD63 /* sqSqueakOSXNSView.m:326 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-insertText:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 326;
-		modificationTime = 300309947.151141;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
-	};
 	94E5846510BF67600073FD63 /* NSResponder.h */ = {
 		isa = PBXFileReference;
 		lastKnownFileType = sourcecode.c.h;
@@ -6995,23 +6587,6 @@
 		path = "/Users/johnmci/Documents/Squeak3.8.0/History/4.2.4b1/platforms/unix/vm-display-Quartz/sqUnixQuartz.m";
 		sourceTree = "<absolute>";
 	};
-	94E8EF1211C950540049D853 /* sqSqueakOSXNSView.m:118 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-initWithFrame:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 118;
-		modificationTime = 300309947.151523;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
-	};
 	94ED7EFA0E6C2ABE00F4DD03 /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94ED7EFB0E6C2ABE00F4DD03 /* Document.m */;
@@ -7039,36 +6614,92 @@
 		vrLen = 2098;
 		vrLoc = 0;
 	};
-	94EECBD811C76107001AFA91 /* interp.c:24055 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
+	94EEEF8911E6CE4C00F15DC6 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 947E20F50EB281C5007957D0 /* SqueakFFIPrims.c */;
+		name = "SqueakFFIPrims.c: 2508";
+		rLen = 0;
+		rLoc = 75408;
+		rType = 0;
+		vrLen = 897;
+		vrLoc = 75315;
+	};
+	94EEEF9411E6D0B100F15DC6 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94EF6CBE11E55947003BA64D /* gcc3x-interp.c */;
+		name = "gcc3x-interp.c: 36774";
+		rLen = 0;
+		rLoc = 1062140;
+		rType = 0;
+		vrLen = 1481;
+		vrLoc = 1061660;
+	};
+	94EEEF9511E6D0B100F15DC6 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94883B400E0C2B9C005A4738 /* sqUnixSocket.c */;
+		name = "sqUnixSocket.c: 53";
+		rLen = 1;
+		rLoc = 1962;
+		rType = 0;
+		vrLen = 1398;
+		vrLoc = 2066;
+	};
+	94EEEF9611E6D0B100F15DC6 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 949493BF11E52ADE0019BC29 /* aio.c */;
+		name = "aio.c: 272";
+		rLen = 7;
+		rLoc = 6502;
+		rType = 0;
+		vrLen = 1226;
+		vrLoc = 4823;
+	};
+	94EEEF9711E6D0B100F15DC6 /* PlistBookmark */ = {
+		isa = PlistBookmark;
+		fRef = 941D1C9A0E696FC7005B77B3 /* Entitlements.plist */;
+		fallbackIsa = PBXBookmark;
+		isK = 0;
+		kPath = (
+			"get-task-allow",
 		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94EF6CBF11E55947003BA64D /* interp.c */;
-		functionName = "sweepPhase()";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 24055;
-		modificationTime = 300309947.151507;
-		originalNumberOfMultipleMatches = 1;
-		state = 0;
+		name = /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/Entitlements.plist;
+		rLen = 0;
+		rLoc = 9223372036854775807;
 	};
+	94EEEF9C11E6D0B200F15DC6 /* PlistBookmark */ = {
+		isa = PlistBookmark;
+		fRef = 941D1C9A0E696FC7005B77B3 /* Entitlements.plist */;
+		fallbackIsa = PBXBookmark;
+		isK = 0;
+		kPath = (
+		);
+		name = /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/Entitlements.plist;
+		rLen = 0;
+		rLoc = 9223372036854775807;
+	};
+	94EEEF9D11E6D0B200F15DC6 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 94210B280E956AC200C1A314 /* ObjectiveCPlugin.c */;
+		name = "ObjectiveCPlugin.c: 2054";
+		rLen = 0;
+		rLoc = 60509;
+		rType = 0;
+		vrLen = 1529;
+		vrLoc = 24140;
+	};
 	94EF6CBE11E55947003BA64D /* gcc3x-interp.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1132, 507026}}";
-			sepNavSelRange = "{1130253, 0}";
-			sepNavVisRange = "{750000, 1678}";
+			sepNavIntBoundsRect = "{{0, 0}, {1783, 506766}}";
+			sepNavSelRange = "{1062140, 0}";
+			sepNavVisRange = "{1061660, 1481}";
 		};
 	};
 	94EF6CBF11E55947003BA64D /* interp.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1368, 506467}}";
-			sepNavSelRange = "{849421, 10}";
-			sepNavVisRange = "{848845, 1006}";
-			sepNavWindowFrame = "{{76, 4}, {1573, 1024}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1622, 505635}}";
+			sepNavSelRange = "{381974, 15}";
+			sepNavVisRange = "{381021, 1683}";
+			sepNavWindowFrame = "{{107, 4}, {1573, 1024}}";
 		};
 	};
 	94EF6CC011E55947003BA64D /* interp.h */ = {
@@ -7135,16 +6766,6 @@
 		path = "/Volumes/330GB Photos/Cog/platforms/unix/plugins/UUIDPlugin/sqUnixUUID.c";
 		sourceTree = "<absolute>";
 	};
-	94EF6D0111E55BAC003BA64D /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 949493BF11E52ADE0019BC29 /* aio.c */;
-		name = "aio.c: 1";
-		rLen = 0;
-		rLoc = 0;
-		rType = 0;
-		vrLen = 1983;
-		vrLoc = 0;
-	};
 	94EF6E2811E56355003BA64D /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94EF6CC011E55947003BA64D /* interp.h */;
@@ -7189,7 +6810,7 @@
 		ignoreCount = 0;
 		lineNumber = 168;
 		location = Squeak;
-		modificationTime = 300309948.013706;
+		modificationTime = 300338707.267723;
 		originalNumberOfMultipleMatches = 1;
 		state = 1;
 	};
@@ -7213,16 +6834,6 @@
 		vrLen = 2178;
 		vrLoc = 76358;
 	};
-	94EF6FD611E57601003BA64D /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 94EF6CBF11E55947003BA64D /* interp.c */;
-		name = "interp.c: 1";
-		rLen = 0;
-		rLoc = 0;
-		rType = 0;
-		vrLen = 1471;
-		vrLoc = 121;
-	};
 	94EF701E11E57905003BA64D /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 9494932E11E527180019BC29 /* sqUnixVMProfile.c */;
@@ -7360,60 +6971,6 @@
 		vrLen = 1899;
 		vrLoc = 192393;
 	};
-	94F5F28710BC517200847EEE /* sqSqueakOSXNSView.m:432 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-setMarkedText:selectedRange:replacementRange:";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 432;
-		location = Squeak;
-		modificationTime = 300309947.151097;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	94F5F28B10BC517500847EEE /* sqSqueakOSXNSView.m:453 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-markedRange";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 453;
-		location = Squeak;
-		modificationTime = 300309947.151112;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
-	94F5F28D10BC517700847EEE /* sqSqueakOSXNSView.m:457 */ = {
-		isa = PBXFileBreakpoint;
-		actions = (
-		);
-		breakpointStyle = 0;
-		continueAfterActions = 0;
-		countType = 0;
-		delayBeforeContinue = 0;
-		fileReference = 94C2068910AF4F53002F4160 /* sqSqueakOSXNSView.m */;
-		functionName = "-selectedRange";
-		hitCount = 0;
-		ignoreCount = 0;
-		lineNumber = 457;
-		location = Squeak;
-		modificationTime = 300309947.151127;
-		originalNumberOfMultipleMatches = 1;
-		state = 2;
-	};
 	94F5F29110BC518B00847EEE /* PBXTextBookmark */ = {
 		isa = PBXTextBookmark;
 		fRef = 94D7178F10B73A3800F69A71 /* SqueakInterpreterEventSensor.h */;
@@ -7485,18 +7042,6 @@
 		path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSSet.h;
 		sourceTree = "<absolute>";
 	};
-	94F68BCA11E5535F00D8C904 /* PlistBookmark */ = {
-		isa = PlistBookmark;
-		fRef = 949AD14911E542E8006D6BF4 /* SqueakPureObjc-InfoCOG.plist */;
-		fallbackIsa = PBXBookmark;
-		isK = 0;
-		kPath = (
-			CFBundleName,
-		);
-		name = "/Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/SqueakPureObjc-InfoCOG.plist";
-		rLen = 0;
-		rLoc = 9223372036854775808;
-	};
 	94F8798F0E6C0C7E00662DEA /* sqSqueakIPhoneInfoPlistInterface.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {1036, 652}}";

Modified: trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/project.pbxproj
===================================================================
--- trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/project.pbxproj	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/SqueakPureObjcCogVM.xcodeproj/project.pbxproj	2010-07-09 03:40:43 UTC (rev 2231)
@@ -2305,6 +2305,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
 				CODE_SIGN_ENTITLEMENTS = "";
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -2327,11 +2328,11 @@
 				);
 				GCC_THUMB_SUPPORT = NO;
 				INFOPLIST_FILE = "Info-iPhone.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 3.1.3;
+				IPHONEOS_DEPLOYMENT_TARGET = 3.0;
 				PRODUCT_NAME = Squeak;
 				PROVISIONING_PROFILE = "";
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
-				SDKROOT = iphoneos3.2;
+				SDKROOT = iphoneos4.0;
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};
 			name = Debug;
@@ -2430,9 +2431,8 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
 				CODE_SIGN_ENTITLEMENTS = Entitlements.plist;
-				CODE_SIGN_IDENTITY = "iPhone Distribution";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
 				COPY_PHASE_STRIP = YES;
 				GCC_PRECOMPILE_PREFIX_HEADER = YES;
@@ -2462,9 +2462,8 @@
 					"-fomit-frame-pointer",
 				);
 				PRODUCT_NAME = Squeak;
-				PROVISIONING_PROFILE = "";
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
-				SDKROOT = iphoneos3.2;
+				SDKROOT = iphoneos4.0;
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};
 			name = Distribution;

Modified: trunk/platforms/iOS/vm/iPhone/iPhone.changes
===================================================================
--- trunk/platforms/iOS/vm/iPhone/iPhone.changes	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/iPhone/iPhone.changes	2010-07-09 03:40:43 UTC (rev 2231)
@@ -131758,4 +131758,2965 @@
 
 "ObjectiveC-Test"!
 
-----QUIT/NOSAVE----an Array(28 January 2010 10:06:16 pm) iPhone.image priorSource: 5374935!
\ No newline at end of file
+----QUIT/NOSAVE----an Array(28 January 2010 10:06:16 pm) iPhone.image priorSource: 5374935!
+
+----STARTUP----an Array(8 July 2010 11:33:53 am) as /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/iPhone/iPhone.image!
+
+
+'From Squeak4.1 of 17 April 2010 [latest update: #9957] on 26 May 2010 at 11:31:30 am'!
+!Float methodsFor: 'accessing' stamp: 'eem 4/19/2009 18:03'!
+at: index 
+	^self basicAt: index! !
+!Float methodsFor: 'accessing' stamp: 'eem 4/19/2009 18:03'!
+at: index put: value 
+	^self basicAt: index put: value! !
+
+----QUIT/NOSAVE----an Array(8 July 2010 11:36:51 am) iPhone.image priorSource: 5374935!
+
+----STARTUP----an Array(8 July 2010 11:37:07 am) as /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/iPhone/iPhone.image!
+
+
+'From Squeak4.1 of 17 April 2010 [latest update: #9957] on 26 May 2010 at 11:31:30 am'!
+!Float methodsFor: 'accessing' stamp: 'eem 4/19/2009 18:03'!
+at: index 
+	^self basicAt: index! !
+!Float methodsFor: 'accessing' stamp: 'eem 4/19/2009 18:03'!
+at: index put: value 
+	^self basicAt: index put: value! !
+!Float methodsFor: 'accessing' stamp: 'eem 4/20/2009 09:34'!
+basicAt: index
+	"Primitive. Assumes receiver is indexable. Answer the value of an 
+	indexable element in the receiver. Fail if the argument index is not an 
+	Integer or is out of bounds. Essential. Do not override in a subclass. See 
+	Object documentation whatIsAPrimitive.
+
+	This version of basicAt: is specifically for floats, answering the most significant
+	word for index 1 and the least significant word for index 2.  This alows the VM
+	to store floats in whatever order it chooses while it appears to the image that
+	they are always in big-endian/PowerPC order."
+
+	<primitive: 38 >
+	| ec |
+	ec == nil ifTrue: "primitive not implemented; floats are in big-endian/PowerPC order."
+		[^super basicAt: index].
+	index isInteger ifTrue: [self errorSubscriptBounds: index].
+	index isNumber
+		ifTrue: [^self basicAt: index asInteger]
+		ifFalse: [self errorNonIntegerIndex]! !
+!Float methodsFor: 'accessing' stamp: 'eem 4/20/2009 09:35'!
+basicAt: index put: value
+	"Primitive. Assumes receiver is indexable. Store the second argument 
+	value in the indexable element of the receiver indicated by index. Fail 
+	if the index is not an Integer or is out of bounds. Or fail if the value is 
+	not of the right type for this kind of collection. Answer the value that 
+	was stored. Essential. Do not override in a subclass. See Object 
+	documentation whatIsAPrimitive.
+
+	This version of basicAt: is specifically for floats, answering the most significant
+	word for index 1 and the least significant word for index 2.  This alows the VM
+	to store floats in whatever order it chooses while it appears to the image that
+	they are always in big-endian/PowerPC order."
+
+	<primitive: 39 >
+	| ec |
+	ec == nil ifTrue: "primitive not implemented; floats are in big-endian/PowerPC order."
+		[^super basicAt: index put: value].
+	index isInteger
+		ifTrue: [(index >= 1 and: [index <= self size])
+					ifTrue: [self errorImproperStore]
+					ifFalse: [self errorSubscriptBounds: index]].
+	index isNumber
+		ifTrue: [^self basicAt: index asInteger put: value]
+		ifFalse: [self errorNonIntegerIndex]! !
+!SmalltalkImage methodsFor: 'special objects' stamp: 'eem 5/26/2010 11:28'!
+recreateSpecialObjectsArray
+	"Smalltalk recreateSpecialObjectsArray"
+	
+	"To external package developers:
+	**** DO NOT OVERRIDE THIS METHOD.  *****
+	If you are writing a plugin and need additional special object(s) for your own use, 
+	use addGCRoot() function and use own, separate special objects registry "
+	
+	"The Special Objects Array is an array of objects used by the Squeak virtual machine.
+	 Its contents are critical and accesses to it by the VM are unchecked, so don't even
+	 think of playing here unless you know what you are doing."
+	| newArray |
+	newArray := Array new: 55.
+	"Nil false and true get used throughout the interpreter"
+	newArray at: 1 put: nil.
+	newArray at: 2 put: false.
+	newArray at: 3 put: true.
+	"This association holds the active process (a ProcessScheduler)"
+	newArray at: 4 put: (self associationAt: #Processor).
+	"Numerous classes below used for type checking and instantiation"
+	newArray at: 5 put: Bitmap.
+	newArray at: 6 put: SmallInteger.
+	newArray at: 7 put: ByteString.
+	newArray at: 8 put: Array.
+	newArray at: 9 put: Smalltalk.
+	newArray at: 10 put: Float.
+	newArray at: 11 put: MethodContext.
+	newArray at: 12 put: BlockContext.
+	newArray at: 13 put: Point.
+	newArray at: 14 put: LargePositiveInteger.
+	newArray at: 15 put: Display.
+	newArray at: 16 put: Message.
+	newArray at: 17 put: CompiledMethod.
+	newArray at: 18 put: (self specialObjectsArray at: 18).
+	"(low space Semaphore)"
+	newArray at: 19 put: Semaphore.
+	newArray at: 20 put: Character.
+	newArray at: 21 put: #doesNotUnderstand:.
+	newArray at: 22 put: #cannotReturn:.
+	newArray at: 23 put: nil. "This is the process signalling low space."
+	"An array of the 32 selectors that are compiled as special bytecodes,
+	 paired alternately with the number of arguments each takes."
+	newArray at: 24 put: #(	#+ 1 #- 1 #< 1 #> 1 #<= 1 #>= 1 #= 1 #~= 1
+							#* 1 #/ 1 #\\ 1 #@ 1 #bitShift: 1 #// 1 #bitAnd: 1 #bitOr: 1
+							#at: 1 #at:put: 2 #size 0 #next 0 #nextPut: 1 #atEnd 0 #== 1 #class 0
+							#blockCopy: 1 #value 0 #value: 1 #do: 1 #new 0 #new: 1 #x 0 #y 0 ).
+	"An array of the 255 Characters in ascii order.
+	 Cog inlines table into machine code at: prim so do not regenerate it."
+	newArray at: 25 put: (self specialObjectsArray at: 25).
+	newArray at: 26 put: #mustBeBoolean.
+	newArray at: 27 put: ByteArray.
+	newArray at: 28 put: Process.
+	"An array of up to 31 classes whose instances will have compact headers"
+	newArray at: 29 put: self compactClassesArray.
+	newArray at: 30 put: (self specialObjectsArray at: 30).
+	"(delay Semaphore)"
+	newArray at: 31 put: (self specialObjectsArray at: 31).
+	"(user interrupt Semaphore)"
+	"Prototype instances that can be copied for fast initialization"
+	newArray at: 32 put: (Float new: 2).
+	newArray at: 33 put: (LargePositiveInteger new: 4).
+	newArray at: 34 put: Point new.
+	newArray at: 35 put: #cannotInterpret:.
+	"Note: This must be fixed once we start using context prototypes (yeah, right)"
+	"(MethodContext new: CompiledMethod fullFrameSize)."
+	newArray at: 36 put: (self specialObjectsArray at: 36). "Is the prototype MethodContext (unused by the VM)"
+	newArray at: 37 put: BlockClosure.
+	"(BlockContext new: CompiledMethod fullFrameSize)."
+	newArray at: 38 put: (self specialObjectsArray at: 38). "Is the prototype BlockContext (unused by the VM)"
+	"array of objects referred to by external code"
+	newArray at: 39 put: (self specialObjectsArray at: 39).	"preserve external semaphores"
+	newArray at: 40 put: PseudoContext. "Obsolete.  Reserved for Mutex in Cog VMs"
+	newArray at: 41 put: TranslatedMethod. "Obsolete.  Reserved for a LinkedList instance for overlapped calls in CogMT"
+	"finalization Semaphore"
+	newArray at: 42 put: ((self specialObjectsArray at: 42) ifNil: [Semaphore new]).
+	newArray at: 43 put: LargeNegativeInteger.
+	"External objects for callout.
+	 Note: Written so that one can actually completely remove the FFI."
+	newArray at: 44 put: (self at: #ExternalAddress ifAbsent: []).
+	newArray at: 45 put: (self at: #ExternalStructure ifAbsent: []).
+	newArray at: 46 put: (self at: #ExternalData ifAbsent: []).
+	newArray at: 47 put: (self at: #ExternalFunction ifAbsent: []).
+	newArray at: 48 put: (self at: #ExternalLibrary ifAbsent: []).
+	newArray at: 49 put: #aboutToReturn:through:.
+	newArray at: 50 put: #run:with:in:.
+	"51 reserved for immutability message"
+	"newArray at: 51 put: #attemptToAssign:withIndex:."
+	newArray at: 52 put: #(nil "nil => generic error" #'bad receiver'
+							#'bad argument' #'bad index'
+							#'bad number of arguments'
+							#'inappropriate operation'  #'unsupported operation'
+							#'no modification' #'insufficient object memory'
+							#'insufficient C memory' #'not found' #'bad method'
+							#'internal error in named primitive machinery'
+							#'object may move').
+	"53 to 55 are for Alien"
+	newArray at: 53 put: (self at: #Alien ifAbsent: []).
+	newArray at: 54 put: #invokeCallback:stack:registers:jmpbuf:.
+	newArray at: 55 put: (self at: #UnsafeAlien ifAbsent: []).
+	
+	"Now replace the interpreter's reference in one atomic operation"
+	self specialObjectsArray become: newArray
+	! !
+
+LargePositiveInteger removeSelector: #=!
+
+LargePositiveInteger removeSelector: #=!
+
+LargePositiveInteger removeSelector: #bitAnd:!
+
+LargePositiveInteger removeSelector: #bitAnd:!
+
+LargePositiveInteger removeSelector: #bitOr:!
+
+LargePositiveInteger removeSelector: #bitOr:!
+
+LargePositiveInteger removeSelector: #bitShift:!
+
+LargePositiveInteger removeSelector: #bitShift:!
+
+LargePositiveInteger removeSelector: #bitXor:!
+
+LargePositiveInteger removeSelector: #bitXor:!
+
+LargePositiveInteger removeSelector: #~=!
+
+LargePositiveInteger removeSelector: #'~='!
+
+----End fileIn of /Volumes/330GB Photos/Cog/image/NecessaryImageChangesForCogToWork.1.cs----!
+
+----QUIT----an Array(8 July 2010 11:37:31 am) iPhone.image priorSource: 5374935!
+
+----STARTUP----an Array(8 July 2010 11:38:06 am) as /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/iPhone/iPhone.image!
+
+
+Smalltalk recreateSpecialObjectsArray!
+
+Smalltalk recreateSpecialObjectsArray!
+
+----QUIT----an Array(8 July 2010 11:39:07 am) iPhone.image priorSource: 5421493!
+!ObjectiveCTests commentStamp: '<historical>' prior: 0!
+*  Created by John M McIntosh on 9/17/08.
+
+ Some of this code was funded via a grant from the European Smalltalk User Group (ESUG)
+ Copyright (c) 2008 Corporate Smalltalk Consulting Ltd. All rights reserved.
+ MIT License
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+ 
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ 
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+The end-user documentation included with the redistribution, if any, must include the following acknowledgment: 
+"This product includes software developed by Corporate Smalltalk Consulting Ltd (http://www.smalltalkconsulting.com) 
+and its contributors", in the same place and form as other third-party acknowledgments. 
+Alternately, this acknowledgment may appear in the software itself, in the same form and location as other 
+such third-party acknowledgments.
+!
+
+----STARTUP----an Array(8 July 2010 4:17:33 pm) as /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/iPhone/iPhone.image!
+
+!ObjectiveCSqueakProxyTests2 methodsFor: 'overrides' stamp: 'John M McIntosh 2/6/2009 13:41'!
+textView: textView shouldChangeTextInRange: range replacementText: text
+	Transcript show: 'textViewshouldChangeTextInRangereplacementtext';cr;
+		show: (range signedLongAt: 1);space;show:(range signedLongAt: 5);cr.
+	^(Character value: 1) asString! !
+!ObjectiveCSqueakProxyTests3 methodsFor: 'overrides' stamp: 'John M McIntosh 2/7/2009 00:07'!
+buttonWasPressed: aUIThing
+	Transcript show: aUIThing description asString;cr. ! !
+!ObjectiveCTests commentStamp: '<historical>' prior: 38976355!
+*  Created by John M McIntosh on 9/17/08.
+
+ Some of this code was funded via a grant from the European Smalltalk User Group (ESUG)
+ Copyright (c) 2008 Corporate Smalltalk Consulting Ltd. All rights reserved.
+ MIT License
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+ 
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ 
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+The end-user documentation included with the redistribution, if any, must include the following acknowledgment: 
+"This product includes software developed by Corporate Smalltalk Consulting Ltd (http://www.smalltalkconsulting.com) 
+and its contributors", in the same place and form as other third-party acknowledgments. 
+Alternately, this acknowledgment may appear in the software itself, in the same form and location as other 
+such third-party acknowledgments.
+!
+!ObjectiveCTests class methodsFor: 'as yet unclassified' stamp: 'JMM 10/7/2008 12:45'!
+turnOnAcceratorData
+ | aNSApplicationClass aUIAccelerometerClass application aUIAccelerometer delegate |
+	aNSApplicationClass := ObjectiveCBridge 
+		classObjectForName: 'UIApplication'.
+	aNSApplicationClass isNil ifTrue: [self halt].
+	application :=  aNSApplicationClass sharedApplication.
+	Transcript show: application descriptionAsString;cr.
+	delegate := application delegate.
+	Transcript show: delegate descriptionAsString;cr.
+	aUIAccelerometerClass := ObjectiveCBridge 
+		classObjectForName: 'UIAccelerometer'.
+	aUIAccelerometerClass isNil ifTrue: [self halt].
+	aUIAccelerometer := aUIAccelerometerClass sharedAccelerometer.
+	aUIAccelerometer isNil ifTrue: [self halt].
+	aUIAccelerometer setDelegate: delegate.
+	aUIAccelerometer setUpdateInterval: (1.0/1.0).
+	Transcript show: aUIAccelerometer delegate descriptionAsString;cr.
+	Transcript show: aUIAccelerometer updateInterval;cr.
+	
+	! !
+!ObjectiveCTests class methodsFor: 'as yet unclassified' stamp: 'JMM 10/8/2008 21:52'!
+turnOnLocationData
+ | aNSApplicationClass application delegate aCLLocationManagerClass locationManager data |
+	
+	aNSApplicationClass := ObjectiveCBridge 
+		classObjectForName: 'UIApplication'.
+	aNSApplicationClass isNil ifTrue: [self halt].
+	application :=  aNSApplicationClass sharedApplication.
+	Transcript show: application descriptionAsString;cr.
+	delegate := application delegate.
+	Transcript show: delegate descriptionAsString;cr.
+	aCLLocationManagerClass := ObjectiveCBridge 
+		classObjectForName: 'CLLocationManager'.
+	aCLLocationManagerClass isNil ifTrue: [self halt].
+	locationManager := aCLLocationManagerClass new.
+	Transcript show: locationManager descriptionAsString;cr.
+	locationManager setDelegate: delegate.
+	locationManager setDesiredAccuracy: 3000.0 .
+	locationManager setDistanceFilter: 1000.0 .
+	locationManager startUpdatingLocation.
+	(Delay forSeconds: 60) wait.
+	Transcript show: locationManager distanceFilter;cr.
+	Transcript show: locationManager desiredAccuracy;cr.
+	Transcript show: locationManager locationServicesEnabled;cr.
+	Transcript show: locationManager delegate descriptionAsString ;cr.
+	data := locationManager location.
+	Transcript show: data descriptionAsString;cr.
+	! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/24/2008 14:29'!
+checkStandardGCRect: gcrect
+	self should: [(gcrect floatAt: 1) = 1.0].
+	self should: [(gcrect floatAt: 5) = 2.0].
+	self should: [(gcrect floatAt: 9) = 3.0].
+	self should: [(gcrect floatAt: 13) = 4.0].
+! !
+!ObjectiveCTests methodsFor: 'as yet unclassified' stamp: 'John M McIntosh 2/7/2009 00:08'!
+test3
+"ObjectiveCTests2 test3"
+ | mainView bounds width height view buttonClass startButton startGameString viewClass window colorClass aSqueakProxyDelegate |
+
+	mainView :=  (ObjectiveCBridge classObjectForName: 'UIApplication') sharedApplication delegate mainView.
+	window := mainView window.
+	viewClass := ObjectiveCBridge classObjectForName: 'UIView'.
+	buttonClass :=  ObjectiveCBridge classObjectForName: 'UIButton'.
+	colorClass := ObjectiveCBridge classObjectForName: 'UIColor'.
+	startButton := buttonClass buttonWithType: 1.
+	startGameString := 'Start Game' asNSStringUTF8.
+	startButton setTitle: startGameString forState: 0.
+	startGameString release.
+	bounds := mainView bounds.
+	bounds floatAt: 1 put: 120.0.
+	bounds floatAt: 5 put: 200.0.
+	bounds floatAt: 9 put: 150.0.
+	bounds floatAt: 13 put: 30.0.
+	startButton setFrame: bounds.
+
+	bounds := mainView bounds.
+	width := bounds floatAt: 9.
+	height := bounds floatAt: 13.
+	bounds floatAt: 9 put: (width - 100.0).
+	bounds floatAt: 13 put: (height - 100.0).
+	
+	aSqueakProxyDelegate := (ObjectiveCSqueakProxyTests3 forProtocolString: 'NSObject') 
+			addSigViaString: 'buttonWasPressed:'.
+			
+	ObjectiveCBridge performSelectorOnMainThread: [
+		view := viewClass alloc initWithFrame:  bounds.
+		view setBackgroundColor: colorClass cyanColor.
+		startButton setBackgroundColor: colorClass brownColor.
+		startButton addTarget: aSqueakProxyDelegate squeakProxy 
+			action: (ObjectiveCBridge selectorObjectForName: 'buttonWasPressed:')
+			forControlEvents: (1 << 6).
+		view addSubview: startButton.	
+		window addSubview: view.
+		mainView resignFirstResponder.
+		view becomeFirstResponder.
+	].
+
+
+	(Delay forSeconds: 20) wait. 
+	
+	ObjectiveCBridge performSelectorOnMainThread: [
+		view removeFromSuperview release. 
+		mainView becomeFirstResponder.
+	].	
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 9/28/2008 16:14'!
+testClassObjectForName
+	| objectiveCObject objectiveCObject2 objectiveCObject3 |
+
+	objectiveCObject := ObjectiveCBridge classObjectForName: 'NSObject'.
+	self should: [objectiveCObject isNil not].
+	self shouldnt: [objectiveCObject externalAddressPrivate = 0].
+	objectiveCObject2 := ObjectiveCBridge classObjectForName: 'NSObject'.
+	self should: [objectiveCObject2 isNil not].
+	self should: [objectiveCObject == objectiveCObject2].
+	self should: [objectiveCObject = objectiveCObject2].
+	self should: [(objectiveCObject hash) = (objectiveCObject2 hash)].
+	objectiveCObject3 := ObjectiveCBridge classObjectForName: 'NSString'.
+	self should: [objectiveCObject3 isNil not].
+	self shouldnt: [objectiveCObject == objectiveCObject3].
+	self shouldnt: [objectiveCObject = objectiveCObject3].
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 9/29/2008 22:59'!
+testClassObjectForNameBogus
+	| objectiveCObject objectiveCObject2 objectiveCObject3 |
+
+	objectiveCObject := ObjectiveCBridge classObjectForName: 'NSObjectxyz'.
+	self should: [objectiveCObject isNil].
+	self should: [objectiveCObject = ObjectiveCNSNull singleton].
+	objectiveCObject3 := ObjectiveCBridge classObjectForName: 'NSObjectxyz2'.
+	self should: [objectiveCObject3 isNil].
+	self should: [objectiveCObject3 = ObjectiveCNSNull singleton].
+	self should: [objectiveCObject = objectiveCObject3].
+	objectiveCObject2 := ObjectiveCBridge classObjectForName: 'NSObject'.
+	self should: [objectiveCObject2 isNil not].
+	self shouldnt: [objectiveCObject == objectiveCObject2].
+	self shouldnt: [objectiveCObject = objectiveCObject2].
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/25/2008 07:36'!
+testCreateNSStringObject
+	
+	| nsStringClass string data |
+	nsStringClass := ObjectiveCBridge classObjectForName: 'NSString'.
+	self should: [nsStringClass isNil not].
+	string := 'Hello World'.
+	data := nsStringClass alloc initWithBytes: string length: string size  encoding: 4.
+	self should: [data isNil not].
+	self should: ['Hello World' = (data asString)].! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/27/2008 11:49'!
+testCreateNSStringObjectOnMainThread
+	
+	| nsStringClass string data |
+	ObjectiveCBridge performSelectorOnMainThread: 
+		[nsStringClass := ObjectiveCBridge classObjectForName: 'NSString'.
+		self should: [nsStringClass isNil not].
+		string := 'Hello World'.
+		data := nsStringClass alloc initWithBytes: string length: string size  encoding: 4.
+		self should: [data isNil not].
+		self should: ['Hello World' = (data asString)]].! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 9/29/2008 03:12'!
+testCreateObject
+	| instanceOop1 instanceOop2 |
+
+	instanceOop1 := ObjectiveCBridge performSelectorNamed: 'new' onClassNamed: 'NSObject' noReturn: false useClass: ObjectiveCObject.
+	self should: [instanceOop1 isNil not].
+	instanceOop2 := ObjectiveCBridge performSelectorNamed: 'new' onClassNamed: 'NSObject' noReturn: false useClass: ObjectiveCObject.
+	self shouldnt: [instanceOop1 = instanceOop2].
+
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 9/29/2008 03:12'!
+testCreateObjectMeta
+	| instanceOop1 classOop classOopFromInstance superclassOopFromInstance instanceOop2 superclassOopFromInstance2 classOopMutableString |
+
+
+	instanceOop1 := ObjectiveCBridge performSelectorNamed: 'new' onClassNamed: 'NSObject' noReturn: false useClass: ObjectiveCObject.
+	self should: [instanceOop1 isNil not].
+	classOopFromInstance := ObjectiveCBridge performSelectorNamed: 'class' on: instanceOop1 noReturn: false useClass: ObjectiveCObject.
+	self should: [classOopFromInstance isNil not].
+	classOop := ObjectiveCBridge classObjectForName: 'NSObject'.
+	self should: [classOop isNil not].
+	self should: [classOop = classOopFromInstance].
+	superclassOopFromInstance := ObjectiveCBridge performSelectorNamed: 'superclass' on: instanceOop1 noReturn: false useClass: ObjectiveCObject.
+	self should: [superclassOopFromInstance isNil].
+
+	instanceOop2 := ObjectiveCBridge performSelectorNamed: 'new' onClassNamed: 'NSString' noReturn: false useClass: ObjectiveCObject.
+	self should: [instanceOop2 isNil not].
+	superclassOopFromInstance2 := ObjectiveCBridge performSelectorNamed: 'superclass' on: instanceOop2 noReturn: false useClass: ObjectiveCObject.
+
+	classOopMutableString := ObjectiveCBridge classObjectForName: 'NSMutableString'.
+	self should: [superclassOopFromInstance2 = classOopMutableString].
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/3/2008 13:09'!
+testIdentification
+	| classOop instance1 instance2 |
+
+	classOop := ObjectiveCObject findClassName: 'NSObject'.
+	instance1 := classOop new.
+	instance2 := classOop new.
+	self should: [instance1 = instance1].
+	self shouldnt: [instance1 = instance2].
+	self shouldnt: [instance1 objectiveCHash =  instance2 objectiveCHash].
+	self should: [instance1 objectiveCHash =  instance1 objectiveCHash].
+	self should: [instance2 objectiveCHash =  instance2 objectiveCHash].
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'John M McIntosh 2/3/2009 15:36'!
+testMethodSignature
+	| signatureNSObject signatureNSObject2 crosscheck crosscheckNSMethodSignature |
+
+	signatureNSObject := ObjectiveCBridge methodSignatureObjectforSelector: 'release' onClass: 'NSObject'.
+	signatureNSObject2 := ObjectiveCBridge methodSignatureObjectforSelector: 'release' onClass: 'NSObject'.
+	self should: [signatureNSObject isNil not].
+	self should: [signatureNSObject = signatureNSObject2].
+	self shouldnt: [signatureNSObject == signatureNSObject2].
+	self should: [(signatureNSObject objectiveCHash) = (signatureNSObject2 objectiveCHash)].
+	crosscheck := ObjectiveCObject newWithExternalAddress: signatureNSObject externalAddress.
+	crosscheckNSMethodSignature := crosscheck asNSMethodSignature.
+	self should: [crosscheckNSMethodSignature smalltalkClass = ObjectiveCNSMethodSignature].
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 11/2/2008 19:00'!
+testPerformOneArguments
+	| classOop instance char int short long longlong float double string object classobject selector checkselector gcrect |
+	
+	classOop := ObjectiveCObject findClassName: 'squeakSUnitTester'.
+	self shouldnt: [classOop isNil].
+	instance := classOop new.
+ 	char := instance test0unsignedchar: ''.
+	self should: [char = $A].
+	int := instance test0unsignedint: ''.
+	self should: [int = 16rFFFFFFFF].
+	short := instance test0unsignedshort: ''.
+	self should: [short = 16rFFFF].
+	long := instance test0unsignedlong: ''.
+	self should: [long = 16rFFFFFFFF].
+	longlong := instance test0unsignedlonglong: ''.
+	self should: [longlong = 16rFFFFFFFFFFFFFFFF].
+	float := instance test0float: ''.
+	self should: [float closeTo: 8.8].
+	double := instance test0double: ''.
+	self should: [double = 8.8].
+	self should: [(instance test0void: '') = instance].
+	string := instance test0charpointer: ''.
+	self should: [string = 'squeak'].
+	object := instance test0object: ''.
+	self should: [object objectiveCClass = classOop].
+	object := instance test0object: ''.
+	self should: [object objectiveCClass = classOop].
+	classobject := instance test0class: ''.
+	self should: [classobject = classOop].
+	selector := instance test0methodselector: ''.
+	checkselector := ObjectiveCBridge selectorObjectForName:
+		'initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:'.
+	self should: [selector = checkselector].
+
+	char := instance test0char: ''.
+	self should: [char = $A].
+	int := instance test0int: ''.
+	self should: [int = -1].
+	short := instance test0short: ''.
+	self should: [short = -1].
+	long := instance test0long: ''.
+	self should: [long = -1].
+	longlong := instance test0longlong: ''.
+	self should: [longlong = -1].
+	gcrect := instance test0CGRect: ''.
+	self checkStandardGCRect: gcrect.! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 11/2/2008 19:06'!
+testPerformOneArgumentsOnMainThread
+	ObjectiveCBridge performSelectorOnMainThread: [self testPerformOneArguments].! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/2/2008 12:00'!
+testPerformQualifiersArguments
+	| classOop instance instance2 |
+
+	classOop := ObjectiveCObject findClassName: 'squeakSUnitTester'.
+	self shouldnt: [classOop isNil].
+	instance := classOop new.
+	instance2 := classOop new.
+
+	self should: [instance testQualifier0v = instance]. 
+	self should: [(instance testQualifier1v: instance) = instance]. 
+	self should: [(instance testQualifier2v: instance two: instance) = instance]. 
+	self should: [(instance testQualifier3v: instance two: instance three: instance) = instance]. 
+	self should: [(instance testQualifier1io: instance2) = instance2]. 
+	self should: [(instance testQualifier2io: instance two: instance2) = instance2]. 
+	self should: [(instance testQualifier3io: instance two: instance three: instance2) = instance2]. 
+	self should: [(instance testQualifier1i: instance2) = instance2]. 
+	self should: [(instance testQualifier2i: instance two: instance2) = instance2]. 
+	self should: [(instance testQualifier3i: instance two: instance three: instance2) = instance2]. 
+	self should: [(instance testQualifier1o: instance2) = instance2]. 
+	self should: [(instance testQualifier2o: instance two: instance2) = instance2]. 
+	self should: [(instance testQualifier3o: instance two: instance three: instance2) = instance2]. 
+	self should: [(instance testQualifier1r: instance2) = instance2]. 
+	self should: [(instance testQualifier2r: instance two: instance2) = instance2]. 
+	self should: [(instance testQualifier3r: instance two: instance three: instance2) = instance2]. 
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 11/2/2008 19:01'!
+testPerformQualifiersArgumentsOnMainThread
+	ObjectiveCBridge performSelectorOnMainThread: [ self testPerformQualifiersArguments]
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/24/2008 14:45'!
+testPerformReturnOneArguments
+	| classOop instance char int short long longlong float double string object classobject selector checkselector gcrectNew gcrect |
+
+	classOop := ObjectiveCObject findClassName: 'squeakSUnitTester'.
+	self shouldnt: [classOop isNil].
+	instance := classOop new.
+
+ 	char := instance test1unsignedchar: $B.
+	self should: [char = $B]. 
+	int := instance test1unsignedint: 16rFFFFFFFF.
+	self should: [int = 16rFFFFFFFF].
+	short := instance test1unsignedshort: 16rFFFF.
+	self should: [short = 16rFFFF].
+	long := instance test1unsignedlong: 16rFFFFFFFF.
+	self should: [long = 16rFFFFFFFF].
+	longlong := instance test1unsignedlonglong: 16rFFFFFFFFFFFFFFFF.
+	self should: [longlong = 16rFFFFFFFFFFFFFFFF].
+	float := instance test1float: 8.8.
+	self should: [float closeTo: 8.8].
+	double := instance test1double: 8.8.
+	self should: [double = 8.8].
+	string := instance test1charpointer: 'squeak'. 
+	self should: [string = 'squeak'].
+	object := instance test1object: instance.
+	self should: [object = instance].
+	classobject := instance test1class: classOop.
+	self should: [classobject = classOop].
+
+	checkselector := ObjectiveCBridge selectorObjectForName:
+		'initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:'.
+	selector := instance test1methodselector: checkselector.
+	self should: [selector = checkselector].
+
+	char := instance test1char: $B.
+	self should: [char = $B]. 
+	int := instance test1int: -1.
+	self should: [int = -1].
+	short := instance test1short: -1.
+	self should: [short = -1].
+	long := instance test1long: -1.
+	self should: [long = -1].
+	longlong := instance test1longlong: 16r7FFFFFFFFFFFFFFF.
+	self should: [longlong = 16r7FFFFFFFFFFFFFFF].
+	gcrectNew := ByteArray new: 16.
+	gcrectNew floatAt: 1 put: 1.0.
+	gcrectNew floatAt: 5 put: 2.0.
+	gcrectNew floatAt: 9 put: 3.0.
+	gcrectNew floatAt: 13 put: 4.0.
+	gcrect := instance test1CGRect: gcrectNew.
+	self checkStandardGCRect: gcrect.! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 11/2/2008 19:02'!
+testPerformReturnOneArgumentsOnMainThread
+	ObjectiveCBridge performSelectorOnMainThread: [self testPerformReturnOneArguments]! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/24/2008 14:34'!
+testPerformThreeArguments
+	| classOop instance char int short long longlong float double string object classobject selector checkselector gcrect |
+
+	classOop := ObjectiveCObject findClassName: 'squeakSUnitTester'.
+	self shouldnt: [classOop isNil].
+	instance := classOop new.
+
+ 	char := instance test0unsignedchar:'' two:'' three:''.
+	self should: [char = $A].
+	int := instance test0unsignedint:'' two:'' three:''.
+	self should: [int = 16rFFFFFFFF].
+	short := instance test0unsignedshort:'' two:'' three:''.
+	self should: [short = 16rFFFF].
+	long := instance test0unsignedlong:'' two:'' three:''.
+	self should: [long = 16rFFFFFFFF].
+	longlong := instance test0unsignedlonglong:'' two:'' three:''.
+	self should: [longlong = 16rFFFFFFFFFFFFFFFF].
+	float := instance test0float:'' two:'' three:''.
+	self should: [float closeTo: 8.8].
+	double := instance test0double:'' two:'' three:''.
+	self should: [double = 8.8].
+	self should: [(instance test0void: '' two: '' three: '') = instance].
+	string := instance test0charpointer:'' two:'' three:''.
+	self should: [string = 'squeak'].
+	object := instance test0object:'' two:'' three:''.
+	self should: [object objectiveCClass = classOop].
+	classobject := instance test0class:'' two:'' three:''.
+	self should: [classobject = classOop].
+	selector := instance test0methodselector:'' two:'' three:''.
+	checkselector := ObjectiveCBridge selectorObjectForName:
+		'initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:'.
+	self should: [selector = checkselector].
+
+	char := instance test0char:'' two:'' three:''.
+	self should: [char = $A].
+	int := instance test0int:'' two:'' three:''.
+	self should: [int = -1].
+	short := instance test0short:'' two:'' three:''.
+	self should: [short = -1].
+	long := instance test0long:'' two:'' three:''.
+	self should: [long = -1].
+	longlong := instance test0longlong:'' two:'' three:''.
+	self should: [longlong = -1].
+	gcrect := instance test0CGRect: '' two: '' three: ''.
+	self checkStandardGCRect: gcrect.! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 11/2/2008 19:02'!
+testPerformThreeArgumentsOnMainThread
+	ObjectiveCBridge performSelectorOnMainThread: [self testPerformThreeArguments].! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/24/2008 14:34'!
+testPerformTwoArguments
+	| classOop instance char int short long longlong float double string object classobject selector checkselector gcrect |
+
+	classOop := ObjectiveCObject findClassName: 'squeakSUnitTester'.
+	self shouldnt: [classOop isNil].
+	instance := classOop new.
+
+ 	char := instance test0unsignedchar: '' two: ''.
+	self should: [char = $A].
+	int := instance test0unsignedint: '' two:''.
+	self should: [int = 16rFFFFFFFF].
+	short := instance test0unsignedshort:'' two:''.
+	self should: [short = 16rFFFF].
+	long := instance test0unsignedlong:'' two:''.
+	self should: [long = 16rFFFFFFFF].
+	longlong := instance test0unsignedlonglong:'' two:''.
+	self should: [longlong = 16rFFFFFFFFFFFFFFFF].
+	float := instance test0float:'' two:''.
+	self should: [float closeTo: 8.8].
+	double := instance test0double:'' two:''.
+	self should: [double = 8.8].
+	self should: [(instance test0void: '' two: '') = instance].
+	string := instance test0charpointer:'' two:''.
+	self should: [string = 'squeak'].
+	object := instance test0object:'' two:''.
+	self should: [object objectiveCClass = classOop].
+	classobject := instance test0class:'' two:''.
+	self should: [classobject = classOop].
+	selector := instance test0methodselector:'' two:''.
+	checkselector := ObjectiveCBridge selectorObjectForName:
+		'initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:'.
+	self should: [selector = checkselector].
+
+	char := instance test0char:'' two:''.
+	self should: [char = $A].
+	int := instance test0int:'' two:''.
+	self should: [int = -1].
+	short := instance test0short:'' two:''.
+	self should: [short = -1].
+	long := instance test0long:'' two:''.
+	self should: [long = -1].
+	longlong := instance test0longlong:'' two:''.
+	self should: [longlong = -1].
+	gcrect := instance test0CGRect: '' two: ''.
+	self checkStandardGCRect: gcrect.! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/24/2008 14:33'!
+testPerformTwoArgumentsAllObjectsCheckReturnValue
+	| classOop instance char int short long longlong float double string object classobject selector checkselector gcrect |
+	
+	classOop := ObjectiveCObject findClassName: 'squeakSUnitTester'.
+	self shouldnt: [classOop isNil].
+	instance := classOop new.
+ 	char := instance test2unsignedchar: instance two: instance.
+	self should: [char = $A].
+	int := instance test2unsignedint: instance two: instance.
+	self should: [int = 16rFFFFFFFF].
+	short := instance test2unsignedshort: instance two: instance.
+	self should: [short = 16rFFFF].
+	long := instance test2unsignedlong: instance two: instance.
+	self should: [long = 16rFFFFFFFF].
+	longlong := instance test2unsignedlonglong: instance two: instance.
+	self should: [longlong = 16rFFFFFFFFFFFFFFFF].
+	float := instance test2float: instance two: instance.
+	self should: [float closeTo: 8.8].
+	double := instance test2double: instance two: instance.
+	self should: [double = 8.8].
+	self should: [(instance test2void: instance two: instance) = instance].
+	string := instance test2charpointer: instance two: instance.
+	self should: [string = 'squeak'].
+	object := instance test2object: instance two: instance.
+	self should: [object objectiveCClass = classOop].
+	classobject := instance test2class: instance two: instance.
+	self should: [classobject = classOop].
+	selector := instance test2methodselector: instance two: instance.
+	checkselector := ObjectiveCBridge selectorObjectForName:
+		'initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:'.
+	self should: [selector = checkselector].
+
+	char := instance test2char: instance two: instance.
+	self should: [char = $A].
+	int := instance test2int: instance two: instance.
+	self should: [int = -1].
+	short := instance test2short: instance two: instance.
+	self should: [short = -1].
+	long := instance test2long: instance two: instance.
+	self should: [long = -1].
+	longlong := instance test2longlong: instance two: instance.
+	self should: [longlong = -1].
+	gcrect := instance test2CGRect: instance two: instance.
+	self checkStandardGCRect: gcrect.
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 11/2/2008 19:04'!
+testPerformTwoArgumentsAllObjectsCheckReturnValueOnMainThread
+		ObjectiveCBridge performSelectorOnMainThread: [self testPerformTwoArgumentsAllObjectsCheckReturnValue].! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 11/2/2008 19:04'!
+testPerformTwoArgumentsOnMainThread
+	ObjectiveCBridge performSelectorOnMainThread: [self testPerformTwoArguments].! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/24/2008 13:39'!
+testPerformZeroArguments
+	| classOop instance char int short long longlong float double string object classobject selector checkselector gcrect |
+
+	classOop := ObjectiveCObject findClassName: 'squeakSUnitTester'.
+	self shouldnt: [classOop isNil].
+	instance := classOop new.
+
+ 	char := instance test0unsignedchar.
+	self should: [char = $A].
+	int := instance test0unsignedint.
+	self should: [int = 16rFFFFFFFF].
+	short := instance test0unsignedshort.
+	self should: [short = 16rFFFF].
+	long := instance test0unsignedlong.
+	self should: [long = 16rFFFFFFFF].
+	longlong := instance test0unsignedlonglong.
+	self should: [longlong = 16rFFFFFFFFFFFFFFFF].
+	float := instance test0float.
+	self should: [float closeTo: 8.8].
+	double := instance test0double.
+	self should: [double = 8.8].
+	self should: [instance test0void = instance].
+	string := instance test0charpointer.
+	self should: [string = 'squeak'].
+	object := instance test0object.
+	self should: [object objectiveCClass = classOop].
+	classobject := instance test0class.
+	self should: [classobject = classOop].
+	selector := instance test0methodselector.
+	checkselector := ObjectiveCBridge selectorObjectForName:
+		'initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:'.
+	self should: [selector = checkselector].
+
+	char := instance test0char.
+	self should: [char = $A].
+	int := instance test0int.
+	self should: [int = -1].
+	short := instance test0short.
+	self should: [short = -1].
+	long := instance test0long.
+	self should: [long = -1].
+	longlong := instance test0longlong.
+	self should: [longlong = -1].
+	gcrect := instance test0CGRect.
+	self checkStandardGCRect: gcrect.
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 11/2/2008 19:03'!
+testPerformZeroArgumentsOnMainThread
+	ObjectiveCBridge performSelectorOnMainThread: [self testPerformZeroArguments]! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 9/23/2008 16:46'!
+testRetainCount
+	| classOop instance1 count |
+
+	classOop := ObjectiveCObject findClassName: 'NSObject'.
+	instance1 := classOop new.
+	count := instance1 retainCount.
+	self should: [count = 1].
+	instance1 retain.
+	count := instance1 retainCount.
+	self should: [count = 2].
+	instance1 release.
+	count := instance1 retainCount.
+	self should: [count = 1].
+! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'John M McIntosh 2/3/2009 15:33'!
+testSelectorObjectForName
+	| objectiveCObject objectiveCObject2 objectiveCObject3 |
+
+	objectiveCObject := ObjectiveCBridge selectorObjectForName: 'release'.
+	self should: [objectiveCObject isNil not].
+	objectiveCObject2 := ObjectiveCBridge selectorObjectForName: 'release'.
+	self should: [objectiveCObject2 isNil not].
+	self should: [objectiveCObject == objectiveCObject2].
+	self should: [objectiveCObject = objectiveCObject2].
+	self should: [(objectiveCObject hash) = (objectiveCObject2 hash)].
+	objectiveCObject3 := ObjectiveCBridge selectorObjectForName: 'retain'.
+	self should: [objectiveCObject3 isNil not].
+	self shouldnt: [objectiveCObject == objectiveCObject3].
+	self shouldnt: [objectiveCObject = objectiveCObject3].
+	self should: [objectiveCObject descriptionAsString = 'release'].! !
+!ObjectiveCTests methodsFor: 'running' stamp: 'JMM 10/24/2008 15:01'!
+testfindAddress
+	| address cgRect |
+
+	address := ObjectiveCBridge findAddressForString: 'CGRectZero'.
+	self shouldnt: [address = 0].
+	cgRect := ObjectiveCBridge fetchByteArrayFrom: address length: 16.
+	self should: [(cgRect floatAt: 1) = 0.0].
+	self should: [(cgRect floatAt: 5) = 0.0].
+	self should: [(cgRect floatAt: 9) = 0.0].
+	self should: [(cgRect floatAt: 13) = 0.0].
+	cgRect := ObjectiveCBridge fetchByteArrayConstantCalled: 'CGRectZero' withLength: 16.
+	self should: [(cgRect floatAt: 1) = 0.0].
+	self should: [(cgRect floatAt: 5) = 0.0].
+	self should: [(cgRect floatAt: 9) = 0.0].
+	self should: [(cgRect floatAt: 13) = 0.0].
+	address := ObjectiveCBridge findAddressForString: 'CGRectZerolsdjflasjfd;lasjfd;lasjdf'.
+	self should: [address = 0].
+	self should: [ObjectiveCBridge fetchByteArrayConstantCalled: 'CGRectZerolsdjflasjfd;lasjfd;lasjdf' withLength: 16] raise: Error.
+	! !
+!ObjectiveCTests2 methodsFor: 'as yet unclassified' stamp: 'John M McIntosh 2/6/2009 13:29'!
+test1
+"ObjectiveCTests2 test1"
+ | textField mainView textData aSqueakProxyDelegate |
+
+	mainView :=  (ObjectiveCBridge classObjectForName: 'UIApplication') sharedApplication delegate mainView.
+	aSqueakProxyDelegate := (ObjectiveCSqueakProxy forProtocolString: 'UITextViewDelegate') 
+			addSigViaString: 'textView:shouldChangeTextInRange:replacementText:'.
+	textData := 'Hello World!!' asNSStringUTF8.
+	
+	ObjectiveCBridge performSelectorOnMainThread: [
+		" Must create UITextView on main thread so UI thread can access data without deadlock"
+		textField := (ObjectiveCBridge classObjectForName: 'UITextView') alloc initWithFrame: (mainView bounds).
+		textField setText: textData;
+			setReturnKeyType: 1;
+			setDelegate: aSqueakProxyDelegate squeakProxy.
+		textData release.
+		mainView addSubview: textField.
+		textField becomeFirstResponder.
+		mainView resignFirstResponder.
+	].
+
+	"We now wait for the internal SqueakProxy instance to see a textView:shouldChangeTextInRange:replacementText: msg
+	when that happens it fires the semaphore owned by the aSqueakProxyDelegate, when that happens we 
+	lockWhenCondition: 1 to ensure we have the lock in this thread, the UI thread is waiting on lock condition:2. 
+	once we have set the return value, in this case we don't check the invocation data, we do the unlock"
+	
+	aSqueakProxyDelegate wait; 
+		lockWhenCondition: 1;
+		unlockWithCondition: 2.
+	textField text asString inspect.
+	
+	"Again poke at UI related things on the UI thread to prevent deadlocks"
+	
+	ObjectiveCBridge performSelectorOnMainThread: [
+		textField removeFromSuperview release. 
+		mainView becomeFirstResponder.
+	].	
+	
+	aSqueakProxyDelegate release.
+! !
+!ObjectiveCTests2 methodsFor: 'as yet unclassified' stamp: 'John M McIntosh 2/6/2009 13:49'!
+test2
+"ObjectiveCTests2 test2"
+ | textField mainView textData aSqueakProxyDelegate |
+
+	mainView :=  (ObjectiveCBridge classObjectForName: 'UIApplication') sharedApplication delegate mainView.
+	aSqueakProxyDelegate := (ObjectiveCSqueakProxyTests2 forProtocolString: 'UITextViewDelegate') 
+			addSigViaString: 'textView:shouldChangeTextInRange:replacementText:'.
+	textData := 'Hello World!!' asNSStringUTF8.
+	
+	ObjectiveCBridge performSelectorOnMainThread: [
+		" Must create UITextView on main thread so UI thread can access data without deadlock"
+		textField := (ObjectiveCBridge classObjectForName: 'UITextView') alloc initWithFrame: (mainView bounds).
+		textField setText: textData;
+			setReturnKeyType: 1;
+			setDelegate: aSqueakProxyDelegate squeakProxy.
+		textData release.
+		mainView addSubview: textField.
+		textField becomeFirstResponder.
+		mainView resignFirstResponder.
+	].
+
+	"We now wait for the internal SqueakProxy instance to see a textView:shouldChangeTextInRange:replacementText: msg
+	when that happens it fires the semaphore owned by the aSqueakProxyDelegate, when that happens we 
+	lockWhenCondition: 1 to ensure we have the lock in this thread, the UI thread is waiting on lock condition:2. 
+	once we have set the return value, in this case we don't check the invocation data, we do the unlock"
+	
+	[aSqueakProxyDelegate runUntilTerminateConditionBlock: [:value | true] 	] on: Error do: [:ex  | ].
+	
+ObjectiveCBridge performSelectorOnMainThread: [
+		textField removeFromSuperview release. 
+		mainView becomeFirstResponder.
+	].	
+	aSqueakProxyDelegate release.
+! !
+!ObjectiveCTests2 methodsFor: 'as yet unclassified' stamp: 'John M McIntosh 2/7/2009 00:22'!
+test3
+"ObjectiveCTests2 test3"
+ | mainView bounds width height view buttonClass startButton startGameString viewClass window colorClass aSqueakProxyDelegate selectorString process |
+
+	mainView :=  (ObjectiveCBridge classObjectForName: 'UIApplication') sharedApplication delegate mainView.
+	window := mainView window.
+	viewClass := ObjectiveCBridge classObjectForName: 'UIView'.
+	buttonClass :=  ObjectiveCBridge classObjectForName: 'UIButton'.
+	colorClass := ObjectiveCBridge classObjectForName: 'UIColor'.
+	startButton := buttonClass buttonWithType: 1.
+	startGameString := 'Start Game' asNSStringUTF8.
+	startButton setTitle: startGameString forState: 0.
+	startGameString release.
+	bounds := mainView bounds.
+	bounds floatAt: 1 put: 120.0.
+	bounds floatAt: 5 put: 200.0.
+	bounds floatAt: 9 put: 150.0.
+	bounds floatAt: 13 put: 30.0.
+	startButton setFrame: bounds.
+
+	bounds := mainView bounds.
+	width := bounds floatAt: 9.
+	height := bounds floatAt: 13.
+	bounds floatAt: 9 put: (width - 100.0).
+	bounds floatAt: 13 put: (height - 100.0).
+	selectorString := 'buttonWasPressed:'.
+	
+	aSqueakProxyDelegate := (ObjectiveCSqueakProxyTests3 forProtocolString: 'NSObject') 
+			addSigViaString: selectorString.
+
+	ObjectiveCBridge performSelectorOnMainThread: [
+		view := viewClass alloc initWithFrame:  bounds.
+		view setBackgroundColor: colorClass cyanColor.
+		startButton setBackgroundColor: colorClass brownColor.
+		startButton addTarget: aSqueakProxyDelegate squeakProxy
+			 action: (ObjectiveCBridge findSelectorCalled: selectorString)
+			forControlEvents: (1<<6).
+		view addSubview: startButton.	
+		window addSubview: view.
+		mainView resignFirstResponder.
+		view becomeFirstResponder.
+	].
+	
+	process := 	[[aSqueakProxyDelegate runUntilTerminateConditionBlock: [:value | true] 	] on: Error do: [:ex  | ]] fork.
+	(Delay forSeconds: 20) wait. 
+	process terminate. 
+	
+	ObjectiveCBridge performSelectorOnMainThread: [
+		view removeFromSuperview release. 
+		mainView becomeFirstResponder.
+	].	
+! !
+
+"ObjectiveC-Test"!
+
+----QUIT----an Array(8 July 2010 4:19:13 pm) iPhone.image priorSource: 5421784!
+
+----STARTUP----an Array(8 July 2010 4:21:35 pm) as /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/iPhone/iPhone.image!
+
+
+----QUIT----an Array(8 July 2010 5:26:05 pm) iPhone.image priorSource: 5459289!
+
+----STARTUP----an Array(8 July 2010 5:26:13 pm) as /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/iPhone/iPhone.image!
+
+!ObjectiveCObject methodsFor: 'accessing' stamp: 'EstebanLorenzano 2/23/2010 09:38' prior: 38922322!
+externalAddress: anObject
+	"Set the value of externalAddress"
+
+	externalAddress := anObject! !
+!ObjectiveCObject methodsFor: 'printing' stamp: 'EstebanLorenzano 2/26/2010 12:17' prior: 38926792!
+longPrintStringLimitedTo: aLimitValue
+	"Answer a String whose characters are a description of the receiver."
+	
+	| str |
+	str := String streamContents: [:aStream | self longPrintOn: aStream limitedTo: aLimitValue indent: 0].
+	"Objects without inst vars should return something"
+	^ str isEmpty ifTrue: [self printString, String cr] ifFalse: [str]! !
+!ObjectiveCObject methodsFor: 'printing' stamp: 'EstebanLorenzano 2/26/2010 12:17' prior: 38927845!
+printOn: aStream
+	| title |
+	title := self smalltalkClass name.
+	aStream
+		nextPutAll: (title first isVowel ifTrue: ['an '] ifFalse: ['a ']);
+		nextPutAll: title.
+	aStream nextPut: $(;
+		nextPutAll: self externalAddressPrivate printStringHex;
+		space;
+		"nextPutAll: self descriptionAsString;"
+		nextPut: $)! !
+!ObjectiveCObject methodsFor: 'printing' stamp: 'EstebanLorenzano 2/26/2010 12:17' prior: 38928491!
+printStringLimitedTo: limit
+	"Answer a String whose characters are a description of the receiver.
+	If you want to print without a character limit, use fullPrintString."
+	| limitedString |
+	limitedString := String streamContents: [:s | self printOn: s] limitedTo: limit.
+	limitedString size < limit ifTrue: [^ limitedString].
+	^ limitedString , '...etc...'! !
+!ObjectiveCBridge class methodsFor: 'objective C NSInvocation' stamp: 'John M McIntosh 2/21/2010 14:28'!
+nsInvocationSetRetained: aMethodSignatureOop 
+	^self primitiveNSInvocationSetRetained: aMethodSignatureOop externalAddress! !
+!ObjectiveCBridge class methodsFor: 'forwarding' stamp: 'John M McIntosh 2/21/2010 14:06' prior: 38871387!
+nsInvoke: messageSignatureObject selector: selector on: anObjectiveCObject with:  arguments returning: methodReturnType
+	| nsInvokeInstance argumentType argumentValue indexNumber sizeOfReturnValue memoryAddress allocatedMemory allocatedReturnValue returnedValue rememberPerformSelectorOnMainThreadState |
+	false ifTrue: [Transcript show: 'nsInvoke fires';cr].
+	rememberPerformSelectorOnMainThreadState := self shouldWePeformSelectorOnMainThread.
+	self setPeformSelectorOnMainThread:  false.
+	(self counterOfAutoReleasePoolDepth = 0) ifTrue: [Transcript show: 
+		selector descriptionAsString;space].
+	nsInvokeInstance := self nsInvocationGetWithMethodSignature: messageSignatureObject.
+	self nsInvocationSetSelector: selector target: anObjectiveCObject on: nsInvokeInstance.
+	sizeOfReturnValue := messageSignatureObject methodReturnLength.
+	" Is there a check for return value?"
+	allocatedMemory := OrderedCollection new: arguments size + 1.
+	allocatedReturnValue := 0.
+	sizeOfReturnValue == 0 ifFalse: 
+		[allocatedReturnValue := self nsInvocationCalloc: sizeOfReturnValue.
+		false ifTrue: [Transcript show: 'allocated return value ';show: allocatedReturnValue;cr].
+		allocatedMemory add: allocatedReturnValue ].
+	1 to: arguments size do: [:i |
+		argumentType :=  self dropQualifiers: (self methodArgumentTypeFor: messageSignatureObject atIndex: i).
+		argumentValue := arguments at: i.
+		indexNumber := i + 1.
+		memoryAddress := self setDataTypeForInstance: nsInvokeInstance argumentType: argumentType index: indexNumber value: argumentValue.
+		allocatedMemory add: memoryAddress.	
+		false ifTrue: [Transcript show: 'allocated setArgumentType ';show: memoryAddress;cr].
+	].
+	rememberPerformSelectorOnMainThreadState 
+		ifTrue: [| invokeSelector | 
+				invokeSelector := self selectorObjectForName: #invoke.
+				DoNotWait == true ifTrue: [self nsInvocationSetRetained: nsInvokeInstance].
+				self performSelectorOnMainThread: invokeSelector on: nsInvokeInstance with: 0 returnValue: allocatedReturnValue waitTilDone: DoNotWait == false]
+		ifFalse: [nsInvokeInstance invoke.
+			allocatedReturnValue == 0 ifFalse: 
+				[self nsInvocationGetReturnValue: allocatedReturnValue on: nsInvokeInstance]].
+
+	allocatedReturnValue == 0 ifFalse: 
+		[returnedValue := self nsInvokeHandleReturnType: methodReturnType  
+			locatedAt: allocatedReturnValue length: sizeOfReturnValue].
+	allocatedMemory do: [:e | 
+		false ifTrue: [Transcript show: 'free ';show: e;cr;flush].
+		self nsInvocationFree: e].
+	self setPeformSelectorOnMainThread: rememberPerformSelectorOnMainThreadState.
+	^methodReturnType = 'v' 
+		ifTrue: [anObjectiveCObject]
+		ifFalse: [returnedValue]! !
+!ObjectiveCBridge class methodsFor: 'system primitives' stamp: 'John M McIntosh 2/21/2010 13:16'!
+primitiveNSInvocationSetRetained: aMethodSignatureOop
+	<primitive: 'primitiveNSInvocationSetRetained' module: 'ObjectiveCPlugin'>
+	self primitiveFailed
+! !
+!ObjectiveCSEL methodsFor: 'accessing' stamp: 'EstebanLorenzano 2/23/2010 09:38' prior: 38906948!
+externalAddress: anObject
+	"Set the value of externalAddress"
+
+	externalAddress := anObject! !
+
+"ObjectiveC-Base"!
+!ObjectiveCBridge class methodsFor: 'forwarding' stamp: 'John M McIntosh 7/8/2010 17:29' prior: 38874037!
+nsInvokeHandleReturnType: methodReturnType  locatedAt: allocatedReturnValue length: length
+	| externalAddress |
+
+	methodReturnType = 'c' ifTrue: [^(self nsInvocationGetCType: allocatedReturnValue signed: true)].
+	methodReturnType = 'C' ifTrue: [^(self nsInvocationGetCType: allocatedReturnValue signed: false)].
+	methodReturnType = 'i' ifTrue: [^self nsInvocationGetIntType: allocatedReturnValue signed: true].
+	methodReturnType = 'I' ifTrue: [^self nsInvocationGetIntType: allocatedReturnValue signed: false].
+	methodReturnType = 's' ifTrue: [^self nsInvocationGetShortType: allocatedReturnValue signed: true].
+	methodReturnType = 'S' ifTrue: [^self nsInvocationGetShortType: allocatedReturnValue signed: false].
+	methodReturnType = 'l' ifTrue: [^self nsInvocationGetLongType: allocatedReturnValue signed: true].
+	methodReturnType = 'L' ifTrue: [^self nsInvocationGetLongType: allocatedReturnValue signed: false].
+	methodReturnType = 'q' ifTrue: [^self nsInvocationGetLongLongType: allocatedReturnValue signed: true].
+	methodReturnType = 'Q' ifTrue: [^self nsInvocationGetLongLongType: allocatedReturnValue signed: false].
+	methodReturnType = 'f' ifTrue: [^self nsInvocationGetFloatType: allocatedReturnValue].
+	methodReturnType = 'd' ifTrue: [^self nsInvocationGetDoubleType: allocatedReturnValue].
+	methodReturnType = 'v' ifTrue: [^self].
+	methodReturnType = '*' ifTrue: [^self nsInvocationGetCharPointerType: allocatedReturnValue].
+	methodReturnType = '@' ifTrue: [externalAddress := self nsInvocationGetObjectType: allocatedReturnValue.
+									^ObjectiveCObject newWithExternalAddress: externalAddress].
+	methodReturnType = '#' ifTrue: [externalAddress := self nsInvocationGetClassType: allocatedReturnValue.
+									^ObjectiveCObject newWithExternalAddress: externalAddress].
+	methodReturnType = ':' ifTrue: [externalAddress := self nsInvocationGetSelectorType: allocatedReturnValue.
+									^ObjectiveCSEL newWithExternalAddress: externalAddress].
+	methodReturnType first =  ${ ifTrue: [^self nsInvocationGetStructureType: allocatedReturnValue length: length].
+		methodReturnType first = $^ ifTrue: [^self nsInvocationGetLongLongType: allocatedReturnValue signed: false].
+
+! !
+
+"ObjectiveC-Base"!
+
+----SNAPSHOT----an Array(8 July 2010 5:31:03 pm) iPhone.image priorSource: 5459498!
+!ObjectiveCTests methodsFor: 'running' stamp: 'John M McIntosh 7/8/2010 17:36' prior: 38990903!
+testPerformOneArguments
+	| classOop instance char int short long longlong float double string object classobject selector checkselector gcrect |
+	
+	classOop := ObjectiveCObject findClassName: 'squeakSUnitTester'.
+	self shouldnt: [classOop isNil].
+	instance := classOop new.
+ 	char := instance test0unsignedchar: ''.
+	self should: [char = $A].
+	int := instance test0unsignedint: ''.
+	self should: [int = 16rFFFFFFFF].
+	self halt.
+	short := instance test0unsignedshort: ''.
+	self should: [short = 16rFFFF].
+	long := instance test0unsignedlong: ''.
+	self should: [long = 16rFFFFFFFF].
+	longlong := instance test0unsignedlonglong: ''.
+	self should: [longlong = 16rFFFFFFFFFFFFFFFF].
+	float := instance test0float: ''.
+	self should: [float closeTo: 8.8].
+	double := instance test0double: ''.
+	self should: [double = 8.8].
+	self should: [(instance test0void: '') = instance].
+	string := instance test0charpointer: ''.
+	self should: [string = 'squeak'].
+	object := instance test0object: ''.
+	self should: [object objectiveCClass = classOop].
+	object := instance test0object: ''.
+	self should: [object objectiveCClass = classOop].
+	classobject := instance test0class: ''.
+	self should: [classobject = classOop].
+	selector := instance test0methodselector: ''.
+	checkselector := ObjectiveCBridge selectorObjectForName:
+		'initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:'.
+	self should: [selector = checkselector].
+
+	char := instance test0char: ''.
+	self should: [char = $A].
+	int := instance test0int: ''.
+	self should: [int = -1].
+	short := instance test0short: ''.
+	self should: [short = -1].
+	long := instance test0long: ''.
+	self should: [long = -1].
+	longlong := instance test0longlong: ''.
+	self should: [longlong = -1].
+	gcrect := instance test0CGRect: ''.
+	self checkStandardGCRect: gcrect.! !
+
+----QUIT/NOSAVE----an Array(8 July 2010 6:44:32 pm) iPhone.image priorSource: 5466990!
+!ExternalObject commentStamp: '<historical>' prior: 0!
+External objects represent entities that are not part of the Smalltalk universe. They are accessed using a unique handle which is interpreted depending on the actual entity that is represented. 
+
+Instance variables:
+	handle	<ByteArray | ExternalAddress>!
+!ExternalFunction commentStamp: '<historical>' prior: 0!
+This class represents an external function called from Smalltalk. Instances of ExternalFunction can be created if the address/parameters of the function are known by some other means than loading from a shared library or compiling the appropriate primitive specification.
+
+Instance variables:
+	flags	<Integer>	a set of flags encoding the calling convention
+	args	<Array of: ExternalType>		the parameters of the function
+
+Implementation notes:
+
+The arguments consist of an array with the first element defining the return type, the remaining arguments defining the parameters of the call.
+!
+!ExternalLibraryFunction commentStamp: '<historical>' prior: 0!
+An ExternalLibraryFunction specifies a fully qualified function from an external library.
+
+Instance variables:
+	name	<Integer | String>	name or ordinal of function
+	module	<String | nil>			name of module (nil if bound in the VM).!
+!ExternalLibrary commentStamp: '<historical>' prior: 0!
+An external library bundles calls to functions from the same library. It is provided mainly as convenience since every external function can be fully specified by the name and the module it resides in.
+
+Every external function that is defined in an external library by default will use the library it is defined in. This can always be modified by providing the appropriate module in the specification. !
+!ExternalStructure commentStamp: '<historical>' prior: 0!
+This class provides an abstract base for all structures that can be used by external functions. ExternalStructures have two possible handle types:
+	- ExternalAddress
+		If the handle is an external address then the object described does not reside in the Smalltalk object memory.
+	- ByteArray
+		If the handle is a byte array then the object described resides in Smalltalk memory.
+Useful methods should be implemented by subclasses of ExternalStructure using the common ByteArray/ExternalAddress platform dependent access protocol which will transparently access the correct memory location.!
+!ExternalData commentStamp: '<historical>' prior: 0!
+Instances of ExternalData explicitly describe objects with associated type. They can be used for describing atomic C types like arrays of atomic types (e.g., 'int[]') or pointer to atomic types (e.g., 'int *').
+
+Instance variables:
+	type	<Integer | Behavior>	The basic type of the receiver.
+
+The encoding of type is equivalent to that of the basic type in class ExternalType. The interpretation of whether the receiver describes an array of data or a pointer to data depends on the contents of the instance variable 'handle'. If handle contains an ExternalAddress the receiver is treated as pointer to type. If the handle contains a ByteArray the receiver is interpreted as describing an array of type. Note that both interpretations are treated equivalent in external calls, e.g., if one describes an argument to an external call as taking 'int*' then, depending on the type of handle either the actual contents (if ExternalAddress) or a pointer to the contents (if ByteArray) is passed.
+
+!
+!ExternalType commentStamp: '<historical>' prior: 0!
+An external type represents the type of external objects.
+
+Instance variables:
+	compiledSpec	<WordArray>		Compiled specification of the external type
+	referentClass	<Behavior | nil>	Class type of argument required
+	referencedType	<ExternalType>	Associated (non)pointer type with the receiver
+
+Compiled Spec:
+The compiled spec defines the type in terms which are understood by the VM. Each word is defined as:
+	bits 0...15 	- byte size of the entity
+	bit 16		- structure flag (FFIFlagStructure)
+				  This flag is set if the following words define a structure
+	bit 17		- pointer flag (FFIFlagPointer)
+				  This flag is set if the entity represents a pointer to another object
+	bit 18		- atomic flag (FFIFlagAtomic)
+				  This flag is set if the entity represents an atomic type.
+				  If the flag is set the atomic type bits are valid.
+	bits 19...23	- unused
+	bits 24...27	- atomic type (FFITypeVoid ... FFITypeDoubleFloat)
+	bits 28...31	- unused
+
+Note that all combinations of the flags FFIFlagPointer, FFIFlagAtomic, and FFIFlagStructure are invalid, EXCEPT from the following:
+
+	FFIFlagPointer + FFIFlagAtomic:
+		This defines a pointer to an atomic type (e.g., 'char*', 'int*').
+		The actual atomic type is represented in the atomic type bits.
+
+	FFIFlagPointer + FFIFlagStructure:
+		This defines a structure which is a typedef of a pointer type as in
+			typedef void* VoidPointer;
+			typedef Pixmap* PixmapPtr;
+		It requires a byte size of four (e.g. a 32bit pointer) to work correctly.
+
+[Note: Other combinations may be allowed in the future]
+!
+!ExternalAddress commentStamp: '<historical>' prior: 0!
+An ExternalAddress is an opaque handle to objects outside Smalltalk memory (e.g., a pointer).!
+
+----STARTUP----an Array(8 July 2010 7:09:02 pm) as /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/iPhone/iPhone.image!
+
+!FFIConstants class methodsFor: 'pool initialization' stamp: 'ar 5/18/2003 18:54'!
+initialize
+	"FFIConstants initialize"
+	self initializeTypeConstants.
+	self initializeErrorConstants.
+	self initializeCallingConventions.! !
+!FFIConstants class methodsFor: 'pool initialization' stamp: 'ar 5/18/2003 18:50'!
+initializeCallingConventions
+	FFICallTypeCDecl := 0.
+	FFICallTypeApi := 1.
+! !
+!FFIConstants class methodsFor: 'pool initialization' stamp: 'ar 5/18/2003 18:49'!
+initializeErrorConstants
+	"ExternalFunction initializeErrorConstants"
+
+	"No callout mechanism available"
+	FFINoCalloutAvailable := -1.
+	"generic error"
+	FFIErrorGenericError := 0.
+	"primitive invoked without ExternalFunction"
+	FFIErrorNotFunction := 1.
+	"bad arguments to primitive call"
+	FFIErrorBadArgs := 2.
+
+	"generic bad argument"
+	FFIErrorBadArg := 3.
+	"int passed as pointer"
+	FFIErrorIntAsPointer := 4.
+	"bad atomic type (e.g., unknown)"
+	FFIErrorBadAtomicType := 5.
+	"argument coercion failed"
+	FFIErrorCoercionFailed := 6.
+	"Type check for non-atomic types failed"
+	FFIErrorWrongType := 7.
+	"struct size wrong or too large"
+	FFIErrorStructSize := 8.
+	"unsupported calling convention"
+	FFIErrorCallType := 9.
+	"cannot return the given type"
+	FFIErrorBadReturn := 10.
+	"bad function address"
+	FFIErrorBadAddress := 11.
+	"no module given but required for finding address"
+	FFIErrorNoModule := 12.
+	"function address not found"
+	FFIErrorAddressNotFound := 13.
+	"attempt to pass 'void' parameter"
+	FFIErrorAttemptToPassVoid := 14.
+	"module not found"
+	FFIErrorModuleNotFound := 15.
+	"external library invalid"
+	FFIErrorBadExternalLibrary := 16.
+	"external function invalid"
+	FFIErrorBadExternalFunction := 17.
+	"ExternalAddress points to ST memory (don't you dare to do this!!)"
+	FFIErrorInvalidPointer := 18.! !
+!FFIConstants class methodsFor: 'pool initialization' stamp: 'ar 5/18/2003 18:34'!
+initializeTypeConstants
+	"type void"
+	FFITypeVoid := 0.
+
+	"type bool"
+	FFITypeBool := 1.
+
+	"basic integer types.
+	note: (integerType anyMask: 1) = integerType isSigned"
+
+	FFITypeUnsignedByte := 2.
+	FFITypeSignedByte := 3.
+	FFITypeUnsignedShort := 4.
+	FFITypeSignedShort := 5.
+	FFITypeUnsignedInt := 6.
+	FFITypeSignedInt := 7.
+
+	"64bit types"
+	FFITypeUnsignedLongLong := 8.
+	FFITypeSignedLongLong := 9.
+
+	"special integer types"
+	FFITypeUnsignedChar := 10.
+	FFITypeSignedChar := 11.
+
+	"float types"
+	FFITypeSingleFloat := 12.
+	FFITypeDoubleFloat := 13.
+
+	"type flags"
+	FFIFlagAtomic := 16r40000. "type is atomic"
+	FFIFlagPointer := 16r20000. "type is pointer to base type"
+	FFIFlagStructure := 16r10000. "baseType is structure of 64k length"
+	FFIStructSizeMask := 16rFFFF. "mask for max size of structure"
+	FFIAtomicTypeMask := 16r0F000000. "mask for atomic type spec"
+	FFIAtomicTypeShift := 24. "shift for atomic type"
+! !
+!ExternalObject commentStamp: '<historical>' prior: 39023627!
+External objects represent entities that are not part of the Smalltalk universe. They are accessed using a unique handle which is interpreted depending on the actual entity that is represented. 
+
+Instance variables:
+	handle	<ByteArray | ExternalAddress>!
+!ExternalFunction commentStamp: '<historical>' prior: 39023939!
+This class represents an external function called from Smalltalk. Instances of ExternalFunction can be created if the address/parameters of the function are known by some other means than loading from a shared library or compiling the appropriate primitive specification.
+
+Instance variables:
+	flags	<Integer>	a set of flags encoding the calling convention
+	args	<Array of: ExternalType>		the parameters of the function
+
+Implementation notes:
+
+The arguments consist of an array with the first element defining the return type, the remaining arguments defining the parameters of the call.
+!
+!ExternalFunction class methodsFor: 'compiler support' stamp: 'ar 12/2/1999 16:20'!
+atomicTypeNamed: aString
+	^ExternalType atomicTypeNamed: aString! !
+!ExternalFunction class methodsFor: 'constants' stamp: 'ar 11/19/1999 16:36'!
+callTypeAPI
+	^FFICallTypeApi! !
+!ExternalFunction class methodsFor: 'constants' stamp: 'ar 11/19/1999 16:36'!
+callTypeCDecl
+	^FFICallTypeCDecl! !
+!ExternalFunction class methodsFor: 'compiler support' stamp: 'ar 11/17/1999 19:58'!
+callingConventionFor: aString
+	"Return the constant describing the calling convention for the given string specification or nil if unknown."
+	aString = 'cdecl:' ifTrue:[^self callTypeCDecl].
+	aString = 'apicall:' ifTrue:[^self callTypeAPI].
+	^nil! !
+!ExternalFunction class methodsFor: 'error handling' stamp: 'ar 11/19/1999 14:17'!
+errorMessageFor: code
+	"Return the error message for the given error code from the foreign function interface"
+	^FFIErrorMessages at: code ifAbsent:['Call to external function failed'].! !
+!ExternalFunction class methodsFor: 'compiler support' stamp: 'ar 12/2/1999 16:49'!
+forceTypeNamed: aString
+	^ExternalType forceTypeNamed: aString! !
+!ExternalFunction class methodsFor: 'error handling' stamp: 'ar 11/28/1999 18:37'!
+getLastError
+	"Return the last error from an external call.
+	Only valid immediately after the external call failed."
+	<primitive: 'primitiveFFIGetLastError' module:'SqueakFFIPrims'>
+	^-1! !
+!ExternalFunction class methodsFor: 'class initialization' stamp: 'ar 8/14/2006 23:14'!
+initialize
+	"ExternalFunction initialize"
+	FFIConstants initialize. "ensure proper initialization"
+	self initializeErrorMessages.! !
+!ExternalFunction class methodsFor: 'class initialization' stamp: 'ar 5/18/2003 18:53'!
+initializeErrorMessages
+	"ExternalFunction initializeErrorConstants"
+	FFIErrorMessages := Dictionary new.
+	FFIErrorMessages
+		at: FFINoCalloutAvailable put: 'Callout mechanism not available';
+		at: FFIErrorGenericError put: 'A call to an external function failed';
+		at: FFIErrorNotFunction put: 'Only ExternalFunctions can be called';
+		at: FFIErrorBadArgs put: 'Bad arguments in primitive invokation';
+		at: FFIErrorBadArg put: 'Bad argument for external function';
+		at: FFIErrorIntAsPointer put: 'Cannot use integer as pointer';
+		at: FFIErrorBadAtomicType put: 'Unknown atomic type in external call';
+		at: FFIErrorCoercionFailed put: 'Could not coerce arguments';
+		at: FFIErrorWrongType put: 'Wrong type in external call';
+		at: FFIErrorStructSize put: 'Bad structure size in external call';
+		at: FFIErrorCallType put: 'Unsupported calling convention';
+		at: FFIErrorBadReturn put: 'Cannot return the given type';
+		at: FFIErrorBadAddress put: 'Bad function address';
+		at: FFIErrorNoModule put: 'No module to load address from';
+		at: FFIErrorAddressNotFound put: 'Unable to find function address';
+		at: FFIErrorAttemptToPassVoid put: 'Cannot pass ''void'' parameter';
+		at: FFIErrorModuleNotFound put: 'External module not found';
+		at: FFIErrorBadExternalLibrary put: 'External library is invalid';
+		at: FFIErrorBadExternalFunction put: 'External function is invalid';
+		at: FFIErrorInvalidPointer put: 'Attempt to pass invalid pointer';
+	yourself! !
+!ExternalFunction class methodsFor: 'compiler support' stamp: 'ar 12/2/1999 16:30'!
+isValidType: anObject
+	^anObject isBehavior and:[anObject includesBehavior: ExternalStructure]! !
+!ExternalFunction class methodsFor: 'compiler support' stamp: 'ar 12/2/1999 16:21'!
+structTypeNamed: aString
+	^ExternalType structTypeNamed: aString! !
+!ExternalFunction methodsFor: 'accessing' stamp: 'ar 11/19/1999 19:13'!
+argTypes
+	^argTypes! !
+!ExternalFunction methodsFor: 'printing' stamp: 'ar 11/19/1999 16:35'!
+callingConventionString
+	(flags allMask: FFICallTypeApi) 
+		ifTrue:[^'apicall']
+		ifFalse:[^'cdecl']! !
+!ExternalFunction methodsFor: 'accessing' stamp: 'ar 11/19/1999 19:13'!
+flags
+	^flags! !
+!ExternalFunction methodsFor: 'initialize-release' stamp: 'ar 11/29/1999 00:35'!
+initialize
+	"Initialize the receiver"
+	handle := ExternalAddress new.! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:54'!
+invoke
+	^self invokeWithArguments: #()! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:53'!
+invokeWith: arg1
+	^self invokeWithArguments: (Array with: arg1)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:53'!
+invokeWith: arg1 with: arg2
+	^self invokeWithArguments: (Array with: arg1 with: arg2)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:53'!
+invokeWith: arg1 with: arg2 with: arg3
+	^self invokeWithArguments: (Array with: arg1 with: arg2 with: arg3)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 19:08'!
+invokeWith: arg1 with: arg2 with: arg3 with: arg4
+	^self invokeWithArguments: (Array with: arg1 with: arg2 with: arg3 with: arg4)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:53'!
+invokeWith: arg1 with: arg2 with: arg3 with: arg4 with: arg5
+	^self invokeWithArguments: (Array with: arg1 with: arg2 with: arg3 with: arg4 with: arg5)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:54'!
+invokeWith: arg1 with: arg2 with: arg3 with: arg4 with: arg5 with: arg6
+	^self invokeWithArguments: (Array with: arg1 with: arg2 with: arg3 with: arg4 with: arg5 with: arg6)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/28/1999 20:12'!
+invokeWithArguments: argArray
+	"Manually invoke the receiver, representing an external function."
+	<primitive: 'primitiveCalloutWithArgs' module:'SqueakFFIPrims'>
+	^self externalCallFailed! !
+!ExternalFunction methodsFor: 'accessing' stamp: 'ar 11/17/1999 19:55'!
+module
+	^nil! !
+!ExternalFunction methodsFor: 'accessing' stamp: 'ar 11/17/1999 17:06'!
+name
+	^nil! !
+!ExternalFunction methodsFor: 'printing' stamp: 'ar 11/19/1999 19:12'!
+printOn: aStream
+	aStream
+		nextPut:$<;
+		nextPutAll: self callingConventionString; nextPutAll:': ';
+		print: argTypes first; space.
+	self name == nil
+		ifTrue:[aStream nextPutAll:'(*) ']
+		ifFalse:[aStream print: self name asString; space].
+	aStream nextPut:$(.
+	2 to: argTypes size do:[:i|
+		aStream print: (argTypes at: i).
+		i < argTypes size ifTrue:[aStream space]].
+	aStream nextPut:$).
+	self module == nil ifFalse:[
+		aStream space; nextPutAll:'module: '; print: self module asString.
+	].
+	aStream nextPut:$>! !
+!ExternalLibraryFunction commentStamp: '<historical>' prior: 39024593!
+An ExternalLibraryFunction specifies a fully qualified function from an external library.
+
+Instance variables:
+	name	<Integer | String>	name or ordinal of function
+	module	<String | nil>			name of module (nil if bound in the VM).!
+!ExternalLibraryFunction class methodsFor: 'instance creation' stamp: 'ar 11/17/1999 14:52'!
+name: aName module: aModule callType: callType returnType: retType argumentTypes: argTypes
+	^self new
+		name: aName
+		module: aModule
+		flags: callType
+		argTypes: (Array with: retType), argTypes! !
+!ExternalLibraryFunction methodsFor: 'accessing' stamp: 'ar 11/17/1999 19:55'!
+module
+	^module! !
+!ExternalLibraryFunction methodsFor: 'accessing' stamp: 'ar 11/17/1999 17:06'!
+name
+	^name! !
+!ExternalLibraryFunction methodsFor: 'private' stamp: 'ar 11/19/1999 19:12'!
+name: aName module: aModule flags: anInteger argTypes: argTypeArray
+
+	name := aName.
+	module := aModule.
+	flags := anInteger.
+	argTypes := argTypeArray.! !
+!ExternalLibraryFunction methodsFor: 'accessing' stamp: 'das 5/23/2005 10:50'!
+setModule: aString
+	"Private. Hack the module"
+	module := aString.! !
+!ExternalLibrary commentStamp: '<historical>' prior: 39024880!
+An external library bundles calls to functions from the same library. It is provided mainly as convenience since every external function can be fully specified by the name and the module it resides in.
+
+Every external function that is defined in an external library by default will use the library it is defined in. This can always be modified by providing the appropriate module in the specification. !
+!ExternalLibrary class methodsFor: 'accessing' stamp: 'ar 11/17/1999 19:33'!
+moduleName
+	"Return the name of the module for this library"
+	^nil! !
+!ExternalLibrary methodsFor: 'initialize-release' stamp: 'ar 12/8/1999 21:49'!
+forceLoading
+	"Primitive. Force loading the given library.
+	The primitive will fail if the library is not available
+	or if anything is wrong with the receiver."
+	<primitive: 'primitiveForceLoad' module:'SqueakFFIPrims'>
+	^self externalCallFailed "The primitive will set the error code"! !
+!ExternalLibrary methodsFor: 'accessing' stamp: 'ar 11/17/1999 19:35'!
+handle
+	^handle! !
+!ExternalLibrary methodsFor: 'initialize-release' stamp: 'ar 11/29/1999 00:35'!
+initialize
+	"Initialize the receiver"
+	name := self class moduleName.
+	handle := ExternalAddress new.! !
+!ExternalLibrary methodsFor: 'accessing' stamp: 'ar 11/17/1999 19:35'!
+name
+	^name! !
+!ExternalObject class methodsFor: 'class initialization' stamp: 'ar 11/19/1999 22:37'!
+initialize
+	"ExternalObject initialize"
+	Smalltalk addToStartUpList: self after: ShortRunArray.! !
+!ExternalObject class methodsFor: 'system startup' stamp: 'ar 11/28/1999 23:37'!
+install
+	"Notify all instances of the receiver that we're coming up on a new platform.
+	Note: The default implementation does nothing since the general external
+	objects are cleaned up by ExternalAddress>>startUp: but subclasses may
+	implement this method so that the appropriate action for existing instances can
+	be taken."! !
+!ExternalObject class methodsFor: 'system startup' stamp: 'ar 11/28/1999 23:36'!
+installSubclasses
+	"Notify all the subclasses of ExternalObject that we are starting up on a new platform."
+	self withAllSubclassesDo:[:cls| cls install].! !
+!ExternalObject class methodsFor: 'system startup' stamp: 'ar 11/28/1999 23:36'!
+startUp: resuming
+	"The system is coming up. If it is on a new platform, clear out the existing handles."
+	ExternalAddress startUp: resuming. "Make sure handles are invalid"
+	resuming ifTrue:[self installSubclasses].
+! !
+!ExternalObject methodsFor: 'private' stamp: 'ar 11/16/1999 20:25'!
+getHandle
+	"Private. Return the handle used to represent the external entitiy."
+	^handle! !
+!ExternalObject methodsFor: 'private' stamp: 'ar 11/16/1999 20:26'!
+setHandle: anObject
+	"Private. Set the handle used to represent the external entity."
+	handle := anObject! !
+!ExternalStructure commentStamp: '<historical>' prior: 39025342!
+This class provides an abstract base for all structures that can be used by external functions. ExternalStructures have two possible handle types:
+	- ExternalAddress
+		If the handle is an external address then the object described does not reside in the Smalltalk object memory.
+	- ByteArray
+		If the handle is a byte array then the object described resides in Smalltalk memory.
+Useful methods should be implemented by subclasses of ExternalStructure using the common ByteArray/ExternalAddress platform dependent access protocol which will transparently access the correct memory location.!
+!ExternalData commentStamp: '<historical>' prior: 39025986!
+Instances of ExternalData explicitly describe objects with associated type. They can be used for describing atomic C types like arrays of atomic types (e.g., 'int[]') or pointer to atomic types (e.g., 'int *').
+
+Instance variables:
+	type	<Integer | Behavior>	The basic type of the receiver.
+
+The encoding of type is equivalent to that of the basic type in class ExternalType. The interpretation of whether the receiver describes an array of data or a pointer to data depends on the contents of the instance variable 'handle'. If handle contains an ExternalAddress the receiver is treated as pointer to type. If the handle contains a ByteArray the receiver is interpreted as describing an array of type. Note that both interpretations are treated equivalent in external calls, e.g., if one describes an argument to an external call as taking 'int*' then, depending on the type of handle either the actual contents (if ExternalAddress) or a pointer to the contents (if ByteArray) is passed.
+
+!
+!ExternalData class methodsFor: 'class initialization' stamp: 'ar 8/14/2006 23:18'!
+compileFields
+	"Ensure proper initialization of ExternalType when first loading"
+	ExternalType initialize.
+	^super compileFields! !
+!ExternalData class methodsFor: 'field definition' stamp: 'ar 1/27/2000 01:23'!
+fields
+	"ExternalData defineFields"
+	"Note: The definition is for completeness only.
+	ExternalData is treated specially by the VM."
+	^#(nil 'void*')! !
+!ExternalData class methodsFor: 'instance creation' stamp: 'ar 12/2/1999 14:57'!
+fromHandle: aHandle type: aType
+	"Create a pointer to the given type"
+	"ExternalData fromHandle: ExternalAddress new type: ExternalType float"
+	^self basicNew setHandle: aHandle type: aType! !
+!ExternalData class methodsFor: 'instance creation' stamp: 'ar 11/22/1999 04:28'!
+new
+	"You better not..."
+	^self shouldNotImplement! !
+!ExternalData methodsFor: 'conversion' stamp: 'hg 2/25/2000 14:51'!
+fromCString
+	"Assume that the receiver represents a C string and convert it to a Smalltalk string. hg 2/25/2000 14:18"
+
+	| stream index char |
+	type isPointerType ifFalse: [self error: 'External object is not a pointer type.'].
+	stream := WriteStream on: String new.
+	index := 1.
+	[(char := handle unsignedCharAt: index) = 0 asCharacter] whileFalse: [
+		stream nextPut: char.
+		index := index + 1].
+	^stream contents! !
+!ExternalData methodsFor: 'private' stamp: 'ar 11/21/1999 14:23'!
+setHandle: aHandle type: aType
+	handle := aHandle.
+	type := aType.! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:31'!
+byteSize
+	"Return the size in bytes of this structure."
+	^self compiledSpec first bitAnd: FFIStructSizeMask! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'gk 3/1/2005 12:06'!
+compileAlias: spec withAccessors: aBool
+	"Define all the fields in the receiver.
+	Return the newly compiled spec."
+	| fieldName fieldType isPointerField externalType |
+	fieldName := spec first.
+	fieldType := spec second.
+	isPointerField := fieldType last = $*.
+	fieldType := fieldType copyWithout: $*.
+	externalType := ExternalType atomicTypeNamed: fieldType.
+	externalType == nil ifTrue:["non-atomic"
+		Symbol hasInterned: fieldType ifTrue:[:sym|
+			externalType := ExternalType structTypeNamed: sym]].
+	externalType == nil ifTrue:[
+		Transcript show:'(', fieldType,' is void)'.
+		externalType := ExternalType void].
+	isPointerField ifTrue:[externalType := externalType asPointerType].
+	(fieldName notNil and:[aBool]) ifTrue:[
+		self defineAliasAccessorsFor: fieldName
+			type: externalType].
+	isPointerField 
+		ifTrue:[compiledSpec := WordArray with: 
+					(ExternalType structureSpec bitOr: ExternalType pointerSpec)]
+		ifFalse:[compiledSpec := externalType compiledSpec].
+	ExternalType noticeModificationOf: self.
+	^compiledSpec! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 15:35'!
+compileAllFields
+	"ExternalStructure compileAllFields"
+	self withAllSubclassesDo:[:cls|
+		cls compileFields.
+	].! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:28'!
+compileFields
+	"Compile the field definition of the receiver.
+	Return the newly compiled spec."
+	^self compileFields: self fields! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:28'!
+compileFields: fieldSpec
+	"Compile the field definition of the receiver.
+	Return the newly compiled spec."
+	^self compileFields: fieldSpec withAccessors: false.! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'gk 3/1/2005 12:07'!
+compileFields: specArray withAccessors: aBool 
+	"Define all the fields in the receiver. 
+	Return the newly compiled spec."
+	| fieldName fieldType isPointerField externalType byteOffset typeSize typeSpec selfRefering |
+	(specArray size > 0
+			and: [specArray first class ~~ Array])
+		ifTrue: [^ self compileAlias: specArray withAccessors: aBool].
+	byteOffset := 1.
+	typeSpec := WriteStream
+				on: (WordArray new: 10).
+	typeSpec nextPut: FFIFlagStructure.
+	"dummy for size"
+	specArray
+		do: [:spec | 
+			fieldName := spec first.
+			fieldType := spec second.
+			isPointerField := fieldType last = $*.
+			fieldType := (fieldType findTokens: ' *') first.
+			externalType := ExternalType atomicTypeNamed: fieldType.
+			selfRefering := externalType == nil and: fieldType = self asString and: isPointerField.
+			selfRefering
+				ifTrue: [externalType := ExternalType void asPointerType]
+				ifFalse:
+			[externalType == nil
+				ifTrue: ["non-atomic"
+					Symbol
+						hasInterned: fieldType
+						ifTrue: [:sym | externalType := ExternalType structTypeNamed: sym]].
+			externalType == nil
+				ifTrue: [Transcript show: '(' , fieldType , ' is void)'.
+					externalType := ExternalType void].
+			isPointerField
+				ifTrue: [externalType := externalType asPointerType]].
+			typeSize := externalType byteSize.
+			spec size > 2
+				ifTrue: ["extra size"
+					spec third < typeSize
+						ifTrue: [^ self error: 'Explicit type size is less than expected'].
+					typeSize := spec third].
+			(fieldName notNil and: [aBool])
+				ifTrue: [self
+						defineFieldAccessorsFor: fieldName
+						startingAt: byteOffset
+						type: externalType].
+			typeSpec
+				nextPutAll: (externalType embeddedSpecWithSize: typeSize).
+			byteOffset := byteOffset + typeSize].
+	compiledSpec := typeSpec contents.
+	compiledSpec
+		at: 1
+		put: (byteOffset - 1 bitOr: FFIFlagStructure).
+	ExternalType noticeModificationOf: self.
+	^ compiledSpec! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:28'!
+compiledSpec
+	"Return the compiled spec of the receiver"
+	^compiledSpec ifNil:[self compileFields].! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 4/5/2006 01:18'!
+defineAliasAccessorsFor: fieldName type: type
+	"Define read/write accessors for the given field"
+	| code refClass argName |
+	(type isVoid and:[type isPointerType not]) ifTrue:[^self].
+	refClass := type referentClass.
+	code := String streamContents:[:s|
+		s 
+			nextPutAll: fieldName; crtab;
+			nextPutAll:'"This method was automatically generated"'; crtab.
+		refClass == nil 
+			ifTrue:[(type isAtomic and:[type isPointerType not]) 
+				ifTrue:[s nextPutAll:'^handle']
+				ifFalse:[s nextPutAll:'^ExternalData fromHandle: handle'.
+						type isPointerType ifTrue:[s nextPutAll:' asExternalPointer'].
+						s nextPutAll:' type: ';
+						nextPutAll: type externalTypeName]]
+			ifFalse:[s nextPutAll:'^', refClass name,' fromHandle: handle'.
+					type isPointerType ifTrue:[s nextPutAll:' asExternalPointer']]].
+	self compile: code classified: 'accessing'.
+
+	code := String streamContents:[:s|
+		argName := refClass == nil 
+			ifTrue:[(type isAtomic and:[type isPointerType not])
+				ifTrue:['anObject']
+				ifFalse:['anExternalData']]
+			ifFalse:['a',refClass name].
+		s
+			nextPutAll: fieldName,': '; nextPutAll: argName; crtab;
+			nextPutAll:'"This method was automatically generated"'; crtab.
+		(refClass == nil and:[type isAtomic and:[type isPointerType not]])
+			ifTrue:[s nextPutAll:'handle := ', argName]
+			ifFalse:[s nextPutAll:'handle := ', argName,' getHandle'.
+					type isPointerType ifTrue:[s nextPutAll:' asByteArrayPointer']]].
+	self compile: code classified: 'accessing'.! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 11/29/1999 00:42'!
+defineFieldAccessorsFor: fieldName startingAt: byteOffset type: type
+	"Define read/write accessors for the given field"
+	| code |
+	(type isVoid and:[type isPointerType not]) ifTrue:[^self].
+	code := fieldName,'
+	"This method was automatically generated"
+	', (type readFieldAt: byteOffset).
+	self compile: code classified: 'accessing'.
+	code := fieldName,': anObject
+	"This method was automatically generated"
+	', (type writeFieldAt: byteOffset with:'anObject').
+	self compile: code classified: 'accessing'.! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:37'!
+defineFields
+	"Define all the fields in the receiver"
+	self defineFields: self fields.! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:38'!
+defineFields: fields
+	"Define all the fields in the receiver"
+	self compileFields: fields withAccessors: true.! !
+!ExternalStructure class methodsFor: 'class management' stamp: 'ar 11/22/1999 10:10'!
+doneCompiling
+	"I have been recompiled. Update any types that reference me."
+	ExternalType noticeModificationOf: self.! !
+!ExternalStructure class methodsFor: 'instance creation' stamp: 'ar 12/1/1999 15:58'!
+externalNew
+	"Create an instance of the receiver on the external heap"
+	^self fromHandle: (ExternalAddress allocate: self byteSize)! !
+!ExternalStructure class methodsFor: 'converting' stamp: 'ar 12/2/1999 16:55'!
+externalType
+	"Return an external type describing the receiver as a structure"
+	^ExternalType structTypeNamed: self name! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 11/29/1999 00:28'!
+fields
+	"Return the fields defining the receiver"
+	^#()! !
+!ExternalStructure class methodsFor: 'class management' stamp: 'ar 1/26/2000 14:20'!
+fileOutInitializerOn: aFileStream
+	super fileOutInitializerOn: aFileStream.
+	aFileStream cr.
+	aFileStream cr.
+	aFileStream nextChunkPut: self name , ' compileFields'.
+	aFileStream cr.! !
+!ExternalStructure class methodsFor: 'class management' stamp: 'ar 1/26/2000 14:19'!
+fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool
+	super fileOutOn: aFileStream
+		moveSource: moveSource
+		toFile: fileIndex
+		initializing: aBool.
+	(aBool and:[moveSource not]) ifTrue: 
+		[aFileStream cr.
+		aFileStream cr.
+		aFileStream nextChunkPut: self name , ' compileFields'.
+		aFileStream cr]! !
+!ExternalStructure class methodsFor: 'instance creation' stamp: 'ar 11/29/1999 00:36'!
+fromHandle: aHandle
+	^self basicNew setHandle: aHandle! !
+!ExternalStructure class methodsFor: 'instance creation' stamp: 'ar 12/1/1999 15:58'!
+new
+	^self fromHandle: (ByteArray new: self byteSize)! !
+!ExternalStructure class methodsFor: 'class management' stamp: 'sma 6/16/2000 22:12'!
+obsolete
+	"The receiver is becoming obsolete. 
+	NOTE: You if you remove the whole class category at once, you cannot
+	assume that the ExternalType class is still present."
+
+	Smalltalk at: #ExternalType ifPresent: [:class | class noticeRemovalOf: self].
+	^ super obsolete! !
+!ExternalStructure class methodsFor: 'class management' stamp: 'ar 11/22/1999 04:12'!
+rename: aString
+	| oldName |
+	oldName := name.
+	super rename: aString.
+	oldName = name ifFalse:[ExternalType noticeRenamingOf: self from: oldName to: name].! !
+!ExternalStructure methodsFor: 'initialize-release' stamp: 'ar 11/28/1999 23:21'!
+free
+	"Free the handle pointed to by the receiver"
+	(handle ~~ nil and:[handle isExternalAddress]) ifTrue:[handle free].
+	handle := nil.! !
+!ExternalStructure methodsFor: 'printing' stamp: 'gk 3/1/2005 12:07'!
+longPrintOn: aStream 
+	"Append to the argument, aStream, the names and values of all the record's variables."
+	| fields |
+	fields := self class fields.
+	(fields isEmpty or: [fields first isNil]) ifTrue: [fields := #()]
+		ifFalse: [(fields first isKindOf: Array) ifFalse: [fields := Array with: fields]].
+	fields do: [ :field |
+		field first notNil ifTrue: [
+			aStream nextPutAll: field first; nextPut: $:; space; tab.
+			(self perform: field first) printOn: aStream.
+			aStream cr]].! !
+!ExternalType commentStamp: '<historical>' prior: 39027031!
+An external type represents the type of external objects.
+
+Instance variables:
+	compiledSpec	<WordArray>		Compiled specification of the external type
+	referentClass	<Behavior | nil>	Class type of argument required
+	referencedType	<ExternalType>	Associated (non)pointer type with the receiver
+
+Compiled Spec:
+The compiled spec defines the type in terms which are understood by the VM. Each word is defined as:
+	bits 0...15 	- byte size of the entity
+	bit 16		- structure flag (FFIFlagStructure)
+				  This flag is set if the following words define a structure
+	bit 17		- pointer flag (FFIFlagPointer)
+				  This flag is set if the entity represents a pointer to another object
+	bit 18		- atomic flag (FFIFlagAtomic)
+				  This flag is set if the entity represents an atomic type.
+				  If the flag is set the atomic type bits are valid.
+	bits 19...23	- unused
+	bits 24...27	- atomic type (FFITypeVoid ... FFITypeDoubleFloat)
+	bits 28...31	- unused
+
+Note that all combinations of the flags FFIFlagPointer, FFIFlagAtomic, and FFIFlagStructure are invalid, EXCEPT from the following:
+
+	FFIFlagPointer + FFIFlagAtomic:
+		This defines a pointer to an atomic type (e.g., 'char*', 'int*').
+		The actual atomic type is represented in the atomic type bits.
+
+	FFIFlagPointer + FFIFlagStructure:
+		This defines a structure which is a typedef of a pointer type as in
+			typedef void* VoidPointer;
+			typedef Pixmap* PixmapPtr;
+		It requires a byte size of four (e.g. a 32bit pointer) to work correctly.
+
+[Note: Other combinations may be allowed in the future]
+!
+!ExternalType class methodsFor: 'private' stamp: 'ar 12/2/1999 16:59'!
+atomicTypeNamed: aString
+	^AtomicTypes at: aString ifAbsent:[nil]! !
+!ExternalType class methodsFor: 'type constants' stamp: 'ar 12/2/1999 16:56'!
+bool
+	^AtomicTypes at: 'bool'! !
+!ExternalType class methodsFor: 'type constants' stamp: 'ar 11/20/1999 17:29'!
+byte
+	"byte defaults to unsigned byte"
+	^self unsignedByte! !
+!ExternalType class methodsFor: 'type constants' stamp: 'ar 11/20/1999 17:29'!
+char
+	"char defaults to unsigned char"
+	^self unsignedChar! !
+!ExternalType class methodsFor: 'housekeeping' stamp: 'ar 12/2/1999 18:00'!
+cleanupUnusedTypes
+	"ExternalType cleanupUnusedTypes"
+	| value |
+	StructTypes keys do:[:key|
+		value := StructTypes at: key.
+		value == nil ifTrue:[StructTypes removeKey: key ifAbsent:[]]].! !
+!ExternalType class methodsFor: 'type constants' stamp: 'ar 12/2/1999 16:56'!
+double
+	^AtomicTypes at: 'double'! !
+!ExternalType class methodsFor: 'type constants' stamp: 'ar 12/2/1999 16:57'!
+float
+	^AtomicTypes at: 'float'! !
+!ExternalType class methodsFor: 'private' stamp: 'ar 12/2/1999 16:50'!
+forceTypeNamed: aString
+	^self newTypeNamed: aString force: true! !
+!ExternalType class methodsFor: 'class initialization' stamp: 'ar 12/2/1999 16:15'!
+initialize
+	"ExternalType initialize"
+	self initializeFFIConstants.
+	self initializeDefaultTypes.! !
+!FFIConstants class methodsFor: 'pool initialization' stamp: 'ar 5/18/2003 18:54'!
+initialize
+	"FFIConstants initialize"
+	self initializeTypeConstants.
+	self initializeErrorConstants.
+	self initializeCallingConventions.! !
+!FFIConstants class methodsFor: 'pool initialization' stamp: 'ar 5/18/2003 18:50'!
+initializeCallingConventions
+	FFICallTypeCDecl := 0.
+	FFICallTypeApi := 1.
+! !
+!FFIConstants class methodsFor: 'pool initialization' stamp: 'ar 5/18/2003 18:49'!
+initializeErrorConstants
+	"ExternalFunction initializeErrorConstants"
+
+	"No callout mechanism available"
+	FFINoCalloutAvailable := -1.
+	"generic error"
+	FFIErrorGenericError := 0.
+	"primitive invoked without ExternalFunction"
+	FFIErrorNotFunction := 1.
+	"bad arguments to primitive call"
+	FFIErrorBadArgs := 2.
+
+	"generic bad argument"
+	FFIErrorBadArg := 3.
+	"int passed as pointer"
+	FFIErrorIntAsPointer := 4.
+	"bad atomic type (e.g., unknown)"
+	FFIErrorBadAtomicType := 5.
+	"argument coercion failed"
+	FFIErrorCoercionFailed := 6.
+	"Type check for non-atomic types failed"
+	FFIErrorWrongType := 7.
+	"struct size wrong or too large"
+	FFIErrorStructSize := 8.
+	"unsupported calling convention"
+	FFIErrorCallType := 9.
+	"cannot return the given type"
+	FFIErrorBadReturn := 10.
+	"bad function address"
+	FFIErrorBadAddress := 11.
+	"no module given but required for finding address"
+	FFIErrorNoModule := 12.
+	"function address not found"
+	FFIErrorAddressNotFound := 13.
+	"attempt to pass 'void' parameter"
+	FFIErrorAttemptToPassVoid := 14.
+	"module not found"
+	FFIErrorModuleNotFound := 15.
+	"external library invalid"
+	FFIErrorBadExternalLibrary := 16.
+	"external function invalid"
+	FFIErrorBadExternalFunction := 17.
+	"ExternalAddress points to ST memory (don't you dare to do this!!)"
+	FFIErrorInvalidPointer := 18.! !
+!FFIConstants class methodsFor: 'pool initialization' stamp: 'ar 5/18/2003 18:34'!
+initializeTypeConstants
+	"type void"
+	FFITypeVoid := 0.
+
+	"type bool"
+	FFITypeBool := 1.
+
+	"basic integer types.
+	note: (integerType anyMask: 1) = integerType isSigned"
+
+	FFITypeUnsignedByte := 2.
+	FFITypeSignedByte := 3.
+	FFITypeUnsignedShort := 4.
+	FFITypeSignedShort := 5.
+	FFITypeUnsignedInt := 6.
+	FFITypeSignedInt := 7.
+
+	"64bit types"
+	FFITypeUnsignedLongLong := 8.
+	FFITypeSignedLongLong := 9.
+
+	"special integer types"
+	FFITypeUnsignedChar := 10.
+	FFITypeSignedChar := 11.
+
+	"float types"
+	FFITypeSingleFloat := 12.
+	FFITypeDoubleFloat := 13.
+
+	"type flags"
+	FFIFlagAtomic := 16r40000. "type is atomic"
+	FFIFlagPointer := 16r20000. "type is pointer to base type"
+	FFIFlagStructure := 16r10000. "baseType is structure of 64k length"
+	FFIStructSizeMask := 16rFFFF. "mask for max size of structure"
+	FFIAtomicTypeMask := 16r0F000000. "mask for atomic type spec"
+	FFIAtomicTypeShift := 24. "shift for atomic type"
+! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:31'!
+byteSize
+	"Return the size in bytes of this structure."
+	^self compiledSpec first bitAnd: FFIStructSizeMask! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'gk 3/1/2005 12:06'!
+compileAlias: spec withAccessors: aBool
+	"Define all the fields in the receiver.
+	Return the newly compiled spec."
+	| fieldName fieldType isPointerField externalType |
+	fieldName := spec first.
+	fieldType := spec second.
+	isPointerField := fieldType last = $*.
+	fieldType := fieldType copyWithout: $*.
+	externalType := ExternalType atomicTypeNamed: fieldType.
+	externalType == nil ifTrue:["non-atomic"
+		Symbol hasInterned: fieldType ifTrue:[:sym|
+			externalType := ExternalType structTypeNamed: sym]].
+	externalType == nil ifTrue:[
+		Transcript show:'(', fieldType,' is void)'.
+		externalType := ExternalType void].
+	isPointerField ifTrue:[externalType := externalType asPointerType].
+	(fieldName notNil and:[aBool]) ifTrue:[
+		self defineAliasAccessorsFor: fieldName
+			type: externalType].
+	isPointerField 
+		ifTrue:[compiledSpec := WordArray with: 
+					(ExternalType structureSpec bitOr: ExternalType pointerSpec)]
+		ifFalse:[compiledSpec := externalType compiledSpec].
+	ExternalType noticeModificationOf: self.
+	^compiledSpec! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 15:35'!
+compileAllFields
+	"ExternalStructure compileAllFields"
+	self withAllSubclassesDo:[:cls|
+		cls compileFields.
+	].! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:28'!
+compileFields
+	"Compile the field definition of the receiver.
+	Return the newly compiled spec."
+	^self compileFields: self fields! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:28'!
+compileFields: fieldSpec
+	"Compile the field definition of the receiver.
+	Return the newly compiled spec."
+	^self compileFields: fieldSpec withAccessors: false.! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'gk 3/1/2005 12:07'!
+compileFields: specArray withAccessors: aBool 
+	"Define all the fields in the receiver. 
+	Return the newly compiled spec."
+	| fieldName fieldType isPointerField externalType byteOffset typeSize typeSpec selfRefering |
+	(specArray size > 0
+			and: [specArray first class ~~ Array])
+		ifTrue: [^ self compileAlias: specArray withAccessors: aBool].
+	byteOffset := 1.
+	typeSpec := WriteStream
+				on: (WordArray new: 10).
+	typeSpec nextPut: FFIFlagStructure.
+	"dummy for size"
+	specArray
+		do: [:spec | 
+			fieldName := spec first.
+			fieldType := spec second.
+			isPointerField := fieldType last = $*.
+			fieldType := (fieldType findTokens: ' *') first.
+			externalType := ExternalType atomicTypeNamed: fieldType.
+			selfRefering := externalType == nil and: fieldType = self asString and: isPointerField.
+			selfRefering
+				ifTrue: [externalType := ExternalType void asPointerType]
+				ifFalse:
+			[externalType == nil
+				ifTrue: ["non-atomic"
+					Symbol
+						hasInterned: fieldType
+						ifTrue: [:sym | externalType := ExternalType structTypeNamed: sym]].
+			externalType == nil
+				ifTrue: [Transcript show: '(' , fieldType , ' is void)'.
+					externalType := ExternalType void].
+			isPointerField
+				ifTrue: [externalType := externalType asPointerType]].
+			typeSize := externalType byteSize.
+			spec size > 2
+				ifTrue: ["extra size"
+					spec third < typeSize
+						ifTrue: [^ self error: 'Explicit type size is less than expected'].
+					typeSize := spec third].
+			(fieldName notNil and: [aBool])
+				ifTrue: [self
+						defineFieldAccessorsFor: fieldName
+						startingAt: byteOffset
+						type: externalType].
+			typeSpec
+				nextPutAll: (externalType embeddedSpecWithSize: typeSize).
+			byteOffset := byteOffset + typeSize].
+	compiledSpec := typeSpec contents.
+	compiledSpec
+		at: 1
+		put: (byteOffset - 1 bitOr: FFIFlagStructure).
+	ExternalType noticeModificationOf: self.
+	^ compiledSpec! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:28'!
+compiledSpec
+	"Return the compiled spec of the receiver"
+	^compiledSpec ifNil:[self compileFields].! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 4/5/2006 01:18'!
+defineAliasAccessorsFor: fieldName type: type
+	"Define read/write accessors for the given field"
+	| code refClass argName |
+	(type isVoid and:[type isPointerType not]) ifTrue:[^self].
+	refClass := type referentClass.
+	code := String streamContents:[:s|
+		s 
+			nextPutAll: fieldName; crtab;
+			nextPutAll:'"This method was automatically generated"'; crtab.
+		refClass == nil 
+			ifTrue:[(type isAtomic and:[type isPointerType not]) 
+				ifTrue:[s nextPutAll:'^handle']
+				ifFalse:[s nextPutAll:'^ExternalData fromHandle: handle'.
+						type isPointerType ifTrue:[s nextPutAll:' asExternalPointer'].
+						s nextPutAll:' type: ';
+						nextPutAll: type externalTypeName]]
+			ifFalse:[s nextPutAll:'^', refClass name,' fromHandle: handle'.
+					type isPointerType ifTrue:[s nextPutAll:' asExternalPointer']]].
+	self compile: code classified: 'accessing'.
+
+	code := String streamContents:[:s|
+		argName := refClass == nil 
+			ifTrue:[(type isAtomic and:[type isPointerType not])
+				ifTrue:['anObject']
+				ifFalse:['anExternalData']]
+			ifFalse:['a',refClass name].
+		s
+			nextPutAll: fieldName,': '; nextPutAll: argName; crtab;
+			nextPutAll:'"This method was automatically generated"'; crtab.
+		(refClass == nil and:[type isAtomic and:[type isPointerType not]])
+			ifTrue:[s nextPutAll:'handle := ', argName]
+			ifFalse:[s nextPutAll:'handle := ', argName,' getHandle'.
+					type isPointerType ifTrue:[s nextPutAll:' asByteArrayPointer']]].
+	self compile: code classified: 'accessing'.! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 11/29/1999 00:42'!
+defineFieldAccessorsFor: fieldName startingAt: byteOffset type: type
+	"Define read/write accessors for the given field"
+	| code |
+	(type isVoid and:[type isPointerType not]) ifTrue:[^self].
+	code := fieldName,'
+	"This method was automatically generated"
+	', (type readFieldAt: byteOffset).
+	self compile: code classified: 'accessing'.
+	code := fieldName,': anObject
+	"This method was automatically generated"
+	', (type writeFieldAt: byteOffset with:'anObject').
+	self compile: code classified: 'accessing'.! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:37'!
+defineFields
+	"Define all the fields in the receiver"
+	self defineFields: self fields.! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 12/2/1999 14:38'!
+defineFields: fields
+	"Define all the fields in the receiver"
+	self compileFields: fields withAccessors: true.! !
+!ExternalStructure class methodsFor: 'class management' stamp: 'ar 11/22/1999 10:10'!
+doneCompiling
+	"I have been recompiled. Update any types that reference me."
+	ExternalType noticeModificationOf: self.! !
+!ExternalStructure class methodsFor: 'instance creation' stamp: 'ar 12/1/1999 15:58'!
+externalNew
+	"Create an instance of the receiver on the external heap"
+	^self fromHandle: (ExternalAddress allocate: self byteSize)! !
+!ExternalStructure class methodsFor: 'converting' stamp: 'ar 12/2/1999 16:55'!
+externalType
+	"Return an external type describing the receiver as a structure"
+	^ExternalType structTypeNamed: self name! !
+!ExternalStructure class methodsFor: 'field definition' stamp: 'ar 11/29/1999 00:28'!
+fields
+	"Return the fields defining the receiver"
+	^#()! !
+!ExternalStructure class methodsFor: 'class management' stamp: 'ar 1/26/2000 14:20'!
+fileOutInitializerOn: aFileStream
+	super fileOutInitializerOn: aFileStream.
+	aFileStream cr.
+	aFileStream cr.
+	aFileStream nextChunkPut: self name , ' compileFields'.
+	aFileStream cr.! !
+!ExternalStructure class methodsFor: 'class management' stamp: 'ar 1/26/2000 14:19'!
+fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool
+	super fileOutOn: aFileStream
+		moveSource: moveSource
+		toFile: fileIndex
+		initializing: aBool.
+	(aBool and:[moveSource not]) ifTrue: 
+		[aFileStream cr.
+		aFileStream cr.
+		aFileStream nextChunkPut: self name , ' compileFields'.
+		aFileStream cr]! !
+!ExternalStructure class methodsFor: 'instance creation' stamp: 'ar 11/29/1999 00:36'!
+fromHandle: aHandle
+	^self basicNew setHandle: aHandle! !
+!ExternalStructure class methodsFor: 'instance creation' stamp: 'ar 12/1/1999 15:58'!
+new
+	^self fromHandle: (ByteArray new: self byteSize)! !
+!ExternalStructure class methodsFor: 'class management' stamp: 'sma 6/16/2000 22:12'!
+obsolete
+	"The receiver is becoming obsolete. 
+	NOTE: You if you remove the whole class category at once, you cannot
+	assume that the ExternalType class is still present."
+
+	Smalltalk at: #ExternalType ifPresent: [:class | class noticeRemovalOf: self].
+	^ super obsolete! !
+!ExternalStructure class methodsFor: 'class management' stamp: 'ar 11/22/1999 04:12'!
+rename: aString
+	| oldName |
+	oldName := name.
+	super rename: aString.
+	oldName = name ifFalse:[ExternalType noticeRenamingOf: self from: oldName to: name].! !
+!ExternalStructure methodsFor: 'initialize-release' stamp: 'ar 11/28/1999 23:21'!
+free
+	"Free the handle pointed to by the receiver"
+	(handle ~~ nil and:[handle isExternalAddress]) ifTrue:[handle free].
+	handle := nil.! !
+!ExternalStructure methodsFor: 'printing' stamp: 'gk 3/1/2005 12:07'!
+longPrintOn: aStream 
+	"Append to the argument, aStream, the names and values of all the record's variables."
+	| fields |
+	fields := self class fields.
+	(fields isEmpty or: [fields first isNil]) ifTrue: [fields := #()]
+		ifFalse: [(fields first isKindOf: Array) ifFalse: [fields := Array with: fields]].
+	fields do: [ :field |
+		field first notNil ifTrue: [
+			aStream nextPutAll: field first; nextPut: $:; space; tab.
+			(self perform: field first) printOn: aStream.
+			aStream cr]].! !
+!ExternalData class methodsFor: 'class initialization' stamp: 'ar 8/14/2006 23:18'!
+compileFields
+	"Ensure proper initialization of ExternalType when first loading"
+	ExternalType initialize.
+	^super compileFields! !
+!ExternalData class methodsFor: 'field definition' stamp: 'ar 1/27/2000 01:23'!
+fields
+	"ExternalData defineFields"
+	"Note: The definition is for completeness only.
+	ExternalData is treated specially by the VM."
+	^#(nil 'void*')! !
+!ExternalData class methodsFor: 'instance creation' stamp: 'ar 12/2/1999 14:57'!
+fromHandle: aHandle type: aType
+	"Create a pointer to the given type"
+	"ExternalData fromHandle: ExternalAddress new type: ExternalType float"
+	^self basicNew setHandle: aHandle type: aType! !
+!ExternalData class methodsFor: 'instance creation' stamp: 'ar 11/22/1999 04:28'!
+new
+	"You better not..."
+	^self shouldNotImplement! !
+!ExternalData methodsFor: 'conversion' stamp: 'hg 2/25/2000 14:51'!
+fromCString
+	"Assume that the receiver represents a C string and convert it to a Smalltalk string. hg 2/25/2000 14:18"
+
+	| stream index char |
+	type isPointerType ifFalse: [self error: 'External object is not a pointer type.'].
+	stream := WriteStream on: String new.
+	index := 1.
+	[(char := handle unsignedCharAt: index) = 0 asCharacter] whileFalse: [
+		stream nextPut: char.
+		index := index + 1].
+	^stream contents! !
+!ExternalData methodsFor: 'private' stamp: 'ar 11/21/1999 14:23'!
+setHandle: aHandle type: aType
+	handle := aHandle.
+	type := aType.! !
+!ExternalFunction class methodsFor: 'compiler support' stamp: 'ar 12/2/1999 16:20'!
+atomicTypeNamed: aString
+	^ExternalType atomicTypeNamed: aString! !
+!ExternalFunction class methodsFor: 'constants' stamp: 'ar 11/19/1999 16:36'!
+callTypeAPI
+	^FFICallTypeApi! !
+!ExternalFunction class methodsFor: 'constants' stamp: 'ar 11/19/1999 16:36'!
+callTypeCDecl
+	^FFICallTypeCDecl! !
+!ExternalFunction class methodsFor: 'compiler support' stamp: 'ar 11/17/1999 19:58'!
+callingConventionFor: aString
+	"Return the constant describing the calling convention for the given string specification or nil if unknown."
+	aString = 'cdecl:' ifTrue:[^self callTypeCDecl].
+	aString = 'apicall:' ifTrue:[^self callTypeAPI].
+	^nil! !
+!ExternalFunction class methodsFor: 'error handling' stamp: 'ar 11/19/1999 14:17'!
+errorMessageFor: code
+	"Return the error message for the given error code from the foreign function interface"
+	^FFIErrorMessages at: code ifAbsent:['Call to external function failed'].! !
+!ExternalFunction class methodsFor: 'compiler support' stamp: 'ar 12/2/1999 16:49'!
+forceTypeNamed: aString
+	^ExternalType forceTypeNamed: aString! !
+!ExternalFunction class methodsFor: 'error handling' stamp: 'ar 11/28/1999 18:37'!
+getLastError
+	"Return the last error from an external call.
+	Only valid immediately after the external call failed."
+	<primitive: 'primitiveFFIGetLastError' module:'SqueakFFIPrims'>
+	^-1! !
+!ExternalFunction class methodsFor: 'class initialization' stamp: 'ar 8/14/2006 23:14'!
+initialize
+	"ExternalFunction initialize"
+	FFIConstants initialize. "ensure proper initialization"
+	self initializeErrorMessages.! !
+!ExternalFunction class methodsFor: 'class initialization' stamp: 'ar 5/18/2003 18:53'!
+initializeErrorMessages
+	"ExternalFunction initializeErrorConstants"
+	FFIErrorMessages := Dictionary new.
+	FFIErrorMessages
+		at: FFINoCalloutAvailable put: 'Callout mechanism not available';
+		at: FFIErrorGenericError put: 'A call to an external function failed';
+		at: FFIErrorNotFunction put: 'Only ExternalFunctions can be called';
+		at: FFIErrorBadArgs put: 'Bad arguments in primitive invokation';
+		at: FFIErrorBadArg put: 'Bad argument for external function';
+		at: FFIErrorIntAsPointer put: 'Cannot use integer as pointer';
+		at: FFIErrorBadAtomicType put: 'Unknown atomic type in external call';
+		at: FFIErrorCoercionFailed put: 'Could not coerce arguments';
+		at: FFIErrorWrongType put: 'Wrong type in external call';
+		at: FFIErrorStructSize put: 'Bad structure size in external call';
+		at: FFIErrorCallType put: 'Unsupported calling convention';
+		at: FFIErrorBadReturn put: 'Cannot return the given type';
+		at: FFIErrorBadAddress put: 'Bad function address';
+		at: FFIErrorNoModule put: 'No module to load address from';
+		at: FFIErrorAddressNotFound put: 'Unable to find function address';
+		at: FFIErrorAttemptToPassVoid put: 'Cannot pass ''void'' parameter';
+		at: FFIErrorModuleNotFound put: 'External module not found';
+		at: FFIErrorBadExternalLibrary put: 'External library is invalid';
+		at: FFIErrorBadExternalFunction put: 'External function is invalid';
+		at: FFIErrorInvalidPointer put: 'Attempt to pass invalid pointer';
+	yourself! !
+!ExternalFunction class methodsFor: 'compiler support' stamp: 'ar 12/2/1999 16:30'!
+isValidType: anObject
+	^anObject isBehavior and:[anObject includesBehavior: ExternalStructure]! !
+!ExternalFunction class methodsFor: 'compiler support' stamp: 'ar 12/2/1999 16:21'!
+structTypeNamed: aString
+	^ExternalType structTypeNamed: aString! !
+!ExternalFunction methodsFor: 'accessing' stamp: 'ar 11/19/1999 19:13'!
+argTypes
+	^argTypes! !
+!ExternalFunction methodsFor: 'printing' stamp: 'ar 11/19/1999 16:35'!
+callingConventionString
+	(flags allMask: FFICallTypeApi) 
+		ifTrue:[^'apicall']
+		ifFalse:[^'cdecl']! !
+!ExternalFunction methodsFor: 'accessing' stamp: 'ar 11/19/1999 19:13'!
+flags
+	^flags! !
+!ExternalFunction methodsFor: 'initialize-release' stamp: 'ar 11/29/1999 00:35'!
+initialize
+	"Initialize the receiver"
+	handle := ExternalAddress new.! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:54'!
+invoke
+	^self invokeWithArguments: #()! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:53'!
+invokeWith: arg1
+	^self invokeWithArguments: (Array with: arg1)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:53'!
+invokeWith: arg1 with: arg2
+	^self invokeWithArguments: (Array with: arg1 with: arg2)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:53'!
+invokeWith: arg1 with: arg2 with: arg3
+	^self invokeWithArguments: (Array with: arg1 with: arg2 with: arg3)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 19:08'!
+invokeWith: arg1 with: arg2 with: arg3 with: arg4
+	^self invokeWithArguments: (Array with: arg1 with: arg2 with: arg3 with: arg4)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:53'!
+invokeWith: arg1 with: arg2 with: arg3 with: arg4 with: arg5
+	^self invokeWithArguments: (Array with: arg1 with: arg2 with: arg3 with: arg4 with: arg5)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/19/1999 21:54'!
+invokeWith: arg1 with: arg2 with: arg3 with: arg4 with: arg5 with: arg6
+	^self invokeWithArguments: (Array with: arg1 with: arg2 with: arg3 with: arg4 with: arg5 with: arg6)! !
+!ExternalFunction methodsFor: 'invoking' stamp: 'ar 11/28/1999 20:12'!
+invokeWithArguments: argArray
+	"Manually invoke the receiver, representing an external function."
+	<primitive: 'primitiveCalloutWithArgs' module:'SqueakFFIPrims'>
+	^self externalCallFailed! !
+!ExternalFunction methodsFor: 'accessing' stamp: 'ar 11/17/1999 19:55'!
+module
+	^nil! !
+!ExternalFunction methodsFor: 'accessing' stamp: 'ar 11/17/1999 17:06'!
+name
+	^nil! !
+!ExternalFunction methodsFor: 'printing' stamp: 'ar 11/19/1999 19:12'!
+printOn: aStream
+	aStream
+		nextPut:$<;
+		nextPutAll: self callingConventionString; nextPutAll:': ';
+		print: argTypes first; space.
+	self name == nil
+		ifTrue:[aStream nextPutAll:'(*) ']
+		ifFalse:[aStream print: self name asString; space].
+	aStream nextPut:$(.
+	2 to: argTypes size do:[:i|
+		aStream print: (argTypes at: i).
+		i < argTypes size ifTrue:[aStream space]].
+	aStream nextPut:$).
+	self module == nil ifFalse:[
+		aStream space; nextPutAll:'module: '; print: self module asString.
+	].
+	aStream nextPut:$>! !
+!ExternalType class methodsFor: 'private' stamp: 'ar 12/2/1999 16:59'!
+atomicTypeNamed: aString
+	^AtomicTypes at: aString ifAbsent:[nil]! !
+!ExternalType class methodsFor: 'type constants' stamp: 'ar 12/2/1999 16:56'!
+bool
+	^AtomicTypes at: 'bool'! !
+!ExternalType class methodsFor: 'type constants' stamp: 'ar 11/20/1999 17:29'!
+byte
+	"byte defaults to unsigned byte"
+	^self unsignedByte! !
+!ExternalType class methodsFor: 'type constants' stamp: 'ar 11/20/1999 17:29'!
+char
+	"char defaults to unsigned char"
+	^self unsignedChar! !
+!ExternalType class methodsFor: 'housekeeping' stamp: 'ar 12/2/1999 18:00'!
+cleanupUnusedTypes
+	"ExternalType cleanupUnusedTypes"
+	| value |
+	StructTypes keys do:[:key|
+		value := StructTypes at: key.
+		value == nil ifTrue:[StructTypes removeKey: key ifAbsent:[]]].! !
+!ExternalType class methodsFor: 'type constants' stamp: 'ar 12/2/1999 16:56'!
+double
+	^AtomicTypes at: 'double'! !
+!ExternalType class methodsFor: 'type constants' stamp: 'ar 12/2/1999 16:57'!
+float
+	^AtomicTypes at: 'float'! !
+!ExternalType class methodsFor: 'private' stamp: 'ar 12/2/1999 16:50'!
+forceTypeNamed: aString
+	^self newTypeNamed: aString force: true! !
+!ExternalType class methodsFor: 'class initialization' stamp: 'ar 12/2/1999 16:15'!
+initialize
+	"ExternalType initialize"
+	self initializeFFIConstants.
+	self initializeDefaultTypes.! !
+
+----QUIT/NOSAVE----an Array(8 July 2010 7:16:34 pm) iPhone.image priorSource: 5466990!
+!ExternalObject commentStamp: '<historical>' prior: 0!
+External objects represent entities that are not part of the Smalltalk universe. They are accessed using a unique handle which is interpreted depending on the actual entity that is represented. 
+
+Instance variables:
+	handle	<ByteArray | ExternalAddress>!
+!ExternalLibrary commentStamp: '<historical>' prior: 0!
+An external library bundles calls to functions from the same library. It is provided mainly as convenience since every external function can be fully specified by the name and the module it resides in.
+
+Every external function that is defined in an external library by default will use the library it is defined in. This can always be modified by providing the appropriate module in the specification. !
+!ExternalForm commentStamp: 'jcg 1/29/2010 01:00' prior: 0!
+An ExternalForm is a specialized Form whose pixel-data is stored in memory that the user provides a pointer to.  This can simply be memory on the C heap, or (the motivating use-case...) it can be a pointer that is temporarily "mapped" from GPU memory by an API such as OpenCL.
+
+The user is responsible for both releasing the image-memory, as well as destroying the surface handle (perhaps the latter should be handled by automatic finalization).
+
+Example usage:
+
+| extent form ptr |
+extent := 400 at 300.
+form := ExternalForm extent: extent depth: 32.
+ptr := ExternalAddress gcallocate: (extent x * extent y * 4).
+form setManualSurfacePointer: ptr.
+Display displayScaledOn: form.
+form displayAt: 0 at 0.
+form destroySurface.
+!
+!ExternalAddress commentStamp: '<historical>' prior: 0!
+An ExternalAddress is an opaque handle to objects outside Smalltalk memory (e.g., a pointer).!
+!ExternalObject commentStamp: '<historical>' prior: 39080883!
+External objects represent entities that are not part of the Smalltalk universe. They are accessed using a unique handle which is interpreted depending on the actual entity that is represented. 
+
+Instance variables:
+	handle	<ByteArray | ExternalAddress>!
+!ExternalLibrary commentStamp: '<historical>' prior: 39081194!
+An external library bundles calls to functions from the same library. It is provided mainly as convenience since every external function can be fully specified by the name and the module it resides in.
+
+Every external function that is defined in an external library by default will use the library it is defined in. This can always be modified by providing the appropriate module in the specification. !
+
+----STARTUP----an Array(8 July 2010 7:19:05 pm) as /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/iPhone/iPhone.image!
+
+!ExternalLibrary class methodsFor: 'accessing' stamp: 'ar 11/17/1999 19:33'!
+moduleName
+	"Return the name of the module for this library"
+	^nil! !
+!ExternalLibrary methodsFor: 'initialize-release' stamp: 'ar 12/8/1999 21:49'!
+forceLoading
+	"Primitive. Force loading the given library.
+	The primitive will fail if the library is not available
+	or if anything is wrong with the receiver."
+	<primitive: 'primitiveForceLoad' module:'SqueakFFIPrims'>
+	^self externalCallFailed "The primitive will set the error code"! !
+!ExternalLibrary methodsFor: 'accessing' stamp: 'ar 11/17/1999 19:35'!
+handle
+	^handle! !
+!ExternalLibrary methodsFor: 'initialize-release' stamp: 'ar 11/29/1999 00:35'!
+initialize
+	"Initialize the receiver"
+	name := self class moduleName.
+	handle := ExternalAddress new.! !
+!ExternalLibrary methodsFor: 'accessing' stamp: 'ar 11/17/1999 19:35'!
+name
+	^name! !
+!ExternalObject class methodsFor: 'class initialization' stamp: 'ar 11/19/1999 22:37'!
+initialize
+	"ExternalObject initialize"
+	Smalltalk addToStartUpList: self after: ShortRunArray.! !
+!ExternalObject class methodsFor: 'system startup' stamp: 'ar 11/28/1999 23:37'!
+install
+	"Notify all instances of the receiver that we're coming up on a new platform.
+	Note: The default implementation does nothing since the general external
+	objects are cleaned up by ExternalAddress>>startUp: but subclasses may
+	implement this method so that the appropriate action for existing instances can
+	be taken."! !
+!ExternalObject class methodsFor: 'system startup' stamp: 'ar 11/28/1999 23:36'!
+installSubclasses
+	"Notify all the subclasses of ExternalObject that we are starting up on a new platform."
+	self withAllSubclassesDo:[:cls| cls install].! !
+!ExternalObject class methodsFor: 'system startup' stamp: 'ar 11/28/1999 23:36'!
+startUp: resuming
+	"The system is coming up. If it is on a new platform, clear out the existing handles."
+	ExternalAddress startUp: resuming. "Make sure handles are invalid"
+	resuming ifTrue:[self installSubclasses].
+! !
+!ExternalObject methodsFor: 'private' stamp: 'ar 11/16/1999 20:25'!
+getHandle
+	"Private. Return the handle used to represent the external entitiy."
+	^handle! !
+!ExternalObject methodsFor: 'testing' stamp: 'jcg 6/4/2010 02:40'!
+isExternalAddress
+	"Return true if the receiver describes the address of an object in the outside world"
+	^false! !
+!ExternalObject methodsFor: 'private' stamp: 'ar 11/16/1999 20:26'!
+setHandle: anObject
+	"Private. Set the handle used to represent the external entity."
+	handle := anObject! !
+!Object methodsFor: '*FFI-Kernel' stamp: 'ar 8/14/2006 23:02'!
+externalCallFailed
+	"Raise an error after a failed call to an external function"
+	| errCode |
+	errCode := ExternalFunction getLastError. "this allows us to look at the actual error code"
+	^self error: (ExternalFunction errorMessageFor: errCode).! !
+!ExternalForm commentStamp: 'jcg 1/29/2010 01:00' prior: 39081658!
+An ExternalForm is a specialized Form whose pixel-data is stored in memory that the user provides a pointer to.  This can simply be memory on the C heap, or (the motivating use-case...) it can be a pointer that is temporarily "mapped" from GPU memory by an API such as OpenCL.
+
+The user is responsible for both releasing the image-memory, as well as destroying the surface handle (perhaps the latter should be handled by automatic finalization).
+
+Example usage:
+
+| extent form ptr |
+extent := 400 at 300.
+form := ExternalForm extent: extent depth: 32.
+ptr := ExternalAddress gcallocate: (extent x * extent y * 4).
+form setManualSurfacePointer: ptr.
+Display displayScaledOn: form.
+form displayAt: 0 at 0.
+form destroySurface.
+!
+!ExternalForm methodsFor: 'initialize' stamp: 'jcg 6/6/2010 14:32'!
+allocateSpace
+	"Convenient way to allocate space for the pixels.  This isn't done by default, because it is common to use a pointer obtained from elsewhere."
+	| addr |
+	pointer ifNotNil: [self error: 'space is already allocated'].
+	addr := ExternalAddress gcallocate: width*height * depth/8. "area times bytes/pixel"
+	self setManualSurfacePointer: addr.! !
+!ExternalForm methodsFor: 'initialize' stamp: 'jcg 1/29/2010 01:29'!
+destroySurface
+	"Users must call this explicitly when this object is no longer needed; otherwise, resource-leakage will occur in the SurfacePlugin"
+	bits ifNotNil: [:surfaceID |
+		bits := nil.
+		self primDestroyManualSurface: surfaceID
+	].! !
+!ExternalForm methodsFor: 'initialize' stamp: 'jcg 6/4/2010 02:04'!
+initialize
+	super initialize.
+	pointer := nil.
+	! !
+!ExternalForm methodsFor: 'accessing' stamp: 'jcg 2/16/2010 00:01'!
+pointer
+	^pointer! !
+!ExternalForm methodsFor: 'primitives' stamp: 'jcg 1/30/2010 02:52'!
+primCreateManualSurfaceWidth: width height: height rowPitch: rowPitch depth: depth isMSB: isMSB
+	<primitive: 'primitiveCreateManualSurface' module: 'SqueakFFIPrims'>
+	self primitiveFailed
+! !
+!ExternalForm methodsFor: 'primitives' stamp: 'jcg 1/30/2010 02:52'!
+primDestroyManualSurface: surfaceID
+	<primitive: 'primitiveDestroyManualSurface' module: 'SqueakFFIPrims'>
+	self primitiveFailed
+! !
+!ExternalForm methodsFor: 'primitives' stamp: 'jcg 1/30/2010 02:52'!
+primManualSurface: surfaceID setPointer: pointer
+	"The 'surfaceID' is a handle returned by #primitiveCreateManualSurface from SurfacePlugin. The pointer is a 32-bit unsigned integer that SurfacePlugin casts to a void*."
+	<primitive: 'primitiveSetManualSurfacePointer' module: 'SqueakFFIPrims'>
+	self primitiveFailed
+! !
+!ExternalForm methodsFor: 'initialize' stamp: 'jcg 1/26/2010 02:00'!
+setExtent: extent depth: bitsPerPixel
+	bits ifNotNil: [self error: 'bits are already set'].
+	bitsPerPixel == 32 ifFalse: [self error: 'only 32 bits for now'.  "see 'rowPitch' below"].
+	width := extent x asInteger.
+	width < 0 ifTrue: [width := 0].
+	height := extent y asInteger.
+	height < 0 ifTrue: [height := 0].
+	depth := bitsPerPixel.
+	bits := self 
+		primCreateManualSurfaceWidth: width 
+		height: height 
+		rowPitch: width * 4
+		depth: bitsPerPixel
+		isMSB: true.! !
+!ExternalForm methodsFor: 'initialize' stamp: 'jcg 1/29/2010 01:31'!
+setExtent: extent depth: bitsPerPixel bits: pointer
+	self setExtent: extent depth: bitsPerPixel.
+	self setManualSurfacePointer: pointer.! !
+!ExternalForm methodsFor: 'initialize' stamp: 'jcg 6/6/2010 13:37'!
+setManualSurfacePointer: newPointer "ExternalStructure, ExternalAddress, or nil"
+	"Set the memory-location of the image data.  It is OK to set a NULL pointer; in this case, any attempt to BitBlt to or from the form will result in a primitive-failure."
+	| integer |
+	pointer := newPointer.
+	pointer ifNil: [^self primManualSurface: bits setPointer: 0].
+	pointer isExternalAddress
+		ifFalse: ["must already be ExternalStructure, so nothing to do"]
+		ifTrue: [pointer := ExternalData 
+							fromHandle: newPointer 
+							type: ExternalType void asPointerType].
+	"The primitive expects an unsigned integer arg, not an ExternalAddress."
+	"NOTE: it used to be acceptable for 'newPointer' to be an Integer... 
+	 if you get a MNU for #getHandle here, you should update your code 
+	 to pass in either an ExternalStructure or an ExternalAddress."
+	integer := pointer getHandle 
+				unsignedLongAt: 1 
+				bigEndian: SmalltalkImage current isBigEndian.
+	self primManualSurface: bits setPointer: integer.! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 1/28/2000 17:45'!
+asExternalPointer
+	"Convert the receiver assuming that it describes a pointer to an object."
+	^(ExternalAddress new)
+		basicAt: 1 put: (self byteAt: 1);
+		basicAt: 2 put: (self byteAt: 2);
+		basicAt: 3 put: (self byteAt: 3);
+		basicAt: 4 put: (self byteAt: 4);
+	yourself! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:15'!
+booleanAt: byteOffset
+	"bool is only valid with function declarations"
+	^self shouldNotImplement! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:15'!
+booleanAt: byteOffset put: value
+	"bool is only valid with function declarations"
+	^self shouldNotImplement! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:44'!
+doubleAt: byteOffset
+	<primitive:'primitiveFFIDoubleAt' module:'SqueakFFIPrims'>
+	^self primitiveFailed! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:13'!
+doubleAt: byteOffset put: value
+	<primitive:'primitiveFFIDoubleAtPut' module:'SqueakFFIPrims'>
+	^self primitiveFailed! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:13'!
+floatAt: byteOffset
+	<primitive:'primitiveFFIFloatAt' module:'SqueakFFIPrims'>
+	^self primitiveFailed! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:13'!
+floatAt: byteOffset put: value
+	<primitive:'primitiveFFIFloatAtPut' module:'SqueakFFIPrims'>
+	^self primitiveFailed! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/28/1999 23:56'!
+integerAt: byteOffset put: value size: nBytes signed: aBoolean
+	"Primitive. Store the given value as integer of nBytes size
+	in the receiver. Fail if the value is out of range.
+	Note: This primitive will access memory in the outer space if
+	invoked from ExternalAddress."
+	<primitive: 'primitiveFFIIntegerAtPut' module:'SqueakFFIPrims'>
+	^self primitiveFailed! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/28/1999 23:55'!
+integerAt: byteOffset size: nBytes signed: aBoolean
+	"Primitive. Return an integer of nBytes size from the receiver.
+	Note: This primitive will access memory in the outer space if
+	invoked from ExternalAddress."
+	<primitive: 'primitiveFFIIntegerAt' module:'SqueakFFIPrims'>
+	^self primitiveFailed! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'jcg 6/4/2010 02:40'!
+isExternalAddress
+	"Return true if the receiver describes the address of an object in the outside world"
+	^false! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/28/1999 23:15'!
+pointerAt: byteOffset
+	"Return a pointer object stored at the given byte address"
+	| addr |
+	addr := ExternalAddress new.
+	1 to: 4 do:[:i|
+		addr basicAt: i put: (self unsignedByteAt: byteOffset+i-1)].
+	^addr! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'hg 2/28/2000 15:34'!
+pointerAt: byteOffset put: value
+	"Store a pointer object at the given byte address"
+	value isExternalAddress ifFalse:[^self error:'Only external addresses can be stored'].
+	1 to: 4 do:[:i|
+		self unsignedByteAt: byteOffset+i-1 put: (value basicAt: i)].
+	^value! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 01:39'!
+signedByteAt: byteOffset
+	"Return a 8bit signed integer starting at the given byte offset"
+	^self integerAt: byteOffset size: 1 signed: true! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 01:39'!
+signedByteAt: byteOffset put: value
+	"Store a 8bit signed integer starting at the given byte offset"
+	^self integerAt: byteOffset put: value size: 1 signed: true! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/28/1999 23:53'!
+signedCharAt: byteOffset
+	^(self unsignedByteAt: byteOffset) asCharacter! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/28/1999 23:54'!
+signedCharAt: byteOffset put: aCharacter
+	^self unsignedByteAt: byteOffset put: aCharacter asciiValue! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 15:54'!
+signedLongAt: byteOffset
+	"Return a 32bit signed integer starting at the given byte offset"
+	^self integerAt: byteOffset size: 4 signed: true! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 15:54'!
+signedLongAt: byteOffset put: value
+	"Store a 32bit signed integer starting at the given byte offset"
+	^self integerAt: byteOffset put: value size: 4 signed: true! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:16'!
+signedLongLongAt: byteOffset
+	"This is not yet supported"
+	^self notYetImplemented! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:17'!
+signedLongLongAt: byteOffset put: value
+	"This is not yet supported"
+	^self notYetImplemented! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 15:54'!
+signedShortAt: byteOffset
+	"Return a 16bit signed integer starting at the given byte offset"
+	^self integerAt: byteOffset size: 2 signed: true! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 15:54'!
+signedShortAt: byteOffset put: value
+	"Store a 16bit signed integer starting at the given byte offset"
+	^self integerAt: byteOffset put: value size: 2 signed: true! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'hg 2/28/2000 13:56'!
+structAt: byteOffset length: length
+	"Return a structure of the given length starting at the indicated byte offset."
+	| value |
+	value := ByteArray new: length.
+	1 to: length do:[:i|
+		value unsignedByteAt: i put: (self unsignedByteAt: byteOffset+i-1)].
+	^value! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/28/1999 21:11'!
+structAt: byteOffset put: value length: length
+	"Store a structure of the given length starting at the indicated byte offset."
+	1 to: length do:[:i|
+		self unsignedByteAt: byteOffset+i-1 put: (value unsignedByteAt: i)].
+	^value! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 01:40'!
+unsignedByteAt: byteOffset
+	"Return a 8bit unsigned integer starting at the given byte offset"
+	^self integerAt: byteOffset size: 1 signed: false! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 01:40'!
+unsignedByteAt: byteOffset put: value
+	"Store a 8bit unsigned integer starting at the given byte offset"
+	^self integerAt: byteOffset put: value size: 1 signed: false! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/28/1999 23:53'!
+unsignedCharAt: byteOffset
+	^(self unsignedByteAt: byteOffset) asCharacter! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/28/1999 23:54'!
+unsignedCharAt: byteOffset put: aCharacter
+	^self unsignedByteAt: byteOffset put: aCharacter asciiValue! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 01:23'!
+unsignedLongAt: byteOffset
+	"Return a 32bit unsigned integer starting at the given byte offset"
+	^self integerAt: byteOffset size: 4 signed: false! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 01:23'!
+unsignedLongAt: byteOffset put: value
+	"Store a 32bit signed integer starting at the given byte offset"
+	^self integerAt: byteOffset put: value size: 4 signed: false! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:17'!
+unsignedLongLongAt: byteOffset
+	"This is not yet supported"
+	^self notYetImplemented! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:17'!
+unsignedLongLongAt: byteOffset put: value
+	"This is not yet supported"
+	^self notYetImplemented! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 00:55'!
+unsignedShortAt: byteOffset
+	"Return a 16bit unsigned integer starting at the given byte offset"
+	^self integerAt: byteOffset size: 2 signed: false! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/21/1999 00:56'!
+unsignedShortAt: byteOffset put: value
+	"Store a 16bit unsigned integer starting at the given byte offset"
+	^self integerAt: byteOffset put: value size: 2 signed: false! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:16'!
+voidAt: byteOffset
+	"no accessors for void"
+	^self shouldNotImplement! !
+!ByteArray methodsFor: '*FFI-Kernel' stamp: 'ar 11/29/1999 00:16'!
+voidAt: byteOffset put: value
+	"no accessors for void"
+	^self shouldNotImplement! !
+!ExternalAddress commentStamp: '<historical>' prior: 39082435!
+An ExternalAddress is an opaque handle to objects outside Smalltalk memory (e.g., a pointer).!
+!ExternalAddress class methodsFor: 'instance creation' stamp: 'ar 11/28/1999 23:20'!
+allocate: byteSize
+	"Primitive. Allocate an object on the external heap."
+	<primitive:'primitiveFFIAllocate' module:'SqueakFFIPrims'>
+	^self primitiveFailed! !
+!ExternalAddress class methodsFor: 'instance creation' stamp: 'nice 5/19/2006 03:24'!
+gcallocate: byteSize
+	"Primitive. Allocate an object on the external heap.
+	The external memory will be freed when i am garbage collected.
+	BEWARE: there should be no copy of self, nor any pointer to a sub part..."
+	
+	| externalAddress |
+	externalAddress := self allocate: byteSize.
+	self finalizationRegistry add: externalAddress.
+	^externalAddress! !
+!ExternalAddress class methodsFor: 'instance creation' stamp: 'ar 11/21/1999 15:44'!
+new
+	"External addresses are always 4 bytes long"
+	^super new: 4! !
+!ExternalAddress class methodsFor: 'instance creation' stamp: 'ar 11/21/1999 15:44'!
+new: n
+	"You better don't try this..."
+	^self shouldNotImplement! !
+!ExternalAddress class methodsFor: 'class initialization' stamp: 'ar 11/28/1999 23:32'!
+startUp: resuming
+	resuming ifTrue:[self allInstancesDo:[:addr| addr beNull]].! !
+!ExternalAddress methodsFor: 'private' stamp: 'ar 1/28/2000 17:45'!
+asByteArrayPointer
+	"Return a ByteArray describing a pointer to the contents of the receiver."
+	^(ByteArray new: 4)
+		byteAt: 1 put: (self basicAt: 1);
+		byteAt: 2 put: (self basicAt: 2);
+		byteAt: 3 put: (self basicAt: 3);
+		byteAt: 4 put: (self basicAt: 4);
+	yourself! !
+!ExternalAddress methodsFor: 'private' stamp: 'jcg 2/16/2010 01:00'!
+asExternalPointer
+	"No need to convert."
+	^self! !
+!ExternalAddress methodsFor: 'converting' stamp: 'bf 2/21/2001 23:50'!
+asInteger
+	"convert address to integer"
+	^ self asByteArrayPointer unsignedLongAt: 1! !
+!ExternalAddress methodsFor: 'initialize-release' stamp: 'ar 11/22/1999 04:25'!
+beNull
+	"Make the receiver a NULL pointer"
+	self atAllPut: 0.! !
+!ExternalAddress methodsFor: 'accessing' stamp: 'ar 11/21/1999 15:43'!
+byteAt: byteOffset
+	"Go through a different primitive since the receiver describes data in the outside world"
+	^self unsignedByteAt: byteOffset! !
+!ExternalAddress methodsFor: 'accessing' stamp: 'ar 11/21/1999 15:43'!
+byteAt: byteOffset put: value
+	"Go through a different primitive since the receiver describes data in the outside world"
+	^self unsignedByteAt: byteOffset put: value! !
+!ExternalAddress methodsFor: 'initialize-release' stamp: 'nice 5/19/2006 03:17'!
+finalize
+	"I am an executor (a copy) of an ExternalAddress that was just garbage collected.
+	I must finalize. my mission is to free memory"
+	
+	self free! !
+!ExternalAddress methodsFor: 'initialize-release' stamp: 'ar 11/28/1999 23:40'!
+free
+	"Primitive. Free the object pointed to on the external heap.
+	Dangerous - may break your system if the receiver hasn't been
+	allocated by ExternalAddress class>>allocate:. No checks are done."
+	<primitive:'primitiveFFIFree' module:'SqueakFFIPrims'>
+	^self primitiveFailed! !
+!ExternalAddress methodsFor: 'converting' stamp: 'bf 2/21/2001 23:50'!
+fromInteger: address
+	"set my handle to point at address."
+	"Do we really need this? bf 2/21/2001 23:48"
+
+	| pointer |
+	pointer := ByteArray new: 4.
+	pointer unsignedLongAt: 1 put: address.
+	self basicAt: 1 put: (pointer byteAt: 1);
+		basicAt: 2 put: (pointer byteAt: 2);
+		basicAt: 3 put: (pointer byteAt: 3);
+		basicAt: 4 put: (pointer byteAt: 4)
+! !
+!ExternalAddress methodsFor: 'accessing' stamp: 'jcg 6/4/2010 02:40'!
+isExternalAddress
+	"Return true if the receiver describes the address of an object in the outside world"
+	^true! !
+!ExternalAddress methodsFor: 'printing' stamp: 'laza 3/29/2004 18:33'!
+printOn: aStream
+	"print this as a hex address ('@ 16rFFFFFFFF') to distinguish it from ByteArrays"
+
+	aStream nextPutAll: '@ '; nextPutAll: (self asInteger storeStringBase: 16 length: 11 padded: true)! !
+!ExternalAddress methodsFor: 'copying' stamp: 'ar 5/23/2006 13:09'!
+shallowCopy
+	"Re-implemented to avoid superclass call to #new:"
+	^self clone! !
+
+"FFI-Kernel"!
+
+----SNAPSHOT----an Array(8 July 2010 7:20:16 pm) iPhone.image priorSource: 5466990!
+
+----SNAPSHOT----an Array(8 July 2010 7:20:50 pm) iPhone.image priorSource: 5548325!
+
+----QUIT----an Array(8 July 2010 7:27:18 pm) iPhone.image priorSource: 5548410!
+
+----STARTUP----an Array(8 July 2010 7:27:31 pm) as /Users/johnmci/Documents/Squeak3.8.0/platforms/iOS/vm/iPhone/iPhone.image!
+
+
+----QUIT/NOSAVE----an Array(8 July 2010 7:27:55 pm) iPhone.image priorSource: 5548495!
\ No newline at end of file

Modified: trunk/platforms/iOS/vm/iPhone/iPhone.image
===================================================================
(Binary files differ)

Modified: trunk/platforms/iOS/vm/src/vm/intplugins/ObjectiveCPlugin/ObjectiveCPlugin.c
===================================================================
--- trunk/platforms/iOS/vm/src/vm/intplugins/ObjectiveCPlugin/ObjectiveCPlugin.c	2010-07-08 19:39:22 UTC (rev 2230)
+++ trunk/platforms/iOS/vm/src/vm/intplugins/ObjectiveCPlugin/ObjectiveCPlugin.c	2010-07-09 03:40:43 UTC (rev 2231)
@@ -1,8 +1,8 @@
-/* Automatically generated from Squeak on #(6 March 2009 12:34:37 pm)
- by VMMaker 3.8b6
+/* Automatically generated from Squeak on 8 July 2010 5:52:05 pm 
+   by VMMaker 4.2.6
  */
- 
- #include <math.h>
+
+#include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -10,13 +10,13 @@
 #include <Foundation/Foundation.h>
  /* Default EXPORT macro that does nothing (see comment in sq.h): */
 #define EXPORT(returnType) returnType
- 
- /* Do not include the entire sq.h file but just those parts needed. */
-  /*  The virtual machine proxy definition */
+
+/* Do not include the entire sq.h file but just those parts needed. */
+/*  The virtual machine proxy definition */
 #include "sqVirtualMachine.h"
 /* Configuration options */
- #include "sqConfig.h"
- /* Platform specific definitions */
+#include "sqConfig.h"
+/* Platform specific definitions */
 #include "sqPlatformSpecific.h"
 
 #define true 1
@@ -28,14 +28,13 @@
 #define EXPORT(returnType) static returnType
 #endif
 
-
 #include "sqMemoryAccess.h"
 
 
 /*** Constants ***/
- 
- /*** Function Prototypes ***/
-  static VirtualMachine * getInterpreter(void);
+
+/*** Function Prototypes ***/
+static VirtualMachine * getInterpreter(void);
 #pragma export on
 EXPORT(const char*) getModuleName(void);
 #pragma export off
@@ -61,9 +60,9 @@
 EXPORT(sqInt) primitiveNSInvocationCalloc(void);
 EXPORT(sqInt) primitiveNSInvocationFree(void);
 EXPORT(sqInt) primitiveNSInvocationGetArgument(void);
+EXPORT(sqInt) primitiveNSInvocationGetCType(void);
 EXPORT(sqInt) primitiveNSInvocationGetCharPointerType(void);
 EXPORT(sqInt) primitiveNSInvocationGetClassType(void);
-EXPORT(sqInt) primitiveNSInvocationGetCType(void);
 EXPORT(sqInt) primitiveNSInvocationGetDoubleType(void);
 EXPORT(sqInt) primitiveNSInvocationGetFloatType(void);
 EXPORT(sqInt) primitiveNSInvocationGetIntType(void);
@@ -82,6 +81,7 @@
 EXPORT(sqInt) primitiveNSInvocationSetLongLongType(void);
 EXPORT(sqInt) primitiveNSInvocationSetLongType(void);
 EXPORT(sqInt) primitiveNSInvocationSetPointerType(void);
+EXPORT(sqInt) primitiveNSInvocationSetRetained(void);
 EXPORT(sqInt) primitiveNSInvocationSetSelector(void);
 EXPORT(sqInt) primitiveNSInvocationSetShortType(void);
 EXPORT(sqInt) primitiveNSInvocationSetStringType(void);
@@ -99,7 +99,7 @@
 #pragma export off
 static sqInt shutdownModule(void);
 static sqInt sqAssert(sqInt aBool);
-					  static sqInt stringFromCString(const char * aCString);
+static sqInt stringFromCString(const char * aCString);
 /*** Variables ***/
 
 #ifdef SQUEAK_BUILTIN_PLUGIN
@@ -108,37 +108,37 @@
 struct VirtualMachine* interpreterProxy;
 static const char *moduleName =
 #ifdef SQUEAK_BUILTIN_PLUGIN
-	"ObjectiveCPlugin 27 November 2009 (i)"
+	"ObjectiveCPlugin 8 July 2010 (i)"
 #else
-	"ObjectiveCPlugin 27 November 2009 (e)"
- #endif
- ;
- 
- 
- 
- /*	Note: This is coded so that plugins can be run from Squeak. */
+	"ObjectiveCPlugin 8 July 2010 (e)"
+#endif
+;
 
+
+
+/*	Note: This is coded so that plugins can be run from Squeak. */
+
 static VirtualMachine * getInterpreter(void) {
 	return interpreterProxy;
-	 }
-	 
-	 
-	 /*	Note: This is hardcoded so it can be run from Squeak.
-	 The module name is used for validating a module *after*
-	 it is loaded to check if it does really contain the module
-	 we're thinking it contains. This is important! */
+}
 
+
+/*	Note: This is hardcoded so it can be run from Squeak.
+	The module name is used for validating a module *after*
+	it is loaded to check if it does really contain the module
+	we're thinking it contains. This is important! */
+
 EXPORT(const char*) getModuleName(void) {
 	return moduleName;
 }
 
 static sqInt halt(void) {
-;
- }
- 
- 
- /*	Initialise the module */
+	;
+}
 
+
+/*	Initialise the module */
+
 static sqInt initialiseModule(void) {
 	return 1;
 }
@@ -148,58 +148,58 @@
 }
 
 EXPORT(sqInt) primitiveCallbackLeave(void) {
-sqInt aNumber;
-	
+	sqInt aNumber;
+
 	aNumber = interpreterProxy->stackIntegerValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	if (aNumber == 0) {
-	if (interpreterProxy->failed()) {
-	return null;
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		interpreterProxy->pop(1);
+		return null;
 	}
-	interpreterProxy->pop(1);
-	return null;
-	}
 	interpreterProxy->callbackLeave(aNumber);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->pop(1);
-		return null;
-	}
-	
-	EXPORT(sqInt) primitiveGetAddressFromEntryPointString(void) {
+	return null;
+}
+
+EXPORT(sqInt) primitiveGetAddressFromEntryPointString(void) {
+	sqInt entryPointNameLength;
 	void * fn;
-	sqInt entryPointNameLength;
 	char entryPointName[256];
-		char *aEntryPointName;
-		sqInt _return_value;
-		
-		interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
-		aEntryPointName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
+	char *aEntryPointName;
+	sqInt _return_value;
+
+	interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
+	aEntryPointName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
-	entryPointNameLength = interpreterProxy->slotSizeOf(((sqInt)(long)(aEntryPointName) - 4));
-	if (entryPointNameLength > 256) {
-	_return_value = interpreterProxy->positive64BitIntegerFor(0);
-if (interpreterProxy->failed()) {
-	return null;
+	entryPointNameLength = interpreterProxy->slotSizeOf((oopForPointer( aEntryPointName ) - BASE_HEADER_SIZE));
+	if (entryPointNameLength > 255) {
+		_return_value = interpreterProxy->positive64BitIntegerFor(0);
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		interpreterProxy->popthenPush(2, _return_value);
+		return null;
 	}
-	interpreterProxy->popthenPush(2, _return_value);
-	return null;
-	}
 	strlcpy(entryPointName, aEntryPointName, entryPointNameLength + 1);
 	fn = dlsym(-2, entryPointName);
-		_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) fn));
+	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) fn));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(2, _return_value);
 	return null;
-	}
-	
+}
+
 EXPORT(sqInt) primitiveGetAutoReleasePool(void) {
 	NSAutoreleasePool * pool;
 	sqInt _return_value;
@@ -218,123 +218,126 @@
 	return null;
 }
 
-	EXPORT(sqInt) primitiveGetClass(void) {
+EXPORT(sqInt) primitiveGetClass(void) {
 	id classOrInstanceObject;
 	Class classObject;
 	sqInt aClassOrInstanceOop;
 	sqInt _return_value;
-	
+
 	aClassOrInstanceOop = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
-		classObject = null;
-		if (interpreterProxy->failed()) {
+	classObject = null;
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		;
-		;
+	}
+	;
+	;
 	    NS_DURING;
-		classObject = [classOrInstanceObject class];
+	classObject = [classOrInstanceObject class];
 	    NS_HANDLER 
 		classObject = nil;;
-			NS_ENDHANDLER;
-		_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) classObject));
-		if (interpreterProxy->failed()) {
+	    NS_ENDHANDLER;
+	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) classObject));
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		interpreterProxy->popthenPush(2, _return_value);
+	}
+	interpreterProxy->popthenPush(2, _return_value);
+	return null;
+}
+
+EXPORT(sqInt) primitiveGetDescription(void) {
+	sqInt utf8StringOop;
+	id classOrInstanceObject;
+	const char * utf8String;
+	NSString* nsStringObject;
+	sqInt aClassOrInstanceOop;
+
+	aClassOrInstanceOop = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		
-		EXPORT(sqInt) primitiveGetDescription(void) {
-		id classOrInstanceObject;
-		NSString* nsStringObject;
-			const char * utf8String;
-			sqInt utf8StringOop;
-		sqInt aClassOrInstanceOop;
-		
-		aClassOrInstanceOop = interpreterProxy->stackValue(0);
-			if (interpreterProxy->failed()) {
+	}
+	classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
+	utf8String = null;
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
-			utf8String = null;
-			if (interpreterProxy->failed()) {
-			return null;
-			}
-			;
-			NS_DURING;
-			nsStringObject = [classOrInstanceObject description];
-			utf8String = [nsStringObject UTF8String];
-			NS_HANDLER 
-			utf8String = nil;;
-			NS_ENDHANDLER;
-			if (!(utf8String)) {
-			interpreterProxy->success(0);
-				return null;
-			}
-			utf8StringOop = stringFromCString(utf8String);
-			if (interpreterProxy->failed()) {
-			return null;
-			}
-			interpreterProxy->popthenPush(2, utf8StringOop);
-			return null;
-			}
-			
-			EXPORT(sqInt) primitiveGetMethodSignatureForSelector(void) {
-			SEL selectorObject;
-			id classOrInstanceObject;
-			NSMethodSignature * messageSignatureObject;
-			sqInt aSelectorOop;
-			sqInt aClassOrInstanceOop;
-			sqInt _return_value;
-			
-			aSelectorOop = interpreterProxy->stackValue(1);
-			aClassOrInstanceOop = interpreterProxy->stackValue(0);
-			if (interpreterProxy->failed()) {
-			return null;
-			}
-			selectorObject = ((SEL) (interpreterProxy->positive64BitValueOf(aSelectorOop)));
-classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
-	messageSignatureObject = null;
+	}
+	;
+	    NS_DURING;
+	nsStringObject = [classOrInstanceObject description];
+				utf8String = [nsStringObject UTF8String];
+	    NS_HANDLER 
+		utf8String = nil;;
+	    NS_ENDHANDLER;
+	if (!(utf8String)) {
+		interpreterProxy->success(0);
+		return null;
+	}
+	utf8StringOop = stringFromCString(utf8String);
 	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->popthenPush(2, utf8StringOop);
 	return null;
+}
+
+EXPORT(sqInt) primitiveGetMethodSignatureForSelector(void) {
+	SEL selectorObject;
+	NSMethodSignature * messageSignatureObject;
+	id classOrInstanceObject;
+	sqInt aSelectorOop;
+	sqInt aClassOrInstanceOop;
+	sqInt _return_value;
+
+	aSelectorOop = interpreterProxy->stackValue(1);
+	aClassOrInstanceOop = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
+		return null;
 	}
+	selectorObject = ((SEL) (interpreterProxy->positive64BitValueOf(aSelectorOop)));
+	classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
+	messageSignatureObject = null;
+	if (interpreterProxy->failed()) {
+		return null;
+	}
 	;
 	;
-	NS_DURING;
+	    NS_DURING;
 	messageSignatureObject = [classOrInstanceObject methodSignatureForSelector: selectorObject];
-	NS_HANDLER 
+	    NS_HANDLER 
 	messageSignatureObject = nil;;
 	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) messageSignatureObject));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(3, _return_value);
 	return null;
-	}
-	
+}
+
 EXPORT(sqInt) primitiveGetNSStringForString(void) {
 	NSString* aStringAsNSString;
 	sqInt stringLength;
-	char *aString;
+	NSUInteger encoding;
+	char* aString;
+	sqInt aStringOop;
 	sqInt anEncoding;
 	sqInt _return_value;
 
-	interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(1)));
-	aString = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(1))));
-	anEncoding = interpreterProxy->stackIntegerValue(0);
+	aStringOop = interpreterProxy->stackValue(1);
+	anEncoding = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
 		return null;
 	}
-	stringLength = interpreterProxy->slotSizeOf(((sqInt)(long)(aString) - 4));
+	encoding = ((NSUInteger) (interpreterProxy->positive64BitValueOf(anEncoding)));
+	aString = interpreterProxy->firstIndexableField(aStringOop);
+	stringLength = interpreterProxy->byteSizeOf(aStringOop);
 	;
 	aStringAsNSString = 0;
 	    NS_DURING;
-	aStringAsNSString = [[NSString alloc] initWithBytes: aString length: stringLength encoding: anEncoding];
+	aStringAsNSString = [[NSString alloc] initWithBytes: aString length: stringLength encoding: encoding];
 	    NS_HANDLER 
 				aStringAsNSString = nil;;
 	    NS_ENDHANDLER;
@@ -346,558 +349,565 @@
 	return null;
 }
 
-	EXPORT(sqInt) primitiveGetObjCClassForString(void) {
+EXPORT(sqInt) primitiveGetObjCClassForString(void) {
+	NSString* classNameNSString;
 	sqInt classNameLength;
-	NSString* classNameNSString;
 	Class classObject;
 	char *aClassName;
 	sqInt _return_value;
-	
+
 	interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
 	aClassName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
-if (interpreterProxy->failed()) {
-return null;
+	if (interpreterProxy->failed()) {
+		return null;
 	}
-	classNameLength = interpreterProxy->slotSizeOf(((sqInt)(long)(aClassName) - 4));
+	classNameLength = interpreterProxy->slotSizeOf((oopForPointer( aClassName ) - BASE_HEADER_SIZE));
 	;
 	classNameNSString = [[NSString alloc] initWithBytes: aClassName length: classNameLength encoding: NSUTF8StringEncoding];
-	NS_DURING;
+	    NS_DURING;
 	classObject = NSClassFromString(classNameNSString);
-	NS_HANDLER 
+	    NS_HANDLER 
 	classObject = nil;;
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	[classNameNSString release];
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) classObject));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(2, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveGetSelectorForString(void) {
+}
+
+EXPORT(sqInt) primitiveGetSelectorForString(void) {
+	SEL selectorObject;
+	NSString * selectorNSString;
 	sqInt selectorLength;
-	NSString * selectorNSString;
-	SEL selectorObject;
 	char *aSelectorName;
 	sqInt _return_value;
-	
+
 	interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
 	aSelectorName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
-if (interpreterProxy->failed()) {
-return null;
+	if (interpreterProxy->failed()) {
+		return null;
 	}
-	selectorLength = interpreterProxy->slotSizeOf(((sqInt)(long)(aSelectorName) - 4));
+	selectorLength = interpreterProxy->slotSizeOf((oopForPointer( aSelectorName ) - BASE_HEADER_SIZE));
 	;
 	selectorNSString = [[NSString alloc] initWithBytes: aSelectorName length: selectorLength encoding: NSUTF8StringEncoding];
-	NS_DURING;
+	    NS_DURING;
 	selectorObject = NSSelectorFromString(selectorNSString);
-	NS_HANDLER 
+	    NS_HANDLER 
 	selectorObject = nil;;
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	[selectorNSString release];
-	 _return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) selectorObject));
+	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) selectorObject));
 	if (interpreterProxy->failed()) {
-								 return null;
-								 }
-	interpreterProxy->popthenPush(2, _return_value);
 		return null;
 	}
-	
-	EXPORT(sqInt) primitiveGetSuperClass(void) {
+	interpreterProxy->popthenPush(2, _return_value);
+	return null;
+}
+
+EXPORT(sqInt) primitiveGetSuperClass(void) {
 	id classOrInstanceObject;
-Class classObject;
-sqInt aClassOrInstanceOop;
+	Class classObject;
+	sqInt aClassOrInstanceOop;
 	sqInt _return_value;
-	
+
 	aClassOrInstanceOop = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
 	classObject = null;
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	;
 	;
-	NS_DURING;
+	    NS_DURING;
 	classObject = [classOrInstanceObject superclass];
-	NS_HANDLER 
-	classObject = nil;;
-	NS_ENDHANDLER;
+	    NS_HANDLER 
+		classObject = nil;;
+	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) classObject));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(2, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveIsEqual(void) {
+}
+
+EXPORT(sqInt) primitiveIsEqual(void) {
+	BOOL result;
+	id oop2;
 	id oop1;
-	id oop2;
-	BOOL result;
 	sqInt anOop1;
 	sqInt anOop2;
-sqInt _return_value;
+	sqInt _return_value;
 
-anOop1 = interpreterProxy->stackValue(1);
+	anOop1 = interpreterProxy->stackValue(1);
 	anOop2 = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	oop1 = ((id) (interpreterProxy->positive64BitValueOf(anOop1)));
 	oop2 = ((id) (interpreterProxy->positive64BitValueOf(anOop2)));
 	if (interpreterProxy->failed()) {
-	return null;
-		}
-		;
-		;
-		result = 0;
+		return null;
+	}
+	;
+	;
+	result = 0;
 	    NS_DURING;
 	result = [oop1 isEqual: oop2];
-	NS_HANDLER;
+	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	_return_value = ((result == 1)) ? interpreterProxy->trueObject(): interpreterProxy->falseObject();
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(3, _return_value);
-		return null;
-	}
-	
-	EXPORT(sqInt) primitiveMethodSignatureGetArgumentType(void) {
+	return null;
+}
+
+EXPORT(sqInt) primitiveMethodSignatureGetArgumentType(void) {
 	NSMethodSignature* nsMethodSignatureObject;
 	const char * string;
 	sqInt stringOop;
-sqInt aMethodSignatureOop;
-sqInt aIndexNumber;
+	sqInt aMethodSignatureOop;
+	sqInt aIndexNumber;
 
-aMethodSignatureOop = interpreterProxy->stackValue(1);
+	aMethodSignatureOop = interpreterProxy->stackValue(1);
 	aIndexNumber = interpreterProxy->stackIntegerValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsMethodSignatureObject = ((NSMethodSignature *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
 	string = null;
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	;
-	NS_DURING;
+	    NS_DURING;
 	string = [nsMethodSignatureObject getArgumentTypeAtIndex: aIndexNumber];
-	NS_HANDLER 
-	string = nil;;
-	NS_ENDHANDLER;
+	    NS_HANDLER 
+		string = nil;;
+	    NS_ENDHANDLER;
 	if (!(string)) {
-	interpreterProxy->success(0);
-	return null;
+		interpreterProxy->success(0);
+		return null;
 	}
 	stringOop = stringFromCString(string);
-		if (interpreterProxy->failed()) {
-	return null;
+	if (interpreterProxy->failed()) {
+		return null;
 	}
 	interpreterProxy->popthenPush(3, stringOop);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveMethodSignatureGetMethodReturnLength(void) {
+}
+
+EXPORT(sqInt) primitiveMethodSignatureGetMethodReturnLength(void) {
+	NSUInteger methodReturnLength;
 	NSMethodSignature* nsMethodSignatureObject;
-	NSUInteger methodReturnLength;
-sqInt aMethodSignatureOop;
-sqInt _return_value;
-	
+	sqInt aMethodSignatureOop;
+	sqInt _return_value;
+
 	aMethodSignatureOop = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsMethodSignatureObject = ((NSMethodSignature *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
-		methodReturnLength = 0;
+	methodReturnLength = 0;
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	;
-	NS_DURING;
+	    NS_DURING;
 	methodReturnLength = [nsMethodSignatureObject methodReturnLength];
-	NS_HANDLER 
-	methodReturnLength = 0xFFFFFFFF;
-	NS_ENDHANDLER;
+	    NS_HANDLER 
+		methodReturnLength = 0xFFFFFFFF;
+	    NS_ENDHANDLER;
 	if (methodReturnLength == 4294967295U) {
-	interpreterProxy->success(0);
-							  return null;
-							  }
-							  _return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) methodReturnLength));
+		interpreterProxy->success(0);
+		return null;
+	}
+	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) methodReturnLength));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(2, _return_value);
 	return null;
-		}
-		
-		EXPORT(sqInt) primitiveMethodSignatureGetNumberOfArguments(void) {
+}
+
+EXPORT(sqInt) primitiveMethodSignatureGetNumberOfArguments(void) {
 	NSMethodSignature* nsMethodSignatureObject;
-NSUInteger numberOfArguments;
+	NSUInteger numberOfArguments;
 	sqInt aMethodSignatureOop;
 	sqInt _return_value;
-	
+
 	aMethodSignatureOop = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsMethodSignatureObject = ((NSMethodSignature *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
 	numberOfArguments = 9999999;
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	;
-	NS_DURING;
+	    NS_DURING;
 	numberOfArguments = [nsMethodSignatureObject numberOfArguments];
-	NS_HANDLER 
-	numberOfArguments = 9999999;
+	    NS_HANDLER 
+		numberOfArguments = 9999999;
 	    NS_ENDHANDLER;
-		if (numberOfArguments == 9999999) {
-	interpreterProxy->success(0);
-	return null;
+	if (numberOfArguments == 9999999) {
+		interpreterProxy->success(0);
+		return null;
 	}
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) numberOfArguments));
 	if (interpreterProxy->failed()) {
-return null;
+		return null;
+	}
+	interpreterProxy->popthenPush(2, _return_value);
+	return null;
 }
-interpreterProxy->popthenPush(2, _return_value);
-	return null;
-	}
-	
-	EXPORT(sqInt) primitiveMethodSignatureGetReturnType(void) {
+
+EXPORT(sqInt) primitiveMethodSignatureGetReturnType(void) {
 	NSMethodSignature* nsMethodSignatureObject;
-		const char * string;
-		sqInt stringOop;
+	const char * string;
+	sqInt stringOop;
 	sqInt aMethodSignatureOop;
-	
+
 	aMethodSignatureOop = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
-		}
-		nsMethodSignatureObject = ((NSMethodSignature *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
-		   string = null;
-			if (interpreterProxy->failed()) {
-			return null;
-			}
-			;
-			NS_DURING;
-			string = [nsMethodSignatureObject methodReturnType];
-				NS_HANDLER 
-			string = nil;;
-			NS_ENDHANDLER;
-			if (!(string)) {
-			interpreterProxy->success(0);
-			return null;
-			}
-			stringOop = stringFromCString(string);
-if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
+	nsMethodSignatureObject = ((NSMethodSignature *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
+	string = null;
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	;
+	    NS_DURING;
+	string = [nsMethodSignatureObject methodReturnType];
+	    NS_HANDLER 
+		string = nil;;
+	    NS_ENDHANDLER;
+	if (!(string)) {
+		interpreterProxy->success(0);
+		return null;
+	}
+	stringOop = stringFromCString(string);
+	if (interpreterProxy->failed()) {
+		return null;
+	}
 	interpreterProxy->popthenPush(2, stringOop);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationCalloc(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationCalloc(void) {
 	void* pointer;
 	sqInt size;
 	sqInt _return_value;
-	
+
 	size = interpreterProxy->stackIntegerValue(0);
 	if (interpreterProxy->failed()) {
-								 return null;
-								 }
-								 pointer = calloc(size,1);
+		return null;
+	}
+	pointer = calloc(size,1);
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) pointer));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(2, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationFree(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationFree(void) {
 	void* pointerToFree;
 	sqInt pointer;
-	
+
 	pointer = interpreterProxy->stackValue(0);
-		if (interpreterProxy->failed()) {
-									 return null;
-									 }
-									 pointerToFree = ((void *) (interpreterProxy->positive64BitValueOf(pointer)));
-if (interpreterProxy->failed()) {
-return null;
-}
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	pointerToFree = ((void *) (interpreterProxy->positive64BitValueOf(pointer)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
 	free((void*)pointerToFree);
 	;
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->pop(1);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationGetArgument(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationGetArgument(void) {
 	void * buffer;
 	NSInvocation* nsInvocationInstance;
 	sqInt aMethodSignatureOop;
-		sqInt bufferOop;
+	sqInt bufferOop;
 	sqInt index;
-	
+
 	aMethodSignatureOop = interpreterProxy->stackValue(2);
 	bufferOop = interpreterProxy->stackValue(1);
 	index = interpreterProxy->stackIntegerValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
-		buffer = ((void *) (interpreterProxy->positive64BitValueOf(bufferOop)));
-		if (interpreterProxy->failed()) {
+	buffer = ((void *) (interpreterProxy->positive64BitValueOf(bufferOop)));
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		;
-		;
+	}
+	;
+	;
 	    NS_DURING;
-		[nsInvocationInstance getArgument: buffer atIndex: index];
+	[nsInvocationInstance getArgument: buffer atIndex: index];
 	    NS_HANDLER;
-		interpreterProxy->success(0);
-		if (1) {
+	interpreterProxy->success(0);
+	if (1) {
 		return null;
-		}
+	}
 	    NS_ENDHANDLER;
-		if (interpreterProxy->failed()) {
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		interpreterProxy->pop(3);
-		return null;
-			}
-			
-			EXPORT(sqInt) primitiveNSInvocationGetCharPointerType(void) {
-		char ** bufferPointer;
-char * buffer;
-sqInt stringOop;
-sqInt bufferAddressOop;
-	
-	bufferAddressOop = interpreterProxy->stackValue(0);
-	if (interpreterProxy->failed()) {
-	return null;
 	}
-	bufferPointer = ((char **) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
-	if (interpreterProxy->failed()) {
+	interpreterProxy->pop(3);
 	return null;
-	}
-	buffer = *bufferPointer;
-		stringOop = stringFromCString(buffer);
-	if (interpreterProxy->failed()) {
-	return null;
-	}
-	interpreterProxy->popthenPush(2, stringOop);
-	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationGetClassType(void) {
-	Class * buffer;
-	Class data;
-		sqInt bufferAddressOop;
-		sqInt _return_value;
-		
-		bufferAddressOop = interpreterProxy->stackValue(0);
-		if (interpreterProxy->failed()) {
-	return null;
-		}
-		buffer = ((Class *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
-		if (interpreterProxy->failed()) {
-		return null;
-		}
-		;
-		data = *buffer;
-	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) data));
-	if (interpreterProxy->failed()) {
-	return null;
 }
-interpreterProxy->popthenPush(2, _return_value);
-	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationGetCType(void) {
+
+EXPORT(sqInt) primitiveNSInvocationGetCType(void) {
+	char * buffer;
 	sqInt newCharacterOop;
-	char * buffer;
 	char targetOopData;
 	sqInt bufferAddressOop;
 	sqInt signedBoolean;
-		
-		bufferAddressOop = interpreterProxy->stackValue(1);
+
+	bufferAddressOop = interpreterProxy->stackValue(1);
 	signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(0));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	buffer = ((char *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
 	if (interpreterProxy->failed()) {
-return null;
-}
-;
-newCharacterOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classCharacter(), 1);
+		return null;
+	}
+	;
+	newCharacterOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classCharacter(), 1);
 	targetOopData = 0;
 	;
 	if (signedBoolean) {
-	targetOopData = *(char*) buffer;
+		targetOopData = *(char*) buffer;
 		interpreterProxy->storeIntegerofObjectwithValue(0, newCharacterOop, ((sqInt) targetOopData));
 	} else {
 		targetOopData = *(char*) buffer;
-	interpreterProxy->storeIntegerofObjectwithValue(0, newCharacterOop, ((usqInt) targetOopData));
+		interpreterProxy->storeIntegerofObjectwithValue(0, newCharacterOop, ((usqInt) targetOopData));
 	}
 	if (interpreterProxy->failed()) {
-return null;
+		return null;
+	}
+	interpreterProxy->popthenPush(3, newCharacterOop);
+	return null;
 }
-interpreterProxy->popthenPush(3, newCharacterOop);
+
+EXPORT(sqInt) primitiveNSInvocationGetCharPointerType(void) {
+	char * buffer;
+	char ** bufferPointer;
+	sqInt stringOop;
+	sqInt bufferAddressOop;
+
+	bufferAddressOop = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	bufferPointer = ((char **) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	buffer = *bufferPointer;
+	stringOop = stringFromCString(buffer);
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->popthenPush(2, stringOop);
 	return null;
+}
+
+EXPORT(sqInt) primitiveNSInvocationGetClassType(void) {
+	Class * buffer;
+	Class data;
+	sqInt bufferAddressOop;
+	sqInt _return_value;
+
+	bufferAddressOop = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
+		return null;
 	}
-	
-	EXPORT(sqInt) primitiveNSInvocationGetDoubleType(void) {
+	buffer = ((Class *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	;
+	data = *buffer;
+	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) data));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->popthenPush(2, _return_value);
+	return null;
+}
+
+EXPORT(sqInt) primitiveNSInvocationGetDoubleType(void) {
 	double * buffer;
 	double data;
 	sqInt bufferAddressOop;
 	sqInt _return_value;
-	
+
 	bufferAddressOop = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
-		}
-		buffer = ((double *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
+		return null;
+	}
+	buffer = ((double *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
 	if (interpreterProxy->failed()) {
-	return null;
-		}
-		;
-		data = *buffer;
-		_return_value = interpreterProxy->floatObjectOf(data);
-		if (interpreterProxy->failed()) {
 		return null;
-			}
-			interpreterProxy->popthenPush(2, _return_value);
+	}
+	;
+	data = *buffer;
+	_return_value = interpreterProxy->floatObjectOf(data);
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		
-		EXPORT(sqInt) primitiveNSInvocationGetFloatType(void) {
-			float * buffer;
-			float data;
-			sqInt bufferAddressOop;
-			sqInt _return_value;
-			
-			bufferAddressOop = interpreterProxy->stackValue(0);
-				if (interpreterProxy->failed()) {
-			return null;
-			}
-			buffer = ((float *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
-if (interpreterProxy->failed()) {
+	}
+	interpreterProxy->popthenPush(2, _return_value);
 	return null;
+}
+
+EXPORT(sqInt) primitiveNSInvocationGetFloatType(void) {
+	float * buffer;
+	float data;
+	sqInt bufferAddressOop;
+	sqInt _return_value;
+
+	bufferAddressOop = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
+		return null;
 	}
+	buffer = ((float *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
 	;
 	data = *buffer;
 	_return_value = interpreterProxy->floatObjectOf(data);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(2, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationGetIntType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationGetIntType(void) {
 	int * buffer;
 	int data;
+	unsigned int unsignedData;
 	sqInt bufferAddressOop;
 	sqInt signedBoolean;
 	sqInt _return_value;
-	
+
 	bufferAddressOop = interpreterProxy->stackValue(1);
-		signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(0));
+	signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(0));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	buffer = ((int *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	;
+	unsignedData = data = 0;
+	if (signedBoolean) {
+		data = *buffer;
+		_return_value = interpreterProxy->signed32BitIntegerFor(((sqInt) data));
 		if (interpreterProxy->failed()) {
 			return null;
 		}
-		buffer = ((int *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
-			if (interpreterProxy->failed()) {
+		interpreterProxy->popthenPush(3, _return_value);
+		return null;
+	} else {
+		unsignedData = *(unsigned int *)buffer;
+		_return_value = interpreterProxy->positive32BitIntegerFor(((usqInt) unsignedData));
+		if (interpreterProxy->failed()) {
 			return null;
-			}
-			;
-			data = 0;
-			if (signedBoolean) {
-			data = *buffer;
-			_return_value = interpreterProxy->signed32BitIntegerFor(((sqInt) data));
-				if (interpreterProxy->failed()) {
-			return null;
-			}
-			interpreterProxy->popthenPush(3, _return_value);
-return null;
-} else {
-		data = *buffer;
-	_return_value = interpreterProxy->positive32BitIntegerFor(((sqInt) data));
-	if (interpreterProxy->failed()) {
-	return null;
+		}
+		interpreterProxy->popthenPush(3, _return_value);
+		return null;
 	}
-	interpreterProxy->popthenPush(3, _return_value);
-								  return null;
-	}
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationGetLongLongType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationGetLongLongType(void) {
 	long long * buffer;
 	long long data;
+	unsigned long long unsignedData;
 	sqInt bufferAddressOop;
 	sqInt signedBoolean;
 	sqInt _return_value;
-		
-		bufferAddressOop = interpreterProxy->stackValue(1);
-		signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(0));
-			if (interpreterProxy->failed()) {
+
+	bufferAddressOop = interpreterProxy->stackValue(1);
+	signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(0));
+	if (interpreterProxy->failed()) {
 		return null;
+	}
+	buffer = ((long long *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	;
+	unsignedData = data = 0;
+	if (signedBoolean) {
+		data = *buffer;
+		_return_value = interpreterProxy->signed64BitIntegerFor(((long long) data));
+		if (interpreterProxy->failed()) {
+			return null;
 		}
-		buffer = ((long long *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
-			if (interpreterProxy->failed()) {
+		interpreterProxy->popthenPush(3, _return_value);
+		return null;
+	} else {
+		unsignedData = * (unsigned long long*) buffer;
+		_return_value = interpreterProxy->positive64BitIntegerFor(((unsigned long long) unsignedData));
+		if (interpreterProxy->failed()) {
 			return null;
-			}
-			;
-			data = 0;
-			if (signedBoolean) {
-			data = *buffer;
-			_return_value = interpreterProxy->signed64BitIntegerFor(((long long) data));
-			if (interpreterProxy->failed()) {
-return null;
+		}
+		interpreterProxy->popthenPush(3, _return_value);
+		return null;
+	}
 }
-interpreterProxy->popthenPush(3, _return_value);
-	return null;
-	} else {
-		data = * (long long*) buffer;
-	_return_value = interpreterProxy->positive64BitIntegerFor(((long long) data));
-	if (interpreterProxy->failed()) {
-	return null;
-	}
-	interpreterProxy->popthenPush(3, _return_value);
-	return null;
-	}
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationGetLongType(void) {
+
+EXPORT(sqInt) primitiveNSInvocationGetLongType(void) {
 	long * buffer;
 	long data;
-		sqInt bufferAddressOop;
+	unsigned long unsignedData;
+	sqInt bufferAddressOop;
 	sqInt signedBoolean;
 	sqInt _return_value;
-	
+
 	bufferAddressOop = interpreterProxy->stackValue(1);
-signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(0));
+	signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(0));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	buffer = ((long *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	;
-	data = 0;
+	unsignedData = data = 0;
 	if (signedBoolean) {
-	data = *buffer;
+		data = *buffer;
 		_return_value = interpreterProxy->signed64BitIntegerFor(((sqInt) data));
 		if (interpreterProxy->failed()) {
 			return null;
@@ -905,43 +915,43 @@
 		interpreterProxy->popthenPush(3, _return_value);
 		return null;
 	} else {
-		data = *buffer;
-		_return_value = interpreterProxy->positive64BitIntegerFor(((sqInt) data));
-	if (interpreterProxy->failed()) {
-	return null;
+		unsignedData = *(unsigned long *) buffer;
+		_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) unsignedData));
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		interpreterProxy->popthenPush(3, _return_value);
+		return null;
 	}
-	interpreterProxy->popthenPush(3, _return_value);
-	return null;
-	}
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationGetObjectType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationGetObjectType(void) {
 	id * buffer;
 	id data;
 	sqInt bufferAddressOop;
 	sqInt _return_value;
-	
+
 	bufferAddressOop = interpreterProxy->stackValue(0);
-		if (interpreterProxy->failed()) {
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		buffer = ((id *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
-			if (interpreterProxy->failed()) {
+	}
+	buffer = ((id *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		;
-		data = *buffer;
+	}
+	;
+	data = *buffer;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) data));
-		if (interpreterProxy->failed()) {
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		interpreterProxy->popthenPush(2, _return_value);
-		return null;
-		}
-		
+	}
+	interpreterProxy->popthenPush(2, _return_value);
+	return null;
+}
+
 EXPORT(sqInt) primitiveNSInvocationGetReturnValue(void) {
+	void * buffer;
 	NSInvocation *nsInvoke;
-	void * buffer;
 	sqInt bufferAddressOop;
 	sqInt aNSinvokeOops;
 
@@ -964,18 +974,22 @@
 		return null;
 	}
 	    NS_ENDHANDLER;
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->pop(2);
 	return null;
 }
 
-		EXPORT(sqInt) primitiveNSInvocationGetSelectorType(void) {
-SEL * buffer;
-SEL data;
-sqInt bufferAddressOop;
-sqInt _return_value;
-	
+EXPORT(sqInt) primitiveNSInvocationGetSelectorType(void) {
+	SEL * buffer;
+	SEL data;
+	sqInt bufferAddressOop;
+	sqInt _return_value;
+
 	bufferAddressOop = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	buffer = ((SEL *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
 	if (interpreterProxy->failed()) {
@@ -985,102 +999,103 @@
 	data = *buffer;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) data));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(2, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationGetShortType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationGetShortType(void) {
 	short * buffer;
 	short data;
+	unsigned short unsignedData;
 	sqInt bufferAddressOop;
 	sqInt signedBoolean;
 	sqInt _return_value;
-	
+
 	bufferAddressOop = interpreterProxy->stackValue(1);
-signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(0));
+	signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(0));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	buffer = ((short *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
-	data = 0;
+	unsignedData = data = 0;
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	;
 	if (signedBoolean) {
 		data = *buffer;
-	_return_value = interpreterProxy->signed32BitIntegerFor(((sqInt) data));
-if (interpreterProxy->failed()) {
-return null;
-	}
-	interpreterProxy->popthenPush(3, _return_value);
-	return null;
+		_return_value = interpreterProxy->signed32BitIntegerFor(((sqInt) data));
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		interpreterProxy->popthenPush(3, _return_value);
+		return null;
 	} else {
-		data = *buffer;
-	_return_value = interpreterProxy->positive32BitIntegerFor(((sqInt) data));
-	if (interpreterProxy->failed()) {
-	return null;
+		unsignedData = *(unsigned short *)buffer;
+		_return_value = interpreterProxy->positive32BitIntegerFor(((usqInt) unsignedData));
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		interpreterProxy->popthenPush(3, _return_value);
+		return null;
 	}
-	interpreterProxy->popthenPush(3, _return_value);
-	return null;
-	}
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationGetStructureType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationGetStructureType(void) {
 	sqInt newByteArray;
 	char ** bufferPointer;
 	sqInt bufferAddressOop;
 	sqInt length;
-	
+
 	bufferAddressOop = interpreterProxy->stackValue(1);
 	length = interpreterProxy->stackIntegerValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	bufferPointer = ((void *) (interpreterProxy->positive64BitValueOf(bufferAddressOop)));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	newByteArray = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), length);
-		memcpy(interpreterProxy->arrayValueOf(newByteArray), bufferPointer, length);
+	memcpy(interpreterProxy->arrayValueOf(newByteArray), bufferPointer, length);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(3, newByteArray);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationMalloc(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationMalloc(void) {
 	void* pointer;
 	sqInt size;
 	sqInt _return_value;
-	
+
 	size = interpreterProxy->stackIntegerValue(0);
 	if (interpreterProxy->failed()) {
 		return null;
 	}
 	pointer = malloc(size);
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) pointer));
-if (interpreterProxy->failed()) {
-	return null;
+	if (interpreterProxy->failed()) {
+		return null;
 	}
 	interpreterProxy->popthenPush(2, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationSetCType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationSetCType(void) {
+	void * buffer;
 	unsigned char aUnsignedValue;
+	char aValue;
 	NSInvocation* nsInvocationInstance;
-	char aValue;
-	void * buffer;
 	sqInt aMethodSignatureOop;
 	sqInt signedBoolean;
 	sqInt index;
-		sqInt newCharacterOop;
+	sqInt newCharacterOop;
 	sqInt _return_value;
-	
+
 	aMethodSignatureOop = interpreterProxy->stackValue(3);
 	signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(2));
 	index = interpreterProxy->stackIntegerValue(1);
@@ -1093,314 +1108,338 @@
 		return null;
 	}
 	aValue = interpreterProxy->fetchIntegerofObject(0, newCharacterOop);
-aUnsignedValue = interpreterProxy->fetchIntegerofObject(0, newCharacterOop);
+	aUnsignedValue = interpreterProxy->fetchIntegerofObject(0, newCharacterOop);
 	if (signedBoolean) {
-	buffer = malloc(sizeof(char));
-	*(char*) buffer = (char) aValue;
+		buffer = malloc(sizeof(char));
+					*(char*) buffer = (char) aValue;
 	} else {
-	buffer = malloc(sizeof(unsigned char));
+		buffer = malloc(sizeof(unsigned char));
 					*(unsigned char*)buffer = (unsigned char) aUnsignedValue;
 	}
 	;
 	;
-	NS_DURING;
+	    NS_DURING;
 	[nsInvocationInstance setArgument: buffer atIndex: index];
 	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(5, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationSetDoubleType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationSetDoubleType(void) {
 	void * buffer;
 	NSInvocation* nsInvocationInstance;
 	sqInt aMethodSignatureOop;
 	sqInt index;
 	double aValue;
-		sqInt _return_value;
-	
+	sqInt _return_value;
+
 	aMethodSignatureOop = interpreterProxy->stackValue(2);
 	index = interpreterProxy->stackIntegerValue(1);
-aValue = interpreterProxy->stackFloatValue(0);
+	aValue = interpreterProxy->stackFloatValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	buffer = malloc(sizeof(double));
-						   *(double*) buffer = (double) aValue;
+				*(double*) buffer = (double) aValue;
 	;
 	;
-	NS_DURING;
+	    NS_DURING;
 	[nsInvocationInstance setArgument: buffer atIndex: index];
-	NS_HANDLER;
+	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
-		if (interpreterProxy->failed()) {
+	if (interpreterProxy->failed()) {
 		return null;
-		}
-		interpreterProxy->popthenPush(4, _return_value);
-		return null;
-		}
-		
-		EXPORT(sqInt) primitiveNSInvocationSetFloatType(void) {
-			void * buffer;
-			NSInvocation* nsInvocationInstance;
-			sqInt aMethodSignatureOop;
-			sqInt index;
-			double aValue;
-			sqInt _return_value;
-			
-			aMethodSignatureOop = interpreterProxy->stackValue(2);
+	}
+	interpreterProxy->popthenPush(4, _return_value);
+	return null;
+}
+
+EXPORT(sqInt) primitiveNSInvocationSetFloatType(void) {
+	void * buffer;
+	NSInvocation* nsInvocationInstance;
+	sqInt aMethodSignatureOop;
+	sqInt index;
+	double aValue;
+	sqInt _return_value;
+
+	aMethodSignatureOop = interpreterProxy->stackValue(2);
 	index = interpreterProxy->stackIntegerValue(1);
 	aValue = interpreterProxy->stackFloatValue(0);
-		if (interpreterProxy->failed()) {
-	return null;
+	if (interpreterProxy->failed()) {
+		return null;
 	}
 	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
-		if (interpreterProxy->failed()) {
-	return null;
+	if (interpreterProxy->failed()) {
+		return null;
 	}
 	buffer = malloc(sizeof(float));
-*(float*) buffer = (float) aValue;
-;
-;
-NS_DURING;
+				*(float*) buffer = (float) aValue;
+	;
+	;
+	    NS_DURING;
 	[nsInvocationInstance setArgument: buffer atIndex: index];
-	NS_HANDLER;
+	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(4, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationSetIntType(void) {
-												  NSInvocation* nsInvocationInstance;
-		int aValue;
+}
+
+EXPORT(sqInt) primitiveNSInvocationSetIntType(void) {
 	void * buffer;
+	int aValue;
+	NSInvocation* nsInvocationInstance;
 	sqInt aMethodSignatureOop;
 	sqInt signedBoolean;
 	sqInt index;
 	sqInt intValue;
 	sqInt _return_value;
-		
-		aMethodSignatureOop = interpreterProxy->stackValue(3);
-		signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(2));
-		index = interpreterProxy->stackIntegerValue(1);
-			intValue = interpreterProxy->stackValue(0);
-			if (interpreterProxy->failed()) {
-			return null;
-			}
-			nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
+
+	aMethodSignatureOop = interpreterProxy->stackValue(3);
+	signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(2));
+	index = interpreterProxy->stackIntegerValue(1);
+	intValue = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
-	if (signedBoolean) {
-	aValue = ((int) (interpreterProxy->signed64BitValueOf(intValue)));
+	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
-	buffer = malloc(sizeof(int));
-	*(int*) buffer = (int) aValue;
-		} else {
-	aValue = ((unsigned int) (interpreterProxy->positive64BitValueOf(intValue)));
-if (interpreterProxy->failed()) {
-return null;
-	}
-	buffer = malloc(sizeof(unsigned int));
+	if (signedBoolean) {
+		aValue = ((int) (interpreterProxy->signed64BitValueOf(intValue)));
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		buffer = malloc(sizeof(int));
+						*(int*) buffer = (int) aValue;
+	} else {
+		aValue = ((unsigned int) (interpreterProxy->positive64BitValueOf(intValue)));
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		buffer = malloc(sizeof(unsigned int));
 					*(unsigned int*)buffer = (unsigned int) aValue;
 	}
 	;
 	;
-	NS_DURING;
+	    NS_DURING;
 	[nsInvocationInstance setArgument: buffer atIndex: index];
-	NS_HANDLER;
+	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(5, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationSetLongLongType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationSetLongLongType(void) {
+	void * buffer;
+	long long aValue;
 	NSInvocation* nsInvocationInstance;
-	long long aValue;
-		void * buffer;
-		sqInt aMethodSignatureOop;
-		sqInt signedBoolean;
-		sqInt index;
-		sqInt intValue;
-		sqInt _return_value;
-		
-		aMethodSignatureOop = interpreterProxy->stackValue(3);
-			signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(2));
-			index = interpreterProxy->stackIntegerValue(1);
+	sqInt aMethodSignatureOop;
+	sqInt signedBoolean;
+	sqInt index;
+	sqInt intValue;
+	sqInt _return_value;
+
+	aMethodSignatureOop = interpreterProxy->stackValue(3);
+	signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(2));
+	index = interpreterProxy->stackIntegerValue(1);
 	intValue = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
 	if (interpreterProxy->failed()) {
-								 return null;
+		return null;
 	}
 	if (signedBoolean) {
-	aValue = ((long long) (interpreterProxy->signed64BitValueOf(intValue)));
-	if (interpreterProxy->failed()) {
-return null;
-}
-buffer = malloc(sizeof(long long));
-	*(long long*) buffer = (long long) aValue;
+		aValue = ((long long) (interpreterProxy->signed64BitValueOf(intValue)));
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		buffer = malloc(sizeof(long long));
+						*(long long*) buffer = (long long) aValue;
 	} else {
-	aValue = ((unsigned long long) (interpreterProxy->positive64BitValueOf(intValue)));
-	if (interpreterProxy->failed()) {
-	return null;
-	}
-	buffer = malloc(sizeof(unsigned long long));
+		aValue = ((unsigned long long) (interpreterProxy->positive64BitValueOf(intValue)));
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		buffer = malloc(sizeof(unsigned long long));
 					*(unsigned long long*)buffer = (unsigned long long) aValue;
 	}
 	;
 	;
-	NS_DURING;
-		[nsInvocationInstance setArgument: buffer atIndex: index];
-	NS_HANDLER;
+	    NS_DURING;
+	[nsInvocationInstance setArgument: buffer atIndex: index];
+	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(5, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationSetLongType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationSetLongType(void) {
+	void * buffer;
+	long aValue;
 	NSInvocation* nsInvocationInstance;
-	long aValue;
-	void * buffer;
 	sqInt aMethodSignatureOop;
 	sqInt signedBoolean;
-		sqInt index;
+	sqInt index;
 	sqInt intValue;
 	sqInt _return_value;
-	
+
 	aMethodSignatureOop = interpreterProxy->stackValue(3);
-signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(2));
+	signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(2));
 	index = interpreterProxy->stackIntegerValue(1);
 	intValue = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	if (signedBoolean) {
-	aValue = ((long) (interpreterProxy->signed64BitValueOf(intValue)));
+		aValue = ((long) (interpreterProxy->signed64BitValueOf(intValue)));
 		if (interpreterProxy->failed()) {
-	return null;
-	}
-	buffer = malloc(sizeof(long));
+			return null;
+		}
+		buffer = malloc(sizeof(long));
 						*(long*) buffer = (long) aValue;
 	} else {
 		aValue = ((unsigned long) (interpreterProxy->positive64BitValueOf(intValue)));
 		if (interpreterProxy->failed()) {
-		return null;
+			return null;
 		}
 		buffer = malloc(sizeof(unsigned long));
 					*(unsigned long*)buffer = (unsigned long) aValue;
-			}
-			;
-			;
-			NS_DURING;
-			[nsInvocationInstance setArgument: buffer atIndex: index];
-			NS_HANDLER;
+	}
+	;
+	;
+	    NS_DURING;
+	[nsInvocationInstance setArgument: buffer atIndex: index];
+	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(5, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationSetPointerType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationSetPointerType(void) {
+	void ** buffer;
 	void * aValue;
-	void ** buffer;
-NSInvocation* nsInvocationInstance;
-sqInt aMethodSignatureOop;
+	NSInvocation* nsInvocationInstance;
+	sqInt aMethodSignatureOop;
 	sqInt index;
 	sqInt pointerValue;
 	sqInt _return_value;
-	
+
 	aMethodSignatureOop = interpreterProxy->stackValue(2);
 	index = interpreterProxy->stackIntegerValue(1);
 	pointerValue = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
-																					 aValue = ((char *) (interpreterProxy->positive64BitValueOf(pointerValue)));
+	aValue = ((char *) (interpreterProxy->positive64BitValueOf(pointerValue)));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	buffer = malloc(sizeof(void*));
-	*buffer = aValue;
+		*buffer = aValue;
 	;
 	;
-	NS_DURING;
+	    NS_DURING;
 	[nsInvocationInstance setArgument: buffer atIndex: index];
-	NS_HANDLER;
+	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
-															  if (interpreterProxy->failed()) {
-															  return null;
+	if (interpreterProxy->failed()) {
+		return null;
 	}
 	interpreterProxy->popthenPush(4, _return_value);
+	return null;
+}
+
+EXPORT(sqInt) primitiveNSInvocationSetRetained(void) {
+	NSInvocation* nsInvocationInstance;
+	sqInt aMethodSignatureOop;
+
+	aMethodSignatureOop = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
 		return null;
 	}
-	
+	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	    NS_DURING;
+	[nsInvocationInstance retainArguments];
+	    NS_HANDLER;
+	interpreterProxy->success(0);
+	    NS_ENDHANDLER;
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->pop(1);
+	return null;
+}
+
 EXPORT(sqInt) primitiveNSInvocationSetSelector(void) {
 	SEL selectorObject;
+	id object1;
 	NSInvocation *nsInvoke;
-	id object1;
 	sqInt aSelectorOop;
 	sqInt object1Oops;
 	sqInt aNSinvokeOops;
@@ -1423,195 +1462,203 @@
 	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		interpreterProxy->pop(3);
 		return null;
 	}
 	    NS_ENDHANDLER;
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->pop(3);
 	return null;
 }
 
-	EXPORT(sqInt) primitiveNSInvocationSetShortType(void) {
+EXPORT(sqInt) primitiveNSInvocationSetShortType(void) {
+	void * buffer;
+	short aValue;
 	NSInvocation* nsInvocationInstance;
-	short aValue;
-	void * buffer;
-		sqInt aMethodSignatureOop;
+	sqInt aMethodSignatureOop;
 	sqInt signedBoolean;
 	sqInt index;
 	sqInt intValue;
-sqInt _return_value;
+	sqInt _return_value;
 
-aMethodSignatureOop = interpreterProxy->stackValue(3);
+	aMethodSignatureOop = interpreterProxy->stackValue(3);
 	signedBoolean = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(2));
 	index = interpreterProxy->stackIntegerValue(1);
 	intValue = interpreterProxy->stackValue(0);
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	if (signedBoolean) {
-	aValue = ((short) (interpreterProxy->signed64BitValueOf(intValue)));
+		aValue = ((short) (interpreterProxy->signed64BitValueOf(intValue)));
 		if (interpreterProxy->failed()) {
-	return null;
-	}
-	buffer = malloc(sizeof(short));
+			return null;
+		}
+		buffer = malloc(sizeof(short));
 						*(short*) buffer = (short) aValue;
 	} else {
-	aValue = ((unsigned short) (interpreterProxy->positive64BitValueOf(intValue)));
-	if (interpreterProxy->failed()) {
-	return null;
-	}
-	buffer = malloc(sizeof(unsigned short));
+		aValue = ((unsigned short) (interpreterProxy->positive64BitValueOf(intValue)));
+		if (interpreterProxy->failed()) {
+			return null;
+		}
+		buffer = malloc(sizeof(unsigned short));
 					*(unsigned short*)buffer = (unsigned short) aValue;
 	}
 	;
 	;
-	NS_DURING;
-		[nsInvocationInstance setArgument: buffer atIndex: index];
-	NS_HANDLER;
+	    NS_DURING;
+	[nsInvocationInstance setArgument: buffer atIndex: index];
+	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
-if (interpreterProxy->failed()) {
-return null;
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->popthenPush(5, _return_value);
+	return null;
 }
-interpreterProxy->popthenPush(5, _return_value);
-	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationSetStringType(void) {
+
+EXPORT(sqInt) primitiveNSInvocationSetStringType(void) {
+	char * buffer;
 	sqInt stringSize;
-	char * buffer;
 	NSInvocation* nsInvocationInstance;
 	sqInt aMethodSignatureOop;
 	sqInt index;
 	char *aValue;
 	sqInt _return_value;
-	
+
 	aMethodSignatureOop = interpreterProxy->stackValue(2);
 	index = interpreterProxy->stackIntegerValue(1);
 	interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
 	aValue = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
-	stringSize = interpreterProxy->slotSizeOf(((sqInt)(long)(aValue) - 4));
+	stringSize = interpreterProxy->slotSizeOf((oopForPointer( aValue ) - BASE_HEADER_SIZE));
 	buffer = malloc(stringSize + 1);
-	memcpy(buffer,aValue,stringSize);
-	buffer[stringSize] = 0x00;
+		memcpy(buffer,aValue,stringSize);
+		buffer[stringSize] = 0x00;
 	;
 	;
-	NS_DURING;
+	    NS_DURING;
 	[nsInvocationInstance setArgument: &buffer atIndex: index];
-	NS_HANDLER;
-		interpreterProxy->success(0);
+	    NS_HANDLER;
+	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
-_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
+	    NS_ENDHANDLER;
+	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(4, _return_value);
 	return null;
-	}
-	
-	EXPORT(sqInt) primitiveNSInvocationSetStructureType(void) {
+}
+
+EXPORT(sqInt) primitiveNSInvocationSetStructureType(void) {
+	void * buffer;
 	sqInt byteArraySize;
-	void * buffer;
-		NSInvocation* nsInvocationInstance;
+	NSInvocation* nsInvocationInstance;
 	sqInt aMethodSignatureOop;
-sqInt index;
-char *aValue;
-sqInt _return_value;
-	
+	sqInt index;
+	char *aValue;
+	sqInt _return_value;
+
 	aMethodSignatureOop = interpreterProxy->stackValue(2);
 	index = interpreterProxy->stackIntegerValue(1);
 	interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
 	aValue = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
-		if (interpreterProxy->failed()) {
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	byteArraySize = interpreterProxy->slotSizeOf((oopForPointer( aValue ) - BASE_HEADER_SIZE));
+	buffer = malloc(byteArraySize);
+		memcpy(buffer,aValue,byteArraySize);
+	;
+	;
+	;
+	    NS_DURING;
+	[nsInvocationInstance setArgument: buffer atIndex: index];
+	    NS_HANDLER;
+	interpreterProxy->success(0);
+	if (1) {
+		return null;
+	}
+	    NS_ENDHANDLER;
+	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->popthenPush(4, _return_value);
 	return null;
+}
+
+EXPORT(sqInt) primitiveNSInvocationSetVoidPointerType(void) {
+	void * buffer;
+	sqInt byteArraySize;
+	NSInvocation* nsInvocationInstance;
+	sqInt aMethodSignatureOop;
+	sqInt index;
+	char *aValue;
+	sqInt _return_value;
+
+	aMethodSignatureOop = interpreterProxy->stackValue(2);
+	index = interpreterProxy->stackIntegerValue(1);
+	interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
+	aValue = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
+	if (interpreterProxy->failed()) {
+		return null;
 	}
-	byteArraySize = interpreterProxy->slotSizeOf(((sqInt)(long)(aValue) - 4));
+	nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	byteArraySize = interpreterProxy->slotSizeOf((oopForPointer( aValue ) - BASE_HEADER_SIZE));
 	buffer = malloc(byteArraySize);
-	memcpy(buffer,aValue,byteArraySize);
-	 ;
-	 ;
-	 ;
-	 NS_DURING;
-	 [nsInvocationInstance setArgument: buffer atIndex: index];
-		 NS_HANDLER;
-		 interpreterProxy->success(0);
-		 if (1) {
-		 return null;
-		 }
-		 NS_ENDHANDLER;
-		 _return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
-		 if (interpreterProxy->failed()) {
-		 return null;
-		 }
-		 interpreterProxy->popthenPush(4, _return_value);
-			 return null;
-		 }
-		 
-		 EXPORT(sqInt) primitiveNSInvocationSetVoidPointerType(void) {
-		 sqInt byteArraySize;
-		 void * buffer;
-		 NSInvocation* nsInvocationInstance;
-		 sqInt aMethodSignatureOop;
-		 sqInt index;
-		 char *aValue;
-		 sqInt _return_value;
-		 
-		 aMethodSignatureOop = interpreterProxy->stackValue(2);
-		 index = interpreterProxy->stackIntegerValue(1);
-		 interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0)));
-		 aValue = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0))));
-		 if (interpreterProxy->failed()) {
-		  return null;
-		  }
-		  nsInvocationInstance = ((NSInvocation *) (interpreterProxy->positive64BitValueOf(aMethodSignatureOop)));
-			  if (interpreterProxy->failed()) {
-			  return null;
-			  }
-			  byteArraySize = interpreterProxy->slotSizeOf(((sqInt)(long)(aValue) - 4));
-			  buffer = malloc(byteArraySize);
-			  memcpy(buffer,aValue,byteArraySize);
-			  ;
-			  ;
-			  ;
-			  NS_DURING;
-			  [nsInvocationInstance setArgument: &buffer atIndex: index];
-			  NS_HANDLER;
-			  interpreterProxy->success(0);
-			  if (1) {
-			  return null;
-			  }
-			  NS_ENDHANDLER;
-			  _return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
-			  if (interpreterProxy->failed()) {
-			  return null;
-				  }
-				  interpreterProxy->popthenPush(4, _return_value);
-			  return null;
-			  }
-			  
+		memcpy(buffer,aValue,byteArraySize);
+	;
+	;
+	;
+	    NS_DURING;
+	[nsInvocationInstance setArgument: &buffer atIndex: index];
+	    NS_HANDLER;
+	interpreterProxy->success(0);
+	if (1) {
+		return null;
+	}
+	    NS_ENDHANDLER;
+	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) buffer));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->popthenPush(4, _return_value);
+	return null;
+}
+
 EXPORT(sqInt) primitiveNSInvocationWithMethodSignature(void) {
+	NSInvocation* nsInvocationOops;
 	NSMethodSignature * methodSignatureOop;
-	NSInvocation* nsInvocationOops;
 	sqInt aMethodSignatureOop;
 	sqInt _return_value;
 
@@ -1640,298 +1687,302 @@
 	return null;
 }
 
-			  EXPORT(sqInt) primitiveNSLog(void) {
-			  id oop1;
-			  sqInt aNSStringOOP;
-			
-			  aNSStringOOP = interpreterProxy->stackValue(0);
-			  if (interpreterProxy->failed()) {
-			  return null;
-			  }
-			  oop1 = ((id) (interpreterProxy->positive64BitValueOf(aNSStringOOP)));
-			  if (interpreterProxy->failed()) {
-			  return null;
-			  }
-			  ;
-			  NSLog(oop1);
-			   if (interpreterProxy->failed()) {
-			   return null;
-			   }
-			   interpreterProxy->pop(1);
-			   return null;
-			   }
-			   
-			   EXPORT(sqInt) primitiveNSStringToUTF8(void) {
-			   NSString* nsStringObject;
-			   const char * utf8String;
-			   sqInt utf8StringOop;
-			   sqInt aNSStringOop;
-			   
-			   aNSStringOop = interpreterProxy->stackValue(0);
-			   if (interpreterProxy->failed()) {
-			   return null;
-			   }
-			   nsStringObject = ((NSString *) (interpreterProxy->positive64BitValueOf(aNSStringOop)));
-			   if (interpreterProxy->failed()) {
-			   return null;
-			   }
-			   utf8String = null;
-			   ;
-			   NS_DURING;
-			   utf8String = [nsStringObject UTF8String];
-			   NS_HANDLER 
-			   utf8String = nil;;
-			   NS_ENDHANDLER;
-			   if (!(utf8String)) {
-			   interpreterProxy->success(0);
-			   return null;
-			   }
-			   utf8StringOop = stringFromCString(utf8String);
-			  if (interpreterProxy->failed()) {
-			  return null;
-			  }
-			  interpreterProxy->popthenPush(2, utf8StringOop);
-			  return null;
-			  }
-			  
-			  
-			  /*	- (id)performSelector:(SEL)aSelector */
-				  
-				  EXPORT(sqInt) primitivePerformSelector(void) {
-			  id classOrInstanceObject;
-				  SEL selectorObject;
-				  id returnValue;
-				  sqInt aSelectorOop;
-			  sqInt aClassOrInstanceOop;
-			  sqInt _return_value;
-				  
-				  aSelectorOop = interpreterProxy->stackValue(1);
-				   aClassOrInstanceOop = interpreterProxy->stackValue(0);
-if (interpreterProxy->failed()) {
-return null;
+EXPORT(sqInt) primitiveNSLog(void) {
+	id oop1;
+	sqInt aNSStringOOP;
+
+	aNSStringOOP = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
+		return null;
 	}
+	oop1 = ((id) (interpreterProxy->positive64BitValueOf(aNSStringOOP)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	;
+	NSLog(oop1);
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->pop(1);
+	return null;
+}
+
+EXPORT(sqInt) primitiveNSStringToUTF8(void) {
+	sqInt utf8StringOop;
+	NSString* nsStringObject;
+	const char * utf8String;
+	sqInt aNSStringOop;
+
+	aNSStringOop = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	nsStringObject = ((NSString *) (interpreterProxy->positive64BitValueOf(aNSStringOop)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	utf8String = null;
+	;
+	    NS_DURING;
+	utf8String = [nsStringObject UTF8String];
+	    NS_HANDLER 
+		utf8String = nil;;
+	    NS_ENDHANDLER;
+	if (!(utf8String)) {
+		interpreterProxy->success(0);
+		return null;
+	}
+	utf8StringOop = stringFromCString(utf8String);
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->popthenPush(2, utf8StringOop);
+	return null;
+}
+
+
+/*	- (id)performSelector:(SEL)aSelector */
+
+EXPORT(sqInt) primitivePerformSelector(void) {
+	SEL selectorObject;
+	id classOrInstanceObject;
+	id returnValue;
+	sqInt aSelectorOop;
+	sqInt aClassOrInstanceOop;
+	sqInt _return_value;
+
+	aSelectorOop = interpreterProxy->stackValue(1);
+	aClassOrInstanceOop = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
+		return null;
+	}
 	classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
 	selectorObject = ((SEL) (interpreterProxy->positive64BitValueOf(aSelectorOop)));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	returnValue = null;
 	;
 	;
-	NS_DURING;
+	    NS_DURING;
 	returnValue = [classOrInstanceObject performSelector: selectorObject];
 	    NS_HANDLER 
-	returnValue = nil;;
-	NS_ENDHANDLER;
+		returnValue = nil;;
+	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) returnValue));
 	if (interpreterProxy->failed()) {
-								 return null;
+		return null;
 	}
 	interpreterProxy->popthenPush(3, _return_value);
 	return null;
-	}
-	
-	
-	/*	- (id)performSelector:(SEL)aSelector */
-	
-	EXPORT(sqInt) primitivePerformSelectorOnMainThreadWithWaitTilDone(void) {
+}
+
+
+/*	- (id)performSelector:(SEL)aSelector */
+
+EXPORT(sqInt) primitivePerformSelectorOnMainThreadWithWaitTilDone(void) {
+	SEL selectorObject;
 	id classOrInstanceObject;
 	id object1;
-	SEL selectorObject;
 	void *returnAddress;
 	sqInt aSelectorOop;
 	sqInt aClassOrInstanceOop;
 	sqInt anObject1;
 	sqInt aReturnValueAddress;
 	sqInt doneFlag;
-		
-		aSelectorOop = interpreterProxy->stackValue(4);
+
+	aSelectorOop = interpreterProxy->stackValue(4);
 	aClassOrInstanceOop = interpreterProxy->stackValue(3);
-	 anObject1 = interpreterProxy->stackValue(2);
-aReturnValueAddress = interpreterProxy->stackValue(1);
+	anObject1 = interpreterProxy->stackValue(2);
+	aReturnValueAddress = interpreterProxy->stackValue(1);
 	doneFlag = interpreterProxy->booleanValueOf(interpreterProxy->stackValue(0));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
 	selectorObject = ((SEL) (interpreterProxy->positive64BitValueOf(aSelectorOop)));
 	object1 = ((id) (interpreterProxy->positive64BitValueOf(anObject1)));
 	returnAddress = ((void *) (interpreterProxy->positive64BitValueOf(aReturnValueAddress)));
 	if (interpreterProxy->failed()) {
-	return null;
+		return null;
 	}
 	;
 	;
 	;
 	;
-	NS_DURING;
+	    NS_DURING;
 	[classOrInstanceObject performSelectorOnMainThread: selectorObject withObject: object1 waitUntilDone: doneFlag  ];
-	NS_HANDLER;
+	    NS_HANDLER;
 	interpreterProxy->success(0);
-							  if (1) {
-							  return null;
-							  }
-							  NS_ENDHANDLER;
-							  NS_DURING;
+	if (1) {
+		return null;
+	}
+	    NS_ENDHANDLER;
+	    NS_DURING;
 	if (returnAddress != 0) {
-	[classOrInstanceObject getReturnValue: returnAddress];
+		[classOrInstanceObject getReturnValue: returnAddress];
 	}
-	NS_HANDLER;
+	    NS_HANDLER;
 	interpreterProxy->success(0);
 	if (1) {
-	return null;
+		return null;
 	}
-	NS_ENDHANDLER;
+	    NS_ENDHANDLER;
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->pop(5);
 	return null;
-	}
-	
-	
-	/*	- (id)performSelector:(SEL)aSelector */
-	
-	EXPORT(sqInt) primitivePerformSelectorWith(void) {
+}
+
+
+/*	- (id)performSelector:(SEL)aSelector */
+
+EXPORT(sqInt) primitivePerformSelectorWith(void) {
+	SEL selectorObject;
+	id object1;
 	id classOrInstanceObject;
-		id object1;
-		SEL selectorObject;
 	id returnValue;
 	sqInt aSelectorOop;
 	sqInt aClassOrInstanceOop;
-sqInt anObject1;
-sqInt _return_value;
-	
+	sqInt anObject1;
+	sqInt _return_value;
+
 	aSelectorOop = interpreterProxy->stackValue(2);
 	aClassOrInstanceOop = interpreterProxy->stackValue(1);
 	anObject1 = interpreterProxy->stackValue(0);
-if (interpreterProxy->failed()) {
-	return null;
+	if (interpreterProxy->failed()) {
+		return null;
 	}
 	classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
 	selectorObject = ((SEL) (interpreterProxy->positive64BitValueOf(aSelectorOop)));
 	object1 = ((id) (interpreterProxy->positive64BitValueOf(anObject1)));
-	 if (interpreterProxy->failed()) {
-return null;
-}
-returnValue = null;
-;
-;
-;
-NS_DURING;
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	returnValue = null;
+	;
+	;
+	;
+	    NS_DURING;
 	returnValue = [classOrInstanceObject performSelector: selectorObject withObject: object1];
-	NS_HANDLER 
-	returnValue = nil;;
+	    NS_HANDLER 
+		returnValue = nil;;
 	    NS_ENDHANDLER;
 	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) returnValue));
-if (interpreterProxy->failed()) {
-return null;
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->popthenPush(4, _return_value);
+	return null;
 }
-interpreterProxy->popthenPush(4, _return_value);
- return null;
- }
- 
- 
- /*	- (id)performSelector:(SEL)aSelector */
- 
- EXPORT(sqInt) primitivePerformSelectorWithWith(void) {
-id classOrInstanceObject;
-id object2;
-id object1;
+
+
+/*	- (id)performSelector:(SEL)aSelector */
+
+EXPORT(sqInt) primitivePerformSelectorWithWith(void) {
 	SEL selectorObject;
+	id object1;
+	id classOrInstanceObject;
 	id returnValue;
+	id object2;
 	sqInt aSelectorOop;
 	sqInt aClassOrInstanceOop;
 	sqInt anObject1;
 	sqInt anObject2;
 	sqInt _return_value;
-	
+
 	aSelectorOop = interpreterProxy->stackValue(3);
 	aClassOrInstanceOop = interpreterProxy->stackValue(2);
-anObject1 = interpreterProxy->stackValue(1);
-anObject2 = interpreterProxy->stackValue(0);
-if (interpreterProxy->failed()) {
-return null;
+	anObject1 = interpreterProxy->stackValue(1);
+	anObject2 = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
+	selectorObject = ((SEL) (interpreterProxy->positive64BitValueOf(aSelectorOop)));
+	object1 = ((id) (interpreterProxy->positive64BitValueOf(anObject1)));
+	object2 = ((id) (interpreterProxy->positive64BitValueOf(anObject2)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	returnValue = null;
+	;
+	;
+	;
+	;
+	    NS_DURING;
+	returnValue = [classOrInstanceObject performSelector: selectorObject withObject: object1 withObject: object2 ];
+	    NS_HANDLER 
+		returnValue = nil;;
+	    NS_ENDHANDLER;
+	_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) returnValue));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->popthenPush(5, _return_value);
+	return null;
 }
-classOrInstanceObject = ((id) (interpreterProxy->positive64BitValueOf(aClassOrInstanceOop)));
-selectorObject = ((SEL) (interpreterProxy->positive64BitValueOf(aSelectorOop)));
-object1 = ((id) (interpreterProxy->positive64BitValueOf(anObject1)));
-object2 = ((id) (interpreterProxy->positive64BitValueOf(anObject2)));
-if (interpreterProxy->failed()) {
-return null;
-}
-returnValue = null;
-;
-;
-;
-;
-NS_DURING;
-returnValue = [classOrInstanceObject performSelector: selectorObject withObject: object1 withObject: object2 ];
-NS_HANDLER 
-returnValue = nil;;
-NS_ENDHANDLER;
-_return_value = interpreterProxy->positive64BitIntegerFor(((usqInt) returnValue));
-if (interpreterProxy->failed()) {
-return null;
-}
-interpreterProxy->popthenPush(5, _return_value);
-return null;
-}
 
 EXPORT(sqInt) primitiveSELGetName(void) {
-SEL bufferPointer;
-sqInt stringOop;
-sqInt aSEL;
+	SEL bufferPointer;
+	sqInt stringOop;
+	sqInt aSEL;
 
-aSEL = interpreterProxy->stackValue(0);
-if (interpreterProxy->failed()) {
-return null;
-}
-#define selgetName sel_getName
+	aSEL = interpreterProxy->stackValue(0);
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	#define selgetName sel_getName
 ;
-bufferPointer = ((SEL) (interpreterProxy->positive64BitValueOf(aSEL)));
-if (interpreterProxy->failed()) {
-return null;
+	bufferPointer = ((SEL) (interpreterProxy->positive64BitValueOf(aSEL)));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	stringOop = stringFromCString(selgetName(bufferPointer));
+	if (interpreterProxy->failed()) {
+		return null;
+	}
+	interpreterProxy->popthenPush(2, stringOop);
+	return null;
 }
-stringOop = stringFromCString(selgetName(bufferPointer));
-if (interpreterProxy->failed()) {
-return null;
-}
-interpreterProxy->popthenPush(2, stringOop);
-return null;
-}
 
 
 /*	Note: This is coded so that is can be run from Squeak. */
 
 EXPORT(sqInt) setInterpreter(struct VirtualMachine* anInterpreter) {
-sqInt ok;
+	sqInt ok;
 
-interpreterProxy = anInterpreter;
-ok = interpreterProxy->majorVersion() == VM_PROXY_MAJOR;
-if (ok == 0) {
-return 0;
+	interpreterProxy = anInterpreter;
+	ok = interpreterProxy->majorVersion() == VM_PROXY_MAJOR;
+	if (ok == 0) {
+		return 0;
+	}
+	ok = interpreterProxy->minorVersion() >= VM_PROXY_MINOR;
+	return ok;
 }
-ok = interpreterProxy->minorVersion() >= VM_PROXY_MINOR;
-return ok;
-}
 
 static sqInt shutdownModule(void) {
-return 1;
+	return 1;
 }
 
 static sqInt sqAssert(sqInt aBool) {
-/* missing DebugCode */;
+	/* missing DebugCode */;
 }
 
 
 /*	Answer a new String copied from a null-terminated C string.
-Caution: This may invoke the garbage collector. */
+	Caution: This may invoke the garbage collector. */
 
 static sqInt stringFromCString(const char * aCString) {
-sqInt len;
-sqInt newString;
+	sqInt len;
+	sqInt newString;
 
 	len = ((sqInt) (strlen(aCString)));
-newString = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classString(), len);
-strncpy(interpreterProxy->arrayValueOf(newString), aCString, len);
-return newString;
+	newString = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classString(), len);
+	strncpy(interpreterProxy->arrayValueOf(newString), aCString, len);
+	return newString;
 }
 
 
@@ -1939,61 +1990,62 @@
 
 
 void* ObjectiveCPlugin_exports[][3] = {
-{"ObjectiveCPlugin", "primitiveNSInvocationSetFloatType", (void*)primitiveNSInvocationSetFloatType},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetShortType", (void*)primitiveNSInvocationGetShortType},
-{"ObjectiveCPlugin", "primitiveCallbackLeave", (void*)primitiveCallbackLeave},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetLongType", (void*)primitiveNSInvocationGetLongType},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetArgument", (void*)primitiveNSInvocationGetArgument},
-{"ObjectiveCPlugin", "primitiveSELGetName", (void*)primitiveSELGetName},
-	{"ObjectiveCPlugin", "primitiveNSInvocationWithMethodSignature", (void*)primitiveNSInvocationWithMethodSignature},
-{"ObjectiveCPlugin", "primitiveMethodSignatureGetReturnType", (void*)primitiveMethodSignatureGetReturnType},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetStructureType", (void*)primitiveNSInvocationGetStructureType},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetClassType", (void*)primitiveNSInvocationGetClassType},
-{"ObjectiveCPlugin", "primitiveNSInvocationMalloc", (void*)primitiveNSInvocationMalloc},
-{"ObjectiveCPlugin", "primitivePerformSelectorWith", (void*)primitivePerformSelectorWith},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetSelector", (void*)primitiveNSInvocationSetSelector},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetDoubleType", (void*)primitiveNSInvocationGetDoubleType},
 	{"ObjectiveCPlugin", "primitiveGetAddressFromEntryPointString", (void*)primitiveGetAddressFromEntryPointString},
-{"ObjectiveCPlugin", "primitiveNSInvocationSetPointerType", (void*)primitiveNSInvocationSetPointerType},
-{"ObjectiveCPlugin", "primitiveNSInvocationSetLongLongType", (void*)primitiveNSInvocationSetLongLongType},
-{"ObjectiveCPlugin", "primitiveMethodSignatureGetNumberOfArguments", (void*)primitiveMethodSignatureGetNumberOfArguments},
-{"ObjectiveCPlugin", "primitiveNSInvocationFree", (void*)primitiveNSInvocationFree},
-{"ObjectiveCPlugin", "primitivePerformSelectorOnMainThreadWithWaitTilDone", (void*)primitivePerformSelectorOnMainThreadWithWaitTilDone},
-{"ObjectiveCPlugin", "primitiveMethodSignatureGetArgumentType", (void*)primitiveMethodSignatureGetArgumentType},
-	{"ObjectiveCPlugin", "primitiveNSInvocationSetSelector", (void*)primitiveNSInvocationSetSelector},
-{"ObjectiveCPlugin", "primitiveNSStringToUTF8", (void*)primitiveNSStringToUTF8},
-{"ObjectiveCPlugin", "primitiveNSInvocationSetIntType", (void*)primitiveNSInvocationSetIntType},
-{"ObjectiveCPlugin", "primitiveNSInvocationSetCType", (void*)primitiveNSInvocationSetCType},
+	{"ObjectiveCPlugin", "primitiveGetObjCClassForString", (void*)primitiveGetObjCClassForString},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetRetained", (void*)primitiveNSInvocationSetRetained},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetLongType", (void*)primitiveNSInvocationGetLongType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetCType", (void*)primitiveNSInvocationGetCType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetShortType", (void*)primitiveNSInvocationSetShortType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetFloatType", (void*)primitiveNSInvocationGetFloatType},
+	{"ObjectiveCPlugin", "primitivePerformSelectorWithWith", (void*)primitivePerformSelectorWithWith},
+	{"ObjectiveCPlugin", "primitiveNSInvocationMalloc", (void*)primitiveNSInvocationMalloc},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetLongLongType", (void*)primitiveNSInvocationSetLongLongType},
+	{"ObjectiveCPlugin", "primitiveMethodSignatureGetMethodReturnLength", (void*)primitiveMethodSignatureGetMethodReturnLength},
+	{"ObjectiveCPlugin", "primitiveNSStringToUTF8", (void*)primitiveNSStringToUTF8},
+	{"ObjectiveCPlugin", "getModuleName", (void*)getModuleName},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetLongLongType", (void*)primitiveNSInvocationGetLongLongType},
+	{"ObjectiveCPlugin", "primitiveMethodSignatureGetReturnType", (void*)primitiveMethodSignatureGetReturnType},
+	{"ObjectiveCPlugin", "primitiveSELGetName", (void*)primitiveSELGetName},
+	{"ObjectiveCPlugin", "primitivePerformSelectorOnMainThreadWithWaitTilDone", (void*)primitivePerformSelectorOnMainThreadWithWaitTilDone},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetDoubleType", (void*)primitiveNSInvocationSetDoubleType},
+	{"ObjectiveCPlugin", "primitiveCallbackLeave", (void*)primitiveCallbackLeave},
 	{"ObjectiveCPlugin", "primitiveNSInvocationGetReturnValue", (void*)primitiveNSInvocationGetReturnValue},
-{"ObjectiveCPlugin", "primitivePerformSelector", (void*)primitivePerformSelector},
-{"ObjectiveCPlugin", "primitivePerformSelectorWithWith", (void*)primitivePerformSelectorWithWith},
-{"ObjectiveCPlugin", "primitiveGetClass", (void*)primitiveGetClass},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetDoubleType", (void*)primitiveNSInvocationGetDoubleType},
-{"ObjectiveCPlugin", "primitiveIsEqual", (void*)primitiveIsEqual},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetShortType", (void*)primitiveNSInvocationGetShortType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetStringType", (void*)primitiveNSInvocationSetStringType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetPointerType", (void*)primitiveNSInvocationSetPointerType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetObjectType", (void*)primitiveNSInvocationGetObjectType},
+	{"ObjectiveCPlugin", "primitiveMethodSignatureGetArgumentType", (void*)primitiveMethodSignatureGetArgumentType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetStructureType", (void*)primitiveNSInvocationSetStructureType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetArgument", (void*)primitiveNSInvocationGetArgument},
+	{"ObjectiveCPlugin", "primitiveGetSelectorForString", (void*)primitiveGetSelectorForString},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetIntType", (void*)primitiveNSInvocationSetIntType},
 	{"ObjectiveCPlugin", "primitiveGetNSStringForString", (void*)primitiveGetNSStringForString},
-{"ObjectiveCPlugin", "primitiveGetDescription", (void*)primitiveGetDescription},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetIntType", (void*)primitiveNSInvocationGetIntType},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetCType", (void*)primitiveNSInvocationGetCType},
-{"ObjectiveCPlugin", "getModuleName", (void*)getModuleName},
-{"ObjectiveCPlugin", "primitiveNSLog", (void*)primitiveNSLog},
-{"ObjectiveCPlugin", "primitiveNSInvocationSetStringType", (void*)primitiveNSInvocationSetStringType},
-{"ObjectiveCPlugin", "primitiveNSInvocationSetLongType", (void*)primitiveNSInvocationSetLongType},
-{"ObjectiveCPlugin", "setInterpreter", (void*)setInterpreter},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetObjectType", (void*)primitiveNSInvocationGetObjectType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetClassType", (void*)primitiveNSInvocationGetClassType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationCalloc", (void*)primitiveNSInvocationCalloc},
+	{"ObjectiveCPlugin", "primitivePerformSelectorWith", (void*)primitivePerformSelectorWith},
+	{"ObjectiveCPlugin", "primitiveIsEqual", (void*)primitiveIsEqual},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetIntType", (void*)primitiveNSInvocationGetIntType},
+	{"ObjectiveCPlugin", "primitiveGetMethodSignatureForSelector", (void*)primitiveGetMethodSignatureForSelector},
+	{"ObjectiveCPlugin", "primitiveGetClass", (void*)primitiveGetClass},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetLongType", (void*)primitiveNSInvocationSetLongType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetVoidPointerType", (void*)primitiveNSInvocationSetVoidPointerType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationFree", (void*)primitiveNSInvocationFree},
+	{"ObjectiveCPlugin", "setInterpreter", (void*)setInterpreter},
+	{"ObjectiveCPlugin", "primitiveMethodSignatureGetNumberOfArguments", (void*)primitiveMethodSignatureGetNumberOfArguments},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetSelectorType", (void*)primitiveNSInvocationGetSelectorType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetCType", (void*)primitiveNSInvocationSetCType},
+	{"ObjectiveCPlugin", "primitivePerformSelector", (void*)primitivePerformSelector},
+	{"ObjectiveCPlugin", "primitiveNSLog", (void*)primitiveNSLog},
+	{"ObjectiveCPlugin", "primitiveNSInvocationWithMethodSignature", (void*)primitiveNSInvocationWithMethodSignature},
 	{"ObjectiveCPlugin", "primitiveGetAutoReleasePool", (void*)primitiveGetAutoReleasePool},
-{"ObjectiveCPlugin", "primitiveNSInvocationSetVoidPointerType", (void*)primitiveNSInvocationSetVoidPointerType},
-{"ObjectiveCPlugin", "primitiveNSInvocationSetDoubleType", (void*)primitiveNSInvocationSetDoubleType},
-{"ObjectiveCPlugin", "primitiveNSInvocationSetShortType", (void*)primitiveNSInvocationSetShortType},
-{"ObjectiveCPlugin", "primitiveGetSuperClass", (void*)primitiveGetSuperClass},
-{"ObjectiveCPlugin", "primitiveGetSelectorForString", (void*)primitiveGetSelectorForString},
-{"ObjectiveCPlugin", "primitiveMethodSignatureGetMethodReturnLength", (void*)primitiveMethodSignatureGetMethodReturnLength},
-{"ObjectiveCPlugin", "primitiveNSInvocationCalloc", (void*)primitiveNSInvocationCalloc},
-{"ObjectiveCPlugin", "primitiveGetMethodSignatureForSelector", (void*)primitiveGetMethodSignatureForSelector},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetFloatType", (void*)primitiveNSInvocationGetFloatType},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetCharPointerType", (void*)primitiveNSInvocationGetCharPointerType},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetLongLongType", (void*)primitiveNSInvocationGetLongLongType},
-{"ObjectiveCPlugin", "primitiveGetObjCClassForString", (void*)primitiveGetObjCClassForString},
-{"ObjectiveCPlugin", "primitiveNSInvocationGetSelectorType", (void*)primitiveNSInvocationGetSelectorType},
-{"ObjectiveCPlugin", "primitiveNSInvocationSetStructureType", (void*)primitiveNSInvocationSetStructureType},
-{NULL, NULL, NULL}
+	{"ObjectiveCPlugin", "primitiveGetDescription", (void*)primitiveGetDescription},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetCharPointerType", (void*)primitiveNSInvocationGetCharPointerType},
+	{"ObjectiveCPlugin", "primitiveGetSuperClass", (void*)primitiveGetSuperClass},
+	{"ObjectiveCPlugin", "primitiveNSInvocationSetFloatType", (void*)primitiveNSInvocationSetFloatType},
+	{"ObjectiveCPlugin", "primitiveNSInvocationGetStructureType", (void*)primitiveNSInvocationGetStructureType},
+	{NULL, NULL, NULL}
 };
 
 



More information about the Vm-dev mailing list