summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2007-08-05 15:33:41 +0000
committerIan Lynagh <igloo@earth.li>2007-08-05 15:33:41 +0000
commitd4050431de1adddedb240e497f77f89301f77070 (patch)
tree2c934a59a89e8908c168ccb4055d5301118d0fc6
parent4d401b9d0514c93efc296ac99f0e89e4514996b7 (diff)
downloadhaskell-d4050431de1adddedb240e497f77f89301f77070.tar.gz
Add a --supported-languages flag
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).
-rw-r--r--compiler/main/DynFlags.hs5
-rw-r--r--compiler/main/Main.hs45
-rw-r--r--docs/users_guide/flags.xml6
-rw-r--r--docs/users_guide/using.xml12
4 files changed, 50 insertions, 18 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 73cd8eb068..f12bb7927f 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -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)]
diff --git a/compiler/main/Main.hs b/compiler/main/Main.hs
index 964b48804d..3c94bf5586 100644
--- a/compiler/main/Main.hs
+++ b/compiler/main/Main.hs
@@ -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)
diff --git a/docs/users_guide/flags.xml b/docs/users_guide/flags.xml
index eaa622596f..b0dbfb1f94 100644
--- a/docs/users_guide/flags.xml
+++ b/docs/users_guide/flags.xml
@@ -60,6 +60,12 @@
<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>
diff --git a/docs/users_guide/using.xml b/docs/users_guide/using.xml
index c24a20c3c9..7a1391ce85 100644
--- a/docs/users_guide/using.xml
+++ b/docs/users_guide/using.xml
@@ -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>