diff options
| author | hallgren <hallgren@chalmers.se> | 2013-11-25 21:12:11 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2013-11-25 21:12:11 +0000 |
| commit | 9d7fdf7c9a525a3b5659a566f76d26d151dcd664 (patch) | |
| tree | 9ea97377d9938fc382c2036fa4c8fef9c33e33d8 /src/compiler/GFC.hs | |
| parent | 3210a506484864430504ed1caf2f547bb674e701 (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.hs | 15 |
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 |
