[Vm-dev] [commit][3566] CogVM source as per VMMaker.oscog-eem.1664

commits at squeakvm.org commits at squeakvm.org
Sat Jan 23 01:47:35 UTC 2016


Revision: 3566
Author:   eliot
Date:     2016-01-22 17:47:33 -0800 (Fri, 22 Jan 2016)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.1664

Slang: The previous fix surfaced a bug with addTypesFor:to:in: where it would
misstate that a recursive method in the process of being typed could not be
typed because the recursive call was as yet undetermined.  The fix is simply to
discount untyped recursive calls, since we're determining precisely that type
and shouldn't abort.

And the type inference algorithm can't cope with mutual recursion, so break the
log jam by explicitly typing findMethodWithPrimitive:FromContext:UpToContext:
which is mutually recursive with findMethodWithPrimitive:FromFP:UpToContext:.

Modified Paths:
--------------
    branches/Cog/nsspur64src/vm/cogit.h
    branches/Cog/nsspur64src/vm/cogitX64.c
    branches/Cog/nsspur64src/vm/cointerp.c
    branches/Cog/nsspur64src/vm/cointerp.h
    branches/Cog/nsspur64src/vm/gcc3x-cointerp.c
    branches/Cog/nsspursrc/vm/cogit.h
    branches/Cog/nsspursrc/vm/cogitARMv5.c
    branches/Cog/nsspursrc/vm/cogitIA32.c
    branches/Cog/nsspursrc/vm/cogitMIPSEL.c
    branches/Cog/nsspursrc/vm/cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.h
    branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspurstack64src/vm/gcc3x-interp.c
    branches/Cog/nsspurstack64src/vm/interp.c
    branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
    branches/Cog/nsspurstacksrc/vm/interp.c
    branches/Cog/spur64src/vm/cogit.h
    branches/Cog/spur64src/vm/cogitX64.c
    branches/Cog/spur64src/vm/cointerp.c
    branches/Cog/spur64src/vm/cointerp.h
    branches/Cog/spur64src/vm/gcc3x-cointerp.c
    branches/Cog/spursistasrc/vm/cogit.h
    branches/Cog/spursistasrc/vm/cogitARMv5.c
    branches/Cog/spursistasrc/vm/cogitIA32.c
    branches/Cog/spursistasrc/vm/cogitMIPSEL.c
    branches/Cog/spursistasrc/vm/cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.h
    branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursrc/vm/cogit.h
    branches/Cog/spursrc/vm/cogitARMv5.c
    branches/Cog/spursrc/vm/cogitIA32.c
    branches/Cog/spursrc/vm/cogitMIPSEL.c
    branches/Cog/spursrc/vm/cointerp.c
    branches/Cog/spursrc/vm/cointerp.h
    branches/Cog/spursrc/vm/gcc3x-cointerp.c
    branches/Cog/spurstack64src/vm/gcc3x-interp.c
    branches/Cog/spurstack64src/vm/interp.c
    branches/Cog/spurstacksrc/vm/gcc3x-interp.c
    branches/Cog/spurstacksrc/vm/interp.c
    branches/Cog/src/vm/cogit.h
    branches/Cog/src/vm/cogitARMv5.c
    branches/Cog/src/vm/cogitIA32.c
    branches/Cog/src/vm/cogitMIPSEL.c
    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/stacksrc/vm/gcc3x-interp.c
    branches/Cog/stacksrc/vm/interp.c

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

Modified: branches/Cog/nsspur64src/vm/cogit.h
===================================================================
--- branches/Cog/nsspur64src/vm/cogit.h	2016-01-23 00:34:50 UTC (rev 3565)
+++ branches/Cog/nsspur64src/vm/cogit.h	2016-01-23 01:47:33 UTC (rev 3566)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5
+	CCodeGenerator VMMaker.oscog-eem.1664 uuid: 9e676eea-f638-4da0-bd70-920a096bda28
  */
 
 
@@ -25,7 +25,7 @@
 extern sqInt bytecodePCForstartBcpcin(sqInt mcpc, sqInt startbcpc, CogBlockMethod *cogMethod);
 extern void callCogCodePopReceiver(void);
 extern void callCogCodePopReceiverAndClassRegs(void);
-extern void ceCPICMissreceiver(CogMethod *cPIC, sqInt receiver);
+extern sqInt ceCPICMissreceiver(CogMethod *cPIC, sqInt receiver);
 extern sqInt ceSICMiss(sqInt receiver);
 extern void checkAssertsEnabledInCogit(void);
 extern sqInt checkIntegrityOfObjectReferencesInCode(sqInt gcModes);

Modified: branches/Cog/nsspur64src/vm/cogitX64.c
===================================================================
--- branches/Cog/nsspur64src/vm/cogitX64.c	2016-01-23 00:34:50 UTC (rev 3565)
+++ branches/Cog/nsspur64src/vm/cogitX64.c	2016-01-23 01:47:33 UTC (rev 3566)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5
+	CCodeGenerator VMMaker.oscog-eem.1663 uuid: a07a8c3d-4a04-48fc-bed8-f189f0494d6d
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5
+	StackToRegisterMappingCogit VMMaker.oscog-eem.1663 uuid: a07a8c3d-4a04-48fc-bed8-f189f0494d6d
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.1663 uuid: a07a8c3d-4a04-48fc-bed8-f189f0494d6d " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -461,7 +461,7 @@
 static AbstractInstruction * NoDbgRegParms gCmpRR(sqInt reg1, sqInt reg2);
 extern void callCogCodePopReceiver(void);
 extern void callCogCodePopReceiverAndClassRegs(void);
-extern void ceCPICMissreceiver(CogMethod *cPIC, sqInt receiver);
+extern sqInt ceCPICMissreceiver(CogMethod *cPIC, sqInt receiver);
 extern sqInt ceSICMiss(sqInt receiver);
 extern void checkAssertsEnabledInCogit(void);
 static sqInt NoDbgRegParms checkIfValidOopRefAndTargetpccogMethod(sqInt annotation, char *mcpc, sqInt cogMethod);
@@ -483,7 +483,7 @@
 extern CogMethod * cogselector(sqInt aMethodObj, sqInt aSelectorOop);
 extern void compactCogCompiledCode(void);
 static AbstractInstruction * compileAbort(void);
-static void NoDbgRegParms compileBlockDispatchFromto(sqInt lowBlockStartIndex, sqInt highBlockStartIndex);
+static sqInt NoDbgRegParms compileBlockDispatchFromto(sqInt lowBlockStartIndex, sqInt highBlockStartIndex);
 static void NoDbgRegParms compileBlockEntry(BlockStart *blockStart);
 static void NoDbgRegParms compileCallFornumArgsargargargargresultRegsaveRegs(void *aRoutine, sqInt numArgs, sqInt regOrConst0, sqInt regOrConst1, sqInt regOrConst2, sqInt regOrConst3, sqInt resultRegOrNone, sqInt saveRegs);
 static AbstractInstruction * compileCPICEntry(void);
@@ -3055,7 +3055,7 @@
 	sp=>	sender return address */
 
 	/* Cogit>>#ceCPICMiss:receiver: */
-void
+sqInt
 ceCPICMissreceiver(CogMethod *cPIC, sqInt receiver)
 {
     sqInt cacheTag;
@@ -3069,8 +3069,7 @@
     sqInt selector;
 
 	if (isOopForwarded(receiver)) {
-		ceSendFromInLineCacheMiss(cPIC);
-		return;
+		return ceSendFromInLineCacheMiss(cPIC);
 	}
 	outerReturn = stackTop();
 	assert(!(((inlineCacheTagAt(backEnd, outerReturn)) == (picAbortDiscriminatorValue()))));
@@ -3133,12 +3132,11 @@
 	 || (isYoung(newTargetMethodOrNil))))) {
 		result = patchToOpenPICFornumArgsreceiver((cPIC->selector), (cPIC->cmNumArgs), receiver);
 		assert(!result);
-		ceSendFromInLineCacheMiss(cPIC);
-		return;
+		return ceSendFromInLineCacheMiss(cPIC);
 	}
 	cogExtendPICCaseNMethodtagisMNUCase(cPIC, newTargetMethodOrNil, cacheTag, errorSelectorOrNil == SelectorDoesNotUnderstand);
 	executeCogPICfromLinkedSendWithReceiverandCacheTag(cPIC, receiver, inlineCacheTagAt(backEnd, outerReturn));
-	return;
+	return null;
 }
 
 
@@ -4248,7 +4246,7 @@
 }
 
 	/* Cogit>>#compileBlockDispatchFrom:to: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 compileBlockDispatchFromto(sqInt lowBlockStartIndex, sqInt highBlockStartIndex)
 {
     AbstractInstruction *anInstruction;
@@ -4265,7 +4263,7 @@
 		/* begin Jump: */
 		jumpTarget = (blockStart->entryLabel);
 		genoperand(Jump, ((sqInt)jumpTarget));
-		return;
+		return null;
 	}
 	halfWay = (highBlockStartIndex + lowBlockStartIndex) / 2;
 	assert(((halfWay >= lowBlockStartIndex) && (halfWay <= highBlockStartIndex)));
@@ -4281,15 +4279,14 @@
 		jumpTarget1 = (blockStart->entryLabel);
 		genConditionalBranchoperand(JumpLessOrEqual, ((sqInt)jumpTarget1));
 		compileBlockDispatchFromto(halfWay + 1, highBlockStartIndex);
-		return;
+		return null;
 	}
 	if ((halfWay + 1) == highBlockStartIndex) {
 		blockStart = blockStartAt(highBlockStartIndex);
 		/* begin JumpGreater: */
 		jumpTarget2 = (blockStart->entryLabel);
 		genConditionalBranchoperand(JumpGreater, ((sqInt)jumpTarget2));
-		compileBlockDispatchFromto(lowBlockStartIndex, halfWay);
-		return;
+		return compileBlockDispatchFromto(lowBlockStartIndex, halfWay);
 	}
 	/* begin JumpGreater: */
 	jmp = genConditionalBranchoperand(JumpGreater, ((sqInt)0));
@@ -5880,12 +5877,12 @@
 generateMapAtstart(sqInt addressOrNull, sqInt startAddress)
 {
     unsigned char annotation;
-    usqInt delta;
+    sqInt delta;
     sqInt i;
     AbstractInstruction *instruction;
     sqInt length;
-    usqInt location;
-    usqInt mapEntry;
+    sqInt location;
+    sqInt mapEntry;
     sqInt maxDelta;
     usqInt mcpc;
 

Modified: branches/Cog/nsspur64src/vm/cointerp.c
===================================================================
--- branches/Cog/nsspur64src/vm/cointerp.c	2016-01-23 00:34:50 UTC (rev 3565)
+++ branches/Cog/nsspur64src/vm/cointerp.c	2016-01-23 01:47:33 UTC (rev 3566)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1664 uuid: 9e676eea-f638-4da0-bd70-920a096bda28
    from
-	CoInterpreter VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5
+	CoInterpreter VMMaker.oscog-eem.1664 uuid: 9e676eea-f638-4da0-bd70-920a096bda28
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1664 uuid: 9e676eea-f638-4da0-bd70-920a096bda28 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -479,9 +479,9 @@
 extern sqInt ceReturnToInterpreter(sqInt anOop);
 extern void ceSelfSendreceiver(sqInt cacheAddress, sqInt methodReceiver);
 extern sqInt ceSendAborttonumArgs(sqInt selector, sqInt rcvr, sqInt numArgs);
-extern void ceSendFromInLineCacheMiss(CogMethod *cogMethodOrPIC);
+extern sqInt ceSendFromInLineCacheMiss(CogMethod *cogMethodOrPIC);
 extern sqInt ceSendMustBeBoolean(sqInt anObject);
-extern void ceSendsupertonumArgs(sqInt selector, sqInt superNormalBar, sqInt rcvr, sqInt numArgs);
+extern sqInt ceSendsupertonumArgs(sqInt selector, sqInt superNormalBar, sqInt rcvr, sqInt numArgs);
 extern void ceStackOverflow(sqInt contextSwitchIfNotNil);
 extern void ceTraceBlockActivation(void);
 extern void ceTraceLinkedSend(sqInt theReceiver);
@@ -527,7 +527,7 @@
 extern sqInt getCurrentBytecode(void);
 extern char * getFramePointer(void);
 static sqInt NoDbgRegParms handleForwardedSendFaultForReceiverstackDelta(sqInt forwardedReceiver, sqInt stackDelta);
-static void NoDbgRegParms handleMNUInMachineCodeToclassForMessage(sqInt selectorIndex, sqInt rcvr, sqInt classForMessage);
+static sqInt NoDbgRegParms handleMNUInMachineCodeToclassForMessage(sqInt selectorIndex, sqInt rcvr, sqInt classForMessage);
 static sqInt NoDbgRegParms iframeIsBlockActivation(char *theFP);
 static sqInt NoDbgRegParms iframeReceiver(char *theFP);
 static sqInt NoDbgRegParms iframeSavedIP(char *theFP);
@@ -1124,8 +1124,8 @@
 static sqInt NoDbgRegParms isValidFreeObject(sqInt objOop);
 static sqInt NoDbgRegParms isValidObjStackAt(sqInt objStackRootIndex);
 static sqInt NoDbgRegParms isValidObjStackPagemyIndex(sqInt objStackPage, sqInt myx);
-static void NoDbgRegParms isValidObjStackPagemyIndexfirstPage(sqInt objStackPage, sqInt myx, sqInt isFirstPage);
-static void NoDbgRegParms isValidObjStack(sqInt objStack);
+static sqInt NoDbgRegParms isValidObjStackPagemyIndexfirstPage(sqInt objStackPage, sqInt myx, sqInt isFirstPage);
+static sqInt NoDbgRegParms isValidObjStack(sqInt objStack);
 static sqInt NoDbgRegParms isWeakFormat(sqInt format);
 static sqInt NoDbgRegParms isWeakNonImm(sqInt objOop);
 extern sqInt isWeak(sqInt oop);
@@ -1343,8 +1343,8 @@
 static sqInt NoDbgRegParms findClassContainingMethodstartingAt(sqInt meth, sqInt classObj);
 extern sqInt findClassOfMethodforReceiver(sqInt meth, sqInt rcvr);
 static char * NoDbgRegParms findFrameAboveinPage(char *theFP, StackPage *thePage);
-static void NoDbgRegParms findHomeForContext(sqInt aContext);
-static void NoDbgRegParms findMethodWithPrimitiveFromContextUpToContext(sqInt primitive, sqInt senderContext, sqInt homeContext);
+static sqInt NoDbgRegParms findHomeForContext(sqInt aContext);
+static sqInt NoDbgRegParms findMethodWithPrimitiveFromContextUpToContext(sqInt primitive, sqInt senderContext, sqInt homeContext);
 extern sqInt findSelectorOfMethod(sqInt methArg);
 static char * NoDbgRegParms findSPOfon(char *theFP, StackPage *thePage);
 static sqInt NoDbgRegParms findUnwindThroughContext(sqInt homeContext);
@@ -1399,7 +1399,7 @@
 extern sqInt isKindOfClass(sqInt oop, sqInt aClass);
 extern sqInt isKindOf(sqInt oop, char *className);
 extern sqInt isMemberOf(sqInt oop, char *className);
-static void NoDbgRegParms lengthOfNameOfClass(sqInt classOop);
+static sqInt NoDbgRegParms lengthOfNameOfClass(sqInt classOop);
 extern sqInt literalofMethod(sqInt offset, sqInt methodPointer);
 extern sqInt loadBitBltFrom(sqInt bb);
 extern void loadInitialContext(void);
@@ -1407,7 +1407,7 @@
 extern sqInt longStoreBytecodeForHeader(sqInt methodHeader);
 static sqInt NoDbgRegParms lookupInMethodCacheSelclassTag(sqInt selector, sqInt classTag);
 static sqInt NoDbgRegParms lookupLexicalfromrule(sqInt selector, sqInt mixin, sqInt rule);
-static void NoDbgRegParms lookupMethodInClass(sqInt class);
+static sqInt NoDbgRegParms lookupMethodInClass(sqInt class);
 static sqInt lookupMNU(void);
 static sqInt NoDbgRegParms lookupMNUInClass(sqInt class);
 static sqInt NoDbgRegParms lookupOrdinaryNoMNUEtcInClass(sqInt class);
@@ -1453,7 +1453,7 @@
 extern void printAllStacks(void);
 extern void printCallStack(void);
 static sqInt NoDbgRegParms printCallStackFP(char *theFP);
-extern void printCallStackOf(sqInt aContextOrProcessOrFrame);
+extern sqInt printCallStackOf(sqInt aContextOrProcessOrFrame);
 static sqInt NoDbgRegParms printCallStackOfcurrentFP(sqInt aContext, char *currFP);
 extern void printChar(sqInt aByte);
 static sqInt NoDbgRegParms printContextCallStackOf(sqInt aContext);
@@ -1478,7 +1478,7 @@
 extern void printOop(sqInt oop);
 extern void printProcessStack(sqInt aProcess);
 extern sqInt printProcsOnList(sqInt procList);
-extern void printStackCallStackOf(sqInt aContextOrProcessOrFrame);
+extern sqInt printStackCallStackOf(sqInt aContextOrProcessOrFrame);
 extern void printStackPageList(void);
 extern void printStackPageListInUse(void);
 extern void printStackPages(void);
@@ -2436,7 +2436,7 @@
 /*560*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
 	};
 char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1662";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1664";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -18259,7 +18259,7 @@
 /*	self printStringOf: selector */
 
 	/* CoInterpreter>>#ceSendFromInLineCacheMiss: */
-void
+sqInt
 ceSendFromInLineCacheMiss(CogMethod *cogMethodOrPIC)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt classObj;
@@ -18314,13 +18314,11 @@
 	else {
 		if (isOopForwarded((cogMethodOrPIC->selector))) {
 			handleForwardedSelectorFaultFor((cogMethodOrPIC->selector));
-			ceSendFromInLineCacheMiss(cogMethodOrPIC);
-			return;
+			return ceSendFromInLineCacheMiss(cogMethodOrPIC);
 		}
 		if (classTag == (isForwardedObjectClassIndexPun())) {
 			handleForwardedSendFaultForReceiverstackDelta(rcvr, 1);
-			ceSendFromInLineCacheMiss(cogMethodOrPIC);
-			return;
+			return ceSendFromInLineCacheMiss(cogMethodOrPIC);
 		}
 		GIV(messageSelector) = (cogMethodOrPIC->selector);
 		/* begin classAtIndex: */
@@ -18353,8 +18351,7 @@
 		executeNewMethod();
 		assert(0);
 	}
-	interpretMethodFromMachineCode();
-	return;
+	return interpretMethodFromMachineCode();
 }
 
 	/* CoInterpreter>>#ceSendMustBeBoolean: */
@@ -18397,7 +18394,7 @@
 	cogged or not. */
 
 	/* CoInterpreter>>#ceSend:super:to:numArgs: */
-void
+sqInt
 ceSendsupertonumArgs(sqInt selector, sqInt superNormalBar, sqInt rcvr, sqInt numArgs)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt classObj;
@@ -18484,13 +18481,11 @@
 	else {
 		if (((selector & (tagMask())) == 0)
 		 && (((longAt(selector)) & (classIndexMask())) == (isForwardedObjectClassIndexPun()))) {
-			ceSendsupertonumArgs(handleForwardedSelectorFaultFor(selector), superNormalBar, rcvr, numArgs);
-			return;
+			return ceSendsupertonumArgs(handleForwardedSelectorFaultFor(selector), superNormalBar, rcvr, numArgs);
 		}
 		if (classTag == (isForwardedObjectClassIndexPun())) {
 			assert(superNormalBar == 0);
-			ceSendsupertonumArgs(selector, superNormalBar, handleForwardedSendFaultForReceiverstackDelta(rcvr, 1), numArgs);
-			return;
+			return ceSendsupertonumArgs(selector, superNormalBar, handleForwardedSendFaultForReceiverstackDelta(rcvr, 1), numArgs);
 		}
 		GIV(messageSelector) = selector;
 		/* begin classAtIndex: */
@@ -18562,8 +18557,7 @@
 	top1 = longAt(GIV(stackPointer));
 	GIV(stackPointer) += BytesPerWord;
 	GIV(instructionPointer) = top1;
-	interpretMethodFromMachineCode();
-	return;
+	return interpretMethodFromMachineCode();
 }
 
 
@@ -18700,7 +18694,7 @@
 static sqInt
 checkForAndFollowForwardedPrimitiveState(void)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
-    signed char accessorDepth;
+    sqInt accessorDepth;
     sqInt firstBytecode;
     sqInt found;
     sqInt found1;
@@ -20259,7 +20253,7 @@
 	method. messageSelector is an implicit argument (yuck). */
 
 	/* CoInterpreter>>#handleMNU:InMachineCodeTo:classForMessage: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 handleMNUInMachineCodeToclassForMessage(sqInt selectorIndex, sqInt rcvr, sqInt classForMessage)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt classForThisMessage;
@@ -20308,8 +20302,7 @@
 			/* begin push: */
 			longAtput((sp = GIV(stackPointer) - BytesPerWord), GIV(instructionPointer));
 			GIV(stackPointer) = sp;
-			handleMNUInMachineCodeToclassForMessage(errSelIdx, rcvr, classForThisMessage);
-			return;
+			return handleMNUInMachineCodeToclassForMessage(errSelIdx, rcvr, classForThisMessage);
 		}
 	}
 	if (((GIV(newMethod) & (tagMask())) == 0)
@@ -20321,8 +20314,7 @@
 		executeCogMethodfromUnlinkedSendWithReceiver(cogMethodOf(GIV(newMethod)), rcvr);
 		assert(0);
 	}
-	interpretMethodFromMachineCode();
-	return;
+	return interpretMethodFromMachineCode();
 }
 
 
@@ -54153,7 +54145,7 @@
 /*	Answer if the obj stack at stackRootIndex is valid. */
 
 	/* SpurMemoryManager>>#isValidObjStackPage:myIndex:firstPage: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 isValidObjStackPagemyIndexfirstPage(sqInt objStackPage, sqInt myx, sqInt isFirstPage)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt freeOrNextPage;
@@ -54162,33 +54154,33 @@
     sqInt page;
 
 	if (!(isValidObjStackPagemyIndex(objStackPage, myx))) {
-		return;
+		return 0;
 	}
 	freeOrNextPage = longAt((objStackPage + BaseHeaderSize) + (((long)ObjStackFreex) << (shiftForWord())));
 	while (freeOrNextPage != 0) {
 		if (!isFirstPage) {
 			GIV(objStackInvalidBecause) = "free page on other than first page";
 			GIV(invalidObjStackPage) = objStackPage;
-			return;
+			return 0;
 		}
 		if (freeOrNextPage == (longAt((objStackPage + BaseHeaderSize) + (((long)ObjStackNextx) << (shiftForWord()))))) {
 			GIV(objStackInvalidBecause) = "free page = next page";
 			GIV(invalidObjStackPage) = freeOrNextPage;
-			return;
+			return 0;
 		}
 		if (!(isValidObjStackPagemyIndex(freeOrNextPage, myx))) {
 			ns = malloc(((strlen(GIV(objStackInvalidBecause))) + (strlen(", on next page"))) + 2);
 			strcpy(ns, GIV(objStackInvalidBecause));
 			GIV(objStackInvalidBecause) = strcat(ns, ", on next page");
 
-			return;
+			return 0;
 		}
 		page = longAt((freeOrNextPage + BaseHeaderSize) + (((long)ObjStackFreex) << (shiftForWord())));
 		if ((page == freeOrNextPage)
 		 || (page == objStackPage)) {
 			GIV(objStackInvalidBecause) = "circularity in free page list";
 			GIV(invalidObjStackPage) = page;
-			return;
+			return 0;
 		}
 		freeOrNextPage = page;
 	}
@@ -54196,48 +54188,46 @@
 		if (!(((myx >= (1LL << (22 - (classTableMajorIndexShift())))) && (myx <= (((1LL << (22 - (classTableMajorIndexShift()))) + 8) - 1))))) {
 			GIV(objStackInvalidBecause) = "myx out of range";
 			GIV(invalidObjStackPage) = objStackPage;
-			return;
+			return 0;
 		}
 		if (!((longAt((GIV(hiddenRootsObj) + BaseHeaderSize) + (((long)myx) << (shiftForWord())))) == objStackPage)) {
 			GIV(objStackInvalidBecause) = "firstPage is not root";
 			GIV(invalidObjStackPage) = objStackPage;
-			return;
+			return 0;
 		}
 	}
 	index = longAt((objStackPage + BaseHeaderSize) + (((long)ObjStackTopx) << (shiftForWord())));
 	if (!(((index >= 0) && (index <= ObjStackLimit)))) {
 		GIV(objStackInvalidBecause) = "bad topx";
 		GIV(invalidObjStackPage) = objStackPage;
-		return;
+		return 0;
 	}
 	freeOrNextPage = longAt((objStackPage + BaseHeaderSize) + (((long)ObjStackNextx) << (shiftForWord())));
 	if (freeOrNextPage == 0) {
-		return;
+		return 1;
 	}
 	if (freeOrNextPage == objStackPage) {
 		GIV(objStackInvalidBecause) = "circularity in objStack page list";
 		GIV(invalidObjStackPage) = objStackPage;
-		return;
+		return 0;
 	}
-	isValidObjStackPagemyIndexfirstPage(freeOrNextPage, myx, 0);
-	return;
+	return isValidObjStackPagemyIndexfirstPage(freeOrNextPage, myx, 0);
 }
 
 
 /*	Answer if the obj stack at objStackRootIndex is valid. */
 
 	/* SpurMemoryManager>>#isValidObjStack: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 isValidObjStack(sqInt objStack)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
 	if (!((addressCouldBeObj(objStack))
 		 && ((numSlotsOfAny(objStack)) == ObjStackPageSlots))) {
 		GIV(objStackInvalidBecause) = "first page not obj or wrong size";
 		GIV(invalidObjStackPage) = objStack;
-		return;
+		return 0;
 	}
-	isValidObjStackPagemyIndexfirstPage(objStack, longAt((objStack + BaseHeaderSize) + (((long)ObjStackMyx) << (shiftForWord()))), 1);
-	return;
+	return isValidObjStackPagemyIndexfirstPage(objStack, longAt((objStack + BaseHeaderSize) + (((long)ObjStackMyx) << (shiftForWord()))), 1);
 }
 
 	/* SpurMemoryManager>>#isWeakFormat: */
@@ -67461,7 +67451,7 @@
     sqInt limit;
     sqInt newEndOfMemory;
     sqInt next;
-    sqInt node;
+    usqInt node;
     usqInt numSlots;
     usqInt numSlots1;
     SpurSegmentInfo *seg;
@@ -67803,7 +67793,7 @@
     usqLong firstSavedBridgeWord;
     sqInt nWritten;
     usqInt pier1;
-    usqInt pier2;
+    sqInt pier2;
     usqLong secondSavedBridgeWord;
 
 	pier1 = (((segment->segSize)) + ((segment->segStart))) - (2 * BaseHeaderSize);
@@ -70844,7 +70834,7 @@
 }
 
 	/* StackInterpreter>>#findHomeForContext: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 findHomeForContext(sqInt aContext)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt closureOrNil;
@@ -70852,19 +70842,18 @@
 
 	if (!(((aContext & (tagMask())) == 0)
 		 && (((longAt(aContext)) & (classIndexMask())) == ClassMethodContextCompactIndex))) {
-		return;
+		return null;
 	}
 	closureOrNil = longAt((aContext + BaseHeaderSize) + (((long)ClosureIndex) << (shiftForWord())));
 	if (closureOrNil == GIV(nilObj)) {
-		return;
+		return aContext;
 	}
 	if (((((tagBits = closureOrNil & (tagMask()))) != 0
 		? longAt((GIV(classTableFirstPage) + BaseHeaderSize) + (((long)tagBits) << (shiftForWord())))
 		: fetchClassOfNonImm(closureOrNil))) != (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (((long)ClassBlockClosure) << (shiftForWord()))))) {
-		return;
+		return null;
 	}
-	findHomeForContext(longAt((closureOrNil + BaseHeaderSize) + (((long)ClosureOuterContextIndex) << (shiftForWord()))));
-	return;
+	return findHomeForContext(longAt((closureOrNil + BaseHeaderSize) + (((long)ClosureOuterContextIndex) << (shiftForWord()))));
 }
 
 
@@ -70872,9 +70861,13 @@
 	findMethodWithPrimitive:FromFP:SP:ThroughContext: instead of iterative.
 	We're doing the simplest thing that could possibly work. Niceties can
 	wait.  */
+/*	Being mutually-recursive with findMethodWithPrimitive:FromFP:UpToContext:
+	gives the author's type inference algorithm headaches. Wimp out by
+	declaring the return type.
+ */
 
 	/* StackInterpreter>>#findMethodWithPrimitive:FromContext:UpToContext: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 findMethodWithPrimitiveFromContextUpToContext(sqInt primitive, sqInt senderContext, sqInt homeContext)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt callerContextOrNil;
@@ -70897,23 +70890,23 @@
 	theContext = senderContext;
 	while (1) {
 		if (theContext == GIV(nilObj)) {
-			return;
+			return theContext;
 		}
 		if (((((longAt((theContext + BaseHeaderSize) + (((long)SenderIndex) << (shiftForWord()))))) & 7) == 1)) break;
 		if (theContext == homeContext) {
-			return;
+			return 0;
 		}
 		if (!((primitive == 0)
 			 || ((longAt((theContext + BaseHeaderSize) + (((long)ClosureIndex) << (shiftForWord())))) != GIV(nilObj)))) {
 			theMethod = longAt((theContext + BaseHeaderSize) + (((long)MethodIndex) << (shiftForWord())));
 			if ((primitiveIndexOfMethodheader(theMethod, methodHeaderOf(theMethod))) == primitive) {
-				return;
+				return theContext;
 			}
 		}
 		theContext = longAt((theContext + BaseHeaderSize) + (((long)SenderIndex) << (shiftForWord())));
 	}
 	if (isWidowedContext(theContext)) {
-		return;
+		return GIV(nilObj);
 	}
 	/* begin findMethodWithPrimitive:FromFP:UpToContext: */
 	senderOop = longAt((theContext + BaseHeaderSize) + (((long)SenderIndex) << (shiftForWord())));
@@ -70927,7 +70920,7 @@
 			? ((longAt(theFP + FoxMethod)) & MFMethodFlagHasContextFlag) != 0
 			: (byteAt((theFP + FoxIFrameFlags) + 2)) != 0))
 		 && (homeContext == (longAt(theFP + FoxThisContext)))) {
-			return;
+			return 0;
 		}
 		if (!((primitive == 0)
 			 || (((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
@@ -70952,11 +70945,9 @@
 					? ((longAt(theFP + FoxMethod)) & MFMethodFlagHasContextFlag) != 0
 					: (byteAt((theFP + FoxIFrameFlags) + 2)) != 0)) {
 					assert(isContext(frameContext(theFP)));
-					longAt(theFP + FoxThisContext);
-					return;
+					return longAt(theFP + FoxThisContext);
 				}
-				marryFrameSP(theFP, theSP);
-				return;
+				return marryFrameSP(theFP, theSP);
 			}
 		}
 		theFPAbove = theFP;
@@ -70975,10 +70966,9 @@
 	senderContext1 = callerContextOrNil;
 	if (!(((senderContext1 & (tagMask())) == 0)
 		 && (((longAt(senderContext1)) & (classIndexMask())) == ClassMethodContextCompactIndex))) {
-		return;
+		return GIV(nilObj);
 	}
-	findMethodWithPrimitiveFromContextUpToContext(primitive, senderContext1, homeContext);
-	return;
+	return findMethodWithPrimitiveFromContextUpToContext(primitive, senderContext1, homeContext);
 }
 
 	/* StackInterpreter>>#findSelectorOfMethod: */
@@ -72405,7 +72395,7 @@
 }
 
 	/* StackInterpreter>>#lengthOfNameOfClass: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 lengthOfNameOfClass(sqInt classOop)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt fmt;
@@ -72423,11 +72413,10 @@
 		? ((usqInt) (((unsigned long)(((long)(longAt(classOop - BaseHeaderSize))) << 8)))) >> 8
 		: numSlots1);
 	if (numSlots == GIV(metaclassNumSlots)) {
-		lengthOfNameOfClass(longAt((classOop + BaseHeaderSize) + (((long)GIV(thisClassIndex)) << (shiftForWord()))));
-		return;
+		return lengthOfNameOfClass(longAt((classOop + BaseHeaderSize) + (((long)GIV(thisClassIndex)) << (shiftForWord()))));
 	}
 	if (numSlots <= GIV(classNameIndex)) {
-		return;
+		return 0;
 	}
 	/* begin lengthOf: */
 	objOop = longAt((classOop + BaseHeaderSize) + (((long)GIV(classNameIndex)) << (shiftForWord())));
@@ -72439,26 +72428,23 @@
 		? ((usqInt) (((unsigned long)(((long)(longAt(objOop - BaseHeaderSize))) << 8)))) >> 8
 		: numSlots11);
 	if (fmt <= 5) {
-		return;
+		return numSlots2;
 	}
 	if (fmt >= (firstByteFormat())) {
 
 		/* bytes, including CompiledMethod */
-		(((long)numSlots2) << (shiftForWord())) - (fmt & 7);
-		return;
+		return (((long)numSlots2) << (shiftForWord())) - (fmt & 7);
 	}
 	if (fmt >= (firstShortFormat())) {
-		(((long)numSlots2) << ((shiftForWord()) - 1)) - (fmt & 3);
-		return;
+		return (((long)numSlots2) << ((shiftForWord()) - 1)) - (fmt & 3);
 	}
 	if (fmt >= (firstLongFormat())) {
-		(((long)numSlots2) << ((shiftForWord()) - 2)) - (fmt & 1);
-		return;
+		return (((long)numSlots2) << ((shiftForWord()) - 2)) - (fmt & 1);
 	}
 	if (fmt == (sixtyFourBitIndexableFormat())) {
-		return;
+		return numSlots2;
 	}
-	return;
+	return 0;
 }
 
 	/* StackInterpreter>>#literal:ofMethod: */
@@ -72958,7 +72944,7 @@
 }
 
 	/* StackInterpreter>>#lookupMethodInClass: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 lookupMethodInClass(sqInt class)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt currentClass;
@@ -72998,8 +72984,7 @@
 			GIV(messageSelector) = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (((long)SelectorCannotInterpret) << (shiftForWord())));
 			/* begin sendBreakpoint:receiver: */
 			sendBreakpointreceiver(firstFixedFieldOfMaybeImmediate(GIV(messageSelector)), lengthOfMaybeImmediate(GIV(messageSelector)), null);
-			lookupMethodInClass(followFieldofObject(SuperclassIndex, currentClass));
-			return;
+			return lookupMethodInClass(followFieldofObject(SuperclassIndex, currentClass));
 		}
 		/* begin lookupMethodInDictionary: */
 		flag("endianness");
@@ -73104,7 +73089,7 @@
 		found = 0;
 	l1:	/* end lookupMethodInDictionary: */;
 		if (found) {
-			return;
+			return currentClass;
 		}
 		/* begin followField:ofObject: */
 		objOop1 = longAt((currentClass + BaseHeaderSize) + (((long)SuperclassIndex) << (shiftForWord())));
@@ -73120,8 +73105,7 @@
 	createActualMessageTo(class);
 	GIV(messageSelector) = longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (((long)SelectorDoesNotUnderstand) << (shiftForWord())));
 	sendBreakpointreceiver(GIV(messageSelector) + BaseHeaderSize, lengthOfformat(GIV(messageSelector), (((usqInt) (longAt(GIV(messageSelector)))) >> (formatShift())) & (formatMask())), null);
-	lookupMethodInClass(class);
-	return;
+	return lookupMethodInClass(class);
 }
 
 
@@ -75664,26 +75648,24 @@
 }
 
 	/* StackInterpreter>>#printCallStackOf: */
-void
+sqInt
 printCallStackOf(sqInt aContextOrProcessOrFrame)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt context;
 
 	if ((((((usqInt)aContextOrProcessOrFrame)) & (BytesPerWord - 1)) == 0)
 	 && ((((((usqInt)aContextOrProcessOrFrame)) >= (((usqInt)(GIV(stackBasePlus1) - 1)))) && ((((usqInt)aContextOrProcessOrFrame)) <= (((usqInt)GIV(pages))))))) {
-		printCallStackFP(((char *) aContextOrProcessOrFrame));
-		return;
+		return printCallStackFP(((char *) aContextOrProcessOrFrame));
 	}
 	if (couldBeProcess(aContextOrProcessOrFrame)) {
-		printCallStackOf(longAt((aContextOrProcessOrFrame + BaseHeaderSize) + (((long)SuspendedContextIndex) << (shiftForWord()))));
-		return;
+		return printCallStackOf(longAt((aContextOrProcessOrFrame + BaseHeaderSize) + (((long)SuspendedContextIndex) << (shiftForWord()))));
 	}
 	context = aContextOrProcessOrFrame;
 	while (!(context == GIV(nilObj))) {
 		if (((((longAt((context + BaseHeaderSize) + (((long)SenderIndex) << (shiftForWord()))))) & 7) == 1)) {
 			if (!(checkIsStillMarriedContextcurrentFP(context, GIV(framePointer)))) {
 				shortPrintContext(context);
-				return;
+				return null;
 			}
 			context = shortReversePrintFrameAndCallers(frameOfMarriedContext(context));
 		}
@@ -77568,7 +77550,7 @@
 }
 
 	/* StackInterpreter>>#printStackCallStackOf: */
-void
+sqInt
 printStackCallStackOf(sqInt aContextOrProcessOrFrame)
 {
     sqInt context;
@@ -77578,14 +77560,12 @@
 		if ((((aContextOrProcessOrFrame & (tagMask())) == 0)
 		 && (((longAt(aContextOrProcessOrFrame)) & (classIndexMask())) == ClassMethodContextCompactIndex))
 		 && (checkIsStillMarriedContextcurrentFP(aContextOrProcessOrFrame, null))) {
-			printStackCallStackOf(((sqInt)(frameOfMarriedContext(aContextOrProcessOrFrame))));
-			return;
+			return printStackCallStackOf(((sqInt)(frameOfMarriedContext(aContextOrProcessOrFrame))));
 		}
 		if (couldBeProcess(aContextOrProcessOrFrame)) {
-			printCallStackOf(longAt((aContextOrProcessOrFrame + BaseHeaderSize) + (((long)SuspendedContextIndex) << (shiftForWord()))));
-			return;
+			return printCallStackOf(longAt((aContextOrProcessOrFrame + BaseHeaderSize) + (((long)SuspendedContextIndex) << (shiftForWord()))));
 		}
-		return;
+		return null;
 	}
 
 	theFP = ((void *)aContextOrProcessOrFrame);
@@ -77594,7 +77574,7 @@
 		if (!((((((longAt((context + BaseHeaderSize) + (((long)SenderIndex) << (shiftForWord()))))) & 7) == 1))
 			 && (((theFP = frameOfMarriedContext(context)),
 			checkIsStillMarriedContextcurrentFP(context, theFP))))) {
-			return;
+			return null;
 		}
 	}
 }

Modified: branches/Cog/nsspur64src/vm/cointerp.h
===================================================================
--- branches/Cog/nsspur64src/vm/cointerp.h	2016-01-23 00:34:50 UTC (rev 3565)
+++ branches/Cog/nsspur64src/vm/cointerp.h	2016-01-23 01:47:33 UTC (rev 3566)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1664 uuid: 9e676eea-f638-4da0-bd70-920a096bda28
  */
 
 
@@ -42,9 +42,9 @@
 extern sqInt ceReturnToInterpreter(sqInt anOop);
 extern void ceSelfSendreceiver(sqInt cacheAddress, sqInt methodReceiver);
 extern sqInt ceSendAborttonumArgs(sqInt selector, sqInt rcvr, sqInt numArgs);
-extern void ceSendFromInLineCacheMiss(CogMethod *cogMethodOrPIC);
+extern sqInt ceSendFromInLineCacheMiss(CogMethod *cogMethodOrPIC);
 extern sqInt ceSendMustBeBoolean(sqInt anObject);
-extern void ceSendsupertonumArgs(sqInt selector, sqInt superNormalBar, sqInt rcvr, sqInt numArgs);
+extern sqInt ceSendsupertonumArgs(sqInt selector, sqInt superNormalBar, sqInt rcvr, sqInt numArgs);
 extern void ceStackOverflow(sqInt contextSwitchIfNotNil);
 extern void ceTraceBlockActivation(void);
 extern void ceTraceLinkedSend(sqInt theReceiver);
@@ -283,7 +283,7 @@
 extern sqInt primitiveIndexOfMethodheader(sqInt theMethod, sqInt methodHeader);
 extern sqInt primitiveIndexOf(sqInt methodPointer);
 extern void printAllStacks(void);
-extern void printCallStackOf(sqInt aContextOrProcessOrFrame);
+extern sqInt printCallStackOf(sqInt aContextOrProcessOrFrame);
 extern void printChar(sqInt aByte);
 extern void printHex(sqInt n);
 extern void printLikelyImplementorsOfSelector(sqInt selector);
@@ -292,7 +292,7 @@
 extern void printMethodDictionary(sqInt dictionary);
 extern void printProcessStack(sqInt aProcess);
 extern sqInt printProcsOnList(sqInt procList);
-extern void printStackCallStackOf(sqInt aContextOrProcessOrFrame);
+extern sqInt printStackCallStackOf(sqInt aContextOrProcessOrFrame);
 extern void printStackReferencesTo(sqInt oop);
 extern void print(char *s);
 extern void setBreakMNUSelector(char *aString);

Modified: branches/Cog/nsspur64src/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nsspur64src/vm/gcc3x-cointerp.c	2016-01-23 00:34:50 UTC (rev 3565)
+++ branches/Cog/nsspur64src/vm/gcc3x-cointerp.c	2016-01-23 01:47:33 UTC (rev 3566)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1664 uuid: 9e676eea-f638-4da0-bd70-920a096bda28
    from
-	CoInterpreter VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5
+	CoInterpreter VMMaker.oscog-eem.1664 uuid: 9e676eea-f638-4da0-bd70-920a096bda28
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1662 uuid: 686f2648-1716-445e-8440-ec23d22489a5 " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1664 uuid: 9e676eea-f638-4da0-bd70-920a096bda28 " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -482,9 +482,9 @@
 extern sqInt ceReturnToInterpreter(sqInt anOop);
 extern void ceSelfSendreceiver(sqInt cacheAddress, sqInt methodReceiver);
 extern sqInt ceSendAborttonumArgs(sqInt selector, sqInt rcvr, sqInt numArgs);
-extern void ceSendFromInLineCacheMiss(CogMethod *cogMethodOrPIC);
+extern sqInt ceSendFromInLineCacheMiss(CogMethod *cogMethodOrPIC);
 extern sqInt ceSendMustBeBoolean(sqInt anObject);
-extern void ceSendsupertonumArgs(sqInt selector, sqInt superNormalBar, sqInt rcvr, sqInt numArgs);
+extern sqInt ceSendsupertonumArgs(sqInt selector, sqInt superNormalBar, sqInt rcvr, sqInt numArgs);
 extern void ceStackOverflow(sqInt contextSwitchIfNotNil);
 extern void ceTraceBlockActivation(void);
 extern void ceTraceLinkedSend(sqInt theReceiver);
@@ -530,7 +530,7 @@
 extern sqInt getCurrentBytecode(void);
 extern char * getFramePointer(void);
 static sqInt NoDbgRegParms handleForwardedSendFaultForReceiverstackDelta(sqInt forwardedReceiver, sqInt stackDelta);
-static void NoDbgRegParms handleMNUInMachineCodeToclassForMessage(sqInt selectorIndex, sqInt rcvr, sqInt classForMessage);
+static sqInt NoDbgRegParms handleMNUInMachineCodeToclassForMessage(sqInt selectorIndex, sqInt rcvr, sqInt classForMessage);
 static sqInt NoDbgRegParms iframeIsBlockActivation(char *theFP);
 static sqInt NoDbgRegParms iframeReceiver(char *theFP);
 static sqInt NoDbgRegParms iframeSavedIP(char *theFP);
@@ -1127,8 +1127,8 @@
 static sqInt NoDbgRegParms isValidFreeObject(sqInt objOop);
 static sqInt NoDbgRegParms isValidObjStackAt(sqInt objStackRootIndex);
 static sqInt NoDbgRegParms isValidObjStackPagemyIndex(sqInt objStackPage, sqInt myx);
-static void NoDbgRegParms isValidObjStackPagemyIndexfirstPage(sqInt objStackPage, sqInt myx, sqInt isFirstPage);
-static void NoDbgRegParms isValidObjStack(sqInt objStack);
+static sqInt NoDbgRegParms isValidObjStackPagemyIndexfirstPage(sqInt objStackPage, sqInt myx, sqInt isFirstPage);
+static sqInt NoDbgRegParms isValidObjStack(sqInt objStack);
 static sqInt NoDbgRegParms isWeakFormat(sqInt format);
 static sqInt NoDbgRegParms isWeakNonImm(sqInt objOop);
 extern sqInt isWeak(sqInt oop);
@@ -1346,8 +1346,8 @@
 static sqInt NoDbgRegParms findClassContainingMethodstartingAt(sqInt meth, sqInt classObj);
 extern sqInt findClassOfMethodforReceiver(sqInt meth, sqInt rcvr);
 static char * NoDbgRegParms findFrameAboveinPage(char *theFP, StackPage *thePage);
-static void NoDbgRegParms findHomeForContext(sqInt aContext);
-static void NoDbgRegParms findMethodWithPrimitiveFromContextUpToContext(sqInt primitive, sqInt senderContext, sqInt homeContext);
+static sqInt NoDbgRegParms findHomeForContext(sqInt aContext);
+static sqInt NoDbgRegParms findMethodWithPrimitiveFromContextUpToContext(sqInt primitive, sqInt senderContext, sqInt homeContext);
 extern sqInt findSelectorOfMethod(sqInt methArg);
 static char * NoDbgRegParms findSPOfon(char *theFP, StackPage *thePage);
 static sqInt NoDbgRegParms findUnwindThroughContext(sqInt homeContext);
@@ -1402,7 +1402,7 @@
 extern sqInt isKindOfClass(sqInt oop, sqInt aClass);
 extern sqInt isKindOf(sqInt oop, char *className);
 extern sqInt isMemberOf(sqInt oop, char *className);
-static void NoDbgRegParms lengthOfNameOfClass(sqInt classOop);
+static sqInt NoDbgRegParms lengthOfNameOfClass(sqInt classOop);
 extern sqInt literalofMethod(sqInt offset, sqInt methodPointer);
 extern sqInt loadBitBltFrom(sqInt bb);
 extern void loadInitialContext(void);
@@ -1410,7 +1410,7 @@
 extern sqInt longStoreBytecodeForHeader(sqInt methodHeader);
 static sqInt NoDbgRegParms lookupInMethodCacheSelclassTag(sqInt selector, sqInt classTag);
 static sqInt NoDbgRegParms lookupLexicalfromrule(sqInt selector, sqInt mixin, sqInt rule);
-static void NoDbgRegParms lookupMethodInClass(sqInt class);
+static sqInt NoDbgRegParms lookupMethodInClass(sqInt class);
 static sqInt lookupMNU(void);
 static sqInt NoDbgRegParms lookupMNUInClass(sqInt class);
 static sqInt NoDbgRegParms lookupOrdinaryNoMNUEtcInClass(sqInt class);
@@ -1456,7 +1456,7 @@
 extern void printAllStacks(void);
 extern void printCallStack(void);
 static sqInt NoDbgRegParms printCallStackFP(char *theFP);
-extern void printCallStackOf(sqInt aContextOrProcessOrFrame);
+extern sqInt printCallStackOf(sqInt aContextOrProcessOrFrame);
 static sqInt NoDbgRegParms printCallStackOfcurrentFP(sqInt aContext, char *currFP);
 extern void printChar(sqInt aByte);
 static sqInt NoDbgRegParms printContextCallStackOf(sqInt aContext);
@@ -1481,7 +1481,7 @@
 extern void printOop(sqInt oop);
 extern void printProcessStack(sqInt aProcess);
 extern sqInt printProcsOnList(sqInt procList);
-extern void printStackCallStackOf(sqInt aContextOrProcessOrFrame);
+extern sqInt printStackCallStackOf(sqInt aContextOrProcessOrFrame);
 extern void printStackPageList(void);
 extern void printStackPageListInUse(void);
 extern void printStackPages(void);
@@ -2439,7 +2439,7 @@
 /*560*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
 	};
 char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1662";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1664";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -18268,7 +18268,7 @@
 /*	self printStringOf: selector */
 
 	/* CoInterpreter>>#ceSendFromInLineCacheMiss: */
-void
+sqInt
 ceSendFromInLineCacheMiss(CogMethod *cogMethodOrPIC)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt classObj;
@@ -18323,13 +18323,11 @@
 	else {
 		if (isOopForwarded((cogMethodOrPIC->selector))) {
 			handleForwardedSelectorFaultFor((cogMethodOrPIC->selector));
-			ceSendFromInLineCacheMiss(cogMethodOrPIC);
-			return;
+			return ceSendFromInLineCacheMiss(cogMethodOrPIC);
 		}
 		if (classTag == (isForwardedObjectClassIndexPun())) {
 			handleForwardedSendFaultForReceiverstackDelta(rcvr, 1);
-			ceSendFromInLineCacheMiss(cogMethodOrPIC);
-			return;
+			return ceSendFromInLineCacheMiss(cogMethodOrPIC);
 		}
 		GIV(messageSelector) = (cogMethodOrPIC->selector);
 		/* begin classAtIndex: */
@@ -18362,8 +18360,7 @@
 		executeNewMethod();
 		assert(0);
 	}
-	interpretMethodFromMachineCode();
-	return;
+	return interpretMethodFromMachineCode();
 }
 
 	/* CoInterpreter>>#ceSendMustBeBoolean: */
@@ -18406,7 +18403,7 @@
 	cogged or not. */
 
 	/* CoInterpreter>>#ceSend:super:to:numArgs: */
-void
+sqInt
 ceSendsupertonumArgs(sqInt selector, sqInt superNormalBar, sqInt rcvr, sqInt numArgs)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt classObj;
@@ -18493,13 +18490,11 @@
 	else {
 		if (((selector & (tagMask())) == 0)
 		 && (((longAt(selector)) & (classIndexMask())) == (isForwardedObjectClassIndexPun()))) {
-			ceSendsupertonumArgs(handleForwardedSelectorFaultFor(selector), superNormalBar, rcvr, numArgs);
-			return;
+			return ceSendsupertonumArgs(handleForwardedSelectorFaultFor(selector), superNormalBar, rcvr, numArgs);
 		}
 		if (classTag == (isForwardedObjectClassIndexPun())) {
 			assert(superNormalBar == 0);
-			ceSendsupertonumArgs(selector, superNormalBar, handleForwardedSendFaultForReceiverstackDelta(rcvr, 1), numArgs);
-			return;
+			return ceSendsupertonumArgs(selector, superNormalBar, handleForwardedSendFaultForReceiverstackDelta(rcvr, 1), numArgs);
 		}
 		GIV(messageSelector) = selector;
 		/* begin classAtIndex: */
@@ -18571,8 +18566,7 @@
 	top1 = longAt(GIV(stackPointer));
 	GIV(stackPointer) += BytesPerWord;
 	GIV(instructionPointer) = top1;
-	interpretMethodFromMachineCode();
-	return;
+	return interpretMethodFromMachineCode();
 }
 
 
@@ -18709,7 +18703,7 @@
 static sqInt
 checkForAndFollowForwardedPrimitiveState(void)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
-    signed char accessorDepth;
+    sqInt accessorDepth;
     sqInt firstBytecode;
     sqInt found;
     sqInt found1;
@@ -20268,7 +20262,7 @@
 	method. messageSelector is an implicit argument (yuck). */
 
 	/* CoInterpreter>>#handleMNU:InMachineCodeTo:classForMessage: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 handleMNUInMachineCodeToclassForMessage(sqInt selectorIndex, sqInt rcvr, sqInt classForMessage)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt classForThisMessage;
@@ -20317,8 +20311,7 @@
 			/* begin push: */
 			longAtput((sp = GIV(stackPointer) - BytesPerWord), GIV(instructionPointer));
 			GIV(stackPointer) = sp;
-			handleMNUInMachineCodeToclassForMessage(errSelIdx, rcvr, classForThisMessage);
-			return;
+			return handleMNUInMachineCodeToclassForMessage(errSelIdx, rcvr, classForThisMessage);
 		}
 	}
 	if (((GIV(newMethod) & (tagMask())) == 0)
@@ -20330,8 +20323,7 @@
 		executeCogMethodfromUnlinkedSendWithReceiver(cogMethodOf(GIV(newMethod)), rcvr);
 		assert(0);
 	}
-	interpretMethodFromMachineCode();
-	return;
+	return interpretMethodFromMachineCode();
 }
 
 
@@ -54162,7 +54154,7 @@
 /*	Answer if the obj stack at stackRootIndex is valid. */
 
 	/* SpurMemoryManager>>#isValidObjStackPage:myIndex:firstPage: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 isValidObjStackPagemyIndexfirstPage(sqInt objStackPage, sqInt myx, sqInt isFirstPage)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt freeOrNextPage;
@@ -54171,33 +54163,33 @@
     sqInt page;
 
 	if (!(isValidObjStackPagemyIndex(objStackPage, myx))) {
-		return;
+		return 0;
 	}
 	freeOrNextPage = longAt((objStackPage + BaseHeaderSize) + (((long)ObjStackFreex) << (shiftForWord())));
 	while (freeOrNextPage != 0) {
 		if (!isFirstPage) {
 			GIV(objStackInvalidBecause) = "free page on other than first page";
 			GIV(invalidObjStackPage) = objStackPage;
-			return;
+			return 0;
 		}
 		if (freeOrNextPage == (longAt((objStackPage + BaseHeaderSize) + (((long)ObjStackNextx) << (shiftForWord()))))) {
 			GIV(objStackInvalidBecause) = "free page = next page";
 			GIV(invalidObjStackPage) = freeOrNextPage;
-			return;
+			return 0;
 		}
 		if (!(isValidObjStackPagemyIndex(freeOrNextPage, myx))) {
 			ns = malloc(((strlen(GIV(objStackInvalidBecause))) + (strlen(", on next page"))) + 2);
 			strcpy(ns, GIV(objStackInvalidBecause));
 			GIV(objStackInvalidBecause) = strcat(ns, ", on next page");
 
-			return;
+			return 0;
 		}
 		page = longAt((freeOrNextPage + BaseHeaderSize) + (((long)ObjStackFreex) << (shiftForWord())));
 		if ((page == freeOrNextPage)
 		 || (page == objStackPage)) {
 			GIV(objStackInvalidBecause) = "circularity in free page list";
 			GIV(invalidObjStackPage) = page;
-			return;
+			return 0;
 		}
 		freeOrNextPage = page;
 	}
@@ -54205,48 +54197,46 @@
 		if (!(((myx >= (1LL << (22 - (classTableMajorIndexShift())))) && (myx <= (((1LL << (22 - (classTableMajorIndexShift()))) + 8) - 1))))) {
 			GIV(objStackInvalidBecause) = "myx out of range";
 			GIV(invalidObjStackPage) = objStackPage;
-			return;
+			return 0;
 		}
 		if (!((longAt((GIV(hiddenRootsObj) + BaseHeaderSize) + (((long)myx) << (shiftForWord())))) == objStackPage)) {
 			GIV(objStackInvalidBecause) = "firstPage is not root";
 			GIV(invalidObjStackPage) = objStackPage;
-			return;
+			return 0;
 		}
 	}
 	index = longAt((objStackPage + BaseHeaderSize) + (((long)ObjStackTopx) << (shiftForWord())));
 	if (!(((index >= 0) && (index <= ObjStackLimit)))) {
 		GIV(objStackInvalidBecause) = "bad topx";
 		GIV(invalidObjStackPage) = objStackPage;
-		return;
+		return 0;
 	}
 	freeOrNextPage = longAt((objStackPage + BaseHeaderSize) + (((long)ObjStackNextx) << (shiftForWord())));
 	if (freeOrNextPage == 0) {
-		return;
+		return 1;
 	}
 	if (freeOrNextPage == objStackPage) {
 		GIV(objStackInvalidBecause) = "circularity in objStack page list";
 		GIV(invalidObjStackPage) = objStackPage;
-		return;
+		return 0;
 	}
-	isValidObjStackPagemyIndexfirstPage(freeOrNextPage, myx, 0);
-	return;
+	return isValidObjStackPagemyIndexfirstPage(freeOrNextPage, myx, 0);
 }
 
 
 /*	Answer if the obj stack at objStackRootIndex is valid. */
 
 	/* SpurMemoryManager>>#isValidObjStack: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 isValidObjStack(sqInt objStack)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
 	if (!((addressCouldBeObj(objStack))
 		 && ((numSlotsOfAny(objStack)) == ObjStackPageSlots))) {
 		GIV(objStackInvalidBecause) = "first page not obj or wrong size";
 		GIV(invalidObjStackPage) = objStack;
-		return;
+		return 0;
 	}
-	isValidObjStackPagemyIndexfirstPage(objStack, longAt((objStack + BaseHeaderSize) + (((long)ObjStackMyx) << (shiftForWord()))), 1);
-	return;
+	return isValidObjStackPagemyIndexfirstPage(objStack, longAt((objStack + BaseHeaderSize) + (((long)ObjStackMyx) << (shiftForWord()))), 1);
 }
 
 	/* SpurMemoryManager>>#isWeakFormat: */
@@ -67470,7 +67460,7 @@
     sqInt limit;
     sqInt newEndOfMemory;
     sqInt next;
-    sqInt node;
+    usqInt node;
     usqInt numSlots;
     usqInt numSlots1;
     SpurSegmentInfo *seg;
@@ -67812,7 +67802,7 @@
     usqLong firstSavedBridgeWord;
     sqInt nWritten;
     usqInt pier1;
-    usqInt pier2;
+    sqInt pier2;
     usqLong secondSavedBridgeWord;
 
 	pier1 = (((segment->segSize)) + ((segment->segStart))) - (2 * BaseHeaderSize);
@@ -70853,7 +70843,7 @@
 }
 
 	/* StackInterpreter>>#findHomeForContext: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 findHomeForContext(sqInt aContext)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt closureOrNil;
@@ -70861,19 +70851,18 @@
 
 	if (!(((aContext & (tagMask())) == 0)
 		 && (((longAt(aContext)) & (classIndexMask())) == ClassMethodContextCompactIndex))) {
-		return;
+		return null;
 	}
 	closureOrNil = longAt((aContext + BaseHeaderSize) + (((long)ClosureIndex) << (shiftForWord())));
 	if (closureOrNil == GIV(nilObj)) {
-		return;
+		return aContext;
 	}
 	if (((((tagBits = closureOrNil & (tagMask()))) != 0
 		? longAt((GIV(classTableFirstPage) + BaseHeaderSize) + (((long)tagBits) << (shiftForWord())))
 		: fetchClassOfNonImm(closureOrNil))) != (longAt((GIV(specialObjectsOop) + BaseHeaderSize) + (((long)ClassBlockClosure) << (shiftForWord()))))) {
-		return;
+		return null;
 	}
-	findHomeForContext(longAt((closureOrNil + BaseHeaderSize) + (((long)ClosureOuterContextIndex) << (shiftForWord()))));
-	return;
+	return findHomeForContext(longAt((closureOrNil + BaseHeaderSize) + (((long)ClosureOuterContextIndex) << (shiftForWord()))));
 }
 
 
@@ -70881,9 +70870,13 @@
 	findMethodWithPrimitive:FromFP:SP:ThroughContext: instead of iterative.
 	We're doing the simplest thing that could possibly work. Niceties can
 	wait.  */
+/*	Being mutually-recursive with findMethodWithPrimitive:FromFP:UpToContext:
+	gives the author's type inference algorithm headaches. Wimp out by
+	declaring the return type.
+ */
 
 	/* StackInterpreter>>#findMethodWithPrimitive:FromContext:UpToContext: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 findMethodWithPrimitiveFromContextUpToContext(sqInt primitive, sqInt senderContext, sqInt homeContext)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt callerContextOrNil;
@@ -70906,23 +70899,23 @@
 	theContext = senderContext;
 	while (1) {
 		if (theContext == GIV(nilObj)) {
-			return;
+			return theContext;
 		}
 		if (((((longAt((theContext + BaseHeaderSize) + (((long)SenderIndex) << (shiftForWord()))))) & 7) == 1)) break;
 		if (theContext == homeContext) {
-			return;
+			return 0;
 		}
 		if (!((primitive == 0)
 			 || ((longAt((theContext + BaseHeaderSize) + (((long)ClosureIndex) << (shiftForWord())))) != GIV(nilObj)))) {
 			theMethod = longAt((theContext + BaseHeaderSize) + (((long)MethodIndex) << (shiftForWord())));
 			if ((primitiveIndexOfMethodheader(theMethod, methodHeaderOf(theMethod))) == primitive) {
-				return;
+				return theContext;
 			}
 		}
 		theContext = longAt((theContext + BaseHeaderSize) + (((long)SenderIndex) << (shiftForWord())));
 	}
 	if (isWidowedContext(theContext)) {
-		return;
+		return GIV(nilObj);
 	}
 	/* begin findMethodWithPrimitive:FromFP:UpToContext: */
 	senderOop = longAt((theContext + BaseHeaderSize) + (((long)SenderIndex) << (shiftForWord())));
@@ -70936,7 +70929,7 @@
 			? ((longAt(theFP + FoxMethod)) & MFMethodFlagHasContextFlag) != 0
 			: (byteAt((theFP + FoxIFrameFlags) + 2)) != 0))
 		 && (homeContext == (longAt(theFP + FoxThisContext)))) {
-			return;
+			return 0;
 		}
 		if (!((primitive == 0)
 			 || (((((usqInt)(longAt(theFP + FoxMethod)))) < (startOfMemory())
@@ -70961,11 +70954,9 @@
 					? ((longAt(theFP + FoxMethod)) & MFMethodFlagHasContextFlag) != 0
 					: (byteAt((theFP + FoxIFrameFlags) + 2)) != 0)) {
 					assert(isContext(frameContext(theFP)));
-					longAt(theFP + FoxThisContext);
-					return;
+					return longAt(theFP + FoxThisContext);
 				}
-				marryFrameSP(theFP, theSP);
-				return;
+				return marryFrameSP(theFP, theSP);
 			}
 		}
 		theFPAbove = theFP;
@@ -70984,10 +70975,9 @@
 	senderContext1 = callerContextOrNil;
 	if (!(((senderContext1 & (tagMask())) == 0)
 		 && (((longAt(senderContext1)) & (classIndexMask())) == ClassMethodContextCompactIndex))) {
-		return;
+		return GIV(nilObj);
 	}
-	findMethodWithPrimitiveFromContextUpToContext(primitive, senderContext1, homeContext);
-	return;
+	return findMethodWithPrimitiveFromContextUpToContext(primitive, senderContext1, homeContext);
 }
 
 	/* StackInterpreter>>#findSelectorOfMethod: */
@@ -72414,7 +72404,7 @@
 }
 
 	/* StackInterpreter>>#lengthOfNameOfClass: */
-static void NoDbgRegParms
+static sqInt NoDbgRegParms
 lengthOfNameOfClass(sqInt classOop)
 {   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt fmt;
@@ -72432,11 +72422,10 @@
 		? ((usqInt) (((unsigned long)(((long)(longAt(classOop - BaseHeaderSize))) << 8)))) >> 8
 		: numSlots1);
 	if (numSlots == GIV(metaclassNumSlots)) {
-		lengthOfNameOfClass(longAt((classOop + BaseHeaderSize) + (((long)GIV(thisClassIndex)) << (shiftForWord()))));
-		return;
+		return lengthOfNameOfClass(longAt((classOop + BaseHeaderSize) + (((long)GIV(thisClassIndex)) << (shiftForWord()))));
 	}
 	if (numSlots <= GIV(classNameIndex)) {
-		return;
+		return 0;
 	}
 	/* begin lengthOf: */
 	objOop = longAt((classOop + BaseHeaderSize) + (((long)GIV(classNameIndex)) << (shiftForWord())));

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list