[project @ 2000-05-10 12:17:35 by rrt]
authorrrt <unknown>
Wed, 10 May 2000 12:17:35 +0000 (12:17 +0000)
committerrrt <unknown>
Wed, 10 May 2000 12:17:35 +0000 (12:17 +0000)
Tried to bring this test into the modern age. Failed. I've committed the
pieces to be picked up later.

ghc/tests/io/stable001/Main.hs [new file with mode: 0644]
ghc/tests/io/stable001/Makefile
ghc/tests/io/stable001/cbits.c [new file with mode: 0644]

diff --git a/ghc/tests/io/stable001/Main.hs b/ghc/tests/io/stable001/Main.hs
new file mode 100644 (file)
index 0000000..d0cb982
--- /dev/null
@@ -0,0 +1,26 @@
+-- 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
+
index f3b9242..0f67c21 100644 (file)
@@ -1,5 +1,10 @@
 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
 
diff --git a/ghc/tests/io/stable001/cbits.c b/ghc/tests/io/stable001/cbits.c
new file mode 100644 (file)
index 0000000..dfa8753
--- /dev/null
@@ -0,0 +1,20 @@
+#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;
+}