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. @@
vm-dev@lists.squeakfoundation.org