From e0bc6308e07edf4302242e434932c9da42c162bd Mon Sep 17 00:00:00 2001 From: hallgren Date: Fri, 27 Feb 2015 13:49:13 +0000 Subject: GF shell: create a PGF also when the -retain flag is used The commands available in the shell after import -retain are now a superset of the commands available after import without -retain. The PGF is created lazily, so there should be no performance penalty if the PGF isn't needed. If there are errors, they won't be reported until a command that uses the PGF is entered. --- src/compiler/GF/Interactive.hs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'src/compiler/GF/Interactive.hs') diff --git a/src/compiler/GF/Interactive.hs b/src/compiler/GF/Interactive.hs index 82806bebb..15c14bbbe 100644 --- a/src/compiler/GF/Interactive.hs +++ b/src/compiler/GF/Interactive.hs @@ -355,15 +355,21 @@ importInEnv :: GFEnv -> Options -> [FilePath] -> SIO GFEnv importInEnv gfenv opts files | flag optRetainResource opts = do src <- importSource (grammar gfenv) opts files - return $ gfenv {grammar = src} + pgf <- lazySIO importPGF -- duplicates some work, better to link src + return $ gfenv {grammar = src, commandenv = mkCommandEnv pgf} | otherwise = - do let opts' = addOptions (setOptimization OptCSE False) opts - pgf0 = multigrammar (commandenv gfenv) - pgf1 <- importGrammar pgf0 opts' files - if (verbAtLeast opts Normal) - then putStrLnFlush $ unwords $ "\nLanguages:" : map showCId (languages pgf1) - else done + do pgf1 <- importPGF return $ gfenv { commandenv = mkCommandEnv pgf1 } + where + importPGF = + do let opts' = addOptions (setOptimization OptCSE False) opts + pgf0 = multigrammar (commandenv gfenv) + pgf1 <- importGrammar pgf0 opts' files + if (verbAtLeast opts Normal) + then putStrLnFlush $ + unwords $ "\nLanguages:" : map showCId (languages pgf1) + else done + return pgf1 tryGetLine = do res <- try getLine -- cgit v1.2.3