From 8d6e61a8df4480385a1f2ef29a96f6a88af9e3ba Mon Sep 17 00:00:00 2001 From: hallgren Date: Mon, 10 Aug 2015 14:12:51 +0000 Subject: gf -cshell: preliminary support for the C run-time system in the GF shell Some C run-time functionality is now available in the GF shell, by starting GF with 'gf -cshell' or 'gf -crun'. Only limited functionality is available when running the shell in these modes: - You can only import .pgf files, not source files. - The -retain flag can not be used and the commands that require it to work are not available. - Only 18 of the 40 commands available in the usual shell have been implemented. The 'linearize' and 'parse' commands are the only ones that call the C run-time system, and they support only a limited set of options and flags. Use the 'help' commmands for details. - A new command 'generate_all', that calls PGF2.generateAll, has been added. Unfortuntaly, using it causes 'segmentation fault'. This is implemented by adding two new modules: GF.Command.Commands2 and GF.Interactive2. They are copied and modified versions of GF.Command.Commands and GF.Interactive, respectively. Code for unimplemented commands and other code that has not been adapted to the C run-time system has been left in place, but commented out, pending further work. --- src/compiler/GF/Main.hs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'src/compiler/GF/Main.hs') diff --git a/src/compiler/GF/Main.hs b/src/compiler/GF/Main.hs index 1679c376c..642ddf565 100644 --- a/src/compiler/GF/Main.hs +++ b/src/compiler/GF/Main.hs @@ -1,7 +1,11 @@ -- | GF main program (grammar compiler, interactive shell, http server) +{-# LANGUAGE CPP #-} module GF.Main where import GF.Compiler -import GF.Interactive +import qualified GF.Interactive as GFI1 +#ifdef C_RUNTIME +import qualified GF.Interactive2 as GFI2 +#endif import GF.Data.ErrM import GF.Infra.Option import GF.Infra.UseIO @@ -43,7 +47,17 @@ mainOpts opts files = case flag optMode opts of ModeVersion -> putStrLn $ "Grammatical Framework (GF) version " ++ showVersion version ++ "\n" ++ buildInfo ModeHelp -> putStrLn helpMessage - ModeInteractive -> mainGFI opts files - ModeRun -> mainRunGFI opts files - ModeServer port -> mainServerGFI opts port files + ModeServer port -> GFI1.mainServerGFI opts port files ModeCompiler -> mainGFC opts files + ModeInteractive -> GFI1.mainGFI opts files + ModeRun -> GFI1.mainRunGFI opts files +#ifdef C_RUNTIME + ModeInteractive2 -> GFI2.mainGFI opts files + ModeRun2 -> GFI2.mainRunGFI opts files +#else + ModeInteractive2 -> noCruntime + ModeRun2 -> noCruntime + where + noCruntime = do ePutStrLn "GF configured without C run-time support" + exitFailure +#endif -- cgit v1.2.3