[add various ways to test compile time properties in Jhc.Options
John Meacham <john@repetae.net>**20090306044408
 Ignore-this: 4570f7563434e0e2c51a256df244d80
] hunk ./Grin/FromE.hs 37
+import Name.VConsts
hunk ./Grin/FromE.hs 138
-stringNameToTy :: String -> Ty
-stringNameToTy n = TyPrim (archOpTy archInfo n)
hunk ./Grin/FromE.hs 414
+        pconst s = Prim (APrim CConst { primConst = s, primRetType = "int" } mempty) [] [tIntzh]
+        -- options
+
+        f "options_target" [_] = do return $ Return [toUnVal (0::Int)]
+        f "options_isWindows" [_] = do return $ pconst "JHC_isWindows"
+        f "options_isPosix" [_] = do return $ pconst "JHC_isPosix"
+        f "options_isBigEndian" [_] = do return $ pconst "JHC_isBigEndian"
hunk ./data/rts/jhc_rts.c 11
+#ifdef __WIN32__
+static char *jhc_options_os =  "mingw32";
+static char *jhc_options_arch = "i386";
+#else
+struct utsname jhc_utsname;
+static char *jhc_options_os = "(unknown os)";
+static char *jhc_options_arch = "(unknown arch)";
+#endif
+
hunk ./data/rts/jhc_rts.c 169
+#if JHC_isPosix
+        if(!uname(&jhc_utsname)) {
+                jhc_options_arch = jhc_utsname.machine;
+                jhc_options_os   = jhc_utsname.sysname;
+        }
+#endif
hunk ./data/rts/jhc_rts_header.h 17
+#include <endian.h>
+#include <sys/utsname.h>
hunk ./data/rts/jhc_rts_header.h 85
+#ifdef __WIN32__
+#define JHC_isWindows   1
+#define JHC_isBigEndian 0
+#else
+#define JHC_isWindows 0
+#define JHC_isBigEndian (__BYTE_ORDER == __BIG_ENDIAN)
+#endif
+
+#define JHC_isPosix (!JHC_isWindows)
hunk ./lib/base/Jhc/Options.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -N -fffi -fcpp -funboxed-values #-}
hunk ./lib/base/Jhc/Options.hs 3
-module Jhc.Options(target,Target(..)) where
+module Jhc.Options(
+#ifdef __JHC__
+    isWindows,
+    isPosix,
+    target,
+    isBigEndian,
+    isLittleEndian,
+#endif
+    Target(..)
+    ) where
+
+import Jhc.Order
+import Jhc.Enum
+import Jhc.Prim
+import Jhc.Types
+import Jhc.Basics
hunk ./lib/base/Jhc/Options.hs 21
+    deriving(Eq,Ord,Enum)
+
+
+
+
+#ifdef __JHC__
+
+isBigEndian,isLittleEndian :: Bool
+isLittleEndian = not isBigEndian
+
+foreign import primitive "box" boxTarget :: Enum__ -> Target
+foreign import primitive "box" boxBool   :: Enum__ -> Bool
+
hunk ./lib/base/Jhc/Options.hs 35
+target = boxTarget    (options_target      ())
+isWindows = boxBool   (options_isWindows   ())
+isPosix = boxBool     (options_isPosix     ())
+isBigEndian = boxBool (options_isBigEndian ())
hunk ./lib/base/Jhc/Options.hs 40
-{-# NOINLINE target #-}
-target :: Target
-target = unknown_target
+foreign import primitive options_target      :: () -> Enum__
+foreign import primitive options_isWindows   :: () -> Bool__
+foreign import primitive options_isPosix     :: () -> Bool__
+foreign import primitive options_isBigEndian :: () -> Bool__
hunk ./lib/base/Jhc/Options.hs 45
-foreign import primitive unknown_target :: Target
+#endif
hunk ./lib/base/System/Info.hs 1
-{-# OPTIONS_JHC -N #-}
-module System.Info where
+{-# OPTIONS_JHC -fffi #-}
+module System.Info(compilerName,compilerVersion,os,arch) where
hunk ./lib/base/System/Info.hs 4
+import Foreign.C.String
+import System.IO.Unsafe
+import Foreign
hunk ./lib/base/System/Info.hs 10
+
+os = unsafePerformIO $ peekCAString =<< peek options_os
+arch = unsafePerformIO $ peekCAString =<< peek options_arch
+
+
+foreign import ccall "&jhc_options_os"   options_os   :: Ptr CString
+foreign import ccall "&jhc_options_arch" options_arch :: Ptr CString