[Vm-dev] [commit][2773] CogVM source as per VMMaker.oscog-eem.328.

commits at squeakvm.org commits at squeakvm.org
Sat Aug 17 21:49:11 UTC 2013


Revision: 2773
Author:   eliot
Date:     2013-08-17 14:49:08 -0700 (Sat, 17 Aug 2013)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.328.

Fix StackToRegisterMappingCogit>>genPrimitiveClass for case where
numArgs > 0 (must use other than ReceiverResultReg, e.g. objectClass:).

Improve register usage in genSpecialSelectorClass.

Save & restore methodOrBlockNumTemps in compileBlockBodies for symmetry
with needsFrame & methodOrBlockNumArgs.

Slang: fix formatting of WhileForeverBreakIf loops.

Tweak startPCOrNilOfLiteral:in: to filter-out arrays from its
check for closure literals.

Modified Paths:
--------------
    branches/Cog/nscogsrc/vm/cogit.c
    branches/Cog/nscogsrc/vm/cogit.h
    branches/Cog/nscogsrc/vm/cogmethod.h
    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/src/vm/cogit.c
    branches/Cog/src/vm/cogit.h
    branches/Cog/src/vm/cogmethod.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

Property Changed:
----------------
    branches/Cog/platforms/Cross/vm/sqSCCSVersion.h

Modified: branches/Cog/nscogsrc/vm/cogit.c
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.c	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/nscogsrc/vm/cogit.c	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.322 uuid: 15da84de-4866-48ae-b478-c2c96002c5eb
+	CCodeGenerator VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.322 uuid: 15da84de-4866-48ae-b478-c2c96002c5eb
+	StackToRegisterMappingCogit VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.322 uuid: 15da84de-4866-48ae-b478-c2c96002c5eb " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -2114,7 +2114,7 @@
 
 	if (blockCount > 0) {
 		i = blockCount - 1;
-			while (1) {
+		while (1) {
 
 			/* check for repeat addition during recompilation due to initialNil miscount. */
 
@@ -3890,10 +3890,12 @@
     sqInt result;
     sqInt savedNeedsFrame;
     sqInt savedNumArgs;
+    sqInt savedNumTemps;
 
 	assert(blockCount > 0);
 	savedNeedsFrame = needsFrame;
 	savedNumArgs = methodOrBlockNumArgs;
+	savedNumTemps = methodOrBlockNumTemps;
 	inBlock = 1;
 	compiledBlocksCount = 0;
 	while (compiledBlocksCount < blockCount) {
@@ -3901,7 +3903,7 @@
 		scanBlock(blockStart);
 		initialOpcodeIndex = opcodeIndex;
 		initialAnnotationIndex = annotationIndex;
-			while (1) {
+		while (1) {
 			compileBlockEntry(blockStart);
 			initialStackPtr = simStackPtr;
 			if (((result = compileAbstractInstructionsFromthrough(((blockStart->startpc)) + ((pushNilSizeFunction(methodObj)) * ((blockStart->numInitialNils))), (((blockStart->startpc)) + ((blockStart->span))) - 1))) < 0) {
@@ -3921,6 +3923,7 @@
 	}
 	needsFrame = savedNeedsFrame;
 	methodOrBlockNumArgs = savedNumArgs;
+	methodOrBlockNumTemps = savedNumTemps;
 	return 0;
 }
 
@@ -11352,10 +11355,28 @@
 	return 0;
 }
 
+
+/*	Depending on argument count the argument is either
+	0 args: ReceiverResultReg
+	1 args: Arg0Reg
+	N args: top of stack (assuming 1 reg arg for now) */
+
 static sqInt
 genPrimitiveClass(void)
 {
-	genGetClassObjectOfintoscratchReg(ReceiverResultReg, ReceiverResultReg, TempReg);
+    sqInt reg;
+
+	if (methodOrBlockNumArgs == 1) {
+		reg = Arg0Reg;
+	}
+	else {
+		if (methodOrBlockNumArgs > 0) {
+			/* begin MoveMw:r:R: */
+			genoperandoperandoperand(MoveMwrR, BytesPerWord, SPReg, ReceiverResultReg);
+		}
+		reg = ReceiverResultReg;
+	}
+	genGetClassObjectOfintoscratchReg(reg, ReceiverResultReg, TempReg);
 	/* begin RetN: */
 	genoperand(RetN, 0);
 	return 0;
@@ -12109,7 +12130,7 @@
 
 	/* N.B. Do _not_ use ReceiverResultReg to avoid overwriting receiver in assignment in frameless methods. */
 	/* So far descriptors are not rich enough to describe the entire dereference so generate the register
-	   load but don't push the result.  There is an order-or-evaluation issue if we defer the dereference. */
+	   load but don't push the result.  There is an order-of-evaluation issue if we defer the dereference. */
 
 	association = getLiteral(literalIndex);
 	annotateobjRef(gMoveCwR(association, TempReg), association);
@@ -12991,11 +13012,20 @@
 static sqInt
 genSpecialSelectorClass(void)
 {
+    sqInt topReg;
+
+	topReg = registerOrNil(ssTop());
 	ssPop(1);
-	ssAllocateRequiredRegand(SendNumArgsReg, ClassReg);
+	if ((topReg == null)
+	 || (topReg == ClassReg)) {
+		ssAllocateRequiredRegand((topReg = SendNumArgsReg), ClassReg);
+	}
+	else {
+		ssAllocateRequiredReg(ClassReg);
+	}
 	ssPush(1);
-	popToReg(ssTop(), SendNumArgsReg);
-	genGetClassObjectOfintoscratchReg(SendNumArgsReg, ClassReg, TempReg);
+	popToReg(ssTop(), topReg);
+	genGetClassObjectOfintoscratchReg(topReg, ClassReg, TempReg);
 	return (ssPop(1),
 	ssPushRegister(ClassReg));
 }
@@ -14925,7 +14955,7 @@
 					? AltNSSendIsPCAnnotated
 					: NSSendIsPCAnnotated)))
 							 || (annotation == HasBytecodePC))) {
-							while (1) {
+				while (1) {
 					byte = (fetchByteofObject(bcpc, aMethodObj)) + bsOffset;
 					descriptor = generatorAt(byte);
 					if (isInBlock) {

Modified: branches/Cog/nscogsrc/vm/cogit.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/nscogsrc/vm/cogit.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.322 uuid: 15da84de-4866-48ae-b478-c2c96002c5eb
+	CCodeGenerator VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 

Modified: branches/Cog/nscogsrc/vm/cogmethod.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogmethod.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/nscogsrc/vm/cogmethod.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.322 uuid: 15da84de-4866-48ae-b478-c2c96002c5eb
+	CCodeGenerator VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 typedef struct {

Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/nscogsrc/vm/cointerp.c	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
    from
-	CoInterpreter VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1993,7 +1993,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.321";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.328";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -15220,7 +15220,7 @@
 		currentCtx = callerContextOrNil2;
 		assert(isContext(currentCtx));
 		freeStackPage(GIV(stackPage));
-			while (1) {
+		while (1) {
 			assert(isContext(currentCtx));
 			if ((((longAt((currentCtx + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1))
  && ((stackPageFor((theFP = frameOfMarriedContext(currentCtx)))) == newPage)) break;
@@ -17161,7 +17161,7 @@
 			if (!(thePage == GIV(stackPage))) {
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				frameRcvrOffset = ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
 					? theFP + FoxMFReceiver
 					: theFP + FoxIFReceiver);
@@ -23262,7 +23262,7 @@
 		VM_LABEL(0nextImplicitReceiverForwithMixin);
 		implicitReceiver = longAt((mixinApplication + BaseHeaderSize) + (EnclosingObjectIndex << ShiftForWord));
 		targetMixin = longAt((theMixin + BaseHeaderSize) + (EnclosingMixinIndex << ShiftForWord));
-			while (1) {
+		while (1) {
 			if (targetMixin == GIV(nilObj)) {
 
 				/* or: [implicitReceiver = objectMemory nilObject] */
@@ -27188,7 +27188,7 @@
 				theIPPtr = theSP;
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				assert(addressIsInPage(thePage, theFP));
 				assert(addressIsInPage(thePage, theSP));
 				assert((theIPPtr == 0)
@@ -27806,7 +27806,7 @@
 		if (action == StartField) {
 			/* begin startField */
 			VM_LABEL(0startField);
-					while (1) {
+			while (1) {
 				child = longAt(field);
 				if (!((child & 1))) break;
 
@@ -43156,7 +43156,7 @@
 	}
 	else {
 		tempLink = firstLink;
-			while (1) {
+		while (1) {
 			if (tempLink == GIV(nilObj)) {
 				/* begin success: */
 				if (!0) {
@@ -45833,7 +45833,7 @@
 					: theSP1 + BytesPerWord);
 				goto l1;
 			}
-					while (1) {
+			while (1) {
 				/* begin frameCallerSP: */
 				assert(!(isBaseFrame(aFrame)));
 				theSP1 = (aFrame + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(aFrame + FoxMethod)))) < (startOfMemory())
@@ -51127,6 +51127,9 @@
 	if ((lastPointerOf(lit)) <= ClosureCopiedValuesIndex) {
 		return null;
 	}
+	if (((((usqInt) (longAt(lit))) >> 8) & 15) == 2) {
+		return null;
+	}
 	outerContext = longAt((lit + BaseHeaderSize) + (ClosureOuterContextIndex << ShiftForWord));
 	if (!(((outerContext & 1) == 0)
 		 && (((((usqInt) (longAt(outerContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {
@@ -53045,7 +53048,7 @@
 		if (!(isFree(thePage))) {
 			theIPPtr = (thePage->headSP);
 			theFP = (thePage->headFP);
-					while (1) {
+			while (1) {
 				if ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())) {
 					theMethodField = longAt(theFP + FoxMethod);
 					theFlags = theMethodField & MFMethodFlagsMask;

Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/nscogsrc/vm/cointerp.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 

Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2013-08-17 21:49:08 UTC (rev 2773)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
    from
-	CoInterpreter VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1996,7 +1996,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.321";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.328";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -15229,7 +15229,7 @@
 		currentCtx = callerContextOrNil2;
 		assert(isContext(currentCtx));
 		freeStackPage(GIV(stackPage));
-			while (1) {
+		while (1) {
 			assert(isContext(currentCtx));
 			if ((((longAt((currentCtx + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1))
  && ((stackPageFor((theFP = frameOfMarriedContext(currentCtx)))) == newPage)) break;
@@ -17170,7 +17170,7 @@
 			if (!(thePage == GIV(stackPage))) {
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				frameRcvrOffset = ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
 					? theFP + FoxMFReceiver
 					: theFP + FoxIFReceiver);
@@ -23271,7 +23271,7 @@
 		VM_LABEL(0nextImplicitReceiverForwithMixin);
 		implicitReceiver = longAt((mixinApplication + BaseHeaderSize) + (EnclosingObjectIndex << ShiftForWord));
 		targetMixin = longAt((theMixin + BaseHeaderSize) + (EnclosingMixinIndex << ShiftForWord));
-			while (1) {
+		while (1) {
 			if (targetMixin == GIV(nilObj)) {
 
 				/* or: [implicitReceiver = objectMemory nilObject] */
@@ -27197,7 +27197,7 @@
 				theIPPtr = theSP;
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				assert(addressIsInPage(thePage, theFP));
 				assert(addressIsInPage(thePage, theSP));
 				assert((theIPPtr == 0)
@@ -27815,7 +27815,7 @@
 		if (action == StartField) {
 			/* begin startField */
 			VM_LABEL(0startField);
-					while (1) {
+			while (1) {
 				child = longAt(field);
 				if (!((child & 1))) break;
 
@@ -43165,7 +43165,7 @@
 	}
 	else {
 		tempLink = firstLink;
-			while (1) {
+		while (1) {
 			if (tempLink == GIV(nilObj)) {
 				/* begin success: */
 				if (!0) {
@@ -45842,7 +45842,7 @@
 					: theSP1 + BytesPerWord);
 				goto l1;
 			}
-					while (1) {
+			while (1) {
 				/* begin frameCallerSP: */
 				assert(!(isBaseFrame(aFrame)));
 				theSP1 = (aFrame + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(aFrame + FoxMethod)))) < (startOfMemory())
@@ -51136,6 +51136,9 @@
 	if ((lastPointerOf(lit)) <= ClosureCopiedValuesIndex) {
 		return null;
 	}
+	if (((((usqInt) (longAt(lit))) >> 8) & 15) == 2) {
+		return null;
+	}
 	outerContext = longAt((lit + BaseHeaderSize) + (ClosureOuterContextIndex << ShiftForWord));
 	if (!(((outerContext & 1) == 0)
 		 && (((((usqInt) (longAt(outerContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {
@@ -53054,7 +53057,7 @@
 		if (!(isFree(thePage))) {
 			theIPPtr = (thePage->headSP);
 			theFP = (thePage->headFP);
-					while (1) {
+			while (1) {
 				if ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())) {
 					theMethodField = longAt(theFP + FoxMethod);
 					theFlags = theMethodField & MFMethodFlagsMask;

Modified: branches/Cog/nscogsrc/vm/interp.h
===================================================================
--- branches/Cog/nscogsrc/vm/interp.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/nscogsrc/vm/interp.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/nscogsrc/vm/vmCallback.h
===================================================================
--- branches/Cog/nscogsrc/vm/vmCallback.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/nscogsrc/vm/vmCallback.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 #define VM_CALLBACK_INC 1


Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
   - Thu Aug 15 11:54:48 PDT 2013
   + Sat Aug 17 14:48:34 PDT 2013

Modified: branches/Cog/src/vm/cogit.c
===================================================================
--- branches/Cog/src/vm/cogit.c	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/cogit.c	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.322 uuid: 15da84de-4866-48ae-b478-c2c96002c5eb
+	CCodeGenerator VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.322 uuid: 15da84de-4866-48ae-b478-c2c96002c5eb
+	StackToRegisterMappingCogit VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.322 uuid: 15da84de-4866-48ae-b478-c2c96002c5eb " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -1801,7 +1801,7 @@
 
 	if (blockCount > 0) {
 		i = blockCount - 1;
-			while (1) {
+		while (1) {
 
 			/* check for repeat addition during recompilation due to initialNil miscount. */
 
@@ -3473,10 +3473,12 @@
     sqInt result;
     sqInt savedNeedsFrame;
     sqInt savedNumArgs;
+    sqInt savedNumTemps;
 
 	assert(blockCount > 0);
 	savedNeedsFrame = needsFrame;
 	savedNumArgs = methodOrBlockNumArgs;
+	savedNumTemps = methodOrBlockNumTemps;
 	inBlock = 1;
 	compiledBlocksCount = 0;
 	while (compiledBlocksCount < blockCount) {
@@ -3484,7 +3486,7 @@
 		scanBlock(blockStart);
 		initialOpcodeIndex = opcodeIndex;
 		initialAnnotationIndex = annotationIndex;
-			while (1) {
+		while (1) {
 			compileBlockEntry(blockStart);
 			initialStackPtr = simStackPtr;
 			if (((result = compileAbstractInstructionsFromthrough(((blockStart->startpc)) + ((pushNilSizeFunction(methodObj)) * ((blockStart->numInitialNils))), (((blockStart->startpc)) + ((blockStart->span))) - 1))) < 0) {
@@ -3504,6 +3506,7 @@
 	}
 	needsFrame = savedNeedsFrame;
 	methodOrBlockNumArgs = savedNumArgs;
+	methodOrBlockNumTemps = savedNumTemps;
 	return 0;
 }
 
@@ -10374,10 +10377,28 @@
 	return 0;
 }
 
+
+/*	Depending on argument count the argument is either
+	0 args: ReceiverResultReg
+	1 args: Arg0Reg
+	N args: top of stack (assuming 1 reg arg for now) */
+
 static sqInt
 genPrimitiveClass(void)
 {
-	genGetClassObjectOfintoscratchReg(ReceiverResultReg, ReceiverResultReg, TempReg);
+    sqInt reg;
+
+	if (methodOrBlockNumArgs == 1) {
+		reg = Arg0Reg;
+	}
+	else {
+		if (methodOrBlockNumArgs > 0) {
+			/* begin MoveMw:r:R: */
+			genoperandoperandoperand(MoveMwrR, BytesPerWord, SPReg, ReceiverResultReg);
+		}
+		reg = ReceiverResultReg;
+	}
+	genGetClassObjectOfintoscratchReg(reg, ReceiverResultReg, TempReg);
 	/* begin RetN: */
 	genoperand(RetN, 0);
 	return 0;
@@ -11064,7 +11085,7 @@
 
 	/* N.B. Do _not_ use ReceiverResultReg to avoid overwriting receiver in assignment in frameless methods. */
 	/* So far descriptors are not rich enough to describe the entire dereference so generate the register
-	   load but don't push the result.  There is an order-or-evaluation issue if we defer the dereference. */
+	   load but don't push the result.  There is an order-of-evaluation issue if we defer the dereference. */
 
 	association = getLiteral(literalIndex);
 	annotateobjRef(gMoveCwR(association, TempReg), association);
@@ -11877,11 +11898,20 @@
 static sqInt
 genSpecialSelectorClass(void)
 {
+    sqInt topReg;
+
+	topReg = registerOrNil(ssTop());
 	ssPop(1);
-	ssAllocateRequiredRegand(SendNumArgsReg, ClassReg);
+	if ((topReg == null)
+	 || (topReg == ClassReg)) {
+		ssAllocateRequiredRegand((topReg = SendNumArgsReg), ClassReg);
+	}
+	else {
+		ssAllocateRequiredReg(ClassReg);
+	}
 	ssPush(1);
-	popToReg(ssTop(), SendNumArgsReg);
-	genGetClassObjectOfintoscratchReg(SendNumArgsReg, ClassReg, TempReg);
+	popToReg(ssTop(), topReg);
+	genGetClassObjectOfintoscratchReg(topReg, ClassReg, TempReg);
 	return (ssPop(1),
 	ssPushRegister(ClassReg));
 }
@@ -13784,7 +13814,7 @@
 			mcpc += mapByte & DisplacementMask;
 			if ((annotation == IsSendCall)
 							 || (annotation == HasBytecodePC)) {
-							while (1) {
+				while (1) {
 					byte = (fetchByteofObject(bcpc, aMethodObj)) + bsOffset;
 					descriptor = generatorAt(byte);
 					if (isInBlock) {

Modified: branches/Cog/src/vm/cogit.h
===================================================================
--- branches/Cog/src/vm/cogit.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/cogit.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.322 uuid: 15da84de-4866-48ae-b478-c2c96002c5eb
+	CCodeGenerator VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 

Modified: branches/Cog/src/vm/cogmethod.h
===================================================================
--- branches/Cog/src/vm/cogmethod.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/cogmethod.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.322 uuid: 15da84de-4866-48ae-b478-c2c96002c5eb
+	CCodeGenerator VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 typedef struct {

Modified: branches/Cog/src/vm/cointerp.c
===================================================================
--- branches/Cog/src/vm/cointerp.c	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/cointerp.c	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
    from
-	CoInterpreter VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1983,7 +1983,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.321]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.328]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -11154,7 +11154,7 @@
 		currentCtx = callerContextOrNil2;
 		assert(isContext(currentCtx));
 		freeStackPage(GIV(stackPage));
-			while (1) {
+		while (1) {
 			assert(isContext(currentCtx));
 			if ((((longAt((currentCtx + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1))
  && ((stackPageFor((theFP = frameOfMarriedContext(currentCtx)))) == newPage)) break;
@@ -13086,7 +13086,7 @@
 			if (!(thePage == GIV(stackPage))) {
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				frameRcvrOffset = ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
 					? theFP + FoxMFReceiver
 					: theFP + FoxIFReceiver);
@@ -22780,7 +22780,7 @@
 				theIPPtr = theSP;
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				assert(addressIsInPage(thePage, theFP));
 				assert(addressIsInPage(thePage, theSP));
 				assert((theIPPtr == 0)
@@ -23396,7 +23396,7 @@
 		if (action == StartField) {
 			/* begin startField */
 			VM_LABEL(0startField);
-					while (1) {
+			while (1) {
 				child = longAt(field);
 				if (!((child & 1))) break;
 
@@ -38643,7 +38643,7 @@
 	}
 	else {
 		tempLink = firstLink;
-			while (1) {
+		while (1) {
 			if (tempLink == GIV(nilObj)) {
 				/* begin success: */
 				if (!0) {
@@ -41315,7 +41315,7 @@
 					: theSP1 + BytesPerWord);
 				goto l1;
 			}
-					while (1) {
+			while (1) {
 				/* begin frameCallerSP: */
 				assert(!(isBaseFrame(aFrame)));
 				theSP1 = (aFrame + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(aFrame + FoxMethod)))) < (startOfMemory())
@@ -46560,6 +46560,9 @@
 	if ((lastPointerOf(lit)) <= ClosureCopiedValuesIndex) {
 		return null;
 	}
+	if (((((usqInt) (longAt(lit))) >> 8) & 15) == 2) {
+		return null;
+	}
 	outerContext = longAt((lit + BaseHeaderSize) + (ClosureOuterContextIndex << ShiftForWord));
 	if (!(((outerContext & 1) == 0)
 		 && (((((usqInt) (longAt(outerContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {
@@ -48471,7 +48474,7 @@
 		if (!(isFree(thePage))) {
 			theIPPtr = (thePage->headSP);
 			theFP = (thePage->headFP);
-					while (1) {
+			while (1) {
 				if ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())) {
 					theMethodField = longAt(theFP + FoxMethod);
 					theFlags = theMethodField & MFMethodFlagsMask;

Modified: branches/Cog/src/vm/cointerp.h
===================================================================
--- branches/Cog/src/vm/cointerp.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/cointerp.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 

Modified: branches/Cog/src/vm/cointerpmt.c
===================================================================
--- branches/Cog/src/vm/cointerpmt.c	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/cointerpmt.c	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
    from
-	CoInterpreterMT VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CoInterpreterMT VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -2082,7 +2082,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.321]";
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.328]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 sqInt willNotThreadWarnCount;
@@ -11493,7 +11493,7 @@
 		currentCtx = callerContextOrNil2;
 		assert(isContext(currentCtx));
 		freeStackPage(GIV(stackPage));
-			while (1) {
+		while (1) {
 			assert(isContext(currentCtx));
 			if ((((longAt((currentCtx + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1))
  && ((stackPageFor((theFP = frameOfMarriedContext(currentCtx)))) == newPage)) break;
@@ -13438,7 +13438,7 @@
 			if (!(thePage == GIV(stackPage))) {
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				frameRcvrOffset = ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
 					? theFP + FoxMFReceiver
 					: theFP + FoxIFReceiver);
@@ -23579,7 +23579,7 @@
 				theIPPtr = theSP;
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				assert(addressIsInPage(thePage, theFP));
 				assert(addressIsInPage(thePage, theSP));
 				assert((theIPPtr == 0)
@@ -24212,7 +24212,7 @@
 		if (action == StartField) {
 			/* begin startField */
 			VM_LABEL(0startField);
-					while (1) {
+			while (1) {
 				child = longAt(field);
 				if (!((child & 1))) break;
 
@@ -40002,7 +40002,7 @@
 	}
 	else {
 		tempLink = firstLink;
-			while (1) {
+		while (1) {
 			if (tempLink == GIV(nilObj)) {
 				/* begin success: */
 				if (!0) {
@@ -42692,7 +42692,7 @@
 					: theSP1 + BytesPerWord);
 				goto l1;
 			}
-					while (1) {
+			while (1) {
 				/* begin frameCallerSP: */
 				assert(!(isBaseFrame(aFrame)));
 				theSP1 = (aFrame + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(aFrame + FoxMethod)))) < (startOfMemory())
@@ -48038,6 +48038,9 @@
 	if ((lastPointerOf(lit)) <= ClosureCopiedValuesIndex) {
 		return null;
 	}
+	if (((((usqInt) (longAt(lit))) >> 8) & 15) == 2) {
+		return null;
+	}
 	outerContext = longAt((lit + BaseHeaderSize) + (ClosureOuterContextIndex << ShiftForWord));
 	if (!(((outerContext & 1) == 0)
 		 && (((((usqInt) (longAt(outerContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {
@@ -50220,7 +50223,7 @@
 		if (!(isFree(thePage))) {
 			theIPPtr = (thePage->headSP);
 			theFP = (thePage->headFP);
-					while (1) {
+			while (1) {
 				if ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())) {
 					theMethodField = longAt(theFP + FoxMethod);
 					theFlags = theMethodField & MFMethodFlagsMask;

Modified: branches/Cog/src/vm/cointerpmt.h
===================================================================
--- branches/Cog/src/vm/cointerpmt.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/cointerpmt.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 

Modified: branches/Cog/src/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/src/vm/gcc3x-cointerp.c	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/gcc3x-cointerp.c	2013-08-17 21:49:08 UTC (rev 2773)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
    from
-	CoInterpreter VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1986,7 +1986,7 @@
 	/* 575 */ (void (*)(void))0,
  0 };
 static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void);
-const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.321]";
+const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.328]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 
@@ -11163,7 +11163,7 @@
 		currentCtx = callerContextOrNil2;
 		assert(isContext(currentCtx));
 		freeStackPage(GIV(stackPage));
-			while (1) {
+		while (1) {
 			assert(isContext(currentCtx));
 			if ((((longAt((currentCtx + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1))
  && ((stackPageFor((theFP = frameOfMarriedContext(currentCtx)))) == newPage)) break;
@@ -13095,7 +13095,7 @@
 			if (!(thePage == GIV(stackPage))) {
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				frameRcvrOffset = ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
 					? theFP + FoxMFReceiver
 					: theFP + FoxIFReceiver);
@@ -22789,7 +22789,7 @@
 				theIPPtr = theSP;
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				assert(addressIsInPage(thePage, theFP));
 				assert(addressIsInPage(thePage, theSP));
 				assert((theIPPtr == 0)
@@ -23405,7 +23405,7 @@
 		if (action == StartField) {
 			/* begin startField */
 			VM_LABEL(0startField);
-					while (1) {
+			while (1) {
 				child = longAt(field);
 				if (!((child & 1))) break;
 
@@ -38652,7 +38652,7 @@
 	}
 	else {
 		tempLink = firstLink;
-			while (1) {
+		while (1) {
 			if (tempLink == GIV(nilObj)) {
 				/* begin success: */
 				if (!0) {
@@ -41324,7 +41324,7 @@
 					: theSP1 + BytesPerWord);
 				goto l1;
 			}
-					while (1) {
+			while (1) {
 				/* begin frameCallerSP: */
 				assert(!(isBaseFrame(aFrame)));
 				theSP1 = (aFrame + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(aFrame + FoxMethod)))) < (startOfMemory())
@@ -46569,6 +46569,9 @@
 	if ((lastPointerOf(lit)) <= ClosureCopiedValuesIndex) {
 		return null;
 	}
+	if (((((usqInt) (longAt(lit))) >> 8) & 15) == 2) {
+		return null;
+	}
 	outerContext = longAt((lit + BaseHeaderSize) + (ClosureOuterContextIndex << ShiftForWord));
 	if (!(((outerContext & 1) == 0)
 		 && (((((usqInt) (longAt(outerContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {
@@ -48480,7 +48483,7 @@
 		if (!(isFree(thePage))) {
 			theIPPtr = (thePage->headSP);
 			theFP = (thePage->headFP);
-					while (1) {
+			while (1) {
 				if ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())) {
 					theMethodField = longAt(theFP + FoxMethod);
 					theFlags = theMethodField & MFMethodFlagsMask;

Modified: branches/Cog/src/vm/gcc3x-cointerpmt.c
===================================================================
--- branches/Cog/src/vm/gcc3x-cointerpmt.c	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/gcc3x-cointerpmt.c	2013-08-17 21:49:08 UTC (rev 2773)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
    from
-	CoInterpreterMT VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CoInterpreterMT VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
-static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -2085,7 +2085,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.321]";
+const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.328]";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */;
 volatile int sendTrace;
 sqInt willNotThreadWarnCount;
@@ -11502,7 +11502,7 @@
 		currentCtx = callerContextOrNil2;
 		assert(isContext(currentCtx));
 		freeStackPage(GIV(stackPage));
-			while (1) {
+		while (1) {
 			assert(isContext(currentCtx));
 			if ((((longAt((currentCtx + BaseHeaderSize) + (SenderIndex << ShiftForWord))) & 1))
  && ((stackPageFor((theFP = frameOfMarriedContext(currentCtx)))) == newPage)) break;
@@ -13447,7 +13447,7 @@
 			if (!(thePage == GIV(stackPage))) {
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				frameRcvrOffset = ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
 					? theFP + FoxMFReceiver
 					: theFP + FoxIFReceiver);
@@ -23588,7 +23588,7 @@
 				theIPPtr = theSP;
 				theSP += BytesPerWord;
 			}
-					while (1) {
+			while (1) {
 				assert(addressIsInPage(thePage, theFP));
 				assert(addressIsInPage(thePage, theSP));
 				assert((theIPPtr == 0)
@@ -24221,7 +24221,7 @@
 		if (action == StartField) {
 			/* begin startField */
 			VM_LABEL(0startField);
-					while (1) {
+			while (1) {
 				child = longAt(field);
 				if (!((child & 1))) break;
 
@@ -40011,7 +40011,7 @@
 	}
 	else {
 		tempLink = firstLink;
-			while (1) {
+		while (1) {
 			if (tempLink == GIV(nilObj)) {
 				/* begin success: */
 				if (!0) {
@@ -42701,7 +42701,7 @@
 					: theSP1 + BytesPerWord);
 				goto l1;
 			}
-					while (1) {
+			while (1) {
 				/* begin frameCallerSP: */
 				assert(!(isBaseFrame(aFrame)));
 				theSP1 = (aFrame + (frameStackedReceiverOffsetNumArgs(((((usqInt)(longAt(aFrame + FoxMethod)))) < (startOfMemory())
@@ -48047,6 +48047,9 @@
 	if ((lastPointerOf(lit)) <= ClosureCopiedValuesIndex) {
 		return null;
 	}
+	if (((((usqInt) (longAt(lit))) >> 8) & 15) == 2) {
+		return null;
+	}
 	outerContext = longAt((lit + BaseHeaderSize) + (ClosureOuterContextIndex << ShiftForWord));
 	if (!(((outerContext & 1) == 0)
 		 && (((((usqInt) (longAt(outerContext))) >> 12) & 31) == ClassMethodContextCompactIndex))) {
@@ -50229,7 +50232,7 @@
 		if (!(isFree(thePage))) {
 			theIPPtr = (thePage->headSP);
 			theFP = (thePage->headFP);
-					while (1) {
+			while (1) {
 				if ((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())) {
 					theMethodField = longAt(theFP + FoxMethod);
 					theFlags = theMethodField & MFMethodFlagsMask;

Modified: branches/Cog/src/vm/interp.h
===================================================================
--- branches/Cog/src/vm/interp.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/interp.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 #define VM_PROXY_MAJOR 1

Modified: branches/Cog/src/vm/vmCallback.h
===================================================================
--- branches/Cog/src/vm/vmCallback.h	2013-08-15 18:55:10 UTC (rev 2772)
+++ branches/Cog/src/vm/vmCallback.h	2013-08-17 21:49:08 UTC (rev 2773)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.321 uuid: 6134e40b-c38c-41ec-8f31-64a7f1c002b3
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.328 uuid: d9a4d11d-3a72-437e-b617-92de227ffdde
  */
 
 #define VM_CALLBACK_INC 1



More information about the Vm-dev mailing list