diff options
Diffstat (limited to 'sil.icl')
-rw-r--r-- | sil.icl | 21 |
1 files changed, 16 insertions, 5 deletions
@@ -14,12 +14,14 @@ import Control.Monad import Data.Error from Data.Func import $ import Data.Functor +import Data.Tuple import System.CommandLine import System.File import System.Process import ABC.Assembler +from Sil.Check import :: CheckError, checkProgram import qualified Sil.Compile as SC from Sil.Compile import :: CompileError, instance toString CompileError import Sil.Parse @@ -30,6 +32,7 @@ from Sil.Util.Printer import :: PrintState, instance zero PrintState, :: CLI = { prettyprint :: Bool + , check :: Bool , compile :: Bool , generate :: Bool , run :: Bool @@ -40,6 +43,7 @@ instance zero CLI where zero = { prettyprint = False + , check = False , compile = False , generate = False , run = False @@ -63,9 +67,15 @@ Start w | isError prog # err = err <<< toString (fromError prog) <<< "\r\n" = finish io err w +# prog = fromOk prog # io = if args.prettyprint - (io <<< print zero (fromOk prog) <<< "\r\n") + (io <<< print zero prog <<< "\r\n") io +# (errs, err) = if args.check + (appSnd fromJust $ checkProgram (Just err) prog) + ([], err) +| not (isEmpty errs) + = finish io err w | not args.compile = finish io err w # (ok,f,w) = fopen "sil_compiled.dcl" FWriteText w @@ -79,7 +89,7 @@ Start w | not ok # err = err <<< "Could not open 'sil_compiled.abc' for writing\r\n" = finish io err w -# f = f <<< 'SC'.compile (fromOk prog) +# f = f <<< 'SC'.compile prog # (_,w) = fclose f w | not args.generate = finish io err w @@ -98,9 +108,10 @@ where arg :: Parser String (CLI -> CLI) arg = peek >>= \opt -> ( item "--pretty-print" *> pure (\cli -> {cli & prettyprint=True}) - <|> item "--compile" *> pure (\cli -> {cli & compile=True}) - <|> item "--generate" *> pure (\cli -> {cli & generate=True}) - <|> item "--run" *> pure (\cli -> {cli & run=True}) + <|> item "--check" *> pure (\cli -> {cli & check=True}) + <|> item "--compile" *> pure (\cli -> {cli & compile=True}) + <|> item "--generate" *> pure (\cli -> {cli & generate=True}) + <|> item "--run" *> pure (\cli -> {cli & run=True}) <|> (satisfy isFilename >>= \name -> pure (\cli -> {cli & inputfile=name})) <?> Invalid "command line argument" opt ) |