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.
This commit is contained in:
hallgren
2015-02-27 13:49:13 +00:00
parent d3f6b9851f
commit e0bc6308e0
2 changed files with 17 additions and 9 deletions

View File

@@ -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