[add Jhc.Int with some basic Int operations exported as primitives
John Meacham <john@repetae.net>**20061110055749] hunk ./E/PrimOpt.hs 187
+        primopt (PrimPrim "times") [a,b] t = ans where
+            (vara:varb:varc:_) = freeNames (freeVars (a,b,t))
+            Just (cna,sta,ta) = lookupCType' dataTable t
+            ans = do
+                (_,ta) <- lookupCType dataTable (getType a)
+                (_,tb) <- lookupCType dataTable (getType b)
+                (_,tr) <- lookupCType dataTable t
+                unless (ta == tb && tb == tr) $ fail "bad minus"
+                return $ unbox dataTable a vara $ \tvra ->
+                    unbox dataTable b varb $ \tvrb ->
+                        eStrictLet (tVr varc sta) (EPrim (APrim (Operator "*" [ta,ta] ta) mempty) [EVar tvra, EVar tvrb] sta) (ELit (litCons { litName = cna, litArgs = [EVar (tVr varc sta)], litType = t }))
+        primopt (PrimPrim "modulus") [a,b] t = ans where
+            (vara:varb:varc:_) = freeNames (freeVars (a,b,t))
+            Just (cna,sta,ta) = lookupCType' dataTable t
+            ans = do
+                (_,ta) <- lookupCType dataTable (getType a)
+                (_,tb) <- lookupCType dataTable (getType b)
+                (_,tr) <- lookupCType dataTable t
+                unless (ta == tb && tb == tr) $ fail "bad minus"
+                return $ unbox dataTable a vara $ \tvra ->
+                    unbox dataTable b varb $ \tvrb ->
+                        eStrictLet (tVr varc sta) (EPrim (APrim (Operator "%" [ta,ta] ta) mempty) [EVar tvra, EVar tvrb] sta) (ELit (litCons { litName = cna, litArgs = [EVar (tVr varc sta)], litType = t }))
addfile ./lib/base/Jhc/Int.hs
hunk ./lib/base/Jhc/Int.hs 1
+{-# OPTIONS_JHC -N #-}
+
+-- just a few basic operations on integers to jumpstart things
+module Jhc.Int(Int(),increment,decrement,plus,minus,times,divide,modulus,zero,one) where
+
+import Data.Int(Int())
+
+foreign import primitive increment :: Int -> Int
+foreign import primitive decrement :: Int -> Int
+foreign import primitive plus      :: Int -> Int -> Int
+foreign import primitive minus     :: Int -> Int -> Int
+foreign import primitive times     :: Int -> Int -> Int
+foreign import primitive divide    :: Int -> Int -> Int
+foreign import primitive modulus   :: Int -> Int -> Int
+foreign import primitive zero      :: Int
+foreign import primitive one       :: Int