summaryrefslogtreecommitdiff
path: root/src/GF/Compile
diff options
context:
space:
mode:
authoraarne <unknown>2003-11-14 12:36:23 +0000
committeraarne <unknown>2003-11-14 12:36:23 +0000
commit5a7d6e542d7fc0c01bec9163e4be732ac1c6d217 (patch)
tree7e7899236393081209aa494b391d3409d087fcc3 /src/GF/Compile
parent37384dbe06913a0352d4459050c1382874a45a62 (diff)
New unicodings.
New unicodings. Module with works. Better compilation of old GF.
Diffstat (limited to 'src/GF/Compile')
-rw-r--r--src/GF/Compile/Compile.hs30
-rw-r--r--src/GF/Compile/GetGrammar.hs6
2 files changed, 26 insertions, 10 deletions
diff --git a/src/GF/Compile/Compile.hs b/src/GF/Compile/Compile.hs
index 4364b7b2c..404620a28 100644
--- a/src/GF/Compile/Compile.hs
+++ b/src/GF/Compile/Compile.hs
@@ -54,6 +54,21 @@ batchCompileOld f = compileOld defOpts f
compileModule :: Options -> ShellState -> FilePath ->
IOE (GFC.CanonGrammar, (SourceGrammar,[(FilePath,ModTime)]))
+compileModule opts st0 file | oElem showOld opts = do
+ let putp = putPointE opts
+ let path = [] ----
+ grammar1 <- putp ("- parsing old gf" +++ file) $ getOldGrammar opts file
+ let mods = modules grammar1
+ let env = compileEnvShSt st0 []
+ (_,sgr,cgr) <- foldM (comp putp path) env mods
+ return $ (reverseModules cgr, -- to preserve dependency order
+ (reverseModules sgr,[]))
+ where
+ comp putp path env sm0 = do
+ (k',sm) <- makeSourceModule opts env sm0
+ cm <- putp " generating code... " $ generateModuleCode opts path sm
+ extendCompileEnvInt env (k',sm,cm)
+
compileModule opts1 st0 file = do
opts0 <- ioeIO $ getOptionsFromFile file
let useFileOpt = maybe False (const True) $ getOptVal opts0 pathList
@@ -168,7 +183,6 @@ compileSourceModule opts env@(k,gr,can) mo@(i,mi) = do
mo1 <- ioeErr $ rebuildModule mos mo
mo1b <- ioeErr $ extendModule mos mo1
- ---- prDebug mo1b
case mo1b of
(_,ModMod n) | not (isCompleteModule n) -> do
@@ -185,8 +199,8 @@ compileSourceModule opts env@(k,gr,can) mo@(i,mi) = do
return (k',mo4)
where
- prDebug mo = ioeIO $ putStrLn $ prGrammar $ MGrammar [mo] ---- debug
-
+ ---- prDebug mo = ioeIO $ putStrLn $ prGrammar $ MGrammar [mo] ---- debug
+ prDebug mo = ioeIO $ print $ length $ lines $ prGrammar $ MGrammar [mo]
generateModuleCode :: Options -> InitPath -> SourceModule -> IOE GFC.CanonModule
generateModuleCode opts path minfo@(name,info) = do
@@ -207,12 +221,14 @@ generateModuleCode opts path minfo@(name,info) = do
return (gfcFile pname, code)
if isCompilable info && emit && nomulti
then ioeIO $ writeFile file out >> putStr (" wrote file" +++ file)
- else ioeIO $ putStrFlush "no need to save for this module "
+ else ioeIO $ putStrFlush $ "no need to save module" +++ prt name
return minfo'
where
- isCompilable _ = True ---- isCompilableModule ---- emit code for interfaces
+ isCompilable mi = case mi of
+ ModMod m -> not $ isModCnc m && mstatus m == MSIncomplete
+ _ -> True
nomulti = not $ oElem makeMulti opts
- emit = oElem emitCode opts
+ emit = oElem emitCode opts && not (oElem notEmitCode opts)
optim = oElem optimizeCanon opts
-- for old GF: sort into modules, write files, compile as usual
@@ -220,7 +236,7 @@ generateModuleCode opts path minfo@(name,info) = do
compileOld :: Options -> FilePath -> IOE GFC.CanonGrammar
compileOld opts file = do
let putp = putPointE opts
- grammar1 <- putp ("- parsing old gf" +++ file) $ getOldGrammar file
+ grammar1 <- putp ("- parsing old gf" +++ file) $ getOldGrammar opts file
files <- mapM writeNewGF $ modules grammar1
(_,_,grammar) <- foldM (compileOne opts) emptyCompileEnv files
return grammar
diff --git a/src/GF/Compile/GetGrammar.hs b/src/GF/Compile/GetGrammar.hs
index 32efb960b..ef9e0944f 100644
--- a/src/GF/Compile/GetGrammar.hs
+++ b/src/GF/Compile/GetGrammar.hs
@@ -33,11 +33,11 @@ getSourceModule file = do
-- for old GF format with includes
-getOldGrammar :: FilePath -> IOE SourceGrammar
-getOldGrammar file = do
+getOldGrammar :: Options -> FilePath -> IOE SourceGrammar
+getOldGrammar opts file = do
defs <- parseOldGrammarFiles file
let g = A.OldGr A.NoIncl defs
- ioeErr $ transOldGrammar g file
+ ioeErr $ transOldGrammar opts file g
parseOldGrammarFiles :: FilePath -> IOE [A.TopDef]
parseOldGrammarFiles file = do