summaryrefslogtreecommitdiff
path: root/src/compiler/GFC.hs
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2013-11-25 21:12:11 +0000
committerhallgren <hallgren@chalmers.se>2013-11-25 21:12:11 +0000
commit9d7fdf7c9a525a3b5659a566f76d26d151dcd664 (patch)
tree9ea97377d9938fc382c2036fa4c8fef9c33e33d8 /src/compiler/GFC.hs
parent3210a506484864430504ed1caf2f547bb674e701 (diff)
Change how GF deals with character encodings in grammar files
1. The default encoding is changed from Latin-1 to UTF-8. 2. Alternate encodings should be specified as "--# -coding=enc", the old "flags coding=enc" declarations have no effect but are still checked for consistency. 3. A transitional warning is generated for files that contain non-ASCII characters without specifying a character encoding: "Warning: default encoding has changed from Latin-1 to UTF-8" 4. Conversion to Unicode is now done *before* lexing. This makes it possible to allow arbitrary Unicode characters in identifiers. But identifiers are still stored as ByteStrings, so they are limited to Latin-1 characters for now. 5. Lexer.hs is no longer part of the repository. We now generate the lexer from Lexer.x with alex>=3. Some workarounds for bugs in alex-3.0 were needed. These bugs might already be fixed in newer versions of alex, but we should be compatible with what is shipped in the Haskell Platform.
Diffstat (limited to 'src/compiler/GFC.hs')
-rw-r--r--src/compiler/GFC.hs15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/compiler/GFC.hs b/src/compiler/GFC.hs
index dd9f1771b..99156e16d 100644
--- a/src/compiler/GFC.hs
+++ b/src/compiler/GFC.hs
@@ -24,7 +24,7 @@ import qualified Data.ByteString.Lazy as BSL
import System.FilePath
import System.IO
import Control.Exception
-
+import Control.Monad(unless)
mainGFC :: Options -> [FilePath] -> IO ()
mainGFC opts fs = do
@@ -46,9 +46,8 @@ compileSourceFiles :: Options -> [FilePath] -> IOE ()
compileSourceFiles opts fs =
do gr <- batchCompile opts fs
let cnc = justModuleName (last fs)
- if flag optStopAfterPhase opts == Compile
- then return ()
- else do pgf <- link opts (identS cnc) gr
+ unless (flag optStopAfterPhase opts == Compile) $
+ do pgf <- link opts (identS cnc) gr
writePGF opts pgf
writeByteCode opts pgf
writeOutputs opts pgf
@@ -57,11 +56,9 @@ compileCFFiles :: Options -> [FilePath] -> IOE ()
compileCFFiles opts fs =
do s <- liftIO $ fmap unlines $ mapM readFile fs
let cnc = justModuleName (last fs)
- gf <- getCF cnc s
- gr <- compileSourceGrammar opts gf
- if flag optStopAfterPhase opts == Compile
- then return ()
- else do pgf <- link opts (identS cnc) gr
+ gr <- compileSourceGrammar opts =<< getCF cnc s
+ unless (flag optStopAfterPhase opts == Compile) $
+ do pgf <- link opts (identS cnc) gr
writePGF opts pgf
writeOutputs opts pgf