Add a --supported-languages flag
authorIan Lynagh <igloo@earth.li>
Sun, 5 Aug 2007 15:33:41 +0000 (15:33 +0000)
committerIan Lynagh <igloo@earth.li>
Sun, 5 Aug 2007 15:33:41 +0000 (15:33 +0000)
Print the list of strings that are accepted in a LANGUAGE pragma,
or as a -XFoo flag. (No can be prepended to any of the strings).

compiler/main/DynFlags.hs
compiler/main/Main.hs
docs/users_guide/flags.xml
docs/users_guide/using.xml

index 73cd8eb..f12bb79 100644 (file)
@@ -47,7 +47,8 @@ module DynFlags (
         allFlags,
 
        -- misc stuff
-       machdepCCOpts, picCCOpts
+       machdepCCOpts, picCCOpts,
+    supportedLanguages,
   ) where
 
 #include "HsVersions.h"
@@ -1169,6 +1170,8 @@ fFlags = [
   ( "allow-incoherent-instances",       Opt_IncoherentInstances )
   ]
 
+supportedLanguages :: [String]
+supportedLanguages = map fst xFlags
 
 -- These -X<blah> flags can all be reversed with -XNo<blah>
 xFlags :: [(String, DynFlag)]
index 964b488..3c94bf5 100644 (file)
@@ -33,7 +33,7 @@ import Packages               ( dumpPackages )
 import DriverPhases    ( Phase(..), isSourceFilename, anyHsc,
                          startPhase, isHaskellSrcFilename )
 import StaticFlags
-import DynFlags         ( defaultDynFlags )
+import DynFlags
 import BasicTypes      ( failed )
 import ErrUtils                ( putMsg )
 import FastString      ( getFastStringTable, isZEncoded, hasZEncoding )
@@ -85,11 +85,13 @@ main =
   -- to find out what version of GHC it's using before package.conf
   -- exists, so starting the session fails.
   case cli_mode of
-    ShowVersion     -> do showVersion
-                          exitWith ExitSuccess
-    ShowNumVersion  -> do putStrLn cProjectVersion
-                          exitWith ExitSuccess
-    _               -> return ()
+    ShowSupportedLanguages  -> do showSupportedLanguages
+                                  exitWith ExitSuccess
+    ShowVersion             -> do showVersion
+                                  exitWith ExitSuccess
+    ShowNumVersion          -> do putStrLn cProjectVersion
+                                  exitWith ExitSuccess
+    _                       -> return ()
 
   -- start our GHC session
   session <- GHC.newSession mbMinusB
@@ -153,18 +155,21 @@ main =
        ---------------- Final sanity checking -----------
   checkOptions cli_mode dflags srcs objs
 
-       ---------------- Do the business -----------
+  ---------------- Do the business -----------
+  let alreadyHandled = panic (show cli_mode ++
+                              " should already have been handled")
   case cli_mode of
-    ShowUsage       -> showGhcUsage dflags cli_mode
-    PrintLibdir     -> putStrLn (topDir dflags)
-    ShowVersion     -> panic "ShowVersion should already have been handled"
-    ShowNumVersion  -> panic "ShowNumVersion should already have been handled"
-    ShowInterface f -> doShowIface dflags f
-    DoMake          -> doMake session srcs
-    DoMkDependHS    -> doMkDependHS session (map fst srcs)
-    StopBefore p    -> oneShot dflags p srcs
-    DoInteractive   -> interactiveUI session srcs Nothing
-    DoEval expr     -> interactiveUI session srcs (Just expr)
+    ShowUsage              -> showGhcUsage dflags cli_mode
+    PrintLibdir            -> putStrLn (topDir dflags)
+    ShowSupportedLanguages -> alreadyHandled
+    ShowVersion            -> alreadyHandled
+    ShowNumVersion         -> alreadyHandled
+    ShowInterface f        -> doShowIface dflags f
+    DoMake                 -> doMake session srcs
+    DoMkDependHS           -> doMkDependHS session (map fst srcs)
+    StopBefore p           -> oneShot dflags p srcs
+    DoInteractive          -> interactiveUI session srcs Nothing
+    DoEval expr            -> interactiveUI session srcs (Just expr)
 
   dumpFinalStats dflags
   exitWith ExitSuccess
@@ -291,6 +296,7 @@ verifyOutputFiles dflags = do
 data CmdLineMode
   = ShowUsage               -- ghc -?
   | PrintLibdir             -- ghc --print-libdir
+  | ShowSupportedLanguages  -- ghc --supported-languages
   | ShowVersion             -- ghc -V/--version
   | ShowNumVersion          -- ghc --numeric-version
   | ShowInterface String    -- ghc --show-iface
@@ -354,6 +360,7 @@ mode_flags =
   ,  ( "V"              , PassFlag (setMode ShowVersion))
   ,  ( "-version"       , PassFlag (setMode ShowVersion))
   ,  ( "-numeric-version", PassFlag (setMode ShowNumVersion))
+  ,  ( "-supported-languages", PassFlag (setMode ShowSupportedLanguages))
 
       ------- interfaces ----------------------------------------------------
   ,  ( "-show-iface"     , HasArg (\f -> setMode (ShowInterface f)
@@ -442,6 +449,10 @@ showBanner cli_mode dflags = do
        hPutStr stderr " booted by GHC version "
        hPutStrLn stderr cBooterVersion
 
+showSupportedLanguages :: IO ()
+showSupportedLanguages = do mapM_ putStrLn supportedLanguages
+                            exitWith ExitSuccess
+
 showVersion :: IO ()
 showVersion = do
   putStrLn (cProjectName ++ ", version " ++ cProjectVersion)
index eaa6225..b0dbfb1 100644 (file)
              <entry>-</entry>
            </row>
            <row>
+             <entry><option>&ndash;&ndash;supported-languages</option></entry>
+             <entry>display the supported language extensions</entry>
+             <entry>mode</entry>
+             <entry>-</entry>
+           </row>
+           <row>
              <entry><option>&ndash;&ndash;version</option></entry>
              <entry>display GHC version</entry>
              <entry>mode</entry>
index c24a20c..7a1391c 100644 (file)
@@ -343,6 +343,18 @@ module X where
       <varlistentry>
        <term>
           <cmdsynopsis>
+            <command>ghc --supported-languages</command>
+          </cmdsynopsis>
+          <indexterm><primary><option>&ndash;&ndash;supported-languages</option></primary></indexterm>
+        </term>
+       <listitem>
+         <para>Print the supported language extensions.</para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term>
+          <cmdsynopsis>
             <command>ghc --version</command>
             <command>ghc -V</command>
           </cmdsynopsis>