[add support for unboxed literals
John Meacham <john@repetae.net>**20061130040257] hunk ./E/FromHs.hs 251
-unbox :: DataTable -> E -> Int -> (TVr -> E) -> E
-unbox dataTable e vn wtd = eCase e [Alt (litCons { litName = cna, litArgs = [tvra], litType = te }) (wtd tvra)] Unknown where
+unbox :: DataTable -> E -> Int -> (E -> E) -> E
+unbox dataTable e _vn wtd | getType (getType e) == eHash = wtd e
+unbox dataTable e vn wtd = eCase e [Alt (litCons { litName = cna, litArgs = [tvra], litType = te }) (wtd (EVar tvra))] Unknown where
hunk ./E/FromHs.hs 453
+    cExpr (HsAsPat n' (HsLit (HsIntPrim i))) = ans where
+        t' = getAssump n'
+        ans = return $ ELit (LitInt (fromIntegral i) (tipe t'))
hunk ./E/FromHs.hs 593
+litconvert (HsCharPrim i) t | t == tCharzh =  LitInt (fromIntegral $ ord i) tCharzh
+litconvert (HsIntPrim i) t  =  LitInt (fromIntegral $  i) t
hunk ./E/FromHs.hs 657
-                return $ unbox dataTable b vr $ \tvr -> eCase (EVar tvr) as err
+                return $ unbox dataTable b vr $ \tvr -> eCase tvr as err
hunk ./FlagOpts.flags 5
+unboxed-values allow unboxed value syntax
hunk ./FrontEnd/HsParser.y 54
+      UINT     { UIntTok $$ }
hunk ./FrontEnd/HsParser.y 57
+      UCHAR    { UCharacter $$ }
hunk ./FrontEnd/HsParser.y 59
+      USTRING  { UStringTok $$ }
hunk ./FrontEnd/HsParser.y 866
+      | UINT                  { HsLit (HsIntPrim (readInteger $1)) }
hunk ./FrontEnd/HsParser.y 868
+      | UCHAR                 { HsLit (HsCharPrim $1) }
hunk ./FrontEnd/HsParser.y 871
+      | USTRING               { HsLit (HsStringPrim $1) }
hunk ./FrontEnd/Lexer.hs 38
-	| IntTok Integer
+	| IntTok  Integer
+	| UIntTok Integer
hunk ./FrontEnd/Lexer.hs 42
+	| UCharacter Char
hunk ./FrontEnd/Lexer.hs 44
+        | UStringTok String
hunk ./FrontEnd/Lexer.hs 378
-        let ld ds' = do
-                ds <- lexWhile isDigit
-                rest <- getInput
-                case rest of
-                    ('_':_) -> discard 1 >> ld (ds' ++ ds)
-                    rest -> return (ds' ++ ds,rest)
-        (ds,rest) <- ld []
-	case rest of
-	    ('.':d:_) | isDigit d -> do
-		discard 1
-		frac <- lexWhile isDigit
-		let num = parseInteger 10 (ds ++ frac)
-		    decimals = toInteger (length frac)
-		exponent <- do
-			rest2 <- getInput
-			case rest2 of
-			    'e':_ -> lexExponent
-			    'E':_ -> lexExponent
-			    _     -> return 0
-		return (FloatTok ((num%1) * 10^^(exponent - decimals)))
-	    e:_ | toLower e == 'e' -> do
-		exponent <- lexExponent
-		return (FloatTok ((parseInteger 10 ds%1) * 10^^exponent))
-	    _ -> return (IntTok (parseInteger 10 ds))
+    ParseMode { parseUnboxedValues = uval } <- lexParseMode
+    let ld ds' = do
+            ds <- lexWhile isDigit
+            rest <- getInput
+            case rest of
+                ('_':_) -> discard 1 >> ld (ds' ++ ds)
+                rest -> return (ds' ++ ds,rest)
+    (ds,rest) <- ld []
+    case rest of
+        ('.':d:_) | isDigit d -> do
+            discard 1
+            frac <- lexWhile isDigit
+            let num = parseInteger 10 (ds ++ frac)
+                decimals = toInteger (length frac)
+            exponent <- do
+                    rest2 <- getInput
+                    case rest2 of
+                        'e':_ -> lexExponent
+                        'E':_ -> lexExponent
+                        _     -> return 0
+            return (FloatTok ((num%1) * 10^^(exponent - decimals)))
+        e:_ | toLower e == 'e' -> do
+            exponent <- lexExponent
+            return (FloatTok ((parseInteger 10 ds%1) * 10^^exponent))
+        '#':_ | uval -> discard 1 >> return (UIntTok (parseInteger 10 ds))
+        _ -> return (IntTok (parseInteger 10 ds))
hunk ./FrontEnd/Lexer.hs 465
-lexString = loop ""
-    where
-	loop s = do
+lexString = do
+    ParseMode { parseUnboxedValues = uval } <- lexParseMode
+    let loop s = do
hunk ./FrontEnd/Lexer.hs 481
+		    '"':'#':_ | uval -> do
+				discard 2
+				return (UStringTok (reverse s))
hunk ./FrontEnd/Lexer.hs 506
+    loop ""
hunk ./FrontEnd/ParseMonad.hs 65
-		parseFilename :: String,
-                parseFFI :: Bool,
+		parseFilename      :: String,
+                parseFFI           :: Bool,
+                parseUnboxedValues :: Bool,
hunk ./FrontEnd/ParseMonad.hs 78
+                parseUnboxedValues = False,
hunk ./FrontEnd/ParseMonad.hs 83
-    parseUnboxedTuples = FO.UnboxedTuples `Set.member` optFOptsSet options,
+    parseUnboxedTuples = FO.UnboxedTuples `Set.member` optFOptsSet options || FO.UnboxedValues `Set.member` optFOptsSet options,
+    parseUnboxedValues = FO.UnboxedValues `Set.member` optFOptsSet options,
hunk ./FrontEnd/Tc/Main.hs 159
+tiExpr (HsLit l@(HsIntPrim _)) typ = do
+    unBox typ
+    ty <- evalType typ
+    case ty of
+        TCon (Tycon n kh) | kh == kindHash -> return ()
+        _ -> ty `boxyMatch` (TCon (Tycon tc_Int__ kindHash))
+    (ne,n) <- wrapInAsPat (HsLit l)
+    addToCollectedEnv (Map.singleton n ty)
+    return ne
+
hunk ./FrontEnd/Tc/Main.hs 395
+tiPat pl@(HsPLit HsIntPrim {}) typ = do
+    unBox typ
+    ty <- evalType typ
+    case ty of
+        TCon (Tycon n kh) | kh == kindHash -> return ()
+        _ -> ty `boxyMatch` (TCon (Tycon tc_Int__ kindHash))
+    return (pl,mempty)