summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
77977ed)
Tried to bring this test into the modern age. Failed. I've committed the
pieces to be picked up later.
--- /dev/null
+-- This is a rather exciting experiment in using the new call
+-- makeStablePtr# and performIO. It doesn't do much but it took an
+-- incredible effort to get it to do it.
+
+import Stable
+import GlaExts
+import CString
+
+-- module Main(main) where
+
+main = makeStablePtr test >>= \ stablePtr ->
+ ((_casm_GC_ ``SaveAllStgRegs(); test1(%0); RestoreAllStgRegs();'' stablePtr)
+ :: PrimIO ())
+ >>= \ _ ->
+ return ()
+
+test :: IO Int
+test =
+ let f x = sum [1..x]
+ f :: Int -> Int
+ in
+ _ccall_ printf
+ (packString "The stable pointer has just been used to print this number %d\n") (f 100)
+ >>= \ _ ->
+ return 5
+
TOP = ../..
include $(TOP)/mk/boilerplate.mk
SRC_HC_OPTS += -fglasgow-exts
TOP = ../..
include $(TOP)/mk/boilerplate.mk
SRC_HC_OPTS += -fglasgow-exts
+include $(TOP)/mk/should_run.mk
+
+HC_OPTS += -dcore-lint
+
+.PRECIOUS: %.o %.bin
include $(TOP)/mk/target.mk
include $(TOP)/mk/target.mk
--- /dev/null
+#define NULL_REG_MAP
+#include "../../../includes/Stg.h"
+
+int
+test1( stableIOPtr )
+ StgStablePtr stableIOPtr;
+{
+ int i;
+ int result;
+
+ printf("Using stable pointer %x\n", stableIOPtr);
+
+ for( i = 0; i != 10; i = i + 1 ) {
+ printf( "Calling stable pointer for %dth time\n", i );
+ performIO( stableIOPtr );
+ printf( "Returned after stable pointer\n" );
+ }
+
+ return 1;
+}