aboutsummaryrefslogtreecommitdiff
path: root/sil.icl
diff options
context:
space:
mode:
Diffstat (limited to 'sil.icl')
-rw-r--r--sil.icl21
1 files changed, 16 insertions, 5 deletions
diff --git a/sil.icl b/sil.icl
index 8bfe037..b73f25c 100644
--- a/sil.icl
+++ b/sil.icl
@@ -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
)