[remove special handling of optPrelude in favor of the standard FlagOpts mechanism. implement -X style extension declarations
John Meacham <john@repetae.net>**20120121045025
 Ignore-this: 5dea46454350885d8ded6b7baf17db5e
] hunk ./Makefile.am 221
-	./jhc $(LIB_OPTIONS) -N -funboxed-tuples -fffi -ilib/jhc-prim --build-hl $< -o $@
+	./jhc $(LIB_OPTIONS) -fno-prelude -funboxed-tuples -fffi -ilib/jhc-prim --build-hl $< -o $@
hunk ./Makefile.am 223
-	./jhc $(LIB_OPTIONS) -N -ilib/jhc --build-hl $< -o $@
+	./jhc $(LIB_OPTIONS) -fno-prelude -ilib/jhc --build-hl $< -o $@
hunk ./lib/base/Data/Array/IO.hs 1
-{-# OPTIONS_JHC -N -funboxed-tuples -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -funboxed-tuples -fffi #-}
hunk ./lib/base/Data/Array/IO.hs 21
-                                     
+
hunk ./lib/base/Data/Array/IO.hs 29
-    
+
hunk ./lib/base/Data/Array/IO.hs 49
-unsafeFreezeIOArray (IOA l h arr) = 
+unsafeFreezeIOArray (IOA l h arr) =
hunk ./lib/base/Data/Bits.hs 1
-{-# OPTIONS_JHC -fm4 -N -fffi  #-}
+{-# OPTIONS_JHC -fm4 -fno-prelude -fffi  #-}
hunk ./lib/base/Data/Function.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/base/Data/Functor.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/base/Data/Functor.hs 7
--- 
+--
hunk ./lib/base/Data/IORef.hs 1
-{-# OPTIONS_JHC -N -funboxed-tuples -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -funboxed-tuples -fffi #-}
hunk ./lib/base/Data/Ix.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/base/Data/Maybe.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/base/Foreign.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/base/Foreign.hs 7
--- 
+--
hunk ./lib/base/Foreign/Marshal.hs 2
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/base/Foreign/Marshal.hs 8
--- 
+--
hunk ./lib/base/Foreign/StablePtr.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/base/Unsafe/Coerce.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/jhc/Data/Int.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/Data/Word.hs 1
-{-# OPTIONS_JHC -N #-}
hunk ./lib/jhc/Foreign/C/Error.hs 1
-{-# OPTIONS_JHC -N  -fffi #-}
+{-# OPTIONS_JHC -fno-prelude  -fffi #-}
hunk ./lib/jhc/Foreign/C/Error.hs 546
-
hunk ./lib/jhc/Foreign/C/String.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/jhc/Foreign/C/String.hs 458
-
-
-
hunk ./lib/jhc/Foreign/C/Types.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/Foreign/Marshal/Alloc.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/jhc/Foreign/Marshal/Alloc.hs 142
-
-
hunk ./lib/jhc/Foreign/Marshal/Array.hs 1
-{-# OPTIONS_JHC -N  #-}
+{-# OPTIONS_JHC -fno-prelude  #-}
hunk ./lib/jhc/Foreign/Marshal/Utils.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/jhc/Foreign/Ptr.hs 1
-{-# OPTIONS_JHC -N -fffi -funboxed-tuples #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -funboxed-tuples #-}
hunk ./lib/jhc/Foreign/Ptr.hs 67
-
-
hunk ./lib/jhc/Foreign/Storable.hs 1
-{-# OPTIONS_JHC -N -fm4 -funboxed-values -funboxed-tuples -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fm4 -funboxed-values -funboxed-tuples -fffi #-}
hunk ./lib/jhc/Jhc/ACIO.hs 1
-{-# OPTIONS_JHC -N  #-}
+{-# OPTIONS_JHC -fno-prelude  #-}
hunk ./lib/jhc/Jhc/Addr.hs 1
-{-# OPTIONS_JHC -N -fffi -funboxed-values -fm4 #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -funboxed-values -fm4 #-}
hunk ./lib/jhc/Jhc/Addr.hs 56
-
hunk ./lib/jhc/Jhc/Array.hs 1
-{-# OPTIONS_JHC -N -funboxed-tuples -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -funboxed-tuples -fffi #-}
hunk ./lib/jhc/Jhc/Array.hs 36
-
hunk ./lib/jhc/Jhc/Basics.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/jhc/Jhc/Basics.hs 180
-
hunk ./lib/jhc/Jhc/Enum.hs 1
-{-# OPTIONS_JHC -fm4 -N -fffi -funboxed-values #-}
+{-# OPTIONS_JHC -fm4 -fno-prelude -fffi -funboxed-values #-}
hunk ./lib/jhc/Jhc/Enum.hs 98
-
-
-
hunk ./lib/jhc/Jhc/Float.hs 1
-{-# OPTIONS_JHC -N -fffi -fm4 #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -fm4 #-}
hunk ./lib/jhc/Jhc/Float.hs 229
-
hunk ./lib/jhc/Jhc/Handle.hs 1
-{-# OPTIONS_JHC -N -fffi -funboxed-values #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -funboxed-values #-}
hunk ./lib/jhc/Jhc/Handle.hs 126
-
-
hunk ./lib/jhc/Jhc/Hole.hs 1
-{-# OPTIONS_JHC -N -fffi -funboxed-tuples #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -funboxed-tuples #-}
hunk ./lib/jhc/Jhc/Hole.hs 37
-
hunk ./lib/jhc/Jhc/IO.hs 1
-{-# OPTIONS_JHC -N -funboxed-tuples -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -funboxed-tuples -fffi #-}
hunk ./lib/jhc/Jhc/IO.hs 182
-
hunk ./lib/jhc/Jhc/Inst/Enum.hs 1
-{-# OPTIONS_JHC -N -fffi -funboxed-values -fm4 #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -funboxed-values -fm4 #-}
hunk ./lib/jhc/Jhc/Inst/Enum.hs 59
-
-
hunk ./lib/jhc/Jhc/Inst/Num.hs 1
-{-# OPTIONS_JHC -fm4 -N -fffi #-}
+{-# OPTIONS_JHC -fm4 -fno-prelude -fffi #-}
hunk ./lib/jhc/Jhc/Inst/Num.hs 52
-
-
hunk ./lib/jhc/Jhc/Inst/Order.hs 1
-{-# OPTIONS_JHC -fm4 -N -fffi #-}
+{-# OPTIONS_JHC -fm4 -fno-prelude -fffi #-}
hunk ./lib/jhc/Jhc/Inst/PrimEnum.hs 1
-{-# OPTIONS_JHC -N -fffi -funboxed-values #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -funboxed-values #-}
hunk ./lib/jhc/Jhc/Inst/Read.hs 1
-{-# OPTIONS_JHC -N -fm4 #-}
+{-# OPTIONS_JHC -fno-prelude -fm4 #-}
hunk ./lib/jhc/Jhc/Inst/Show.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/Jhc/Inst/Show.hs 70
-
hunk ./lib/jhc/Jhc/Inst/Storable.hs 1
-{-# OPTIONS_JHC -fm4 -N -fffi -funboxed-tuples -funboxed-values #-}
+{-# OPTIONS_JHC -fm4 -fno-prelude -fffi -funboxed-tuples -funboxed-values #-}
hunk ./lib/jhc/Jhc/Inst/Storable.hs 55
-
hunk ./lib/jhc/Jhc/Int.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/jhc/Jhc/JumpPoint.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/jhc/Jhc/JumpPoint.hs 35
-
-
-
hunk ./lib/jhc/Jhc/List.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/Jhc/List.hs 346
-
hunk ./lib/jhc/Jhc/Maybe.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/jhc/Jhc/Maybe.hs 35
-
-
hunk ./lib/jhc/Jhc/Monad.hs 1
-{-# OPTIONS_JHC -N -funboxed-tuples #-}
+{-# OPTIONS_JHC -fno-prelude -funboxed-tuples #-}
hunk ./lib/jhc/Jhc/Monad.hs 95
-
-
hunk ./lib/jhc/Jhc/Num.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/Jhc/Num.hs 107
-
hunk ./lib/jhc/Jhc/Options.hs 1
-{-# OPTIONS_JHC -N -fffi -fcpp -funboxed-values #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -fcpp -funboxed-values #-}
hunk ./lib/jhc/Jhc/Options.hs 49
-
hunk ./lib/jhc/Jhc/Order.hs 1
-{-# OPTIONS_JHC -fm4 -N -fffi #-}
+{-# OPTIONS_JHC -fm4 -fno-prelude -fffi #-}
hunk ./lib/jhc/Jhc/Order.hs 123
-
-
hunk ./lib/jhc/Jhc/Prim.hs 1
-{-# OPTIONS_JHC -N -fffi -funboxed-tuples #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -funboxed-tuples #-}
hunk ./lib/jhc/Jhc/Show.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/Jhc/Show.hs 66
-
-
hunk ./lib/jhc/Jhc/String.hs 3
-{-# OPTIONS_JHC -N -fffi -funboxed-values #-}
+{-# OPTIONS_JHC -fffi -funboxed-values #-}
hunk ./lib/jhc/Jhc/String.hs 100
-
-
-
-
-
hunk ./lib/jhc/Jhc/Text/Read.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/Jhc/Text/Read.hs 122
-
hunk ./lib/jhc/Jhc/Tuples.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/Jhc/Tuples.hs 131
-
hunk ./lib/jhc/Jhc/Types.hs 2
-{-# OPTIONS_JHC -N  #-}
hunk ./lib/jhc/Prelude/CType.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/Prelude/Float.hs 1
-{-# OPTIONS_JHC -N -fffi -fm4  #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -fm4  #-}
hunk ./lib/jhc/Prelude/Float.hs 302
-
-
hunk ./lib/jhc/Prelude/IO.hs 1
-{-# OPTIONS_JHC -N -fffi -funboxed-values #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -funboxed-values #-}
hunk ./lib/jhc/Prelude/IO.hs 128
-
-
-
hunk ./lib/jhc/Prelude/Text.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/Prelude/Text.hs 127
-
hunk ./lib/jhc/System/C/Stdio.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/jhc/System/IO/Unsafe.hs 1
-{-# OPTIONS_JHC -N #-}
+{-# OPTIONS_JHC -fno-prelude #-}
hunk ./lib/jhc/System/IO/Unsafe.hs 5
-
-
hunk ./lib/jhc/System/Mem.hs 1
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./lib/jhc/System/Mem/StableName.hs 1
-{-# OPTIONS_JHC -N -fffi -fm4   #-}
+{-# OPTIONS_JHC -fno-prelude -fffi -fm4   #-}
hunk ./regress/tests/0_parse/2_pass/data.hs 1
-{-# OPTIONS_JHC -N -funboxed-tuples #-}
+{-# OPTIONS_JHC -funboxed-tuples #-}
+{-# LANGUAGE NoImplicitPrelude #-}
hunk ./regress/tests/3_io/ExportImport.hs 2
-{-# OPTIONS_JHC -N -fffi #-}
+{-# OPTIONS_JHC -fno-prelude -fffi #-}
hunk ./src/FlagOpts.flags 16
+prelude implicitly import Prelude
hunk ./src/FlagOpts.flags 42
-@default inline-pragmas rules wrapper defaulting type-analysis monomorphism-restriction global-optimize full-int
+@default inline-pragmas rules wrapper defaulting type-analysis monomorphism-restriction global-optimize full-int prelude
hunk ./src/FrontEnd/Exports.hs 17
-import FrontEnd.SrcLoc
+import FlagOpts as FO
hunk ./src/FrontEnd/Exports.hs 19
+import FrontEnd.SrcLoc
+import FrontEnd.Warning
hunk ./src/FrontEnd/Exports.hs 23
-import Util.SetLike as SL
hunk ./src/FrontEnd/Exports.hs 24
-import FrontEnd.Warning
+import Util.SetLike as SL
hunk ./src/FrontEnd/Exports.hs 46
-        | optPrelude (modInfoOptions m) = (prelude:xs)
+        | FO.Prelude `Set.member` (optFOptsSet $ modInfoOptions m) = (prelude:xs)
hunk ./src/FrontEnd/Exports.hs 129
-        cd n =  [toName DataConstructor n, toName Val n, toName FieldLabel n ]               
+        cd n =  [toName DataConstructor n, toName Val n, toName FieldLabel n ]
hunk ./src/FrontEnd/Exports.hs 132
-
hunk ./src/FrontEnd/Exports.hs 141
-
hunk ./src/FrontEnd/FrontEnd.hs 32
-    opt <- case fileOptions (hsModuleOptions m) of
-        Just o -> return o
-        Nothing -> warn (srcLoc m) "unknown-option" ("Unknown OPTIONS in pragma module" <+> fromModule (hsModuleName m) <+>  show (hsModuleOptions m)) >> return options
+    --opt <- case fileOptions (hsModuleOptions m) of
+    --    Just o -> return o
+    --    Nothing -> warn (srcLoc m) "unknown-option" ("Unknown OPTIONS in pragma module" <+> fromModule (hsModuleName m) <+>  show (hsModuleOptions m)) >> return options
hunk ./src/FrontEnd/FrontEnd.hs 43
-        modInfoOptions = opt
+        modInfoOptions = hsModuleOpt m
hunk ./src/FrontEnd/FrontEnd.hs 45
-
-
hunk ./src/FrontEnd/HsPretty.hs 189
-ppHsModule (HsModule mod _ mbExports imp decls _) =
+ppHsModule (HsModule mod _ mbExports imp decls _ _) =
hunk ./src/FrontEnd/HsPretty.hs 724
-
-
-
hunk ./src/FrontEnd/HsSyn.hs 10
+import Options
hunk ./src/FrontEnd/HsSyn.hs 44
-    hsModuleOptions :: [String]
+    hsModuleOptions :: [String],
+    hsModuleOpt :: Opt
hunk ./src/Ho/Build.hs 618
-    noPrelude =   or $ not (optPrelude options):[ opt == c | opt <- hsModuleOptions x, c <- ["-N","--noprelude"]]
+    noPrelude = FO.Prelude `Set.notMember` optFOptsSet (hsModuleOpt x)
hunk ./src/Ho/ReadSource.hs 25
-import Support.TempDir
+import FrontEnd.SrcLoc
hunk ./src/Ho/ReadSource.hs 31
+import Support.TempDir
hunk ./src/Ho/ReadSource.hs 39
-preprocessHs fn lbs = preprocess (collectFileOpts fn (LBSU.toString $ LBS.take 2048 lbs)) fn lbs
+preprocessHs fn lbs = preprocess (fst $ collectFileOpts fn (LBSU.toString $ LBS.take 2048 lbs)) fn lbs
hunk ./src/Ho/ReadSource.hs 60
-collectFileOpts fn s = opt where
-    Just opt = fileOptions opts `mplus` Just options
+collectFileOpts fn s = (opt,isJust fopts)  where
+    copts os = [ as | (x,as) <- popts, x `elem` os]
+    Just opt = fopts `mplus` Just options
+    fopts = fileOptions opts
hunk ./src/Ho/ReadSource.hs 65
-    opts' = concat [ words as | (x,as) <- popts, x `elem` ["OPTIONS","JHC_OPTIONS","OPTIONS_JHC"]]
-    opts = opts' ++ [ "--noprelude" | ("NOPRELUDE",_) <- popts] ++ langs
-    langs = catMaybes $ map (flip lookup langmap) $ concat [ words (map (\c -> if c == ',' then ' ' else toLower c) as) | ("LANGUAGE",as) <- popts ]
+    opts' = concatMap words (copts ["OPTIONS","JHC_OPTIONS","OPTIONS_JHC"])
+    opts = opts' ++ [ "-fno-prelude" | ("NOPRELUDE",_) <- popts] ++ langs
+    langs = catMaybes $ map (`lookup` langmap) $ concatMap
+        (words . (map (\c -> if c == ',' then ' ' else toLower c)))
+        (copts ["LANGUAGE","JHC_LANGUAGE"] ++ optExtensions options ++ [ o | '-':'X':o <- opts'])
hunk ./src/Ho/ReadSource.hs 75
-    "noimplicitprelude" ==> "--noprelude",
-    "unboxedtuples" ==> "unboxed-tuples"
-    ] where x ==> y = (x,if head y == '-' then y else "-f" ++ y)
+    "noimplicitprelude" ==> "no-prelude",
+    "implicitprelude" ==> "prelude",
+    "unboxedtuples" ==> "unboxed-tuples",
+    "unboxedvalues" ==> "unboxed-values",
+    "monomorphismrestriction" ==> "monomorphism-restriction",
+    "nomonomorphismrestriction" ==> "no-monomorphism-restriction",
+    "magichash" ==> "unboxed-values"
+    ] where x ==> y = (x,"-f" ++ y) -- if head y == '-' then y else "-f" ++ y)
hunk ./src/Ho/ReadSource.hs 99
-    let fileOpts = collectFileOpts fn (LBSU.toString $ LBS.take 2048 lbs)
-    lbs' <- preprocess fileOpts fn lbs
+    lbs' <- preprocessHs fn lbs
hunk ./src/Ho/ReadSource.hs 110
-    case runParserWithMode (parseModeOptions $ collectFileOpts fn s) { parseFilename = fn } parse  s'  of
-                      (ws,ParseOk e) -> processErrors ws >> return (e,LBSU.fromString s')
+    let (fileOpts',ogood) = collectFileOpts fn s
+    unless ogood $
+        warn (bogusASrcLoc { srcLocFileName = fn }) "unknown-option" "Unknown OPTIONS pragma"
+    case runParserWithMode (parseModeOptions fileOpts') { parseFilename = fn } parse  s'  of
+                      (ws,ParseOk e) -> processErrors ws >> return (e { hsModuleOpt = fileOpts' },LBSU.fromString s')
hunk ./src/Options.hs 168
+    optExtensions  ::  [String],
hunk ./src/Options.hs 180
-    optPrelude     :: !Bool,                   -- ^ No implicit Prelude.
hunk ./src/Options.hs 201
+    optExtensions  = [],
hunk ./src/Options.hs 216
-    optPrelude     = True,
hunk ./src/Options.hs 236
+    , Option ['X'] []            (ReqArg (\d -> optExtensions_u (d:)) "ExtensionName") "enable the given language extension"
hunk ./src/Options.hs 242
-    , Option ['N'] ["noprelude"] (NoArg  (optPrelude_s False))         "do not automatically import the prelude"