[Vm-dev] [commit][3154] CogVM source as per VMMaker.oscog-eem.957

commits at squeakvm.org commits at squeakvm.org
Fri Nov 28 00:08:52 UTC 2014


Revision: 3154
Author:   eliot
Date:     2014-11-27 16:08:50 -0800 (Thu, 27 Nov 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.957

Fix regression in magnitude64BitIntegerFor:neg:

Move dispdbg.h above cointerp.h & cogit.h in cogit.c
otherwise NoDbgRegParms gets screwed up.

Use asInteger instead of asUnsignedInteger
in followForwardingPointersInStackZone: so
simulation of Stack VM doesn't trigger the assert in asUnsignedInteger.

Spur:
Make instantiateClass:indexableSize: check for Float instantiation, failing for
other than 2 words.  Rewrite 32-bit coalesce:and: to use the raw slot accessors.
Implement 64-bit coalesce:and:.

Make printStackCallStackOf: accept contexts.

Fix compilation warnings in SqueakFFIPrims.

Nuke obsolete AddSmallFloat.st

Modified Paths:
--------------
    branches/Cog/image/buildspurtrunkimage.sh
    branches/Cog/nscogsrc/vm/cogit.c
    branches/Cog/nscogsrc/vm/cogit.h
    branches/Cog/nscogsrc/vm/cointerp.c
    branches/Cog/nscogsrc/vm/cointerp.h
    branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspursrc/vm/cogit.c
    branches/Cog/nsspursrc/vm/cogit.h
    branches/Cog/nsspursrc/vm/cointerp.c
    branches/Cog/nsspursrc/vm/cointerp.h
    branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
    branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
    branches/Cog/nsspurstacksrc/vm/interp.c
    branches/Cog/sistasrc/vm/cogit.c
    branches/Cog/sistasrc/vm/cogit.h
    branches/Cog/sistasrc/vm/cointerp.c
    branches/Cog/sistasrc/vm/cointerp.h
    branches/Cog/sistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursistasrc/vm/cogit.c
    branches/Cog/spursistasrc/vm/cogit.h
    branches/Cog/spursistasrc/vm/cointerp.c
    branches/Cog/spursistasrc/vm/cointerp.h
    branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
    branches/Cog/spursrc/vm/cogit.c
    branches/Cog/spursrc/vm/cogit.h
    branches/Cog/spursrc/vm/cointerp.c
    branches/Cog/spursrc/vm/cointerp.h
    branches/Cog/spursrc/vm/gcc3x-cointerp.c
    branches/Cog/spurstacksrc/vm/gcc3x-interp.c
    branches/Cog/spurstacksrc/vm/interp.c
    branches/Cog/src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c
    branches/Cog/src/plugins/SqueakFFIPrims/IA32FFIPlugin.c
    branches/Cog/src/vm/cogit.c
    branches/Cog/src/vm/cogit.h
    branches/Cog/src/vm/cointerp.c
    branches/Cog/src/vm/cointerp.h
    branches/Cog/src/vm/cointerpmt.c
    branches/Cog/src/vm/cointerpmt.h
    branches/Cog/src/vm/gcc3x-cointerp.c
    branches/Cog/src/vm/gcc3x-cointerpmt.c
    branches/Cog/stacksrc/vm/gcc3x-interp.c
    branches/Cog/stacksrc/vm/interp.c

Removed Paths:
-------------
    branches/Cog/image/AddSmallFloat.st

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

Deleted: branches/Cog/image/AddSmallFloat.st
===================================================================
--- branches/Cog/image/AddSmallFloat.st	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/image/AddSmallFloat.st	2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,55 +0,0 @@
-Number subclass: #LimitedPrecisionReal
-	instanceVariableNames: ''
-	classVariableNames: ''
-	poolDictionaries: ''
-	category: 'Kernel-Numbers'.
-
-LimitedPrecisionReal immediateSubclass: #SmallFloat
-	instanceVariableNames: ''
-	classVariableNames: ''
-	poolDictionaries: ''
-	category: 'Kernel-Numbers'.
-
-Float superclass: LimitedPrecisionReal.
-Float class superclass: LimitedPrecisionReal class.
-Number removeSubclass: Float.
-Number class removeSubclass: Float class.
-LimitedPrecisionReal addSubclass: Float.
-LimitedPrecisionReal class addSubclass: Float class.
-
-LimitedPrecisionReal ensureClassPool.
-Float classPool keys do:
-	[:key|
-	LimitedPrecisionReal classPool declare: key from: Float classPool].
-
-Float selectors do:
-	[:s| | m |
-	m := Float >> s.
-	(((#(0 38 39) includes: m primitive) or: [m isQuick])
-	 and: [m protocol ~~ #copying]) ifTrue:
-		[LimitedPrecisionReal methodDict at: s put: m.
-		 Float methodDict removeKey: s.
-		 m methodClassAssociation: LimitedPrecisionReal binding]].
-
-SystemChangeNotifier uniqueInstance doSilently:
-	[LimitedPrecisionReal organization changeFromString: Float organization printString.
-	LimitedPrecisionReal selectors do:
-		[:s|
-		LimitedPrecisionReal organization classify: s under: (Float organization categoryOfElement: s).
-		Float organization removeElement: s].
-	LimitedPrecisionReal organization removeEmptyCategories.
-	Float organization removeEmptyCategories].
-
-Float selectors do:
-	[:s| | m src |
-	m := Float >> s.
-	m primitive > 0 ifTrue:
-		[src := (Float sourceCodeAt: s) asString.
-		 src := src copyReplaceAll: '<primitive: ' with: '<primitive: 5'.
-		 SmallFloat compile: src classified: m protocol]].
-
-(SmallInteger organization listAtCategoryNamed: #copying) do:
-	[:s|
-	SmallFloat compile: (SmallInteger sourceCodeAt: s) asString classified: #copying].
-
-Smalltalk snapshot: true andQuit: true
Modified: branches/Cog/image/buildspurtrunkimage.sh
===================================================================
--- branches/Cog/image/buildspurtrunkimage.sh	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/image/buildspurtrunkimage.sh	2014-11-28 00:08:50 UTC (rev 3154)
@@ -21,7 +21,7 @@
 IMAGE=""
 GOTIMAGE=""
 while true; do
-	for f in *VMMaker*spur.image; do
+	for f in *VMMaker*spur.image SpurVMMaker.image; do
 		if test -f "$f"; then
 			IMAGE="$f"
 .			./getGoodSpurVM.sh

Modified: branches/Cog/nscogsrc/vm/cogit.c
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.c	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nscogsrc/vm/cogit.c	2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.933 uuid: 5a37067c-b76b-4ada-9399-1de11632acd8
+	CCodeGenerator VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.933 uuid: 5a37067c-b76b-4ada-9399-1de11632acd8
+	StackToRegisterMappingCogit VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.933 uuid: 5a37067c-b76b-4ada-9399-1de11632acd8 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -11,6 +11,7 @@
 #include <stddef.h>
 #include "sq.h"
 #include "sqCogStackAlignment.h"
+#include "dispdbg.h"
 #include "cogmethod.h"
 #if COGMTVM
 #include "cointerpmt.h"
@@ -18,7 +19,6 @@
 #include "cointerp.h"
 #endif
 #include "cogit.h"
-#include "dispdbg.h"
 
 typedef struct _AbstractInstruction {
 	char	opcode;

Modified: branches/Cog/nscogsrc/vm/cogit.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.h	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nscogsrc/vm/cogit.h	2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.933 uuid: 5a37067c-b76b-4ada-9399-1de11632acd8
+	CCodeGenerator VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
 
 

Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nscogsrc/vm/cointerp.c	2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
    from
-	CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1205,7 +1205,7 @@
 void printOop(sqInt oop);
 void printProcessStack(sqInt aProcess);
 sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
 void printStackPageList(void);
 void printStackPageListInUse(void);
 void printStackPages(void);
@@ -2093,7 +2093,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.957";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -19149,13 +19149,13 @@
     sqInt classArrayClass;
     sqInt classArrayObj;
     size_t dataSize;
-    long firstSegSize;
+    sqInt firstSegSize;
     sqInt hdrCogCodeSize;
     sqInt hdrEdenBytes;
     sqInt hdrMaxExtSemTabSize;
     sqInt hdrNumStackPages;
     sqInt header;
-    long headerFlags;
+    sqInt headerFlags;
     sqInt headerSize;
     squeakFileOffsetType headerStart;
     usqInt heapSize;
@@ -19172,7 +19172,7 @@
     sqInt memEnd;
     sqInt memLimit;
     usqInt minimumMemory;
-    long oldBaseAddr;
+    sqInt oldBaseAddr;
     sqInt oop;
     sqInt swapBytes;
     sqInt sz;
@@ -19212,9 +19212,9 @@
 	/* begin getLongFromFile:swap: */
 	w1 = 0;
 	sqImageFileRead((&w1), sizeof(long), 1, f);
-	dataSize = ((long) ((swapBytes
-	? byteSwapped(w1)
-	: w1)));
+	dataSize = (swapBytes
+		? byteSwapped(w1)
+		: w1);
 	/* begin getLongFromFile:swap: */
 	w2 = 0;
 	sqImageFileRead((&w2), sizeof(long), 1, f);
@@ -19225,24 +19225,24 @@
 	/* begin getLongFromFile:swap: */
 	w11 = 0;
 	sqImageFileRead((&w11), sizeof(long), 1, f);
-	anObject = ((long) ((swapBytes
-	? byteSwapped(w11)
-	: w11)));
+	anObject = (swapBytes
+		? byteSwapped(w11)
+		: w11);
 	GIV(specialObjectsOop) = anObject;
 	/* begin lastHash: */
 	/* begin getLongFromFile:swap: */
 	w12 = 0;
 	sqImageFileRead((&w12), sizeof(long), 1, f);
-	aValue = ((long) ((swapBytes
-	? byteSwapped(w12)
-	: w12)));
+	aValue = (swapBytes
+		? byteSwapped(w12)
+		: w12);
 	lastHash = aValue;
 	/* begin getLongFromFile:swap: */
 	w3 = 0;
 	sqImageFileRead((&w3), sizeof(long), 1, f);
-	GIV(savedWindowSize) = ((long) ((swapBytes
-	? byteSwapped(w3)
-	: w3)));
+	GIV(savedWindowSize) = (swapBytes
+		? byteSwapped(w3)
+		: w3);
 	/* begin getLongFromFile:swap: */
 	w4 = 0;
 	sqImageFileRead((&w4), sizeof(long), 1, f);
@@ -23012,8 +23012,8 @@
     sqInt sz;
 
 	isSmall = (isNegative
-		? magnitude < (MaxSmallInteger)
-		: magnitude < ((MaxSmallInteger) + 1));
+		? magnitude <= ((MaxSmallInteger) + 1)
+		: magnitude <= (MaxSmallInteger));
 	if (isSmall) {
 		smallVal = ((sqInt) magnitude);
 		if (isNegative) {
@@ -50249,12 +50249,23 @@
 }
 
 sqInt
-printStackCallStackOf(char *aFramePointer)
-{
+printStackCallStackOf(sqInt frameOrContext)
+{   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt context;
     char *theFP;
 
-	theFP = aFramePointer;
+	if (((frameOrContext & 3) == 0)
+	 && (((((usqInt)frameOrContext)) >= (startOfMemory()))
+	 && (((((usqInt)frameOrContext)) < GIV(freeStart))
+	 && (((longAt(frameOrContext)) & TypeMask) != HeaderTypeGC)))) {
+		if ((((frameOrContext & 1) == 0)
+		 && (((((usqInt) (longAt(frameOrContext))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex))
+		 && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+			return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+		}
+		return null;
+	}
+	theFP = ((void *)frameOrContext);
 	while(1) {
 		context = shortReversePrintFrameAndCallers(theFP);
 		if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))

Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nscogsrc/vm/cointerp.h	2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
 
 
@@ -251,7 +251,7 @@
 void printMethodDictionary(sqInt dictionary);
 void printProcessStack(sqInt aProcess);
 sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
 void print(char *s);
 void setBreakSelector(char *aString);
 void setNextWakeupUsecs(usqLong value);

Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c	2014-11-28 00:08:50 UTC (rev 3154)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
    from
-	CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -1208,7 +1208,7 @@
 void printOop(sqInt oop);
 void printProcessStack(sqInt aProcess);
 sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
 void printStackPageList(void);
 void printStackPageListInUse(void);
 void printStackPages(void);
@@ -2096,7 +2096,7 @@
 	/* 574 */ (void (*)(void))0,
 	/* 575 */ (void (*)(void))0,
  0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.957";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -19158,13 +19158,13 @@
     sqInt classArrayClass;
     sqInt classArrayObj;
     size_t dataSize;
-    long firstSegSize;
+    sqInt firstSegSize;
     sqInt hdrCogCodeSize;
     sqInt hdrEdenBytes;
     sqInt hdrMaxExtSemTabSize;
     sqInt hdrNumStackPages;
     sqInt header;
-    long headerFlags;
+    sqInt headerFlags;
     sqInt headerSize;
     squeakFileOffsetType headerStart;
     usqInt heapSize;
@@ -19181,7 +19181,7 @@
     sqInt memEnd;
     sqInt memLimit;
     usqInt minimumMemory;
-    long oldBaseAddr;
+    sqInt oldBaseAddr;
     sqInt oop;
     sqInt swapBytes;
     sqInt sz;
@@ -19221,9 +19221,9 @@
 	/* begin getLongFromFile:swap: */
 	w1 = 0;
 	sqImageFileRead((&w1), sizeof(long), 1, f);
-	dataSize = ((long) ((swapBytes
-	? byteSwapped(w1)
-	: w1)));
+	dataSize = (swapBytes
+		? byteSwapped(w1)
+		: w1);
 	/* begin getLongFromFile:swap: */
 	w2 = 0;
 	sqImageFileRead((&w2), sizeof(long), 1, f);
@@ -19234,24 +19234,24 @@
 	/* begin getLongFromFile:swap: */
 	w11 = 0;
 	sqImageFileRead((&w11), sizeof(long), 1, f);
-	anObject = ((long) ((swapBytes
-	? byteSwapped(w11)
-	: w11)));
+	anObject = (swapBytes
+		? byteSwapped(w11)
+		: w11);
 	GIV(specialObjectsOop) = anObject;
 	/* begin lastHash: */
 	/* begin getLongFromFile:swap: */
 	w12 = 0;
 	sqImageFileRead((&w12), sizeof(long), 1, f);
-	aValue = ((long) ((swapBytes
-	? byteSwapped(w12)
-	: w12)));
+	aValue = (swapBytes
+		? byteSwapped(w12)
+		: w12);
 	lastHash = aValue;
 	/* begin getLongFromFile:swap: */
 	w3 = 0;
 	sqImageFileRead((&w3), sizeof(long), 1, f);
-	GIV(savedWindowSize) = ((long) ((swapBytes
-	? byteSwapped(w3)
-	: w3)));
+	GIV(savedWindowSize) = (swapBytes
+		? byteSwapped(w3)
+		: w3);
 	/* begin getLongFromFile:swap: */
 	w4 = 0;
 	sqImageFileRead((&w4), sizeof(long), 1, f);
@@ -23021,8 +23021,8 @@
     sqInt sz;
 
 	isSmall = (isNegative
-		? magnitude < (MaxSmallInteger)
-		: magnitude < ((MaxSmallInteger) + 1));
+		? magnitude <= ((MaxSmallInteger) + 1)
+		: magnitude <= (MaxSmallInteger));
 	if (isSmall) {
 		smallVal = ((sqInt) magnitude);
 		if (isNegative) {
@@ -50258,12 +50258,23 @@
 }
 
 sqInt
-printStackCallStackOf(char *aFramePointer)
-{
+printStackCallStackOf(sqInt frameOrContext)
+{   DECL_MAYBE_SQ_GLOBAL_STRUCT
     sqInt context;
     char *theFP;
 
-	theFP = aFramePointer;
+	if (((frameOrContext & 3) == 0)
+	 && (((((usqInt)frameOrContext)) >= (startOfMemory()))
+	 && (((((usqInt)frameOrContext)) < GIV(freeStart))
+	 && (((longAt(frameOrContext)) & TypeMask) != HeaderTypeGC)))) {
+		if ((((frameOrContext & 1) == 0)
+		 && (((((usqInt) (longAt(frameOrContext))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex))
+		 && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+			return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+		}
+		return null;
+	}
+	theFP = ((void *)frameOrContext);
 	while(1) {
 		context = shortReversePrintFrameAndCallers(theFP);
 		if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))

Modified: branches/Cog/nsspursrc/vm/cogit.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.c	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspursrc/vm/cogit.c	2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.935 uuid: e1096b9f-e01b-4709-b369-18563b884832
+	CCodeGenerator VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
    from
-	StackToRegisterMappingCogit VMMaker.oscog-eem.935 uuid: e1096b9f-e01b-4709-b369-18563b884832
+	StackToRegisterMappingCogit VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.935 uuid: e1096b9f-e01b-4709-b369-18563b884832 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
 char *__cogitBuildInfo = __buildInfo;
 
 
@@ -11,6 +11,7 @@
 #include <stddef.h>
 #include "sq.h"
 #include "sqCogStackAlignment.h"
+#include "dispdbg.h"
 #include "cogmethod.h"
 #if COGMTVM
 #include "cointerpmt.h"
@@ -18,7 +19,6 @@
 #include "cointerp.h"
 #endif
 #include "cogit.h"
-#include "dispdbg.h"
 
 typedef struct _AbstractInstruction {
 	char	opcode;

Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspursrc/vm/cogit.h	2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGenerator VMMaker.oscog-eem.935 uuid: e1096b9f-e01b-4709-b369-18563b884832
+	CCodeGenerator VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
 
 

Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspursrc/vm/cointerp.c	2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
    from
-	CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -139,7 +139,6 @@
 #define BecameActiveClassFlag 8
 #define BecameCompiledMethodFlag 2
 #define BecamePointerObjectFlag 1
-#define BitsPerByte 8
 #define Byte0Mask 0xFF
 #define Byte1Mask 0xFF00
 #define Byte1Shift 8
@@ -1393,7 +1392,7 @@
 void printOop(sqInt oop);
 void printProcessStack(sqInt aProcess);
 sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
 void printStackPageList(void);
 void printStackPageListInUse(void);
 void printStackPages(void);
@@ -2343,7 +2342,7 @@
 /*540*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
 /*560*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
 	};
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.957";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -23476,12 +23475,12 @@
     sqInt classTablePage;
     size_t dataSize;
     sqInt edenBytes;
-    long firstSegSize;
+    sqInt firstSegSize;
     sqInt hdrCogCodeSize;
     sqInt hdrEdenBytes;
     sqInt hdrMaxExtSemTabSize;
     sqInt hdrNumStackPages;
-    long headerFlags;
+    sqInt headerFlags;
     sqInt headerSize;
     squeakFileOffsetType headerStart;
     usqInt heapSize;
@@ -23500,7 +23499,7 @@
     usqInt minimumMemory;
     usqInt numSlots;
     sqInt objOop;
-    long oldBaseAddr;
+    sqInt oldBaseAddr;
     sqInt oldStart;
     sqInt oop;
     sqInt p;
@@ -23543,9 +23542,9 @@
 	/* begin getLongFromFile:swap: */
 	w1 = 0;
 	sqImageFileRead((&w1), sizeof(long), 1, f);
-	dataSize = ((long) ((swapBytes
-	? ((((((usqInt) w1 >> 24)) & Byte0Mask) + ((((usqInt) w1 >> 8)) & Byte1Mask)) + ((((usqInt) w1 << 8)) & Byte2Mask)) + ((((usqInt) w1 << 24)) & Byte3Mask)
-	: w1)));
+	dataSize = (swapBytes
+		? ((((((usqInt) w1 >> 24)) & Byte0Mask) + ((((usqInt) w1 >> 8)) & Byte1Mask)) + ((((usqInt) w1 << 8)) & Byte2Mask)) + ((((usqInt) w1 << 24)) & Byte3Mask)
+		: w1);
 	/* begin getLongFromFile:swap: */
 	w2 = 0;
 	sqImageFileRead((&w2), sizeof(long), 1, f);
@@ -23556,24 +23555,24 @@
 	/* begin getLongFromFile:swap: */
 	w3 = 0;
 	sqImageFileRead((&w3), sizeof(long), 1, f);
-	anObject = ((long) ((swapBytes
-	? ((((((usqInt) w3 >> 24)) & Byte0Mask) + ((((usqInt) w3 >> 8)) & Byte1Mask)) + ((((usqInt) w3 << 8)) & Byte2Mask)) + ((((usqInt) w3 << 24)) & Byte3Mask)
-	: w3)));
+	anObject = (swapBytes
+		? ((((((usqInt) w3 >> 24)) & Byte0Mask) + ((((usqInt) w3 >> 8)) & Byte1Mask)) + ((((usqInt) w3 << 8)) & Byte2Mask)) + ((((usqInt) w3 << 24)) & Byte3Mask)
+		: w3);
 	GIV(specialObjectsOop) = anObject;
 	/* begin lastHash: */
 	/* begin getLongFromFile:swap: */
 	w4 = 0;
 	sqImageFileRead((&w4), sizeof(long), 1, f);
-	seed = ((long) ((swapBytes
-	? ((((((usqInt) w4 >> 24)) & Byte0Mask) + ((((usqInt) w4 >> 8)) & Byte1Mask)) + ((((usqInt) w4 << 8)) & Byte2Mask)) + ((((usqInt) w4 << 24)) & Byte3Mask)
-	: w4)));
+	seed = (swapBytes
+		? ((((((usqInt) w4 >> 24)) & Byte0Mask) + ((((usqInt) w4 >> 8)) & Byte1Mask)) + ((((usqInt) w4 << 8)) & Byte2Mask)) + ((((usqInt) w4 << 24)) & Byte3Mask)
+		: w4);
 	GIV(lastHash) = seed;
 	/* begin getLongFromFile:swap: */
 	w5 = 0;
 	sqImageFileRead((&w5), sizeof(long), 1, f);
-	GIV(savedWindowSize) = ((long) ((swapBytes
-	? ((((((usqInt) w5 >> 24)) & Byte0Mask) + ((((usqInt) w5 >> 8)) & Byte1Mask)) + ((((usqInt) w5 << 8)) & Byte2Mask)) + ((((usqInt) w5 << 24)) & Byte3Mask)
-	: w5)));
+	GIV(savedWindowSize) = (swapBytes
+		? ((((((usqInt) w5 >> 24)) & Byte0Mask) + ((((usqInt) w5 >> 8)) & Byte1Mask)) + ((((usqInt) w5 << 8)) & Byte2Mask)) + ((((usqInt) w5 << 24)) & Byte3Mask)
+		: w5);
 	/* begin getLongFromFile:swap: */
 	w6 = 0;
 	sqImageFileRead((&w6), sizeof(long), 1, f);
@@ -27804,8 +27803,8 @@
     sqInt sz;
 
 	isSmall = (isNegative
-		? magnitude < (MaxSmallInteger)
-		: magnitude < ((MaxSmallInteger) + 1));
+		? magnitude <= ((MaxSmallInteger) + 1)
+		: magnitude <= (MaxSmallInteger));
 	if (isSmall) {
 		smallVal = ((sqInt) magnitude);
 		if (isNegative) {
@@ -40817,48 +40816,40 @@
 
 	classFormat = ((longAt((classObj + BaseHeaderSize) + (InstanceSpecificationIndex << (shiftForWord())))) >> 1);
 	instSpec = (((usqInt) classFormat) >> 16) & 0x1F;
+	classIndex = (long32At(classObj + 4)) & 0x3FFFFF;
 	fillValue = 0;
 	
 	switch (instSpec) {
 	case 2:
-		if (nElements > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		numSlots = nElements;
 		fillValue = GIV(nilObj);
 		break;
 	case 3:
 	case 4:
-		if (nElements > ((((512 * 1024) * 1024) - 1) - (classFormat & ((1 << 16) - 1)))) {
-			return null;
-		}
 		numSlots = (classFormat & ((1 << 16) - 1)) + nElements;
 		fillValue = GIV(nilObj);
 		break;
 	case 9:
 		if (nElements > ((((512 * 1024) * 1024) - 1) / 2)) {
+			GIV(primFailCode) = PrimErrUnsupported;
 			return null;
 		}
 		numSlots = nElements * 2;
 		break;
 	case 10:
-		if (nElements > (((512 * 1024) * 1024) - 1)) {
+		if ((classIndex == ClassFloatCompactIndex)
+		 && (nElements != 2)) {
+			GIV(primFailCode) = PrimErrBadReceiver;
 			return null;
 		}
 		numSlots = nElements;
 		break;
 	case 12:
 		numSlots = (nElements + 1) / 2;
-		if (numSlots > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		instSpec += nElements & 1;
 		break;
 	case 16:
 		numSlots = (nElements + 3) / 4;
-		if (numSlots > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		instSpec += (4 - nElements) & 3;
 		break;
 	default:
@@ -40874,23 +40865,29 @@
 		numSlots = classFormat & ((1 << 16) - 1);
 
 	}
-	/* begin ensureBehaviorHash: */
-	assert(addressCouldBeClassObj(classObj));
-	if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
-		if (((err = enterIntoClassTable(classObj))) != 0) {
-			classIndex = -err;
-			goto l2;
+	if (classIndex == 0) {
+		/* begin ensureBehaviorHash: */
+		assert(addressCouldBeClassObj(classObj));
+		if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+			if (((err = enterIntoClassTable(classObj))) != 0) {
+				classIndex = -err;
+				goto l1;
+			}
+			newHash = (long32At(classObj + 4)) & 0x3FFFFF;
+			assert((classAtIndex(newHash)) == classObj);
 		}
-		newHash = (long32At(classObj + 4)) & 0x3FFFFF;
-		assert((classAtIndex(newHash)) == classObj);
+		classIndex = newHash;
+	l1:	/* end ensureBehaviorHash: */;
+		if (classIndex < 0) {
+			GIV(primFailCode) = -classIndex;
+			return null;
+		}
 	}
-	classIndex = newHash;
-l2:	/* end ensureBehaviorHash: */;
-	if (classIndex < 0) {
-		GIV(primFailCode) = -classIndex;
-		return null;
-	}
 	if (numSlots > ((1 << 16) - 1)) {
+		if (numSlots > (((512 * 1024) * 1024) - 1)) {
+			GIV(primFailCode) = PrimErrUnsupported;
+			return null;
+		}
 		newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, ((numSlots == 0
 	? 8
 	: (numSlots + (numSlots & 1)) << (shiftForWord()))) + ((numSlots >= 0xFF
@@ -40916,7 +40913,7 @@
 				forceInterruptCheck();
 			}
 			newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, numBytes, instSpec, classIndex);
-			goto l1;
+			goto l2;
 		}
 		if (numSlots >= 0xFF) {
 
@@ -40934,7 +40931,7 @@
 		assert((newObj1 % (allocationUnit())) == 0);
 		GIV(freeStart) += numBytes;
 		newObj = newObj1;
-	l1:	/* end allocateSlots:format:classIndex: */;
+	l2:	/* end allocateSlots:format:classIndex: */;
 	}
 	if (!(newObj == null)) {
 		/* begin fillObj:numSlots:with: */
@@ -48486,7 +48483,7 @@
 
 				newNumSlots = obj2slots + header1NumSlots;
 				if (newNumSlots < 0xFF) {
-					byteAtput(here1 + (56 / BitsPerByte), newNumSlots);
+					byteAtput(here1 + 7, newNumSlots);
 					here1 = here1;
 					goto l2;
 				}
@@ -70596,12 +70593,20 @@
 }
 
 sqInt
-printStackCallStackOf(char *aFramePointer)
+printStackCallStackOf(sqInt frameOrContext)
 {
     sqInt context;
     char *theFP;
 
-	theFP = aFramePointer;
+	if (addressCouldBeObj(frameOrContext)) {
+		if ((((frameOrContext & 3) == 0)
+		 && (((longAt(frameOrContext)) & 0x3FFFFF) == ClassMethodContextCompactIndex))
+		 && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+			return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+		}
+		return null;
+	}
+	theFP = ((void *)frameOrContext);
 	while(1) {
 		context = shortReversePrintFrameAndCallers(theFP);
 		if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))

Modified: branches/Cog/nsspursrc/vm/cointerp.h
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.h	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspursrc/vm/cointerp.h	2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,5 +1,5 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
 
 
@@ -299,7 +299,7 @@
 void printMethodDictionary(sqInt dictionary);
 void printProcessStack(sqInt aProcess);
 sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
 void print(char *s);
 void setBreakSelector(char *aString);
 void setNextWakeupUsecs(usqLong value);

Modified: branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/gcc3x-cointerp.c	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspursrc/vm/gcc3x-cointerp.c	2014-11-28 00:08:50 UTC (rev 3154)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
    from
-	CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -142,7 +142,6 @@
 #define BecameActiveClassFlag 8
 #define BecameCompiledMethodFlag 2
 #define BecamePointerObjectFlag 1
-#define BitsPerByte 8
 #define Byte0Mask 0xFF
 #define Byte1Mask 0xFF00
 #define Byte1Shift 8
@@ -1396,7 +1395,7 @@
 void printOop(sqInt oop);
 void printProcessStack(sqInt aProcess);
 sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
 void printStackPageList(void);
 void printStackPageListInUse(void);
 void printStackPages(void);
@@ -2346,7 +2345,7 @@
 /*540*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
 /*560*/	-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
 	};
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.957";
 sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
 volatile int sendTrace;
 
@@ -23485,12 +23484,12 @@
     sqInt classTablePage;
     size_t dataSize;
     sqInt edenBytes;
-    long firstSegSize;
+    sqInt firstSegSize;
     sqInt hdrCogCodeSize;
     sqInt hdrEdenBytes;
     sqInt hdrMaxExtSemTabSize;
     sqInt hdrNumStackPages;
-    long headerFlags;
+    sqInt headerFlags;
     sqInt headerSize;
     squeakFileOffsetType headerStart;
     usqInt heapSize;
@@ -23509,7 +23508,7 @@
     usqInt minimumMemory;
     usqInt numSlots;
     sqInt objOop;
-    long oldBaseAddr;
+    sqInt oldBaseAddr;
     sqInt oldStart;
     sqInt oop;
     sqInt p;
@@ -23552,9 +23551,9 @@
 	/* begin getLongFromFile:swap: */
 	w1 = 0;
 	sqImageFileRead((&w1), sizeof(long), 1, f);
-	dataSize = ((long) ((swapBytes
-	? ((((((usqInt) w1 >> 24)) & Byte0Mask) + ((((usqInt) w1 >> 8)) & Byte1Mask)) + ((((usqInt) w1 << 8)) & Byte2Mask)) + ((((usqInt) w1 << 24)) & Byte3Mask)
-	: w1)));
+	dataSize = (swapBytes
+		? ((((((usqInt) w1 >> 24)) & Byte0Mask) + ((((usqInt) w1 >> 8)) & Byte1Mask)) + ((((usqInt) w1 << 8)) & Byte2Mask)) + ((((usqInt) w1 << 24)) & Byte3Mask)
+		: w1);
 	/* begin getLongFromFile:swap: */
 	w2 = 0;
 	sqImageFileRead((&w2), sizeof(long), 1, f);
@@ -23565,24 +23564,24 @@
 	/* begin getLongFromFile:swap: */
 	w3 = 0;
 	sqImageFileRead((&w3), sizeof(long), 1, f);
-	anObject = ((long) ((swapBytes
-	? ((((((usqInt) w3 >> 24)) & Byte0Mask) + ((((usqInt) w3 >> 8)) & Byte1Mask)) + ((((usqInt) w3 << 8)) & Byte2Mask)) + ((((usqInt) w3 << 24)) & Byte3Mask)
-	: w3)));
+	anObject = (swapBytes
+		? ((((((usqInt) w3 >> 24)) & Byte0Mask) + ((((usqInt) w3 >> 8)) & Byte1Mask)) + ((((usqInt) w3 << 8)) & Byte2Mask)) + ((((usqInt) w3 << 24)) & Byte3Mask)
+		: w3);
 	GIV(specialObjectsOop) = anObject;
 	/* begin lastHash: */
 	/* begin getLongFromFile:swap: */
 	w4 = 0;
 	sqImageFileRead((&w4), sizeof(long), 1, f);
-	seed = ((long) ((swapBytes
-	? ((((((usqInt) w4 >> 24)) & Byte0Mask) + ((((usqInt) w4 >> 8)) & Byte1Mask)) + ((((usqInt) w4 << 8)) & Byte2Mask)) + ((((usqInt) w4 << 24)) & Byte3Mask)
-	: w4)));
+	seed = (swapBytes
+		? ((((((usqInt) w4 >> 24)) & Byte0Mask) + ((((usqInt) w4 >> 8)) & Byte1Mask)) + ((((usqInt) w4 << 8)) & Byte2Mask)) + ((((usqInt) w4 << 24)) & Byte3Mask)
+		: w4);
 	GIV(lastHash) = seed;
 	/* begin getLongFromFile:swap: */
 	w5 = 0;
 	sqImageFileRead((&w5), sizeof(long), 1, f);
-	GIV(savedWindowSize) = ((long) ((swapBytes
-	? ((((((usqInt) w5 >> 24)) & Byte0Mask) + ((((usqInt) w5 >> 8)) & Byte1Mask)) + ((((usqInt) w5 << 8)) & Byte2Mask)) + ((((usqInt) w5 << 24)) & Byte3Mask)
-	: w5)));
+	GIV(savedWindowSize) = (swapBytes
+		? ((((((usqInt) w5 >> 24)) & Byte0Mask) + ((((usqInt) w5 >> 8)) & Byte1Mask)) + ((((usqInt) w5 << 8)) & Byte2Mask)) + ((((usqInt) w5 << 24)) & Byte3Mask)
+		: w5);
 	/* begin getLongFromFile:swap: */
 	w6 = 0;
 	sqImageFileRead((&w6), sizeof(long), 1, f);
@@ -27813,8 +27812,8 @@
     sqInt sz;
 
 	isSmall = (isNegative
-		? magnitude < (MaxSmallInteger)
-		: magnitude < ((MaxSmallInteger) + 1));
+		? magnitude <= ((MaxSmallInteger) + 1)
+		: magnitude <= (MaxSmallInteger));
 	if (isSmall) {
 		smallVal = ((sqInt) magnitude);
 		if (isNegative) {
@@ -40826,48 +40825,40 @@
 
 	classFormat = ((longAt((classObj + BaseHeaderSize) + (InstanceSpecificationIndex << (shiftForWord())))) >> 1);
 	instSpec = (((usqInt) classFormat) >> 16) & 0x1F;
+	classIndex = (long32At(classObj + 4)) & 0x3FFFFF;
 	fillValue = 0;
 	
 	switch (instSpec) {
 	case 2:
-		if (nElements > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		numSlots = nElements;
 		fillValue = GIV(nilObj);
 		break;
 	case 3:
 	case 4:
-		if (nElements > ((((512 * 1024) * 1024) - 1) - (classFormat & ((1 << 16) - 1)))) {
-			return null;
-		}
 		numSlots = (classFormat & ((1 << 16) - 1)) + nElements;
 		fillValue = GIV(nilObj);
 		break;
 	case 9:
 		if (nElements > ((((512 * 1024) * 1024) - 1) / 2)) {
+			GIV(primFailCode) = PrimErrUnsupported;
 			return null;
 		}
 		numSlots = nElements * 2;
 		break;
 	case 10:
-		if (nElements > (((512 * 1024) * 1024) - 1)) {
+		if ((classIndex == ClassFloatCompactIndex)
+		 && (nElements != 2)) {
+			GIV(primFailCode) = PrimErrBadReceiver;
 			return null;
 		}
 		numSlots = nElements;
 		break;
 	case 12:
 		numSlots = (nElements + 1) / 2;
-		if (numSlots > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		instSpec += nElements & 1;
 		break;
 	case 16:
 		numSlots = (nElements + 3) / 4;
-		if (numSlots > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		instSpec += (4 - nElements) & 3;
 		break;
 	default:
@@ -40883,23 +40874,29 @@
 		numSlots = classFormat & ((1 << 16) - 1);
 
 	}
-	/* begin ensureBehaviorHash: */
-	assert(addressCouldBeClassObj(classObj));
-	if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
-		if (((err = enterIntoClassTable(classObj))) != 0) {
-			classIndex = -err;
-			goto l2;
+	if (classIndex == 0) {
+		/* begin ensureBehaviorHash: */
+		assert(addressCouldBeClassObj(classObj));
+		if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+			if (((err = enterIntoClassTable(classObj))) != 0) {
+				classIndex = -err;
+				goto l1;
+			}
+			newHash = (long32At(classObj + 4)) & 0x3FFFFF;
+			assert((classAtIndex(newHash)) == classObj);
 		}
-		newHash = (long32At(classObj + 4)) & 0x3FFFFF;
-		assert((classAtIndex(newHash)) == classObj);
+		classIndex = newHash;
+	l1:	/* end ensureBehaviorHash: */;
+		if (classIndex < 0) {
+			GIV(primFailCode) = -classIndex;
+			return null;
+		}
 	}
-	classIndex = newHash;
-l2:	/* end ensureBehaviorHash: */;
-	if (classIndex < 0) {
-		GIV(primFailCode) = -classIndex;
-		return null;
-	}
 	if (numSlots > ((1 << 16) - 1)) {
+		if (numSlots > (((512 * 1024) * 1024) - 1)) {
+			GIV(primFailCode) = PrimErrUnsupported;
+			return null;
+		}
 		newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, ((numSlots == 0
 	? 8
 	: (numSlots + (numSlots & 1)) << (shiftForWord()))) + ((numSlots >= 0xFF
@@ -40925,7 +40922,7 @@
 				forceInterruptCheck();
 			}
 			newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, numBytes, instSpec, classIndex);
-			goto l1;
+			goto l2;
 		}
 		if (numSlots >= 0xFF) {
 
@@ -40943,7 +40940,7 @@
 		assert((newObj1 % (allocationUnit())) == 0);
 		GIV(freeStart) += numBytes;
 		newObj = newObj1;
-	l1:	/* end allocateSlots:format:classIndex: */;
+	l2:	/* end allocateSlots:format:classIndex: */;
 	}
 	if (!(newObj == null)) {
 		/* begin fillObj:numSlots:with: */
@@ -48495,7 +48492,7 @@
 
 				newNumSlots = obj2slots + header1NumSlots;
 				if (newNumSlots < 0xFF) {
-					byteAtput(here1 + (56 / BitsPerByte), newNumSlots);
+					byteAtput(here1 + 7, newNumSlots);
 					here1 = here1;
 					goto l2;
 				}
@@ -70605,12 +70602,20 @@
 }
 
 sqInt
-printStackCallStackOf(char *aFramePointer)
+printStackCallStackOf(sqInt frameOrContext)
 {
     sqInt context;
     char *theFP;
 
-	theFP = aFramePointer;
+	if (addressCouldBeObj(frameOrContext)) {
+		if ((((frameOrContext & 3) == 0)
+		 && (((longAt(frameOrContext)) & 0x3FFFFF) == ClassMethodContextCompactIndex))
+		 && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+			return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+		}
+		return null;
+	}
+	theFP = ((void *)frameOrContext);
 	while(1) {
 		context = shortReversePrintFrameAndCallers(theFP);
 		if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))

Modified: branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
===================================================================
--- branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c	2014-11-28 00:08:50 UTC (rev 3154)
@@ -2,11 +2,11 @@
 
 
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
    from
-	StackInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	StackInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -138,7 +138,6 @@
 #define BecameActiveClassFlag 8
 #define BecameCompiledMethodFlag 2
 #define BecamePointerObjectFlag 1
-#define BitsPerByte 8
 #define Byte0Mask 0xFF
 #define Byte1Mask 0xFF00
 #define Byte1Shift 8
@@ -1170,7 +1169,7 @@
 void printOop(sqInt oop);
 void printProcessStack(sqInt aProcess);
 sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
 void printStackPageList(void);
 void printStackPageListInUse(void);
 void printStackPages(void);
@@ -2093,7 +2092,7 @@
  0 };
 char * breakSelector;
 sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.957";
 volatile int sendTrace;
 sqInt suppressHeartbeatFlag;
 
@@ -13625,8 +13624,8 @@
     sqInt sz;
 
 	isSmall = (isNegative
-		? magnitude < (MaxSmallInteger)
-		: magnitude < ((MaxSmallInteger) + 1));
+		? magnitude <= ((MaxSmallInteger) + 1)
+		: magnitude <= (MaxSmallInteger));
 	if (isSmall) {
 		smallVal = ((sqInt) magnitude);
 		if (isNegative) {
@@ -26868,48 +26867,40 @@
 
 	classFormat = ((longAt((classObj + BaseHeaderSize) + (InstanceSpecificationIndex << (shiftForWord())))) >> 1);
 	instSpec = (((usqInt) classFormat) >> 16) & 0x1F;
+	classIndex = (long32At(classObj + 4)) & 0x3FFFFF;
 	fillValue = 0;
 	
 	switch (instSpec) {
 	case 2:
-		if (nElements > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		numSlots = nElements;
 		fillValue = GIV(nilObj);
 		break;
 	case 3:
 	case 4:
-		if (nElements > ((((512 * 1024) * 1024) - 1) - (classFormat & ((1 << 16) - 1)))) {
-			return null;
-		}
 		numSlots = (classFormat & ((1 << 16) - 1)) + nElements;
 		fillValue = GIV(nilObj);
 		break;
 	case 9:
 		if (nElements > ((((512 * 1024) * 1024) - 1) / 2)) {
+			GIV(primFailCode) = PrimErrUnsupported;
 			return null;
 		}
 		numSlots = nElements * 2;
 		break;
 	case 10:
-		if (nElements > (((512 * 1024) * 1024) - 1)) {
+		if ((classIndex == ClassFloatCompactIndex)
+		 && (nElements != 2)) {
+			GIV(primFailCode) = PrimErrBadReceiver;
 			return null;
 		}
 		numSlots = nElements;
 		break;
 	case 12:
 		numSlots = (nElements + 1) / 2;
-		if (numSlots > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		instSpec += nElements & 1;
 		break;
 	case 16:
 		numSlots = (nElements + 3) / 4;
-		if (numSlots > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		instSpec += (4 - nElements) & 3;
 		break;
 	default:
@@ -26925,23 +26916,29 @@
 		numSlots = classFormat & ((1 << 16) - 1);
 
 	}
-	/* begin ensureBehaviorHash: */
-	assert(addressCouldBeClassObj(classObj));
-	if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
-		if (((err = enterIntoClassTable(classObj))) != 0) {
-			classIndex = -err;
-			goto l2;
+	if (classIndex == 0) {
+		/* begin ensureBehaviorHash: */
+		assert(addressCouldBeClassObj(classObj));
+		if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+			if (((err = enterIntoClassTable(classObj))) != 0) {
+				classIndex = -err;
+				goto l1;
+			}
+			newHash = (long32At(classObj + 4)) & 0x3FFFFF;
+			assert((classAtIndex(newHash)) == classObj);
 		}
-		newHash = (long32At(classObj + 4)) & 0x3FFFFF;
-		assert((classAtIndex(newHash)) == classObj);
+		classIndex = newHash;
+	l1:	/* end ensureBehaviorHash: */;
+		if (classIndex < 0) {
+			GIV(primFailCode) = -classIndex;
+			return null;
+		}
 	}
-	classIndex = newHash;
-l2:	/* end ensureBehaviorHash: */;
-	if (classIndex < 0) {
-		GIV(primFailCode) = -classIndex;
-		return null;
-	}
 	if (numSlots > ((1 << 16) - 1)) {
+		if (numSlots > (((512 * 1024) * 1024) - 1)) {
+			GIV(primFailCode) = PrimErrUnsupported;
+			return null;
+		}
 		newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, ((numSlots == 0
 	? 8
 	: (numSlots + (numSlots & 1)) << (shiftForWord()))) + ((numSlots >= 0xFF
@@ -26967,7 +26964,7 @@
 				forceInterruptCheck();
 			}
 			newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, numBytes, instSpec, classIndex);
-			goto l1;
+			goto l2;
 		}
 		if (numSlots >= 0xFF) {
 
@@ -26985,7 +26982,7 @@
 		assert((newObj1 % (allocationUnit())) == 0);
 		GIV(freeStart) += numBytes;
 		newObj = newObj1;
-	l1:	/* end allocateSlots:format:classIndex: */;
+	l2:	/* end allocateSlots:format:classIndex: */;
 	}
 	if (!(newObj == null)) {
 		/* begin fillObj:numSlots:with: */
@@ -34554,7 +34551,7 @@
 
 				newNumSlots = obj2slots + header1NumSlots;
 				if (newNumSlots < 0xFF) {
-					byteAtput(here1 + (56 / BitsPerByte), newNumSlots);
+					byteAtput(here1 + 7, newNumSlots);
 					here1 = here1;
 					goto l2;
 				}
@@ -51716,7 +51713,7 @@
     sqInt referent1;
     sqInt referent2;
     char *theFP;
-    usqInt theIP;
+    sqInt theIP;
     usqInt theIPPtr;
     StackPage *thePage;
     char *theSP;
@@ -51774,7 +51771,7 @@
 
 				/* reuse theIP; its just an offset here */
 
-				theIP = ((usqInt)(theFP + ((FoxCallerSavedIP + BytesPerWord) + ((byteAt((theFP + FoxFrameFlags) + 1)) << (shiftForWord())))));
+				theIP = ((sqInt)(theFP + ((FoxCallerSavedIP + BytesPerWord) + ((byteAt((theFP + FoxFrameFlags) + 1)) << (shiftForWord())))));
 				oop = longAt(theIP);
 				if (((oop & 3) == 0)
 				 && (((longAt(oop)) & 0x3FFFFF) == 8)) {
@@ -51802,7 +51799,7 @@
 					longAtput(theFP + FoxMethod, (oop = newOop));
 				}
 				if (!(((callerFP = frameCallerFP(theFP))) != 0)) break;
-				theIPPtr = ((usqInt)(theFP + FoxCallerSavedIP));
+				theIPPtr = ((sqInt)(theFP + FoxCallerSavedIP));
 				theFP = callerFP;
 			}
 		}
@@ -59199,12 +59196,20 @@
 }
 
 sqInt
-printStackCallStackOf(char *aFramePointer)
+printStackCallStackOf(sqInt frameOrContext)
 {
     sqInt context;
     char *theFP;
 
-	theFP = aFramePointer;
+	if (addressCouldBeObj(frameOrContext)) {
+		if ((((frameOrContext & 3) == 0)
+		 && (((longAt(frameOrContext)) & 0x3FFFFF) == ClassMethodContextCompactIndex))
+		 && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+			return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+		}
+		return null;
+	}
+	theFP = ((void *)frameOrContext);
 	while(1) {
 		context = shortReversePrintFrameAndCallers(theFP);
 		if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))

Modified: branches/Cog/nsspurstacksrc/vm/interp.c
===================================================================
--- branches/Cog/nsspurstacksrc/vm/interp.c	2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspurstacksrc/vm/interp.c	2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,9 +1,9 @@
 /* Automatically generated by
-	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
    from
-	StackInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+	StackInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
  */
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
 char *__interpBuildInfo = __buildInfo;
 
 
@@ -135,7 +135,6 @@
 #define BecameActiveClassFlag 8
 #define BecameCompiledMethodFlag 2
 #define BecamePointerObjectFlag 1
-#define BitsPerByte 8
 #define Byte0Mask 0xFF
 #define Byte1Mask 0xFF00
 #define Byte1Shift 8
@@ -1167,7 +1166,7 @@
 void printOop(sqInt oop);
 void printProcessStack(sqInt aProcess);
 sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
 void printStackPageList(void);
 void printStackPageListInUse(void);
 void printStackPages(void);
@@ -2090,7 +2089,7 @@
  0 };
 char * breakSelector;
 sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.957";
 volatile int sendTrace;
 sqInt suppressHeartbeatFlag;
 
@@ -13616,8 +13615,8 @@
     sqInt sz;
 
 	isSmall = (isNegative
-		? magnitude < (MaxSmallInteger)
-		: magnitude < ((MaxSmallInteger) + 1));
+		? magnitude <= ((MaxSmallInteger) + 1)
+		: magnitude <= (MaxSmallInteger));
 	if (isSmall) {
 		smallVal = ((sqInt) magnitude);
 		if (isNegative) {
@@ -26859,48 +26858,40 @@
 
 	classFormat = ((longAt((classObj + BaseHeaderSize) + (InstanceSpecificationIndex << (shiftForWord())))) >> 1);
 	instSpec = (((usqInt) classFormat) >> 16) & 0x1F;
+	classIndex = (long32At(classObj + 4)) & 0x3FFFFF;
 	fillValue = 0;
 	
 	switch (instSpec) {
 	case 2:
-		if (nElements > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		numSlots = nElements;
 		fillValue = GIV(nilObj);
 		break;
 	case 3:
 	case 4:
-		if (nElements > ((((512 * 1024) * 1024) - 1) - (classFormat & ((1 << 16) - 1)))) {
-			return null;
-		}
 		numSlots = (classFormat & ((1 << 16) - 1)) + nElements;
 		fillValue = GIV(nilObj);
 		break;
 	case 9:
 		if (nElements > ((((512 * 1024) * 1024) - 1) / 2)) {
+			GIV(primFailCode) = PrimErrUnsupported;
 			return null;
 		}
 		numSlots = nElements * 2;
 		break;
 	case 10:
-		if (nElements > (((512 * 1024) * 1024) - 1)) {
+		if ((classIndex == ClassFloatCompactIndex)
+		 && (nElements != 2)) {
+			GIV(primFailCode) = PrimErrBadReceiver;
 			return null;
 		}
 		numSlots = nElements;
 		break;
 	case 12:
 		numSlots = (nElements + 1) / 2;
-		if (numSlots > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		instSpec += nElements & 1;
 		break;
 	case 16:
 		numSlots = (nElements + 3) / 4;
-		if (numSlots > (((512 * 1024) * 1024) - 1)) {
-			return null;
-		}
 		instSpec += (4 - nElements) & 3;
 		break;
 	default:
@@ -26916,23 +26907,29 @@
 		numSlots = classFormat & ((1 << 16) - 1);
 
 	}
-	/* begin ensureBehaviorHash: */
-	assert(addressCouldBeClassObj(classObj));
-	if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
-		if (((err = enterIntoClassTable(classObj))) != 0) {
-			classIndex = -err;
-			goto l2;
+	if (classIndex == 0) {
+		/* begin ensureBehaviorHash: */
+		assert(addressCouldBeClassObj(classObj));
+		if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+			if (((err = enterIntoClassTable(classObj))) != 0) {
+				classIndex = -err;
+				goto l1;
+			}
+			newHash = (long32At(classObj + 4)) & 0x3FFFFF;
+			assert((classAtIndex(newHash)) == classObj);
 		}
-		newHash = (long32At(classObj + 4)) & 0x3FFFFF;
-		assert((classAtIndex(newHash)) == classObj);
+		classIndex = newHash;
+	l1:	/* end ensureBehaviorHash: */;
+		if (classIndex < 0) {
+			GIV(primFailCode) = -classIndex;
+			return null;
+		}
 	}
-	classIndex = newHash;
-l2:	/* end ensureBehaviorHash: */;
-	if (classIndex < 0) {
-		GIV(primFailCode) = -classIndex;
-		return null;
-	}
 	if (numSlots > ((1 << 16) - 1)) {
+		if (numSlots > (((512 * 1024) * 1024) - 1)) {
+			GIV(primFailCode) = PrimErrUnsupported;
+			return null;
+		}
 		newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, ((numSlots == 0
 	? 8
 	: (numSlots + (numSlots & 1)) << (shiftForWord()))) + ((numSlots >= 0xFF
@@ -26958,7 +26955,7 @@
 				forceInterruptCheck();
 			}
 			newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, numBytes, instSpec, classIndex);
-			goto l1;
+			goto l2;
 		}
 		if (numSlots >= 0xFF) {
 
@@ -26976,7 +26973,7 @@
 		assert((newObj1 % (allocationUnit())) == 0);
 		GIV(freeStart) += numBytes;
 		newObj = newObj1;
-	l1:	/* end allocateSlots:format:classIndex: */;
+	l2:	/* end allocateSlots:format:classIndex: */;
 	}
 	if (!(newObj == null)) {
 		/* begin fillObj:numSlots:with: */
@@ -34545,7 +34542,7 @@
 
 				newNumSlots = obj2slots + header1NumSlots;
 				if (newNumSlots < 0xFF) {
-					byteAtput(here1 + (56 / BitsPerByte), newNumSlots);
+					byteAtput(here1 + 7, newNumSlots);
 					here1 = here1;
 					goto l2;
 				}
@@ -51707,7 +51704,7 @@
     sqInt referent1;
     sqInt referent2;
     char *theFP;
-    usqInt theIP;
+    sqInt theIP;
     usqInt theIPPtr;
     StackPage *thePage;
     char *theSP;
@@ -51765,7 +51762,7 @@
 
 				/* reuse theIP; its just an offset here */
 
-				theIP = ((usqInt)(theFP + ((FoxCallerSavedIP + BytesPerWord) + ((byteAt((theFP + FoxFrameFlags) + 1)) << (shiftForWord())))));
+				theIP = ((sqInt)(theFP + ((FoxCallerSavedIP + BytesPerWord) + ((byteAt((theFP + FoxFrameFlags) + 1)) << (shiftForWord())))));
 				oop = longAt(theIP);
 				if (((oop & 3) == 0)
 				 && (((longAt(oop)) & 0x3FFFFF) == 8)) {
@@ -51793,7 +51790,7 @@
 					longAtput(theFP + FoxMethod, (oop = newOop));
 				}
 				if (!(((callerFP = frameCallerFP(theFP))) != 0)) break;
-				theIPPtr = ((usqInt)(theFP + FoxCallerSavedIP));
+				theIPPtr = ((sqInt)(theFP + FoxCallerSavedIP));
 				theFP = callerFP;
 			}
 		}
@@ -59190,12 +59187,20 @@
 }
 
 sqInt
-printStackCallStackOf(char *aFramePointer)
+printStackCallStackOf(sqInt frameOrContext)
 {
     sqInt context;
     char *theFP;
 
-	theFP = aFramePointer;
+	if (addressCouldBeObj(frameOrContext)) {
+		if ((((frameOrContext & 3) == 0)
+		 && (((longAt(frameOrContext)) & 0x3FFFFF) == ClassMethodContextCompactIndex))
+		 && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+			return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+		}
+		return null;
+	}
+	theFP = ((void *)frameOrContext);
 	while(1) {
 		context = shortReversePrintFrameAndCallers(theFP);
 		if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))


Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
   - Mon Nov 24 12:21:21 PST 2014
   + Thu Nov 27 16:06:45 PST 2014

Modified: branches/Cog/sistasrc/vm/cogit.c

@@ Diff output truncated at 50000 characters. @@


More information about the Vm-dev mailing list