diff options
| author | hallgren <hallgren@chalmers.se> | 2015-02-27 13:49:13 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2015-02-27 13:49:13 +0000 |
| commit | e0bc6308e07edf4302242e434932c9da42c162bd (patch) | |
| tree | 338cabbc8ab4ae2cf78775074e30496ee275e8de /src/compiler/GF/Interactive.hs | |
| parent | d3f6b9851f696b0b5f476f8e70f8c9797825df11 (diff) | |
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.
Diffstat (limited to 'src/compiler/GF/Interactive.hs')
| -rw-r--r-- | src/compiler/GF/Interactive.hs | 20 |
1 files changed, 13 insertions, 7 deletions
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 |
