[Vm-dev] [commit] r2506 - Fix error codes for at: and at:put: primitive so that for non-indexable

commits at squeakvm.org commits at squeakvm.org
Mon Nov 7 18:28:01 UTC 2011


Author: eliot
Date: 2011-11-07 10:28:00 -0800 (Mon, 07 Nov 2011)
New Revision: 2506

Modified:
   branches/Cog/nscogsrc/vm/cointerp.c
   branches/Cog/nscogsrc/vm/cointerp.h
   branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
   branches/Cog/nscogsrc/vm/interp.h
   branches/Cog/nscogsrc/vm/vmCallback.h
   branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
   branches/Cog/src/vm/cointerp.c
   branches/Cog/src/vm/cointerp.h
   branches/Cog/src/vm/cointerpmt.c
   branches/Cog/src/vm/cointerpmt.h
   branches/Cog/src/vm/gcc3x-cointerp.c
   branches/Cog/src/vm/gcc3x-cointerpmt.c
   branches/Cog/src/vm/interp.h
   branches/Cog/src/vm/vmCallback.h
Log:
Fix error codes for at: and at:put: primitive so that for non-indexable
objects they fail with #'bad receiver', not #'bad index'.


Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/nscogsrc/vm/cointerp.c	2011-11-07 18:28:00 UTC (rev 2506)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
    from
-	CoInterpreter VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CoInterpreter VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1897,7 +1897,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.134";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.136";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -7881,6 +7881,7 @@
 				sqInt fmt;
 				sqInt result1;
 				sqInt stSize;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAt);
 								index = longAtPointer(localSP);
@@ -7952,7 +7953,11 @@
 								goto l98;
 							}
 						}
-						result = (GIV(primFailCode) = PrimErrBadIndex);
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						result = (GIV(primFailCode) = reasonCode);
 					l98:	/* end commonVariable:at:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
@@ -7979,11 +7984,12 @@
 				sqInt index;
 				sqInt rcvr;
 				sqInt value;
+				sqInt ccIndex;
 				sqInt fixedFields;
 				sqInt fmt;
 				sqInt stSize;
 				sqInt valToPut;
-				sqInt ccIndex;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAtPut);
 								value = longAtPointer(localSP);
@@ -7999,13 +8005,13 @@
 						/* begin fetchClassOfNonInt: */
 						if (((ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31)) == 0) {
 							GIV(lkupClass) = (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask;
-							goto l101;
+							goto l100;
 						}
 						else {
 							GIV(lkupClass) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord));
-							goto l101;
+							goto l100;
 						}
-					l101:	/* end fetchClassOfNonInt: */;
+					l100:	/* end fetchClassOfNonInt: */;
 						GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((17 * 2) << ShiftForWord));
 						if (!(lookupInMethodCacheSelclass(GIV(messageSelector), GIV(lkupClass)))) {
 							GIV(argumentCount) = 2;
@@ -8041,7 +8047,7 @@
 									possibleRootStoreIntovalue(rcvr, value);
 								}
 								longAtput((rcvr + BaseHeaderSize) + (((((index >> 1)) + fixedFields) - 1) << ShiftForWord), value);
-								goto l100;
+								goto l101;
 							}
 							if (fmt < 8) {
 
@@ -8051,7 +8057,7 @@
 								if (!GIV(primFailCode)) {
 									long32Atput((rcvr + BaseHeaderSize) + ((((index >> 1)) - 1) << 2), valToPut);
 								}
-								goto l100;
+								goto l101;
 							}
 							if (fmt >= 16) {
 
@@ -8059,7 +8065,7 @@
 
 								valToPut = asciiOfCharacter(value);
 								if (!(!GIV(primFailCode))) {
-									goto l100;
+									goto l101;
 								}
 							}
 							else {
@@ -8073,14 +8079,18 @@
 									if (!GIV(primFailCode)) {
 										GIV(primFailCode) = 1;
 									}
-									goto l100;
+									goto l101;
 								}
 								byteAtput((rcvr + BaseHeaderSize) + (((index >> 1)) - 1), valToPut);
-								goto l100;
+								goto l101;
 							}
 						}
-						GIV(primFailCode) = PrimErrBadIndex;
-					l100:	/* end commonVariable:at:put:cacheIndex: */;
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						GIV(primFailCode) = reasonCode;
+					l101:	/* end commonVariable:at:put:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
 						/* begin fetchNextBytecode */
@@ -12610,6 +12620,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     char *sp;
     char *sp1;
     sqInt stSize;
@@ -12704,7 +12715,11 @@
 					goto l1;
 				}
 			}
-			GIV(primFailCode) = PrimErrBadIndex;
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			GIV(primFailCode) = reasonCode;
 		l1:	/* end commonVariable:at:put:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -12744,6 +12759,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     sqInt result;
     sqInt result1;
     char *sp;
@@ -12814,7 +12830,11 @@
 					goto l1;
 				}
 			}
-			result = (GIV(primFailCode) = PrimErrBadIndex);
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			result = (GIV(primFailCode) = reasonCode);
 		l1:	/* end commonVariable:at:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -43278,6 +43298,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -43373,10 +43394,12 @@
 			return (((byteAt((array + BaseHeaderSize) + ((index + fixedFields) - 1))) << 1) | 1);
 		}
 	}
-	else {
-		GIV(primFailCode) = PrimErrBadIndex;
-		return 0;
-	}
+	/* begin primitiveFailFor: */
+	reasonCode = (fmt <= 1
+		? PrimErrBadReceiver
+		: PrimErrBadIndex);
+	GIV(primFailCode) = reasonCode;
+	return 0;
 }
 
 
@@ -43391,6 +43414,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -43528,7 +43552,11 @@
 		}
 	}
 	else {
-		GIV(primFailCode) = PrimErrBadIndex;
+		/* begin primitiveFailFor: */
+		reasonCode = (fmt <= 1
+			? PrimErrBadReceiver
+			: PrimErrBadIndex);
+		GIV(primFailCode) = reasonCode;
 	}
 }
 

Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/nscogsrc/vm/cointerp.h	2011-11-07 18:28:00 UTC (rev 2506)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
 
 

Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2011-11-07 18:28:00 UTC (rev 2506)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
    from
-	CoInterpreter VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CoInterpreter VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1900,7 +1900,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.134";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.136";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -7885,6 +7885,7 @@
 				sqInt fmt;
 				sqInt result1;
 				sqInt stSize;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAt);
 								index = longAtPointer(localSP);
@@ -7956,7 +7957,11 @@
 								goto l98;
 							}
 						}
-						result = (GIV(primFailCode) = PrimErrBadIndex);
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						result = (GIV(primFailCode) = reasonCode);
 					l98:	/* end commonVariable:at:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
@@ -7983,11 +7988,12 @@
 				sqInt index;
 				sqInt rcvr;
 				sqInt value;
+				sqInt ccIndex;
 				sqInt fixedFields;
 				sqInt fmt;
 				sqInt stSize;
 				sqInt valToPut;
-				sqInt ccIndex;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAtPut);
 								value = longAtPointer(localSP);
@@ -8003,13 +8009,13 @@
 						/* begin fetchClassOfNonInt: */
 						if (((ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31)) == 0) {
 							GIV(lkupClass) = (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask;
-							goto l101;
+							goto l100;
 						}
 						else {
 							GIV(lkupClass) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord));
-							goto l101;
+							goto l100;
 						}
-					l101:	/* end fetchClassOfNonInt: */;
+					l100:	/* end fetchClassOfNonInt: */;
 						GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((17 * 2) << ShiftForWord));
 						if (!(lookupInMethodCacheSelclass(GIV(messageSelector), GIV(lkupClass)))) {
 							GIV(argumentCount) = 2;
@@ -8045,7 +8051,7 @@
 									possibleRootStoreIntovalue(rcvr, value);
 								}
 								longAtput((rcvr + BaseHeaderSize) + (((((index >> 1)) + fixedFields) - 1) << ShiftForWord), value);
-								goto l100;
+								goto l101;
 							}
 							if (fmt < 8) {
 
@@ -8055,7 +8061,7 @@
 								if (!GIV(primFailCode)) {
 									long32Atput((rcvr + BaseHeaderSize) + ((((index >> 1)) - 1) << 2), valToPut);
 								}
-								goto l100;
+								goto l101;
 							}
 							if (fmt >= 16) {
 
@@ -8063,7 +8069,7 @@
 
 								valToPut = asciiOfCharacter(value);
 								if (!(!GIV(primFailCode))) {
-									goto l100;
+									goto l101;
 								}
 							}
 							else {
@@ -8077,14 +8083,18 @@
 									if (!GIV(primFailCode)) {
 										GIV(primFailCode) = 1;
 									}
-									goto l100;
+									goto l101;
 								}
 								byteAtput((rcvr + BaseHeaderSize) + (((index >> 1)) - 1), valToPut);
-								goto l100;
+								goto l101;
 							}
 						}
-						GIV(primFailCode) = PrimErrBadIndex;
-					l100:	/* end commonVariable:at:put:cacheIndex: */;
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						GIV(primFailCode) = reasonCode;
+					l101:	/* end commonVariable:at:put:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
 						/* begin fetchNextBytecode */
@@ -12614,6 +12624,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     char *sp;
     char *sp1;
     sqInt stSize;
@@ -12708,7 +12719,11 @@
 					goto l1;
 				}
 			}
-			GIV(primFailCode) = PrimErrBadIndex;
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			GIV(primFailCode) = reasonCode;
 		l1:	/* end commonVariable:at:put:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -12748,6 +12763,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     sqInt result;
     sqInt result1;
     char *sp;
@@ -12818,7 +12834,11 @@
 					goto l1;
 				}
 			}
-			result = (GIV(primFailCode) = PrimErrBadIndex);
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			result = (GIV(primFailCode) = reasonCode);
 		l1:	/* end commonVariable:at:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -43282,6 +43302,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -43377,10 +43398,12 @@
 			return (((byteAt((array + BaseHeaderSize) + ((index + fixedFields) - 1))) << 1) | 1);
 		}
 	}
-	else {
-		GIV(primFailCode) = PrimErrBadIndex;
-		return 0;
-	}
+	/* begin primitiveFailFor: */
+	reasonCode = (fmt <= 1
+		? PrimErrBadReceiver
+		: PrimErrBadIndex);
+	GIV(primFailCode) = reasonCode;
+	return 0;
 }
 
 
@@ -43395,6 +43418,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -43532,7 +43556,11 @@
 		}
 	}
 	else {
-		GIV(primFailCode) = PrimErrBadIndex;
+		/* begin primitiveFailFor: */
+		reasonCode = (fmt <= 1
+			? PrimErrBadReceiver
+			: PrimErrBadIndex);
+		GIV(primFailCode) = reasonCode;
 	}
 }
 

Modified: branches/Cog/nscogsrc/vm/interp.h
===================================================================
--- branches/Cog/nscogsrc/vm/interp.h	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/nscogsrc/vm/interp.h	2011-11-07 18:28:00 UTC (rev 2506)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/nscogsrc/vm/vmCallback.h
===================================================================
--- branches/Cog/nscogsrc/vm/vmCallback.h	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/nscogsrc/vm/vmCallback.h	2011-11-07 18:28:00 UTC (rev 2506)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
 
 #define VM_CALLBACK_INC 1


Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
   - Tue Oct 25 11:25:05 PDT 2011
   + Mon Nov  7 10:27:44 PST 2011

Modified: branches/Cog/src/vm/cointerp.c
===================================================================
--- branches/Cog/src/vm/cointerp.c	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/src/vm/cointerp.c	2011-11-07 18:28:00 UTC (rev 2506)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
    from
-	CoInterpreter VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CoInterpreter VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1888,7 +1888,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.134]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.136]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -7641,6 +7641,7 @@
 				sqInt fmt;
 				sqInt result1;
 				sqInt stSize;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAt);
 								index = longAtPointer(localSP);
@@ -7712,7 +7713,11 @@
 								goto l93;
 							}
 						}
-						result = (GIV(primFailCode) = PrimErrBadIndex);
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						result = (GIV(primFailCode) = reasonCode);
 					l93:	/* end commonVariable:at:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
@@ -7739,11 +7744,12 @@
 				sqInt index;
 				sqInt rcvr;
 				sqInt value;
+				sqInt ccIndex;
 				sqInt fixedFields;
 				sqInt fmt;
 				sqInt stSize;
 				sqInt valToPut;
-				sqInt ccIndex;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAtPut);
 								value = longAtPointer(localSP);
@@ -7759,13 +7765,13 @@
 						/* begin fetchClassOfNonInt: */
 						if (((ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31)) == 0) {
 							GIV(lkupClass) = (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask;
-							goto l96;
+							goto l95;
 						}
 						else {
 							GIV(lkupClass) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord));
-							goto l96;
+							goto l95;
 						}
-					l96:	/* end fetchClassOfNonInt: */;
+					l95:	/* end fetchClassOfNonInt: */;
 						GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((17 * 2) << ShiftForWord));
 						if (!(lookupInMethodCacheSelclass(GIV(messageSelector), GIV(lkupClass)))) {
 							GIV(argumentCount) = 2;
@@ -7801,7 +7807,7 @@
 									possibleRootStoreIntovalue(rcvr, value);
 								}
 								longAtput((rcvr + BaseHeaderSize) + (((((index >> 1)) + fixedFields) - 1) << ShiftForWord), value);
-								goto l95;
+								goto l96;
 							}
 							if (fmt < 8) {
 
@@ -7811,7 +7817,7 @@
 								if (!GIV(primFailCode)) {
 									long32Atput((rcvr + BaseHeaderSize) + ((((index >> 1)) - 1) << 2), valToPut);
 								}
-								goto l95;
+								goto l96;
 							}
 							if (fmt >= 16) {
 
@@ -7819,7 +7825,7 @@
 
 								valToPut = asciiOfCharacter(value);
 								if (!(!GIV(primFailCode))) {
-									goto l95;
+									goto l96;
 								}
 							}
 							else {
@@ -7833,14 +7839,18 @@
 									if (!GIV(primFailCode)) {
 										GIV(primFailCode) = 1;
 									}
-									goto l95;
+									goto l96;
 								}
 								byteAtput((rcvr + BaseHeaderSize) + (((index >> 1)) - 1), valToPut);
-								goto l95;
+								goto l96;
 							}
 						}
-						GIV(primFailCode) = PrimErrBadIndex;
-					l95:	/* end commonVariable:at:put:cacheIndex: */;
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						GIV(primFailCode) = reasonCode;
+					l96:	/* end commonVariable:at:put:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
 						/* begin fetchNextBytecode */
@@ -12231,6 +12241,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     char *sp;
     char *sp1;
     sqInt stSize;
@@ -12325,7 +12336,11 @@
 					goto l1;
 				}
 			}
-			GIV(primFailCode) = PrimErrBadIndex;
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			GIV(primFailCode) = reasonCode;
 		l1:	/* end commonVariable:at:put:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -12365,6 +12380,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     sqInt result;
     sqInt result1;
     char *sp;
@@ -12435,7 +12451,11 @@
 					goto l1;
 				}
 			}
-			result = (GIV(primFailCode) = PrimErrBadIndex);
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			result = (GIV(primFailCode) = reasonCode);
 		l1:	/* end commonVariable:at:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -42596,6 +42616,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -42691,10 +42712,12 @@
 			return (((byteAt((array + BaseHeaderSize) + ((index + fixedFields) - 1))) << 1) | 1);
 		}
 	}
-	else {
-		GIV(primFailCode) = PrimErrBadIndex;
-		return 0;
-	}
+	/* begin primitiveFailFor: */
+	reasonCode = (fmt <= 1
+		? PrimErrBadReceiver
+		: PrimErrBadIndex);
+	GIV(primFailCode) = reasonCode;
+	return 0;
 }
 
 
@@ -42709,6 +42732,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -42846,7 +42870,11 @@
 		}
 	}
 	else {
-		GIV(primFailCode) = PrimErrBadIndex;
+		/* begin primitiveFailFor: */
+		reasonCode = (fmt <= 1
+			? PrimErrBadReceiver
+			: PrimErrBadIndex);
+		GIV(primFailCode) = reasonCode;
 	}
 }
 

Modified: branches/Cog/src/vm/cointerp.h
===================================================================
--- branches/Cog/src/vm/cointerp.h	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/src/vm/cointerp.h	2011-11-07 18:28:00 UTC (rev 2506)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
 
 

Modified: branches/Cog/src/vm/cointerpmt.c
===================================================================
--- branches/Cog/src/vm/cointerpmt.c	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/src/vm/cointerpmt.c	2011-11-07 18:28:00 UTC (rev 2506)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
    from
-	CoInterpreterMT VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CoInterpreterMT VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1988,7 +1988,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.134]";
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.136]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 sqInt willNotThreadWarnCount;
@@ -7743,6 +7743,7 @@
 				sqInt fmt;
 				sqInt result1;
 				sqInt stSize;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAt);
 								index = longAtPointer(localSP);
@@ -7814,7 +7815,11 @@
 								goto l93;
 							}
 						}
-						result = (GIV(primFailCode) = PrimErrBadIndex);
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						result = (GIV(primFailCode) = reasonCode);
 					l93:	/* end commonVariable:at:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
@@ -7841,11 +7846,12 @@
 				sqInt index;
 				sqInt rcvr;
 				sqInt value;
+				sqInt ccIndex;
 				sqInt fixedFields;
 				sqInt fmt;
 				sqInt stSize;
 				sqInt valToPut;
-				sqInt ccIndex;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAtPut);
 								value = longAtPointer(localSP);
@@ -7861,13 +7867,13 @@
 						/* begin fetchClassOfNonInt: */
 						if (((ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31)) == 0) {
 							GIV(lkupClass) = (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask;
-							goto l96;
+							goto l95;
 						}
 						else {
 							GIV(lkupClass) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord));
-							goto l96;
+							goto l95;
 						}
-					l96:	/* end fetchClassOfNonInt: */;
+					l95:	/* end fetchClassOfNonInt: */;
 						GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((17 * 2) << ShiftForWord));
 						if (!(lookupInMethodCacheSelclass(GIV(messageSelector), GIV(lkupClass)))) {
 							GIV(argumentCount) = 2;
@@ -7903,7 +7909,7 @@
 									possibleRootStoreIntovalue(rcvr, value);
 								}
 								longAtput((rcvr + BaseHeaderSize) + (((((index >> 1)) + fixedFields) - 1) << ShiftForWord), value);
-								goto l95;
+								goto l96;
 							}
 							if (fmt < 8) {
 
@@ -7913,7 +7919,7 @@
 								if (!GIV(primFailCode)) {
 									long32Atput((rcvr + BaseHeaderSize) + ((((index >> 1)) - 1) << 2), valToPut);
 								}
-								goto l95;
+								goto l96;
 							}
 							if (fmt >= 16) {
 
@@ -7921,7 +7927,7 @@
 
 								valToPut = asciiOfCharacter(value);
 								if (!(!GIV(primFailCode))) {
-									goto l95;
+									goto l96;
 								}
 							}
 							else {
@@ -7935,14 +7941,18 @@
 									if (!GIV(primFailCode)) {
 										GIV(primFailCode) = 1;
 									}
-									goto l95;
+									goto l96;
 								}
 								byteAtput((rcvr + BaseHeaderSize) + (((index >> 1)) - 1), valToPut);
-								goto l95;
+								goto l96;
 							}
 						}
-						GIV(primFailCode) = PrimErrBadIndex;
-					l95:	/* end commonVariable:at:put:cacheIndex: */;
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						GIV(primFailCode) = reasonCode;
+					l96:	/* end commonVariable:at:put:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
 						/* begin fetchNextBytecode */
@@ -12647,6 +12657,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     char *sp;
     char *sp1;
     sqInt stSize;
@@ -12741,7 +12752,11 @@
 					goto l1;
 				}
 			}
-			GIV(primFailCode) = PrimErrBadIndex;
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			GIV(primFailCode) = reasonCode;
 		l1:	/* end commonVariable:at:put:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -12781,6 +12796,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     sqInt result;
     sqInt result1;
     char *sp;
@@ -12851,7 +12867,11 @@
 					goto l1;
 				}
 			}
-			result = (GIV(primFailCode) = PrimErrBadIndex);
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			result = (GIV(primFailCode) = reasonCode);
 		l1:	/* end commonVariable:at:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -44094,6 +44114,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -44189,10 +44210,12 @@
 			return (((byteAt((array + BaseHeaderSize) + ((index + fixedFields) - 1))) << 1) | 1);
 		}
 	}
-	else {
-		GIV(primFailCode) = PrimErrBadIndex;
-		return 0;
-	}
+	/* begin primitiveFailFor: */
+	reasonCode = (fmt <= 1
+		? PrimErrBadReceiver
+		: PrimErrBadIndex);
+	GIV(primFailCode) = reasonCode;
+	return 0;
 }
 
 
@@ -44207,6 +44230,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -44344,7 +44368,11 @@
 		}
 	}
 	else {
-		GIV(primFailCode) = PrimErrBadIndex;
+		/* begin primitiveFailFor: */
+		reasonCode = (fmt <= 1
+			? PrimErrBadReceiver
+			: PrimErrBadIndex);
+		GIV(primFailCode) = reasonCode;
 	}
 }
 

Modified: branches/Cog/src/vm/cointerpmt.h
===================================================================
--- branches/Cog/src/vm/cointerpmt.h	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/src/vm/cointerpmt.h	2011-11-07 18:28:00 UTC (rev 2506)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
 
 

Modified: branches/Cog/src/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/src/vm/gcc3x-cointerp.c	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/src/vm/gcc3x-cointerp.c	2011-11-07 18:28:00 UTC (rev 2506)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
    from
-	CoInterpreter VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CoInterpreter VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1891,7 +1891,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.134]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.136]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -7645,6 +7645,7 @@
 				sqInt fmt;
 				sqInt result1;
 				sqInt stSize;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAt);
 								index = longAtPointer(localSP);
@@ -7716,7 +7717,11 @@
 								goto l93;
 							}
 						}
-						result = (GIV(primFailCode) = PrimErrBadIndex);
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						result = (GIV(primFailCode) = reasonCode);
 					l93:	/* end commonVariable:at:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
@@ -7743,11 +7748,12 @@
 				sqInt index;
 				sqInt rcvr;
 				sqInt value;
+				sqInt ccIndex;
 				sqInt fixedFields;
 				sqInt fmt;
 				sqInt stSize;
 				sqInt valToPut;
-				sqInt ccIndex;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAtPut);
 								value = longAtPointer(localSP);
@@ -7763,13 +7769,13 @@
 						/* begin fetchClassOfNonInt: */
 						if (((ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31)) == 0) {
 							GIV(lkupClass) = (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask;
-							goto l96;
+							goto l95;
 						}
 						else {
 							GIV(lkupClass) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord));
-							goto l96;
+							goto l95;
 						}
-					l96:	/* end fetchClassOfNonInt: */;
+					l95:	/* end fetchClassOfNonInt: */;
 						GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((17 * 2) << ShiftForWord));
 						if (!(lookupInMethodCacheSelclass(GIV(messageSelector), GIV(lkupClass)))) {
 							GIV(argumentCount) = 2;
@@ -7805,7 +7811,7 @@
 									possibleRootStoreIntovalue(rcvr, value);
 								}
 								longAtput((rcvr + BaseHeaderSize) + (((((index >> 1)) + fixedFields) - 1) << ShiftForWord), value);
-								goto l95;
+								goto l96;
 							}
 							if (fmt < 8) {
 
@@ -7815,7 +7821,7 @@
 								if (!GIV(primFailCode)) {
 									long32Atput((rcvr + BaseHeaderSize) + ((((index >> 1)) - 1) << 2), valToPut);
 								}
-								goto l95;
+								goto l96;
 							}
 							if (fmt >= 16) {
 
@@ -7823,7 +7829,7 @@
 
 								valToPut = asciiOfCharacter(value);
 								if (!(!GIV(primFailCode))) {
-									goto l95;
+									goto l96;
 								}
 							}
 							else {
@@ -7837,14 +7843,18 @@
 									if (!GIV(primFailCode)) {
 										GIV(primFailCode) = 1;
 									}
-									goto l95;
+									goto l96;
 								}
 								byteAtput((rcvr + BaseHeaderSize) + (((index >> 1)) - 1), valToPut);
-								goto l95;
+								goto l96;
 							}
 						}
-						GIV(primFailCode) = PrimErrBadIndex;
-					l95:	/* end commonVariable:at:put:cacheIndex: */;
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						GIV(primFailCode) = reasonCode;
+					l96:	/* end commonVariable:at:put:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
 						/* begin fetchNextBytecode */
@@ -12235,6 +12245,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     char *sp;
     char *sp1;
     sqInt stSize;
@@ -12329,7 +12340,11 @@
 					goto l1;
 				}
 			}
-			GIV(primFailCode) = PrimErrBadIndex;
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			GIV(primFailCode) = reasonCode;
 		l1:	/* end commonVariable:at:put:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -12369,6 +12384,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     sqInt result;
     sqInt result1;
     char *sp;
@@ -12439,7 +12455,11 @@
 					goto l1;
 				}
 			}
-			result = (GIV(primFailCode) = PrimErrBadIndex);
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			result = (GIV(primFailCode) = reasonCode);
 		l1:	/* end commonVariable:at:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -42600,6 +42620,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -42695,10 +42716,12 @@
 			return (((byteAt((array + BaseHeaderSize) + ((index + fixedFields) - 1))) << 1) | 1);
 		}
 	}
-	else {
-		GIV(primFailCode) = PrimErrBadIndex;
-		return 0;
-	}
+	/* begin primitiveFailFor: */
+	reasonCode = (fmt <= 1
+		? PrimErrBadReceiver
+		: PrimErrBadIndex);
+	GIV(primFailCode) = reasonCode;
+	return 0;
 }
 
 
@@ -42713,6 +42736,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -42850,7 +42874,11 @@
 		}
 	}
 	else {
-		GIV(primFailCode) = PrimErrBadIndex;
+		/* begin primitiveFailFor: */
+		reasonCode = (fmt <= 1
+			? PrimErrBadReceiver
+			: PrimErrBadIndex);
+		GIV(primFailCode) = reasonCode;
 	}
 }
 

Modified: branches/Cog/src/vm/gcc3x-cointerpmt.c
===================================================================
--- branches/Cog/src/vm/gcc3x-cointerpmt.c	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/src/vm/gcc3x-cointerpmt.c	2011-11-07 18:28:00 UTC (rev 2506)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
    from
-	CoInterpreterMT VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CoInterpreterMT VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1991,7 +1991,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.134]";
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.136]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 sqInt willNotThreadWarnCount;
@@ -7747,6 +7747,7 @@
 				sqInt fmt;
 				sqInt result1;
 				sqInt stSize;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAt);
 								index = longAtPointer(localSP);
@@ -7818,7 +7819,11 @@
 								goto l93;
 							}
 						}
-						result = (GIV(primFailCode) = PrimErrBadIndex);
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						result = (GIV(primFailCode) = reasonCode);
 					l93:	/* end commonVariable:at:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
@@ -7845,11 +7850,12 @@
 				sqInt index;
 				sqInt rcvr;
 				sqInt value;
+				sqInt ccIndex;
 				sqInt fixedFields;
 				sqInt fmt;
 				sqInt stSize;
 				sqInt valToPut;
-				sqInt ccIndex;
+				sqInt reasonCode;
 
 				VM_LABEL(0bytecodePrimAtPut);
 								value = longAtPointer(localSP);
@@ -7865,13 +7871,13 @@
 						/* begin fetchClassOfNonInt: */
 						if (((ccIndex = (((usqInt) (longAt(rcvr))) >> 12) & 31)) == 0) {
 							GIV(lkupClass) = (longAt(rcvr - BaseHeaderSize)) & AllButTypeMask;
-							goto l96;
+							goto l95;
 						}
 						else {
 							GIV(lkupClass) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (CompactClasses << ShiftForWord))) + BaseHeaderSize) + ((ccIndex - 1) << ShiftForWord));
-							goto l96;
+							goto l95;
 						}
-					l96:	/* end fetchClassOfNonInt: */;
+					l95:	/* end fetchClassOfNonInt: */;
 						GIV(messageSelector) = longAt(((longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (SpecialSelectors << ShiftForWord))) + BaseHeaderSize) + ((17 * 2) << ShiftForWord));
 						if (!(lookupInMethodCacheSelclass(GIV(messageSelector), GIV(lkupClass)))) {
 							GIV(argumentCount) = 2;
@@ -7907,7 +7913,7 @@
 									possibleRootStoreIntovalue(rcvr, value);
 								}
 								longAtput((rcvr + BaseHeaderSize) + (((((index >> 1)) + fixedFields) - 1) << ShiftForWord), value);
-								goto l95;
+								goto l96;
 							}
 							if (fmt < 8) {
 
@@ -7917,7 +7923,7 @@
 								if (!GIV(primFailCode)) {
 									long32Atput((rcvr + BaseHeaderSize) + ((((index >> 1)) - 1) << 2), valToPut);
 								}
-								goto l95;
+								goto l96;
 							}
 							if (fmt >= 16) {
 
@@ -7925,7 +7931,7 @@
 
 								valToPut = asciiOfCharacter(value);
 								if (!(!GIV(primFailCode))) {
-									goto l95;
+									goto l96;
 								}
 							}
 							else {
@@ -7939,14 +7945,18 @@
 									if (!GIV(primFailCode)) {
 										GIV(primFailCode) = 1;
 									}
-									goto l95;
+									goto l96;
 								}
 								byteAtput((rcvr + BaseHeaderSize) + (((index >> 1)) - 1), valToPut);
-								goto l95;
+								goto l96;
 							}
 						}
-						GIV(primFailCode) = PrimErrBadIndex;
-					l95:	/* end commonVariable:at:put:cacheIndex: */;
+						/* begin primitiveFailFor: */
+						reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+							? PrimErrBadReceiver
+							: PrimErrBadIndex);
+						GIV(primFailCode) = reasonCode;
+					l96:	/* end commonVariable:at:put:cacheIndex: */;
 					}
 					if (!GIV(primFailCode)) {
 						/* begin fetchNextBytecode */
@@ -12651,6 +12661,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     char *sp;
     char *sp1;
     sqInt stSize;
@@ -12745,7 +12756,11 @@
 					goto l1;
 				}
 			}
-			GIV(primFailCode) = PrimErrBadIndex;
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			GIV(primFailCode) = reasonCode;
 		l1:	/* end commonVariable:at:put:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -12785,6 +12800,7 @@
     sqInt fmt;
     sqInt index;
     sqInt rcvr;
+    sqInt reasonCode;
     sqInt result;
     sqInt result1;
     char *sp;
@@ -12855,7 +12871,11 @@
 					goto l1;
 				}
 			}
-			result = (GIV(primFailCode) = PrimErrBadIndex);
+			/* begin primitiveFailFor: */
+			reasonCode = (((((usqInt) (longAt(rcvr))) >> 8) & 15) <= 1
+				? PrimErrBadReceiver
+				: PrimErrBadIndex);
+			result = (GIV(primFailCode) = reasonCode);
 		l1:	/* end commonVariable:at:cacheIndex: */;
 		}
 		if (!GIV(primFailCode)) {
@@ -44098,6 +44118,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -44193,10 +44214,12 @@
 			return (((byteAt((array + BaseHeaderSize) + ((index + fixedFields) - 1))) << 1) | 1);
 		}
 	}
-	else {
-		GIV(primFailCode) = PrimErrBadIndex;
-		return 0;
-	}
+	/* begin primitiveFailFor: */
+	reasonCode = (fmt <= 1
+		? PrimErrBadReceiver
+		: PrimErrBadIndex);
+	GIV(primFailCode) = reasonCode;
+	return 0;
 }
 
 
@@ -44211,6 +44234,7 @@
     sqInt fixedFields;
     sqInt fmt;
     sqInt hdr;
+    sqInt reasonCode;
     sqInt sp;
     sqInt sp1;
     sqInt stSize;
@@ -44348,7 +44372,11 @@
 		}
 	}
 	else {
-		GIV(primFailCode) = PrimErrBadIndex;
+		/* begin primitiveFailFor: */
+		reasonCode = (fmt <= 1
+			? PrimErrBadReceiver
+			: PrimErrBadIndex);
+		GIV(primFailCode) = reasonCode;
 	}
 }
 

Modified: branches/Cog/src/vm/interp.h
===================================================================
--- branches/Cog/src/vm/interp.h	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/src/vm/interp.h	2011-11-07 18:28:00 UTC (rev 2506)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/src/vm/vmCallback.h
===================================================================
--- branches/Cog/src/vm/vmCallback.h	2011-10-31 01:32:54 UTC (rev 2505)
+++ branches/Cog/src/vm/vmCallback.h	2011-11-07 18:28:00 UTC (rev 2506)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.134 uuid: a0d46c48-3d9a-43f9-a769-51f31ce120e9
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.136 uuid: c62e0f35-616c-4547-b4e7-46765111b6a9
  */
 
 #define VM_CALLBACK_INC 1



More information about the Vm-dev mailing list